From a6ebba2e958b4f44a92b396024c64ddd17beaafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20W=C3=B3jcik?= Date: Sat, 3 Oct 2026 11:34:14 +0200 Subject: [PATCH] ZiomekOS v26.9.26 --- LICENSE | 19 + NOTICE.txt | 31 + README.md | 92 + bootscripts/Makefile | 62 + bootscripts/ziomekos/init.d/local | 65 + bootscripts/ziomekos/init.d/qemu-ga | 57 + .../ziomekos/rc.local.d/01-mount-efivars.sh | 8 + docs/BLFS-BOOK-12.4-nochunks.html | 281728 +++++++++++++++ docs/LFS-BOOK-12.4-NOCHUNKS.html | 59245 +++ meta/.gitignore | 1 + meta/Makefile | 26 + meta/render.sh | 47 + meta/src/etc/X11/wdm/motd.in | 2 + meta/src/etc/issue.in | 2 + meta/src/etc/lsb-release.in | 4 + meta/src/etc/motd.in | 12 + meta/src/etc/os-release.in | 7 + packages/archey4-4.15.0.0/README.md | 29 + .../archey4-4.15.0.0/ziomekos/ziomekos.py | 28 + packages/linux-6.16.1/ziomekos/config | 11656 + packages/wdm-1.28/README.md | 191 + packages/wdm-1.28/patches/.gitignore | 11 + .../patches/12_make_it_compile_on_lfs.patch | 20 + packages/wdm-1.28/ziomekos/motd | 2 + packages/wdm-1.28/ziomekos/wdm-config | 75 + .../drivers/video/logo/logo_linux_clut224.ppm | 883 + .../drivers/video/logo/logo_linux_mono.pbm | 185 + .../drivers/video/logo/logo_linux_vga16.ppm | 678 + resources/wdm-1.28/pixmaps/ziomekos.xpm | 392 + resources/ziomekos/ZiomekOS.png | Bin 0 -> 1710756 bytes resources/ziomekos/ZiomekOS.txt | 20 + screenshots/01-Boot_VM.png | Bin 0 -> 269379 bytes screenshots/02-WDM.png | Bin 0 -> 46305 bytes screenshots/03-Desktop_VM.png | Bin 0 -> 131103 bytes screenshots/04-Desktop_Swift14.png | Bin 0 -> 159922 bytes screenshots/05-Desktop_HP8000.png | Bin 0 -> 147399 bytes screenshots/06-Doom.png | Bin 0 -> 144921 bytes vars.sh | 4 + 38 files changed, 355582 insertions(+) create mode 100644 LICENSE create mode 100644 NOTICE.txt create mode 100644 README.md create mode 100644 bootscripts/Makefile create mode 100755 bootscripts/ziomekos/init.d/local create mode 100755 bootscripts/ziomekos/init.d/qemu-ga create mode 100755 bootscripts/ziomekos/rc.local.d/01-mount-efivars.sh create mode 100644 docs/BLFS-BOOK-12.4-nochunks.html create mode 100644 docs/LFS-BOOK-12.4-NOCHUNKS.html create mode 100644 meta/.gitignore create mode 100644 meta/Makefile create mode 100755 meta/render.sh create mode 100644 meta/src/etc/X11/wdm/motd.in create mode 100644 meta/src/etc/issue.in create mode 100644 meta/src/etc/lsb-release.in create mode 100644 meta/src/etc/motd.in create mode 100644 meta/src/etc/os-release.in create mode 100644 packages/archey4-4.15.0.0/README.md create mode 100644 packages/archey4-4.15.0.0/ziomekos/ziomekos.py create mode 100644 packages/linux-6.16.1/ziomekos/config create mode 100644 packages/wdm-1.28/README.md create mode 100644 packages/wdm-1.28/patches/.gitignore create mode 100644 packages/wdm-1.28/patches/12_make_it_compile_on_lfs.patch create mode 100644 packages/wdm-1.28/ziomekos/motd create mode 100644 packages/wdm-1.28/ziomekos/wdm-config create mode 100644 resources/linux-6.16.1/drivers/video/logo/logo_linux_clut224.ppm create mode 100644 resources/linux-6.16.1/drivers/video/logo/logo_linux_mono.pbm create mode 100644 resources/linux-6.16.1/drivers/video/logo/logo_linux_vga16.ppm create mode 100644 resources/wdm-1.28/pixmaps/ziomekos.xpm create mode 100644 resources/ziomekos/ZiomekOS.png create mode 100644 resources/ziomekos/ZiomekOS.txt create mode 100644 screenshots/01-Boot_VM.png create mode 100755 screenshots/02-WDM.png create mode 100755 screenshots/03-Desktop_VM.png create mode 100755 screenshots/04-Desktop_Swift14.png create mode 100755 screenshots/05-Desktop_HP8000.png create mode 100644 screenshots/06-Doom.png create mode 100644 vars.sh diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4250629 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2026-present Tomek Wójcik + +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. diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..0e61578 --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,31 @@ +Portions of the code in this repository contain work derived from Linux From +Scratch and Beyond Linux From Scratch projects. + +Copyright (c) 1999-2022, Gerard Beekmans + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions in any form must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Neither the name of "Linux From Scratch" nor the names of its + contributors may be used to endorse or promote products derived from + this material without specific prior written permission. + + * Any material derived from Linux From Scratch must contain a + reference to the "Linux From Scratch" project. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS +IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..31d484a --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# ZiomekOS + +![ZiomekOS Logo](resources/ziomekos/ZiomekOS.png "ZiomekOS") + +ZiomekOS is a custom operating system built on top of Linux From Scratch 12.4 +(System V). + +There's not much purpose to this project, really. I hit a writer's block in +another project and needed a distraction. I also wanted to relive the days of +daily driving Slackware. + +## Status + +At the time of writing, the OS is basically base LFS system, plus some stuff +from BLFS (mostly things needed for Xorg and ALSA) with some extra software +and tooling on top. + +The kernel is 6.16.1 (as specced in LFS book). The config was taken from +Debian 13, modded to match LFS requirements and drivers needed to boot without +initramfs. + +The bootlader is GRUB and the OS is configured with hybrid GPT+MBR to allow +running both on BIOS and UEFI systems. + +The OS boots into Xorg, using WDM. I've chosen Window Maker as the window +manager. I have a soft spot for WMaker. It used to be my main desktop back in +Linux days. Also, it introduced me to the world of NeXT and subsequently +Mac OS X :). + +Extra software on top of LFS and BLFS stuff is: WDM, Window Maker, wmclock, +Archey4 and Chocolate Doom. + +The OS was built in a Proxmox VM on my homelab's app server. It's been verified +to boot and work on my Acer Swift 14 Go laptop (UEFI) andHP8000 retro PC +(BIOS). + +## Content of this repo + +This repo contains extra code I came up with while building the OS. The +`packages/` directory contains code and resources for some of packages. +`resources/` contains non-code resources (e.g. pixmaps) used in the system. +`meta/` hosts code to generate the system's metadata by interpolating +templates. I got annoyed by having to edit multiple files when bumping version +numbers ;). + +## Screenshots + +![Boot (VM)](screenshots/01-Boot_VM.png "4c 8GB RAM VM with virtio SCSI, GPU and net") + +Boot (VM) + +![WDM](screenshots/02-WDM.png "Look at that WINGs UI :)") + +WDM + +![Desktop (VM)](screenshots/03-Desktop_VM.png "Window Maker is my fave window manager for X") + +Desktop (VM) + +![Desktop (Acer Swift 14 Go)](screenshots/04-Desktop_Swift14.png "The display is HiDPI but I could not make X use resolution other than native") + +Desktop (Acer Swift 14 Go) with glxgears (amdgpu) + +![Desktop (HP 8000)](screenshots/05-Desktop_HP8000.png "This is my Windows XP gaming box and the reason the OS is hybrid GPT+MBR") + +Desktop (HP 8000) with glxgears (nouveau) + +![Doom](screenshots/06-Doom.png "Chocolate Doom with Ultimate Doom WAD") + +Of course it runs Doom :) + +## Download + +The purpose of this thing was to build a Linux From Scratch ;). Of course +there's no images to download :D. + +## License + +Unless indicated otherwise, all the code in this repo is licensed under MIT +license. + +Portions of the code in this repository contain work derived from Linux From +Scratch and Beyond Linux From Scratch projects. See `NOTICE.txt` for info on +the license. + +Non-code resources in `resources/` are considered proprietary. + +## AI use indication + +ZiomekOS logos (both graphical and ASCII art) were created using gen AI tools. + +Some of the code was co-authored by Claude. The relevant files are tagged. diff --git a/bootscripts/Makefile b/bootscripts/Makefile new file mode 100644 index 0000000..eccd10e --- /dev/null +++ b/bootscripts/Makefile @@ -0,0 +1,62 @@ +# Largely based on BLFS Bootscripts Makefile from Linux From Scratch +SHELL=/bin/bash + +ETCDIR=/etc +LIBDIR=${DESTDIR}/lib/services +EXTDIR=${DESTDIR}${ETCDIR} +MODE=754 +DIRMODE=755 +CONFMODE=644 + +all: + @grep "^install" Makefile | cut -d ":" -f 1 + @echo "Select an appropriate install target from the above list" + +create-dirs: + install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc{0,1,2,3,4,5,6,S}.d + install -d -m ${DIRMODE} ${EXTDIR}/rc.d/init.d + install -d -m ${DIRMODE} ${EXTDIR}/sysconfig + +create-service-dir: + install -d -m ${DIRMODE} ${LIBDIR} + +install-qemu-ga: create-dirs + install -m ${MODE} ziomekos/init.d/qemu-ga ${EXTDIR}/rc.d/init.d/ + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc0.d/K00qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc1.d/K00qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc2.d/S35qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc3.d/S35qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc4.d/S35qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc5.d/S35qemu-ga + ln -sf ../init.d/qemu-ga ${EXTDIR}/rc.d/rc6.d/K00qemu-ga + +install-local: create-dirs + install -m ${MODE} ziomekos/init.d/local ${EXTDIR}/rc.d/init.d/ + install -m ${DIRMODE} ${EXTDIR}/rc.local.d + ln -sf ../init.d/local ${EXTDIR}/rc.d/rc2.d/S36local + ln -sf ../init.d/local ${EXTDIR}/rc.d/rc3.d/S36local + ln -sf ../init.d/local ${EXTDIR}/rc.d/rc4.d/S36local + ln -sf ../init.d/local ${EXTDIR}/rc.d/rc5.d/S36local + +uninstall-qemu-ga: + rm -f ${EXTDIR}/rc.d/init.d/qemu-ga + rm -f ${EXTDIR}/rc.d/rc0.d/K00qemu-ga + rm -f ${EXTDIR}/rc.d/rc1.d/K00qemu-ga + rm -f ${EXTDIR}/rc.d/rc2.d/S35qemu-ga + rm -f ${EXTDIR}/rc.d/rc3.d/S35qemu-ga + rm -f ${EXTDIR}/rc.d/rc4.d/S35qemu-ga + rm -f ${EXTDIR}/rc.d/rc5.d/S35qemu-ga + rm -f ${EXTDIR}/rc.d/rc6.d/K00qemu-ga + +uninstall-local: + rm -f ${EXTDIR}/rc.d/init.d/local + rm -f ${EXTDIR}/rc.d/rc2.d/S36local + rm -f ${EXTDIR}/rc.d/rc3.d/S36local + rm -f ${EXTDIR}/rc.d/rc4.d/S36local + rm -f ${EXTDIR}/rc.d/rc5.d/S36local + +.PHONY: all create-dirs create-service-dir \ + install-qemu-ga \ + install-local \ + uninstall-qemu-ga \ + uninstall-local \ diff --git a/bootscripts/ziomekos/init.d/local b/bootscripts/ziomekos/init.d/local new file mode 100755 index 0000000..d091f4c --- /dev/null +++ b/bootscripts/ziomekos/init.d/local @@ -0,0 +1,65 @@ +#!/bin/sh +######################################################################## +# Begin local +# +# Description : Perform local setup on startup +# +# Author : Tomek Wójcik +# +# Version : ZiomekOS 26.9.26 +# +######################################################################## + +### BEGIN INIT INFO +# Provides: local +# Required-Start: $network +# Should-Start: networkmanager wicd +# Required-Stop: $network +# Should-Stop: networkmanager wicd +# Default-Start: 2 3 4 5 +# Default-Stop: +# Short-Description: Local Setup +# Description: Local Setup +# X-LFS-Provided-By: ZiomekOS +### END INIT INFO + +. /lib/lsb/init-functions + +PARTS_DIR="/etc/rc.local.d" + +run_parts() { + local DIR=$1 + local SCRIPT RC + local RESULT=0 + + [ -d "$DIR" ] || return 0 + + for SCRIPT in "$DIR"/*; do + [ -f "$SCRIPT" ] && [ -x "$SCRIPT" ] || continue + + "$SCRIPT" + RC=$? + + if [ "$RC" -ne 0 ]; then + log_warning_msg "${SCRIPT} exited with status ${RC}" + [ "$RESULT" -eq 0 ] && RESULT=$RC + fi + done + + return "0" +} + +case "$1" in + start) + log_info_msg "Running rc.local scripts..." + evaluate_retval + run_parts $PARTS_DIR + ;; + + *) + echo "Usage: $0 {start}" + exit 1 + ;; +esac + +# End local diff --git a/bootscripts/ziomekos/init.d/qemu-ga b/bootscripts/ziomekos/init.d/qemu-ga new file mode 100755 index 0000000..3837f2e --- /dev/null +++ b/bootscripts/ziomekos/init.d/qemu-ga @@ -0,0 +1,57 @@ +#!/bin/sh +######################################################################## +# Begin qemu-ga +# +# Description : Start Qemu Guest Agent +# +# Author : Tomek Wójcik +# +# Version : ZiomekOS 26.9.26 +# +######################################################################## + +### BEGIN INIT INFO +# Provides: qemu-ga +# Required-Start: $network +# Should-Start: networkmanager wicd +# Required-Stop: $network +# Should-Stop: networkmanager wicd +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Qemu Guest Agent +# Description: Qemu Guest Agent +# X-LFS-Provided-By: ZiomekOS +### END INIT INFO + +. /lib/lsb/init-functions + +case "$1" in + start) + log_info_msg "Starting qemu-ga..." + start_daemon /usr/bin/qemu-ga -l /var/log/qemu-ga.log -d + evaluate_retval + ;; + + stop) + log_info_msg "Stopping qemu-ga..." + killproc /usr/bin/qemu-ga + evaluate_retval + ;; + + restart) + $0 stop + sleep 1 + $0 start + ;; + + status) + statusproc /usr/bin/qemu-ga + ;; + + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +# End qemu-ga diff --git a/bootscripts/ziomekos/rc.local.d/01-mount-efivars.sh b/bootscripts/ziomekos/rc.local.d/01-mount-efivars.sh new file mode 100755 index 0000000..0ca243b --- /dev/null +++ b/bootscripts/ziomekos/rc.local.d/01-mount-efivars.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env /bin/bash + +. /lib/lsb/init-functions + +if [ -d /sys/firmware/efi/efivars ]; then + log_info_msg "Mounting EFI vars fs...\n" +# mount /sys/firmware/efi/efivars +fi diff --git a/docs/BLFS-BOOK-12.4-nochunks.html b/docs/BLFS-BOOK-12.4-nochunks.html new file mode 100644 index 0000000..1b922ff --- /dev/null +++ b/docs/BLFS-BOOK-12.4-nochunks.html @@ -0,0 +1,281728 @@ + + + + + + + Beyond Linux® From Scratch (System V Edition) + + + + + + + +
+
+
+
+

+ Beyond + Linux® From Scratch (System + V Edition) +

+
+
+

+ Version 12.4 +

+
+
+
+

+ The BLFS Development Team +

+
+
+
+ +
+
+
+ +

+ Copyright © 1999-2025, 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 2025-09-01 +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Revision History +
+ Revision 12.4 + + 2025-09-01 + + Thirty-second Release +
+ Revision 12.3 + + 2025-03-05 + + Thirty-first Release +
+ Revision 12.2 + + 2024-09-01 + + Thirtieth Release +
+ Revision 12.1 + + 2024-03-01 + + Twenty-ninth Release +
+ Revision 12.0 + + 2023-09-01 + + Twenty-eighth Release +
+ Revision 11.3 + + 2023-03-01 + + Twenty-seventh Release +
+ Revision 11.2 + + 2022-09-01 + + Twenty-sixth Release +
+ Revision 11.1 + + 2022-03-01 + + Twenty-fifth Release +
+ Revision 11.0 + + 2021-09-01 + + Twenty-fourth Release +
+ Revision 10.1 + + 2021-03-01 + + Twenty-third Release +
+ Revision 10.0 + + 2020-09-01 + + Twenty-second Release +
+ Revision 9.1 + + 2020-03-01 + + Twenty-first Release +
+ Revision 9.0 + + 2019-09-01 + + Twentieth release +
+ Revision 8.4 + + 2019-03-01 + + Nineteenth release +
+ Revision 8.3 + + 2018-09-01 + + Eighteenth release +
+ Revision 8.2 + + 2018-03-02 + + Seventeenth release +
+ Revision 8.1 + + 2017-09-01 + + Sixteenth release +
+ Revision 8.0 + + 2017-02-25 + + Fifteenth release +
+ Revision 7.10 + + 2016-09-07 + + Fourteenth release +
+ Revision 7.9 + + 2016-03-08 + + Thirteenth release +
+ Revision 7.8 + + 2015-10-01 + + Twelfth release +
+ Revision 7.7 + + 2015-03-06 + + Eleventh release +
+ Revision 7.6 + + 2014-09-23 + + Tenth release +
+ Revision 7.5 + + 2014-03-05 + + Ninth release +
+ Revision 7.4 + + 2013-09-14 + + Eighth release +
+ Revision 6.3 + + 2008-08-24 + + Seventh release +
+ Revision 6.2 + + 2007-02-14 + + Sixth release +
+ Revision 6.1 + + 2005-08-14 + + Fifth release +
+ Revision 6.0 + + 2005-04-02 + + Fourth release +
+ Revision 5.1 + + 2004-06-05 + + Third release +
+ Revision 5.0 + + 2003-11-06 + + Second release +
+ Revision 1.0 + + 2003-04-25 + + First release +
+
+
+
+

+ Abstract +

+

+ This book follows on from the Linux From Scratch book. It + introduces and guides the reader through additions to the + system including networking, graphical interfaces, sound + support, and printer and scanner support. +

+
+
+
+
+
+
+
+
+
+

+ Dedication +

+
+
+
+

+ This book is dedicated to the LFS community +

+
+
+

+ Table of Contents +

+ +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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, and for one reason or another want to + manually build software and need some assistance. Note that the + material in this book, in particular the dependency listings, + assumes that you are using a basic LFS system with every package + listed in the LFS book already installed and configured. BLFS can + be used to create a range of diverse systems and so the target + audience is probably as wide as that of the LFS book. If you + found LFS useful, you should also like this! +

+

+ Since Release 7.4, the BLFS book version has matched the LFS book + version. This book may be incompatible with a previous or later + release of the LFS book. +

+
+
+
+
+

+ Organization +

+
+
+
+
+

+ This book is divided into the following fourteen parts. +

+

+ Part I - + Introduction +

+

+ This part contains essential information which is needed to + understand 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 text 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 + throughout 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 explain how to connect to a network when you aren't using + the simple static IP setup presented in the main LFS book. + Networking libraries and command-line networking tools are also + covered here. +

+

+ Part V - + Servers +

+

+ Here we show you how to set 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, along with some generic + X libraries and Window managers. +

+

+ Part VII + - KDE +

+

+ This part is for those who want to use the K Desktop Environment, or parts of 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 - + LXQt +

+

+ LXDE is another lightweight + alternative to GNOME and + KDE. +

+

+ Part XI + - More X Software +

+

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

+

+ Part XII + - Multimedia +

+

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

+

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

+

+ This part covers document handling, from applications like + Ghostscript, CUPS, and DocBook, all the way to texlive. +

+

+ Appendices +

+

+ The Appendices present information which doesn't belong in the + body of book; they are included as reference material. The + glossary of acronyms is a handy feature. +

+
+
+
+
+
+

+ 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. LFS provides instructions on how + to create a base system which can become anything from a web + server to a multimedia desktop system. BLFS attempts to guide + you in the process of going from the base system to your + intended destination. Choice is very much involved. +

+

+ Everyone who reads this book will want to read certain + sections. The Introduction, which you + are currently reading, contains generic information. Take + special note of the information in Chapter 2, + Important Information, as this contains comments about how + to unpack software, issues related to the use of different + locales, and various other considerations which apply + throughout the book. +

+

+ The part on Post + LFS Configuration and Extra Software is where most people + will want to turn next. This deals not only with configuration, + but also with Security (Chapter 4, Security), + File Systems (Chapter 5, + File Systems and Disk Management -- including GRUB for + UEFI), Text Editors (Chapter 6, Text + Editors), and Shells (Chapter 7, Shells). + Indeed, you may wish to reference some parts of this chapter + (especially the sections on Text Editors and File Systems) + while building your LFS system. +

+

+ Following these basic items, most people will want to at least + browse through the General + Libraries and Utilities part of the book. This contains + information on many items which are prerequisites for other + sections of the book, as well as some items (such as Chapter 13, + Programming) which are useful in their own right. You don't + have to install all of the libraries and packages found in this + part; each BLFS installation procedure tells you which other + packages this one depends upon. You can choose the program you + want to install, and see what it needs. (Don't forget to check + for nested dependencies!) +

+

+ Likewise, most people will probably want to look at the + Networking section. It + deals with connecting to the Internet or your LAN (Chapter 14, + Connecting to a Network) using a variety of methods such as + DHCP and PPP, and with items such as Networking Libraries + (Chapter 17, + Networking Libraries), plus various basic networking + programs and utilities. +

+

+ Once you have dealt with these basics, you may wish to + configure more advanced network services. These are dealt with + in the Servers part of the book. Those + wanting to build servers should find a good starting point + there. Note that this section also contains information on + several database packages. +

+

+ The next twelve chapters deal with desktop systems. This + portion of the book starts with a part talking about Graphical + Components. This part also deals with some generic X-based + libraries (Chapter 25, + Graphical Environment Libraries). After that, KDE, + GNOME, Xfce, and LXQt are + given their own parts, followed by one on X Software. +

+

+ The book then moves on to deal with Multimedia packages. Note + that many people may want to use the ALSA instructions from this chapter + when first starting their BLFS journey; the instructions are + placed here because it is the most logical place for them. +

+

+ The final part of the main BLFS book deals with Printing, + Scanning and Typesetting. This is useful for most people + with desktop systems, but even those who are creating dedicated + server systems may find it useful. +

+

+ We hope you enjoy using BLFS. May you realize your dream of + building the perfectly personalized Linux system! +

+
+
+
+
+

+ Conventions Used + in this Book +

+
+
+
+
+
+

+ Typographical Conventions +

+

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

+
./configure --prefix=/usr
+
+
+

+ This form of text should be typed exactly as shown unless + otherwise noted in the surrounding text. It is also used + to identify references to specific commands. +

+
+
+
install-info: unknown option
+`--dir-file=/mnt/lfs/usr/info/dir'
+
+
+

+ This form of text (blue, fixed width font) shows screen + output, probably the result of issuing a command. +

+
+
+
/boot/grub/grub.conf
+
+
+

+ This form of text (fixed width font) is used to show + filenames. +

+
+
+
+

+ Note +

+

+ Please configure your browser to display fixed-width text + with a good monospaced font, with which you can distinguish + the glyphs of Il1 or + O0 clearly. +

+
+

+ Emphasis +

+
+
+

+ This form of text is used for several purposes, but + mainly to emphasize important points, or to give examples + of what to type. +

+
+
+

+ https://www.linuxfromscratch.org/ +

+
+
+

+ This form of text is used for hypertext links external to + the book, such as HowTos, download locations, websites, + etc. +

+
+
+

+ seamonkey-2.53.21 +

+
+
+

+ This form of text is used for links internal to the book, + such as another section describing a different package. +

+
+
+
cat > $LFS/etc/group << "EOF"
+root:x:0:
+bin:x:1:
+......
+EOF
+
+
+

+ This style is mainly used when creating configuration + files. The first command (in bold) tells the system to + create the file $LFS/etc/group from whatever is typed + on the following lines, until the sequence EOF is + encountered. Therefore, this whole section is usually + typed exactly as shown. Remember, copy and paste is your + friend! +

+
+
+

+ <REPLACED + TEXT> +

+
+
+

+ This form of text is used to encapsulate text that should + be modified, and is not to be typed as shown, or copied + and pasted. The angle brackets are not part of the + literal text; they are part of the substitution. +

+
+
+

+ root +

+
+
+

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

+
+
+

+   +

+
+
+

+ Conventions Used for Package Dependencies +

+

+ When new packages are created, the software's authors depend + on prior work. In order to build a package in BLFS, these + dependencies must be built before the desired package can be + compiled. For each package, prerequisites are listed in one + or more separate sections: Required, Recommended, and + Optional. +

+

+ Required Dependencies +

+

+ These dependencies are the bare minimum needed to build the + package. Packages in LFS, and the required dependencies of + these required packages, are omitted from this list. Always + remember to check for nested dependencies. If a dependency is + said to be “runtime,” it is not needed for building + the package, but only to use it after installation. +

+

+ Recommended Dependencies +

+

+ These are dependencies the BLFS editors have determined are + important to give the package reasonable capabilities. If a + recommended dependency is not said to be “runtime,” package + installation instructions assume it is installed. If it is + not installed, the instructions may require modification, to + accommodate the missing package. A recommended “runtime” + dependency does not need to be installed before building the + package, but must be built afterwards for running the package + with reasonable capabilities. +

+

+ Optional Dependencies +

+

+ These are dependencies the package may use. Integration of optional + dependencies may be automatic by the package, or additional + steps not presented by BLFS may be necessary. Optional + dependencies are sometimes listed without explicit BLFS + instructions. In this case you must determine how to perform + the installation yourself. +

+

+   +

+
+
+

+ Conventions Used for Kernel Configuration Options +

+

+ Some packages require specific kernel configuration options. + The general layout for these looks like this: +

+
Master section --->
+  Subsection --->
+    [*]     Required parameter                                        [REQU_PAR]
+    <*>     Required parameter (not as module)                   [REQU_PAR_NMOD]
+    <*/M>   Required parameter (could be a module)                [REQU_PAR_MOD]
+    <M>     Required parameter (as a module)                 [REQU_PAR_MOD_ONLY]
+    < /*/M> Optional parameter                                         [OPT_PAR]
+    < /M>   Optional parameter (as a module if enabled)       [OPT_PAR_MOD_ONLY]
+    [ ]     Incompatible parameter                                  [INCOMP_PAR]
+    < >     Incompatible parameter (even as module)             [INCOMP_PAR_MOD]
+

+ [...] on the right gives the symbolic name of the option, so + you can easily check whether it is set in your .config file. Note that the .config file contains a CONFIG_ prefix before all symbolic names. + The meaning of the various entries is: +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Master + section + + top level menu item +
+ Subsection + + submenu item +
+ Required + parameter + + the option can either be built-in, or not + selected: it must be selected +
+ Required parameter + (not as module) + + the option can be built-in, a module, or not + selected (tri-state): it must be selected as + built-in +
+ Required parameter + (could be a module) + + the option can be built-in, a module, or not + selected: it must be selected, either as built-in + or as a module +
+ Required parameter (as + a module) + + the option can be built-in, a module, or not + selected: it must be selected as a module; + selecting it as built-in may cause unwanted + effects +
+ Optional + parameter + + the option can be built-in, a module, or not + selected: it may be selected as a module or + built-in if you need it for driving the hardware + or optional kernel features +
+ Optional parameter (as + a module if enabled) + + the option can be built-in, a module, or not + selected: it may be selected as a module if you + need it for driving the hardware or optional + kernel features, but selecting it as built-in may + cause unwanted effects +
+ Incompatible + parameter + + the option can either be built-in or not + selected: it must not be selected +
+ Incompatible parameter + (even as module) + + the option can be built-in, a module, or not + selected: it must not be selected +
+
+
+
+

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

+

+ The letter in blue is the hotkey + for this option. If you are running make menuconfig, you can + press a key to quickly traverse all the options with this key + as the hotkey on the screen. +

+

+   +

+
+
+

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

+

+ For packages which use ninja (i.e., anything using meson) or + rust, by default all cores are used; similar comments will be + seen on such packages even when the build time is minimal. +

+

+ Where even a parallel build takes more than 15 SBU, on + certain machines the time may be considerably greater even + when the build does not use swap. In particular, different + micro-architectures will build some files at different + relative speeds, and this can introduce delays when certain + make targets wait for another file to be created. Where a + large build uses a lot of C++ files, processors with + Simultaneous Multi Threading will share the Floating Point + Unit and can take 45% longer than when using four 'prime' + cores (measured on an intel i7 using taskset and keeping the + other cores idle). +

+

+ Some packages do not support parallel builds; for these, the + make command must specify -j1. Packages that are known to + impose such limits are so marked in the text. +

+
+
+
+
+
+

+ Book Version +

+
+
+
+
+

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

+
+
+
+
+

+ 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. +

+
+
+
+
+

+ 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. +

+
+
+
+
+

+ Change Log +

+
+
+
+
+

+ Current release: 12.4 – September 1st, 2025 +

+
+

+ Changelog Entries: +

+
    +
  • +

    + September 1st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Release of BLFS-12.4. +

      +
    • +
    +
    +
  • +
  • +

    + August 31st, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fix building Guile on 32-bit systems. +

      +
    • +
    • +

      + [renodr] - Update to krb5-1.22.1 (Security Update). + Fixes + #22015. +

      +
    • +
    • +

      + [renodr] - Update to Qt6 and QtWebEngine 6.9.2 + (Security Update). Fixes + #22025. +

      +
    • +
    • +

      + [renodr] - Update to udisks2-2.10.2 (Security + Update). Fixes + #22029. +

      +
    • +
    • +

      + [renodr] - Update to libreoffice-25.8.1.1. Fixes + + #22039. +

      +
    • +
    +
    +
  • +
  • +

    + August 28th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to kea-3.0.1. Fixes + #22026. +

      +
    • +
    +
    +
  • +
  • +

    + August 26th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to libreoffice-25.8.0.4. Fixes + + #22003. +

      +
    • +
    +
    +
  • +
  • +

    + August 25th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to FreeRDP-3.17.0. Fixes + + #22013. +

      +
    • +
    • +

      + [renodr] - Update to samba-4.22.4. Fixes + #22007. +

      +
    • +
    • +

      + [renodr] - Fixed building seahorse with gpgme-2.x. +

      +
    • +
    +
    +
  • +
  • +

    + August 24rd, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update to unifont-16.0.04 (GRUB font + data). +

      +
    • +
    +
    +
  • +
  • +

    + August 23rd, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to postfix-3.10.4. Fixes + + #21996. +

      +
    • +
    +
    +
  • +
  • +

    + August 22nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to cdrdao-1.2.5. Fixes + #22009. +

      +
    • +
    • +

      + [bdubbs] - Update to nano-8.6. Fixes + #22004. +

      +
    • +
    • +

      + [bdubbs] - Update to nmap-7.98. Fixes + #22006. +

      +
    • +
    • +

      + [thomas] - Update to bind-9.20.12. Fixes + #22002. +

      +
    • +
    +
    +
  • +
  • +

    + August 21st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to emacs-30.2. Fixes + #21967. +

      +
    • +
    • +

      + [bdubbs] - Update to mdadm-4.4. Fixes + #21987. +

      +
    • +
    • +

      + [bdubbs] - Update to btrfs-progs-v6.16. Fixes + + #21963. +

      +
    • +
    • +

      + [renodr] - Update to Thunderbird-140.2.0esr + (Security Update). Fixes + #21998. +

      +
    • +
    • +

      + [renodr] - Update to Firefox-140.2.0esr as well as + SpiderMonkey (Security Update). Fixes + #21990. +

      +
    • +
    • +

      + [bdubbs] - Update to ed-1.22.2. Fixes + #22001. +

      +
    • +
    +
    +
  • +
  • +

    + August 20th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to intel-microcode-20250812 + (Security Update). Fixes + #21997. +

      +
    • +
    • +

      + [renodr] - Update to mupdf-1.26.5. Fixes + #21960. +

      +
    • +
    • +

      + [bdubbs] - Update to librsvg-2.61.0. Fixes + + #21971. +

      +
    • +
    • +

      + [bdubbs] - Update to AppStream-1.0.6. Fixes + + #21968. +

      +
    • +
    • +

      + [renodr] - Update to fuse-3.17.4. Fixes + #22000. +

      +
    • +
    +
    +
  • +
  • +

    + August 19th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to cryptsetup-2.8.1. Fixes + + #21999. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.4.1. Fixes + + #21965. +

      +
    • +
    • +

      + [bdubbs] - Update to protobuf-32.0. Fixes + #21970. +

      +
    • +
    • +

      + [bdubbs] - Update to libdisplay-info-0.3.0. Fixes + + #21959. +

      +
    • +
    • +

      + [bdubbs] - Update to highway-1.3.0. Fixes + #21969. +

      +
    • +
    • +

      + [bdubbs] - Update to boost-1.89.0. Fixes + #21964. +

      +
    • +
    • +

      + [bdubbs] - Update to abseil-cpp-20250814.0. Fixes + + #21992. +

      +
    • +
    +
    +
  • +
  • +

    + August 18th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to requests-2.32.5 (Python + module). Fixes + #21995. +

      +
    • +
    • +

      + [bdubbs] - Update to clisp-2.49.95. Fixes + #21989. +

      +
    • +
    +
    +
  • +
  • +

    + August 17th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to libxfce4ui-4.20.2, + libxfce4windowing-4.20.4, xfce4-panel-4.20.5, + xfce4-session-4.20.3, xfce4-settings-4.20.2. Fixes + + #21974. +

      +
    • +
    +
    +
  • +
  • +

    + August 16th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to nss-3.115. Fixes + #21984. +

      +
    • +
    • +

      + [renodr] - Update to Python-3.13.7 (sync with LFS). + Fixes + #21972. +

      +
    • +
    • +

      + [renodr] - Update to vim-9.1.1629 (sync with LFS). + Fixes + #21980. +

      +
    • +
    • +

      + [renodr] - Performed the Python Dependency updates + for BLFS 12.4. This includes updates to + certifi-2025.1.31, charset-normalizer-3.4.3, + msgpack-1.1.1, pytz-2025.2, snowballstemmer-3.0.1, + and urllib3-2.5.0. Fixes + #21978. +

      +
    • +
    • +

      + [renodr] - Added the roman-numerals-py Python + Dependency. Fixes + #21977. +

      +
    • +
    • +

      + [renodr] - Update to pycairo-1.28.0 (Python + Module). Fixes + #21976. +

      +
    • +
    • +

      + [renodr] - Update to build-1.3.0 (Python Module). + Fixes + #21975. +

      +
    • +
    • +

      + [renodr] - Update to cython-3.1.3 (Python Module). + Fixes + #21966. +

      +
    • +
    • +

      + [renodr] - Update to sentry_sdk-2.35.0 (Python + Module). Fixes + #21720. +

      +
    • +
    • +

      + [renodr] - Update to luajit-20250816. Fixes + + #21982. +

      +
    • +
    • +

      + [renodr] - Update to x264-20250815. Fixes + #21981. +

      +
    • +
    • +

      + [renodr] - Update to postgresql-17.6 (Security + Update). fixes + #21973. +

      +
    • +
    • +

      + [renodr] - Update to ImageMagick-7.1.2-1 (Security + Update). Fixes + #21983. +

      +
    • +
    +
    +
  • +
  • +

    + August 15th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to biber-2.21. Fixes + #21843. +

      +
    • +
    • +

      + [renodr] - Update to mercurial-7.1. Fixes + #21547. +

      +
    • +
    • +

      + [zeckma] - Update to mesa-25.1.8. Fixes + #21748. +

      +
    • +
    • +

      + [renodr] - Performed the Perl Module Dependency + updates for BLFS 12.4. This includes updates to + Alien-Libxml2-0.20, + Business-ISBN-Data-20250815.001, DateTime-1.66, + DateTime-Locale-1.45, DateTime-TimeZone-2.65, + Module-Runtime, Path-Tiny-0.150, Specio-0.52, + Test-Deep-1.205, Test-File-1.995, + Test-Simple-1.302214, Text-CSV_XS-1.61, and + Tie-Cycle-1.231. Fixes + #21979. +

      +
    • +
    • +

      + [renodr] - Added the Clone::PP Perl Dependency, + needed for Specio-0.52. Part of + #21979. +

      +
    • +
    • +

      + [renodr] - Fixed starting GDM on SysV systems that + use X11 instead of Wayland, such as systems with + NVIDIA GPUs and virtual machines. +

      +
    • +
    +
    +
  • +
  • +

    + August 14th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fixed building OpenJDK with glibc-2.42. + Fixes + #21949. +

      +
    • +
    • +

      + [renodr] - Fixed building xine-lib with gcc-15. +

      +
    • +
    • +

      + [bdubbs] - Update to kde-gear-25.08.0 including + falkon, kate, and kwave. Fixes + #21554. +

      +
    • +
    +
    +
  • +
  • +

    + August 12th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to krb5-1.22. Fixes + #21942. +

      +
    • +
    +
    +
  • +
  • +

    + August 11th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to libxkbcommon-1.11.0. Fixes + + #21951. +

      +
    • +
    • +

      + [renodr] - Update to glib-2.84.4 (Security Update). + Fixes + #21958. +

      +
    • +
    +
    +
  • +
  • +

    + August 10th, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update to cargo-c-0.10.15. Fixes + + #21957. +

      +
    • +
    • +

      + [bdubbs] - Update to plasma-6.4.4 including for + lxqt: kwayland, libkscreen, and layer-shell-qt. + Fixes + #21543. +

      +
    • +
    • +

      + [bdubbs] - Update to kirigami-addons-1.9.0. Fixes + + #21609. +

      +
    • +
    • +

      + [renodr] - Fix building Qemu with + pip-25.2/Python-3.13.6. Thanks goes to Joe Locash + for the report and the link to the fix. Fixes + + #21955. +

      +
    • +
    • +

      + [renodr] - Fix building libplacebo with + Python-3.13.6. Thanks goes to Joe Locash for the + report and the link to the fix. Fixes + #21953. +

      +
    • +
    • +

      + [renodr] - Update the gstreamer stack to 1.26.5. + Fixes + #21948. +

      +
    • +
    • +

      + [renodr] - Update to gtk-3.24.50. Fixes + #21947. +

      +
    • +
    • +

      + [renodr] - Update to cmake-4.1.0. Fixes + #21945. +

      +
    • +
    • +

      + [bdubbs] - Update to kf6-6.17.0 including + extra-cmake-modules, frameworks, and for lxqt: + kconfig, kidletime, kwindowsystem, and solid. Fixes + + #21556. +

      +
    • +
    • +

      + [thomas] - Update to graphviz-13.1.2. Fixes + + #21956. +

      +
    • +
    • +

      + [thomas] - Update to mariadb-11.8.3. Fixes + + #21952. +

      +
    • +
    • +

      + [xry111] - Update to + hatch_fancy_pypi_readme-25.1.0, hatch_vcs-0.5.0, + iniconfig-2.1.0, markdown-3.8.2, + meson_python-0.18.0, pluggy-1.6.0, + pyproject_metadata-0.9.1, setuptools_scm-8.3.1, + smartypants-2.0.2, and + trove_classifiers-2025.8.6.13 (Python + dependencies). Addresses + #18562. +

      +
    • +
    +
    +
  • +
  • +

    + August 8th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to Python-3.13.6 (Security + Update). Fixes + #21943. +

      +
    • +
    • +

      + [bdubbs] - Update to gcc-15.2.0. Fixes + #21950. +

      +
    • +
    • +

      + [renodr] - Update to libxmlb-0.3.23. Fixes + + #21944. +

      +
    • +
    +
    +
  • +
  • +

    + August 7th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fixed building Time with GCC-15. +

      +
    • +
    • +

      + [zeckma] - Update to seamonkey-2.53.21 (security + update). Fixes + #21935. +

      +
    • +
    • +

      + [zeckma] - Update to thunderbird-140.1.1esr. Fixes + + #21941. +

      +
    • +
    +
    +
  • +
  • +

    + August 6th, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update to rustc-1.89.0. Fixes + #21946. +

      +
    • +
    • +

      + [xry111] - Update to Spidermonkey from + Firefox-140.1.0. Patch gjs to use it. Fixes + + #21772. +

      +
    • +
    • +

      + [renodr] - Update to ModemManager-1.24.2. Fixes + + #21932. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.6. Fixes + + #21927. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell-48.4. Fixes + + #21926. +

      +
    • +
    • +

      + [renodr] - Update to gnome-control-center-48.4. + Fixes + #21925. +

      +
    • +
    • +

      + [renodr] - Update to gnome-online-accounts-3.54.5. + Fixes + #21916. +

      +
    • +
    • +

      + [renodr] - Backported several patches from Arch and + Fedora to fix bugs in dvd+rw-tools and simplify the + page. Fixes + #21938. +

      +
    • +
    • +

      + [renodr] - Update to libreoffice-25.2.5.2. Fixes + + #21933. +

      +
    • +
    +
    +
  • +
  • +

    + August 5th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fixed CVE-2025-8194 in Python. Fixes + + #21895. +

      +
    • +
    • +

      + [renodr] - Update to epiphany-48.5. Fixes + #21934. +

      +
    • +
    • +

      + [renodr] - Update to WebKitGTK-2.48.5 (Security + Update). Fixes + #21904. +

      +
    • +
    • +

      + [bdubbs] - Update to mpg123-1.33.2. Fixes + #21940. +

      +
    • +
    • +

      + [renodr] - Fixed building the Ruby bindings in + Subversion when using GCC-15 and Ruby-3.4. Fixes + + #21885. +

      +
    • +
    • +

      + [renodr] - Update to 7zip-25.01 (Security Update). + Fixes + #21928. +

      +
    • +
    • +

      + [bdubbs] - Update to xscreensaver-6.12. Fixes + + #21937. +

      +
    • +
    • +

      + [bdubbs] - Update to FreeRDP-3.16.0. Fixes + + #21936. +

      +
    • +
    • +

      + [bdubbs] - Update to hwdata-0.398. Fixes + #21931. +

      +
    • +
    • +

      + [bdubbs] - Update to libqalculate-5.7.0. Fixes + + #21930. +

      +
    • +
    • +

      + [bdubbs] - Update to libgcrypt-1.11.2. Fixes + + #21929. +

      +
    • +
    • +

      + [renodr] - Fixed the paths for security + certificates in the text for Configuring The Java + Environment. Fixes + #21920. +

      +
    • +
    • +

      + [bdubbs] - Update to mariadb-11.8.2. Fixes + + #21084. +

      +
    • +
    +
    +
  • +
  • +

    + August 4th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to icewm-3.8.2. Fixes + #21924. +

      +
    • +
    • +

      + [bdubbs] - Update to poppler-25.08.0. Fixes + + #21923. +

      +
    • +
    • +

      + [bdubbs] - Update to jasper-version-4.2.8. Fixes + + #21918. +

      +
    • +
    • +

      + [bdubbs] - Update to libadwaita-1.7.6. Fixes + + #21915. +

      +
    • +
    • +

      + [bdubbs] - Update to at-spi2-core-2.56.4. Fixes + + #21914. +

      +
    • +
    • +

      + [bdubbs] - Update to NetworkManager-1.54.0. Fixes + + #21913. +

      +
    • +
    +
    +
  • +
  • +

    + August 3rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to whois-5.6.4. Fixes + #21919. +

      +
    • +
    • +

      + [bdubbs] - Update to libinput-1.29.0 (Xorg driver). + Fixes + #21912. +

      +
    • +
    • +

      + [bdubbs] - Update to php-8.4.11. Fixes + #21911. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-LLVM-Translator-20.1.5. + Fixes + #21910. +

      +
    • +
    +
    +
  • +
  • +

    + August 2nd, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to node.js-22.18.0. Fixes + + #21847. +

      +
    • +
    • +

      + [bdubbs] - Update to unrar-7.1.10. Fixes + #21908. +

      +
    • +
    • +

      + [bdubbs] - Update to sqlite-autoconf-3500400 + (3.50.4). Fixes + #21907. +

      +
    • +
    • +

      + [bdubbs] - Update to umockdev-0.19.3. Fixes + + #21906. +

      +
    • +
    • +

      + [bdubbs] - Update to LVM2.2.03.34. Fixes + #21905. +

      +
    • +
    +
    +
  • +
  • +

    + July 30th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to Net-DNS-1.52 (Perl module). + Fixes + #21901. +

      +
    • +
    • +

      + [bdubbs] - Update to graphviz-13.1.1. Fixes + + #21900. +

      +
    • +
    • +

      + [bdubbs] - Update to enchant-2.8.12. Fixes + + #21899. +

      +
    • +
    +
    +
  • +
  • +

    + July 29th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to mupdf-1.26.4. Fixes + #21898. +

      +
    • +
    • +

      + [bdubbs] - Update to sysstat-12.7.8. Fixes + + #21897. +

      +
    • +
    • +

      + [bdubbs] - Update to pinentry-1.3.2. Fixes + + #21896. +

      +
    • +
    +
    +
  • +
  • +

    + July 28th, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update to llvm-20.1.8 and libclc-20.1.8. + Fixes + #21836. +

      +
    • +
    • +

      + [bdubbs] - Update to mpg123-1.33.1. Fixes + #21894. +

      +
    • +
    • +

      + [bdubbs] - Update to xgamma-1.0.8 (Xorg app). Fixes + + #21893. +

      +
    • +
    • +

      + [bdubbs] - Update to rpcbind-1.2.8. Fixes + #21892. +

      +
    • +
    • +

      + [renodr] - Update to OpenJDK-24.0.2 (Security + Update). Fixes + #21846. +

      +
    • +
    +
    +
  • +
  • +

    + July 27th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Added a patch to the book to backport + several fixes from the Qt 6.9 branch upstream. This + fixes crashes in Plasma 6.4, and a security + vulnerability. Fixes + #21858. +

      +
    • +
    • +

      + [renodr] - Update to intel-media-driver-25.2.6. + Fixes + #21864. +

      +
    • +
    • +

      + [renodr] - Update to intel-gmmlib-22.8.1. Fixes + + #21864. +

      +
    • +
    • +

      + [bdubbs] - Update to xdriinfo-1.0.8 (Xorg app). + Fixes + #21891. +

      +
    • +
    • +

      + [bdubbs] - Update to xdpyinfo-1.4.0 (Xorg app). + Fixes + #21890. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.3.3. Fixes + + #21889. +

      +
    • +
    • +

      + [bdubbs] - Update to sudo-1.9.17p2. Fixes + #21888. +

      +
    • +
    +
    +
  • +
  • +

    + July 26th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to inih-61. Fixes + #21887. +

      +
    • +
    • +

      + [thomas] - Update to libnvme-1.15. Fixes + #21886. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.7. Fixes + + #21883. +

      +
    • +
    • +

      + [bdubbs] - Update to numpy-2.3.2. Fixes + #21882. +

      +
    • +
    • +

      + [bdubbs] - Update to unrar-7.1.9. Fixes + #21881. +

      +
    • +
    • +

      + [bdubbs] - Update to httpd-2.4.65 (Security + Update). Fixes + #21880. +

      +
    • +
    • +

      + [bdubbs] - Update to qemu-10.0.3. Fixes + #21879. +

      +
    • +
    • +

      + [bdubbs] - Add a patch to sharutils to fix building + with GCC-15. Fixes + #21884. +

      +
    • +
    +
    +
  • +
  • +

    + July 25th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to ed-1.22. Fixes + #21878. +

      +
    • +
    +
    +
  • +
  • +

    + July 22nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to enchant-2.8.11. Fixes + + #21877. +

      +
    • +
    • +

      + [zeckma] - Update to thunderbird-140.1.0esr + (security update). Fixes + #21876. +

      +
    • +
    • +

      + [zeckma] - Update to firefox-140.1.0esr and + spidermonkey-128.13.0esr (security update). Fixes + + #21875. +

      +
    • +
    • +

      + [renodr] - Update to fuse-3.17.3. Fixes + #21870. +

      +
    • +
    • +

      + [renodr] - Update to 7zip-25.00 (Security Update). + Fixes + #21868. +

      +
    • +
    • +

      + [bdubbs] - Update to fltk-1.4.4. Fixes + #21874. +

      +
    • +
    • +

      + [bdubbs] - Update to pixman-0.46.4. Fixes + #21873. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.3.2. Fixes + + #21872. +

      +
    • +
    +
    +
  • +
  • +

    + July 19th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update gstreamer files to version + 1.26.4. Fixes + #21863. +

      +
    • +
    • +

      + [bdubbs] - Update to nss-3.114. Fixes + #21871. +

      +
    • +
    • +

      + [bdubbs] - Update to thunar-4.20.4. Fixes + #21869. +

      +
    • +
    • +

      + [bdubbs] - Update to sqlite-autoconf-3500300 + (3.50.3). Fixes + #21867. +

      +
    • +
    +
    +
  • +
  • +

    + July 19th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to whois-5.6.3. Fixes + #21866. +

      +
    • +
    • +

      + [bdubbs] - Update to nspr-4.37. Fixes + #21865. +

      +
    • +
    • +

      + [bdubbs] - Update to curl-8.15.0. Fixes + #21861. +

      +
    • +
    • +

      + [bdubbs] - Update to wireshark-4.4.8. Fixes + + #21860. +

      +
    • +
    +
    +
  • +
  • +

    + July 18th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to audacious and + audacious-plugins 4.5. Fixes + #21854. +

      +
    • +
    • +

      + [bdubbs] - Update to neon-0.35.0. Fixes + #21856. +

      +
    • +
    • +

      + [bdubbs] - Update to Vulkan-Headers and + Vulkan-Loader 1.4.321. Fixes + #21852. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-Headers and SPIRV-Tools + 1.4.321.0. Fixes + #21849. +

      +
    • +
    +
    +
  • +
  • +

    + July 17th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to ruby-3.4.5 (Security Update). + Fixes + #21851. +

      +
    • +
    • +

      + [renodr] - Update to httpd-2.4.64 (Security + Update). Fixes + #21841. +

      +
    • +
    • +

      + [renodr] - Update to unbound-1.23.1 (Security + Update). Fixes + #21862. +

      +
    • +
    • +

      + [renodr] - Update to bind-9.20.11 (Security + Update). Fixes + #21857. +

      +
    • +
    • +

      + [renodr] - Update to libxml2-2.14.5 (Security + Update). Fixes + #21855. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.5. Fixes + + #21853. +

      +
    • +
    • +

      + [renodr] - Update to balsa-2.6.5. Fixes + #21832. +

      +
    • +
    +
    +
  • +
  • +

    + July 16th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to gexiv2-0.14.6. Fixes + #21859. +

      +
    • +
    • +

      + [renodr] - Update to python_dbusmock-0.36.0 (Python + Module). Fixes + #21850. +

      +
    • +
    +
    +
  • +
  • +

    + July 15th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1552 (Security + update). Fixes + #21848. +

      +
    • +
    • +

      + [bdubbs] - Update to icewm-3.8.1. Fixes + #21845. +

      +
    • +
    +
    +
  • +
  • +

    + July 13th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to wayland-1.24.0. Fixes + + #21844. +

      +
    • +
    +
    +
  • +
  • +

    + July 10th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to postfix-3.10.3. Fixes + + #21842. +

      +
    • +
    • +

      + [bdubbs] - Update to IO-Socket-SSL-2.095 (Perl + Module). Fixes + #21840. +

      +
    • +
    +
    +
  • +
  • +

    + July 10th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to thunderbird-140.0.1esr. Fixes + + #21838. +

      +
    • +
    • +

      + [bdubbs] - Update to libwebp-1.6.0. Fixes + #21837. +

      +
    • +
    • +

      + [bdubbs] - Update to tcsh-6.24.16. Fixes + #21835. +

      +
    • +
    • +

      + [renodr] - Update to gnutls-3.8.10 (Security + Update). Fixes + #21834. +

      +
    • +
    • +

      + [renodr] - Update to git-2.50.1 (Security Update). + Fixes + #21829. +

      +
    • +
    +
    +
  • +
  • +

    + July 9th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to NetworkManager-1.52.1. Fixes + + #21830. +

      +
    • +
    • +

      + [renodr] - Update to opencv-4.12.0. Fixes + #21813. +

      +
    • +
    • +

      + [bdubbs] - Update to gpgme-2.0.0. Add new page, + gpgmepp-2.0.0. Fixes + #21674. +

      +
    • +
    • +

      + [bdubbs] - Update to gmime-3.2.15. Fixes + #21831. +

      +
    • +
    +
    +
  • +
  • +

    + July 8th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to Test-Differences-0.72 (Perl + module). Fixes + #21828. +

      +
    • +
    • +

      + [bdubbs] - Update to frei0r-2.3.3. Fixes + #21826. +

      +
    • +
    • +

      + [bdubbs] - Move dvd+rw-tools to anduin. Fixes + + #21827. +

      +
    • +
    +
    +
  • +
  • +

    + July 7th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to samba-4.22.3. Fixes + #21825. +

      +
    • +
    • +

      + [renodr] - Update to asymptote-3.05. Fixes + + #21821. +

      +
    • +
    • +

      + [renodr] - Update to gi_docgen-2025.4 (Python + Module). Fixes + #21817. +

      +
    • +
    +
    +
  • +
  • +

    + July 6th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to poppler-25.07.0. Fixes + + #21823. +

      +
    • +
    • +

      + [bdubbs] - Update to Net-DNS-1.51 (Perl module). + Fixes + #21824. +

      +
    • +
    +
    +
  • +
  • +

    + July 4th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libpng-1.6.50. Fixes + #21819. +

      +
    • +
    • +

      + [bdubbs] - Update to php-8.4.10 (Security update). + Fixes + #21820. +

      +
    • +
    • +

      + [zeckma] - Update to nss-3.113.1. Fixes + #21822. +

      +
    • +
    +
    +
  • +
  • +

    + July 3rd, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to Kea-3.0.0. Fixes + #21777. +

      +
    • +
    +
    +
  • +
  • +

    + July 2nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to fontconfig-2.17.1. Fixes + + #21812. +

      +
    • +
    • +

      + [bdubbs] - Update to hwdata-0.397. Fixes + #21814. +

      +
    • +
    • +

      + [bdubbs] - Update to xterm-401. Fixes + #21815. +

      +
    • +
    +
    +
  • +
  • +

    + July 2nd, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to evince-48.1. Fixes + #21800. +

      +
    • +
    • +

      + [renodr] - Update to nautilus-48.3. Fixes + #21799. +

      +
    • +
    • +

      + [renodr] - Update to mutter-48.4. Fixes + #21798. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell and + gnome-shell-extensions 48.3. Fixes + #21797. +

      +
    • +
    • +

      + [renodr] - Update to vte-0.80.3. Fixes + #21795. +

      +
    • +
    • +

      + [renodr] - Update to gnome-online-accounts-3.54.4. + Fixes + #21794. +

      +
    • +
    • +

      + [renodr] - Update to gnome-control-center-48.3. + Fixes + #21786. +

      +
    • +
    • +

      + [xry111] - Update to cargo-c-0.10.14. Fixes + + #21789. +

      +
    • +
    • +

      + [xry111] - Update to rustc-1.88.0. Fixes + #21780. +

      +
    • +
    • +

      + [xry111] - Update to llvm-20.1.7 and libclc-20.1.7. + Fixes + #21373. +

      +
    • +
    • +

      + [renodr] - Update to cryptsetup-2.8.0. Fixes + + #21768. +

      +
    • +
    • +

      + [renodr] - Update the gstreamer stack to 1.26.3 + (Security Update). Fixes + #21781. +

      +
    • +
    • +

      + [bdubbs] - Update to graphviz-13.1.0. Fixes + + #21810. +

      +
    • +
    • +

      + [bdubbs] - Update to lsof-4.99.5. Fixes + #21811. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-LLVM-Translator-20.1.4. + Fixes + #21808. +

      +
    • +
    • +

      + [bdubbs] - Update to taglib-2.1.1. Fixes + #21807. +

      +
    • +
    • +

      + [bdubbs] - Update to libqalculate-5.6.0. Fixes + + #21805. +

      +
    • +
    • +

      + [bdubbs] - Update to LVM2.2.03.33. Fixes + #21803. +

      +
    • +
    • +

      + [bdubbs] - Update to sudo-1.9.17p1 (Security + Update). Fixes + #21802. +

      +
    • +
    +
    +
  • +
  • +

    + July 1st, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to thunderbird-140.0esr (security + update). Fixes + #21773. +

      +
    • +
    • +

      + [bdubbs] - Update to lxqt-powermanagement-2.2.1. + Fixes + #21801. +

      +
    • +
    +
    +
  • +
  • +

    + June 29th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1497. Sync with LFS. +

      +
    • +
    • +

      + [bdubbs] - Update to shadow-4.18.0. Sync with LFS. +

      +
    • +
    +
    +
  • +
  • +

    + June 29th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to mupdf-1.26.3. Fixes + #21796. +

      +
    • +
    • +

      + [bdubbs] - Update to libadwaita-1.7.5. Fixes + + #21792. +

      +
    • +
    • +

      + [bdubbs] - Update to at-spi2-core-2.56.3. Fixes + + #21791. +

      +
    • +
    • +

      + [bdubbs] - Update to sqlite-autoconf-3500200 + (3.50.2). Fixes + #21790. +

      +
    • +
    • +

      + [bdubbs] - Update to libproxy-0.5.10. Fixes + + #21788. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.6. Fixes + + #21778. +

      +
    • +
    +
    +
  • +
  • +

    + June 28th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to pango-1.56.4. Fixes + #21787. +

      +
    • +
    • +

      + [bdubbs] - Update to glslang-15.4.0. Fixes + + #21784. +

      +
    • +
    • +

      + [bdubbs] - Update to libwww-perl-6.79 (Perl module + LWP). Fixes + #21783. +

      +
    • +
    • +

      + [bdubbs] - Update to fontconfig-2.17.0. Fixes + + #21782. +

      +
    • +
    • +

      + [bdubbs] - Update to lxml-6.0.0 (Python module). + Fixes + #21779. +

      +
    • +
    • +

      + [bdubbs] - Update to nettle-3.10.2. Fixes + #21778. +

      +
    • +
    +
    +
  • +
  • +

    + June 26th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to node.js-22.17.0. Fixes + + #21771. +

      +
    • +
    • +

      + [zeckma] - Update to firefox-140.0esr (security + update). Fixes + #21766. +

      +
    • +
    • +

      + [bdubbs] - Update to xfsprogs-6.15.0. Fixes + + #21770. +

      +
    • +
    • +

      + [bdubbs] - Update to glslc from shaderc-2025.3. + Fixes + #21774. +

      +
    • +
    • +

      + [bdubbs] - Update to unrar-7.1.8. Fixes + #21776. +

      +
    • +
    +
    +
  • +
  • +

    + June 24th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to btrfs-progs-v6.15. Fixes + + #21765. +

      +
    • +
    • +

      + [bdubbs] - Update to colord-1.4.8. Fixes + #21767. +

      +
    • +
    +
    +
  • +
  • +

    + June 23rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to icewm-3.8.0. Fixes + #21763. +

      +
    • +
    • +

      + [bdubbs] - Update to lxqt-panel-2.2.2. Fixes + + #21764. +

      +
    • +
    +
    +
  • +
  • +

    + June 22nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to lxqt-build-tools-2.2.1. Fixes + + #21762. +

      +
    • +
    • +

      + [bdubbs] - Update to sudo-1.9.17. Fixes + #21757. +

      +
    • +
    • +

      + [bdubbs] - Update to Linux-PAM-1.7.1 (Security + release). Fixes + #21738. +

      +
    • +
    • +

      + [renodr] - Update to pygments-2.19.2 (Python + Module). Fixes + #21761. +

      +
    • +
    • +

      + [renodr] - Update to numpy-2.3.1 (Python Module). + Fixes + #21760. +

      +
    • +
    • +

      + [renodr] - Update to pciutils-3.14.0. Fixes + + #21759. +

      +
    • +
    • +

      + [renodr] - Update to enchant-2.8.10. Fixes + + #21758. +

      +
    • +
    • +

      + [renodr] - Update to fetchmail-6.5.4. Fixes + + #21741. +

      +
    • +
    • +

      + [renodr] - Update to yelp-xsl-42.4 and yelp-42.3. + Fixes + #21721. +

      +
    • +
    • +

      + [renodr] - Fix a security vulnerability in udisks + that can allow for local privilege escalation. + Fixes + #21754. +

      +
    • +
    • +

      + [thomas] - Change postfix instructions to fix an + gcc-15 issue. +

      +
    • +
    • +

      + [bdubbs] - Update to ImageMagick-7.1.1-47. + Addresses + #16962. +

      +
    • +
    +
    +
  • +
  • +

    + June 21st, 2025 +

    +
    +
      +
    • +

      + [rahul] - Make firefox icon work post-launch under + wayland. +

      +
    • +
    • +

      + [bdubbs] - Update to nss-3.113. Fixes + #21755. +

      +
    • +
    • +

      + [bdubbs] - Update to LMDB_0.9.33. Fixes + #21753. +

      +
    • +
    • +

      + [bdubbs] - Update to xfburn-0.8.0. Fixes + #21752. +

      +
    • +
    • +

      + [bdubbs] - Update to pytest-8.4.1 (Python module). + Fixes + #21750. +

      +
    • +
    +
    +
  • +
  • +

    + June 20th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libblockdev-3.3.1 (Security + release). Fixes + #21745. +

      +
    • +
    • +

      + [bdubbs] - Update to enchant-2.8.9. Fixes + #21744. +

      +
    • +
    • +

      + [bdubbs] - Update to adwaita-icon-theme-48.1. Fixes + + #21743. +

      +
    • +
    • +

      + [bdubbs] - Update to nghttp2-1.66.0. Fixes + + #21742. +

      +
    • +
    • +

      + [bdubbs] - Update to abseil-cpp-20250512.1. Fixes + + #21740. +

      +
    • +
    • +

      + [zeckma] - Update to xwayland-24.1.8 (security + update). Fixes + #21747. +

      +
    • +
    • +

      + [zeckma] - Update to xorg-server-21.1.18 (security + update). Fixes + #21746. +

      +
    • +
    • +

      + [thomas] - Update to bind-9.20.10 and + bind-utils-9.20.10. Fixes + #21751. +

      +
    • +
    +
    +
  • +
  • +

    + June 19th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libogg-1.3.6. Fixes + #21735. +

      +
    • +
    • +

      + [bdubbs] - Update to git-2.50.0. Fixes + #21734. +

      +
    • +
    • +

      + [bdubbs] - Update to IO-Socket-SSL-2.094 (Perl + module). Fixes + #21733. +

      +
    • +
    • +

      + [bdubbs] - Update URL and instructions for + ntfs-3g-2022.10.3. Fixes + #21739. +

      +
    • +
    • +

      + [bdubbs] - Update to libxml2-2.14.4 (security + update). Fixes + #21732. +

      +
    • +
    +
    +
  • +
  • +

    + June 17th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to xwayland-24.1.7 (security + update). Fixes + #21737. +

      +
    • +
    • +

      + [zeckma] - Update to xorg-server-21.1.17 (security + update). Fixes + #21736. +

      +
    • +
    +
    +
  • +
  • +

    + June 16th, 2025 +

    +
    +
      +
    • +

      + [rahul] - Change ffmpeg dependencies to include + libplacebo and drop ffmpeg dependency in + libplacebo. +

      +
    • +
    • +

      + [bdubbs] - Update to graphviz-13.0.1. Fixes + + #21730. +

      +
    • +
    • +

      + [bdubbs] - Update to libwacom-2.16.1. Fixes + + #21729. +

      +
    • +
    • +

      + [bdubbs] - Update to xterm-400. Fixes + #21731. +

      +
    • +
    +
    +
  • +
  • +

    + June 15th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to glib-2.84.3. Fixes + #21725. +

      +
    • +
    • +

      + [bdubbs] - Update to cmake-4.0.3. Fixes + #21728. +

      +
    • +
    • +

      + [bdubbs] - Update to libpng-1.6.49. Fixes + #21727. +

      +
    • +
    • +

      + [bdubbs] - Update to wayland-protocols-1.45. Fixes + + #21726. +

      +
    • +
    • +

      + [bdubbs] - Update to jansson-2.14.1. Fixes + + #21723. +

      +
    • +
    • +

      + [bdubbs] - Update to inih-r60. Fixes + #21722. +

      +
    • +
    • +

      + [bdubbs] - Update to Python-3.13.5. Fixes + #21716. +

      +
    • +
    +
    +
  • +
  • +

    + June 13th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to graphviz-13.0.0. Fixes + + #21703. +

      +
    • +
    • +

      + [renodr] - Update to libwacom-2.16.0. Fixes + + #21719. +

      +
    • +
    • +

      + [renodr] - Update to fetchmail-6.5.3. Fixes + + #21713. +

      +
    • +
    • +

      + [renodr] - Update to cifs-utils-7.4. Fixes + + #21712. +

      +
    • +
    • +

      + [renodr] - Update to unrar-7.1.7. Fixes + #21711. +

      +
    • +
    • +

      + [renodr] - Restore the instructions to make-ca to + use system certificates when using 'pip' instead of + bundled certificates. +

      +
    • +
    • +

      + [bdubbs] - Update to nano-8.5. Fixes + #21718. +

      +
    • +
    • +

      + [bdubbs] - Update to gtk-4.18.6. Fixes + #21710. +

      +
    • +
    +
    +
  • +
  • +

    + June 12th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to IO-Socket-SSL-2.091 (Perl + module). Fixes + #21715. +

      +
    • +
    +
    +
  • +
  • +

    + June 11th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to thunderbird-128.11.1esr + (security update). Fixes + #21714. +

      +
    • +
    +
    +
  • +
  • +

    + June 10th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to requests-2.32.4 (Python + module) (Security update). Fixes + #21709. +

      +
    • +
    • +

      + [bdubbs] - Update to cython-3.1.2 (Python module). + Fixes + #21708. +

      +
    • +
    • +

      + [bdubbs] - Update to pixman-0.46.2. Fixes + #21707. +

      +
    • +
    +
    +
  • +
  • +

    + June 9th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to konsole-25.4.2 (Security + Update). See + #21554. +

      +
    • +
    • +

      + [renodr] - Update to libdrm-2.4.125. Fixes + + #21705. +

      +
    • +
    • +

      + [renodr] - Update to rust-bindgen-0.72.0. Fixes + + #21704. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.4. Fixes + + #21700. +

      +
    • +
    • +

      + [renodr] - Update to samba-4.22.2 (Security + Update). Fixes + #21691. +

      +
    • +
    • +

      + [bdubbs] - Update to lua-5.4.8. Fixes + #21706. +

      +
    • +
    • +

      + [bdubbs] - Update to mpg123-1.33.0. Fixes + #21702. +

      +
    • +
    • +

      + [bdubbs] - Update to libass-0.17.4. Fixes + #21701. +

      +
    • +
    • +

      + [bdubbs] - Update to xkeyboard-config-2.45. Fixes + + #21699. +

      +
    • +
    • +

      + [renodr] - Fix building Inkscape with + poppler-25.06.0. Fixes + #21683. +

      +
    • +
    +
    +
  • +
  • +

    + June 7th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to numpy-2.3.0. Fixes + #21698. +

      +
    • +
    +
    +
  • +
  • +

    + June 7th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libvpx-1.15.2 (Security + release). Fixes + #21695. +

      +
    • +
    • +

      + [bdubbs] - Update to sqlite-autoconf-3500100. Fixes + + #21694. +

      +
    • +
    • +

      + [bdubbs] - Update to whois-5.6.2. Fixes + #21693. +

      +
    • +
    • +

      + [zeckma] - Update to mesa-25.1.3. Fixes + #21696. +

      +
    • +
    +
    +
  • +
  • +

    + June 6th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to mesa-25.1.2. Fixes + #21548. +

      +
    • +
    • +

      + [bdubbs] - Update to File-Find-Rule-0.35 (Perl + module; security update). Fixes + #21690. +

      +
    • +
    • +

      + [bdubbs] - Update to php-8.4.8. Fixes + #21692. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.5. Fixes + + #21686. +

      +
    • +
    • +

      + [bdubbs] - Update to wireshark-4.4.7 (Security + update). Fixes + #21685. +

      +
    • +
    • +

      + [bdubbs] - Update to mupdf-1.26.2. Fixes + #21687. +

      +
    • +
    • +

      + [bdubbs] - Update to sentry_sdk-2.29.1 (Python + module). Fixes + #21313. +

      +
    • +
    +
    +
  • +
  • +

    + June 4th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to SDL2-2.32.8. Fixes + #21681. +

      +
    • +
    • +

      + [bdubbs] - Update to curl-8.14.1 (Security Update). + Fixes + #21680. +

      +
    • +
    • +

      + [bdubbs] - Update to hwdata-0.396. Fixes + #21676. +

      +
    • +
    • +

      + [bdubbs] - Update to poppler-25.06.0 (Security + Update). Fixes + #21675. +

      +
    • +
    • +

      + [renodr] - Update to Python-3.13.4 (Security + Update). Fixes + #21677. +

      +
    • +
    • +

      + [renodr] - Update to IO-Socket-SSL-2.090 (Perl + Module). Fixes + #21678. +

      +
    • +
    • +

      + [renodr] - Update to make-ca-1.16.1. Fixes + + #21682. +

      +
    • +
    +
    +
  • +
  • +

    + June 3rd, 2025 +

    +
    +
      +
    • +

      + [renodr] - Temporarily fix building Texlive with + GCC 15 by setting the C standard to C17. Upstream + has made some progress, but there are still several + components that need to be updated to fully support + C23. +

      +
    • +
    • +

      + [renodr] - Temporarily fix building procmail with + GCC 15 by setting the C standard to C17. +

      +
    • +
    • +

      + [renodr] - Update to Qt-6.9.1 and QtWebEngine-6.9.1 + (Security Update). Fixes + #21672. +

      +
    • +
    • +

      + [renodr] - Update to mutter-48.3.1. Fixes + #21673. +

      +
    • +
    • +

      + [renodr] - Update to pytest-8.4.0 (Python Module). + Fixes + #21671. +

      +
    • +
    • +

      + [renodr] - Update to bluez-5.83. Fixes + #21670. +

      +
    • +
    • +

      + [renodr] - Fix building Guile with GCC 15. +

      +
    • +
    • +

      + [renodr] - Fix building GPM with GCC 15. +

      +
    • +
    +
    +
  • +
  • +

    + June 2nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1418. Fixes + #12241. +

      +
    • +
    • +

      + [renodr] - Update to mariadb-11.4.7 (Security + Update). Fixes + #21669. +

      +
    • +
    • +

      + [renodr] - Update to gnome-desktop-44.3. Fixes + + #21668. +

      +
    • +
    • +

      + [renodr] - Update to dhcpcd-10.2.4. Fixes + #21667. +

      +
    • +
    • +

      + [renodr] - Update to libusb-1.0.29. Fixes + #21666. +

      +
    • +
    • +

      + [renodr] - Update to libarchive-3.8.1. Fixes + + #21665. +

      +
    • +
    • +

      + [renodr] - Fix building evince with GCC 15 if + texlive is installed. +

      +
    • +
    • +

      + [renodr] - Fix building sendmail with GCC 15. +

      +
    • +
    • +

      + [renodr] - Fix building GDM with GCC 15. +

      +
    • +
    • +

      + [renodr] - Fix building cifs-utils with GCC 15. +

      +
    • +
    +
    +
  • +
  • +

    + June 1st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to taglib-2.1. Fixes + #21664. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-LLVM-Translator-20.1.3. + Fixes + #21663. +

      +
    • +
    • +

      + [bdubbs] - Update to enchant-2.8.6. Fixes + #21662. +

      +
    • +
    +
    +
  • +
  • +

    + May 31st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to gcc-15.1.0. Fixes + #21507. +

      +
    • +
    +
    +
  • +
  • +

    + May 30th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to sane-backends-1.4.0. Fixes + + #21660. +

      +
    • +
    • +

      + [renodr] - Update the gstreamer stack to 1.26.2 + (Security Update). Fixes + #21658. +

      +
    • +
    • +

      + [renodr] - Update to pipewire-1.4.4. Fixes + + #21659. +

      +
    • +
    • +

      + [bdubbs] - Update to cbindgen-0.29.0. Fixes + + #21607. +

      +
    • +
    • +

      + [renodr] - Update to sqlite-3.50.0. Fixes + #21657. +

      +
    • +
    +
    +
  • +
  • +

    + May 29th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to qemu-10.0.2. Fixes + #21647. +

      +
    • +
    • +

      + [thomas] - Update to Kea-2.6.3. Fixes + #21652. +

      +
    • +
    • +

      + [bdubbs] - Update to protobuf-31.1. Fixes + #21656. +

      +
    • +
    • +

      + [bdubbs] - Update to curl-8.14.0. Fixes + #21650. +

      +
    • +
    • +

      + [renodr] - Update to mutter-48.3. Fixes + #21646. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell and + gnome-shell-extensions 48.2. Fixes + #21645. +

      +
    • +
    • +

      + [renodr] - Update to gnome-control-center-48.2. + Fixes + #21644. +

      +
    • +
    • +

      + [renodr] - Update to nautilus-48.2. Fixes + #21638. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.3. Fixes + + #21633. +

      +
    • +
    • +

      + [renodr] - Update to vte-0.80.2. Fixes + #21632. +

      +
    • +
    +
    +
  • +
  • +

    + May 28th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to gnome-user-docs-48.2. Fixes + + #21631. +

      +
    • +
    • +

      + [renodr] - Update to gnome-backgrounds-48.2.1. + Fixes + #21629. +

      +
    • +
    • +

      + [renodr] - Update to evolution and + evolution-data-server 3.56.2. Fixes + #21626. +

      +
    • +
    • +

      + [renodr] - Update to gnome-online-accounts-3.54.3. + Fixes + #21630. +

      +
    • +
    • +

      + [renodr] - Update to webkitgtk-2.48.3. Fixes + + #21653. +

      +
    • +
    • +

      + [renodr] - Update to asymptote-3.05. Fixes + + #21639. +

      +
    • +
    • +

      + [renodr] - Update to dvisvgm-3.5. Fixes + #21627. +

      +
    • +
    • +

      + [renodr] - Update to Thunderbird-128.11.0esr + (Security Update). Fixes + #21655. +

      +
    • +
    • +

      + [renodr] - Update to Firefox-128.11.0esr and + Spidermonkey (Security Update). Fixes + #21642. +

      +
    • +
    • +

      + [renodr] - Update to libadwaita-1.7.4. Fixes + + #21643. +

      +
    • +
    • +

      + [renodr] - Update to xdg-desktop-portal-1.20.3. + Fixes + #21581. +

      +
    • +
    • +

      + [renodr] - Fix building uchardet against CMake-4. +

      +
    • +
    • +

      + [thomas] - Update to nss-3.112. Fixes + #21648. +

      +
    • +
    • +

      + [thomas] - Update to libslirp-4.9.1. Fixes + + #21649. +

      +
    • +
    +
    +
  • +
  • +

    + May 27th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to stunnel-5.75. Fixes + #21641. +

      +
    • +
    +
    +
  • +
  • +

    + May 26th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to liblinear-249. Fixes + #21640. +

      +
    • +
    • +

      + [bdubbs] - Update to gexiv2-0.14.5. Fixes + #21637. +

      +
    • +
    • +

      + [bdubbs] - Update to icewm-3.7.5. Fixes + #21635. +

      +
    • +
    • +

      + [bdubbs] - Update to enchant-2.8.5. Fixes + #21635. +

      +
    • +
    • +

      + [bdubbs] - Update to doxygen-1.14.0. Fixes + + #21628. +

      +
    • +
    +
    +
  • +
  • +

    + May 24th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to lm-sensors-3-6-2. Fixes + + #21623. +

      +
    • +
    • +

      + [thomas] - Update to bind-9.20.9 and + bind-utils-9.20.9 (Security Update). Fixes + + #21613. +

      +
    • +
    • +

      + [bdubbs] - Update to libadwaita-1.7.3. Fixes + + #21625. +

      +
    • +
    • +

      + [bdubbs] - Update to python-dbusmock-0.35.0 (Python + module). Fixes + #21624. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.3. Fixes + + #21622. +

      +
    • +
    • +

      + [bdubbs] - Update to libunwind-1.8.2. Fixes + + #21620. +

      +
    • +
    • +

      + [bdubbs] - Update to libplacebo-7.351.0. Fixes + + #21616. +

      +
    • +
    • +

      + [thomas] - Update to parole-4.20.0. Fixes + #21615. +

      +
    • +
    • +

      + [thomas] - Update to libxfce4windowing-4.20.3. + Fixes + #21614. +

      +
    • +
    • +

      + [thomas] - Update to openldap-2.6.10. Fixes + + #21621. +

      +
    • +
    +
    +
  • +
  • +

    + May 23rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libxkbcommon-1.10.0. Fixes + + #21611. +

      +
    • +
    • +

      + [bdubbs] - Update to mupdf-1.26.1. Fixes + #21610. +

      +
    • +
    • +

      + [bdubbs] - Update to valgrind-3.25.1. Fixes + + #21608. +

      +
    • +
    • +

      + [bdubbs] - Update to libnvme-1.14. Fixes + #21606. +

      +
    • +
    • +

      + [bdubbs] - Update to glib-2.84.2. Fixes + #21604. +

      +
    • +
    • +

      + [bdubbs] - Update to bluez-5.82. Fixes + #21602. +

      +
    • +
    • +

      + [bdubbs] - Update to wireplumber-0.5.10. Fixes + + #21601. +

      +
    • +
    • +

      + [bdubbs] - Update to cython-3.1.1 (Python module). + Fixes + #21600. +

      +
    • +
    • +

      + [bdubbs] - Update to highlight-4.16. Fixes + + #21599. +

      +
    • +
    • +

      + [bdubbs] - Update to gpgme-1.24.3. Fixes + #21598. +

      +
    • +
    +
    +
  • +
  • +

    + May 22nd, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to node.js-22.16.0. Fixes + + #21612. +

      +
    • +
    +
    +
  • +
  • +

    + May 21st, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to libarchive-3.8.0 (Security + Update). Fixes + #21605. +

      +
    • +
    +
    +
  • +
  • +

    + May 20th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to asymptote-3.03. Fixes + + #21557. +

      +
    • +
    • +

      + [renodr] - Fix known issues in texlive with + xdvipdfmx, pdftex, and LuaTeX. Fixes + #21577. +

      +
    • +
    • +

      + [renodr] - Fix CVE-2025-4516 in Python (Security + Update). Fixes + #21584. +

      +
    • +
    • +

      + [zeckma] - Update to thunderbird-128.10.2esr + (security update). Fixes + #21597. +

      +
    • +
    • +

      + [thomas] - Update to gimp-3.0.4 (Security Update). + Fixes + #21603. +

      +
    • +
    +
    +
  • +
  • +

    + May 19th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to OpenJDK-24.0.1 (Security + Update). Fixes + #21296. +

      +
    • +
    • +

      + [renodr] - Update to WebKitGTK-2.48.2 (Security + Update). Fixes + #21572. +

      +
    • +
    • +

      + [renodr] - Archive libsoup2. Fixes + #21575. +

      +
    • +
    • +

      + [renodr] - Archive libgdata. It depends on + libsoup2, and is no longer maintained. +

      +
    • +
    • +

      + [renodr] - Archive uhttpmock. It's no longer needed + and was only used by libgdata, which is getting + archived next. +

      +
    • +
    • +

      + [renodr] - Archive AbiWord. It is unmaintained, and + the website is no longer available for it. +

      +
    • +
    • +

      + [renodr] - Fix several security vulnerabilities in + giflib. Fixes + #21574. +

      +
    • +
    • +

      + [renodr] - Update to libreoffice-25.2.3.2. Fixes + + #21524. +

      +
    • +
    • +

      + [bdubbs] - Update to sessreg-1.1.4, smproxy-1.0.8, + and xcursorgen-1.0.9 (Xorg apps). Fixes + #21596. +

      +
    • +
    • +

      + [bdubbs] - Update to xterm-399. Fixes + #21595. +

      +
    • +
    • +

      + [bdubbs] - Update to screengrab-3.0.0. Fixes + + #21594. +

      +
    • +
    • +

      + [bdubbs] - Update to qps-2.11.1. Fixes + #21593. +

      +
    • +
    • +

      + [bdubbs] - Update to lxqt-panel-2.2.1. Fixes + + #21592. +

      +
    • +
    • +

      + [bdubbs] - Update to numpy-2.2.6 (Python module). + Fixes + #21590. +

      +
    • +
    • +

      + [bdubbs] - Update to + plasma-wayland-protocols-1.18.0. Fixes + #21582. +

      +
    • +
    • +

      + [renodr] - Update to fop-2.11. Fixes + #21539. +

      +
    • +
    +
    +
  • +
  • +

    + May 18th, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update to cargo-c-0.10.13. Fixes + + #21586. +

      +
    • +
    • +

      + [xry111] - Update to rustc-1.87.0. Fixes + #21580. +

      +
    • +
    • +

      + [zeckma] - Update to js-128.10.1 (spidermonkey) and + firefox-128.10.1 (security update). Fixes + #21588. +

      +
    • +
    • +

      + [thomas] - Update to thunar-4.20.3. Fixes + #21583. +

      +
    • +
    • +

      + [thomas] - Update to whois-5.6.1. Fixes + #21591. +

      +
    • +
    • +

      + [thomas] - Update to apr-1.7.6. Fixes + #21585. +

      +
    • +
    +
    +
  • +
  • +

    + May 17th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to screen-5.0.1 (Security + Update). Fixes + #21558. +

      +
    • +
    • +

      + [renodr] - Update to intel-microcode-20250512 + (Security Update). Fixes + #21563. +

      +
    • +
    • +

      + [zeckma] - Update to dhcpcd-10.2.3. Fixes + #21587. +

      +
    • +
    +
    +
  • +
  • +

    + May 15th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Remove the CMake 4 workaround from + Inkscape since it has been resolved in Inkscape + 1.4.2. +

      +
    • +
    • +

      + [bdubbs] - Update to lsof-4.99.4. Fixes + #21579. +

      +
    • +
    • +

      + [bdubbs] - Update to URI-5.32 (Perl module). Fixes + + #21578. +

      +
    • +
    • +

      + [zeckma] - Update to node.js-22.15.1 (security + update). Fixes + #21569. +

      +
    • +
    • +

      + [bdubbs] - Update to userspace-rcu-0.15.3 + (liburcu). Fixes + #21573. +

      +
    • +
    • +

      + [bdubbs] - Update to ruby-3.4.4. Fixes + #21571. +

      +
    • +
    • +

      + [bdubbs] - Update to protobuf-31.0. Fixes + #21570. +

      +
    • +
    • +

      + [bdubbs] - Update to abseil-cpp-20250512.0. Fixes + + #21568. +

      +
    • +
    • +

      + [bdubbs] - Update to gnupg-2.4.8. Fixes + #21567. +

      +
    • +
    +
    +
  • +
  • +

    + May 14th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to thunderbird-128.10.1esr + (security update). Fixes + #21566. +

      +
    • +
    • +

      + [bdubbs] - Update to inkscape-1.4.2. Fixes + + #21562. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.2.1. Fixes + + #21561. +

      +
    • +
    • +

      + [bdubbs] - Update to gegl-0.4.62. Fixes + #21560. +

      +
    • +
    • +

      + [bdubbs] - Update to babl-0.1.114. Fixes + #21559. +

      +
    • +
    • +

      + [bdubbs] - Update to nmap-7.97. Fixes + #21565. +

      +
    • +
    • +

      + [zeckma] - Update to libxml2-2.14.3. Fixes + + #21564. +

      +
    • +
    +
    +
  • +
  • +

    + May 13th, 2025 +

    +
    +
      +
    • +

      + [ken] - Thanks to the generosity of Bruce and + Gerard, my font analysis and comparison website has + now been archived at + typosetting.linuxfromscratch.org and the previous + site redirects there. +

      +
    • +
    +
    +
  • +
  • +

    + May 12th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libavif-1.3.0. Fixes + #21555. +

      +
    • +
    • +

      + [bdubbs] - Update to postgresql-17.5 (Security + Update). Fixes + #21553. +

      +
    • +
    • +

      + [bdubbs] - Update to php-8.4.7. Fixes + #21552. +

      +
    • +
    • +

      + [bdubbs] - Update to cython-3.1.0 (Python module). + Fixes + #21551. +

      +
    • +
    • +

      + [bdubbs] - Update to SDL2-2.32.6. Fixes + #21538. +

      +
    • +
    • +

      + [bdubbs] - Update to nss-3.111. Fixes + #21533. +

      +
    • +
    +
    +
  • +
  • +

    + May 8th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to mlt-7.32.0. Fixes + #21550. +

      +
    • +
    • +

      + [bdubbs] - Update to sqlite-autoconf-3490200 + (3.49.2). Fixes + #21549. +

      +
    • +
    • +

      + [bdubbs] - Update to hwdata-0.395. Fixes + #21546. +

      +
    • +
    • +

      + [bdubbs] - Update to libgcrypt-1.11.1. Fixes + + #21545. +

      +
    • +
    +
    +
  • +
  • +

    + May 7th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to Vulkan-Headers and + Vulkan-Loader 1.4.313. Fixes + #21544. +

      +
    • +
    • +

      + [bdubbs] - Update to nmap-7.96. Fixes + #21542. +

      +
    • +
    • +

      + [bdubbs] - Update to cmake-4.0.2. Fixes + #21541. +

      +
    • +
    • +

      + [bdubbs] - Update to libxkbcommon-1.9.2. Fixes + + #21540. +

      +
    • +
    +
    +
  • +
  • +

    + May 6th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to qterminal-2.2.1. Fixes + + #21537. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-Headers and SPIRV-Tools + 1.4.313.0. Fixes + #21535. +

      +
    • +
    • +

      + [bdubbs] - Update to LVM2.2.03.32. Fixes + #21534. +

      +
    • +
    • +

      + [bdubbs] - Update to whois-5.6.0. Fixes + #21536. +

      +
    • +
    +
    +
  • +
  • +

    + May 5th, 2025 +

    +
    +
      +
    • +

      + [ken] - Add Adwaita fonts. Fixes + #21304. +

      +
    • +
    • +

      + [rahul] - Update to mesa-25.0.5. Fixes + #21522. +

      +
    • +
    • +

      + [bdubbs] - Update to twm-1.0.13.1. Fixes + #21532. +

      +
    • +
    • +

      + [bdubbs] - Update to qpdf-12.2.0. Fixes + #21531. +

      +
    • +
    • +

      + [bdubbs] - Update to poppler-25.05.0. Fixes + + #21530. +

      +
    • +
    +
    +
  • +
  • +

    + May 4th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to gtk4-4.18.5. Fixes + #21529. +

      +
    • +
    • +

      + [bdubbs] - Update to fmt-11.2.0. Fixes + #21528. +

      +
    • +
    • +

      + [bdubbs] - Update to v4l-utils-1.30.1. Fixes + + #21526. +

      +
    • +
    • +

      + [bdubbs] - Update to cachecontrol-0.14.3 (Python + module). Fixes + #21523. +

      +
    • +
    • +

      + [bdubbs] - Update to libpng-1.6.48. Fixes + #21521. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.2.0. Fixes + + #21511. +

      +
    • +
    • +

      + [bdubbs] - Update to SPIRV-LLVM-Translator-20.1.2. + Fixes + #21520. +

      +
    • +
    • +

      + [bdubbs] - Update to smartmontools-7.5. Fixes + + #21519. +

      +
    • +
    • +

      + [bdubbs] - Update to pixman-0.46.0. Fixes + #21518. +

      +
    • +
    • +

      + [bdubbs] - Update to ghostscript-10.05.1 (Security + release). Fixes + #21517. +

      +
    • +
    • +

      + [bdubbs] - Update to fltk-1.4.3. Fixes + #21516. +

      +
    • +
    +
    +
  • +
  • +

    + May 2nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to xscreensaver-6.10.1. Fixes + + #21513. +

      +
    • +
    • +

      + [bdubbs] - Update to enchant-2.8.4. Fixes + #21508. +

      +
    • +
    • +

      + [bdubbs] - Update to ncftp-3.3.0. Fixes + #21505. +

      +
    • +
    • +

      + [bdubbs] - Update to libxkbcommon-1.9.1. Fixes + + #21504. +

      +
    • +
    • +

      + [bdubbs] - Update to xfce4-pulseaudio-plugin-0.5.1. + Fixes + #21496. +

      +
    • +
    • +

      + [bdubbs] - Update to unbound-1.23.0. Fixes + + #21495. +

      +
    • +
    +
    +
  • +
  • +

    + May 1st, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fix issues with GPU accelration in + Falkon causing crashes on some systems. Fixes + + #21444. +

      +
    • +
    • +

      + [renodr] - Update to kirigami-addons-1.7.0. Fixes + + #21525. +

      +
    • +
    +
    +
  • +
  • +

    + April 30th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to wayland-protocols-1.44. Fixes + + #21515. +

      +
    • +
    • +

      + [renodr] - Update to at-spi2-core-2.56.2. Fixes + + #21512. +

      +
    • +
    • +

      + [renodr] - Update to libsigsegv-2.15. Fixes + + #21510. +

      +
    • +
    • +

      + [renodr] - Update the build configuration for MuPDF + to use the system-installed copy of freeglut. Fixes + + #21506. +

      +
    • +
    • +

      + [renodr] - Update to valgrind-3.25.0. Fixes + + #21502. +

      +
    • +
    • +

      + [renodr] - Update to epiphany-48.3. Fixes + #21497. +

      +
    • +
    • +

      + [renodr] - Update to AppStream-1.0.5. Fixes + + #21493. +

      +
    • +
    • +

      + [renodr] - Update to thunderbird-128.10.0esr + (Security Update). Fixes + #21514. +

      +
    • +
    • +

      + [renodr] - Update to firefox and spidermonkey + 128.10.0esr (Security Update). Fixes + #21509. +

      +
    • +
    • +

      + [renodr] - Update the gstreamer stack to 1.26.1 + (Security Update). Fixes + #21498. +

      +
    • +
    +
    +
  • +
  • +

    + April 29th, 2025 +

    +
    +
      +
    • +

      + [rahul] - Update to qemu-10.0.0. Fixes + #21485. +

      +
    • +
    • +

      + [bdubbs] - Update to + plasma-wayland-protocols-1.17.0. Fixes + #21316. +

      +
    • +
    • +

      + [bdubbs] - Update to plasma-6.3.4. Fixes + #21230. +

      +
    • +
    • +

      + [bdubbs] - Update to kde-gear-25.04.0. Fixes + + #21201. +

      +
    • +
    • +

      + [bdubbs] - Update to kf6-6.13.0. Fixes + #21247. +

      +
    • +
    • +

      + [bdubbs] - Add libproxy-0.5.9 required by + kio-extras-25.04.0. +

      +
    • +
    +
    +
  • +
  • +

    + April 28th, 2025 +

    +
    +
      +
    • +

      + [xry111] - Update python dependencies to + attrs-25.3.0, markdown-3.8, setuptools_scm-8.3.0, + and trove-classifiers-2025.4.11.15. Addresses + + #18562. +

      +
    • +
    +
    +
  • +
  • +

    + April 27th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to glslang-15.3.0. Fixes + + #21503. +

      +
    • +
    • +

      + [thomas] - Update to libuv-1.51.0. Fixes + #21501. +

      +
    • +
    • +

      + [thomas] - Update to libgpg-error-1.55. Fixes + + #21494. +

      +
    • +
    +
    +
  • +
  • +

    + April 24th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to node.js-22.15.0. Fixes + + #21490. +

      +
    • +
    • +

      + [thomas] - Update to fuse-3.17.2. Fixes + #21489. +

      +
    • +
    • +

      + [renodr] - Update to glslc-2025.2. Fixes + #21491. +

      +
    • +
    • +

      + [renodr] - Update to epiphany-48.2. Fixes + #21488. +

      +
    • +
    +
    +
  • +
  • +

    + April 23rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to postfix-3.10.2. Fixes + + #21487. +

      +
    • +
    • +

      + [bdubbs] - Update to lxml-5.4.0 (Python module). + Fixes + #21486. +

      +
    • +
    • +

      + [bdubbs] - Update to ghostscript-10.05.0 (Security + Update). Fixes + #21484. +

      +
    • +
    +
    +
  • +
  • +

    + April 22nd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to icewm-3.7.4. Fixes + #21482. +

      +
    • +
    • +

      + [renodr] - Update to gnome-system-monitor-48.1. + Fixes + #21435. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.2. Fixes + + #21434. +

      +
    • +
    • +

      + [renodr] - Update to FreeRDP-3.15.0. Fixes + + #21452. +

      +
    • +
    • +

      + [renodr] - Update to gnome-calculator-48.1. Fixes + + #21433. +

      +
    • +
    • +

      + [renodr] - Update to asymptote-3.02. Fixes + + #21436. +

      +
    • +
    • +

      + [renodr] - Update to gnome-session-48.0. Fixes + + #21425. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell and + gnome-shell-extensions 48.1. Fixes + #21437. +

      +
    • +
    • +

      + [renodr] - Update to mutter-48.2. Fixes + #21379. +

      +
    • +
    • +

      + [renodr] - Update to gnome-control-center-48.1. + Fixes + #21451. +

      +
    • +
    • +

      + [renodr] - Update to gnome-settings-daemon-48.1. + Fixes + #21479. +

      +
    • +
    • +

      + [renodr] - Update to nautilus-48.1. Fixes + #21442. +

      +
    • +
    • +

      + [renodr] - Update to samba-4.22.1. Fixes + #21468. +

      +
    • +
    • +

      + [renodr] - Update to tinysparql-3.9.2. Fixes + + #21478. +

      +
    • +
    • +

      + [renodr] - Update to evolution-data-server and + evolution 3.56.1. Fixes + #21424. +

      +
    • +
    • +

      + [renodr] - Update to intel-media-driver-25.1.4 and + intel-gmmlib-22.7.1. Fixes + #21456. +

      +
    • +
    +
    +
  • +
  • +

    + April 21st, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to epiphany-48.1 (Security + Update). Fixes + #21483. +

      +
    • +
    • +

      + [renodr] - Disable python plugin support in libpeas + because it is incompatible with pygobject-3.52.x, + and it causes applications which utilize it to hang + indefinitely. +

      +
    • +
    • +

      + [renodr] - Fix building libportal against Qt 6.9. + Fixes + #21429. +

      +
    • +
    • +

      + [bdubbs] - Update to gdb-16.3. Fixes + #21480. +

      +
    • +
    • +

      + [bdubbs] - Update to libXft-2.3.9 (Xorg library). + Fixes + #21481. +

      +
    • +
    +
    +
  • +
  • +

    + April 20th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Remove packaging (Python module). Moved + to LFS. Addresses + #21477. +

      +
    • +
    • +

      + [bdubbs] - Update to numpy-2.2.5 (Python module). + Fixes + #21476. +

      +
    • +
    +
    +
  • +
  • +

    + April 19th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to xapian-core-1.4.29. Fixes + + #21667. +

      +
    • +
    • +

      + [bdubbs] - Update to libxml2-2.14.2 (Security + Update). Fixes + #21665. +

      +
    • +
    • +

      + [bdubbs] - Update to ModemManager-1.24.0. Fixes + + #21227. +

      +
    • +
    +
    +
  • +
  • +

    + April 18th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to mesa-25.0.4. Fixes + #21463. +

      +
    • +
    • +

      + [bdubbs] - Update to lxqt-2.2.0. Several packages + have different version numbers: + libdbusmenu-lxqt-0.3.0, libqtxdg-4.2.0, + qtxdg-tools-4.2.0, xdg-desktop-portal-lxqt-1.2.0, + lxqt-archiver-1.2.0, qps-2.11.0, and + screengrab-2.10.0. Fixes + #21469, + #21470, + #21471, + #21472, + #21473, + #21474, and + #21475. +

      +
    • +
    • +

      + [thomas] - Update to libgpg-error-1.54. Fixes + + #21466. +

      +
    • +
    • +

      + [bdubbs] - Update to wireshark-4.4.6. Fixes + + #21462. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.1.0. Fixes + + #21460. +

      +
    • +
    • +

      + [bdubbs] - Update to swig-4.3.1. Fixes + #21458. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.2. Fixes + + #21455. +

      +
    • +
    • +

      + [bdubbs] - Update to ruby-3.4.3. Fixes + #21449. +

      +
    • +
    +
    +
  • +
  • +

    + April 16th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to bind-9.20.8. Fixes + #21461. +

      +
    • +
    • +

      + [xry111] - Update to cargo-c-0.10.12. Fixes + + #21394. +

      +
    • +
    • +

      + [xry111] - Update to rustc-1.86.0. Fixes + #21388. +

      +
    • +
    • +

      + [bdubbs] - Update to Business-ISBN-3.012 (Perl + module). Fixes + #21448. +

      +
    • +
    • +

      + [bdubbs] - Update to Business-ISMN-1.205 (Perl + module). Fixes + #21440. +

      +
    • +
    • +

      + [bdubbs] - Update to iso-codes-4.18.0. Fixes + + #21430. +

      +
    • +
    • +

      + [bdubbs] - Update to fontconfig-2.16.2. Fixes + + #21428. +

      +
    • +
    • +

      + [thomas] - Update to neon-0.34.2. Fixes + #21459. +

      +
    • +
    +
    +
  • +
  • +

    + April 15th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to libaom-3.12.1. Fixes + #21454. +

      +
    • +
    • +

      + [renodr] - Update to gnome-online-accounts-3.54.2. + Fixes + #21431. +

      +
    • +
    • +

      + [renodr] - Update to vte-0.80.1. Fixes + #21432. +

      +
    • +
    • +

      + [bdubbs] - Update to xfce4-pulseaudio-plugin-0.5.0. + Fixes + #21427. +

      +
    • +
    • +

      + [bdubbs] - Update to libadwaita-1.7.2. Fixes + + #21423. +

      +
    • +
    • +

      + [bdubbs] - Update to xterm-398. Fixes + #21422. +

      +
    • +
    • +

      + [bdubbs] - Update to libnvme-1.13. Fixes + #21421. +

      +
    • +
    • +

      + [bdubbs] - Update to cmake-4.0.1. Fixes + #21414. +

      +
    • +
    • +

      + [renodr] - Update to thunderbird-128.9.2esr + (Security Update). Fixes + #21457. +

      +
    • +
    • +

      + [thomas] - Update to xfsprogs-6.14.0. Fixes + + #21446. +

      +
    • +
    • +

      + [thomas] - Update to neon-0.34.1. Fixes + #21450. +

      +
    • +
    • +

      + [thomas] - Update to liburcu-0.15.2. Fixes + + #21447. +

      +
    • +
    +
    +
  • +
  • +

    + April 14th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to alsa-lib, alsa-ucm-conf, + alsa-utils, and alsa-tools 1.2.14. Fixes + #21453. +

      +
    • +
    • +

      + [renodr] - Fix CVE-2025-3155 in yelp. Fixes + + #21445. +

      +
    • +
    • +

      + [renodr] - Update to gnome-user-docs-48.1. Fixes + + #21426. +

      +
    • +
    • +

      + [renodr] - Update to WebKitGTK-2.48.1. Fixes + + #21385. +

      +
    • +
    • +

      + [bdubbs] - Update to openssh-10.0p1 and + ssh-askpass-10.0p1. Fixes + #21411. +

      +
    • +
    • +

      + [bdubbs] - Update to Python-3.13.3 (Security + Update). Fixes + #21409. +

      +
    • +
    • +

      + [bdubbs] - Update to libcap-2.76. Fixes + #21438. +

      +
    • +
    • +

      + [renodr] - Update to gjs-1.84.2. Fixes + #21441. +

      +
    • +
    • +

      + [renodr] - Update to vorbis-tools-1.4.3. Fixes + + #21443. +

      +
    • +
    • +

      + [renodr] - Update to thunderbird-128.9.1esr + (Security Update). Fixes + #21375. +

      +
    • +
    • +

      + [renodr] - Update to firefox-128.9.0esr (Security + Update). Fixes + #21354. +

      +
    • +
    • +

      + [renodr] - Update to cups-2.4.12. Fixes + #21410. +

      +
    • +
    +
    +
  • +
  • +

    + April 11th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to php-8.4.6. Fixes + #21418. +

      +
    • +
    • +

      + [bdubbs] - Update to mako-1.3.10 (Python Module). + Fixes + #21417. +

      +
    • +
    • +

      + [bdubbs] - Update to upower-v1.90.9. Fixes + + #21416. +

      +
    • +
    • +

      + [bdubbs] - Update to boost-1.88.0. Fixes + #21415. +

      +
    • +
    • +

      + [bdubbs] - Update to ibus-1.5.32. Fixes + #21408. +

      +
    • +
    +
    +
  • +
  • +

    + April 10th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libvpx-1.15.1. Fixes + #21413. +

      +
    • +
    • +

      + [bdubbs] - Update to libqmi-1.36.0. Fixes + #21412. +

      +
    • +
    • +

      + [bdubbs] - Update to libmbim-1.32.0. Fixes + + #21407. +

      +
    • +
    • +

      + [bdubbs] - Update to libgpg-error-1.53. Fixes + + #21406. +

      +
    • +
    • +

      + [bdubbs] - Update to wayland-protocols-1.43. Fixes + + #21405. +

      +
    • +
    +
    +
  • +
  • +

    + April 9th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fix building libcdio on i686 systems. +

      +
    • +
    • +

      + [renodr] - Fix building Qt6 on i686 systems. +

      +
    • +
    +
    +
  • +
  • +

    + April 8th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to SPIRV-LLVM-Translator-20.1.1. + Fixes + #21370. +

      +
    • +
    • +

      + [renodr] - Update to exempi-2.6.6 (Security + Update). Fixes + #21376. +

      +
    • +
    • +

      + [renodr] - Update to c-ares-1.34.5 (Security + Update). Fixes + #21403. +

      +
    • +
    • +

      + [renodr] - Update to make-ca-1.16. Fixes + #21404. +

      +
    • +
    • +

      + [bdubbs] - Update to soundtouch-2.4.0. Fixes + + #21402. +

      +
    • +
    • +

      + [bdubbs] - Update to mercurial-7.0.1 (Security + Update). Fixes + #21401. +

      +
    • +
    +
    +
  • +
  • +

    + April 7th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to gtk-4.18.4. Fixes + #21398. +

      +
    • +
    • +

      + [bdubbs] - Update to qpdf-12.1.0. Fixes + #21397. +

      +
    • +
    • +

      + [bdubbs] - Update to protobuf-c-1.5.2. Fixes + + #21396. +

      +
    • +
    • +

      + [zeckma] - Update to imlib2-1.12.5. Fixes + #21399. +

      +
    • +
    +
    +
  • +
  • +

    + April 6th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to harfbuzz-11.0.1. Fixes + + #21393. +

      +
    • +
    • +

      + [bdubbs] - Update to lxml-5.3.2 (Security Update). + Fixes + #21395. +

      +
    • +
    • +

      + [thomas] - Fix building mariadb with libxml-2.14.x. +

      +
    • +
    +
    +
  • +
  • +

    + April 4th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to qcoro-0.12.0. Fixes + #21391. +

      +
    • +
    • +

      + [bdubbs] - Update to glib-2.84.1. Fixes + #21389. +

      +
    • +
    • +

      + [bdubbs] - Update to libxml2-2.14.1. Fixes + + #21390. +

      +
    • +
    +
    +
  • +
  • +

    + April 3rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Add a patch to glslang-15.2.0 to ensure + libSPIRV.so is installed. Fixes + #21387. +

      +
    • +
    • +

      + [bdubbs] - Update to libei-1.4.1. Fixes + #21384. +

      +
    • +
    • +

      + [bdubbs] - Update to poppler-25.04.0. Fixes + + #21377. +

      +
    • +
    • +

      + [bdubbs] - Update to libreoffice-25.2.2.2 (Security + Update). Fixes + #21343. +

      +
    • +
    • +

      + [renodr] - Fix building JSON-C with CMake 4.0. +

      +
    • +
    • +

      + [zeckma] - Update to libinput-1.28.1 (Xorg driver). + Fixes + #21383. +

      +
    • +
    • +

      + [bdubbs] - Update to libxml2-2.14.0. Fixes + + #21355. +

      +
    • +
    +
    +
  • +
  • +

    + April 2nd, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fix building graphite2 with CMake 4.0. +

      +
    • +
    • +

      + [renodr] - Fix building tidy-html5 with CMake 4.0. +

      +
    • +
    • +

      + [zeckma] - Update to mesa-25.0.3. Fixes + #21386. +

      +
    • +
    • +

      + [zeckma] - Update to curl-8.13.0. Fixes + #21381. +

      +
    • +
    • +

      + [zeckma] - Update to hwdata-0.394. Fixes + #21382. +

      +
    • +
    • +

      + [thomas] - Update to nano-8.4. Fixes + #21380. +

      +
    • +
    • +

      + [bdubbs] - Update to qt6-6.9.0 and + qtwebengine-6.9.0. Fixes + #21378. +

      +
    • +
    +
    +
  • +
  • +

    + April 1st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to mupdf-1.25.6. Fixes + #21372. +

      +
    • +
    • +

      + [bdubbs] - Update to upower-v1.90.8. Fixes + + #21371. +

      +
    • +
    • +

      + [bdubbs] - Update to mousepad-0.6.5. Fixes + + #21369. +

      +
    • +
    • +

      + [bdubbs] - Update to bluefish-2.2.17. Fixes + + #21368. +

      +
    • +
    • +

      + [bdubbs] - Update to btrfs-progs-v6.14. Fixes + + #21349. +

      +
    • +
    +
    +
  • +
  • +

    + March 31st, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to icewm-3.7.3. Fixes + #21366. +

      +
    • +
    • +

      + [bdubbs] - Update to nfs-utils-2.8.3. Fixes + + #21365. +

      +
    • +
    • +

      + [bdubbs] - Update to libarchive-3.7.9. Fixes + + #21364. +

      +
    • +
    • +

      + [bdubbs] - Update to vim-1263. Addresses + #12241. +

      +
    • +
    • +

      + [bdubbs] - Update to shadow-4.17.4. Fixes + #21305. +

      +
    • +
    • +

      + [renodr] - Update to exim-4.98.2 (Security Update). + Fixes + #21336. +

      +
    • +
    +
    +
  • +
  • +

    + March 30th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Fix building mariadb with CMake 4.0. +

      +
    • +
    • +

      + [bdubbs] - Update to gtk-4.18.3. Fixes + #21363. +

      +
    • +
    • +

      + [bdubbs] - Update to inih-r59. Fixes + #21362. +

      +
    • +
    • +

      + [bdubbs] - Update to libnotify-0.8.6. Fixes + + #21361. +

      +
    • +
    • +

      + [bdubbs] - Update to at-spi2-core-2.56.1. Fixes + + #21360. +

      +
    • +
    • +

      + [bdubbs] - Update to cmake-4.0.0. Fixes + #21359. +

      +
    • +
    • +

      + [bdubbs] - Update to nss-3.110. Fixes + #21358. +

      +
    • +
    • +

      + [bdubbs] - Update to glslang-15.2.0. Fixes + + #21357. +

      +
    • +
    +
    +
  • +
  • +

    + March 28th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to mpv-0.40.0. Fixes + #21344. +

      +
    • +
    • +

      + [bdubbs] - Update to scons-4.9.1. Fixes + #21356. +

      +
    • +
    • +

      + [pierre] - Update to mercurial-7.0. Fixes + #21194. +

      +
    • +
    • +

      + [pierre] - Add build-1.2.2.post1 (Python module) + and its dependency pyproject_hooks-1.2.0. Part of + + #21194. +

      +
    • +
    • +

      + [bdubbs] - Update to jasper-4.2.5. Fixes + #21351. +

      +
    • +
    • +

      + [bdubbs] - Update to protobuf-30.2. Fixes + #21350. +

      +
    • +
    • +

      + [bdubbs] - Update to xfce4-terminal-1.1.5. Fixes + + #21346. +

      +
    • +
    +
    +
  • +
  • +

    + March 27th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to qemu-9.2.3. Fixes + #21338. +

      +
    • +
    • +

      + [bdubbs] - Update to ristretto-0.13.4. Fixes + + #21342. +

      +
    • +
    • +

      + [bdubbs] - Update to pyparsing-3.2.3 (Python + module). Fixes + #21339. +

      +
    • +
    • +

      + [bdubbs] - Update to mousepad-0.6.4. Fixes + + #21337. +

      +
    • +
    • +

      + [bdubbs] - Update to libcap-2.75. Fixes + #21173. +

      +
    • +
    • +

      + [bdubbs] - Update to qt6-6.8.3 and + qtwebengine-6.8.3. Fixes + #21341. +

      +
    • +
    • +

      + [thomas] - Upgrade to kea-2.6.2. Fixes + #21340. +

      +
    • +
    +
    +
  • +
  • +

    + March 26th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to snapshot-48.0.1. Fixes + + #21255. +

      +
    • +
    • +

      + [renodr] - Update to gnome-weather-48.0. Fixes + + #21254. +

      +
    • +
    • +

      + [renodr] - Update to gnome-terminal-3.56.0. Fixes + + #21270. +

      +
    • +
    • +

      + [renodr] - Update to gnome-system-monitor-48.0. + Fixes + #21269. +

      +
    • +
    • +

      + [renodr] - Update to gnome-maps-48.1. Fixes + + #21268. +

      +
    • +
    • +

      + [renodr] - Update to gnome-connections-48.0. Fixes + + #21347. +

      +
    • +
    • +

      + [renodr] - Update to FreeRDP-3.14.1. Fixes + + #21256. +

      +
    • +
    • +

      + [renodr] - Update to gnome-calculator-48.0.2. Fixes + + #21267. +

      +
    • +
    • +

      + [renodr] - Update to evince-48.0. Fixes + #21266. +

      +
    • +
    • +

      + [renodr] - Update to baobab-48.0. Fixes + #21252. +

      +
    • +
    +
    +
  • +
  • +

    + March 25th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to gtkmm-3.24.10. Fixes + #21334. +

      +
    • +
    • +

      + [renodr] - Update to gimp-3.0.2. Fixes + #21335. +

      +
    • +
    • +

      + [renodr] - Update to gnome-user-docs-47.5. Fixes + + #21277. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell-extensions-48.0. + Fixes + #21276. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell-48.0. Fixes + + #21276. +

      +
    • +
    • +

      + [renodr] - Update to gdm-48.0. Fixes + #21295. +

      +
    • +
    • +

      + [renodr] - Update to mutter-48.0. Fixes + #21278. +

      +
    • +
    • +

      + [bdubbs] - Update to libevdev-1.13.4. Fixes + + #21333. +

      +
    • +
    • +

      + [bdubbs] - Update to pyparsing-3.2.2 (Python + Module). Fixes + #21332. +

      +
    • +
    • +

      + [bdubbs] - Update to unrar-7.1.6. Fixes + #21331. +

      +
    • +
    • +

      + [renodr] - Update to gnome-control-center-48.0. + Fixes + #21288. +

      +
    • +
    • +

      + [bdubbs] - Update to gegl-0.4.58. Fixes + #21330. +

      +
    • +
    • +

      + [bdubbs] - Update to ed-1.21.1. Fixes + #21329. +

      +
    • +
    • +

      + [renodr] - Update to tecla-48.0.2. Fixes + #21290. +

      +
    • +
    • +

      + [renodr] - Update to gnome-settings-daemon-48.0. + Fixes + #21289. +

      +
    • +
    • +

      + [renodr] - Fix building gnome-bluetooth with + pygobject-3.52.0 and later. Thank you to Xi for the + patch and to Wayne Blaszczyk for the initial + report. +

      +
    • +
    • +

      + [renodr] - Update to nautilus-48.0. Fixes + #21279. +

      +
    • +
    • +

      + [renodr] - Update to gnome-backgrounds-48.0. Fixes + + #21251. +

      +
    • +
    +
    +
  • +
  • +

    + March 24th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to ncftp-3.2.9. Fixes + #21321. +

      +
    • +
    • +

      + [bdubbs] - Update to wayland-protocols-1.42. Fixes + + #21327. +

      +
    • +
    • +

      + [bdubbs] - Update to libinput-1.28.0. Fixes + + #21328. +

      +
    • +
    • +

      + [bdubbs] - Update to xfce4-session-4.20.2. Fixes + + #21326. +

      +
    • +
    • +

      + [bdubbs] - Update to xfce4-panel-4.20.4. Fixes + + #21325. +

      +
    • +
    • +

      + [bdubbs] - Update to libxfce4ui-4.20.1. Fixes + + #21323. +

      +
    • +
    • +

      + [bdubbs] - Update to libxfce4util-4.20.1. Fixes + + #21324. +

      +
    • +
    • +

      + [bdubbs] - Update to harfbuzz-11.0.0. Fixes + + #21320. +

      +
    • +
    • +

      + [renodr] - Update to gtkmm-4.18.0. Fixes + #21322. +

      +
    • +
    • +

      + [renodr] - Update to libwacom-2.15.0. Fixes + + #21312. +

      +
    • +
    • +

      + [renodr] - Update to cifs-utils-7.3. Fixes + + #21309. +

      +
    • +
    • +

      + [renodr] - Update to epiphany-48.0. Fixes + #21260. +

      +
    • +
    • +

      + [renodr] - Update to xdg-desktop-portal-gnome-48.0. + Fixes + #21291. +

      +
    • +
    • +

      + [renodr] - Update to xdg-desktop-portal-gtk-1.15.3. + Fixes + #21315. +

      +
    • +
    • +

      + [renodr] - Update to evolution and + evolution-data-server 3.56.0. Fixes + #21250. +

      +
    • +
    • +

      + [renodr] - Update to libshumate-1.4.0. Fixes + + #21264. +

      +
    • +
    • +

      + [renodr] - Update to gnome-online-accounts-3.54.1. + Fixes + #21263. +

      +
    • +
    • +

      + [renodr] - Update to gtksourceview5-5.16.0. Fixes + + #21262. +

      +
    • +
    +
    +
  • +
  • +

    + March 23rd, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to xarchiver-0.5.4.25. Fixes + + #21319. +

      +
    • +
    • +

      + [bdubbs] - Update to fcron-3.4.0. Fixes + #21318. +

      +
    • +
    • +

      + [bdubbs] - Update to sbc-2.1. Fixes + #21317. +

      +
    • +
    • +

      + [bdubbs] - Update to libsoup-3.6.5. Fixes + #21314. +

      +
    • +
    • +

      + [bdubbs] - Update to libidn-1.43. Fixes + #21311. +

      +
    • +
    • +

      + [bdubbs] - Update to libarchive-3.7.8 (Security + update). Fixes + #21308. +

      +
    • +
    • +

      + [bdubbs] - Update to libusb-1.0.28. Fixes + #21199. +

      +
    • +
    +
    +
  • +
  • +

    + March 21st, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to libadwaita-1.7.0. Fixes + + #21248. +

      +
    • +
    • +

      + [renodr] - Update to gcr-4.4.0.1. Fixes + #21300. +

      +
    • +
    • +

      + [renodr] - Update to libclc-20.1.1. Fixes + #21188. +

      +
    • +
    • +

      + [renodr] - Update to llvm-20.1.1. Fixes + #21192. +

      +
    • +
    • +

      + [renodr] - Update to WebKitGTK-2.48.0 (Security + Update). Fixes + #21246. +

      +
    • +
    +
    +
  • +
  • +

    + March 20th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to mesa-25.0.2. Fixes + #21310. +

      +
    • +
    • +

      + [renodr] - Update to gnome-keyring-48.0. Fixes + + #21301. +

      +
    • +
    • +

      + [renodr] - Update to libsecret-0.21.7. Fixes + + #21302. +

      +
    • +
    • +

      + [renodr] - Update to gjs-1.84.1. Fixes + #21292. +

      +
    • +
    • +

      + [renodr] - Update to gtk-4.18.2. Fixes + #21245. +

      +
    • +
    • +

      + [renodr] - Update to localsearch-3.9.0. Fixes + + #21294. +

      +
    • +
    • +

      + [renodr] - Update to tinysparql-3.9.1. Fixes + + #21293. +

      +
    • +
    • +

      + [thomas] - Update to bind-9.20.7. Fixes + #21306. +

      +
    • +
    • +

      + [thomas] - Update to vte-0.80.0. Added a page for + new dependency to 'fast_float'. Fixes + #21265. +

      +
    • +
    • +

      + [renodr] - Update to rustc-1.85.1. Fixes + #21299. +

      +
    • +
    • +

      + [renodr] - Update to libclc-20.1.0. Fixes + #21188. +

      +
    • +
    • +

      + [renodr] - Update to SPIRV-LLVM-Translator-20.1.0. + Fixes + #22159. +

      +
    • +
    • +

      + [renodr] - Update to SPIRV-Headers and SPIRV-Tools + 1.4.309.0. Fixes + #21236. +

      +
    • +
    • +

      + [renodr] - Update to Vulkan-Headers and + Vulkan-Loader 1.4.309. Fixes + #21242. +

      +
    • +
    +
    +
  • +
  • +

    + March 19th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to llvm-20.1.0. Fixes + #21192. +

      +
    • +
    • +

      + [zeckma] - Update to thunderbird-128.8.1esr. Fixes + + #21303. +

      +
    • +
    • +

      + [renodr] - Add an entry to AppStream for LFS 12.3. +

      +
    • +
    • +

      + [renodr] - Update to adwaita-icon-theme-48.0. Fixes + + #21249. +

      +
    • +
    • +

      + [bdubbs] - Update to abseil-cpp-20250127.1. Fixes + + #21297. +

      +
    • +
    • +

      + [bdubbs] - Update to pipewire-1.4.1. Fixes + + #21257. +

      +
    • +
    • +

      + [bdubbs] - Update to libei-1.4.0. Fixes + #21010. +

      +
    • +
    • +

      + [renodr] - Update to glibmm-2.66.8. Fixes + #21283. +

      +
    • +
    +
    +
  • +
  • +

    + March 18th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to librsvg-2.60.0. Fixes + + #21298. +

      +
    • +
    • +

      + [renodr] - Update to libavif-1.2.1. Fixes + #21285. +

      +
    • +
    • +

      + [renodr] - Update to at-spi2-core-2.56.0. Fixes + + #21261. +

      +
    • +
    • +

      + [renodr] - Update to dbus-1.16.2. Fixes + #21168. +

      +
    • +
    • +

      + [bdubbs] - Update to imlib2-1.12.4. Fixes + #21287. +

      +
    • +
    • +

      + [bdubbs] - Update to sentry_sdk-2.23.1 (Python + module). Fixes + #21286. +

      +
    • +
    • +

      + [bdubbs] - Update to libnvme-1.12. Fixes + #21284. +

      +
    • +
    +
    +
  • +
  • +

    + March 17th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to gimp-3.0.0. Fixes + #21281. +

      +
    • +
    • +

      + [bdubbs] - Update to mupdf-1.25.5. Fixes + #21258. +

      +
    • +
    • +

      + [bdubbs] - Update to xarchiver-0.5.4.24. Fixes + + #21280. +

      +
    • +
    • +

      + [bdubbs] - Update to pango-1.56.3. Fixes + #21275. +

      +
    • +
    • +

      + [bdubbs] - Update to pygobject-3.52.3 (Python + module). Fixes + #21274. +

      +
    • +
    • +

      + [bdubbs] - Update to numpy-2.2.4 (Python module). + Fixes + #21273. +

      +
    • +
    • +

      + [bdubbs] - Update to gegl-0.4.56. Fixes + #21272. +

      +
    • +
    • +

      + [bdubbs] - Update to babl-0.1.112. Fixes + #21271. +

      +
    • +
    • +

      + [renodr] - Fix a runtime issue in glib2 caused by + the new version of gobject-introspection. +

      +
    • +
    • +

      + [renodr] - Update to gobject-introspection-1.84.0. + Fixes + #21259. +

      +
    • +
    • +

      + [renodr] - Update to + gsettings-desktop-schemas-48.0. Fixes + #21282. +

      +
    • +
    +
    +
  • +
  • +

    + March 16th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to proftpd-1.3.9. Fixes + #21244. +

      +
    • +
    • +

      + [renodr] - Update to icu-77.1. Fixes + #21238. +

      +
    • +
    • +

      + [renodr] - Update to gutenprint-5.3.5. Fixes + + #21235. +

      +
    • +
    • +

      + [thomas] - Update to git-2.49.0. Fixes + #21243. +

      +
    • +
    +
    +
  • +
  • +

    + March 15th, 2025 +

    +
    +
      +
    • +

      + [rahul] - Update to protobuf-30.1. Fixes + #21189. +

      +
    • +
    • +

      + [pierre] - Update to libxkbcommon-1.8.1. Fixes + + #21226. +

      +
    • +
    +
    +
  • +
  • +

    + March 14th, 2025 +

    +
    +
      +
    • +

      + [rahul] - Update to nss-3.109. Fixes + #21167. +

      +
    • +
    • +

      + [rahul] - Update to nghttp2-1.65.0. Fixes + #21180. +

      +
    • +
    • +

      + [renodr] - Update to epiphany-47.4. Fixes + #21241. +

      +
    • +
    • +

      + [renodr] - Update to php-8.4.5 (Security Update). + Fixes + #21240. +

      +
    • +
    • +

      + [renodr] - Update to dbus-python-1.4.0 (Python + Module). Fixes + #21239. +

      +
    • +
    • +

      + [renodr] - Update to dbus-glib-0.114. Fixes + + #21237. +

      +
    • +
    • +

      + [renodr] - Update the gstreamer stack to 1.26.0. + Fixes + #21231. +

      +
    • +
    +
    +
  • +
  • +

    + March 13th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to pygobject3-3.52.2 (Python + module). Fixes + #21234. +

      +
    • +
    • +

      + [bdubbs] - Update to libxslt-1.1.43 (Security + Update). Fixes + #21233. +

      +
    • +
    • +

      + [bdubbs] - Update to libxmlb-0.3.22. Fixes + + #21232. +

      +
    • +
    • +

      + [bdubbs] - Update to pango-1.56.2. Fixes + #21229. +

      +
    • +
    • +

      + [bdubbs] - Update to ncftp-3.2.8. Fixes + #21228. +

      +
    • +
    • +

      + [renodr] - Update to texlive-20250308. Fixes + + #21220. +

      +
    • +
    +
    +
  • +
  • +

    + March 12th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to qpdf-12.0.0. Fixes + #21221. +

      +
    • +
    • +

      + [renodr] - Update to qca-2.3.10. Fixes + #21216. +

      +
    • +
    • +

      + [renodr] - Update to glibmm-2.84.0. Fixes + #21215. +

      +
    • +
    • +

      + [renodr] - Update to cairo-1.18.4. Fixes + #21214. +

      +
    • +
    +
    +
  • +
  • +

    + March 11th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Update to cssselect-1.3.0 (Python + Module). Fixes + #21225. +

      +
    • +
    • +

      + [bdubbs] - Update to newt-0.52.25. Fixes + #21224. +

      +
    • +
    • +

      + [bdubbs] - Update to libical-3.0.20. Fixes + + #21223. +

      +
    • +
    • +

      + [renodr] - Update to libidn2-2.3.8. Fixes + #21207. +

      +
    • +
    +
    +
  • +
  • +

    + March 10th, 2025 +

    +
    +
      +
    • +

      + [rahul] - Update to ffmpeg-7.1.1. Fixes + #21181. +

      +
    • +
    • +

      + [rahul] - Update to gtk3-3.24.49. Fixes + #21195. +

      +
    • +
    • +

      + [rahul] - Update to pipewire-1.4.0. Fixes + #21203. +

      +
    • +
    • +

      + [bdubbs] - Update to icewm-3.7.2. Fixes + #21219. +

      +
    • +
    • +

      + [bdubbs] - Update to xinit-1.4.4. Fixes + #21218. +

      +
    • +
    • +

      + [bdubbs] - Update to xauth-1.1.4 (Xorg app). Fixes + + #21212. +

      +
    • +
    • +

      + [bdubbs] - Update to libSM-1.2.6 (Xorg library). + Fixes + #21210. +

      +
    • +
    • +

      + [bdubbs] - Update to libX11-1.8.12 (Xorg library). + Fixes + #21211. +

      +
    • +
    • +

      + [bdubbs] - Update to xtrans-1.6.0 (Xorg library). + Fixes + #21213. +

      +
    • +
    • +

      + [bdubbs] - Update to pygobject3-3.52.1 (Python + module). Fixes + #21217. +

      +
    • +
    • +

      + [bdubbs] - Update to libpng-1.6.47. Fixes + #21110. +

      +
    • +
    +
    +
  • +
  • +

    + March 9th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Combine all libgedit packages into + Gedit, and update to + libgedit-gtksourceview-299.5.0, + libgedit-amtk-5.9.1, libgedit-tepl-6.13.0, and + libgedit-gfls-0.3.0. Fixes + #21205, + #21206, + #21208, and + #21209. +

      +
    • +
    +
    +
  • +
  • +

    + March 8th, 2025 +

    +
    +
      +
    • +

      + [thomas] - Update to lvm2-2.03.31. Fixes + #21158. +

      +
    • +
    +
    +
  • +
  • +

    + March 7th, 2025 +

    +
    +
      +
    • +

      + [renodr] - Update to dvisvgm-3.4.4. Fixes + #21204. +

      +
    • +
    • +

      + [renodr] - Update to FreeRDP-3.13.0. Fixes + + #21202. +

      +
    • +
    • +

      + [renodr] - Update to samba-4.22.0. Fixes + #21200. +

      +
    • +
    • +

      + [renodr] - Update to mutter-47.6. Fixes + #21190. +

      +
    • +
    • +

      + [renodr] - Update to gnome-shell-47.5. Fixes + + #21184. +

      +
    • +
    • +

      + [renodr] - Update to vala-0.56.18. Fixes + #21179. +

      +
    • +
    • +

      + [renodr] - Update to SCons-4.9.0. Fixes + #21175. +

      +
    • +
    • +

      + [renodr] - Update to shaderc-2025.1. Fixes + + #21156. +

      +
    • +
    • +

      + [renodr] - Update to ModemManager-1.22.0. Fixes + + #21129. +

      +
    • +
    • +

      + [renodr] - Update to wayland-protocols-1.41. Fixes + + #21097. +

      +
    • +
    • +

      + [renodr] - Update to Thunderbird-128.8.0esr + (Security Update). Fixes + #21193. +

      +
    • +
    • +

      + [bdubbs] - Update to glib-2.84.0. Fixes + #21198. +

      +
    • +
    • +

      + [bdubbs] - Update to poppler-25.03.0. Fixes + + #21183. +

      +
    • +
    • +

      + [bdubbs] - Update to libqalculate-5.5.2. Fixes + + #21174. +

      +
    • +
    • +

      + [bdubbs] - Update to libqmi-1.34.0. Fixes + #21166. +

      +
    • +
    • +

      + [renodr] - Update to Firefox-128.8.0esr and + Spidermonkey (Security Update). Fixes + #21182. +

      +
    • +
    • +

      + [bdubbs] - Update to libmbim-1.30.0. Fixes + + #21165. +

      +
    • +
    • +

      + [bdubbs] - Update to NetworkManager-1.52.0. Fixes + + #21164. +

      +
    • +
    +
    +
  • +
  • +

    + March 6th, 2025 +

    +
    +
      +
    • +

      + [zeckma] - Update to mesa-25.0.1. Fixes + #21119. +

      +
    • +
    • +

      + [bdubbs] - Update to hwdata-0.393. Fixes + #21187. +

      +
    • +
    • +

      + [bdubbs] - Update to cmake-3.31.6. Fixes + #21149. +

      +
    • +
    • +

      + [bdubbs] - Update to faad2-2.11.2. Fixes + #21191. +

      +
    • +
    • +

      + [bdubbs] - Update to faac-1.31.1. Fixes + #21186. +

      +
    • +
    • +

      + [bdubbs] - Update to sphinx-8.2.3 (Python module). + Fixes + #21178. +

      +
    • +
    • +

      + [bdubbs] - Update to pytest-8.3.5 (Python module). + Fixes + #21177. +

      +
    • +
    • +

      + [bdubbs] - Update to Text-CSV-2.06 (Perl module). + Fixes + #21176. +

      +
    • +
    +
    +
  • +
  • +

    + March 5th, 2025 +

    +
    +
      +
    • +

      + [bdubbs] - Release of BLFS-12.3. +

      +
    • +
    +
    +
  • +
+
+
+
+
+
+

+ 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. +

+
+
+
+
+

+ Editor Notes +

+
+
+
+
+

+ The BLFS Project has created a Wiki for editors to comment on + pages and instructions at https://wiki.linuxfromscratch.org/blfs/wiki. +

+

+ When editor notes are + present, a link appears in the form https://wiki.linuxfromscratch.org/blfs/wiki/pkgname + right below the dependency list. The idea behind the editor + notes is to give additional information about the package + and/or its build instructions, common pitfalls or maybe even + more sophisticated configuration for special cases of use. +

+

+ The vast majority of the packages do not have editor notes. +

+
+

+ Note +

+

+ The editor notes might + be outdated. Even though the pages should be reviewed when a + package is updated, it might happen that there are notes + referring to an obsolete version and therefore, the notes + might be out of date. Always check the date of the notes and + more importantly, the version of the package the notes refer + to. +

+
+
+
+
+
+

+ 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 12.4), +

    +
  • +
  • +

    + 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 + (packing the book instructions into a script while the + book does not tell to do so is always considered as + deviation, because there have been too many cases of + issues where people fail to notice a subtle difference + between the script and the book), +

    +
  • +
  • +

    + 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. If you've deviated from the + book, you should also tell precisely what the deviation is so + the other people can reproduce it. A script can be attached + to show what you've exactly done (especially if you already + have such a script, i.e. you've already have deviated from + the book by packing the book instructions into a script and + run it). +

+

+ 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. +

+
+
+
+
+
+

+ 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 +

+
+
    +
  • +

    + Rahul Chandra +

    +
  • +
  • +

    + Bruce Dubbs +

    +
  • +
  • +

    + Pierre Labastie +

    +
  • +
  • +

    + Douglas Reno +

    +
  • +
  • +

    + Xi Ruoyao +

    +
  • +
  • +

    + Thomas Trepl +

    +
  • +
+
+
+
+

+ 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 +

    +
  • +
  • +

    + D-J Lucas +

    +
  • +
  • +

    + Chris Lynn +

    +
  • +
  • +

    + Andrew McMurry +

    +
  • +
  • +

    + Randy McMurchy +

    +
  • +
  • +

    + Ken Moffat +

    +
  • +
  • +

    + Denis Mugnier +

    +
  • +
  • +

    + Billy O'Connor +

    +
  • +
  • +

    + Fernando de Oliveira +

    +
  • +
  • +

    + Alexander Patrakov +

    +
  • +
  • +

    + Olivier Peres +

    +
  • +
  • +

    + Andreas Pedersen +

    +
  • +
  • +

    + Henning Rohde +

    +
  • +
  • +

    + Matt Rogers +

    +
  • +
  • +

    + James Robertson +

    +
  • +
  • +

    + Henning Rohde +

    +
  • +
  • +

    + Chris Staub +

    +
  • +
  • +

    + Jesse Tie-Ten-Quee +

    +
  • +
  • +

    + Ragnar Thomsen +

    +
  • +
  • +

    + Tushar Teredesai +

    +
  • +
  • +

    + Jeremy Utley +

    +
  • +
  • +

    + Zack Winkles +

    +
  • +
  • +

    + Christian Wurst +

    +
  • +
  • +

    + Igor Živković +

    +
  • +
+
+
+
+

+ 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 +

    +
  • +
+
+
+
+
+
+
+

+ Contact + Information +

+
+
+
+
+

+ Please direct your emails to one of the BLFS mailing lists. See + Mailing + lists for more information on the available mailing lists. +

+
+
+
+
+
+

+ 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 source + directory). We also assume you have uncompressed any required + patches and they are in the directory immediately above the + source directory. +

+

+ We can not emphasize strongly enough that you should start from + a clean source tree each + time. This means that if you have had an error during + configuration or compilation, it's usually best to delete the + source tree and re-unpack it before trying again. This obviously + doesn't apply if you're an advanced user used to hacking + Makefiles 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, sometimes we have a compressed patch file in + .patch.gz or .patch.bz2 format. The best way to apply + the patch is piping the output of the decompressor to the + patch utility. + For example: +

+
gzip -cd ../patchname.patch.gz | patch -p1
+

+ Or for a patch compressed with bzip2: +

+
bzcat ../patchname.patch.bz2 | patch -p1
+
+
+

+ 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 unmalicious changes to the file + content. For example, an error or truncation introduced + during network transfer, or a “stealth” update to + the package from the upstream (updating the content of a + released tarball instead of making a new release properly). +

+

+ There is no “100%” secure way to make sure the + genuity of the source files. Assuming the upstream is + managing their website correctly (the private key is not + leaked and the domain is not hijacked), and the trust anchors + have been set up correctly using make-ca-1.16.1 on the + BLFS system, we can reasonably trust download URLs to the + upstream official website with + https protocol. Note that BLFS book itself is + published on a website with https, so you should already have + some confidence in https protocol or you wouldn't trust the + book content. +

+

+ If the package is downloaded from an unofficial location (for + example a local mirror), checksums generated by + cryptographically secure digest algorithms (for example + SHA256) can be used to verify the genuity of the package. + Download the checksum file from the upstream official website (or somewhere + you can trust) and + compare the checksum of the package from unofficial location + with it. For example, SHA256 checksum can be checked with the + command: +

+
+

+ 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.4.8 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 to simultaneously + execute multiple jobs. +

+

+ For instance, an Intel Core i9-13900K CPU contains 8 + performance (P) cores and 16 efficiency (E) cores, and the P + cores support SMT (Simultaneous MultiThreading, also known as + “Hyper-Threading”) so each P core can + run two threads simultaneously and the Linux kernel will + treat each P core as two logical cores. As a result, there + are 32 logical cores in total. To utilize all these logical + cores running make, we can set an + environment variable to tell make to run 32 jobs + simultaneously: +

+
export MAKEFLAGS='-j32'
+

+ or just building with: +

+
make -j32
+

+ If you have applied the optional sed when building + ninja in LFS, you can use: +

+
export NINJAJOBS=32
+

+ when a package uses ninja, or just: +

+
ninja -j32
+

+ If you are not sure about the number of logical cores, run + the nproc + command. +

+

+ For make, the + default number of jobs is 1. But for ninja, the default number + of jobs is N + 2 if the number of logical cores N is greater + than 2; or N + 1 if N is 1 or 2. The reason to use a number + of jobs slightly greater than the number of logical cores is + keeping all logical processors busy even if some jobs are + performing I/O operations. +

+

+ Note that the -j switches only + limits the parallel jobs started by make or ninja, but each job may + still spawn its own processes or threads. For example, some + tests of packages can spawn multiple threads for testing + thread safety properties. There is no generic way for the + building system to know the number of processes or threads + spawned by a job. So generally we should not consider the + value passed with -j a hard limit + of the number of logical cores to use. Read the + section called “Use Linux Control Group to Limit the Resource + Usage” if you want to set such a hard limit. +

+

+ Generally the number of processes should not exceed the + number of cores supported by the CPU too much. To list the + processors on your system, issue: grep processor + /proc/cpuinfo. +

+

+ In some cases, using multiple processes may result in a race + condition where the success of the build depends on the order + of the commands run by the make program. For instance, + if an executable needs File A and File B, attempting to link + the program before one of the dependent components is + available will result in a failure. This condition usually + arises because the upstream developer has not properly + designated all the prerequisites needed to accomplish a step + in the Makefile. +

+

+ If this occurs, the best way to proceed is to drop back to a + single processor build. Adding -j1 to a make command will override the + similar setting in the MAKEFLAGS + environment variable. +

+
+

+ Important +

+

+ Another problem may occur with modern CPU's, which have a + lot of cores. Each job started consumes memory, and if the + sum of the needed memory for each job exceeds the available + memory, you may encounter either an OOM (Out of Memory) + kernel interrupt or intense swapping that will slow the + build beyond reasonable limits. +

+

+ Some compilations with g++ may consume up to 2.5 + GB of memory, so to be safe, you should restrict the number + of jobs to (Total Memory in GB)/2.5, at least for big + packages such as LLVM, WebKitGtk, QtWebEngine, or + libreoffice. +

+
+
+
+

+ Use Linux + Control Group to Limit the Resource Usage +

+

+ Sometimes we want to limit the resource usage when we build a + package. For example, when we have 8 logical cores, we may + want to use only 6 cores for building the package and reserve + another 2 cores for playing a movie. The Linux kernel + provides a feature called control groups (cgroup) for such a + need. +

+

+ Enable control group in the kernel configuration, then + rebuild the kernel and reboot if necessary: +

+
General setup --->
+  [*] Control Group support --->                                       [CGROUPS]
+    [*] Memory controller                                                [MEMCG]
+    [*] Cpuset controller                                              [CPUSETS]
+

+ Ensure Sudo-1.9.17p2 is installed. To run + make -j5 with + the first 4 logical cores and 8 GB of system memory, issue: +

+
bash -e << \EOF
+  sudo mkdir /sys/fs/cgroup/$$
+  sudo sh -c \
+    "echo +memory +cpuset > /sys/fs/cgroup/cgroup.subtree_control"
+  sudo sh -c \
+    "echo 0-3 > /sys/fs/cgroup/$$/cpuset.cpus"
+  sudo sh -c \
+    "echo $(bc -e '8*2^30') > /sys/fs/cgroup/$$/memory.high"
+  (
+    sudo sh -c "echo $BASHPID > /sys/fs/cgroup/$$/cgroup.procs"
+    exec make -j5
+  )
+  sudo rmdir /sys/fs/cgroup/$$
+EOF
+

+ With 8589934592 (the output of bc -e '8*2^30', 2^30 + represents 230, i.e. a Gigabyte) in the + memory.high entry, a + soft limit of memory usage is set. If the processes in the + cgroup (make + and all the descendants of it) uses more than 8 GB of system + memory in total, the kernel will throttle down the processes + and try to reclaim the system memory from them. But they can + still use more than 8 GB of system memory. If you want to + make a hard limit instead, replace memory.high with + memory.max. But doing so + will cause the processes killed if 8 GB is not enough for + them. +

+

+ 0-3 in the + cpuset.cpus entry makes + the kernel only run the processes in the cgroup on the + logical cores with numbers 0, 1, 2, or 3. You may need to + adjust this setting based the mapping between the logical + cores and the physical cores. For example, with an Intel Core + i9-13900K CPU, the logical cores 0, 2, 4, ..., 14 are mapped + to the first threads of the eight physical P cores, the + logical cores 1, 3, 5, ..., 15 are mapped to the second + threads of the physical P cores, and the logical cores 16, + 17, ..., 31 are mapped to the 16 physical E cores. So if we + want to use four threads from four different P cores, we need + to specify 0,2,4,6 instead of + 0-3. Note that the other CPU + models may use a different mapping scheme. If you are not + sure about the mapping between the logical cores and the + physical cores, run the lscpu + --extended command which will output logical + core IDs in the CPU + column, and physical core IDs in the CORE column. +

+

+ When the nproc + or ninja + command runs in a cgroup, it will use the number of logical + cores assigned to the cgroup as the “system logical core + count.” For example, in a cgroup with logical + cores 0-3 assigned, nproc will print + 4, and ninja will run 6 (4 + 2) + jobs simultaneously if no -j + setting is explicitly given. +

+

+ Read the Documentation/admin-guide/cgroup-v2.rst + file in the Linux kernel source tree for the detailed + explanation of cgroup2 pseudo + file system entries referred in the command. +

+
+
+

+ 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 Makefiles, + 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. +

+

+ 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 | less
+

+ Of course, you'll be required to view the output one page at + a time because the less filter was used. Now + try the same command, but this time redirect the output to a + file. The special file /dev/null can be used instead of the + filename shown, but you will have no log file to examine: +

+
ls -l /usr/bin | less > redirect_test.log 2>&1
+

+ Notice that this time the command immediately returned to the + shell prompt without having to page through the output. You + may now remove the log file. +

+

+ The last example will use the yes command in combination + with output redirection to bypass having to page through the + output and then provide a y to a prompt. This + technique could be used in instances when otherwise you would + have to page through the output of a file (such as a license + agreement) and then answer the question of do you accept the above?. For this + example, another short Bash + script is required: +

+
cat > blfs-yes-test2 << "EOF"
+#!/bin/bash
+
+ls -l /usr/bin | less
+
+echo -n -e "\n\nDid you enjoy reading this? (y,n) "
+
+read A_STRING
+
+if test "$A_STRING" = "y"; then A_STRING="You entered the 'y' key"
+else A_STRING="You did NOT enter the 'y' key"
+fi
+
+echo -e "\n\n$A_STRING\n\n"
+EOF
+chmod 755 blfs-yes-test2
+

+ This script can be used to simulate a program that requires + you to read a license agreement, then respond appropriately + to accept the agreement before the program will install + anything. First, run the script without any automation + techniques by issuing ./blfs-yes-test2. +

+

+ Now issue the following command which uses two automation + techniques, making it suitable for use in an automated build + script: +

+
yes | ./blfs-yes-test2 > blfs-yes-test2.log 2>&1
+

+ If desired, issue tail + blfs-yes-test2.log to see the end of the + paged output, and confirmation that y was passed through to the + script. Once satisfied that it works as it should, you may + remove the script and log file. +

+

+ Finally, keep in mind that there are many ways to automate + and/or script the build commands. There is not a single + “correct” way to do it. Your imagination + is the only limit. +

+
+
+

+ 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, + except if the dependency is said to be “runtime” + which means the target package can be built but cannot + function without it. +

    +

    + Note that a target package can start to “function” in + many subtle ways: an installed configuration file can + make the init system, cron daemon, or bus daemon to run + a program automatically; another package using the + target package as a dependency can run a program from + the target package in the building system; and the + configuration sections in the BLFS book may also run a + program from a just installed package. So if you are + installing the target package without a Required (runtime) + dependency installed, You should install the dependency + as soon as possible after the installation of the + target package. +

    +
  • +
  • +

    + Recommended + means that BLFS strongly suggests this package is + installed first (except if said to be “runtime,” + see below) for a clean and trouble-free build, that + won't have issues either during the build process, or + at run-time. The instructions in the book assume these + packages are installed. In many cases, if a recommended + dependency (not just “runtime”) is not installed, the + built package may lack some important functionalities + (for example, a video player may be only able to play + audio). Sometimes, it's needed to modify the book + instructions to disable those important + functionalities. In other cases, the build system of + the package may build a copy of the dependency (often + outdated and sometimes with known security + vulnerabilities) shipped in the source tree, or may be + downloaded from the Internet during the build process. + This increases build time and disk usage. This could + potentially cause other problems. If a recommended + dependency is said to be “runtime,” it + means that BLFS strongly suggests that this dependency + is installed before using the package, for getting full + functionality. +

    +
  • +
  • +

    + Optional means + that this package might be installed for added + functionality. Often BLFS will describe the dependency + to explain the added functionality that will result. + Some optional dependencies are automatically picked up + by the target package if the dependency is installed, + while others also need additional configuration options + to be enabled when the target package is built. Such + additional options are often documented in the BLFS + book. If an optional dependency is said to be + “runtime,” it means you may + install the dependency after installing the target + package to support some optional features of the target + package if you need these features. +

    +

    + An optional dependency may be out of BLFS. If you need + such an external + optional dependency for some features you need, read + Going Beyond BLFS for the + general hint about installing an out-of-BLFS package. + Note that the BLFS editors don't test a configuration + with external packages in general, thus there is + absolutely no quality assurance for the external + dependencies listed in the book. The list of external + dependencies may be incomplete or contain some + redundant item. In the worst case, the mere existence + of an external dependency on the system can trigger a + bug in the package, causing a build or runtime failure. +

    +
  • +
+
+
+
+

+ 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 +

+

+ 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. Stripping + can be done while installing a package, or afterwards. +

+

+ Stripping while Installing a Package +

+

+ There are several ways to strip executables installed by a + package. They depend on the build system used (see below + the section about + build systems), so only some generalities can be listed + here: +

+
+

+ Note +

+

+ The following methods using the feature of a building + system (autotools, meson, or cmake) will not strip static + libraries if any is installed. Fortunately there are not + too many static libraries in BLFS, and a static library can + always be stripped safely by running strip --strip-unneeded on + it manually. +

+
+
+
    +
  • +

    + The packages using autotools usually have an install-strip target in + their generated Makefile + files. So installing stripped executables is just a + matter of using make + install-strip instead of make install. +

    +
  • +
  • +

    + The packages using the meson build system can accept + -D strip=true + when running meson. If you've + forgot to add this option running the meson, you can also + run meson install + --strip instead of ninja install. +

    +
  • +
  • +

    + cmake + generates install/strip targets for + both the Unix + Makefiles and Ninja generators (the + default is Unix + Makefiles on linux). So just run + make + install/strip or ninja install/strip + instead of the install counterparts. +

    +
  • +
  • +

    + Removing (or not generating) debug symbols can also be + achieved by removing the -g<something> + options in C/C++ calls. How to do that is very specific + for each package. And, it does not remove unneeded + symbol table entries. So it will not be explained in + detail here. See also below the paragraphs about + optimization. +

    +
  • +
+
+

+ Stripping Installed Executables +

+

+ The strip + utility changes files in place, which may break anything + using it if it is loaded in memory. Note that if a file is in + use but just removed from the disk (i.e. not overwritten nor + modified), this is not a problem since the kernel can use + “deleted” files. Look at /proc/*/maps and it is likely that you'll + see some (deleted) + entries. The mv + just removes the destination file from the directory but does + not touch its content, so that it satisfies the condition for + the kernel to use the old (deleted) file. But this approach + can detach hard links into duplicated copies, causing a bloat + which is obviously unwanted as we are stripping to reduce + system size. If two files in a same file system share the + same inode number, they are hard links to each other and we + should reconstruct the link. The script below is just an + example. It should be run as the root user: +

+
cat > /usr/sbin/strip-all.sh << "EOF"
+#!/usr/bin/bash
+
+if [ $EUID -ne 0 ]; then
+  echo "Need to be root"
+  exit 1
+fi
+
+last_fs_inode=
+last_file=
+
+{ find /usr/lib -type f -name '*.so*' ! -name '*dbg'
+  find /usr/lib -type f -name '*.a'
+  find /usr/{bin,sbin,libexec} -type f
+} | xargs stat -c '%m %i %n' | sort | while read fs inode file; do
+       if ! readelf -h $file >/dev/null 2>&1; then continue; fi
+       if file $file | grep --quiet --invert-match 'not stripped'; then continue; fi
+
+       if [ "$fs $inode" = "$last_fs_inode" ]; then
+         ln -f $last_file $file;
+         continue;
+       fi
+
+       cp --preserve $file ${file}.tmp
+       strip --strip-debug ${file}.tmp
+       mv ${file}.tmp $file
+
+       last_fs_inode="$fs $inode"
+       last_file=$file
+done
+EOF
+chmod 744 /usr/sbin/strip-all.sh
+

+ If you install programs in other directories such as + /opt or /usr/local, you may want to strip the files + there too. Just add other directories to scan in the compound + list of find + commands between the braces. +

+

+ For more information on stripping, see + https://www.technovelty.org/linux/stripping-shared-libraries.html. +

+
+
+

+ 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, optimizations) by starting with the CFLAGS, CXXFLAGS, + and LDFLAGS environment variables. + There are also some programs which use Rust. +

+

+ Most LFS and BLFS builders are probably aware of the basics + of CFLAGS and CXXFLAGS for altering how a program is + compiled. Typically, some form of optimization is used by + upstream developers (-O2 or + -O3), sometimes with the creation + of debug symbols (-g), as + defaults. +

+

+ If there are contradictory flags (e.g. multiple different + -O values), the last value will be used. Sometimes + this means that flags specified in environment variables will + be picked up before values hardcoded in the Makefile, and + therefore ignored. For example, where a user specifies + -O2 and that is followed by + -O3 the build will use + -O3. +

+

+ There are various other things which can be passed in CFLAGS + or CXXFLAGS, such as allowing using the instruction set + extensions available with a specific microarchitecture (e.g. + -march=amdfam10 or -march=native), tune the generated code for a + specific microarchitecture (e. g. -mtune=tigerlake or -mtune=native, if -mtune= is not used, the microarchitecture + from -march= setting will be + used), or specifying a specific standard for C or C++ + (-std=c++17 for example). But one + thing which has now come to light is that programmers might + include debug assertions in their code, expecting them to be + disabled in releases by using -D + NDEBUG. Specifically, if Mesa-25.1.8 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 -D NDEBUG is used. The following + CMAKE_BUILD_TYPE values will generate the flags shown, and + these will come after + any flags in the environment and therefore take precedence. +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Value + + Flags +
+ Debug + + -g +
+ Release + + -O3 -D NDEBUG +
+ RelWithDebInfo + + -O2 -g -D NDEBUG +
+ MinSizeRel + + -Os -D NDEBUG +
+
+

+ CMake tries to produce quiet builds. To see the details of + the commands which are being run, use make VERBOSE=1 or + ninja -v. +

+

+ By default, CMake treats file installation differently from + the other build systems: if a file already exists and is not + newer than a file that would overwrite it, then the file is + not installed. This may be a problem if a user wants to + record which file belongs to a package, either using + LD_PRELOAD, or by listing files + newer than a timestamp. The default can be changed by setting + the variable CMAKE_INSTALL_ALWAYS + to 1 in the environment, for example by + export'ing it. +

+

+ Meson +

+

+ Meson has some similarities to CMake, but many differences. + To get details of the defines that you may wish to change you + can look at meson_options.txt + which is usually in the top-level directory. +

+

+ If you have already configured the package by running + meson and now + wish to change one or more settings, you can either remove + the build directory, recreate it, and use the altered + options, or within the build directory run meson configure, e.g. to + set an option: +

+
meson configure -D <some_option>=true
+

+ If you do that, the file meson-private/cmd_line.txt will show the + last commands which + were used. +

+

+ Meson provides the following buildtype values, and the flags + they enable come after + any flags supplied in the environment and therefore take + precedence. +

+
+
    +
  • +

    + plain: no added flags. This is for distributors to + supply their own CFLAGS, + CXXFLAGS and LDFLAGS. There is no obvious reason to + use this in BLFS. +

    +
  • +
  • +

    + debug: -g - this is the + default if nothing is specified in either meson.build or the command line. + However it results large and slow binaries, so we + should override it in BLFS. +

    +
  • +
  • +

    + debugoptimized: -O2 -g - + this is the default specified in meson.build of some packages. +

    +
  • +
  • +

    + release: -O3 (occasionally + a package will force -O2 + here) - this is the buildtype we use for most packages + with Meson build system in BLFS. +

    +
  • +
+
+

+ The -D NDEBUG flag is implied by + the release buildtype for some packages (for example + Mesa-25.1.8). It can also be provided + explicitly by passing -D + b_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 for + --release is 3, i. e. + -Copt-level=3, like -O3) or to force it to build for the machine + it is being compiled on, using -Ctarget-cpu=native but in practice this + seems to make no significant difference. +

+

+ If you are compiling a standalone Rust program (as an + unpackaged .rs file) by running + rustc directly, + you should specify -O (the + abbreviation of -Copt-level=2) or + -Copt-level=3 otherwise it will + do an unoptimized compile and run much slower. If you are compiling + the program for debugging it, replace the -O or -Copt-level= options with -g to produce an unoptimized program with + debug info. +

+

+ Like ninja, by + default cargo + uses all logical cores. This can often be worked around, + either by exporting CARGO_BUILD_JOBS=<N> or passing + --jobs <N> to + cargo. For + compiling rustc itself, specifying --jobs <N> for + 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-15.2.0/gcc/Optimize-Options.html. + The same content can be also found in info gcc. +

+

+ Some packages default to -O2 -g, + others to -O3 -g, and if + CFLAGS or CXXFLAGS are supplied they might be added to + the package's defaults, replace the package's defaults, or + even be ignored. There are details on some desktop packages + which were mostly current in April 2019 at https://www.linuxfromscratch.org/~ken/tuning/ + - in particular, README.txt, + tuning-1-packages-and-notes.txt, and + tuning-notes-2B.txt. The + particular thing to remember is that if you want to try some + of the more interesting flags you may need to force verbose + builds to confirm what is being used. +

+

+ Clearly, if you are optimizing your own program you can spend + time to profile it and perhaps recode some of it if it is too + slow. But for building a whole system that approach is + impractical. In general, -O3 + usually produces faster programs than -O2. Specifying -march=native is also beneficial, but means + that you cannot move the binaries to an incompatible machine + - this can also apply to newer machines, not just to older + machines. For example programs compiled for amdfam10 run on old Phenoms, Kaveris, and + Ryzens, but programs compiled for a Kaveri will not run on a + Ryzen because certain op-codes are not present. Similarly, if + you build for a Haswell not everything will run on a + SandyBridge. +

+
+

+ Note +

+

+ Be careful that the name of a -march setting does not always match the + baseline of the microarchitecture with the same name. For + example, the Skylake-based Intel Celeron processors do not + support AVX at all, but -march=skylake assumes AVX and even AVX2. +

+
+

+ When a shared library is built by GCC, a feature named + “semantic + interposition” is enabled by default. When the + shared library refers to a symbol name with external linkage + and default visibility, if the symbol exists in both the + shared library and the main executable, semantic + interposition guarantees the symbol in the main executable is + always used. This feature was invented in an attempt to make + the behavior of linking a shared library and linking a static + library as similar as possible. Today only a small number of + packages still depend on semantic interposition, but the + feature is still on by the default of GCC, causing many + optimizations disabled for shared libraries because they + conflict with semantic interposition. The -fno-semantic-interposition option can be + passed to gcc + or g++ to + disable semantic interposition and enable more optimizations + for shared libraries. This option is used as the default of + some packages (for example Python-3.13.7), and it's also the + default of Clang. +

+

+ There are also various other options which some people claim + are beneficial. At worst, you get to recompile and test, and + then discover that in your usage the options do not provide a + benefit. +

+

+ If building Perl or Python modules, in general the + CFLAGS and CXXFLAGS used are those which were used by + those “parent” packages. +

+

+ For LDFLAGS, three options can be + used for optimization. They are quite safe to use and the + building system of some packages use some of these options as + the default. +

+

+ With -Wl,-O1, the linker will + optimize the hash table to speed up the dynamic linking. Note + that -Wl,-O1 is completely + unrelated to the compiler optimization flag -O1. +

+

+ With -Wl,--as-needed, the linker + will disregard unnecessary -lfoo options from the + command line, i. e. the shared library libfoo will only be + linked if a symbol in libfoo is really referred + from the executable or shared library being linked. This can + sometimes mitigate the “excessive dependencies to shared + libraries” issues caused by libtool. +

+

+ With -Wl,-z,pack-relative-relocs, + the linker generates a more compacted form of the relative + relocation entries for PIEs and shared libraries. It reduces + the size of the linked PIE or shared library, and speeds up + the loading of the PIE or shared library. +

+

+ The -Wl, prefix is necessary + because despite the variable is named LDFLAGS, its content is actually passed to + gcc (or + g++, + clang, etc.) + during the link stage, not directly passed to ld. +

+
+
+

+ 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. +

+

+ In the past, there was Hardened LFS where gcc (a much older + version) was forced to use hardening (with options to turn + some of it off on a per-package basis). The current LFS and + BLFS books are carrying forward a part of its spirit by + enabling PIE (-fPIE -pie) and SSP + (-fstack-protector-strong) as the + defaults for GCC and clang. And, the linker (ld) has also enabled + -Wl,-z,relro which makes a part + of the Global Offset Table (GOT) immutable, by default since + Binutils 2.27. What is being covered here is different - + first you have to make sure that the package is indeed using + your added flags and not over-riding them. +

+

+ For hardening options which are reasonably cheap, there is + some discussion in the 'tuning' link above (occasionally, one + or more of these options might be inappropriate for a + package). These options are -D + _FORTIFY_SOURCE=2 (or -D + _FORTIFY_SOURCE=3 which is more secure but with a + larger performance overhead) and (for C++) -D _GLIBCXX_ASSERTIONS. On modern machines + these should only have a little impact on how fast things + run, and often they will not be noticeable. +

+

+ The main distros use much more, such as: +

+
+
    +
  • +

    + -Wl,-z,now: disables lazy + binding to enhance -Wl,-z,relro, so the entire GOT can be made + immutable. +

    +
  • +
  • +

    + -fstack-clash-protection: + prevents the attacker from using an offset large enough + and not adequately checked to jump over the stack guard + page placed by the kernel and the stack canary placed + by -fstack-protector=strong, and modify + the stack from a heap address, or vice versa. +

    +
  • +
  • +

    + -ftrivial-auto-var-init=zero: + initializes some variables by filling zero bytes if + they are not initialized by other means. +

    +
  • +
  • +

    + -fcf-protection=full: + utilizes Intel and AMD CET technology to limit the + target addresses of control-flow transfer instructions. + To make it really effective for a package, all packages + providing a shared library for the package to use must + be built with this option, as well as that package + itself, Glibc must be configured with the --enable-cet option enabled, and the + system must run on Intel Tiger Lake or newer, or AMD + Zen 3 or newer. If the criteria is not met the program + compiled with this option will still run, but not + really protected by CET. +

    +
  • +
+
+

+ In GCC 14, the option -fhardened + is a shorthand to enable all the hardening options mentioned + above. It sets -D + _FORTIFY_SOURCE=3 instead of -D + _FORTIFY_SOURCE=2. +

+

+ 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. +

+
+
+
+
+
+

+ 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. +

+
+
+
+
+

+ 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. +

+
+
+
+
+

+ BLFS Boot + Scripts +

+
+
+
+
+

+ The BLFS Bootscripts package contains the init scripts that are + used throughout the book. It is assumed that you will be using + the BLFS Bootscripts package in conjunction with a compatible + LFS-Bootscripts package. Refer to ../../../../lfs/view/12.4/chapter09/bootscripts.html + for more information on the LFS-Bootscripts package. +

+ +

+ The BLFS Bootscripts package will be used throughout the BLFS + book for startup scripts. Unlike LFS, each init script has a + separate install target in the BLFS Bootscripts package. It is + recommended you keep the package source directory around until + completion of your BLFS system. When a script is requested from + BLFS Bootscripts, simply change to the directory and as the + root user, execute the given + make install-<init-script> + command. This command installs the init script to its proper + location (along with any auxiliary configuration scripts) and + also creates the appropriate symlinks to start and stop the + service at the appropriate run-level. +

+
+

+ Note +

+

+ You should review each bootscript before installation to + ascertain that it satisfies your need. Also verify that the + start and stop symlinks it creates match your preferences. +

+
+
+

+ Note +

+

+ From time to time the bootscripts are updated to accommodate + new packages or to make minor corrections. All versions of + the bootscripts are located at https://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/. +

+
+
+
+
+
+

+ About Libtool Archive + (.la) files +

+
+
+
+
+
+

+ Files with a .la extension +

+

+ In LFS and BLFS, many packages use an internally shipped + libtool copy to build on a variety of Unix platforms. This + includes platforms such as AIX, Solaris, IRIX, HP-UX, and + Cygwin as well as Linux. The origins of this tool are quite + dated. It was intended to manage libraries on systems with + less advanced capabilities than a modern Linux system. +

+

+ On a Linux system, libtool specific files are generally + unneeded. Normally libraries are specified in the build + process during the link phase. Since a linux system uses the + + Executable and Linkable Format (ELF) for executables and + dynamic libraries, information needed to complete the task is + embedded in the files. Both the linker and the program loader + can query the appropriate files and properly link or execute + the program. +

+

+ Static libraries are rarely used in LFS and BLFS. And, + nowadays most packages store the information needed for + linking against a static library into a .pc file, instead of + relying on libtool. A pkg-config --static --libs + command will output the sufficient flags for the linker to + link against a static library without any libtool magic. +

+

+ The problem is that libtool usually creates one or more text + files for package libraries called libtool archives. These + small files have a ".la" extension and contain information + that is similar to that embedded in the libraries or + pkg-config files. When building a package that uses libtool, + the process automatically looks for these files. Sometimes a + .la file can contains the name or path of a static library + used during build but not installed, then the build process + will break because the .la file refers to something + nonexistent on the system. Similarly, if a package is updated + and no longer uses the .la file, then the build process can + break with the old .la files. +

+

+ The solution is to remove the .la files. However there is a + catch. Some packages, such as ImageMagick-7.1.2-1, 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
+
+
+
+
+
+

+ Libraries: Static or + shared? +

+
+
+
+
+
+

+ 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, with names of the form libfoo.a on UNIX-like operating systems. On + some old operating systems they are the only type available. +

+

+ On almost all Linux platforms there are also “shared” (or + equivalently “dynamic”) libraries (with names of the + form libfoo.so) – one copy of + the library is loaded into virtual memory, and shared by all + the programs which call any of its functions. This is space + efficient. +

+

+ In the past, essential programs such as a shell were often + linked statically so that some form of minimal recovery + system would exist even if shared libraries, such as + libc.so, became damaged (e.g. + moved to lost+found after + fsck following + an unclean shutdown). Nowadays, most people use an + alternative system install or a USB stick if they have to + recover. Journaling filesystems also reduce the likelihood of + this sort of problem. +

+

+ Within the book, there are various places where configure + switches such as --disable-static are employed, + and other places where the possibility of using system + versions of libraries instead of the versions included within + another package is discussed. The main reason for this is to + simplify updates of libraries. +

+

+ If a package is linked to a dynamic library, updating to a + newer library version is automatic once the newer library is + installed and the program is (re)started (provided the + library major version is unchanged, e.g. going from + libfoo.so.2.0 to libfoo.so.2.1. Going to libfoo.so.3 will require recompilation – + ldd can be used + to find which programs use the old version). If a program is + linked to a static library, the program always has to be + recompiled. If you know which programs are linked to a + particular static library, this is merely an annoyance. But + usually you will not + know which programs to recompile. +

+

+ One way to identify when a static library is used, is to deal + with it at the end of the installation of every package. + Write a script to find all the static libraries in + /usr/lib or wherever you are + installing to, and either move them to another directory so + that they are no longer found by the linker, or rename them + so that libfoo.a becomes e.g. + libfoo.a.hidden. The static + library can then be temporarily restored if it is ever + needed, and the package needing it can be identified. This + shouldn't be done blindly since many libraries only exist in + a static version. For example, some libraries from the + glibc and gcc packages should always be present on + the system (libc_nonshared.a, libg.a, + libpthread_nonshared.a, libssp_nonshared.a, + libsupc++.a as of glibc-2.36 and gcc-12.2). +

+

+ If you use this approach, you may discover that more packages + than you were expecting use a static library. That was the + case with nettle-2.4 in its + default static-only configuration: It was required by + GnuTLS-3.0.19, but also + linked into package(s) which used GnuTLS, such as glib-networking-2.32.3. +

+

+ Many packages put some of their common functions into a + static library which is only used by the programs within the + package and, crucially, the library is not installed as a standalone + library. These internal libraries are not a problem – if the + package has to be rebuilt to fix a bug or vulnerability, + nothing else is linked to them. +

+

+ When BLFS mentions system libraries, it means shared versions + of libraries. Some packages such as Firefox-140.2.0 and + ghostscript-10.05.1 bundle many + other libraries in their build tree. The version they ship is + often older than the version used in the system, so it may + contain bugs – sometimes developers go to the trouble of + fixing bugs in their included libraries, other times they do + not. +

+

+ Sometimes, deciding to use system libraries is an easy + decision. Other times it may require you to alter the system + version (e.g. for libpng-1.6.50 if used for Firefox-140.2.0). Occasionally, a + package ships an old library and can no longer link to the + current version, but can link to an older version. In this + case, BLFS will usually just use the shipped version. + Sometimes the included library is no longer developed + separately, or its upstream is now the same as the package's + upstream and you have no other packages which will use it. In + those cases, you'll be lead to use the included library even + if you usually prefer to use system libraries. +

+
+
+
+
+
+

+ 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. +

+
+

+ 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.30. 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-8.6 or JOE-4.6 for example, assume that documents are + always in the encoding implied by the current locale. While + this assumption may be valid for the user-created documents, + it is not safe for external ones. When this assumption fails, + non-ASCII characters are displayed incorrectly, and the + document may become unreadable. +

+

+ If the external document is entirely text based, it can be + converted to the current locale encoding using the + iconv program. +

+

+ For documents that are not text-based, this is not possible. + In fact, the assumption made in the program may be completely + invalid for documents where the Microsoft Windows operating + system has set de facto standards. An example of this problem + is ID3v1 tags in MP3 files. For these cases, the only + solution is to find a replacement program that doesn't have + the issue (e.g., one that will allow you to specify the + assumed document encoding). +

+

+ Among BLFS packages, this problem applies to nano-8.6, JOE-4.6, and all media + players except Audacious-4.5. +

+

+ 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.84.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 format has this + problem because it does not save the encoding for the names + of the archived files. When unzip (actually, a symlink + to bsdunzip + from libarchive-3.8.1) extracts it, by + default the names are assumed to be encoded as CP850, the + Windows code page for Western European languages. But the + names may be actually encoded in a different way if it + contains non-Latin characters (for example, CP936 for + Simplified Chinese). Then without manually specifying the + encoding, those non-Latin characters will be turned into + unreadable sequences by bsdunzip. +

+

+ 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-10.0p1). 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.14 + and all the shells. +

+
+
+
+
+
+

+ 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.info/UnixResource_dir/_/ldpath.html. + If you modify /etc/ld.so.conf, remember to update + /etc/ld.so.cache by + executing ldconfig as the + root user. +

    +
  • +
  • +

    + Add $PREFIX/man to + /etc/man_db.conf. +

    +
  • +
  • +

    + 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. +

+
+ +
+

+ Some general hints on handling new packages: +

+
+
    +
  • +

    + Many of the newer packages follow the ./configure && make && + make install process. Help on the options + accepted by configure can be obtained via the command + ./configure + --help. +

    +
  • +
  • +

    + Most of the packages contain documentation on compiling + and installing the package. Some of the documents are + excellent, some not so excellent. Check out the homepage + of the package for any additional and updated hints for + compiling and configuring the package. +

    +
  • +
  • +

    + If you are having a problem compiling the package, try + searching the LFS archives at https://www.linuxfromscratch.org/search.html + for the error or if that fails, try searching Google. + Often, a distribution will have already solved the + problem (many of them use development versions of + packages, so they see the changes sooner than those of us + who normally use stable released versions). But be + cautious - all builders tend to carry patches which are + no longer necessary, and to have fixes which are only + required because of their particular choices in how they + build a package. You may have to search deeply to find a + fix for the package version you are trying to use, or + even to find the package (names are sometimes not what + you might expect, e.g. ghostscript often has a prefix or a + suffix in its name), but the following notes might help, + particularly for those who, like the editors, are trying + to build the latest versions and encountering problems: +

    +
    +
      +
    • +

      + Arch https://www.archlinux.org/packages/ + - enter the package name in the 'Keywords' box, + select the package name, select the 'Source Files' + field, and then select the PKGBUILD entry to see how they + build this package. +

      +
    • +
    • +

      + Debian http://ftp.debian.org/debian/pool + (use your country's version if there is one) - the + source will be in .tar.gz tarballs (either the + original upstream .orig source, or else a + dfsg containing those + parts which comply with Debian's free software + guidelines) accompanied by versioned .diff.gz or + .tar.gz additions. These additions often show how + the package is built, and may contain patches. In + the .diff.gz versions, any patches create files in + debian/patches. +

      +
    • +
    • +

      + Fedora package source gets reorganized from time to + time. At the moment the package source for rpms is + at https://src.fedoraproject.org/projects/rpms/%2A + and from there you can try putting a package name + in the search box. If the package is found you can + look at the files (specfile to control the build, + various patches) or the commits. If that fails, you + can download an srpm (source rpm) and using + rpmextract (see + the Tip at the bottom of the page). For rpms go to + https://dl.fedoraproject.org/pub/fedora/linux/ + and then choose which repo you wish to look at - + development/rawhide is the latest development, or + choose releases for what was shipped in a release, + updates for updates to a release, or + updates/testing for the latest updates which might + work or might have problems. +

      +
    • +
    • +

      + Gentoo - First use a search engine to find an + ebuild which looks as if it will fix the problem, + or search at https://packages.gentoo.org/ + - use the search field. Note where the package + lives in the portage hierarchy, e.g. app-something/. In general you + can treat the ebuild as a sort of pseudo-code / + shell combination with some functions you can + hazard a guess at, such as dodoc. If the fix + is just a sed, try it. + However, in most cases the fix will use a patch. To + find the patch, use a gentoo-portage mirror: Two + links to mirrors in the U.S.A. which seem to + usually be up to date are https://mirror.rackspace.com/gentoo-portage/ + and https://mirror.steadfast.net/gentoo-portage/. + Navigate down the tree to the package, then to the + files/ directory to + look for the patch. Sometimes a portage mirror has + not yet been updated, particularly for a recent new + patch. In a few cases, gentoo batch the patches + into a tarball and the ebuild will have a link in + the form + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/${P}-patches-${PATCH_VER}.tar.xz + here, look for PATCH_DEV and PATCH_VER in the build + and format the full URL in your browser or for + wget. Remember the '~' before the developer's ID + and note that trying to search the earlier levels + of the URL in a browser may drop you at + www.gentoo.org or return 403 (forbidden). +

      +
    • +
    • +

      + openSUSE provide a rolling release, some package + versions are in + https://download.opensuse.org/source/tumbleweed/repo/oss/src/ + but others are in ../update/openSUSE-current/src - + the source only seems to be available in source + rpms. +

      +
    • +
    • +

      + Slackware - the official package browser is + currently broken. The site at https://slackbuilds.org/ + has current and previous versions in their + unofficial repository with links to homepages, + downloads, and some individual files, particularly + the .SlackBuild + files. +

      +
    • +
    • +

      + Ubuntu http://ftp.ubuntu.com/ubuntu/pool/ + - see the Debian notes above. +

      +
    • +
    +
    +

    + If everything else fails, try the blfs-support + mailing-list. +

    +
  • +
+
+
+

+ Tip +

+

+ If you have found a package that is only available in + .deb or .rpm format, there are different methods of + extracting them. +

+

+ .deb files are just archives + that are created and extracted by ar. It can be extracted by running: + ar x + $PACKAGE.deb. It will extract many files; + however, the important one is data.tar.gz. It contains all the files that + would typically be installed from it. +

+

+ For .rpm files, you can install + rpmextract + (see the + PKGBUILD for how they install the package) and use + rpmextract.sh + from the package to extract the file. It will extract to + multiple directories, such as app and usr. + You can also use File-Roller-44.5 or ark-25.08.0 for the + extraction. +

+
+
+
+
+
+
+
+

+ 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. +

+

+ The remaining topics, Customizing your Logon + with /etc/issue and Random + number generation are then addressed, in that order. They + don't have much interaction with the other topics in this + chapter. +

+
+
+
+

+ 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. +

+
+
+
+
+
+

+ About Console Fonts +

+
+
+
+
+

+ An LFS system can be used without a graphical desktop, and + unless or until you install a graphical + environment you will have to work in the console. Most, if + not all, PCs boot with an 8x16 font - whatever the actual + screen size. There are a few things you can do to alter the + display on the console. Most of them involve changing the font, + but the first alters the commandline used by grub. +

+
+

+ Setting a smaller + screen resolution in grub +

+

+ Modern screens often have a lot more pixels than 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 and the kernel to use a smaller + resolution, such as 1024x768 or 800x600 or even 640x480. Even + if your screen does not have a 4:3 aspect ratio, this should + work. +

+

+ If you've followed the LFS book to configure your kernel with + SimpleDRM enabled and the kernel driver dedicated for your + GPU (for example i915 or AMDGPU) is built as a kernel module, + before the dedicated driver is loaded, the SimpleDRM driver + will be used for displaying. The SimpleDRM driver itself + cannot change the resolution, so you need to tell GRUB to set + the suitable resolution before loading the kernel by + modifying the set + gfxpayload=1024x768x32 line in the + grub.cfg file. +

+

+ When the dedicated GPU driver starts to work (once the kernel + or the module is loaded depending on if you've built it as a + part of the kernel image or a module), it takes the display + control away from the SimpleDRM driver and changes the + display resolution. To make it use the resolution you want, + again edit the grub.cfg file to + insert a video= parameter into + the kernel command line, for example root=/dev/sda2 video=DP-1:800x600 ro. Note + that it's necessary to explicitly specify the output name + like DP-1 here: a video= parameter without an output name is + only recognized by GRUB (as a deprecated alias of + set gfxpayload=) and completely + ignored by the kernel. The content of /sys/class/drm/ can be helpful for figuring + out the output name, for example the card1-DP-1 subdirectory indicates an output + named DP-1. To align the output + name with your monitor, install the libdisplay-info-0.3.0 package and + run the di-edid-decode + /sys/class/drm/card<card + ID>-<output + name>/edid command to show the + info (including the model name and the supported resolutions) + about the the monitor connected on the output. +

+

+ 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/sysconfig/console + as described in LFS section 9.6.5 ../../../../lfs/view/12.4/chapter09/usage.html. + . +

+

+ For fonts not supplied with the kbd package you will need to optionally + compress it / them with gzip and then install it / + them as the root user. +

+
+
+

+ 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
+
+
+
+
+
+

+ About + Firmware +

+
+
+
+
+

+ On some recent PCs it can be necessary, or desirable, to load + firmware to make them work at their best. The kernel or kernel + drivers look for firmware images in /lib/firmware. But in LFS /lib is a symlink to usr/lib, so the directory containing the + firmware files is actually /usr/lib/firmware. +

+

+ Currently, most firmware can be found at a git repository which can be + viewed in the browser with the URL + https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain. + For convenience, the LFS Project has created a mirror, updated + daily, where these firmware files can be accessed via + wget or a web + browser at https://anduin.linuxfromscratch.org/BLFS/linux-firmware/. +

+

+ To get the firmware, point a browser to one of the above + repositories and then download the item(s) which you need. If + you want all these firmware files (for example you are + distributing the system onto multiple hardware systems), either + install git-2.50.1 and clone + https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git, + or open this URL in a browser and download the latest snapshot + listed in the Tag table. +

+
+

+ Important +

+

+ Note that some required + firmware files (and directories) are actually symlinks to + other files (or directories). Those symlinks are not stored + in the Git repository, instead they are documented in the + WHENCE file. Each line + beginning with Link: describes a + symlink. If you are downloading an item you need and it's + such a symlink (or in a directory which is such a symlink), + you need to create the symlink manually and download the + target. On the other hand, if you want all the firmware + files, use the ./copy-firmware.sh + /usr/lib/firmware command which will copy the + firmware files and create all the symlinks in the + WHENCE file, instead of a plain + copy command like cp -r * + /usr/lib/firmware/. +

+
+

+ For some other firmware, particularly for Intel microcode and + certain wifi devices, the needed firmware is not available in + the above repository. Some of this will be addressed below, but + a search of the Internet for needed firmware is sometimes + necessary. +

+

+ Firmware files are conventionally referred to as blobs because + you cannot determine what they will do. Note that firmware is + distributed under various different licenses which do not + permit disassembly or reverse-engineering. +

+

+ Firmware for PCs falls into four categories: +

+
+
    +
  • +

    + Updates to the CPU to work around errata, usually + referred to as microcode. +

    +
  • +
  • +

    + Firmware for video controllers. On x86 machines this is + required for ATI devices (Radeon and AMDGPU chips) and + may be useful for Intel (Skylake and later) and NVIDIA + (Kepler and later) GPUs. +

    +

    + ATI Radeon and AMDGPU devices all require firmware to be + able to use KMS (kernel modesetting - the preferred + option) as well as for Xorg. +

    +

    + 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 Ada Lovelace (GeForce 40 series) to linux-firmware. +

    +
  • +
  • +

    + Firmware updates for wired network ports. Most of them + work even without the updates, but they will probably + work better with the updated firmware. For some modern + laptops, firmware for both wired ethernet (e.g. rtl_nic) + and also for bluetooth devices (e.g. qca) is required before the wired + network can be used. +

    +
  • +
  • +

    + Firmware for other devices, such as wireless NICs. These + devices are not required for the PC to boot, but need the + firmware before these devices can be used. +

    +
  • +
+
+
+

+ 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.15, + git-2.50.1, pciutils-3.14.0, and Wget-1.25.0 +

+
+
+

+ 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. +

+
+

+ Note +

+

+ In some rare cases a microcode update from the kernel can + be ineffective. For example, despite + intel-microcode-20241029 contains the Raptor Lake microcode + revision 0x12b which is intended to fix a notorious + excessive voltage issue causing stability issues and even + permanent CPU damages, when the kernel boots it's already + + too late for the microcode to fix the issue. The only + way to fix this issue is updating the BIOS. +

+
+

+ Intel provide updates of their microcode for Skylake and + later processors as new vulnerabilities come to light, and + have in the past provided updates for processors from + SandyBridge onwards, although those are no-longer supported + for new fixes. New versions of AMD firmware are rare and + usually only apply to a few models, although motherboard + manufacturers get AGESA (AMD Generic Encapsulated Software + Architecture) updates to change BIOS values, e.g. to support + more memory variants, new vulnerability fixes or newer CPUs. +

+

+ There were two ways of loading the microcode, described as + 'early' and 'late'. Early loading happens before userspace + has been started, late loading happens after userspace has + started. However, late loading is known to be problematic and + not supported anymore (see the kernel commit + x86/microcode: Taint and warn on late loading). Indeed, + early loading is needed to work around one particular erratum + in early Intel Haswell processors which had TSX enabled. (See + + Intel Disables TSX Instructions: Erratum Found in Haswell, + Haswell-E/EP, Broadwell-Y.) Without this update glibc can + do the wrong thing in uncommon situations. +

+

+ In previous versions of this book, late loading of microcode + to see if it gets applied was recommended, followed by using + an initrd to force early loading. But now that the contents + of the Intel microcode tarball is documented, and AMD + microcode can be read by a Python script to determine which + machines it covers, there is no real reason to use late + loading. +

+

+ It might be still possible to manually force late loading of + microcode. But it may cause kernel malfunction and you should + take the risk yourself. You will need to reconfigure your + kernel for late loading, but early loading is always + supported by Linux kernel version 6.6 or later on a x86 (no + matter 32-bit or 64-bit) system. The instructions here will + show you how to create an initrd for early loading. It is + also possible to build the same microcode bin file into the + kernel, which allows early loading but requires the kernel to + be recompiled to update the microcode. +

+

+ To confirm what processor(s) you have (if more than one, they + will be identical) look in /proc/cpuinfo. Determine the + decimal values of the cpu family, model and stepping by + running the following command (it will also report the + current microcode version): +

+
head -n7 /proc/cpuinfo
+

+ Convert the cpu family, model and stepping to pairs of + hexadecimal digits, and remember the value of the + “microcode” field. You can now check if + there is any microcode available. +

+

+ If you are creating an initrd to update firmware for + different machines, as a distro would do, go down to 'Early + loading of microcode' and cat all the Intel blobs to + GenuineIntel.bin or cat all the AMD blobs to + AuthenticAMD.bin. This creates a larger initrd - for all + Intel machines in the 20200609 update the size was 3.0 MB + compared to typically 24 KB for one machine. +

+
+
+
+
+

+ 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 is + microcode-20250812. 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 release note. +

+

+ In the past, intel did not provide any details of which + blobs had changed versions, but now the release note + details this. You can compare the microcode version in + /proc/cpuinfo with the + version for your CPU model in the releasenote to know if + there is an update. +

+

+ The recent firmware for older processors is provided to + deal with vulnerabilities which have now been made public, + and for some of these such as Microarchitectural Data + Sampling (MDS) you might wish to increase the protection by + disabling hyperthreading, or alternatively to disable the + kernel's default mitigation because of its impact on + compile times. Please read the online documentation at + + https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/index.html. +

+

+ For an Tigerlake mobile (described as Intel(R) Core(TM) + i5-11300H CPU) the relevant values are cpu family 6, model + 140, stepping 1 so in this case the required identification + is 06-8c-01. The releasenote says the latest microcode for + it is versioned 0xb8. If the value of the “microcode” field + in /proc/cpuinfo is 0xb8 or + greater, it indicates the microcode update is already + applied by the BIOS. Otherwise, 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, 17h + (Zen, Zen+, Zen2) and 19h (Zen3) have their own containers, + but very few machines are likely to get updated microcode. + Instead, AMD provide an updated AGESA to the motherboard + makers, who may provide an updated BIOS using this. There + is a Python3 script at + https://github.com/AMDESE/amd_ucode_info/blob/master/amd_ucode_info.py. + Download that script and run it against the bin file to + check which processors have updates. +

+

+ For the very old Athlon(tm) II X2 in these examples the + values were cpu family 16, model 5, stepping 3 giving an + identification of Family=0x10 Model=0x05 Stepping=0x03. One + line of the amd_ucode_info.py script + output describes the microcode version for it: +

+
Family=0x10 Model=0x05 Stepping=0x03: Patch=0x010000c8 Length=960 bytes
+

+ If the value of the “microcode” field in /proc/cpuinfo is 0x10000c8 or greater, it + indicates the BIOS has already applied the microcode + update. Otherwise, proceed to the + section called “Early loading of microcode”. +

+
+
+
+
+
+

+ Early loading of microcode +

+
+
+
+

+ If you have established that updated microcode is available + for your system, it is time to prepare it for early + loading. This requires an additional package, cpio-2.15 and the + creation of an initrd which will need to be added to + grub.cfg. +

+

+ It does not matter where you prepare the initrd, and once + it is working you can apply the same initrd to later LFS + systems or newer kernels on this same machine, at least + until any newer microcode is released. Use the following + commands: +

+
mkdir -p initrd/kernel/x86/microcode
+cd initrd
+

+ For an AMD machine, use the following command (replace + <MYCONTAINER> with the name of the container for your + CPU's family): +

+
cp -v ../<MYCONTAINER> kernel/x86/microcode/AuthenticAMD.bin
+

+ Or for an Intel machine copy the appropriate blob using + this command: +

+
cp -v ../intel-ucode/<XX-YY-ZZ> kernel/x86/microcode/GenuineIntel.bin
+

+ Now prepare the initrd: +

+
find . | cpio -o -H newc > /boot/microcode.img
+

+ You now need to add a new entry to /boot/grub/grub.cfg and + here you should add a new line after the linux line within + the stanza. If /boot is a separate mountpoint: +

+
initrd /microcode.img
+

+ or this if it is not: +

+
initrd /boot/microcode.img
+

+ If you are already booting with an initrd (see the + section called “About initramfs”), you should run + mkinitramfs + again after putting the appropriate blob or container into + /usr/lib/firmware. More + precisely, put an intel blob in a /usr/lib/firmware/intel-ucode directory + or an AMD container in a /usr/lib/firmware/amd-ucode directory + before running mkinitramfs. + Alternatively, you can have both initrd on the same line, + such as initrd + /microcode.img /other-initrd.img (adapt + that as above if /boot is not a separate mountpoint). +

+

+ You can now reboot with the added initrd, and then use the + following command to check that the early load worked: +

+
dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'
+

+ If you updated to address vulnerabilities, you can look at + the output of the lscpu command to see what + is now reported. +

+

+ The places and times where early loading happens are very + different in AMD and Intel machines. First, an example of + an Intel (Tigerlake mobile) with early loading: +

+
[    0.000000] Linux version 6.10.4 (xry111@stargazer) (gcc (GCC) 14.2.0, GNU ld (GNU Binutils) 2.43) #4 SMP PREEMPT_DYNAMIC Tue Aug 15 18:04:11 CST 2024
+[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.10.0 root=PARTUUID=<CLASSIFIED> ro
+[    0.585605] microcode: Current revision: 0x000000b8
+[    0.585611] microcode: Updated early from: 0x00000086
+

+ 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 Radeon + video chips +

+
+
+
+

+ 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.14.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 /usr/lib/firmware/radeon
+cp -v <YOUR_BLOBS> /usr/lib/firmware/radeon
+

+ Building the kernel amdgpu driver as a module is + recommended because the firmware files need to be + accessible at the time it is loaded. If you are building it + as a part of the kernel image for any reason, you need to + either include the firmware files in the initramfs (read + the section called “About initramfs” + for details), or include them in the kernel image itself + (read the + section called “Include Firmware Blobs in the Kernel + Image” for details). +

+
+
+
+
+
+

+ Firmware for AMD/ATI + amdgpu video chips +

+
+
+
+

+ All video controllers using the amdgpu kernel driver + require firmware, whether you will be using the xorg amdgpu + driver, the xserver's modesetting driver, or just kernel + modesetting to get a console framebuffer larger than 80x25. +

+

+ Install pciutils-3.14.0 and use that to check + the model name (look for 'VGA compatible controller:'). If + you have an APU (Accelerated Processing Unit, i.e. CPU and + video on the same chip) that will probably tell you the + name. If you have a separate amdgpu video card you will + need to search to determine which name it uses (e.g. a card + described as Advanced Micro Devices, Inc. [AMD/ATI] Baffin + [Radeon RX 550 640SP / RX 560/560X] needs Polaris11 + firmware. There is a table of "Family, Chipset name, + Product name and Firmware" at the end of the Kernel + sections in AMDGPU + page of the Gentoo wiki. +

+

+ Once you have identified the firmware name, install all the + relevant files for it. For example, the Baffin card + mentioned above has 21 different polaris11* files, APUs + such as renoir and picasso have at least 12 files and might + gain more in future updates (e.g. the raven APU now has a + 13th file, raven_ta.bin). +

+
mkdir -pv /usr/lib/firmware/amdgpu
+cp -v <YOUR_BLOBS> /usr/lib/firmware/amdgpu
+

+ If disk space is not a problem, you could install all the + current amdgpu firmware files and not worry about exactly + which chipset is installed. +

+

+ Building the kernel amdgpu driver as a module is + recommended because the firmware files need to be + accessible at the time it is loaded. If you are building it + as a part of the kernel image for any reason, you need to + either include the firmware files in the initramfs (read + the section called “About initramfs” + for details), or include them in the kernel image itself + (read the + section called “Include Firmware Blobs in the Kernel + Image” for details). +

+
+
+
+
+
+

+ Firmware for NVIDIA video + chips +

+
+
+
+

+ Some NVIDIA GPUs from Kepler onwards (including all NVIDIA + GeForce RTX GPUs and GTX 9xx series onwards) require + firmware signed by NVIDIA to work. For the Nouveau driver, + NVIDIA has released the signed firmware files in the + nvidia/ directory of + linux-firmware. Read the + CodeNames page of the Nouveau wiki to figure out the + code name of your NVIDIA GPU (for example, the code name of + GeForce RTX 5080 is GB203). The directory for the firmware + files you need is named as the result converting the code + name to lower case (gb203 for + the example). The directory (or some of its contents) may + be actually a symlink to another directory (or some files + in another directory) and you'll then need to create the symlink + and download its target yourself (for example, + gb207 is a symlink to + gb202). +

+

+ If you can find the directory for your GPU in neither the + linux-firmware tree nor the WHENCE file (as a symlink), it means + either your GPU does not need any firmware, or it's newer + than Blackwell (RTX 50xx series) and the firmware for it + isn't released yet (as at mid 2025). +

+

+ For the NVIDIA GPUs from Tesla to Kepler, the Nouveau + driver requires some extra firmware to support video + decoding acceleration. These firmware files are not + released by NVIDIA but they can be extracted from the + NVIDIA binary driver. For more exact information about + which chips need extracted firmware, see the + VideoAcceleration of the Nouveau wiki. To extract and + install these firmware files, issue: +

+
wget https://anduin.linuxfromscratch.org/BLFS/nvidia-firmware/extract_firmware.py
+wget https://us.download.nvidia.com/XFree86/Linux-x86/340.32/NVIDIA-Linux-x86-340.32.run
+sh NVIDIA-Linux-x86-340.32.run --extract-only
+python3 extract_firmware.py
+mkdir -p /usr/lib/firmware/nouveau
+cp -d nv* vuc-* /usr/lib/firmware/nouveau/
+
+
+
+

+ Firmware for + Network Interfaces +

+

+ The kernel likes to load firmware for some network drivers, + particularly those from Realtek (the /usr/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 + /usr/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 + Regulatory Database of Wireless Devices +

+

+ 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 + /usr/lib/firmware. Note that + either the cfg80211 driver needs + to be selected as a module for the regulatory.* files to be loaded, or those + files need to be included as firmware into the kernel, as + explained above in the section called “Firmware + for Video Cards”. +

+

+ The access point (AP) would send a country code to your + wireless NIC, and wpa_supplicant-2.11 would + tell the kernel to load the regulation of this country from + regulatory.db, and enforce it. + Note that several AP don't send this country code, so you may + be locked to a rather restricted usage (specially if you want + to use your interface as an AP). +

+
+
+

+ Sound Open Firmware +

+

+ Some systems (especially laptops with a recent Intel CPU) + utilize a DSP shipped with the CPU for connection with the + audio codec. The Sound Open Firmware must be loaded onto the + DSP to make it functional. These firmware files can be + downloaded from https://github.com/thesofproject/sof-bin/releases. + Extract the tarball and changing into the extracted + directory, then as the root + user install the firmware: +

+
install -vdm755 /usr/lib/firmware/intel &&
+cp -rv sof* /usr/lib/firmware/intel/
+

+ alsa-lib-1.2.14 needs Use Case Manager + configuration files for the systems using Sound Open Firmware + as well. Read the alsa-lib-1.2.14 page for the + instructions to install them. Once the firmware is loaded + (you may need a reboot so the kernel will load them) and the + UCM configuration files are installed, following the section called “Configuring + ALSA Utilities” to set up your sound card for ALSA + properly. +

+
+
+

+ Firmware for + Other Devices +

+

+ Identifying the correct firmware will typically require you + to install pciutils-3.14.0, and then use + lspci to + identify the device. You should then search online to check + which module it uses, which firmware, and where to obtain the + firmware — not all of it is in linux-firmware. +

+

+ If possible, you should begin by using a wired connection + when you first boot your LFS system. To use a wireless + connection you will need to use a network tools such as + iw-6.9, + Wireless Tools-29, or wpa_supplicant-2.11. +

+

+ Firmware may also be needed for other devices such as some + SCSI controllers, bluetooth adaptors, or TV recorders. The + same principles apply. +

+
+
+

+ Include Firmware Blobs in the + Kernel Image +

+

+ Some drivers, notably the drivers for ATI or AMD GPU, + requires the firmware files accessible at the time it is + loaded. The easiest method to handle these drivers is + building them as a kernel module. An alternative method is + creating an initramfs (read the section called “About + initramfs” for details) including the firmware files. If + you don't want to use either methods, you may include the + firmware files in the kernel image itself. Install the needed + firmware files into /usr/lib/firmware first, then set the + following kernel configuration and rebuild the kernel: +

+
Device Drivers --->
+  Generic Driver Options --->
+    Firmware loader --->
+      <*>                   Firmware loading facility                [FW_LOADER]
+      (xx/aa.bin xx/bb.bin)   Build named firmware blobs into the kernel binary
+                                                           ...  [EXTRA_FIRMWARE]
+      # This is the default, you can change it to "/usr/lib/firmware"
+      # if you want:
+      (/lib/firmware)           Firmware blobs root directory
+                                                       ...  [EXTRA_FIRMWARE_DIR]
+

+ Replace xx/aa.bin + xx/bb.bin with a whitespace-separated list of + paths to the needed firmware files, relative to /usr/lib/firmware. A method easier than + manually typing the list (it may be long) is running the + following command: +

+
echo CONFIG_EXTRA_FIRMWARE='"'$({ cd /usr/lib/firmware; echo amdgpu/* })'"' >> .config
+make oldconfig
+

+ Replace amdgpu/* + with a shell pattern matching the needed firmware files. +

+
+

+ Warning +

+

+ Do not distribute a kernel image containing the firmware to + others or you may violate the GPL. +

+
+
+
+
+
+
+

+ 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. +

+
+

+ 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 root, + and have 0664 permissions (the read access is needed, e.g., + for lsusb to work and for programs to access USB hubs). + Packages (such as SANE and libgphoto2) containing userspace + USB device drivers also ship udev rules that change the + permissions of the controlled raw USB devices. That is, rules + installed by SANE change permissions for known scanners, but + not printers. If a package maintainer forgot to write a rule + for your device, report a bug to both BLFS (if the package is + there) and upstream, and you will need to write your own + rule. +

+

+ Before Linux-2.6.15, raw USB device access was performed not + with /dev/bus/usb/BBB/DDD device nodes, but with + /proc/bus/usb/BBB/DDD pseudofiles. Some applications still + use only this deprecated technique and can't use the new + device nodes. They cannot work with Linux kernel version 3.5 + or newer. If you need to run such an application, contact the + developer of it for a fix. +

+
+
+

+ 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.4.0. +

+
+
+
+

+ Devices for Servers +

+

+ In some cases, it makes sense to disable udev completely and create static + devices. Servers are one example of this situation. Does a + server need the capability of handling dynamic devices? Only + the system administrator can answer that question, but in + many cases the answer will be no. +

+

+ If dynamic devices are not desired, then static devices must + be created on the system. In the default configuration, the + /etc/rc.d/rcS.d/S10udev boot + script mounts a tmpfs + partition over the /dev + directory. This problem can be overcome by mounting the root + partition temporarily: +

+
+

+ Warning +

+

+ If the instructions below are not followed carefully, your + system could become unbootable. +

+
+
mount --bind / /mnt
+cp -a /dev/* /mnt/dev
+rm /etc/rc.d/rcS.d/{S10udev,S50udev_retry}
+umount /mnt
+

+ At this point, the system will use static devices upon the + next reboot. Create any desired additional devices using + mknod. +

+

+ If you want to restore the dynamic devices, recreate the + /etc/rc.d/rcS.d/{S10udev,S50udev_retry} + symbolic links and reboot again. Static devices do not need + to be removed (console and null are always needed) because + they are covered by the tmpfs + partition. Disk usage for devices is negligible (about 20–30 + bytes per entry). +

+
+
+

+ 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
+
+
+
+
+
+

+ 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>
+

+ If you are sharing a /home or + /usr/src with another Linux + distro (for example, the host distro used for building LFS), + you can create a user with the same UID (and, same primary + group GID) to keep the file ownership consistent across the + systems. First, on the other + distro, get the UID of the user and the GID of the + user's primary group: +

+
getent passwd <username> | cut -d ':' -f 3,4
+

+ The command should output the UID and GID, separated by a + colon. Now on the BLFS system, create the primary group and the + user: +

+
groupadd -g <GID> <username> &&
+useradd -u <UID> -g <username> <username>
+
+
+
+
+

+ 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 +
+ mariadb + + 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 +
+ sddm + + 64 + + 64 +
+ lightdm + + 65 + + 65 +
+ scanner + + 70 +
+ colord + + 71 + + 71 +
+ systemd-journal-gateway + + 73 + + 73 +
+ systemd-journal-remote + + 74 + + 74 +
+ systemd-journal-upload + + 75 + + 75 +
+ systemd-network + + 76 + + 76 +
+ systemd-resolve + + 77 + + 77 +
+ systemd-timesync + + 78 + + 78 +
+ systemd-coredump + + 79 + + 79 +
+ uuidd + + 80 + + 80 +
+ systemd-oom + + 81 + + 81 +
+ ldap + + 83 + + 83 +
+ avahi + + 84 + + 84 +
+ avahi-autoipd + + 85 + + 85 +
+ netdev + + 86 +
+ ntp + + 87 + + 87 +
+ unbound + + 88 + + 88 +
+ plugdev + + 90 +
+ wheel + + 97 +
+ anonymous + + 98 +
+ nobody + + 65534 +
+ nogroup + + 65534 +
+
+

+
+
+
+
+

+ The 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. +

+
+

+ Editor 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 then calls small, single purpose scripts in the + /etc/profile.d directory to + provide most of the initialization. +

+
cat > /etc/profile << "EOF"
+# Begin /etc/profile
+# Written for Beyond Linux From Scratch
+# by James Robertson <jameswrobertson@earthlink.net>
+# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
+
+# System wide environment variables and startup programs.
+
+# System wide aliases and functions should go in /etc/bashrc.  Personal
+# environment variables and startup programs should go into
+# ~/.bash_profile.  Personal aliases and functions should go into
+# ~/.bashrc.
+
+# Functions to help us manage paths.  Second argument is the name of the
+# path variable to be modified (default: PATH)
+pathremove () {
+        local IFS=':'
+        local NEWPATH
+        local DIR
+        local PATHVARIABLE=${2:-PATH}
+        for DIR in ${!PATHVARIABLE} ; do
+                if [ "$DIR" != "$1" ] ; then
+                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
+                fi
+        done
+        export $PATHVARIABLE="$NEWPATH"
+}
+
+pathprepend () {
+        pathremove $1 $2
+        local PATHVARIABLE=${2:-PATH}
+        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
+}
+
+pathappend () {
+        pathremove $1 $2
+        local PATHVARIABLE=${2:-PATH}
+        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
+}
+
+export -f pathremove pathprepend pathappend
+
+# Set the initial path
+export PATH=/usr/bin
+
+# Attempt to provide backward compatibility with LFS earlier than 11
+if [ ! -L /bin ]; then
+        pathappend /bin
+fi
+
+if [ $EUID -eq 0 ] ; then
+        pathappend /usr/sbin
+        if [ ! -L /sbin ]; then
+                pathappend /sbin
+        fi
+        unset HISTFILE
+fi
+
+# Set up some environment variables.
+export HISTSIZE=1000
+export HISTIGNORE="&:[bf]g:exit"
+
+# Set some defaults for graphical systems
+export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share}
+export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg}
+export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER}
+
+for script in /etc/profile.d/*.sh ; do
+        if [ -r $script ] ; then
+                . $script
+        fi
+done
+
+unset script
+
+# 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
+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
+
+if [ -d /usr/local/share ]; then
+        pathprepend /usr/local/share XDG_DATA_DIRS
+fi
+
+# Set some defaults before other applications add to these paths.
+pathappend /usr/share/info INFOPATH
+EOF
+
+

+ Note +

+

+ The man + program automatically deduces the search path for man + pages by examining the content of the PATH variable, see manpath(5) + for details. Setting the MANPATH variable may override the + automatic deduction, so the BLFS editors do not recommend + setting it. If you must set it for any reason, it's + better to start its value with a colon (:), for example MANPATH=:/opt/somepkg/share/man:/opt/otherpkg/share/man + so the paths listed in the MANPATH variable will be appended to the + automatically deduced value instead of overriding it. +

+
+
+
+
+
+
+

+ /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"
+# Set up 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 Configuring + the System Locale page. +

+
cat > /etc/profile.d/i18n.sh << "EOF"
+# Set up i18n variables
+for i in $(locale); do
+  unset ${i%=*}
+done
+
+if [[ "$TERM" = linux ]]; then
+  export LANG=C.UTF-8
+else
+  export LANG=<ll>_<CC>.<charmap><@modifiers>
+fi
+EOF
+
+
+
+
+
+

+ 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 interactive 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
+
+# GnuPG wants this or it'll fail with pinentry-curses under some
+# circumstances (for example signing a Git commit)
+tty -s && export GPG_TTY=$(tty)
+
+# End /etc/bashrc
+EOF
+

+ 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. +

+
+
+

+ ~/.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 https://caliban.org/bash/index.shtml. +

+
+
+
+
+
+

+ 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. +

+
+
+
+
+

+ 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 https://invisible-mirror.net/xterm/ctlseqs/ctlseqs.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.
+
+
+
+
+

+ Random Number Generation +

+
+
+
+
+

+ The Linux kernel supplies a random number generator which is + accessed through /dev/random and + /dev/urandom. Programs that + utilize the random and urandom devices, such as OpenSSH, will benefit from these + instructions. +

+

+ When a Linux system starts up without much operator + interaction, the entropy pool (data used to compute a random + number) may be in a fairly predictable state. This creates the + real possibility that the number generated at startup may + always be the same. In order to counteract this effect, you + should carry the entropy pool information across your + shut-downs and start-ups. +

+

+ Install the /etc/rc.d/init.d/random init script included + with the blfs-bootscripts-20250225 package. +

+
make install-random
+
+
+
+
+
+

+ 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/Alerts is + unrestricted). +

+

+ For some packages, subscribing to their 'announce' lists will + provide prompt news of newer versions. +

+
+
+
+
+
+

+ make-ca-1.16.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ This package ships a CA certificate for validating the + identity of https://hg-edge.mozilla.org/. + If the trust chain of this website has been changed after + the release of make-ca-1.16.1, it may fail to get the + revision of certdata.txt from + server. Use an updated make-ca release at the + release page if this issue happens. +

+
+

+ make-ca Dependencies +

+
+ Required +
+

+ p11-kit-0.25.5 (runtime, built after + libtasn1-4.20.0, required in the + following instructions to generate certificate stores from + trust anchors, and each time make-ca is run) +

+
+ Optional (runtime) +
+

+ nss-3.115 + (to generate a shared NSSDB) +

+
+
+

+ Installation of make-ca and Generation of the CA-certificates + stores +

+

+ The make-ca script will + download and process the certificates included in the + certdata.txt file for use as + trust anchors for the p11-kit-0.25.5 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
+
+

+ Important +

+

+ Technically, this package is already installed at this + point. But most packages listing make-ca as a dependency actually + require the system certificate store set up by this + package, rather than the make-ca program itself. + So the instructions for using make-ca for setting up + the system certificate store are included in this section. + You should make sure the required runtime dependency for + make-ca is satisfied now, + and continue to follow the instructions. +

+
+

+ As the root user, download + the certificate source and prepare for system use with the + following command: +

+
+

+ Note +

+

+ If running the script a second time with the same version + of certdata.txt, for + instance, to update the stores when make-ca is upgraded, or to add + additional stores as the requisite software is installed, + replace the -g + switch with the -r + switch in the command line. If packaging, run make-ca --help to see all + available command line options. +

+
+
/usr/sbin/make-ca -g
+

+ You should periodically update the store with the above + command, either manually, or via a cron + job. If you've installed + Fcron-3.4.0 and completed the section on + periodic jobs, execute the following commands, as the + root user, to create a weekly cron job: +

+
cat > /etc/cron.weekly/update-pki.sh << "EOF" &&
+#!/bin/bash
+/usr/sbin/make-ca -g
+EOF
+chmod 754 /etc/cron.weekly/update-pki.sh
+
+
+

+ 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.115. Additional upstream downloads are + available at the links included in /etc/make-ca/make-ca.conf.dist. Simply copy + the file to /etc/make-ca.conf + and edit as appropriate. +

+

+ 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 + trust store. This directory is also used to store + certificates that were added to or modified in the system + trust store by p11-kit-0.25.5 so that trust values are + maintained across upgrades. Files in this directory must be + in the OpenSSL trusted + certificate format. Certificates imported using the + trust utility + from p11-kit-0.25.5 will utilize the x509 + Extended Key Usage values to assign default trust values for + the system anchors. +

+

+ If you need to override trust values, or otherwise need to + create an OpenSSL trusted + certificate manually from a regular PEM encoded file, you + need to add trust arguments to the openssl command, and create + a new certificate. For example, using the CAcert roots, if you want + to trust both for all three roles, the following commands + will create appropriate OpenSSL trusted certificates (run as + the root user after Wget-1.25.0 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
+

+ 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
+
+
+

+ Using + make-ca with Python3 +

+

+ When Python3 was installed + in LFS, it included the pip3 + module with vendored certificates from the Certifi module. That was necessary, but + it means that whenever pip3 is used it can + reference those certificates, primarily when creating a + virtual environment or when installing a module with all its + wheel dependencies in one go. +

+

+ It is generally considered that the System Administrator + should be in charge of which certificates are available. Now + that make-ca-1.16.1 and p11-kit-0.25.5 have + been installed and make-ca + has been configured, it is possible to make pip3 use the system + certificates. +

+

+ The vendored certificates installed in LFS are a snapshot + from when the pulled-in version of Certifi was created. If you regularly + update the system certificates, the vendored version will + become out of date. +

+

+ To use the system certificates in Python3, you should set _PIP_STANDALONE_CERT to point to them, e.g for + the bash shell: +

+
export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
+
+

+ Warning +

+

+ If you have created virtual environments, for example when + testing modules, and those include the Requests and Certifi modules in ~/.local/lib/python3.13/, then those + local modules will be used instead of the system + certificates unless you remove the local modules. +

+
+

+ To use the system certificates in Python3 with the BLFS profiles, add the + following variable to your system or personal profiles: +

+
mkdir -pv /etc/profile.d &&
+cat > /etc/profile.d/pythoncerts.sh << "EOF"
+# Begin /etc/profile.d/pythoncerts.sh
+
+export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
+
+# End /etc/profile.d/pythoncerts.sh
+EOF
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ CrackLib-2.10.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+

+ Recommended word list for English-speaking countries: +

+ +
+

+ There are additional word lists available for download, e.g., + from https://www.skullsecurity.org/wiki/Passwords. + 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. +

+
+
+
+

+ Installation of CrackLib +

+

+ Install CrackLib by running + the following commands: +

+
CPPFLAGS+=' -I /usr/include/python3.13' \
+./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. +

+
xzcat ../cracklib-words-2.10.3.xz \
+                       > /usr/share/dict/cracklib-words       &&
+ln -v -sf cracklib-words /usr/share/dict/words                &&
+echo $(hostname) >>      /usr/share/dict/cracklib-extra-words &&
+install -v -m755 -d      /usr/lib/cracklib                    &&
+
+create-cracklib-dict     /usr/share/dict/cracklib-words \
+                         /usr/share/dict/cracklib-extra-words
+

+ If desired, check the proper operation of the library as an + unprivileged user by issuing the following command: +

+
make test
+

+ If desired, test the Python module with: +

+
python3 -c 'import cracklib; cracklib.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.18.0 if you wish to provide + strong password support on your system. If you are now + going to install the Linux-PAM-1.7.1 package, you + may disregard this note as Shadow will be reinstalled after the + Linux-PAM installation. +

+
+
+
+

+ Command Explanations +

+

+ CPPFLAGS+=' -I + /usr/include/python3.13': This environment variable is + needed to allow the package to find the Python-3.13 include files. +

+

+ --with-default-dict=/usr/lib/cracklib/pw_dict: + This parameter forces the installation of the CrackLib dictionary to the /lib hierarchy. +

+

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

+

+ sed ... + ./python/test_cracklib.py: This command + updates the build procedure for the Python module for + Python-3.13 and later.. +

+

+ 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, cracklib-update, and + create-cracklib-dict +
+
+ Installed Libraries: + libcrack.so and _cracklib.so + (Python module) +
+
+ Installed Directories: + /usr/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 +

+
+
+
+
+
+
+
+

+ cryptsetup-2.8.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ cryptsetup Dependencies +

+
+ Required +
+

+ JSON-C-0.18, LVM2-2.03.34, and popt-1.19 +

+
+ Optional +
+

+ asciidoctor-2.0.23, libpwquality-1.4.5, argon2, + libssh, + mbedtls, and + passwdqc +

+
+
+

+ 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) --->                   [MD]
+    <*/M> Device mapper support                                     [BLK_DEV_DM]
+    <*/M>   Crypt target support                                      [DM_CRYPT]
+
+-*- Cryptographic API --->                                              [CRYPTO]
+  Block ciphers --->
+    <*/M> AES (Advanced Encryption Standard)                        [CRYPTO_AES]
+    # For tests:
+    <*/M> Twofish                                               [CRYPTO_TWOFISH]
+  Length-preserving ciphers and modes --->
+    <*/M> XTS (XOR Encrypt XOR with ciphertext stealing)            [CRYPTO_XTS]
+  Hashes, digests, and MACs --->
+    <*/M> SHA-224 and SHA-256                                    [CRYPTO_SHA256]
+  Userspace interface --->
+    <*/M> Symmetric key cipher algorithms             [CRYPTO_USER_API_SKCIPHER]
+
+
+

+ Installation of cryptsetup +

+

+ Install cryptsetup by + running the following commands: +

+
./configure --prefix=/usr       \
+            --disable-ssh-token \
+            --disable-asciidoc  &&
+make
+

+ To test the result, issue as the root user: make check. Some tests will + fail if appropriate kernel configuration options are not set. + Some additional options that may be needed for tests are: +

+
CONFIG_SCSI_LOWLEVEL,
+CONFIG_SCSI_DEBUG,
+CONFIG_BLK_DEV_DM_BUILTIN,
+CONFIG_CRC_T10DIF,
+CONFIG_CRYPTO_USER,
+CONFIG_CRYPTO_CRYPTD,
+CONFIG_CRYPTO_LRW,
+CONFIG_CRYPTO_XTS,
+CONFIG_CRYPTO_ESSIV,
+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
+
+
+

+ Command Explanations +

+

+ --disable-ssh-token: + This switch is required if the optional libssh dependency is + not installed. +

+

+ --disable-asciidoc: + This switch disables regeneration of the man pages. Remove + this switch if you have asciidoctor-2.0.23 installed + and wish to regenerate the man pages. Note that even if this + switch is used, the pre-generated man pages are shipped in + the tarball and they'll still be installed. +

+
+
+

+ 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, integritysetup, and + veritysetup +
+
+ Installed Libraries: + libcryptsetup.so +
+
+ Installed Directories: + /usr/lib/cryptsetup +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ cryptsetup +

+
+

+ is used to setup dm-crypt managed device-mapper + mappings +

+
+

+ integritysetup +

+
+

+ is a tool to manage dm-integrity (block level + integrity) volumes +

+
+

+ veritysetup +

+
+

+ is used to configure dm-verity managed + device-mapper mappings. The Device-mapper verity + target provides read-only transparent integrity + checking of block devices using the kernel crypto + API +

+
+
+
+
+
+
+
+

+ Cyrus SASL-2.1.28 +

+
+
+
+
+
+

+ Introduction to Cyrus SASL +

+

+ The Cyrus SASL package + contains a Simple Authentication and Security Layer + implementation, a method for adding authentication support to + connection-based protocols. To use SASL, a protocol includes + a command for identifying and authenticating a user to a + server and for optionally negotiating protection of + subsequent protocol interactions. If its use is negotiated, a + security layer is inserted between the protocol and the + connection. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Cyrus SASL Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Linux-PAM-1.7.1, MIT Kerberos + V5-1.22.1, MariaDB-11.8.3 or MySQL, OpenLDAP-2.6.10, + PostgreSQL-17.6, sphinx-8.2.3, SQLite-3.50.4, + Berkeley DB (deprecated), krb4, + Dmalloc, and + Pod::POM::View::Restructured +

+
+
+

+ Installation of Cyrus SASL +

+
+

+ Note +

+

+ This package does not support parallel build. +

+
+

+ First, fix a the package to be compatible with gcc-15: +

+
patch -Np1 -i ../cyrus-sasl-2.1.28-gcc15_fixes-1.patch &&
+autoreconf -fiv
+

+ Also, fix a problem revealed by gcc-14 and later: +

+
sed '/saslint/a #include <time.h>'       -i lib/saslutil.c &&
+sed '/plugin_common/a #include <time.h>' -i plugins/cram.c
+

+ Install Cyrus SASL by + running the following commands: +

+
./configure --prefix=/usr                       \
+            --sysconfdir=/etc                   \
+            --enable-auth-sasldb                \
+            --with-dblib=lmdb                   \
+            --with-dbpath=/var/lib/sasl/sasldb2 \
+            --with-sphinx-build=no              \
+            --with-saslauthd=/var/run/saslauthd &&
+make -j1
+

+ This package does not come with a test suite. If you are + planning on using the GSSAPI authentication mechanism, test + it after installing the package using the sample server and + client programs which were built in the preceding step. + Instructions for performing the tests can be found at + + https://www.linuxfromscratch.org/hints/downloads/files/cyrus-sasl.txt. +

+

+ Now, as the root user: +

+
make install &&
+install -v -dm755                          /usr/share/doc/cyrus-sasl-2.1.28/html &&
+install -v -m644  saslauthd/LDAP_SASLAUTHD /usr/share/doc/cyrus-sasl-2.1.28      &&
+install -v -m644  doc/legacy/*.html        /usr/share/doc/cyrus-sasl-2.1.28/html &&
+install -v -dm700 /var/lib/sasl
+
+
+

+ 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 LMDB. +

+

+ --with-ldap: This switch enables + the OpenLDAP support. +

+

+ --enable-ldapdb: This switch + enables the LDAPDB authentication backend. +

+

+ --enable-login: This option + enables unsupported LOGIN authentication. +

+

+ --enable-ntlm: This option + enables unsupported NTLM authentication. +

+

+ install -v -m644 + ...: These commands install documentation + which is not installed by the make install command. +

+

+ install -v -m700 -d + /var/lib/sasl: This directory must exist when + starting saslauthd or using the + sasldb plugin. If you're not going to be running the daemon + or using the plugins, you may omit the creation of this + directory. +

+
+
+

+ 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.28/LDAP_SASLAUTHD + for configuring saslauthd with + OpenLDAP. +

+

+ See https://www.cyrusimap.org/sasl/sasl/gssapi.html#gssapi + for configuring saslauthd with + Kerberos. +

+
+
+
+
+
+

+ Init + Script +

+
+
+
+

+ If you need to run the saslauthd daemon at + system startup, install the /etc/rc.d/init.d/saslauthd init script + included in the blfs-bootscripts-20250225 package + using the following command: +

+
make install-saslauthd
+
+

+ Note +

+

+ You'll need to modify /etc/sysconfig/saslauthd and modify the + AUTHMECH parameter with your + desired authentication mechanism. +

+
+
+
+
+

+ 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.28 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 +

+
+
+
+
+
+
+
+

+ GnuPG-2.4.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.4.8.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: a165b60aeaac0bb4d251117a45199c5f +

    +
  • +
  • +

    + Download size: 7.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 136 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (with tests; both using + parallelism=4) +

    +
  • +
+
+

+ GnuPG 2 Dependencies +

+
+ Required +
+

+ libassuan-3.0.2, libgcrypt-1.11.2, + libksba-1.6.7, npth-1.8, and OpenLDAP-2.6.10 +

+
+ Recommended +
+ +
+ Optional +
+

+ cURL-8.15.0, Fuse-3.17.4, ImageMagick-7.1.2-1 (for the + convert + utility, used for generating the documentation), libusb-1.0.29, an MTA, + SQLite-3.50.4, texlive-20250308 (or install-tl-unx), fig2dev (for generating + documentation), and GNU adns +

+
+
+

+ Installation of GnuPG +

+

+ Install GnuPG by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+../configure --prefix=/usr        \
+             --localstatedir=/var \
+             --sysconfdir=/etc    \
+             --docdir=/usr/share/doc/gnupg-2.4.8 &&
+make &&
+
+makeinfo --html --no-split -I doc -o doc/gnupg_nochunks.html ../doc/gnupg.texi &&
+makeinfo --plaintext       -I doc -o doc/gnupg.txt           ../doc/gnupg.texi &&
+make -C doc html
+

+ If you have texlive-20250308 installed and + you wish to create documentation in the pdf format, issue the + following command: +

+
make -C doc pdf
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install &&
+
+install -v -m755 -d /usr/share/doc/gnupg-2.4.8/html            &&
+install -v -m644    doc/gnupg_nochunks.html \
+                    /usr/share/doc/gnupg-2.4.8/html/gnupg.html &&
+install -v -m644    ../doc/*.texi doc/gnupg.txt \
+                    /usr/share/doc/gnupg-2.4.8 &&
+install -v -m644    doc/gnupg.html/* \
+                    /usr/share/doc/gnupg-2.4.8/html
+

+ If you created the pdf format of the documentation, install + them using the following command as the root user: +

+
install -v -m644 doc/gnupg.pdf \
+                 /usr/share/doc/gnupg-2.4.8
+
+
+

+ Command Explanations +

+

+ mkdir build && cd + build: the Gnupg2 developers recommend to + build the package in a dedicated directory. +

+

+ --docdir=/usr/share/doc/gnupg-2.4.8: + This switch changes the default docdir to /usr/share/doc/gnupg-2.4.8. +

+

+ --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-card, gpg-connect-agent, gpg, gpgconf, gpgparsemail, + gpgscm, gpgsm, gpgsplit, gpgtar, gpgv, gpg-wks-client, + gpg-wks-server, kbxutil, and watchgnupg +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/gnupg-2.4.8 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-card +

+
+

+ is a tool to manage smart cards and tokens +

+
+

+ 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-client +

+
+

+ is a client for the Web + Key Service protocol +

+
+

+ gpg-wks-server +

+
+

+ provides a server for the Web Key Service protocol +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ GnuTLS-3.8.10 +

+
+
+
+
+
+

+ 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 1.3 protocol + specification : +

+

+ “ TLS allows + client/server applications to communicate over the Internet + in a way that is designed to prevent eavesdropping, + tampering, and message forgery. ” +

+

+ GnuTLS provides support for + TLS 1.3, TLS 1.2, TLS 1.1, TLS 1.0, and (optionally) SSL 3.0 + protocols. It also supports TLS extensions, including server + name and max record size. Additionally, the library supports + authentication using the SRP protocol, X.509 certificates, + and OpenPGP keys, along with support for the TLS + Pre-Shared-Keys (PSK) extension, the Inner Application + (TLS/IA) extension, and X.509 and OpenPGP certificate + handling. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.10.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 803c6f5c9cbe55c64fbb46690d329a77 +

    +
  • +
  • +

    + Download size: 6.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 178 MB (add 111 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU (add 1.4 SBU for tests; + both using parallelism=8) +

    +
  • +
+
+

+ GnuTLS Dependencies +

+
+ Required +
+

+ Nettle-3.10.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Brotli-1.1.0, Doxygen-1.14.0, + GTK-Doc-1.34.0, libidn-1.43 or libidn2-2.3.8, libseccomp-2.6.0, + Net-tools-2.10 (used during the test + suite), texlive-20250308 or install-tl-unx, Unbound-1.23.1 (to + build the DANE library), Valgrind-3.25.1 (used during the + test suite), autogen, cmocka and datefudge + (used during the test suite if the DANE library is built), + leancrypto, + and Trousers + (Trusted Platform Module support) +

+
+

+ Note +

+

+ Note that if you do not install libtasn1-4.20.0, a + version shipped in the GnuTLS tarball will be used instead. +

+
+
+
+

+ Installation of GnuTLS +

+

+ Install GnuTLS by running + the following commands: +

+
./configure --prefix=/usr \
+            --docdir=/usr/share/doc/gnutls-3.8.10 \
+            --with-default-trust-store-pkcs11="pkcs11:" &&
+make
+

+ To test the results, now issue: make check. +

+

+ Now, install the package as the root user: +

+
make install
+
+
+

+ 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.25.5 is not + installed. +

+

+ --with-default-trust-store-file=/etc/pki/tls/certs/ca-bundle.crt: + This switch tells configure where to find the + legacy CA certificate bundle and to use it instead of PKCS + #11 module by default. Use this if p11-kit-0.25.5 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-0.25.5. +

+

+ --with-included-unistring: This + switch uses the bundled version of libunistring, instead of + the system one. Use this switch if you have not installed + libunistring-1.3. +

+

+ --disable-dsa: This switch + completely disables DSA algorithm support. +

+
+
+

+ 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 and + /usr/share/doc/gnutls-3.8.10 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gpgme-2.0.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-2.0.0.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 60f6871b948060572c7d952e39b42bd8 +

    +
  • +
  • +

    + Download size: 1.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 24 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests and + parallelism=4) +

    +
  • +
+
+

+ gpgme Dependencies +

+
+ Required +
+

+ libassuan-3.0.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of gpgme +

+

+ Install gpgme by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+../configure --prefix=/usr       \
+             --disable-static    &&
+make
+

+ To test the results, you should have GnuPG-2.4.8 installed. If + so, run: +

+
make -k check
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

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

+

+ --disable-gpg-test: Use this + switch if GnuPG-2.4.8 is not installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + gpgme-json, and gpgme-tool +
+
+ Installed Libraries: + libgpgme.so +
+
+ Installed Directory: + /usr/share/common-lisp/source/gpgme +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+
+
+
+
+
+
+

+ gpgmepp-2.0.0 +

+
+
+
+
+
+

+ Introduction to gpgmepp +

+

+ The gpgmepp package provides + a C++ wrapper to gpgme-2.0.0. +

+

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

+

+ Package Information +

+
+ +
+

+ gpgmepp Dependencies +

+
+ Required +
+

+ gpgme-2.0.0 +

+
+
+

+ Installation of gpgmepp +

+

+ Install gpgmepp by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_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: + libgpgmepp.so +
+
+ Installed Directory: + /usr/lib/cmake/Gpgmepp and + /usr/include/gpgme++ +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libgpgmepp.so +

+
+

+ contains the C++ gpgme API functions +

+
+
+
+
+
+
+
+

+ iptables-1.8.11 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ iptables Dependencies +

+
+ Optional +
+

+ libpcap-1.10.5 (required for BPF + compiler or nfsynproxy support), bpf-utils + (required for Berkeley Packet Filter support), libnfnetlink + (required for connlabel support), libnetfilter_conntrack + (required for connlabel support), and nftables +

+
+
+

+ 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 --->                                                [NET]
+  Networking options --->
+    [*] Network packet filtering framework (Netfilter) --->          [NETFILTER]
+      [*] Advanced netfilter configuration                  [NETFILTER_ADVANCED]
+      Core Netfilter Configuration --->
+        <*/M> Netfilter connection tracking support               [NF_CONNTRACK]
+        <*/M> Netfilter Xtables support (required for ip_tables)
+                                                        ...  [NETFILTER_XTABLES]
+        <*/M>   LOG target support                     [NETFILTER_XT_TARGET_LOG]
+      IP: Netfilter Configuration --->
+        <*/M> IP tables support (required for filtering/masq/NAT)
+                                                           ...  [IP_NF_IPTABLES]
+

+ Include any connection tracking protocols that will be used, + as well as any protocols that you wish to use for match + support under the "Core Netfilter Configuration" section. The + above options are enough for running Creating a + Personal Firewall With iptables below. +

+
+
+

+ 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 interface 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 6.x kernels. +

+
cat > /etc/rc.d/rc.iptables << "EOF"
+#!/bin/sh
+
+# Begin rc.iptables
+
+# Insert connection-tracking modules
+# (not needed if built into the kernel)
+modprobe nf_conntrack
+modprobe xt_LOG
+
+# Enable broadcast echo Protection
+echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
+
+# Disable Source Routed Packets
+echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
+echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
+
+# Enable TCP SYN Cookie Protection
+echo 1 > /proc/sys/net/ipv4/tcp_syncookies
+
+# Disable ICMP Redirect Acceptance
+echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
+
+# Do not send Redirect Messages
+echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
+echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
+
+# Drop Spoofed Packets coming in on an interface, where responses
+# would result in the reply going out a different interface.
+echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
+echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
+
+# Log packets with impossible addresses.
+echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
+echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
+
+# be verbose on dynamic ip-addresses  (not needed in case of static IP)
+echo 2 > /proc/sys/net/ipv4/ip_dynaddr
+
+# disable Explicit Congestion Notification
+# too many routers are still ignorant
+echo 0 > /proc/sys/net/ipv4/tcp_ecn
+
+# Set a known state
+iptables -P INPUT   DROP
+iptables -P FORWARD DROP
+iptables -P OUTPUT  DROP
+
+# These lines are here in case rules are already in place and the
+# script is ever rerun on the fly. We want to remove all rules and
+# pre-existing user defined chains before we implement new rules.
+iptables -F
+iptables -X
+iptables -Z
+
+iptables -t nat -F
+
+# Allow local-only connections
+iptables -A INPUT  -i lo -j ACCEPT
+
+# Free output on any interface to any ip for any service
+# (equal to -P ACCEPT)
+iptables -A OUTPUT -j ACCEPT
+
+# Permit answers on already established connections
+# and permit new connections related to established ones
+# (e.g. port mode ftp)
+iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+
+# Drop any incoming MULTICAST or BROADCAST packet before logging:
+# The box outputs several of them when using netbios or mDNS, and those
+# appear immediately as incoming, which clutters the log.
+iptables -A INPUT -m addrtype --dst-type BROADCAST,MULTICAST -j DROP
+
+# Log everything else.
+iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
+
+# End $rc_base/rc.iptables
+EOF
+chmod 700 /etc/rc.d/rc.iptables
+

+ This script is quite simple, it drops all traffic coming + into your computer that wasn't initiated from your + computer, but as long as you are simply surfing the + Internet you are unlikely to exceed its limits. +

+

+ If you frequently encounter certain delays at accessing FTP + servers, take a look at BusyBox with iptables example number 4. +

+

+ Even if you have daemons or services running on your + system, these will be inaccessible everywhere but from your + computer itself. If you want to allow access to services on + your machine, such as ssh or ping, take a look at + Creating a BusyBox With iptables. +

+
+
+
+
+
+

+ 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). +

+
cat > /etc/rc.d/rc.iptables << "EOF"
+#!/bin/sh
+
+# Begin rc.iptables
+
+echo
+echo "You're using the example configuration for a setup of a firewall"
+echo "from Beyond Linux From Scratch."
+echo "This example is far from being complete, it is only meant"
+echo "to be a reference."
+echo "Firewall security is a complex issue, that exceeds the scope"
+echo "of the configuration rules below."
+echo "You can find additional information"
+echo "about firewalls in Chapter 4 of the BLFS book."
+echo "https://www.linuxfromscratch.org/blfs"
+echo
+
+# Insert iptables modules (not needed if built into the kernel).
+
+modprobe nf_conntrack
+modprobe nf_conntrack_ftp
+modprobe xt_conntrack
+modprobe xt_LOG
+modprobe xt_state
+
+# Enable broadcast echo Protection
+echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
+
+# Disable Source Routed Packets
+echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
+
+# Enable TCP SYN Cookie Protection
+echo 1 > /proc/sys/net/ipv4/tcp_syncookies
+
+# Disable ICMP Redirect Acceptance
+echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
+
+# Don't send Redirect Messages
+echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
+
+# Drop Spoofed Packets coming in on an interface where responses
+# would result in the reply going out a different interface.
+echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
+
+# Log packets with impossible addresses.
+echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
+
+# Be verbose on dynamic ip-addresses  (not needed in case of static IP)
+echo 2 > /proc/sys/net/ipv4/ip_dynaddr
+
+# Disable Explicit Congestion Notification
+# Too many routers are still ignorant
+echo 0 > /proc/sys/net/ipv4/tcp_ecn
+
+# Set a known state
+iptables -P INPUT   DROP
+iptables -P FORWARD DROP
+iptables -P OUTPUT  DROP
+
+# These lines are here in case rules are already in place and the
+# script is ever rerun on the fly. We want to remove all rules and
+# pre-existing user defined chains before we implement new rules.
+iptables -F
+iptables -X
+iptables -Z
+
+iptables -t nat -F
+
+# Allow local connections
+iptables -A INPUT  -i lo -j ACCEPT
+iptables -A OUTPUT -o lo -j ACCEPT
+
+# Allow forwarding if the initiated on the intranet
+iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+iptables -A FORWARD ! -i WAN1 -m conntrack --ctstate NEW       -j ACCEPT
+
+# Do masquerading
+# (not needed if intranet is not using private ip-addresses)
+iptables -t nat -A POSTROUTING -o WAN1 -j MASQUERADE
+
+# Log everything for debugging
+# (last of all rules, but before policy rules)
+iptables -A INPUT   -j LOG --log-prefix "FIREWALL:INPUT "
+iptables -A FORWARD -j LOG --log-prefix "FIREWALL:FORWARD "
+iptables -A OUTPUT  -j LOG --log-prefix "FIREWALL:OUTPUT "
+
+# Enable IP Forwarding
+echo 1 > /proc/sys/net/ipv4/ip_forward
+EOF
+chmod 700 /etc/rc.d/rc.iptables
+

+ With this script your intranet should be reasonably secure + against external attacks. No one should be able to setup a + new connection to any internal service and, if it's + masqueraded, makes your intranet invisible to the Internet. + Furthermore, your firewall should be relatively safe + because there are no services running that a cracker could + attack. +

+
+
+
+
+
+

+ 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. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To set up the iptables firewall at boot, install the + /etc/rc.d/init.d/iptables + init script included in the blfs-bootscripts-20250225 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 +

+
+
+
+
+
+
+
+

+ 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.11 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 a utility to manage the kernel Netfilter + interface, iptables-1.8.11. It has been around + since early 2.4 kernels, and has been the standard since. + This is likely the set of tools that will be most familiar to + existing admins. Other tools have been developed more + recently, see the list of further readings below for more + details. Here you will find a list of URLs that contain + comprehensive information about building firewalls and + further securing your system. +

+
+ +
+
+
+
+

+ libcap-2.76 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libcap Dependencies +

+
+ Required +
+

+ Linux-PAM-1.7.1 +

+
+
+

+ 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.7.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 capabilities, you need to + add the libcap module to the beginning of the /etc/pam.d/system-auth file. Make the + required edits with the following commands: +

+
mv -v /etc/pam.d/system-auth{,.bak} &&
+cat > /etc/pam.d/system-auth << "EOF" &&
+# Begin /etc/pam.d/system-auth
+
+auth      optional    pam_cap.so
+EOF
+tail -n +3 /etc/pam.d/system-auth.bak >> /etc/pam.d/system-auth
+

+ Additionally, you'll need to modify the /etc/security/capability.conf file to grant + necessary privileges to users, and utilize the setcap utility to set + capabilities on specific utilities as needed. See + man 8 setcap + and man 3 + cap_from_text for additional information. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + pam_cap.so +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ Linux-PAM-1.7.1 +

+
+
+
+
+
+

+ Introduction to Linux PAM +

+

+ The Linux PAM package + contains Pluggable Authentication Modules used by the local + system administrator to control how application programs + authenticate users. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+

+ Optional Documentation +

+ +
+

+ Linux PAM Dependencies +

+
+ Optional +
+

+ libnsl-2.0.1, libtirpc-1.3.6, + rpcsvc-proto-1.4.4, + Berkeley DB (deprecated), libaudit, + and libeconf +

+
+ Optional (To build the Documentation + and Man Pages) +
+

+ docbook-xml-5.0, docbook-xsl-ns-1.79.2, fop-2.11 (for the PDF + format), libxslt-1.1.43, and Lynx-2.9.2 (for the plain + text format) +

+
+

+ Note +

+

+ Shadow-4.18.0 must be reinstalled and reconfigured after + installing and configuring Linux + PAM. +

+ +
+
+
+

+ Kernel + Configuration +

+

+ For the PAM module pam_loginuid.so (referred by the PAM + configuration file system-session if elogind-255.17 is built later) to + work, a kernel configuration parameter need to be set or the + module will just do nothing: +

+
General setup --->
+  [*] Auditing support                                                   [AUDIT]
+
+
+

+ Installation of Linux PAM +

+

+ If you've installed docbook-xml-5.0, docbook-xsl-ns-1.79.2, libxslt-1.1.43, and Lynx-2.9.2 and you wish + to generate the plain text format of the documentations, + modify meson.build to use + Lynx-2.9.2 instead of W3m or Elinks that + BLFS does not provide: +

+
sed -e "s/'elinks'/'lynx'/"                       \
+    -e "s/'-no-numbering', '-no-references'/      \
+          '-force-html', '-nonumbers', '-stdin'/" \
+    -i meson.build
+

+ Compile and link Linux PAM + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..        \
+  --prefix=/usr       \
+  --buildtype=release \
+  -D docdir=/usr/share/doc/Linux-PAM-1.7.1 &&
+
+ninja
+

+ 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 existing file + can be used for the tests. +

+

+ You should also be aware that ninja install overwrites + the configuration files in /etc/security as well as /etc/environment. If you have modified + those files, be sure to back them up. +

+
+

+ For a first-time installation, create a configuration file by + issuing the following commands as the root user: +

+
install -v -m755 -d /etc/pam.d &&
+
+cat > /etc/pam.d/other << "EOF"
+auth     required       pam_deny.so
+account  required       pam_deny.so
+password required       pam_deny.so
+session  required       pam_deny.so
+EOF
+

+ Now run the tests by issuing ninja test. Be sure the + tests produced no errors before continuing the installation. +

+

+ For a first-time installation, remove the configuration file + created earlier by issuing the following command as the + root user: +

+
rm -fv /etc/pam.d/other
+

+ Now, as the root user: +

+
ninja install &&
+chmod -v 4755 /usr/sbin/unix_chkpwd
+

+ Now remove an unneeded directory as root: +

+
rm -rf /usr/lib/systemd
+

+ If you do not have the optional dependencies installed to + build the documentation and downloaded the optional pre-built + documentation, again as the root user: +

+
tar -C / -xvf ../../Linux-PAM-1.7.1-docs.tar.xz
+
+
+

+ Configuring Linux-PAM +

+
+
+
+
+

+ Configuration Files +

+
+
+
+

+ /etc/security/* and + /etc/pam.d/* +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Configuration information is placed in /etc/pam.d/. Here is a sample file: +

+
# Begin /etc/pam.d/other
+
+auth            required        pam_unix.so     nullok
+account         required        pam_unix.so
+session         required        pam_unix.so
+password        required        pam_unix.so     nullok
+
+# End /etc/pam.d/other
+

+ Now create some generic configuration files. As the + root user: +

+
install -vdm755 /etc/pam.d &&
+cat > /etc/pam.d/system-account << "EOF" &&
+# Begin /etc/pam.d/system-account
+
+account   required    pam_unix.so
+
+# End /etc/pam.d/system-account
+EOF
+
+cat > /etc/pam.d/system-auth << "EOF" &&
+# Begin /etc/pam.d/system-auth
+
+auth      required    pam_unix.so
+
+# End /etc/pam.d/system-auth
+EOF
+
+cat > /etc/pam.d/system-session << "EOF" &&
+# Begin /etc/pam.d/system-session
+
+session   required    pam_unix.so
+
+# End /etc/pam.d/system-session
+EOF
+
+cat > /etc/pam.d/system-password << "EOF"
+# Begin /etc/pam.d/system-password
+
+# use yescrypt hash for encryption, use shadow, and try to use any
+# previously defined authentication token (chosen password) set by any
+# prior module.
+password  required    pam_unix.so       yescrypt shadow try_first_pass
+
+# End /etc/pam.d/system-password
+EOF
+
+

+ If you wish to enable strong password support, install + libpwquality-1.4.5, and follow the + instructions on that page to configure the pam_pwquality + PAM module with strong password support. +

+

+ Next, add a restrictive /etc/pam.d/other configuration file. With + this file, programs that are PAM aware will not run unless + a configuration file specifically for that application + exists. +

+
cat > /etc/pam.d/other << "EOF"
+# Begin /etc/pam.d/other
+
+auth        required        pam_warn.so
+auth        required        pam_deny.so
+account     required        pam_warn.so
+account     required        pam_deny.so
+password    required        pam_warn.so
+password    required        pam_deny.so
+session     required        pam_warn.so
+session     required        pam_deny.so
+
+# End /etc/pam.d/other
+EOF
+

+ The PAM man page + (man pam) + provides a good starting point to learn about the several + fields, and allowable entries. The Linux-PAM System + Administrators' Guide at /usr/share/doc/Linux-PAM-1.7.0/Linux-PAM_SAG.txt + is recommended for additional information. +

+
+

+ Important +

+

+ You should now reinstall the Shadow-4.18.0 + package . +

+
+
+
+
+

+ 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, /usr/lib/security, + /usr/include/security and + /usr/share/doc/Linux-PAM-1.7.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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ liboauth Dependencies +

+
+ Required +
+

+ cURL-8.15.0 +

+
+ Optional +
+

+ nss-3.115 + and Doxygen-1.14.0 (to build documentation) +

+
+
+

+ 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.14.0), + issue: +

+
make dox
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+

+ If you have previously built the documentation, install it by + running the following commands as the root user: +

+
install -v -dm755 /usr/share/doc/liboauth-1.0.3 &&
+cp -rv doc/html/* /usr/share/doc/liboauth-1.0.3
+
+
+

+ 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 strings + 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 +

+
+
+
+
+
+
+
+

+ libpwquality-1.4.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libpwquality Dependencies +

+
+ Required +
+

+ CrackLib-2.10.3 +

+
+ Recommended +
+ +
+
+

+ Installation of libpwquality +

+

+ Install libpwquality by + running the following commands: +

+
./configure --prefix=/usr                      \
+            --disable-static                   \
+            --with-securedir=/usr/lib/security \
+            --disable-python-bindings          &&
+make &&
+pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD/python
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install &&
+pip3 install --no-index --find-links dist --no-user pwquality
+
+
+

+ Command Explanations +

+

+ --disable-python-bindings: This + parameter disables building Python bindings with the + deprecated python3 setup.py + build command. The explicit instruction to + build the Python 3 binding with the pip3 wheel command is + provided. +

+
+
+

+ 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 gecoscheck=0     \
+                                         dictcheck=1 usercheck=1           \
+                                         enforcing=1 badwords=""           \
+                                         dictpath=/usr/lib/cracklib/pw_dict
+
+# use yescrypt hash for encryption, use shadow, and try to use any
+# previously defined authentication token (chosen password) set by any
+# prior module.
+password  required    pam_unix.so        yescrypt shadow try_first_pass
+
+# End /etc/pam.d/system-password
+EOF
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + pwscore and pwmake +
+
+ Installed Libraries: + pam_pwquality.so and + libpwquality.so +
+
+ Installed Directories: + /usr/lib/python3.11/site-packages/pwquality-1.4.5.dist-info +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ MIT Kerberos V5-1.22.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://kerberos.org/dist/krb5/1.22/krb5-1.22.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 8f841cea186ef6856ea6c2a063091861 +

    +
  • +
  • +

    + Download size: 8.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 135 MB (add 15 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (Using parallelism=4; add + 3.8 SBU for tests) +

    +
  • +
+
+

+ MIT + Kerberos V5 Dependencies +

+
+ Optional +
+

+ BIND Utilities-9.20.12, + CrackLib-2.10.3 (/usr/share/dict/words referred by some + tests), keyutils-1.6.3, OpenLDAP-2.6.10, + Valgrind-3.25.1 (used during the test + suite), yasm-1.3.0, libedit, cmocka, kdcproxy, pyrad, and + resolv_wrapper +

+
+

+ Note +

+

+ Some sort of time synchronization facility on your system + (like ntp-4.2.8p18) is required since Kerberos + won't authenticate if there is a time difference between a + kerberized client and the KDC server. +

+
+
+
+

+ Installation of MIT Kerberos V5 +

+

+ Build MIT Kerberos V5 by + running the following commands: +

+
cd src &&
+sed -i -e '/eq 0/{N;s/12 //}' plugins/kdb/db2/libdb2/test/run.test &&
+
+./configure --prefix=/usr            \
+            --sysconfdir=/etc        \
+            --localstatedir=/var/lib \
+            --runstatedir=/run       \
+            --with-system-et         \
+            --with-system-ss         \
+            --with-system-verto=no   \
+            --enable-dns-for-realm   \
+            --disable-rpath          &&
+make
+

+ To test the build, issue: make + -j1 -k check. Some tests may fail with the + latest version of dejagnu and glibc. Some tests may hang for + a long time and fail if the system is not connected to a + network. One test, t_kadm5srv, + is known to fail. If keyutils-1.6.3 is installed but + Keyutils Kernel Configuration is + not satisfied, some tests will fail complaining keyctl failed with code 1. +

+

+ Now, as the root user: +

+
make install &&
+cp -vfr ../doc -T /usr/share/doc/krb5-1.22.1
+
+
+

+ Command Explanations +

+

+ The sed command + removes a test that is known to fail. +

+

+ --localstatedir=/var/lib: This + option is used so that the Kerberos variable runtime data is + located in /var/lib instead of + /usr/var. +

+

+ --runstatedir=/run: + This option is used so that the Kerberos runtime state + information is located in /run + instead of the deprecated /var/run. +

+

+ --with-system-et: + This switch causes the build to use the system-installed + versions of the error-table support software. +

+

+ --with-system-ss: + This switch causes the build to use the system-installed + versions of the subsystem command-line interface software. +

+

+ --with-system-verto=no: This + switch fixes a bug in the package where the build system does + not recognize its own verto library if this package has been + installed before. This is not a problem if you are + reinstalling the same version, but can be problematic if you + are updating because the old version of the verto library + will be used instead of installing the newer version. +

+

+ --enable-dns-for-realm: This + switch allows realms to be resolved using the DNS server. +

+

+ --disable-rpath: This + switch prevents hard coding library search paths (rpath) into + the binary executable files and shared libraries. This + package does not need rpath for an installation into the + standard location, and rpath may sometimes cause unwanted + effects or even security issues. +

+

+ --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 installed in the + CrackLib-2.10.3 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. +

+

+ Next, 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.22.1 on which the above + instructions are based. +

+
+
+
+
+
+
+

+ Init + Script +

+
+
+
+

+ If you want to start Kerberos services at boot, install the + /etc/rc.d/init.d/krb5 init + script included in the blfs-bootscripts-20250225 + 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.22.1,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 a utility used to make modifications to the + Kerberos database +

+
+

+ kadmin.local +

+
+

+ is a 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 +

+
+

+ provides information about how to link programs + against the Kerberos + 5 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 the Kerberos + protocol. It 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, and then display + the server's response +

+
+

+ sim_client +

+
+

+ is a simple UDP-based sample client program for + demonstration purposes +

+
+

+ sim_server +

+
+

+ is a simple UDP-based server application for + demonstration purposes +

+
+

+ sserver +

+
+

+ is a 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 + provide 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 +

+
+
+
+
+
+
+
+

+ Nettle-3.10.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/nettle/nettle-3.10.2.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: b28bcbf6f045ff007940a9401673600d +

    +
  • +
  • +

    + Download size: 2.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 102 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests; both using + parallelism=4) +

    +
  • +
+
+

+ Nettle Dependencies +

+
+ Optional +
+

+ Valgrind-3.25.1 (optional for the + tests) +

+
+
+

+ 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.10.2 &&
+install -v -m644 nettle.{html,pdf} /usr/share/doc/nettle-3.10.2
+
+
+

+ 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.10.2 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ NSS-3.115 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ NSS + Dependencies +

+
+ Required +
+

+ NSPR-4.37 +

+
+ Recommended +
+ +
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/nss +

+
+
+

+ Installation of NSS +

+

+ Install NSS by running the + following commands: +

+
patch -Np1 -i ../nss-standalone-1.patch &&
+
+cd nss &&
+
+make BUILD_OPT=1                      \
+  NSPR_INCLUDE_DIR=/usr/include/nspr  \
+  USE_SYSTEM_ZLIB=1                   \
+  ZLIB_LIBS=-lz                       \
+  NSS_ENABLE_WERROR=0                 \
+  $([ $(uname -m) = x86_64 ] && echo USE_64=1) \
+  $([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)
+

+ To run the tests, execute the following commands: +

+
cd tests &&
+HOST=localhost DOMSUF=localdomain ./all.sh
+cd ../
+
+

+ Note +

+

+ Some information about the tests: +

+
+
    +
  • +

    + HOST=localhost and DOMSUF=localdomain are required. + Without these variables, a FQDN is required to be + specified and this generic way should work for + everyone, provided localhost.localdomain is defined + in /etc/hosts, as done in + the LFS book. +

    +
  • +
  • +

    + The tests take a long time to run. If desired there + is information in the all.sh script about running + subsets of the total test suite. +

    +
  • +
  • +

    + When interrupting the tests, the test suite fails to + spin down test servers that are run. This leads to an + infinite loop in the tests where the test suite tries + to kill a server that doesn't exist anymore because + it pulls the wrong PID. +

    +
  • +
  • +

    + Test suite results (in HTML format!) can be found at + ../../test_results/security/localhost.1/results.html +

    +
  • +
  • +

    + A few tests might fail on some Intel machines for + unknown reasons. +

    +
  • +
+
+
+

+ Now, as the root user: +

+
cd ../dist                                                          &&
+
+install -v -m755 Linux*/lib/*.so              /usr/lib              &&
+install -v -m644 Linux*/lib/{*.chk,libcrmf.a} /usr/lib              &&
+
+install -v -m755 -d                           /usr/include/nss      &&
+cp -v -RL {public,private}/nss/*              /usr/include/nss      &&
+
+install -v -m755 Linux*/bin/{certutil,nss-config,pk12util} /usr/bin &&
+
+install -v -m644 Linux*/lib/pkgconfig/nss.pc  /usr/lib/pkgconfig
+
+
+

+ 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.25.5 is installed, the + p11-kit trust module + (/usr/lib/pkcs11/p11-kit-trust.so) can be + used as a drop-in replacement for /usr/lib/libnssckbi.so to transparently + make the system CAs available to NSS aware applications, rather than the + static library provided by /usr/lib/libnssckbi.so. As the root user, execute the following command: +

+
ln -sfv ./pkcs11/p11-kit-trust.so /usr/lib/libnssckbi.so
+

+ Additionally, for dependent applications that do not use the + internal database (/usr/lib/libnssckbi.so), the /usr/sbin/make-ca script included on the + make-ca-1.16.1 page can generate a + system wide NSS DB with the -n switch, or by modifying the + /etc/make-ca/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 +

+
+
+
+
+
+
+
+

+ OpenSSH-10.0p1 +

+
+
+
+
+
+

+ 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. +

+
+

+ Note +

+

+ This package reports version OpenSSH_10.0p2 even though the + source package is openssh-10.0p1. +

+
+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 689148621a2eaa734497b12bed1c5202 +

    +
  • +
  • +

    + Download size: 1.9 MB +

    +
  • +
  • +

    + Estimated disk space required: 50 MB (add 22 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (Using parallelism=4; + running the tests takes about 15 minutes, irrespective + of processor speed) +

    +
  • +
+
+

+ OpenSSH Dependencies +

+
+ Optional +
+

+ GDB-16.3 + (for tests), Linux-PAM-1.7.1 (PAM configuration + files from Shadow-4.18.0 are used to create openssh + ones), Xorg Applications (or Xorg build + environment, see Command Explanations), MIT Kerberos + V5-1.22.1, Which-2.23 (for tests), + libedit, LibreSSL + Portable, OpenSC, and + libsectok +

+
+ Optional Runtime (Used only to + gather entropy) +
+

+ Net-tools-2.10, and Sysstat-12.7.8 +

+
+
+

+ 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 -g sys -m700 -d /var/lib/sshd &&
+
+groupadd -g 50 sshd        &&
+useradd  -c 'sshd PrivSep' \
+         -d /var/lib/sshd  \
+         -g sshd           \
+         -s /bin/false     \
+         -u 50 sshd
+

+ Install OpenSSH by running + the following commands: +

+
./configure --prefix=/usr                            \
+            --sysconfdir=/etc/ssh                    \
+            --with-privsep-path=/var/lib/sshd        \
+            --with-default-path=/usr/bin             \
+            --with-superuser-path=/usr/sbin:/usr/bin \
+            --with-pid-dir=/run                      &&
+make
+

+ To test the results, issue: make -j1 tests. +

+

+ Now, as the root user: +

+
make install &&
+install -v -m755    contrib/ssh-copy-id /usr/bin     &&
+
+install -v -m644    contrib/ssh-copy-id.1 \
+                    /usr/share/man/man1              &&
+install -v -m755 -d /usr/share/doc/openssh-10.0p1     &&
+install -v -m644    INSTALL LICENCE OVERVIEW README* \
+                    /usr/share/doc/openssh-10.0p1
+
+
+

+ Command Explanations +

+

+ --sysconfdir=/etc/ssh: This + prevents the configuration files from being installed in + /usr/etc. +

+

+ --with-default-path=/usr/bin + and --with-superuser-path=/usr/sbin:/usr/bin: + These set PATH consistent with LFS + and BLFS Shadow package. +

+

+ --with-pid-dir=/run: + This prevents OpenSSH from + referring to deprecated /var/run. +

+

+ --with-pam: This parameter + enables Linux-PAM support in + the build. +

+

+ --with-xauth=$XORG_PREFIX/bin/xauth: Set the + default location for the xauth binary for X + authentication. The environment variable XORG_PREFIX should be set following Xorg build + environment. This can also be controlled from + sshd_config with the + XAuthLocation keyword. You can omit this switch if + Xorg is already installed. +

+

+ --with-kerberos5=/usr: This + option is used to include Kerberos 5 support in the build. +

+

+ --with-libedit: This option + enables line editing and history features for sftp. +

+
+
+

+ 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_ed25519.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 "KbdInteractiveAuthentication no" >> /etc/ssh/sshd_config
+

+ If you added Linux-PAM + support and you want ssh to use it then you will need to + add a configuration file for sshd and enable use of LinuxPAM. Note, ssh only uses PAM to + check passwords, if you've disabled password logins these + commands are not needed. If you want to use PAM, issue the + following commands as the root user: +

+
sed 's@d/login@d/sshd@g' /etc/pam.d/login > /etc/pam.d/sshd &&
+chmod 644 /etc/pam.d/sshd &&
+echo "UsePAM yes" >> /etc/ssh/sshd_config
+

+ Additional configuration information can be found in the + man pages for sshd, ssh and ssh-agent. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To start the SSH server at system boot, install the + /etc/rc.d/init.d/sshd init + script included in the blfs-bootscripts-20250225 + package. +

+
+

+ Note +

+

+ Changing the setting of ListenAddress in /etc/sshd/sshd_config is unsupported + with the BLFS sshd bootscript. +

+
+
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-10.0p1, 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 +

+
+
+
+
+
+
+
+

+ p11-kit-0.25.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ p11-kit Dependencies +

+
+ Recommended +
+ +
+ Recommended (runtime) +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0, libxslt-1.1.43, and + nss-3.115 + (runtime) +

+
+
+

+ 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
+
+# Update trust stores
+/usr/sbin/make-ca -r
+EOF
+

+ Install p11-kit by running + the following commands: +

+
mkdir p11-build &&
+cd    p11-build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D trust_paths=/etc/pki/anchors &&
+ninja
+

+ To test the results, issue: LC_ALL=C ninja test. +

+

+ Now, as the root user: +

+
ninja install &&
+ln -sfv /usr/libexec/p11-kit/trust-extract-compat \
+        /usr/bin/update-ca-certificates
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D + trust_paths=/etc/pki/anchors: this switch sets + the location of trusted certificates used by libp11-kit.so. +

+

+ -D hash_impl=freebl: Use this + switch if you want to use the Freebl library from + NSS for SHA1 and MD5 + hashing. +

+

+ -D gtk_doc=true: Use this switch + if you have installed GTK-Doc-1.34.0 and libxslt-1.1.43 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 +

+
+
+
+
+
+
+
+

+ Polkit-126 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Polkit Dependencies +

+
+ Required +
+

+ duktape-2.7.0 and GLib-2.84.4 (GObject + Introspection recommended) +

+
+ Recommended +
+ +
+

+ Note +

+

+ Since elogind uses PAM + to register user sessions, it is a good idea to build + Polkit with PAM support so + elogind can track + Polkit sessions. +

+
+
+ Optional +
+

+ GTK-Doc-1.34.0 and dbusmock-0.36.0 (required for tests) +

+
+ Optional + Runtime Dependencies +
+

+ One polkit authentication agent for using polkit in the + graphical environment: polkit-kde-agent in Plasma-6.4.4 + for KDE, the agent built in gnome-shell-48.4 + for GNOME3, polkit-gnome-0.105 for XFCE, and + lxqt-policykit-2.2.0 for LXQt +

+
+

+ Note +

+

+ If libxslt-1.1.43 is installed, then + docbook-xml-4.5 and docbook-xsl-nons-1.79.2 are + required. If you have installed libxslt-1.1.43, but + you do not want to install any of the DocBook packages + mentioned, you will need to use -D + man=false in the instructions below. +

+
+
+
+

+ Kernel Configuration +

+

+ Some tests need user namespace support. If you are going to + run the test suite, enable the support and recompile the + kernel if necessary: +

+
General setup --->
+  -*- Namespaces support --->                                       [NAMESPACES]
+    [*] User namespace                                                 [USER_NS]
+
+
+

+ 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
+

+ Install Polkit by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                     \
+      --prefix=/usr                \
+      --buildtype=release          \
+      -D man=true                  \
+      -D session_tracking=elogind  \
+      -D systemdsystemunitdir=/tmp \
+      -D tests=true
+

+ Build the package: +

+
ninja
+

+ To test the results, first ensure that the system + D-Bus daemon is running, and + both D-Bus Python-1.4.0 and dbusmock-0.36.0 are installed. Then run + ninja test. +

+

+ Now, as the root user: +

+
ninja install
+

+ Remove some files that aren't useful on a SysV system as the + root user: +

+
rm -v /tmp/*.service                 &&
+rm -rf /usr/lib/{sysusers,tmpfiles}.d 
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D tests=true: This + switch allows to run the test suite of this package. As + Polkit is used for + authorizations, its integrity can affect system security. So + it's recommended to run the test suite building this package. +

+

+ -D os_type=lfs: Use this switch + if you did not create the /etc/lfs-release file or distribution auto + detection will fail and you will be unable to use + Polkit. +

+

+ -D 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. +

+

+ -D introspection=false: Use this + option if you are certain that you do not need + gobject-introspection files for polkit, or do not have + installed GLib-2.84.4 with GObject Introspection. +

+

+ -D man=false: Use this option to + disable generating and installing manual pages. This is + useful if libxslt is not installed. +

+

+ -D examples=true: Use this option + to build the example programs. +

+

+ -D gtk_doc=true: Use this option + to enable building and installing the API documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + pkaction, pkcheck, 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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Polkit GNOME Dependencies +

+
+ Required +
+

+ AccountsService-23.13.9, + GTK-3.24.50, and Polkit-126 +

+
+
+

+ 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 authentication framework to work, polkit-gnome-authentication-agent-1 + needs to be started. However, make install did not + install a startup file for the Polkit GNOME so you have to create it + by yourself. +

+

+ Issue the following commands as the root user to create a startup file for + Polkit GNOME: +

+
mkdir -p /etc/xdg/autostart &&
+cat > /etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop << "EOF"
+[Desktop Entry]
+Name=PolicyKit Authentication Agent
+Comment=PolicyKit Authentication Agent
+Exec=/usr/libexec/polkit-gnome-authentication-agent-1
+Terminal=false
+Type=Application
+Categories=
+NoDisplay=true
+OnlyShowIn=GNOME;XFCE;Unity;
+AutostartCondition=GNOME3 unless-session gnome
+EOF
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Shadow-4.18.0 +

+
+
+
+
+
+

+ Introduction to Shadow +

+

+ Shadow was indeed installed + in LFS and there is no reason to reinstall it unless you + installed Linux-PAM after + your LFS system was completed. With Linux-PAM installed, reinstalling + Shadow will allow programs + such as login + and su to + utilize PAM. +

+

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

+

+ Package Information +

+
+ +
+

+ Shadow Dependencies +

+
+ Required +
+

+ Linux-PAM-1.7.1 +

+
+ Optional +
+

+ libbsd and + tcb +

+
+
+

+ 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. +

+
+

+ Reinstall Shadow by running + the following commands: +

+
sed -i 's/groups$(EXEEXT) //' src/Makefile.in          &&
+
+find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \; &&
+find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; &&
+find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \; &&
+
+sed -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD YESCRYPT@' \
+    -e 's@/var/spool/mail@/var/mail@'                   \
+    -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                  \
+    -i etc/login.defs                                   &&
+
+./configure --sysconfdir=/etc   \
+            --disable-static    \
+            --without-libbsd    \
+            --with-{b,yes}crypt &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make exec_prefix=/usr pamddir= install
+

+ The man pages were installed in LFS, but if reinstallation is + desired, run (as the root + user): +

+
make -C man install-man
+
+
+

+ 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 ... {} \;: The first command is used to + suppress the installation of the groups man pages so the + existing ones installed from the Coreutils package are not replaced. The + two other commands prevent installation of manual pages that + are already installed by Man-pages in LFS. +

+

+ sed -e 's@#ENCRYPT_METHOD + DES@ENCRYPT_METHOD YESCRYPT@' -e + 's@/var/spool/mail@/var/mail@' -e + '/PATH=/{s@/sbin:@@;s@/bin:@@}' -i + etc/login.defs: Instead of using the default + 'DES' method, this command modifies the installation to use + the much more secure 'YESCRYPT' method of hashing passwords, + which also allows passwords longer than eight characters. The + command also changes the obsolete /var/spool/mail location for user mailboxes + that Shadow uses by default + to the /var/mail location. It + also changes the default path to be consistent with that set + in LFS. +

+

+ --without-libbsd: + Prevents looking for the readpassphrase function, + which can be found only in libbsd, which we do not have in BLFS. An + internal implementation of readpassphrase is used + instead. +

+

+ pamddir=: Prevents + installation of the shipped PAM configuration files into + /etc/pam.d. The shipped + configuration does not work with the BLFS PAM configuration + and we will create these configuration files explicitly. +

+
+
+

+ Configuring Linux-PAM to Work with Shadow +

+
+

+ Note +

+

+ The rest of this page is devoted to configuring + Shadow to work properly + with Linux-PAM. +

+
+
+
+
+
+

+ 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.7.1 + page for further configuration information. For information + specific to integrating Shadow, Linux-PAM and libpwquality, you can visit the + following link: +

+ +
+
+
+
+
+ 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            \
+                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 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
+# disabled by default
+#auth      required    pam_wheel.so use_uid
+
+# include system account settings
+account   include     system-account
+
+# Set default environment variables for the service user
+session   required    pam_env.so
+
+# include system session settings
+session   include     system-session
+
+# End /etc/pam.d/su
+EOF
+
+
+
+
+
+
+ 'chpasswd' and 'newusers' +
+
+
+
+
cat > /etc/pam.d/chpasswd << "EOF"
+# Begin /etc/pam.d/chpasswd
+
+# always allow root
+auth      sufficient  pam_rootok.so
+
+# include system auth and account settings
+auth      include     system-auth
+account   include     system-account
+password  include     system-password
+
+# End /etc/pam.d/chpasswd
+EOF
+
+sed -e s/chpasswd/newusers/ /etc/pam.d/chpasswd >/etc/pam.d/newusers
+
+
+
+
+
+
+ 'chage' +
+
+
+
+
cat > /etc/pam.d/chage << "EOF"
+# Begin /etc/pam.d/chage
+
+# always allow root
+auth      sufficient  pam_rootok.so
+
+# include system auth and account settings
+auth      include     system-auth
+account   include     system-account
+
+# End /etc/pam.d/chage
+EOF
+
+
+
+
+
+
+ Other shadow utilities +
+
+
+
+
for PROGRAM in chfn chgpasswd chsh groupadd groupdel \
+               groupmems groupmod useradd userdel usermod
+do
+    install -v -m644 /etc/pam.d/chage /etc/pam.d/${PROGRAM}
+    sed -i "s/chage/$PROGRAM/" /etc/pam.d/${PROGRAM}
+done
+
+

+ 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 + root, and then run + login and + login as another user. If you do not see any errors, + then all is well and you should proceed with the rest + of the configuration. If you did receive errors, stop + now and double check the above configuration files + manually. Any error is the sign of an error in the + above procedure. You can also run the test suite from + the Linux-PAM package + to assist you in determining the problem. If you cannot + find and fix the error, you should recompile + Shadow adding the + --without-libpam switch to + the configure command in + the above instructions (also move the /etc/login.defs.orig backup file to + /etc/login.defs). If you + fail to do this and the errors remain, you will be + unable to log into your system. +

+
+
+
+
+
+
+
+ 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: +

+
if [ -f /etc/login.access ]; then mv -v /etc/login.access{,.NOUSE}; fi
+
+
+
+
+
+
+ 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: +

+
if [ -f /etc/limits ]; then mv -v /etc/limits{,.NOUSE}; fi
+
+

+ 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/12.4/chapter08/shadow.html#contents-shadow. +

+
+
+
+
+
+

+ ssh-askpass-10.0p1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ssh-askpass Dependencies +

+
+ Required +
+

+ GTK-3.24.50, Sudo-1.9.17p2 (runtime), Xorg + Libraries, and a + graphical environment (runtime) +

+
+
+

+ Installation of ssh-askpass +

+

+ Install ssh-askpass by + running the following commands: +

+
cd contrib &&
+make gnome-ssh-askpass3
+

+ Now, as the root user: +

+
install -v -d -m755                    /usr/libexec/openssh/contrib  &&
+install -v -m755    gnome-ssh-askpass3 /usr/libexec/openssh/contrib  &&
+ln -sv -f contrib/gnome-ssh-askpass3   /usr/libexec/openssh/ssh-askpass
+

+ The use of /usr/libexec/openssh/contrib and a symlink is + justified by the eventual necessity of a different program + for that service. +

+
+
+

+ Configuring ssh-askpass +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ As the root user, configure + Sudo-1.9.17p2 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: + gnome-ssh-askpass3, ssh-askpass + (symlink to gnome-ssh-askpass3) +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/libexec/openssh/contrib +
+
+
+
+
+
+
+
+

+ stunnel-5.75 +

+
+
+
+
+
+

+ 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 also be used to + tunnel PPP over network sockets without changes to the server + package source code. +

+

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

+

+ Package Information +

+
+ +
+

+ stunnel Dependencies +

+
+ Optional +
+

+ libnsl-2.0.1, netcat (required for + tests), tcpwrappers, + and TOR +

+
+
+

+ 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 \
+            --disable-systemd    &&
+make
+

+ If you have installed the optional netcat application, the + regression tests can be run with make check. +

+

+ Now, as the root user: +

+
make docdir=/usr/share/doc/stunnel-5.75 install
+

+ If you do not already have a signed SSL Certificate and + Private Key, create the stunnel.pem file in the /etc/stunnel directory using the command + below. You will be prompted to enter the necessary + information. Ensure you reply to the +

+
Common Name (FQDN of your server) [localhost]:
+

+ prompt with the name or IP address you will be using to + access the service(s). +

+

+ To generate a certificate, as the root user, issue: +

+
make cert
+
+
+

+ Command Explanations +

+

+ --disable-systemd: + This switch disables systemd socket activation support which + is not available in BLFS. +

+

+ make docdir=... + install: This command installs the package + and changes the documentation installation directory to + standard naming conventions. +

+
+
+

+ 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>
+

+ For a full explanation of the commands and syntax used in + the configuration file, issue man stunnel. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To automatically start the stunnel daemon when the + system is booted, install the /etc/rc.d/init.d/stunnel bootscript from + the blfs-bootscripts-20250225 package. +

+
make install-stunnel
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + stunnel and stunnel3 +
+
+ Installed Library: + libstunnel.so +
+
+ Installed Directories: + /{etc,lib,var/lib}/stunnel and + /usr/share/doc/stunnel-5.75 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ stunnel +

+
+

+ is a program designed to work as an SSL encryption + wrapper between remote clients and local 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 +

+
+
+
+
+
+
+
+

+ Sudo-1.9.17p2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.sudo.ws/dist/sudo-1.9.17p2.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: dcbf46f739ae06b076e1a11cbb271a10 +

    +
  • +
  • +

    + Download size: 5.2 MB +

    +
  • +
  • +

    + Estimated disk space required: 54 MB (add 10 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with parallelism=4; add + 0.1 SBU for tests) +

    +
  • +
+
+

+ Sudo + Dependencies +

+
+ Optional +
+

+ Linux-PAM-1.7.1, MIT Kerberos + V5-1.22.1, OpenLDAP-2.6.10, MTA (that + provides a sendmail command), + AFS, + libaudit, + Opie, and + Sssd +

+
+
+

+ Installation of Sudo +

+

+ Install Sudo by running the + following commands: +

+
./configure --prefix=/usr         \
+            --libexecdir=/usr/lib \
+            --with-secure-path    \
+            --with-env-editor     \
+            --docdir=/usr/share/doc/sudo-1.9.17p2 \
+            --with-passprompt="[sudo] password for %p: " &&
+make
+

+ To test the results, issue: env + LC_ALL=C make check |& tee + make-check.log. Check the results with + grep failed + make-check.log. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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-env-editor: + This switch enables use of the environment variable EDITOR + for visudo. +

+

+ --with-passprompt: + This switch sets the password prompt. The %p will be expanded to the name + of the user whose password is being requested. +

+

+ --without-pam: This switch avoids + building Linux-PAM support + when Linux-PAM is installed + on the system. +

+

+ --with-all-insults: This switch + includes all the sudo insult sets. Insults are printed if the + user types a bad password, and if enabled in /etc/sudoers. Use --with-insults to have them enabled by + default. Various sets of insults can be selected with some + other switches. +

+
+

+ Note +

+

+ There are many options to sudo's configure command. Check + the configure + --help output for a complete list. +

+
+
+
+

+ 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 + credentials. Use the following commands to create the + /etc/sudoers.d/00-sudo + configuration file as the root user: +

+
cat > /etc/sudoers.d/00-sudo << "EOF"
+Defaults secure_path="/usr/sbin:/usr/bin"
+%wheel ALL=(ALL) ALL
+EOF
+
+

+ Note +

+

+ In very simple installations where there is only one + user, it may be easier to just edit the /etc/sudoers file directly. In that + case, the secure_path entry + may not be needed and using sudo -E ... can import + the non-privileged user's full environment into the + privileged session. +

+

+ The files in the /etc/sudoers.d directory are parsed in + sorted lexical order. Be careful that entries in an added + file do not overwrite previous entries. +

+
+

+ For details, see man + sudoers. +

+
+

+ 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, sudoers.so, sudo_intercept.so, + sudo_noexec.so, and system_group.so +
+
+ Installed Directories: + /etc/sudoers.d, /usr/lib/sudo, + /usr/share/doc/sudo-1.9.17p2, 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Tripwire Dependencies +

+
+ Optional +
+

+ An MTA +

+
+
+

+ 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 conflict with the default version which is c++17 + in recent version of gcc. +

+

+ make install: + This command creates the Tripwire security keys as well as + installing the binaries. There are two keys: a site key and a + local key which are stored in /etc/tripwire/. +

+

+ cp -v policy/*.txt + /usr/doc/tripwire-2.4.3.7: This command + installs the tripwire sample + policy files with the other tripwire documentation. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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,nvme,md,firewire} \
+     /usr/lib/modules/$KERNEL_VERSION/kernel/drivers/{scsi,message,pcmcia,virtio} \
+     /usr/lib/modules/$KERNEL_VERSION/kernel/drivers/usb/{host,storage}           \
+     -type f 2> /dev/null | cpio --make-directories -p --quiet $WDIR
+
+  cp /usr/lib/modules/$KERNEL_VERSION/modules.{builtin,order} \
+            $WDIR/usr/lib/modules/$KERNEL_VERSION
+  if [ -f /usr/lib/modules/$KERNEL_VERSION/modules.builtin.modinfo ]; then
+    cp /usr/lib/modules/$KERNEL_VERSION/modules.builtin.modinfo \
+            $WDIR/usr/lib/modules/$KERNEL_VERSION
+  fi
+
+  depmod -b $WDIR $KERNEL_VERSION
+fi
+
+( cd $WDIR ; find . | cpio -o -H newc --quiet | gzip -9 ) > $INITRAMFS_FILE
+
+# Prepare early loading of microcode if available
+if ls /usr/lib/firmware/intel-ucode/* >/dev/null 2>&1 ||
+   ls /usr/lib/firmware/amd-ucode/*   >/dev/null 2>&1; then
+
+# first empty WDIR to reuse it
+  rm -r $WDIR/*
+
+  DSTDIR=$WDIR/kernel/x86/microcode
+  mkdir -p $DSTDIR
+
+  if [ -d /usr/lib/firmware/amd-ucode ]; then
+    cat /usr/lib/firmware/amd-ucode/microcode_amd*.bin > $DSTDIR/AuthenticAMD.bin
+  fi
+
+  if [ -d /usr/lib/firmware/intel-ucode ]; then
+    cat /usr/lib/firmware/intel-ucode/* > $DSTDIR/GenuineIntel.bin
+  fi
+
+  ( cd $WDIR; find . | cpio -o -H newc --quiet ) > microcode.img
+  cat microcode.img $INITRAMFS_FILE > tmpfile
+  mv tmpfile $INITRAMFS_FILE
+  rm microcode.img
+fi
+
+# Remove the temporary directories and files
+rm -rf $WDIR $unsorted
+printf "done.\n"
+
+EOF
+
+chmod 0755 /usr/sbin/mkinitramfs
+
mkdir -p /usr/share/mkinitramfs &&
+cat > /usr/share/mkinitramfs/init.in << "EOF"
+#!/bin/sh
+
+PATH=/usr/bin:/usr/sbin
+export PATH
+
+problem()
+{
+   printf "Encountered a problem!\n\nDropping you to a shell.\n\n"
+   sh
+}
+
+no_device()
+{
+   printf "The device %s, which is supposed to contain the\n" $1
+   printf "root file system, does not exist.\n"
+   printf "Please fix this problem and exit this shell.\n\n"
+}
+
+no_mount()
+{
+   printf "Could not mount device %s\n" $1
+   printf "Sleeping forever. Please reboot and fix the kernel command line.\n\n"
+   printf "Maybe the device is formatted with an unsupported file system?\n\n"
+   printf "Or maybe filesystem type autodetection went wrong, in which case\n"
+   printf "you should add the rootfstype=... parameter to the kernel command line.\n\n"
+   printf "Available partitions:\n"
+}
+
+do_mount_root()
+{
+   mkdir /.root
+   [ -n "$rootflags" ] && rootflags="$rootflags,"
+   rootflags="$rootflags$ro"
+
+   case "$root" in
+      /dev/*    ) device=$root ;;
+      UUID=*    ) eval $root; device="/dev/disk/by-uuid/$UUID" ;;
+      PARTUUID=*) eval $root; device="/dev/disk/by-partuuid/$PARTUUID" ;;
+      LABEL=*   ) eval $root; device="/dev/disk/by-label/$LABEL" ;;
+      ""        ) echo "No root device specified." ; problem ;;
+   esac
+
+   while [ ! -b "$device" ] ; do
+       no_device $device
+       problem
+   done
+
+   if ! mount -n -t "$rootfstype" -o "$rootflags" "$device" /.root ; then
+       no_mount $device
+       cat /proc/partitions
+       while true ; do sleep 10000 ; done
+   else
+       echo "Successfully mounted device $root"
+   fi
+}
+
+do_try_resume()
+{
+   case "$resume" in
+      UUID=* ) eval $resume; resume="/dev/disk/by-uuid/$UUID"  ;;
+      LABEL=*) eval $resume; resume="/dev/disk/by-label/$LABEL" ;;
+   esac
+
+   if $noresume || ! [ -b "$resume" ]; then return; fi
+
+   ls -lH "$resume" | ( read x x x x maj min x
+       echo -n ${maj%,}:$min > /sys/power/resume )
+}
+
+init=/sbin/init
+root=
+rootdelay=
+rootfstype=auto
+ro="ro"
+rootflags=
+device=
+resume=
+noresume=false
+
+mount -n -t devtmpfs devtmpfs /dev
+mount -n -t proc     proc     /proc
+mount -n -t sysfs    sysfs    /sys
+mount -n -t tmpfs    tmpfs    /run
+
+read -r cmdline < /proc/cmdline
+
+for param in $cmdline ; do
+  case $param in
+    init=*      ) init=${param#init=}             ;;
+    root=*      ) root=${param#root=}             ;;
+    rootdelay=* ) rootdelay=${param#rootdelay=}   ;;
+    rootfstype=*) rootfstype=${param#rootfstype=} ;;
+    rootflags=* ) rootflags=${param#rootflags=}   ;;
+    resume=*    ) resume=${param#resume=}         ;;
+    noresume    ) noresume=true                   ;;
+    ro          ) ro="ro"                         ;;
+    rw          ) ro="rw"                         ;;
+  esac
+done
+
+# udevd location depends on version
+if [ -x /sbin/udevd ]; then
+  UDEVD=/sbin/udevd
+elif [ -x /lib/udev/udevd ]; then
+  UDEVD=/lib/udev/udevd
+elif [ -x /lib/systemd/systemd-udevd ]; then
+  UDEVD=/lib/systemd/systemd-udevd
+else
+  echo "Cannot find udevd nor systemd-udevd"
+  problem
+fi
+
+${UDEVD} --daemon --resolve-names=never
+udevadm trigger
+udevadm settle
+
+if [ -f /etc/mdadm.conf ] ; then mdadm -As                       ; fi
+if [ -x /sbin/vgchange  ] ; then /sbin/vgchange -a y > /dev/null ; fi
+if [ -n "$rootdelay"    ] ; then sleep "$rootdelay"              ; fi
+
+do_try_resume # This function will not return if resuming from disk
+do_mount_root
+
+killall -w ${UDEVD##*/}
+
+exec switch_root /.root "$init" "$@"
+
+EOF
+
+
+

+ Using + an initramfs +

+

+ Required Runtime Dependency +

+

+ cpio-2.15 +

+

+ Other Runtime Dependencies +

+

+ LVM2-2.03.34 and/or mdadm-4.4 must be installed + before generating the initramfs, if the system partition uses + them. +

+

+ To build an initramfs, run the following as the root user: +

+
mkinitramfs [KERNEL VERSION]
+

+ The optional argument is the directory where the appropriate + kernel modules are located. This must be a subdirectory of + /lib/modules. If no modules are + specified, then the initramfs is named initrd.img-no-kmods. If a kernel + version is specified, the initrd is named initrd.img-$KERNEL_VERSION and is + only appropriate for the specific kernel specified. The + output file will be placed in the current directory. +

+

+ If early loading of microcode is needed (see the + section called “Microcode updates for CPUs”), you can + install the appropriate blob or container in /lib/firmware. It will be automatically + added to the initrd when running mkinitramfs. +

+

+ After generating the initrd, copy it to the /boot directory. +

+

+ Now edit /boot/grub/grub.cfg + and add a new menuentry. Below are several examples. +

+
# Generic initramfs and root fs identified by UUID
+menuentry "LFS Dev (LFS-7.0-Feb14) initrd, Linux 3.0.4"
+{
+  linux  /vmlinuz-3.0.4-lfs-20120214 root=UUID=54b934a9-302d-415e-ac11-4988408eb0a8 ro
+  initrd /initrd.img-no-kmods
+}
+
# Generic initramfs and root fs on LVM partition
+menuentry "LFS Dev (LFS-7.0-Feb18) initrd lvm, Linux 3.0.4"
+{
+  linux  /vmlinuz-3.0.4-lfs-20120218 root=/dev/mapper/myroot ro
+  initrd /initrd.img-no-kmods
+}
+
# Specific initramfs and root fs identified by LABEL
+menuentry "LFS Dev (LFS-7.1-Feb20) initrd label, Linux 3.2.6"
+{
+  linux  /vmlinuz-3.2.6-lfs71-120220 root=LABEL=lfs71 ro
+  initrd /initrd.img-3.2.6-lfs71-120220
+}
+

+ Finally, reboot the system and select the desired system. +

+
+
+
+
+
+

+ btrfs-progs-6.16 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Btrfs-progs Dependencies +

+
+ Required +
+

+ LZO-2.10 +

+
+ Optional +
+

+ LVM2-2.03.34 (dmsetup is used in tests), + sphinx-8.2.3 and sphinx_rtd_theme-3.0.2 (required + to build documentation), and + reiserfsprogs (for tests). +

+
+
+

+ Kernel Configuration +

+

+ Enable the following option in the kernel configuration and + recompile the kernel: +

+
File systems --->
+  <*/M> Btrfs filesystem support                                      [BTRFS_FS]
+

+ In addition to the above and to the options required for + LVM2-2.03.34, the following options must + be set for running tests. The options marked as empty should + not be selected + because they are for developers and make some tests fail. +

+
File systems --->
+  <*/M> Btrfs filesystem support                                      [BTRFS_FS]
+  [*]     Btrfs POSIX Access Control Lists                  [BTRFS_FS_POSIX_ACL]
+  [ ]     Btrfs will run sanity tests upon loading   [BTRFS_FS_RUN_SANITY_TESTS]
+  [ ]     Btrfs debugging support                                  [BTRFS_DEBUG]
+  [ ]     Btrfs assert support                                    [BTRFS_ASSERT]
+  [ ]     Btrfs with the ref verify tool compiled in       [BTRFS_FS_REF_VERIFY]
+
+
+

+ Installation of btrfs-progs +

+

+ Install btrfs-progs by + running the following commands: +

+
./configure --prefix=/usr           \
+            --disable-static        \
+            --disable-documentation &&
+make
+
+

+ Note +

+

+ Some tests require grep built with perl regular + expressions. To obtain this, rebuild grep with the LFS + Chapter 8 instructions after installing pcre2-10.45. +

+
+

+ Before running tests, build a support program: +

+
make fssum
+

+ Now remove one test known to fail. As root: +

+
rm -rf tests/misc-tests/041-subvolume-delete-during-send
+

+ 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 from + running because the test disk image is not cleanly + unmounted. Also make sure that the btrfs kernel module is + loaded. +

+
+

+ Install the package as the root user: +

+
make install
+

+ If you have passed --disable-documentation to + configure and + you need the manual pages, install them by running, as the + root user: +

+
for i in 5 8; do
+   install Documentation/*.$i /usr/share/man/man$i
+done
+
+
+

+ Command Explanations +

+

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

+

+ --disable-documentation: This + switch disables rebuilding the manual pages, because it + requires sphinx-8.2.3. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Kernel + Configuration +

+

+ Enable the following option in the kernel configuration and + recompile the kernel if you need to mount a FAT-family + filesystem: +

+
File systems --->
+  DOS/FAT/EXFAT/NT Filesystems --->
+    < /*/M> MSDOS fs support                                          [MSDOS_FS]
+    <*/M>   VFAT (Windows-95) fs support                               [VFAT_FS]
+

+ Note that CONFIG_MSDOS_FS + deliberately does not support long file names. CONFIG_VFAT_FS should be used instead unless + you really want to enforce the DOS-style “8.3” file names. +

+

+ You can mount a FAT-family filesystem once the kernel + supports it. If you don't need to create, check, or relabel a + FAT-family system, you may skip this package. +

+
+
+

+ 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
+

+ To test the results, issue: make check. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ Fuse-3.17.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Fuse + Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (to rebuild the API + documentation), pytest-8.4.1 (required for tests), and + looseversion + (for tests) +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
File systems --->
+  <*/M> FUSE (Filesystem in Userspace) support                         [FUSE_FS]
+

+ Character devices in userspace should be enabled too for + running the tests: +

+
File systems --->
+  <*/M> FUSE (Filesystem in Userspace) support                         [FUSE_FS]
+  <*/M>   Character device in Userspace support                           [CUSE]
+
+
+

+ Installation of Fuse +

+

+ Install Fuse by running the + following commands: +

+
sed -i '/^udev/,$ s/^/#/' util/meson.build &&
+
+mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ The API documentation is included in the package, but if you + have Doxygen-1.14.0 installed and wish to + rebuild it, issue: +

+
pushd .. &&
+  doxygen doc/Doxyfile &&
+popd
+

+ To test the results, issue the following commands (as the + root user): +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install looseversion                      &&
+python3 -m pytest
+deactivate
+

+ The pytest-8.4.1 Python module is required for + the tests. One test named test_cuse will fail if the CONFIG_CUSE configuration item + was not enabled when the kernel was built. One test, + test/util.py, will output a + warning due to the usage of an unknown mark in pytest. +

+

+ Now, as the root user: +

+
ninja install                  &&
+chmod u+s /usr/bin/fusermount3 &&
+
+cd ..                          &&
+cp -Rv doc/html -T /usr/share/doc/fuse-3.17.4 &&
+install -v -m644   doc/{README.NFS,kernel.txt} \
+                   /usr/share/doc/fuse-3.17.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. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+
+
+

+ 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.17.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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+
+
+

+ Kernel + Configuration +

+

+ Enable the following option in the kernel configuration and + recompile the kernel: +

+
File systems --->
+  <*/M> JFS filesystem support                                          [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 +

+
+
+
+
+
+
+
+

+ LVM2-2.03.34 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://sourceware.org/ftp/lvm2/LVM2.2.03.34.tgz +

    +
  • +
  • +

    + Download MD5 sum: 947741079e22a35d76aefa99861b406a +

    +
  • +
  • +

    + Download size: 2.8 MB +

    +
  • +
  • +

    + Estimated disk space required: 41 MB (add 20 MB for + tests; transient files can grow up to around 300 MB in + the /tmp directory during tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (add 9 to 48 SBU for + tests, depending on disk speed and whether ram block + device is enabled in the kernel) +

    +
  • +
+
+

+ LVM2 + Dependencies +

+
+ Required +
+

+ libaio-0.3.113 +

+
+ Optional +
+

+ libnvme-1.15, mdadm-4.4, Valgrind-3.25.1, + Which-2.23, xfsprogs-6.15.0 + (latter four may be used, but are not required, for tests), + + reiserfsprogs, thin-provisioning-tools, + and vdo +

+
+
+

+ 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 --->
+  [*] Block devices --->                                               [BLK_DEV]
+    <*/M> RAM block device support                                 [BLK_DEV_RAM]
+  [*] Multiple devices driver support (RAID and LVM) --->                   [MD]
+    <*/M> Device mapper support                                     [BLK_DEV_DM]
+    <*/M>   Crypt target support                                      [DM_CRYPT]
+    <*/M>   Snapshot target                                        [DM_SNAPSHOT]
+    <*/M>   Thin provisioning target                      [DM_THIN_PROVISIONING]
+    <*/M>   Cache target (EXPERIMENTAL)                               [DM_CACHE]
+    <*/M>   Mirror target                                            [DM_MIRROR]
+    <*/M>   Zero target                                                [DM_ZERO]
+    <*/M>   I/O delaying target                                       [DM_DELAY]
+
+Kernel hacking --->
+  Generic Kernel Debugging Instruments --->
+    [*] Magic SysRq key                                            [MAGIC_SYSRQ]
+
+
+

+ 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: +

+
LC_ALL=en_US.UTF-8 make check_local
+

+ Some tests may hang. In this case they can be skipped by + adding S=<testname> to the + make command. + Other targets are available and can be listed with + make -C test + help. The test timings are very dependent on + the speed of the disk(s), and on the number of enabled kernel + options. +

+

+ The tests do not implement the “expected fail” + possibility, and a small number of test failures is expected + by upstream. More failures may happen because some kernel + options are missing. For example, the lack of the + dm-delay device mapper + target explains some failures. Some tests may fail if there + is insufficient free space available in the partition with + the /tmp directory. At least one test fails if 16 TB is not + available. Some tests are flagged “warned” if + thin-provisioning-tools + are not installed. A workaround is to add the following flags + to configure: +

+
     --with-thin-check=    \
+     --with-thin-dump=     \
+     --with-thin-repair=   \
+     --with-thin-restore=  \
+     --with-cache-check=   \
+     --with-cache-dump=    \
+     --with-cache-repair=  \
+     --with-cache-restore= \
+

+ Some tests may hang. They can be removed if necessary, for + example: rm + test/shell/lvconvert-raid-reshape.sh. The + tests generate a lot of kernel messages, which may clutter + your terminal. You can disable them by issuing dmesg -D before running the + tests (do not forget to issue dmesg -E when tests are + done). +

+
+

+ 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
+rm -fv /usr/lib/udev/rules.d/69-dm-lvm.rules
+
+
+

+ 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. +

+

+ rm + .../69-dm-lvm.rules: Under certain + circumstances, this udev rule calls systemd-run, which is not + available on sysv. It performs actions that are done by + another boot script anyway, so it is not needed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + blkdeactivate, dmeventd (optional), + dmsetup, fsadm, lvm, lvmdump, and lvm_import_vdo. 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, + libdevmapper-event-lvm2thin.so, and + libdevmapper-event-lvm2vdo.so +
+
+ Installed Directories: + /etc/lvm and /usr/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 symbolic 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 +

+
+
+
+
+
+
+
+

+ 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.34 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
+

+ The LFS boot scripts automatically make these logical volumes + available to the system in the udev script. Edit the + /etc/fstab file as required to + automatically mount them. +

+

+ A LVM logical volume can host a root filesystem, but requires + the use of an initramfs (initial RAM file system). The + initramfs proposed in the section called “About initramfs” + allows to pass the lvm volume in the root= switch of the kernel + command line. +

+

+ For more information about LVM, see the LVM HOWTO and the lvm + man pages. A good in-depth + guide is available from RedHat®, although it + makes sometimes reference to proprietary tools. +

+
+
+
+
+

+ 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.4.1. +

+

+ 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 offer a hardware-like RAID implementation in + the system BIOS. Sometime this is referred to as 'fake' RAID + as the capabilities are generally incorporated into firmware + without any hardware acceleration. +

+

+ The advantages and disadvantages of BIOS-based RAID are + generally the same as hardware RAID with the additional + disadvantage that there is no hardware acceleration. +

+

+ In some cases, BIOS-based RAID firmware is enabled by default + (e.g. some DELL systems). If software RAID is desired, this + option must be explicitly disabled in the BIOS. +

+
+
+

+ Software 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.4. +

+

+ Configuring a RAID device is straightforward using + mdadm. Generally devices are + created in the /dev directory + as /dev/mdx where x is an integer. +

+

+ The first step in creating a RAID array is to use + partitioning software such as fdisk or parted-3.6 to define + the partitions needed for the array. Usually, there will be + one partition on each drive participating in the RAID array, + but that is not strictly necessary. For this example, there + will be four disk drives: /dev/sda, /dev/sdb, /dev/sdc, and /dev/sdd. They will be partitioned as + follows: +

+
Partition Size     Type                Use
+sda1:     100 MB   fd Linux raid auto  /boot    (RAID 1) /dev/md0
+sda2:      10 GB   fd Linux raid auto  /        (RAID 1) /dev/md1
+sda3:       2 GB   83 Linux swap       swap
+sda4      300 GB   fd Linux raid auto  /home    (RAID 5) /dev/md2
+
+sdb1:     100 MB   fd Linux raid auto  /boot    (RAID 1) /dev/md0
+sdb2:      10 GB   fd Linux raid auto  /        (RAID 1) /dev/md1
+sdb3:       2 GB   83 Linux swap       swap
+sdb4      300 GB   fd Linux raid auto  /home    (RAID 5) /dev/md2
+
+sdc1:      12 GB   fd Linux raid auto  /usr/src (RAID 0) /dev/md3
+sdc2:     300 GB   fd Linux raid auto  /home    (RAID 5) /dev/md2
+
+sdd1:      12 GB   fd Linux raid auto  /usr/src (RAID 0) /dev/md3
+sdd2:     300 GB   fd Linux raid auto  /home    (RAID 5) /dev/md2 
+

+ In this arrangement, a separate boot partition is created as + the first small RAID array and a root filesystem as the + secong RAID array, both mirrored. The third partition is a + large (about 1TB) array for the /home directory. This provides an ability + to stripe data across multiple devices, improving speed for + both reading and writing large files. Finally, a fourth array + is created that concatenates two partitions into a larger + device. +

+
+

+ 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 formatted with the + filesystem of choice (e.g. ext3, ext4, xfsprogs-6.15.0, + etc). The formatted partitions can then be mounted. The + /etc/fstab file can use the + devices created for mounting at boot time and the linux + command line in /boot/grub/grub.cfg can specify + root=/dev/md1. +

+
+

+ 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. +

+
+
+
+
+
+

+ mdadm-4.4 +

+
+
+
+
+
+

+ Introduction to mdadm +

+

+ The mdadm package contains + administration tools for software RAID. +

+

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

+

+ Package Information +

+
+ +
+

+ mdadm Dependencies +

+
+ Optional +
+

+ An MTA +

+
+
+

+ 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) --->                   [MD]
+    <*/M>   RAID support                                            [BLK_DEV_MD]
+    [*]       Autodetect RAID arrays during kernel boot          [MD_AUTODETECT]
+    # Only the RAID types desired are required:
+    < /*/M> RAID-0 (striping) mode                                    [MD_RAID0]
+    < /*/M> RAID-1 (mirroring) mode                                   [MD_RAID1]
+    < /*/M> RAID-10 (mirrored striping) mode                         [MD_RAID10]
+    < /*/M> RAID-4/RAID-5/RAID-6 mode                               [MD_RAID456]
+
+
+

+ Installation of mdadm +

+

+ Fix a build error introduced by gcc-15: +

+
sed -e "s/__u8 signature\[4\]/& __attribute__ ((nonstring))/" \
+    -i platform-intel.h
+

+ Build mdadm by running the + following command: +

+
make
+

+ This package does not come with a working test suite. +

+

+ Now, as the root user: +

+
make BINDIR=/usr/sbin install
+
+
+

+ Command Explanations +

+

+ make + everything: This optional target creates + extra programs, particularly a statically-linked version of + mdadm. This + needs to be manually installed. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ ntfs-3g-2022.10.3 +

+
+
+
+
+
+

+ Introduction to Ntfs-3g +

+
+

+ Note +

+

+ A new + read-write driver for NTFS, called NTFS3, has been added + into the Linux kernel since the 5.15 release. The + performance of NTFS3 is much better than ntfs-3g. To enable + NTFS3, enable the following options in the kernel + configuration and recompile the kernel if necessary: +

+
File systems --->
+  DOS/FAT/EXFAT/NT Filesystems --->
+    <*/M> NTFS Read-Write file system support                         [NTFS3_FS]
+    # This makes the kernel use NTFS3 when the userspace requests the old
+    # read-only NTFS driver:
+    <*/M> NTFS file system support                                     [NTFS_FS]
+

+ With the kernel support available, ntfs-3g is only needed + if you need the utilities from it (for example, to create + or check NTFS filesystems). +

+
+

+ The Ntfs-3g package contains + a stable, read-write open source driver for NTFS partitions. + NTFS partitions are used by most Microsoft operating systems. + Ntfs-3g allows you to mount NTFS partitions in read-write + mode from your Linux system. It uses the FUSE kernel module + to be able to implement NTFS support in userspace. The + package also contains various utilities useful for + manipulating NTFS partitions. +

+

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

+

+ Package Information +

+
+ +
+

+ Ntfs-3g Dependencies +

+
+ Optional +
+

+ fuse 2.x (this + disables user mounts) +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
File systems --->
+  <*/M> FUSE (Filesystem in Userspace) support                         [FUSE_FS]
+

+ Note that it is only needed for mounting NTFS partitions with + ntfs-3g. If you will use the in-kernel NTFS3 driver for + mounting NTFS partitions (as the BLFS editors recommend) + instead, you can skip this configuration item. +

+
+
+

+ Installation of Ntfs-3g +

+

+ Install Ntfs-3g by running + the following commands: +

+
./autogen.sh &&
+
+./configure --prefix=/usr        \
+            --disable-static     \
+            --with-fuse=internal \
+            --docdir=/usr/share/doc/ntfs-3g-2022.10.3 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ It's recommended to use the in-kernel NTFS3 driver for + mounting NTFS filesystems, instead of ntfs-3g (see the note + at the start of this page). However, if you want to use + ntfs-3g to mount the NTFS filesystems anyway, create a + symlink for the mount command: +

+
ln -svf ../bin/ntfs-3g /usr/sbin/mount.ntfs &&
+ln -svf ntfs-3g.8 /usr/share/man/man8/mount.ntfs.8
+
+
+

+ 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. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ gptfdisk-1.0.10 +

+
+
+
+
+
+

+ 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 + interface similar to the classic fdisk program. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ gptfdisk Dependencies +

+
+ Required +
+

+ popt-1.19 +

+
+ Optional +
+

+ ICU-77.1 +

+
+
+

+ 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 and fix some + minor location issues. Install gptfdisk by running the following + commands: +

+
patch -Np1 -i ../gptfdisk-1.0.10-convenience-1.patch &&
+sed -i 's|ncursesw/||' gptcurses.cc &&
+sed -i 's|sbin|usr/sbin|' Makefile  &&
+
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ parted-3.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/parted/parted-3.6.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 93d2d8f22baebc5eb65b85da05a79e4e +

    +
  • +
  • +

    + Download size: 1.8 MB +

    +
  • +
  • +

    + Estimated disk space required: 29 MB (additional 3 MB + for the tests and additional 2 MB for optional PDF and + Postscript documentation) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (additional 3.6 SBU for + the tests) +

    +
  • +
+
+

+ Parted Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ dosfstools-4.2, texlive-20250308 (or install-tl-unx), and Digest::CRC + (for tests) +

+
+
+

+ Optional + Kernel Configuration for Tests +

+

+ About 20 % more tests are run if the following kernel module + is built: +

+
Device Drivers --->
+  SCSI device support --->
+    [*] SCSI low-level drivers --->                              [SCSI_LOWLEVEL]
+      <M> SCSI debugging host and device simulator                  [SCSI_DEBUG]
+
+
+

+ Installation of parted +

+

+ First, make the package compatible with gcc-15: +

+
sed -i 's/do_version ()/do_version (PedDevice** dev, PedDisk** diskp)/' parted/parted.c
+

+ 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-20250308 installed and + wish to create PDF and Postscript documentation issue the + following commands: +

+
cp build-aux/texinfo.tex doc               &&
+texi2pdf -o doc/parted.pdf doc/parted.texi &&
+texi2dvi -o doc/parted.dvi doc/parted.texi &&
+dvips    -o doc/parted.ps  doc/parted.dvi
+

+ To test the results, issue, as the root user: +

+
make check
+
+

+ 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.6/html &&
+install -v -m644    doc/html/* \
+                    /usr/share/doc/parted-3.6/html &&
+install -v -m644    doc/{FAT,API,parted.{txt,html}} \
+                    /usr/share/doc/parted-3.6
+

+ Install the optional PDF and Postscript documentation by + issuing the following command as the root user: +

+
install -v -m644 doc/FAT doc/API doc/parted.{pdf,ps,dvi} \
+                    /usr/share/doc/parted-3.6
+
+
+

+ 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.6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ parted +

+
+

+ is a partition manipulation program +

+
+

+ partprobe +

+
+

+ informs the OS of partition table changes +

+
+

+ libparted.so +

+
+

+ contains the Parted API functions +

+
+
+
+
+
+
+
+

+ smartmontools-7.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ smartmontools Dependencies +

+
+ Optional (runtime) +
+

+ cURL-8.15.0 or Lynx-2.9.2 or Wget-1.25.0 (download tools), + and GnuPG-2.4.8 (encrypted hard disks) +

+
+
+

+ Installation of smartmontools +

+

+ Install smartmontools by + running the following commands: +

+
./configure --prefix=/usr           \
+            --sysconfdir=/etc       \
+            --with-initscriptdir=no \
+            --with-libsystemd=no    \
+            --docdir=/usr/share/doc/smartmontools-7.5 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --with-initscriptdir=no: This + switch suppresses the default initialization script. See + below for the BLFS script. +

+

+ --with-libsystemd=no: + This switch disables support for the sd-notify notification + system provided by systemd. +

+
+
+

+ Configuring smartmontools +

+
+
+
+
+

+ Config File +

+
+
+
+

+ /etc/smartd.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ See the embedded comments in /etc/smartd.conf for detailed + instructions on customizing the smartd daemon. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ If you want the smartd + daemon to start automatically when the system is booted, + install the /etc/rc.d/init.d/smartd init script + included in the blfs-bootscripts-20250225 package. +

+
make install-smartd
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + smartctl, smartd, and + update-smart-drivedb +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/smartmontools, + /usr/share/doc/smartmontools-7.5, 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 +

+
+
+
+
+
+
+
+

+ sshfs-3.7.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Sshfs Dependencies +

+
+ Required +
+

+ Fuse-3.17.4, GLib-2.84.4, and OpenSSH-10.0p1. +

+
+ Optional +
+

+ docutils-0.21.2 (required to build the + man page) +

+
+
+

+ Installation of Sshfs +

+

+ Install Sshfs by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfsprogs-6.15.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xfsprogs Dependencies +

+
+ Required +
+

+ inih-61 and + liburcu-0.15.3 +

+
+ Optional +
+

+ ICU-77.1 + (for unicode name scanning in xfs_scrub) +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel: +

+
File systems --->
+  <*/M> XFS filesystem support                                          [XFS_FS]
+
+
+

+ Installation of xfsprogs +

+

+ Install xfsprogs by running + the following commands: +

+
make DEBUG=-DNDEBUG     \
+     INSTALL_USER=root  \
+     INSTALL_GROUP=root \
+     LOCAL_CONFIGURE_OPTIONS="--localstatedir=/var"
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make PKG_DOC_DIR=/usr/share/doc/xfsprogs-6.15.0 install     &&
+make PKG_DOC_DIR=/usr/share/doc/xfsprogs-6.15.0 install-dev &&
+
+rm -rfv /usr/lib/libhandle.{a,la}
+
+
+

+ Command Explanations +

+

+ sed ... static long + filesize...: That sed fixes an issue which + appears when building on 32 bit systems, only. There is a + mismatch in prototype and function header which results in + error on that architecture. +

+

+ DEBUG=-DNDEBUG: Turns + off debugging symbols. +

+

+ INSTALL_USER=root + INSTALL_GROUP=root: + This sets the owner and group of the installed files. +

+

+ LOCAL_CONFIGURE_OPTIONS="--localstatedir=/var": + This sets the state directory to /var, preventing /usr/var + from being created. +

+

+ 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_property, xfs_protofile, 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, /usr/share/xfsprogs, and + /usr/share/doc/xfsprogs-6.15.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 otherwise 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_property +

+
+

+ examines and edits properties about a XFS + filesystem +

+
+

+ xfs_protofile +

+
+

+ creates a protofile for use with mkfs.xfs +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Packages for UEFI Boot +

+
+
+
+
+
+
+
+

+ efivar-39 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ efivar Dependencies +

+
+ Optional +
+

+ mandoc + (for the man page of efisecdb) +

+
+
+

+ Installation of efivar +

+
+

+ Note +

+

+ This package cannot function properly on a 32-bit system + with a 64-bit UEFI implementation. Don't install this + package (or efibootmgr) on 32-bit system unless you are + absolutely sure you have a 32-bit UEFI implementation, + which is very rare in practice. +

+
+

+ Build efivar with the + following commands: +

+
make ENABLE_DOCS=0
+

+ 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 ENABLE_DOCS=0 LIBDIR=/usr/lib
+

+ To avoid a hard dependency on mandoc we used ENABLE_DOCS=0, but it causes + all the man pages skipped from the installation even though + most of them actually does not need mandoc. Still as the + root user, install these man + pages: +

+
install -vm644 docs/efivar.1 /usr/share/man/man1 &&
+install -vm644 docs/*.3      /usr/share/man/man3
+
+
+

+ Command Explanations +

+

+ ENABLE_DOCS=0: + Disable the generation of man pages, in order to allow + building this package without mandoc installed. +

+

+ LIBDIR=/usr/lib: This + option overrides the default library directory of the package + (/usr/lib64, which is not used + by LFS). +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + efisecdb and efivar +
+
+ Installed Libraries: + libefiboot.so, libefisec.so, and + libefivar.so +
+
+ Installed Directories: + /usr/include/efivar +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ efisecdb +

+
+

+ is a utility for managing UEFI signature lists +

+
+

+ efivar +

+
+

+ is a tool to manipulate UEFI variables +

+
+

+ libefiboot.so +

+
+

+ is a library used by efibootmgr +

+
+

+ libefisec.so +

+
+

+ is a library for managing UEFI signature lists +

+
+

+ libefivar.so +

+
+

+ is a library for the manipulation of EFI variables +

+
+
+
+
+
+
+
+

+ efibootmgr-18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ efibootmgr Dependencies +

+
+ Required +
+

+ efivar-39 and popt-1.19 +

+
+
+

+ Installation of efibootmgr +

+

+ 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 +

+
+
+
+
+
+
+
+

+ GRUB-2.12 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/grub/grub-2.12.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 60c564b1bdc39d8e43b3aab4bc0fb140 +

    +
  • +
  • +

    + Download size: 29 MB +

    +
  • +
  • +

    + Estimated disk space required: 174 MB (with optional + dependencies and download) +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU +

    +
  • +
+
+

+ Additional Downloads +

+
+

+ Optional Unicode font data for the GRUB menu (only + useful if FreeType is installed) +

+ +
+

+ GRUB + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ FreeType-2.13.3, Fuse-3.17.4, and LVM2-2.03.34 +

+

+ If you are building GRUB for a 32-bit LFS system to boot it + on a 64-bit UEFI firmware, rebuild GCC-15.2.0 with the --enable-targets=all switch + appended to the ../configure command. +

+
+
+

+ Installation of GRUB +

+

+ First, install font data as the root user if you've downloaded it and + you've installed the optional dependency FreeType-2.13.3: +

+
mkdir -pv /usr/share/fonts/unifont &&
+gunzip -c ../unifont-16.0.04.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. +

+
+

+ Add a file missing from the release tarball: +

+
echo depends bli part_gpt > grub-core/extra_deps.lst
+

+ Build GRUB with the + following commands: +

+
./configure --prefix=/usr        \
+            --sysconfdir=/etc    \
+            --disable-efiemu     \
+            --with-platform=efi  \
+            --target=x86_64      \
+            --disable-werror     &&
+make
+

+ This package does not have a test suite providing meaningful + results. +

+

+ Now, if you've skipped the LFS GRUB package, as the + root user install GRUB and + skip the remaining instructions in this section: +

+
make install &&
+mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
+

+ If you've not skipped LFS GRUB package, as the root user, only install the components + not installed from the LFS GRUB package instead: +

+
make -C grub-core install
+

+ If you've installed the optional font data and FreeType-2.13.3, install the + grub-mkfont + program and the font data files (without the font data files + GRUB can still function normally, but the boot menu will be + displayed using a coarse font or in a smaller region on the + screen). +

+
install -vm755 grub-mkfont /usr/bin/ &&
+install -vm644 ascii.h widthspec.h *.pf2 /usr/share/grub/
+

+ If both Fuse-3.17.4 and LVM2-2.03.34 are installed, + also install the grub-mount program: +

+
install -vm755 grub-mount /usr/bin/
+
+
+

+ Command Explanations +

+

+ --with-platform=efi: + Ensures building GRUB with EFI enabled. +

+

+ --target=x86_64: + Ensures building GRUB for x86_64 even if building on a 32-bit + LFS system. Most EFI firmware on x86_64 does not support + 32-bit bootloaders. +

+

+ --target=i386: A few 32-bit x86 + platforms have EFI support. And, some x86_64 platforms have a + 32-bit EFI implementation, but they are very old and rare. + Use this instead of --target=x86_64 if you are + absolutely sure + that LFS is running on such a system. +

+
+
+

+ 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 +

+

+ A list of the installed files, along with their short + descriptions can be found at + ../../../../lfs/view/12.4/chapter08/grub.html#contents-gRUB. +

+

+ Listed below are the newly installed programs along with + short descriptions. +

+
+
+
+ Installed Programs: + grub-mkfont and grub-mount + (optional) +
+
+ Installed Directories: + /usr/lib/grub/x86_64-efi +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ grub-mkfont +

+
+

+ converts common font file formats into PF2 +

+
+

+ grub-mount +

+
+

+ is a debug tool for filesystem driver +

+
+
+
+
+
+
+
+

+ 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 and UEFI in BLFS, + Secure Boot must be turned off from the configuration + interface of the firmware. Read the documentation provided by + the manufacturer of your system to find out how. +

+
+
+

+ 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                                          [EFI]
+  [*]   EFI stub support                                              [EFI_STUB]
+
+-*- Enable the block layer --->                                          [BLOCK]
+  Partition Types --->
+    [ /*] Advanced partition selection                      [PARTITION_ADVANCED]
+    [*]     EFI GUID Partition support                           [EFI_PARTITION]
+
+File systems --->
+  DOS/FAT/EXFAT/NT Filesystems --->
+    <*/M> VFAT (Windows-95) fs support                                 [VFAT_FS]
+  Pseudo filesystems --->
+    <*/M> EFI Variable filesystem                                    [EFIVAR_FS]
+  -*- Native language support --->                                         [NLS]
+    <*/M> Codepage 437 (United States, Canada)                [NLS_CODEPAGE_437]
+    <*/M> NLS ISO 8859-1  (Latin 1; Western European Languages)  [NLS_ISO8859_1]
+
+

+ The meaning of the configuration options: +

+
+
+ CONFIG_PARTITION_ADVANCED +
+
+

+ If it's not enabled, CONFIG_EFI_PARTITION will + be enabled automatically. But when it's enabled, you + must set CONFIG_EFI_PARTITION to + enabled as well. +

+
+
+
+
+
+

+ 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 partition of the USB flash drive to + be an “EFI + system” partition (change sdx to the device node + corresponding to your USB flash drive): +

+
fdisk /dev/sdx
+
+Welcome to fdisk (util-linux 2.39.1).
+Changes will remain in memory only, until you decide to write them.
+Be careful before using the write command.
+
+
+Command (m for help): t
+Partition number (1-9, default 9): 1
+Partition type or alias (type L to list all): uefi
+Changed type of partition 'Linux filesystem' to 'EFI System'.
+
+Command (m for help): w
+The partition table has been altered.
+Syncing disks.
+

+ Still as the root user, + create a mount point for the EFI partition on the USB flash + drive and mount it: +

+
mount --mkdir -v -t vfat /dev/sdx1 -o codepage=437,iocharset=iso8859-1 \
+      /mnt/rescue
+

+ Install GRUB for EFI on the partition: +

+
grub-install --target=x86_64-efi --removable \
+             --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue
+

+ Unmount the partition: +

+
umount /mnt/rescue
+

+ Now the USB flash drive can be used as an emergency boot disk + on any x86-64 UEFI platform. To learn how to select this + flash drive as the boot device, read the manual of your + motherboard or laptop. It will boot the system and show the + GRUB shell. Then you can type commands to boot your operating + system from the hard drive. +

+
+
+

+ Find or Create the EFI System Partition +

+

+ On EFI based systems, the bootloaders are installed in a + special FAT32 partition called an EFI System Partition (ESP). If + your system supports EFI, and a recent version of some Linux + distribution or Windows is pre-installed, it's likely that + the ESP has already been created. As the root user, list all the partitions on + your hard drive (replace sda with the device + corresponding to the appropriate hard drive): +

+
fdisk -l /dev/sda
+

+ The “Type” column of the ESP should be + EFI System. +

+

+ If the system or the hard drive is new, or it's the first + installation of a UEFI-booted OS on the system, the ESP may + not exist. In that case, install dosfstools-4.2 + first. Then create a new partition, make a vfat file system on it, and set the + partition type to “EFI system.” See the instructions for + the emergency boot device above as a reference. +

+
+

+ Warning +

+

+ Some (old) UEFI implementations may require the ESP to be + the first partition on the disk. +

+
+

+ Now, as the root user, create + the mount point for the ESP, and mount it (replace + sda1 with the + device node corresponding to the ESP): +

+
mount --mkdir -v -t vfat /dev/sda1 -o codepage=437,iocharset=iso8859-1 \
+      /boot/efi
+

+ If you want to mount the ESP automatically during system + boot, as the root user, add + an entry for the ESP into /etc/fstab: +

+
cat >> /etc/fstab << EOF
+/dev/sda1 /boot/efi vfat codepage=437,iocharset=iso8859-1 0 1
+EOF
+
+
+

+ Minimal Boot Configuration with GRUB and EFI +

+

+ On UEFI based systems, GRUB works by installing an EFI + application (a special kind of executable) into the ESP. The + EFI firmware will search boot loaders in EFI applications + from boot entries recorded in EFI variables, and additionally + a hardcoded path EFI/BOOT/BOOTX64.EFI. Normally, a boot + loader should be installed into a custom path and the path + should be recorded in the EFI variables. The use of the + hardcoded path should be avoided if possible. However, in + some cases we have to use the hardcoded path: +

+
+
    +
  • +

    + The system is not booted with EFI yet, making EFI + variables inaccessible. +

    +
  • +
  • +

    + The EFI firmware is 64-bit but the LFS system is + 32-bit, making EFI variables inaccessible because the + kernel cannot invoke EFI runtime services with a + different virtual address length. +

    +
  • +
  • +

    + LFS is built for a Live USB, so we cannot rely on EFI + variables, which are stored in NVRAM or EEPROM on the + local machine. +

    +
  • +
  • +

    + You are unable or unwilling to install the efibootmgr for manipulating boot + entries in EFI variables. +

    +
  • +
+
+

+ In these cases, follow these instructions to install the GRUB + EFI application into the hardcoded path and make a minimal + boot configuration. Otherwise it's better to skip ahead and + set up the boot configuration normally. +

+

+ To install GRUB with the EFI application in the hardcoded + path EFI/BOOT/BOOTX64.EFI, + first ensure the boot partition is mounted at /boot and the ESP is mounted at + /boot/efi. Then, as the + root user, run the command: +

+
+

+ Note +

+

+ This command will overwrite /boot/efi/EFI/BOOT/BOOTX64.EFI. It may + break a bootloader already installed there. Back it up if + you are not sure. +

+
+
grub-install --target=x86_64-efi --removable
+

+ This command will install the GRUB EFI application into the + hardcoded path /boot/efi/EFI/BOOT/BOOTX64.EFI, so the EFI + firmware can find and load it. The remaining GRUB files are + installed in the /boot/grub + directory and will be loaded by BOOTX64.EFI during system boot. +

+
+

+ Note +

+

+ The EFI firmware usually prefers the EFI applications with + a path stored in EFI variables to the EFI application at + the hardcoded path. So you may need to invoke the boot + selection menu or firmware setting interface to select the + newly installed GRUB manually on the next boot. Read the + manual of your motherboard or laptop to learn how. +

+
+

+ If you've followed the instructions in this section and set + up a minimal boot configuration, now skip ahead to + “Creating the GRUB + Configuration File.” +

+
+
+

+ Mount the EFI Variable File System +

+

+ The installation of GRUB on a UEFI platform requires that the + EFI Variable file system, efivarfs, is mounted. As the root user, mount it if it's not already + mounted: +

+
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
+

+ Now add an entry for the efivarfs in /etc/fstab so it will be mounted + automatically during system boot: +

+
cat >> /etc/fstab << EOF
+efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0
+EOF
+
+

+ 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 or using a minimal boot + configuration created as above, then mount efivarfs and continue. +

+
+
+
+

+ 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) so it will not use much space in the + ESP. A typical ESP size is 100 MB (for Windows boot manager, + which uses about 50 MB in the ESP). Once grubx64.efi has been loaded by the + firmware, it will load GRUB modules from the boot partition. + The default location is /boot/grub. +

+

+ As the root user, install the + GRUB files into /boot/efi/EFI/LFS/grubx64.efi and + /boot/grub. Then set up the + boot entry in the EFI variables: +

+
grub-install --bootloader-id=LFS --recheck
+

+ If the installation is successful, the output should be: +

+
Installing for x86_64-efi platform.
+Installation finished. No error reported.
+

+ Issue the efibootmgr | cut -f + 1 command to recheck the EFI boot + configuration. An example of the output is: +

+
BootCurrent: 0000
+Timeout: 1 seconds
+BootOrder: 0005,0000,0002,0001,0003,0004
+Boot0000* ARCH
+Boot0001* UEFI:CD/DVD Drive
+Boot0002* Windows Boot Manager
+Boot0003* UEFI:Removable Device
+Boot0004* UEFI:Network Device
+Boot0005* LFS
+

+ Note that 0005 is the first in + the BootOrder, and Boot0005 is LFS. This means that on the next boot, the + version of GRUB installed by LFS will be used to boot the + system. +

+
+
+

+ 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)
+
+insmod efi_gop
+insmod efi_uga
+if loadfont /boot/grub/fonts/unicode.pf2; then
+  terminal_output gfxterm
+fi
+
+menuentry "GNU/Linux, Linux 6.16.1-lfs-12.4" {
+  linux   /boot/vmlinuz-6.16.1-lfs-12.4 root=/dev/sda2 ro
+}
+
+menuentry "Firmware Setup" {
+  fwsetup
+}
+EOF
+

+ Refer to the LFS + book for the basic knowledge about the grub.cfg file. (hd0,2), sda2, + and 6.16.1-lfs-12.4 must match + your configuration. +

+

+ The insmod + efi_gop and insmod efi_uga directives + load two modules for EFI-based video support. On most systems + the efi_gop module is enough. + The efi_uga module is only + useful for legacy systems, but it's harmless to load it + anyway. The video support is needed for the terminal_output gfxterm + directive to really work. +

+

+ The terminal_output + gfxterm directive changes the display + resolution of the GRUB menu to match your display device. It + will break the rendering if the unicode.pf2 font data file is not loaded, + so it's guarded by a if directive. +

+
+

+ Note +

+

+ From GRUB's perspective, the files are relative to the + partitions used. If you used a separate /boot partition, + remove /boot from the above paths (to kernel and to + unicode.pf2). You will also + need to change the "set root" line to point to the boot + partition. +

+
+

+ The Firmware Setup entry can be + used to enter the configuration interface provided by the + firmware (sometimes called “BIOS configuration”). +

+
+
+

+ Dual-booting with Windows +

+

+ Add a menu entry for Windows into grub.cfg: +

+
cat >> /boot/grub/grub.cfg << EOF
+# Begin Windows addition
+
+menuentry "Windows 11" {
+  insmod fat
+  insmod chain
+  set root=(hd0,1)
+  chainloader /EFI/Microsoft/Boot/bootmgfw.efi
+}
+EOF
+

+ (hd0,1) should be replaced with + the GRUB designated name for the ESP. The chainloader directive can be used to tell + GRUB to run another EFI executable, in this case the Windows + Boot Manager. You may put more usable tools in EFI executable + format (for example, an EFI shell) into the ESP and create + GRUB entries for them, as well. +

+
+
+
+
+
+
+

+ Chapter 6. Text 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.17 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Bluefish Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ enchant-2.8.12 (for spell checking), + Gucharmap-16.0.2, and Jing +

+
+
+

+ Installation of Bluefish +

+

+ First, disable a plugin requiring functions removed in + libxml-2.13.0 or later: +

+
sed '/infbrowser/d' -i src/Makefile.am &&
+autoreconf
+

+ Install Bluefish by running + the following commands: +

+
./configure --prefix=/usr --docdir=/usr/share/doc/bluefish-2.2.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/icon-theme.cache + and /usr/share/applications/mimeinfo.cache. + To perform the update you must have desktop-file-utils-0.28 (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.17, and + /usr/share/xml/bluefish +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ bluefish +

+
+

+ is a GTK+ text + editor for markup and programming +

+
+
+
+
+
+
+
+

+ Ed-1.22.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/ed/ed-1.22.2.tar.lz +

    +
  • +
  • +

    + Download MD5 sum: 6a181e2fbc6a920aa72c471e8b431bd9 +

    +
  • +
  • +

    + Download size: 72 KB +

    +
  • +
  • +

    + Estimated disk space required: 1.0 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+

+ Ed + Dependencies +

+
+ Required to uncompress the tarball +
+

+ libarchive-3.8.1 (for bsdtar) +

+
+
+

+ Installation of Ed +

+

+ Install Ed by running the + following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Emacs-30.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/emacs/emacs-30.2.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 0adba4843ac864ba8c3c9b2a7deea176 +

    +
  • +
  • +

    + Download size: 53 MB +

    +
  • +
  • +

    + Estimated disk space required: 556 MB +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU (Using parallelism=4) +

    +
  • +
+
+

+ Emacs Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ a graphical + environment, alsa-lib-1.2.14, Cairo-1.18.4, dbus-1.16.2, + GLib-2.84.4 (with GObject Introspection), + gsettings-desktop-schemas-48.0, + GPM-1.20.7, GTK-3.24.50, ImageMagick-7.1.2-1, Little + CMS-2.17, libjpeg-turbo-3.0.1, libpng-1.6.50, librsvg-2.61.0, + libseccomp-2.6.0, libwebp-1.6.0, + libxml2-2.14.5, MIT Kerberos + V5-1.22.1, SQLite-3.50.4, Valgrind-3.25.1, + 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 +

+
+
+

+ Installation of Emacs +

+

+ 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/30.2 &&
+rm -vf /usr/lib/systemd/user/emacs.service
+
+

+ 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-3.24.50 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.2-1 and wish to + link against it. +

+

+ --with-gif=no: Use this if you + have not installed giflib-5.2.2 or libungif. +

+

+ --with-tiff=no: Use this if you + have not installed libtiff-4.7.0. +

+

+ --with-gnutls=no: Use this if you + have not installed GnuTLS-3.8.10. +

+

+ --without-harfbuzz: Use this if + you have not installed harfBuzz-11.4.1. +

+

+ --with-json=no: Use this if you + have not installed jansson-2.14.1. +

+

+ --with-kerberos5: Use this option + if you have installed MIT Kerberos V5-1.22.1 and need + to use it for authentication in Emacs' built-in email client. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ctags, ebrowse, emacs (symlink), + emacs-30.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 +

+
+
+
+
+
+
+
+

+ Gedit-48.1 +

+
+
+
+
+
+

+ Introduction to Gedit +

+

+ The Gedit package contains a + lightweight UTF-8 text editor for the GNOME Desktop. It needs a group of + packages to be installed before Gedit itself. This page will install all + of them. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+

+ Gedit requires several + libraries: +

+
+ +
+

+ Gedit Dependencies +

+
+ Required +
+

+ gsettings-desktop-schemas-48.0, + GTK-3.24.50, itstool-2.0.7, libhandy-1.8.3, libpeas-1.36.0, and + libxml2-2.14.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for documentation), + Vala-0.56.18, Valgrind-3.25.1, and + zeitgeist +

+
+
+

+ Installation of Gedit +

+

+ The first task is to install the needed libraries. Since all + the packages have the same build instructions, they can be + built in one go using a loop. +

+
+

+ 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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
+
+

+ All of the packages come with a test suite. If you wish to + execute them, either comment out the rm -rf ... below, so that, + after all the packages are installed, you can come back to + the corresponding directory and run ninja test, or do + individual builds, running the tests for each of the + packages. Alternatively, you can uncomment the line + #ninja test + ..., and at the end, check the test results + with: +

+
grep -A5 Ok: *test.log
+

+ Libgedit-amtk's + test-action-map test is known to fail. +

+

+ First, start a subshell that will exit on error: +

+
bash -e
+

+ The order of builds is important. Install Gedit dependencies by running the + following commands: +

+
for package in \
+   libgedit-amtk-5.9.1.tar.bz2            \
+   libgedit-gtksourceview-299.5.0.tar.bz2 \
+   libgedit-gfls-0.3.0.tar.bz2            \
+   libgedit-tepl-6.13.0.tar.bz2
+do
+  packagedir=${package%.tar*}
+
+  echo "Building $packagedir"
+  tar -xf ../$package
+  pushd $packagedir
+    cd build
+
+    meson setup ..            \
+          --prefix=/usr       \
+          --buildtype=release \
+          -D gtk_doc=false
+    ninja
+
+    #ninja test 2>&1 | tee ../../$packagedir-test.log
+
+    as_root ninja install
+  popd
+
+  rm -rf $packagedir
+done
+

+ Finally, exit the shell that was started earlier: +

+
exit
+

+ Now install gedit itself by + running the following commands: +

+
cd build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gtk_doc=false    &&
+ninja
+

+ To test the results, run 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. +

+

+ -D gtk_doc=false: + This switch disables generating the API documentation. Omit + this switch if you have GTK-Doc-1.34.0 installed and wish + to generate the API documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + gedit +
+
+ Installed Libraries: + libgedit-48.so, libgedit-amtk-5.so, + libgedit-gfls-1.so, libgedit-gtksourceview-300.so, and + libgedit-tepl-6.so +
+
+ Installed Directories: + /usr/include/gedit-48, + /usr/include/libgedit-amtk-5, + /usr/include/libgedit-gfls-1, + /usr/include/libgedit-gtksourceview-300, + /usr/include/libgedit-tepl-6, + /usr/share/gtk-doc/html/libgedit-amtk-5.0, + /usr/share/libgedit-gtksourceview-300, and + /usr/{lib,share,share/help/*}/gedit +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gedit +

+
+

+ is a lightweight text editor integrated with the + GNOME Desktop +

+
+

+ libgedit-48.so +

+
+

+ contains all the functions used by the main + Gedit application +

+
+

+ libgedit-amtk-5.so +

+
+

+ provides a basic GTKUIManager replacement API based + on GAction +

+
+

+ libgedit-gfls-1.so +

+
+

+ provides functions for loading and saving files +

+
+

+ libgedit-gtksourceview-300.so +

+
+

+ contains convenience functions for text editing +

+
+

+ libgedit-tepl-6.so +

+
+

+ is a text editor framework for GTK text editors and IDEs +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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) +

+
+
+
+
+
+
+
+

+ kate-25.08.0 +

+
+
+
+
+
+

+ Introduction to Kate +

+

+ The Kate package contains an + advanced KF6 based graphical text editor. +

+

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

+

+ Package Information +

+
+ +
+

+ Kate + Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+
+

+ Installation of Kate +

+

+ Install Kate by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX  \
+      -D CMAKE_BUILD_TYPE=Release          \
+      -D BUILD_TESTING=OFF                 \
+      -W no-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 + $KF6_PREFIX/lib/plugins +
+
+ Installed Directories: + $KF6_PREFIX/lib/plugins/ktexteditor, + $KF6_PREFIX/lib/plugins/plasma/dataengine, + $KF6_PREFIX/share/doc/HTML/*/{kate,katepart,kwrite}, + $KF6_PREFIX/share/{kateproject,katexmltools}, and + $KF6_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 +

+
+
+
+
+
+
+
+

+ mousepad-0.6.5 +

+
+
+
+
+
+

+ Introduction to Mousepad +

+

+ Mousepad is a simple GTK + text editor for the Xfce + desktop environment. +

+

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

+

+ Package Information +

+
+ +
+

+ Mousepad Dependencies +

+
+ Required +
+

+ gtksourceview4-4.8.4 and libxfce4ui-4.20.2 +

+
+ Recommended +
+ +
+
+

+ Installation of Mousepad +

+

+ Install Mousepad by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release &&
+
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D gspell-plugin=no: Use this + option to disable building the gspell-1.14.0 plugin if you have + not installed gspell. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + mousepad +
+
+ Installed Libraries: + libmousepad.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ mousepad +

+
+

+ is a simple GTK text editor +

+
+
+
+
+
+
+
+

+ Nano-8.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.nano-editor.org/dist/v8/nano-8.6.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 3b5a70dd65ddee4bd848b620c1638526 +

    +
  • +
  • +

    + Download size: 1.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 24 MB +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU +

    +
  • +
+
+
+
+

+ Installation of Nano +

+

+ Install Nano by running the + following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --enable-utf8     \
+            --docdir=/usr/share/doc/nano-8.6 &&
+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-8.6
+
+
+

+ 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
+

+ 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-8.6 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Vim-9.1.1629 +

+
+
+
+
+
+

+ 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. To get the latest + version, go to https://github.com/vim/vim/releases. +

+
+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/vim/vim/archive/v9.1.1629/vim-9.1.1629.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 4f856c3233c1c4570bc17572e4f9e8e4 +

    +
  • +
  • +

    + Download size: 18 MB +

    +
  • +
  • +

    + Estimated disk space required: 147 MB (add 75 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (with parallelism=4; add + 14 SBU for tests) +

    +
  • +
+
+

+ Vim + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ cURL-8.15.0 (or Wget-1.25.0, required by some + tests), GPM-1.20.7, Lua-5.4.8, Ruby-3.4.5, and rsync-3.4.1 +

+
+
+

+ 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 vim 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. Or if bubblewrap-0.11.0 is installed, + it's also possible to create a lightweight container + environment where this file is hidden and run the tests in + the container. +

+
+

+ To test the results, issue: make -j1 test. Test + failures, if any, will produce the file test.log in src/testdir. The remaining tests will still + be executed. If all goes well, the log will report + ALL DONE. Some tests labelled as + “flaky” + may fail occasionally and can be ignored. The tests are known + to fail if the output is redirected to a file, and also if + they are run in a 'screen' session. +

+
+

+ Note +

+

+ If running the tests with bubblewrap-0.11.0 and /etc/vimrc hidden, use bwrap --dev-bind / / --dev-bind /dev/null + /etc/vimrc make -j1 test. +

+
+
+

+ 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-9.1.1629, making it + consistent with the location of documentation for other + packages: +

+
ln -snfv ../vim/vim91/doc /usr/share/doc/vim-9.1.1629
+

+ If you wish to + update the runtime files, issue the following command + (requires rsync-3.4.1) to download it: +

+
rsync -avzcP --exclude="/dos/" --exclude="/spell/" \
+    ftp.nluug.nl::Vim/runtime/ ./runtime/
+

+ And then install the updated runtime files and regenerate the + tags file, as the root user issue: +

+
make -C src installruntime &&
+vim -c ":helptags /usr/share/doc/vim-9.1.1629" -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/vim91/spell/. +

+

+ To find out what's new in Vim-9.1.1629 issue the following + command: +

+
:help version-9.1.1629
+

+ For additional information on setting up Vim configuration files, see The vimrc Files and + https://vim.fandom.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 +

+
+
+
+
+
+
+
+
+

+ 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.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Dash + Dependencies +

+
+ Optional +
+

+ libedit (command line + editor library) +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Tcsh-6.24.16 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://astron.com/pub/tcsh/tcsh-6.24.16.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 448f53f12544abb627c9f078373b8ff5 +

    +
  • +
  • +

    + Download size: 936 KB +

    +
  • +
  • +

    + Estimated disk space required: 11 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests) +

    +
  • +
+
+
+
+

+ Installation of Tcsh +

+

+ Install Tcsh by running the + following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install install.man &&
+
+ln -v -sf tcsh   /bin/csh &&
+ln -v -sf tcsh.1 /usr/share/man/man1/csh.1
+
+
+

+ Command Explanations +

+

+ 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: + None +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ zsh-5.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.zsh.org/pub/zsh-5.9.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 182e37ca3fe3fa6a44f69ad462c5c30e +

    +
  • +
  • +

    + Download size: 3.2 MB +

    +
  • +
  • +

    + Estimated disk space required: 48 MB (includes + documentation and tests) +

    +
  • +
  • +

    + Estimated build time: 1.6 SBU (Using parallelism=4; + includes documentation and tests) +

    +
  • +
+
+
+

+ 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 +
+

+ Valgrind-3.25.1 and yodl +

+
+
+

+ Installation of zsh +

+

+ Adapt the documentation build system for texinfo-7.0 or + later: +

+
sed -e 's/set_from_init_file/texinfo_&/' \
+    -i Doc/Makefile.in
+

+ Some programs shipped in the building system for detecting + system features use pre-C99 syntax rejected by GCC-14.1 and + later. Fix them because Zsh will be configured incorrectly + and fail to build otherwise: +

+
sed -e 's/^main/int &/'      \
+    -e 's/exit(/return(/'    \
+    -i aczsh.m4 configure.ac &&
+
+sed -e 's/test = /&(char**)/' \
+    -i configure.ac           &&
+
+autoconf
+

+ The documentation files contain references to zsh + configuration files in /etc, + but we'll use /etc/zsh to hold + these configuration files instead. The build system will + update those references if the yodl package is available, but it's out + of the scope of BLFS. As a result, we need to fix the + references manually: +

+
sed -e 's|/etc/z|/etc/zsh/z|g' \
+    -i Doc/*.*
+

+ Install zsh by running the + following commands: +

+
./configure --prefix=/usr            \
+            --sysconfdir=/etc/zsh    \
+            --enable-etcdir=/etc/zsh \
+            --enable-cap             \
+            --enable-gdbm            &&
+make                                 &&
+
+makeinfo  Doc/zsh.texi --html      -o Doc/html &&
+makeinfo  Doc/zsh.texi --plaintext -o zsh.txt  &&
+makeinfo  Doc/zsh.texi --html --no-split --no-headers -o zsh.html
+

+ If you have texlive-20250308 installed, you + can build the documentation in PDF format by issuing the + following command: +

+
texi2pdf  Doc/zsh.texi -o Doc/zsh.pdf
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install                                                    &&
+make infodir=/usr/share/info install.info                       &&
+make htmldir=/usr/share/doc/zsh-5.9/html install.html           &&
+install -v -m644 zsh.{html,txt} Etc/FAQ /usr/share/doc/zsh-5.9
+

+ If you built the PDF format of the documentation, install it + by issuing the following command as the root user: +

+
install -v -m644 Doc/zsh.pdf /usr/share/doc/zsh-5.9
+
+
+

+ 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. +

+

+ --enable-gdbm: This + option enables the use of the GDBM library. +

+
+
+

+ 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.9/functions/zsh-newuser-install + -f. +

+

+ There are several built-in advanced prompts. In the + zsh shell, + start advanced prompt support with autoload -U promptinit, + then promptinit. Available + prompt names are listed with prompt -l. Select a + particular one with prompt + <prompt-name>. + Display all available prompts with prompt -p. Except for the + list and display commands above, you can insert the other + ones in ~/.zshrc to be + automatically executed when the shell starts, 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.9 (hardlinked to each + other) +
+
+ Installed Libraries: + Numerous plugin helper modules + under /usr/lib/zsh/5.9/ +
+
+ Installed Directories: + /usr/{lib,share}/zsh and + /usr/share/doc/zsh-5.9 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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-10.0.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://download.qemu.org/qemu-10.0.3.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 4a244f485c9d7ac3d40f958f13eae298 +

    +
  • +
  • +

    + Download size: 129 MB +

    +
  • +
  • +

    + Estimated disk space required: 2.4 GB (490 MB + installed) +

    +
  • +
  • +

    + Estimated build time: 1.3 SBU (add 0.8 SBU for tests, + both using parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ Qemu + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and Pixman-0.46.4 +

+
+ Recommended +
+ +
+

+ Note +

+

+ If dtc-1.7.2 is not installed, the building + system will attempt to download a copy of dtc source code + from the Internet. +

+
+
+ Optional +
+

+ pipewire-1.4.7 or PulseAudio-17.0 + (can be used instead of alsa-lib), BlueZ-5.83, cURL-8.15.0, Cyrus + SASL-2.1.28, Fuse-3.17.4, GnuTLS-3.8.10, GTK-3.24.50, keyutils-1.6.3, libaio-0.3.113, + libusb-1.0.29, libgcrypt-1.11.2, + libjpeg-turbo-3.0.1, libseccomp-2.6.0, libssh2-1.11.1, + libpng-1.6.50, libtasn1-4.20.0, + Linux-PAM-1.7.1, LZO-2.10, Nettle-3.10.2, Mesa-25.1.8, + VTE-0.80.3, capstone, ceph, + daxctl, + JACK, + glusterfs, + libbpf, libcacard, + libcap-ng, + libdw, libiscsi, + libnfs, libpmem, + libssh, + libu2f-emu, + lzfse, netmap, + numactl, rdma-core, + SELinux, + snappy, spice, + usbredir, + and VDE +

+
+ Optional (Runtime) +
+

+ elogind-255.17 +

+
+ Optional (for building the + documentation) +
+

+ sphinx_rtd_theme-3.0.2 +

+
+

+ Note +

+

+ This optional dependencies list is not comprehensive. See + the output of ./configure + --help for a more complete list. +

+
+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/qemu +

+
+
+

+ KVM Prerequisites +

+

+ Before building qemu, check + to see if your processor supports Virtualization Technology + (VT): +

+
grep -E '^flags.*(vmx|svm)' /proc/cpuinfo
+

+ If you get any output, you have VT technology (vmx for Intel + processors and svm for AMD processors). You then need to go + into your system BIOS and ensure it is enabled. After + enabling, reboot back to your LFS instance. +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
[*] Virtualization --->                                         [VIRTUALIZATION]
+  <*/M>   Kernel-based Virtual Machine (KVM) support                       [KVM]
+  # Enable the option for your CPU:
+  < /*/M>   KVM for Intel (and compatible) processors support        [KVM_INTEL]
+  < /*/M> KVM for AMD processors support                               [KVM_AMD]
+

+ The Intel or AMD settings are not both required, but the one + matching your system processor is required. +

+

+ To use the “bridge” network device, as explained + below, check that bridge-utils-1.7.1 is installed and + the following options in the kernel configuration are + enabled: +

+
[*] Networking support --->                                                [NET]
+  Networking options --->
+    <*/M> 802.1d Ethernet Bridging                                      [BRIDGE]
+
+Device Drivers --->
+  [*] Network device support --->                                   [NETDEVICES]
+    [*]   Network core driver support                                 [NET_CORE]
+    <*/M>   Universal TUN/TAP device driver support                        [TUN]
+
+
+

+ Installation of qemu +

+

+ The udev rule of LFS only allows the root user, the users owning a local login + session supported by the optional runtime dependency + elogind-255.17 , or the users in + the kvm group to use the KVM + device. As the root user, add + any non-root users that might + use the KVM device either without elogind-255.17 installed or + remotely (via a SSH connection) to the kvm group: +

+
usermod -a -G kvm <username>
+

+ Fix an incompatibility with pip-25.2 and later: +

+
patch -Np1 -i ../qemu-10.0.3-python_fixes-1.patch
+

+ 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    \
+             --disable-pa             \
+             --enable-slirp           \
+             --docdir=/usr/share/doc/qemu-10.0.3 &&
+
+unset QEMU_ARCH &&
+
+make
+

+ qemu uses ninja as a subprocess when + building. To run the tests, issue: ninja test. Three tests are + known to fail due to some indent change in the shell output + message with bash-5.3 or newer. +

+

+ Now, as the root user: +

+
make install
+

+ Change the permissions and ownership of a helper script, + which is needed when using the “bridge” network + device (see below). Again as the root user, issue: +

+
+

+ Note +

+

+ You need to add any users who might use the “bridge” network + device into the kvm group + even if elogind-255.17 + is installed. +

+
+
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 (as the + root user): +

+
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. +

+

+ --disable-pa: even if + pa is not in + --audio-drv-list + list, the pulseaudio driver is built, unless disabled by this + parameter. +

+

+ --enable-slirp: This + switch forces the build system to check for libslirp-4.9.1. + Remove it if you don't need the -netdev + user support. +

+

+ --audio-drv-list=pa + --disable-alsa: This switch sets the audio driver to + pulseaudio. For other drivers see the --audio-drv-list + choices in the output of ./configure --help. The + default audio driver is OSS. To enable support for both alsa + and pulseaudio, use --audio-drv-list=alsa,pa. +

+
+
+

+ 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 make decisions 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 section, we show + basic ways of performing those steps. However, qemu is much + more powerful than this, and it is strongly advised to read + the qemu documentation in /usr/share/doc/qemu-10.0.3/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 these notations in + the following text. +

+
+
+

+ Note +

+

+ The following instructions assume the optional symbolic + link, qemu, has been created. + Additionally, qemu should be run in a + graphical environment. It is also possible to use qemu + “headless” or through SSH. See the + documentation for the various possibilities. +

+
+

+ 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), and + 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 4GB. 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 formatted file to use as a cdrom. Here we use + a grub rescue disk, which may become handy if something goes + wrong at boot time. +

+

+ -boot + order=c,once=d,menu=on: defines the boot order + for the virtual BIOS. +

+

+ -net + nic,netdev=<netid>: defines a network card + connected to the network device with id <netid>. +

+

+ -netdev + user,id=<netid>: defines the network + “user” + device. This is a virtual local network with addresses + 10.0.2.0/24, where the host has address 10.0.2.2 and acts as + a gateway to internet, and with a name server at address + 10.0.2.3, and an smb server at address 10.0.2.4. A builtin + DHCP server can allocate addresses between 10.0.2.15 and + 10.0.2.31. +

+

+ -soundhw + <model>: defines the soundcard model. The + list may be obtained with -soundhw + help. +

+

+ -vga <type>: + defines the type of VGA card to emulate. For -vga std, if you are building a + Linux kernel for the guest, it's recommended to enable + CONFIG_DRM_BOCHS (as a part of + the kernel or a kernel module) to drive all the features of + the emulated VGA card, and CONFIG_FB to display the Linux console on it. + The other <type> values are + not tested by the editors and may require additional + dependencies. +

+

+ -serial mon:stdio: + sends the serial port of the guest (/dev/ttyS0 on linux guests), multiplexed + with the qemu monitor, to the standard input and output of + the qemu process. +

+

+ -name <name>: + sets the name of the guest. This name is displayed in the + guest window caption. It may be useful if you run several + guests at the same time. +

+

+ -drive + if=pflash,format=raw,readonly=on,file=/usr/share/qemu/edk2-x86_64-code.fd: + Load a pre-built EDK2 UEFI firmware, instead of the default + PC BIOS. Use this option if you want to boot the guest OS + with UEFI. +

+

+ -drive + file=<filename>,if=virtio: provides a Virtio + interface to the guest kernel for accessing the disk image, + instead of simulating a real disk hardware. This can improve + disk I/O performance, but it requires a Virtio driver in + guest kernel. Use it instead of a plain -drive if the guest kernel supports Virtio. + To build a Linux kernel with Virtio support for the guest, + use make defconfig && + make kvm_guest.config to create an initial + kernel configuration with the Virtio drives enabled, then + make your customization. And, if the guest kernel is Linux, + the virtual disks using Virtio interface will be named + vdx in the devtmpfs, instead of + sdx. +

+

+ -net + nic,netdev=net0,model=virtio-net-pci: provides a + Virtio interface to the guest kernel for accessing the + network interface, instead of simulating a real network + interface card. This can improve network I/O performance, but + it requires a Virtio driver in guest kernel. Use it instead + of a plain -net if the guest + kernel supports Virtio. +

+

+ Controlling the Emulated Display +

+

+ To set the resolution of the emulated display for a Xorg + server running in the guest Linux system, read the section called “Fine + Tuning Display Settings”. +

+

+ Networking +

+

+ The above solution for networking allows the guest to access + the local network through the host (and possibly to access + internet through the local routers), but the converse is not + true. Not even the host can access the guest, unless port + forwarding is enabled. And in the case several guests are + running, they cannot communicate with each other. Other + network devices can be used for this purpose. For example, + there is the “socket” device, which allows several + guests to share a common virtual network. In the following + section, we describe in more details how to set up the + “bridge” device, which allows the guests + to appear as if connected to the local network. All the + commands below should be run as the root user. +

+

+ Set up bridging with bridge-utils-1.7.1. Only the + physical interface(s) should be set up at boot. The virtual + interface(s) will be added as needed when qemu is started. +

+

+ Set up a required configuration file: +

+
install -vdm 755 /etc/qemu &&
+echo allow br0 > /etc/qemu/bridge.conf
+

+ In the qemu command line above, replace the switch -netdev user,... with + -netdev bridge,.... +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + elf2dmp, qemu (symlink), qemu-edid, + qemu-ga, qemu-img, qemu-io, qemu-keymap, qemu-nbd, + qemu-pr-helper, qemu-storage-daemon, + qemu-system-<arch>, and qemu-vmsr-helper +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/qemu and + /usr/share/doc/qemu-10.0.3 (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 a user to modify disk images using the QEMU + Monitor Protocol (QMP) without running a VM +

+
+

+ qemu-system-x86_64 +

+
+

+ is the QEMU PC System emulator +

+
+

+ qemu-vmsr-helper +

+
+

+ is a virtual RAPL MSR helper for qemu +

+
+
+
+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ Abseil-cpp-20250814.0 +

+
+
+
+
+
+

+ Introduction to Abseil-cpp +

+

+ The Abseil-cpp package + contains a series of libraries designed to augment the C++ + standard library. +

+

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

+

+ Package Information +

+
+ +
+

+ Abseil-cpp Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of Abseil-cpp +

+

+ Install Abseil-cpp by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D ABSL_PROPAGATE_CXX_STD=ON \
+      -D BUILD_SHARED_LIBS=ON      \
+      -G Ninja ..                  &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + ABSL_PROPAGATE_CXX_STD=ON: This parameter enables + propagating C++ features to targets that link to this + package's libraries. +

+

+ -D + BUILD_SHARED_LIBS=ON: This parameter builds + shared versions of the libraries provided by this package + instead of static libraries. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libabsl_bad_any_cast_impl.so, + libabsl_bad_optional_access.so, + libabsl_bad_variant_access.so, libabsl_base.so, + libabsl_city.so, libabsl_civil_time.so, + libabsl_cord_internal.so, libabsl_cord.so, + libabsl_cordz_functions.so, libabsl_cordz_handle.so, + libabsl_cordz_info.so, libabsl_cordz_sample_token.so, + libabsl_crc32c.so, libabsl_crc_cord_state.so, + libabsl_crc_cpu_detect.so, libabsl_crc_internal.so, + libabsl_debugging_internal.so, + libabsl_decode_rust_punycode.so, + libabsl_demangle_internal.so, libabsl_demangle_rust.so, + libabsl_die_if_null.so, libabsl_examine_stack.so, + libabsl_exponential_biased.so, + libabsl_failure_signal_handler.so, + libabsl_flags_commandlineflag_internal.so, + libabsl_flags_commandlineflag.so, + libabsl_flags_config.so, libabsl_flags_internal.so, + libabsl_flags_marshalling.so, libabsl_flags_parse.so, + libabsl_flags_private_handle_accessor.so, + libabsl_flags_program_name.so, + libabsl_flags_reflection.so, + libabsl_flags_usage_internal.so, libabsl_flags_usage.so, + libabsl_graphcycles_internal.so, libabsl_hash.so, + libabsl_hashtablez_sampler.so, libabsl_int128.so, + libabsl_kernel_timeout_internal.so, + libabsl_leak_check.so, libabsl_log_entry.so, + libabsl_log_flags.so, libabsl_log_globals.so, + libabsl_log_initalize.so, + libabsl_log_internal_check_op.so, + libabsl_log_internal_conditions.so, + libabsl_log_internal_fnmatch.so, + libabsl_log_internal_format.so, + libabsl_log_internal_globals.so, + libabsl_log_internal_log_sink_set.so, + libabsl_log_internal_message.so, + libabsl_log_internal_nullguard.so, + libabsl_log_internal_proto.so, libabsl_log_severity.so, + libabsl_log_sink.so, libabsl_low_level_hash.so, + libabsl_malloc_internal.so, libabsl_periodic_sampler.so, + libabsl_poison.so, libabsl_random_distributions.so, + libabsl_random_internal_distribution_test_util.so, + libabsl_random_internal_platform.so, + libabsl_random_internal_pool_urbg.so, + libabsl_random_internal_randen_hwaes_impl.so, + libabsl_random_internal_randen_hwaes.so, + libabsl_random_internal_randen_slow.so, + libabsl_random_internal_randen.so, + libabsl_random_internal_seed_material.so, + libabsl_random_seed_gen_exception.so, + libabsl_random_seed_sequences.so, + libabsl_raw_hash_set.so, libabsl_raw_logging_internal.so, + libabsl_scoped_set_env.so, libabsl_spinlock_wait.so, + libabsl_stacktrace.so, libabsl_statusor.so, + libabsl_status.so, libabsl_strerror.so, + libabsl_str_format_internal.so, + libabsl_strings_internal.so, libabsl_strings.so, + libabsl_string_view.so, libabsl_symbolize.so, + libabsl_synchronization.so, libabsl_throw_delegate.so, + libabsl_time.so, libabsl_time_zone.so, + libabsl_utf8_for_code_point.so, and + libabsl_vlog_config_internal.so +
+
+ Installed Directories: + /usr/include/absl, + /usr/lib/cmake/absl +
+
+
+
+
+
+
+
+

+ AppStream-1.0.6 +

+
+
+
+
+
+

+ Introduction to AppStream +

+

+ The AppStream package + contains a library and tool that is useful for retrieving + software metadata and making it easily accessible to programs + which need it. +

+

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

+

+ Package Information +

+
+ +
+

+ AppStream Dependencies +

+
+ Required +
+

+ cURL-8.15.0, elogind-255.17, itstool-2.0.7, + libxml2-2.14.5, libxmlb-0.3.23, + libxslt-1.1.43, and libyaml-0.2.5 +

+
+ Optional +
+

+ Gi-DocGen-2025.4, Qt-6.9.2, DAPS, and + libstemmer +

+
+
+

+ Installation of AppStream +

+

+ Install AppStream by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D apidocs=false    \
+            -D stemming=false   .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install &&
+mv -v /usr/share/doc/appstream{,-1.0.6}
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D apidocs=false: + This switch disables building the API documentation. Remove + it if you have Gi-DocGen-2025.4 installed and wish to + regenerate the API documentation. When the API documentation + is not regenerated, a pre-built copy is installed anyway. +

+

+ -D stemming=false: + This switch disables stemming support. Remove this switch if + you have libstemmer + installed and want faster searches. +

+

+ -D qt=true: Use this option if + you have Qt-6.9.2 installed and you want to build + support for Qt6 applications into this package. +

+
+
+

+ Configuring AppStream +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /usr/share/metainfo/org.linuxfromscratch.lfs.xml +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ AppStream expects an + operating system metainfo file describing the GNU/Linux + distribution. As the root + user, create the file describing LFS: +

+
install -vdm755 /usr/share/metainfo &&
+cat > /usr/share/metainfo/org.linuxfromscratch.lfs.xml << EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="operating-system">
+  <id>org.linuxfromscratch.lfs</id>
+  <name>Linux From Scratch</name>
+  <summary>A customized Linux system built entirely from source</summary>
+  <description>
+    <p>
+      Linux From Scratch (LFS) is a project that provides you with
+      step-by-step instructions for building your own customized Linux
+      system entirely from source.
+    </p>
+  </description>
+  <url type="homepage">https://www.linuxfromscratch.org/lfs/</url>
+  <metadata_license>MIT</metadata_license>
+  <developer id='linuxfromscratch.org'>
+    <name>The Linux From Scratch Editors</name>
+  </developer>
+
+  <releases>
+    <release version="12.4" type="release" date="2025-09-01">
+      <description>
+        <p>Now contains Binutils 2.45, GCC-15.2.0, Glibc-2.42,
+        Linux kernel 6.16, and twelve security updates.</p>
+      </description>
+    </release>
+
+    <release version="12.3" type="stable" date="2025-03-05">
+      <description>
+        <p>Now contains Binutils 2.44, GCC-14.2.0, Glibc-2.41, and
+        Linux Kernel 6.13, and three security updates.</p>
+      </description>
+    </release>
+  </releases>
+</component>
+EOF
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + appstreamcli +
+
+ Installed Libraries: + libappstream.so and + libAppStreamQt.so (if Qt6 support is enabled) +
+
+ Installed Directories: + /usr/include/appstream, + /usr/include/AppStreamQt (if Qt6 support is enabled), + /usr/lib/cmake/AppStreamQt (if Qt6 support is enabled), + /usr/share/doc/appstream-1.0.6, and + /usr/share/installed-tests/appstream +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ appstreamcli +

+
+

+ queries information from AppStream metadata and + from the AppStream component index +

+
+

+ libappstream.so +

+
+

+ contains functions that handle AppStream metadata + queries and request information from the AppStream + component index +

+
+

+ libAppStreamQt.so +

+
+

+ contains functions that allow Qt6 applications to + handle AppStream metadata queries and allows them + to request information from the AppStream component + index +

+
+
+
+
+
+
+
+

+ appstream-glib-0.8.3 +

+
+
+
+
+
+

+ Introduction to appstream-glib +

+

+ The appstream-glib provides + GObjects and helper methods to make it easy to read and write + AppStream metadata. It also provides a simple DOM (Document + Object Model) implementation that makes it easy to edit nodes + and convert to and from the standardized XML representation. +

+

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

+

+ Package Information +

+
+ +
+

+ appstream-glib Dependencies +

+
+ Required +
+

+ cURL-8.15.0, gdk-pixbuf-2.42.12, GTK-3.24.50, and + libarchive-3.8.1 +

+
+ Optional +
+

+ docbook-xml-4.5, docbook-xsl-nons-1.79.2, + GTK-Doc-1.34.0, libxslt-1.1.43, and + libyaml-0.2.5 +

+
+
+

+ Installation of appstream-glib +

+

+ Install appstream-glib by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D rpm=false        &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + appstream-builder, + appstream-compose, and appstream-util +
+
+ Installed Libraries: + libappstream-glib.so +
+
+ Installed Directories: + /usr/include/libappstream-glib, + /usr/lib/asb-plugins-5, and + /usr/share/installed-tests/appstream-glib +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ appstream-builder +

+
+

+ builds AppStream metadata +

+
+

+ appdata-compose +

+
+

+ generates AppStream metadata +

+
+

+ appstream-util +

+
+

+ Is a management tool for appstream-builder +

+
+

+ libappstream-glib.so +

+
+

+ contains the API functions +

+
+
+
+
+
+
+
+

+ Apr-1.7.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://archive.apache.org/dist/apr/apr-1.7.6.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 2ebb58910e426e5a83af97bc94cae66d +

    +
  • +
  • +

    + Download size: 879 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) +

    +
  • +
+
+
+
+

+ Installation of Apr +

+

+ 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 +

+
+
+
+
+
+
+
+

+ Apr-Util-1.6.3 +

+
+
+
+
+
+

+ 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 behavior regardless of + which libraries are available on a given platform. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://archive.apache.org/dist/apr/apr-util-1.6.3.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: b6e8c9b31d938fe5797ceb0d1ff2eb69 +

    +
  • +
  • +

    + Download size: 423 KB +

    +
  • +
  • +

    + Estimated disk space required: 7.6 MB (add 1.4 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (add 0.3 SBU + for tests) +

    +
  • +
+
+

+ Apr + Util Dependencies +

+
+ Required +
+

+ Apr-1.7.6 +

+
+ Optional +
+

+ FreeTDS, + MariaDB-11.8.3 or MySQL, OpenLDAP-2.6.10, + PostgreSQL-17.6, SQLite-3.50.4, unixODBC-2.3.12, and + Berkeley DB (deprecated) +

+
+
+

+ 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 (deprecated), use this switch to compile the + apr_dbm_db-1.so plugin. +

+

+ --with-ldap: If you have + installed OpenLDAP-2.6.10, 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 +

+
+
+
+
+
+
+
+

+ Aspell-0.60.8.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/aspell/aspell-0.60.8.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 187bd142f522ada555c7aa6b9cbf56e6 +

    +
  • +
  • +

    + Download size: 3.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 41 MB (Additional 8 MB + for EN dictionary) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU +

    +
  • +
+
+

+ Additional Downloads +

+

+ You'll need to download at least one dictionary. The English + dictionary is given as an example below. Dictionaries in many + other languages can be found at https://ftp.gnu.org/gnu/aspell/dict. +

+ +

+ Aspell Dependencies +

+
+ Required +
+

+ Which-2.23 (for the + dictionaries) +

+
+
+

+ Installation of Aspell +

+

+ First, fix a problem when building with gcc-15: +

+
sed -e 's/; i.*size)/, e = end(); i != e; ++i, ++size_)/' \
+    -i modules/speller/default/vector_hash-t.hpp
+

+ Install Aspell by running + the following commands: +

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

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install &&
+ln -svfn aspell-0.60 /usr/lib/aspell &&
+
+install -v -m755 -d /usr/share/doc/aspell-0.60.8.1/aspell{,-dev}.html &&
+
+install -v -m644 manual/aspell.html/* \
+    /usr/share/doc/aspell-0.60.8.1/aspell.html &&
+
+install -v -m644 manual/aspell-dev.html/* \
+    /usr/share/doc/aspell-0.60.8.1/aspell-dev.html
+

+ If you do not plan to install Ispell, then copy the wrapper script + ispell: +

+
install -v -m 755 scripts/ispell /usr/bin/
+

+ If you do not plan to install Spell, then copy the wrapper script + spell: +

+
install -v -m 755 scripts/spell /usr/bin/
+
+
+

+ Command Explanations +

+

+ ln -svfn aspell-0.60 + /usr/lib/aspell: This command is useful for + configuration of other applications, such as enchant-2.8.12. +

+
+
+

+ Configuring Aspell +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ After Aspell is installed, + you must set up at least one dictionary. Install the + English dictionary by running the following commands: +

+
tar xf ../aspell6-en-2020.12.07-0.tar.bz2 &&
+cd aspell6-en-2020.12.07-0                &&
+
+./configure &&
+make
+

+ Now, as the root user: +

+
make install
+

+ Other dictionaries can be installed with the same + instructions. +

+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ boost-1.89.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 + 12.4 platform. +

+
+

+ Note +

+

+ This package will extract to the boost-1.89.0/ directory. +

+
+

+ Package Information +

+
+ +
+

+ Boost Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ ICU-77.1, + NumPy-2.3.2, and Open MPI +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/boost +

+
+
+

+ Installation of Boost +

+

+ First, fix a build issue which occurs in the stacktrace + library. This issue is specific to i686 systems. +

+
case $(uname -m) in
+   i?86)
+      sed -e "s/defined(__MINGW32__)/& || defined(__i386__)/" \
+          -i ./libs/stacktrace/src/exception_headers.h ;;
+esac
+

+ This package can be built with several jobs running in + parallel. In the instructions below, all available logical + cores are used. Replace $(nproc) with the number of + logical cores you want to use if you don't want to use all. + Install Boost by running the + following commands: +

+
./bootstrap.sh --prefix=/usr --with-python=python3 &&
+./b2 stage -j$(nproc) threading=multi link=shared
+

+ To run Boost.Build's regression tests, issue pushd tools/build/test; python3 + test_all.py; popd. +

+
+

+ Note +

+

+ Boost installs many versioned directories in + /usr/lib/cmake. If a new version of Boost is installed over a previous + version, the older cmake directories need to be explicitly + removed. To do this, run as the root user: +

+
rm -rf /usr/lib/cmake/[Bb]oost*
+

+ before installing the new version. +

+
+

+ Now, as the root user: +

+
./b2 install threading=multi link=shared
+
+
+

+ 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. +

+

+ --with-python=python3: This + switch ensures Python3 is used if Python2 is installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libboost_atomic.so, + libboost_charconv.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_numpy313.so, + libboost_prg_exec_monitor.so, + libboost_process_monitor.so, libboost_program_options.so, + libboost_python313.so, libboost_random.so, + libboost_regex.so, libboost_serialization.so, + libboost_stacktrace_addr2line.so, + libboost_stacktrace_basic.so, + libboost_stacktrace_from_exception.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_url.so, + libboost_wave.so, and libboost_wserialization.so +
+
+ Installed Directory: + /usr/include/boost and + /usr/share/boost_predef +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libboost_*.so +

+
+

+ contains libraries that provide a variety of + functions, including wrappers for NumPy, linear + algebra, pseudorandom number generation, + multithreading, image processing, regular + expressions, unit testing, locales, JSON, logging, + graphing, and debugging +

+
+
+
+
+
+
+
+

+ brotli-1.1.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Brotli Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ pytest-8.4.1 (for testing Python3 + bindings) +

+
+
+

+ Installation of Brotli +

+

+ Install brotli by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..  &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+

+ If desired, build the Python3 bindings: +

+
cd .. &&
+sed "/c\/.*\.[ch]'/d;\
+     /include_dirs=\[/\
+     i libraries=['brotlicommon','brotlidec','brotlienc']," \
+    -i setup.py &&
+pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Install the Python3 bindings + as the root user: +

+
pip3 install --no-index --find-links dist --no-user Brotli
+

+ To test the Python3 binding, + issue: pytest. +

+
+
+

+ Command Explanations +

+

+ sed ... -i + setup.py: Stop setup.py from rebuilding the entire package + all over again, use the already installed libraries for the + Python3 binding instead. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + brotli +
+
+ Installed Libraries: + libbrotlicommon.so, + libbrotlidec.so, and libbrotlienc.so +
+
+ Installed Directories: + /usr/include/brotli and + /usr/lib/python3.13/site-packages/Brotli-1.1.0.dist-info + (if you built and installed the Python3 bindings) +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ CLucene Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+
+

+ Installation of CLucene +

+

+ Install CLucene by running + the following commands: +

+
patch -Np1 -i ../clucene-2.3.3.4-contribs_lib-1.patch &&
+
+sed -i '/Misc.h/a #include <ctime>' src/core/CLucene/document/DateTools.cpp &&
+
+mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D BUILD_CONTRIBS_LIB=ON            \
+      -W no-dev ..                        &&
+make
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + BUILD_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. +

+

+ -W no-dev: This + parameter silences several warnings only intended for project + developers. +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ dbus-glib-0.114 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ D-Bus GLib Dependencies +

+
+ Required +
+

+ dbus-1.16.2 and GLib-2.84.4 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Double-conversion-3.3.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Double-conversion Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of Double-conversion +

+

+ Install Double-conversion by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D BUILD_SHARED_LIBS=ON             \
+      -D BUILD_TESTING=ON                 \
+      ..                                  &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + BUILD_SHARED_LIBS=ON: This switch forces cmake to + build a shared version of the library instead of the static + version. +

+

+ -D BUILD_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 +

+
+
+
+
+
+
+
+

+ duktape-2.7.0 +

+
+
+
+
+
+

+ Introduction to duktape +

+

+ duktape is an embeddable + Javascript engine, with a focus on portability and compact + footprint. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://duktape.org/duktape-2.7.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: b3200b02ab80125b694bae887d7c1ca6 +

    +
  • +
  • +

    + Download size: 1003 KB +

    +
  • +
  • +

    + Estimated disk space required: 25 MB +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU +

    +
  • +
+
+
+
+

+ Installation of duktape +

+

+ Install duktape by running + the following commands: +

+
sed -i 's/-Os/-O2/' Makefile.sharedlibrary
+make -f Makefile.sharedlibrary INSTALL_PREFIX=/usr
+

+ Now, as the root user: +

+
make -f Makefile.sharedlibrary INSTALL_PREFIX=/usr install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libduktape.so and + libduktaped.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libduktape.so +

+
+

+ is an embeddable Javascript engine +

+
+

+ libduktaped.so +

+
+

+ is a debug version of libduktape.so +

+
+
+
+
+
+
+
+

+ enchant-2.8.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ enchant Dependencies +

+
+ Required +
+

+ Aspell-0.60.8.1, GLib-2.84.4, and Vala-0.56.18 +

+
+ Optional +
+

+ dbus-glib-0.114, Doxygen-1.14.0, + Hspell, Hunspell, Nuspell, + Voikko, and unittest-cpp + (required for tests) +

+
+
+

+ Installation of enchant +

+

+ Install enchant by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/enchant-2.8.12 &&
+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.1): +

+
cat > /tmp/test-enchant.txt << "EOF"
+Tel me more abot linux
+Ther ar so many commads
+EOF
+
+enchant-2 -d en_GB -l /tmp/test-enchant.txt &&
+enchant-2 -d en_GB -a /tmp/test-enchant.txt
+

+ You will see a list of the misspelled words followed by a + list of alternatives for them. +

+

+ See more details in the enchant manual page. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + enchant-2 and + enchant-lsmod-2 +
+
+ Installed Libraries: + libenchant-2.so +
+
+ Installed Directories: + /usr/include/enchant-2, + /usr/lib/enchant-2, /usr/share/enchant, and + /usr/share/doc/enchant-2.8.12 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Exempi-2.6.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://libopenraw.freedesktop.org/download/exempi-2.6.6.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: f955e63dbd7b91c016f802c678e0e773 +

    +
  • +
  • +

    + Download size: 2.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 319 MB (add 245 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (add 0.5 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Exempi Dependencies +

+
+ Required +
+

+ Boost-1.89.0 +

+
+ Optional +
+

+ Valgrind-3.25.1 +

+
+
+

+ Installation of Exempi +

+

+ If you intend to run the regression tests, first remove a + test that depends on a 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 +

+
+
+
+
+
+
+
+

+ fast_float-8.0.2 +

+
+
+
+
+
+

+ Introduction to Fast_float +

+

+ Fast_float provides a set of + C++ header files for efficient string to float operations. +

+

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

+

+ Package Information +

+
+ +
+

+ Fast_float Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ git-2.50.1 + (for downloading some tests) +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of Fast_float +

+

+ Install fast_float by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -G Ninja ..
+
+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: cmake .. -D FASTFLOAT_TEST=ON -D + CMAKE_POLICY_VERSION_MINIMUM=3.5 && ninja && + ninja test. Note that it'll download some + test files from the Internet, and those files would be + installed if the test suite had run before ninja install. So don't run + the test suite before installation. +

+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows testing this package with cmake-4.0 or newer. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/include/fast_float and + /usr/share/cmake/FastFloat +
+
+
+
+
+
+
+
+

+ fftw-3.3.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.fftw.org/fftw-3.3.10.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 8ccbf6a5ea78a16dbc3e1306e234cc5c +

    +
  • +
  • +

    + Download size: 4.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 59 MB +

    +
  • +
  • +

    + Estimated build time: 1.6 SBU (add 3.4 SBU for tests, + both using parallelism=4) +

    +
  • +
+
+
+
+

+ 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     \
+            --enable-avx2    &&
+make
+

+ To test the results, issue: make check. On 32-bit + systems, the tests can take substantially longer than they + would on 64-bit machines. +

+

+ Now, as the root user: +

+
make install
+

+ Now build single precision: +

+
make clean &&
+
+./configure --prefix=/usr    \
+            --enable-shared  \
+            --disable-static \
+            --enable-threads \
+            --enable-sse2    \
+            --enable-avx     \
+            --enable-avx2    \
+            --enable-float   &&
+make
+

+ As the root user: +

+
make install
+

+ Finally, build long double precision: +

+
make clean &&
+
+./configure --prefix=/usr    \
+            --enable-shared  \
+            --disable-static \
+            --enable-threads \
+            --enable-long-double &&
+make
+

+ As the root user: +

+
make install
+
+
+

+ 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-{sse2,avx,avx2}: These + enables building the optimized routines using SSE2, AVX, and + AVX2 instructions. FFTW will check if these routines can be + really used on the current CPU when the FFTW library is + loaded, so a FFTW build with these routines enabled can still + run on a CPU without SSE2, AVX, or AVX2. These options are + not compatible with --enable-long-double. +

+

+ --enable-float: This + enables building the library that uses single precision + floating point arithmetic. It is faster but less precise than + the default double precision library. The library will be + called libfftw3f.so needed by + PulseAudio-17.0. +

+

+ --enable-long-double: + This enables building the library that uses higher precision + long-double floating point arithmetic. The library will be + called libfftw3l.so. +

+

+ --enable-avx512: This enables + building the optimized routines using AVX512F instructions. + FFTW will check if these routines can be really used on the + current CPU when the FFTW library is loaded, so a FFTW build + with these routines enabled can still run on a CPU without + AVX512F. Use this option if the FFTW build will be used on a + CPU with AVX512F. This option is not compatible with + --enable-long-double. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ fmt-11.2.0 +

+
+
+
+
+
+

+ Introduction to fmt +

+

+ The fmt package is an + open-source formatting library providing a fast and safe + alternative to C stdio and C++ iostreams. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of fmt +

+

+ Install fmt by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr     \
+      -D CMAKE_INSTALL_LIBDIR=/usr/lib \
+      -D BUILD_SHARED_LIBS=ON          \
+      -D FMT_TEST=OFF                  \
+      -G Ninja ..                      &&
+ninja
+

+ If you have enabled tests, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D FMT_TEST=OFF: This + switch initializes the package tests. Set to ON if you wish + to run tests. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libfmt.so +
+
+ Installed Directories: + /usr/include/fmt and + /usr/lib/cmake/fmt +
+
+
+
+
+
+
+
+

+ GLib-2.84.4 +

+
+
+
+
+
+

+ Introduction to GLib +

+

+ The GLib package contains + low-level libraries useful for providing data structure + handling for C, portability wrappers and interfaces for + runtime functionality such as an event loop, threads, dynamic + loading and an object system. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/glib/2.84/glib-2.84.4.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 5655d0ff809b98dd77c02490609fadde +

    +
  • +
  • +

    + Download size: 5.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 203 MB (add 13 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (add 0.5 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+

+ GObject Introspection + (Recommended) +

+
+ +
+

+ Patch for Log Level Selection + (Optional) +

+ +

+ GLib + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Cairo-1.18.4 (for some GObject + Introspection tests), dbus-1.16.2 (for some tests), Fuse-3.17.4 and + bindfs (both + needed for one test), GDB-16.3 (for bindings), Gjs-1.84.2 (for some GObject + Introspection tests), GTK-Doc-1.34.0 (for GObject + Introspection documentation), docbook-xml-4.5, docbook-xsl-nons-1.79.2, + Gi-DocGen-2025.4 (to build API + documentation), glib-networking-2.80.1 + (for some tests, but this is a circular dependency), + Mako-1.3.10 and Markdown-3.8.2 (both + for g-ir-doc-tool), and + sysprof +

+
+ Additional Runtime Dependencies +
+ +
+
+

+ 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.50, output numerous + warnings when run from the command line. This patch enables + the use of an environment variable, GLIB_LOG_LEVEL, that suppresses unwanted + messages. The value of the variable is a digit that + corresponds to: +

+ + + + + + + + + + + + + + + + +
+ 1 Alert +
+ 2 Critical +
+ 3 Error +
+ 4 Warning +
+ 5 Notice +
+

+ For instance export + GLIB_LOG_LEVEL=4 will skip output of Warning + and Notice messages (and Info/Debug messages if they are + turned on). If GLIB_LOG_LEVEL is + not defined, normal message output will not be affected. +

+
patch -Np1 -i ../glib-skip_warnings-1.patch
+
+

+ 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 setup ..                  \
+      --prefix=/usr             \
+      --buildtype=release       \
+      -D introspection=disabled \
+      -D glib_debug=disabled    \
+      -D man-pages=enabled      \
+      -D sysprof=disabled       &&
+ninja
+

+ 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. +

+

+ As the root user, install + this package for the first time to allow building GObject + Introspection: +

+
ninja install
+

+ Build GObject Introspection: +

+
tar xf ../../gobject-introspection-1.84.0.tar.xz &&
+
+meson setup gobject-introspection-1.84.0 gi-build \
+            --prefix=/usr --buildtype=release     &&
+ninja -C gi-build
+

+ To test the results of GObject Introspection, issue: + ninja -C gi-build + test. +

+

+ As the root user, install + GObject Introspection for generating the introspection data + of GLib libraries (required by various packages using Glib, + especially some GNOME packages): +

+
ninja -C gi-build install
+

+ Now generate the introspection data: +

+
meson configure -D introspection=enabled &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir =/s|$| / 'glib-' + meson.project_version()|" \
+    -i ../docs/reference/meson.build                        &&
+meson configure -D documentation=true                       &&
+ninja
+
+

+ Warning +

+

+ Do not run the test suite as root or some tests will fail + unexpectedly and leave some non-FHS-compliant directories + in the /usr hierarchy. +

+
+

+ To test the results, issue: LC_ALL=C ninja test as a + non-root user. +

+

+ As the root user, install + this package again for the introspection data (and + optionally, the documentation): +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D man-pages=enabled: + This switch causes the build to create and install the + package man pages. +

+

+ -D + glib_debug=disabled: This switch causes the build + to not include some expensive checks for debugging in the + built programs and libraries. +

+

+ -D sysprof=disabled: + This switch disables the tracing support for sysprof. Remove + this option if you want the tracing support. Note that if + sysprof is not installed, removing this option will cause the + build system to download a copy of sysprof from the Internet. +

+
+
+

+ Contents +

+

+ GLib + Contents +

+
+
+
+ Installed Programs: + gapplication, gdbus, gdbus-codegen, + gi-compile-repository, gi-decompile-typelib, + gi-inspect-typelib 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, + libgirepository-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/gio, /usr/lib/glib-2.0, + /usr/share/glib-2.0, and /usr/share/doc/glib-2.84.4 + (optional) +
+
+
+

+ GObject Introspection Contents +

+
+
+
+ Installed Program: + g-ir-annotation-tool, + g-ir-compiler, g-ir-doc-tool (optional), g-ir-generate, + g-ir-inspect, and g-ir-scanner +
+
+ Installed Libraries: + libgirepository-1.0.so and + _giscanner.cpython-313-<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 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+

+ gi-compile-repository +

+
+

+ converts one or more GIR files into one or more + typelib files +

+
+

+ gi-decompile-typelib +

+
+

+ is a GIR decompiler that uses the repository API +

+
+

+ gi-inspect-typelib +

+
+

+ is a utility that gives information about a GI + typelib +

+
+

+ 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 +

+
+

+ libgio-2.0.so +

+
+

+ is a library providing useful classes for general + purpose I/O, networking, IPC, settings, and other + high level application functionality +

+
+

+ libgirepository-2.0.so +

+
+

+ is a library providing access to typelibs and + introspection data which describes C APIs +

+
+

+ libglib-2.0.so +

+
+

+ is a general-purpose, portable utility library, + which provides many useful data types, macros, type + conversions, string utilities, file utilities, a + mainloop abstraction, and so on +

+
+

+ libgmodule-2.0.so +

+
+

+ provides portable API for dynamically loading + modules +

+
+

+ libgobject-2.0.so +

+
+

+ provides the GLib base type system and object class +

+
+

+ libgthread-2.0.so +

+
+

+ is a skeleton library for backwards compatibility; + it used to be the GLib thread library but the + functionalities has been merged info libglib-2.0 +

+
+

+ g-ir-annotation-tool +

+
+

+ creates or extracts annotation data from GI + typelibs +

+
+

+ g-ir-compiler +

+
+

+ is a counterpart of gi-compile-repository + for the old libgirepository-1.0 API +

+
+

+ 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 counterpart of gi-inspect-typelib + for the old libgirepository-1.0 API +

+
+

+ g-ir-generate +

+
+

+ is a counterpart of gi-decompile-typelib + for the old libgirepository-1.0 API +

+
+

+ g-ir-scanner +

+
+

+ is a tool which generates GIR XML files by parsing + headers and introspecting GObject based libraries +

+
+

+ libgirepository-1.0.so +

+
+

+ is a counterpart of libgirepository-2.0 with the + old 1.0 API +

+
+
+
+
+
+
+
+

+ GLibmm-2.66.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GLibmm Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and libsigc++-2.12.1 +

+
+ Optional +
+

+ Doxygen-1.14.0, glib-networking-2.80.1 (for + tests), GnuTLS-3.8.10 (for tests), libxslt-1.1.43, and mm-common +

+
+
+

+ Installation of GLibmm +

+

+ Install GLibmm by running + the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ GLibmm-2.84.0 +

+
+
+
+
+
+

+ Introduction to GLibmm +

+

+ The GLibmm package is a set + of C++ bindings for GLib. + This version is part of a new API for supporting gtkmm-4. +

+

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

+

+ Package Information +

+
+ +
+

+ GLibmm Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and libsigc++-3.6.0 +

+
+ Optional +
+

+ Doxygen-1.14.0, glib-networking-2.80.1 (for + tests), GnuTLS-3.8.10 (for tests), libxslt-1.1.43, and mm-common +

+
+
+

+ Installation of GLibmm +

+

+ Install GLibmm by running + the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libgiomm-2.68.so, + libglibmm-2.68.so, and + libglibmm_generate_extra_defs-2.68.so +
+
+ Installed Directories: + /usr/lib/g{io,lib}mm-2.68 and + /usr/include/g{io,lib}mm-2.68 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libgiomm-2.68.so +

+
+

+ contains the GIO API classes +

+
+

+ libglibmm-2.68.so +

+
+

+ contains the GLib + API classes +

+
+
+
+
+
+
+
+

+ GMime-3.2.15 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GMime Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) and libgpg-error-1.55 +

+
+ Optional +
+

+ DocBook-utils-0.6.14, gpgme-2.0.0, + GTK-Doc-1.34.0, libnsl-2.0.1, Vala-0.56.18, + and Gtk# + (requires Mono) +

+
+
+

+ Installation of GMime +

+

+ Install GMime by running the + following commands: +

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

+ To test the results, issue: make check. Two tests, + test-pgp and test-pgpmime, are known to fail. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ gmmlib-22.8.1 +

+
+
+
+
+
+

+ Introduction to gmmlib +

+

+ The gmmlib package contains + the Intel Graphics Memory Management Library, which provides + device specific memory and buffer management functions for + the Intel Media Driver for VAAPI and the Intel Graphics + Computer Runtime for OpenCL (TM). +

+

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

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ On GitHub we've forked the upstream repository into our own + lfs-book namespace and + recreated a tag for the release. This is done to ensure the + downloaded tarball file name to be correct and consistent + (i.e. it shouldn't change when using the browser instead of + a tool like wget). Our tag and the + upstream release tag are on the same commit, so we've not + introduced any change to the tarball content except the + name of its top-level directory (that Git does not track). +

+
+

+ gmmlib Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of gmmlib +

+

+ Install gmmlib by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D BUILD_TYPE=Release        \
+      -G Ninja                     \
+      -W no-dev ..                 &&
+ninja
+

+ The test suite is normally run by ninja unless -D + RUN_TEST_SUITE=NO is passed to cmake. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libigdgmm.so +
+
+ Installed Directories: + /usr/include/igdgmm +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libigdgmm.so +

+
+

+ contains functions that provide Memory Management + functions for Intel Graphics Drivers +

+
+
+
+
+
+
+
+

+ gsl-2.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/gsl/gsl-2.8.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 182ec03204f164e67238c9116591a37d +

    +
  • +
  • +

    + Download size: 8.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 223 MB (with tests, + without docs) +

    +
  • +
  • +

    + Estimated build time: 1.0 SBU (Using parallelism=4; + with tests, without docs) +

    +
  • +
+
+

+ Gsl + Dependencies +

+
+ Optional +
+

+ sphinx_rtd_theme-3.0.2 +

+
+
+

+ Installation of Gsl +

+

+ Install Gsl by running the + following commands: +

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

+ If you have sphinx_rtd_theme-3.0.2 + installed, build the documentation with: +

+
make html
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the documentation, install it (as root) with: +

+
mkdir                   /usr/share/doc/gsl-2.8 &&
+cp -R doc/_build/html/* /usr/share/doc/gsl-2.8
+
+
+

+ 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.8 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gspell-1.14.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ gspell Dependencies +

+
+ Required +
+

+ enchant-2.8.12, ICU-77.1, and GTK-3.24.50 +

+
+ Optional +
+

+ GLib-2.84.4 (with GObject Introspection), + GTK-Doc-1.34.0, Vala-0.56.18, Valgrind-3.25.1, and Hunspell (for tests) +

+
+
+

+ Installation of gspell +

+

+ Install gspell by running + the following commands: +

+
mkdir gspell-build &&
+cd    gspell-build &&
+
+meson setup --prefix=/usr --buildtype=release -D gtk_doc=false .. &&
+ninja
+

+ To test the results, issue: ninja test. The tests must + be run in an X session. One test, test-checker, is known to + fail if the external package Hunspell is not installed. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D gtk_doc=false: + Prevents building the documentation. Remove this if you have + GTK-Doc installed and wish + to build the documentation. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ highway-1.3.0 +

+
+
+
+
+
+

+ Introduction to highway +

+

+ The highway package contains + a C++ library that provides portable SIMD/vector intrinsics. +

+

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

+

+ Package Information +

+
+ +
+

+ highway Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of highway +

+

+ Install highway by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_TESTING=OFF         \
+      -D BUILD_SHARED_LIBS=ON      \
+      -G Ninja ..                  &&
+ninja
+

+ This package does come with a test suite, but it requires + gtest, which is + not in BLFS. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D BUILD_TESTING=OFF: + This parameter disables the test suite from being built + because gtest is not part + of BLFS. Without this parameter, CMake will download this + package during the configuration process. If you wish to run + the tests, install gtest and then + remove this parameter. +

+

+ -D + BUILD_SHARED_LIBS=ON: This parameter enables + building shared versions of the libraries instead of static + versions. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libhwy.so, libhwy_contrib.so, and + libhwy_test.so +
+
+ Installed Directories: + /usr/include/hwy and + /usr/lib/cmake/hwy +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ libhwy.so +

+
+

+ contains functions that provide portable + SIMD/vector intrinsics +

+
+

+ libhwy_contrib.so +

+
+

+ contains several additions to Highway, including a + series of dot product, image, math, and sort + routines +

+
+

+ libhwy_test.so +

+
+

+ contains test helpers for Highway +

+
+
+
+
+
+
+
+

+ icu-77.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. +

+
+

+ Warning +

+

+ Upgrading this package to a new major version (for example, + from 72.1 to 77.1) will require rebuilding many other + packages. If some packages that use the libraries built by + icu4c-77 are rebuilt, they will use the new libraries while + current packages will use the previous libraries. If the + Linux application loader (/usr/lib/ld-linux-x86-64.so.2) determines + that both the old and new libraries are needed, and a + symbol (name of data or function) exists in both versions + of the library, all references to the symbol will be + resolved to the version appearing earlier in the + breadth-first sequence of the dependency graph. This may + result in the application failing if the definition of the + data or the behavior of the function referred by the symbol + differs between two versions. To avoid the issue, users + will need to rebuild every package linked to an ICU library + as soon as possible once ICU is updated to a new major + version. +

+

+ To determine what external libraries are needed (directly + or indirectly) by an application or a library, run: +

+
ldd <application or library> 
+

+ or to see only programs and libraries that directly use a + library: +

+
readelf -d  <application or library> | grep NEEDED
+
+

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

+

+ Package Information +

+
+ +
+

+ ICU + Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (for documentation) +

+
+
+

+ Installation of ICU +

+
+

+ Note +

+

+ This package expands to the directory icu. +

+
+

+ A part of a test cannot be run on i686. Avoid executing it when building for + that platform: +

+
case $(uname -m) in
+  i?86) sed -e "s/U_PLATFORM_IS_LINUX_BASED/__X86_64__ \&\& &/" \
+            -i source/test/intltest/ustrtest.cpp ;;
+esac
+

+ Install ICU by running the + following commands: +

+
cd source                 &&
+./configure --prefix=/usr &&
+make
+

+ To test the results, issue: make check. One test + (intltest) still fails for unknown reasons on i686 checking some thai conversions. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + derb, escapesrc, genbrk, genccode, + gencfu, gencmn, gencnval, gendict, gennorm2, genrb, + gensprep, icu-config, icuexportdata, 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 +

+
+
+
+
+
+
+
+

+ inih-61 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of inih +

+

+ Install inih by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + with_test_suite=true: Enable building the test + suite. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Libraries: + libinih.so and + libINIReader.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libinih.so +

+
+

+ is the inih main library +

+
+

+ libINIReader.so +

+
+

+ is the inih parser library +

+
+
+
+
+
+
+
+

+ Jansson-2.14.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ JSON-C-0.18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ JSON-C Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional (for documentation) +
+

+ Doxygen-1.14.0 and Graphviz-13.1.2 (for + dot tool) +

+
+
+

+ Installation of JSON-C +

+

+ First, fix building this package with CMake-4.0: +

+
sed -i 's/VERSION 2.8/VERSION 4.0/' apps/CMakeLists.txt  &&
+sed -i 's/VERSION 3.9/VERSION 4.0/' tests/CMakeLists.txt
+

+ Install JSON-C by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_STATIC_LIBS=OFF     \
+      .. &&
+make
+

+ If you have installed Doxygen-1.14.0 and Graphviz-13.1.2, you + can build the documentation by running the following command: +

+
doxygen doc/Doxyfile
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the documentation, install it by running the + following commands as the root user: +

+
install -d -vm755 /usr/share/doc/json-c-0.18 &&
+install -v -m644 doc/html/* /usr/share/doc/json-c-0.18
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_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 +

+
+
+
+
+
+
+
+

+ JSON-GLib-1.10.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ JSON-GLib Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + if building GNOME) +

+
+ Optional +
+

+ docutils-0.21.2 and Gi-DocGen-2025.4 +

+
+
+

+ Installation of JSON GLib +

+

+ Install JSON GLib by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ If docutils-0.21.2 is installed, build the + man pages: +

+
meson configure -D man=true &&
+ninja
+

+ If Gi-DocGen-2025.4 is installed, build + the API documentation: +

+
sed "/json_docdir =/s|$| / 'json-glib-1.10.6'|" -i ../doc/meson.build &&
+meson configure -D documentation=enabled &&
+ninja
+

+ To test the results, issue: ninja test. One test, node, + 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. +

+

+ -D gtk_doc=disabled: Add this + option if you have GTK-Doc-1.34.0 installed and do not wish + to generate the API documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + json-glib-format and + json-glib-validate +
+
+ Installed Library: + libjson-glib-1.0.so +
+
+ Installed Directories: + /usr/{include,libexec,share{,/installed-tests}/json-glib-1.0} + 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 +

+
+
+
+
+
+
+
+

+ keyutils-1.6.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Keyutils Dependencies +

+
+ Optional +
+

+ lsb-tools-0.12 (referred by the test + suite) +

+
+
+

+ Kernel Configuration +

+

+ If running the test suite, some tests needs the following + kernel features enabled: +

+
Security options --->
+  [*] Enable access key retention support                                 [KEYS]
+  [*]   Large payload keys                                            [BIG_KEYS]
+  [*]   Diffie-Hellman operations on retained keys           [KEY_DH_OPERATIONS]
+
+-*- Cryptographic API --->                                              [CRYPTO]
+  Public-key cryptography --->
+    <*/M> RSA (Rivest-Shamir-Adleman)                               [CRYPTO_RSA]
+  Hashes, digests, and MACs --->
+    <*/M> SHA-1                                                    [CRYPTO_SHA1]
+  [*] Asymmetric (public-key cryptographic) key type --->  [ASYMMETRIC_KEY_TYPE]
+    <*> Asymmetric public-key crypto algorithm subtype
+                                            ...  [ASYMMETRIC_PUBLIC_KEY_SUBTYPE]
+    # If not built into the kernel, [SYSTEM_TRUSTED_KEYRING] won't show up;
+    # building as a module won't work:
+    <*>   X.509 certificate parser                     [X509_CERTIFICATE_PARSER]
+  Certificates for signature checking --->
+    [*] Provide system-wide ring of trusted keys        [SYSTEM_TRUSTED_KEYRING]
+    [*]   Provide a keyring to which extra trustable keys may be added
+                                                ...  [SECONDARY_TRUSTED_KEYRING]
+    [*] Provide system-wide ring of blacklisted keys  [SYSTEM_BLACKLIST_KEYRING]
+
+
+

+ Installation of keyutils +

+

+ Install keyutils by running + the following commands: +

+
make
+

+ Now, as the root user: +

+
make NO_ARLIB=1 LIBDIR=/usr/lib BINDIR=/usr/bin SBINDIR=/usr/sbin install
+

+ The test suite can only run after installing this package. To + test the results, issue, as the root user: +

+
make -k test
+

+ If lsb-tools-0.12 is not installed, the + test suite will output some lines complaining the + lsb_release + command not available but it won't affect the test result. +

+
+
+

+ Command Explanations +

+

+ 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/keyutils, /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 +

+
+
+
+
+
+
+
+

+ libaio-0.3.113 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of libaio +

+

+ First, disable the installation of the static library: +

+
sed -i '/install.*libaio.a/s/^/#/' src/Makefile
+

+ Next, fix an issue in the test suite: +

+
case "$(uname -m)" in
+  i?86) sed -e "s/off_t/off64_t/" -i harness/cases/23.t ;;
+esac
+

+ Build libaio by running the + following command: +

+
make
+

+ To test the results, issue: make partcheck. +

+

+ Now, install the package as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libaio.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libaio.so +

+
+

+ is the libaio library +

+
+
+
+
+
+
+
+

+ libarchive-3.8.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libarchive Dependencies +

+
+ Optional +
+

+ libxml2-2.14.5, LZO-2.10, Nettle-3.10.2, and + pcre2-10.45 +

+
+
+

+ Installation of libarchive +

+

+ Install libarchive 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
+

+ Still as the root user, + create a symlink so we can use bsdunzip as unzip, instead of relying + on the unmaintained Unzip package: +

+
ln -sfv bsdunzip /usr/bin/unzip
+
+

+ Note +

+

+ As discussed in + Wrong Filename Encoding, if the Zip archive to be + extracted contains any file with a name containing any + non-Latin characters, you need to manually specify the + encoding of those characters or they will be turned into + unreadable sequences in the extracted file name. For + example, if a Zip archive created with WinZip, archive.zip, contains a file named with + Simplified Chinese characters, the encoding should be CP936 + and the -I cp936 + option should be used. I.e. the command to extract the + archive should be unzip -I + cp936 archive.zip. +

+
+
+
+

+ 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. +

+

+ --with-nettle: This switch sets + Nettle for crypto support instead of OpenSSL. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + bsdcat, bsdcpio, bsdtar, and + bsdunzip +
+
+ 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 +

+
+

+ bsdunzip +

+
+

+ is a tool similar to Info-ZIP unzip +

+
+

+ libarchive.so +

+
+

+ is a library that can create and read several + streaming archive formats +

+
+
+
+
+
+
+
+

+ libassuan-3.0.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-3.0.2.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: c6f1bf4bd2aaa79cd1635dcc070ba51a +

    +
  • +
  • +

    + Download size: 580 KB +

    +
  • +
  • +

    + Estimated disk space required: 6.5 MB (with tests, add + 3.4 MB for pdf documentation) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (with tests and html + documentation) +

    +
  • +
+
+

+ libassuan Dependencies +

+
+ Required +
+

+ libgpg-error-1.55 +

+
+ Optional +
+

+ texlive-20250308 (or install-tl-unx) +

+
+
+

+ 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-20250308 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-3.0.2/html &&
+install -v -m644 doc/assuan.html/* \
+                    /usr/share/doc/libassuan-3.0.2/html &&
+install -v -m644 doc/assuan_nochunks.html \
+                    /usr/share/doc/libassuan-3.0.2      &&
+install -v -m644 doc/assuan.{txt,texi} \
+                    /usr/share/doc/libassuan-3.0.2
+

+ 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-3.0.2
+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Library: + libassuan.so +
+
+ Installed Directory: + /usr/share/doc/libassuan-3.0.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libassuan.so +

+
+

+ is an inter process communication library which + implements the Assuan protocol +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://0pointer.de/public/libatasmart-0.19.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 53afe2b155c36f658e121fe6def33e77 +

    +
  • +
  • +

    + Download size: 248 KB +

    +
  • +
  • +

    + Estimated disk space required: 3 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libatasmart +

+
+
+

+ 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 disk tests +

+
+

+ libatasmart.so +

+
+

+ contains the ATA S.M.A.R.T API functions +

+
+
+
+
+
+
+
+

+ libatomic_ops-7.8.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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.8.2 &&
+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.8.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libatomic_ops.so +

+
+

+ contains functions for atomic memory operations +

+
+
+
+
+
+
+
+

+ libblockdev-3.3.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libblockdev Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + for GNOME) +

+
+ Recommended +
+ +
+ Optional +
+

+ btrfs-progs-6.16, GTK-Doc-1.34.0, + JSON-GLib-1.10.6, mdadm-4.4, parted-3.6, + smartmontools-7.5, volume_key, + ndctl, and targetcli (for + tests) +

+
+
+

+ Installation of libblockdev +

+

+ Install libblockdev by + running the following commands: +

+
./configure --prefix=/usr      \
+            --sysconfdir=/etc  \
+            --with-python3     \
+            --without-escrow   \
+            --without-gtk-doc  \
+            --without-lvm      \
+            --without-lvm_dbus \
+            --without-nvdimm   \
+            --without-tools    \
+            --without-smartmontools &&
+make
+

+ The test suite requires targetcli, which is not a part of BLFS. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --without-escrow: + This switch allows building libblockdev without volume_key + installed. +

+

+ --without-lvm + --without-lvm_dbus + --without-tools: The + combination of these switches allows building libblockdev without parted-3.6 installed. + Remove it if you've installed parted-3.6 and wish to build the + lvm-cache-stats + or vfat-resize + utilities, or wish libblockdev to support logical volumes. +

+

+ --without-smartmontools: This + switch allows building libblockdev without JSON-GLib-1.10.6 or smartmontools-7.5 installed. Remove + it if you have both packages installed. +

+

+ --without-btrfs --without-mdraid + --without-tools: The combination of these switches + allows building libblockdev + without libbytesize-2.11 installed. The + --without-mdraid option will + break UDisks-2.10.2, so don't use it unless you + really know what you are doing. +

+

+ --without-crypto: This switch + allows building libblockdev + without cryptsetup-2.8.1 or keyutils-1.6.3 + installed. This switch will break UDisks-2.10.2, so don't + use it unless you really know what you are doing. +

+

+ --without-dm --without-lvm + --without-lvm_dbus --without-mpath: The combination of + these switches allows building libblockdev without LVM2-2.03.34 installed. + The --without-dm and --without-mpath options are not in the + instructions provided by the book because LVM2-2.03.34 is + required for cryptsetup-2.8.1 and cryptsetup-2.8.1 is a recommended + dependency of libblockdev + anyway. +

+

+ --without-nvme: This switch + allows building libblockdev + without libnvme-1.15 installed. This switch will + break UDisks-2.10.2, so don't use it unless you + really know what you are doing. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lvm-cache-stats and vfat-resize + (both optional) +
+
+ Installed Libraries: + libbd_btrfs.so, libbd_crypto.so, + libbd_dm.so, libbd_fs.so, libbd_loop.so, libbd_lvm.so + (optional), libbd_lvm-dbus.so (optional), + libbd_mdraid.so, libbd_mpath.so, libbd_nvme.so, + libbd_part.so, libbd_swap.so, libbd_utils.so, and + libblockdev.so +
+
+ Installed Directories: + /etc/libblockdev, + /usr/include/blockdev, and + /usr/share/gtk-doc/html/libblockdev (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lvm-cache-stats +

+
+

+ prints statistics on caches on LVM Logical Volumes +

+
+

+ vfat-resize +

+
+

+ resizes vfat file + systems +

+
+
+
+
+
+
+
+

+ libbytesize-2.11 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libbytesize Dependencies +

+
+ Required +
+

+ pcre2-10.45 and Pygments-2.19.2 +

+
+ Optional +
+

+ GTK-Doc-1.34.0, pocketlint + (python module for one test), and polib (python module + for one test) +

+
+
+

+ 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 and + /usr/lib/python3.13/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 +

+
+
+
+
+
+
+
+

+ libclc-20.1.8 +

+
+
+
+
+
+

+ Introduction to libclc +

+

+ The libclc package contains + an implementation of the library requirements of the OpenCL C + programming language, as specified by the OpenCL 1.1 + Specification. +

+

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

+

+ Package Information +

+
+ +
+

+ libclc Dependencies +

+
+ Required +
+

+ SPIRV-LLVM-Translator-20.1.5 +

+
+
+

+ Installation of libclc +

+

+ Install libclc by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -G Ninja ..                  &&
+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/include/clc and + /usr/share/clc +
+
+
+
+
+
+
+
+

+ libcloudproviders-0.3.6 +

+
+
+
+
+
+

+ Introduction to libcloudproviders +

+

+ The libcloudproviders + package contains a library which provides a DBus API that + allows cloud storage sync clients to expose their services. +

+

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

+

+ Package Information +

+
+ +
+

+ libcloudproviders Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) + and Vala-0.56.18 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of libcloudproviders +

+

+ Install libcloudproviders by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D enable-gtk-doc: Use this + switch if you have GTK-Doc-1.34.0 installed and wish to + generate the API documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libcloudproviders.so +
+
+ Installed Directories: + /usr/include/cloudproviders +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libcloudproviders.so +

+
+

+ contains functions that provide a DBus API to allow + cloud storage sync clients to expose their services +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libdaemon Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 and Lynx-2.9.2 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libdisplay-info-0.3.0 +

+
+
+
+
+
+

+ Introduction to libdisplay-info +

+

+ The libdisplay-info package + provides a set of high-level and low-level functions to + access detailed Extended Display Identification Data (EDID) + information. +

+

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

+

+ Package Information +

+
+ +
+

+ libdisplay-info Dependencies +

+
+ Required +
+

+ hwdata-0.398 +

+
+
+

+ Installation of libdisplay-info +

+

+ Install libdisplay-info by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, run 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: + di-edid-decode +
+
+ Installed Library: + libdisplay-info.so +
+
+ Installed Directories: + /usr/include/libdisplay-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ di-edid-decode +

+
+

+ parses EDID file and prints information from the + file in human-readable form +

+
+

+ libdisplay-info.so +

+
+

+ is a library for handling EDID and DisplayID +

+
+
+
+
+
+
+
+

+ libgcrypt-1.11.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libgcrypt Dependencies +

+
+ Required +
+

+ libgpg-error-1.55 +

+
+ Optional +
+

+ texlive-20250308 (or install-tl-unx) +

+
+
+

+ 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
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install &&
+install -v -dm755   /usr/share/doc/libgcrypt-1.11.2 &&
+install -v -m644    README doc/{README.apichanges,fips*,libgcrypt*} \
+                    /usr/share/doc/libgcrypt-1.11.2 &&
+
+install -v -dm755   /usr/share/doc/libgcrypt-1.11.2/html &&
+install -v -m644 doc/gcrypt.html/* \
+                    /usr/share/doc/libgcrypt-1.11.2/html &&
+install -v -m644 doc/gcrypt_nochunks.html \
+                    /usr/share/doc/libgcrypt-1.11.2      &&
+install -v -m644 doc/gcrypt.{txt,texi} \
+                    /usr/share/doc/libgcrypt-1.11.2
+
+
+

+ Command Explanations +

+

+ --with-capabilities: This option + enables libcap2 support. Note that this breaks cryptsetup-2.8.1 +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + dumpsexp, hmac256, and + mpicalc +
+
+ Installed Library: + libgcrypt.so +
+
+ Installed Directory: + /usr/share/doc/libgcrypt-1.11.2 +
+
+
+
+

+ 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 +

+
+

+ mpicalc +

+
+

+ is a RPN (Reverse Polish Notation) calculator +

+
+

+ libgcrypt.so +

+
+

+ contains the cryptographic API functions +

+
+
+
+
+
+
+
+

+ libgpg-error-1.55 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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.55/README
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gpg-error, 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.55 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ gpg-error +

+
+

+ is used to determine libgpg-error error codes +

+
+

+ gpgrt-config +

+
+

+ is a pkg-config style + tool for querying the information about installed + version of libgpg-error +

+
+

+ yat2m +

+
+

+ extracts man pages from a Texinfo source +

+
+

+ libgpg-error.so +

+
+

+ contains the libgpg-error API functions +

+
+
+
+
+
+
+
+

+ libgsf-1.14.53 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libgsf Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and libxml2-2.14.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ 7zip-25.01 (for tests), GTK-Doc-1.34.0, + Valgrind-3.25.1 (for tests), and + + unzip (for tests) +

+
+
+

+ Installation of libgsf +

+

+ Install libgsf by running + the following commands: +

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

+ To test the results, issue: make check. Two tests + related to Valgrind-3.25.1 are known to fail. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ libgudev-238 +

+
+
+
+
+
+

+ Introduction to libgudev +

+

+ The libgudev package + contains GObject bindings for libudev. +

+

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

+

+ Package Information +

+
+ +
+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + for GNOME) +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and umockdev-0.19.3 (for + testing) +

+
+
+

+ Installation of libgudev +

+

+ Install libgudev by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_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 +

+
+
+
+
+
+
+
+

+ libgusb-0.4.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libgusb Dependencies +

+
+ Required +
+

+ JSON-GLib-1.10.6 and libusb-1.0.29 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 and umockdev-0.19.3 + (for full test coverage) +

+
+
+

+ Installation of libgusb +

+

+ Install libgusb by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D docs=false       &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -E "/output|install_dir/s/('libgusb)'/\1-0.4.9'/" \
+    -i ../docs/meson.build                            &&
+meson configure -D docs=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. +

+

+ -D docs=false: Allow + building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gusbcmd +
+
+ Installed Library: + libgusb.so +
+
+ Installed Directories: + /usr/include/gusb-1 and + /usr/share/doc/libgusb-0.4.9 (if gi-docgen is + used) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ gusbcmd +

+
+

+ is a debugging tool for the libgusb library +

+
+

+ libgusb.so +

+
+

+ contains the libgusb API functions +

+
+
+
+
+
+
+
+

+ libical-3.0.20 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libical Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 (for the API + documentation), Graphviz-13.1.2 (for the API + documentation), GTK-Doc-1.34.0 (for the API + documentation), ICU-77.1, PyGObject-3.52.3 (for some + tests), and + Berkeley DB (deprecated) +

+
+
+

+ Installation of libical +

+

+ Install libical by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr  \
+      -D CMAKE_BUILD_TYPE=Release   \
+      -D SHARED_ONLY=yes            \
+      -D ICAL_BUILD_DOCS=false      \
+      -D GOBJECT_INTROSPECTION=true \
+      -D ICAL_GLIB_VAPI=true        \
+      .. &&
+make -j1
+

+ If you have Doxygen-1.14.0, Graphviz-13.1.2, and + GTK-Doc-1.34.0 installed and wish to + build the API documentation, you should remove the -D ICAL_BUILD_DOCS=false switch + and issue: +

+
make docs
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+

+ If you have built the API documentation, install by issuing, + as root user: +

+
install -vdm755 /usr/share/doc/libical-3.0.20/html &&
+cp -vr apidocs/html/* /usr/share/doc/libical-3.0.20/html
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply higher level of the compiler optimizations. +

+

+ -D SHARED_ONLY=yes: + This switch is used in order to only build the shared + libraries. +

+

+ -D + ICAL_BUILD_DOCS=false: This switch prevents + building the GTK + documentation. Remove if you want to build the documentation. +

+

+ -D + GOBJECT_INTROSPECTION=true: This switch is used + to generate GObject metadata bindings. +

+

+ -D + ICAL_GLIB_VAPI=true: This switch is used in order + to build bindings for Vala-0.56.18. +

+

+ -D USE_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, + /usr/share/gtk-doc/html/libical-glib (optional), and + /usr/share/doc/libical-3.0.20/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 +

+
+
+
+
+
+
+
+

+ libidn-1.43 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn-1.43.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 4a32cafa4e9de86943fbae9a75c41f01 +

    +
  • +
  • +

    + Download size: 2.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 20 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests) +

    +
  • +
+
+

+ libidn Dependencies +

+
+ Optional +
+

+ Emacs-30.2, GTK-Doc-1.34.0, OpenJDK-24.0.2, + Valgrind-3.25.1, and Mono +

+
+
+

+ 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.43     &&
+cp -r -v doc/* /usr/share/doc/libidn-1.43
+
+
+

+ 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. +

+

+ --enable-java: Use this switch to + enable building the Java implementation of libidn. Note that OpenJDK-24.0.2 must be + installed to use this option. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + idn +
+
+ Installed Library: + libidn.so +
+
+ Installed Directories: + /usr/share/doc/libidn-1.43 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 +

+
+
+
+
+
+
+
+

+ libidn2-2.3.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/libidn/libidn2-2.3.8.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: a8e113e040d57a523684e141970eea7a +

    +
  • +
  • +

    + Download size: 2.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 21 MB (add 3 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (add 0.6 SBU for tests) +

    +
  • +
+
+

+ libidn2 Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ git-2.50.1 + and GTK-Doc-1.34.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libksba-1.6.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Libksba Dependencies +

+
+ Required +
+

+ libgpg-error-1.55 +

+
+ Optional +
+

+ Valgrind-3.25.1 +

+
+
+

+ 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: + None +
+
+ Installed Library: + libksba.so +
+
+ Installed Directory: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libksba.so +

+
+

+ contains the cryptographic API functions +

+
+
+
+
+
+
+
+

+ liblinear-249 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+
+

+ Note +

+

+ After updating this package from liblinear-247 or earlier, you need to + reinstall Nmap-7.98 in order to link to the new + library. +

+
+

+ Package Information +

+
+ +
+
+
+

+ 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.6 /usr/lib &&
+ln -sfv liblinear.so.6 /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 +

+
+
+
+
+
+
+
+

+ libmbim-1.32.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libmbim Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0, bash-completion, + and help2man +

+
+
+

+ Installation of libmbim +

+

+ Install libmbim by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                 \
+      --prefix=/usr            \
+      --buildtype=release      \
+      -D bash_completion=false \
+      -D man=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. +

+

+ -D + bash_completion=false: Use this option if the + external bash-completion + package is not installed. +

+

+ -D man=false: Use + this option if the external help2man + package is not installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + mbimcli and mbim-network +
+
+ Installed Libraries: + libmbim-glib.so +
+
+ Installed Directories: + /usr/include/libmbim-glib +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ mbimcli +

+
+

+ is a utility used to control MBIM devices +

+
+

+ mbim-network +

+
+

+ is a 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 +

+
+
+
+
+
+
+
+

+ libnvme-1.15 +

+
+
+
+
+
+

+ Introduction to libnvme +

+

+ The libnvme package is a + library which provides type definitions for NVMe + specification structures, enumerations, and bit fields, + helper functions to construct, dispatch, and decode commands + and payloads, and utilities to connect, scan, and manage NVMe + devices on a Linux system. +

+

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

+

+ Package Information +

+
+ +
+

+ libnvme Dependencies +

+
+ Optional +
+

+ dbus-1.16.2, JSON-C-0.18, keyutils-1.6.3, and SWIG-4.3.1 +

+
+
+

+ Installation of libnvme +

+

+ Install libnvme by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D libdbus=auto .. &&
+ninja
+

+ To run the tests, issue: ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libnvme.so and libnvme-mi.so +
+
+ Installed Directories: + /usr/include/nvme +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libnvme.so +

+
+

+ contains functions used to handle operations + relating to NVMe devices. +

+
+
+
+
+
+
+
+

+ libpaper-2.2.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of libpaper +

+

+ Install libpaper by running + the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-static  \
+            --docdir=/usr/share/doc/libpaper-2.2.6 &&
+make
+

+ The test suite of this package does not work with a + configuration using the standard installation location. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

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

+
+
+

+ Configuring libpaper +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ The paper size is automatically determined from the system + locale; see LC_PAPER in + locale(7). If + you want to override it, create a papersize file in the user configuration + directory. For example: +

+
mkdir -pv ~/.config &&
+echo "a4" > ~/.config/papersize
+

+ If you want to override the paper size globally (for all + users), set up the PAPERSIZE + environment variable. For example: +

+
echo "PAPERSIZE=a4" > /etc/profile.d/libpaper.sh
+

+ You may use a different paper size, such as letter. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + paper and paperconf +
+
+ Installed Library: + libpaper.so +
+
+ Installed Directories: + /usr/share/doc/libpaper-2.2.6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ paper +

+
+

+ prints paper configuration information +

+
+

+ paperconf +

+
+

+ prints paper configuration information in a + compatibility mode +

+
+

+ libpaper.so +

+
+

+ contains functions for interrogating the paper + library +

+
+
+
+
+
+
+
+

+ libportal-0.9.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ libportal Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Recommended +
+ +
+ Recommended (Runtime) +
+

+ To make this package really useful, install xdg-desktop-portal-1.20.3, + xdg-desktop-portal-gtk-1.15.3, + xdg-desktop-portal-gnome-48.0 + (if running a GNOME desktop environment), and xdg-desktop-portal-lxqt-1.2.0 + (if running a LXQt desktop environment). They are not needed + if only using this package to satisfy a build dependency. +

+
+ Optional +
+

+ Gi-DocGen-2025.4 (for documentation), + dbusmock-0.36.0 and pytest-8.4.1 (for + testing), Qt-6.9.2, and Vala-0.56.18 +

+
+
+

+ Installation of libportal +

+
+

+ Warning +

+

+ If a previous version of libportal is installed, move the + headers out of the way so that later packages do not + encounter conflicts (as the root user): +

+
if [ -e /usr/include/libportal ]; then
+    rm -rf /usr/include/libportal.old &&
+    mv -vf /usr/include/libportal{,.old}
+fi
+
+

+ First, apply a patch to fix building against Qt 6.9 and + later: +

+
patch -Np1 -i ../libportal-0.9.1-qt6.9_fixes-1.patch
+

+ Install libportal by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D vapi=false       \
+            -D docs=false       \
+            .. &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -i "/output/s/-1/-0.9.1/" ../doc/meson.build &&
+meson configure -D docs=true                     &&
+ninja
+

+ To test the results, issue: ninja test. Note that + additional dbus-daemon + processes may need to be killed after the tests are run. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D vapi=false: This + parameter disables using Vala-0.56.18. Remove this parameter if you + have it installed. +

+

+ -D docs=false: Allow + building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libportal.so, libportal-gtk3.so, + libportal-gtk4.so, and libportal-qt6.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 +

+
+

+ libportal-gtk3.so +

+
+

+ provides GTK+-3 specific functions for interacting + with Flatpak portals +

+
+

+ libportal-gtk4.so +

+
+

+ provides GTK-4 specific functions for interacting + with Flatpak portals +

+
+

+ libportal-qt6.so +

+
+

+ provides Qt6-specific functions for interacting + with Flatpak portals +

+
+
+
+
+
+
+
+

+ libproxy-0.5.10 +

+
+
+
+
+
+

+ Introduction to libproxy +

+

+ The libproxy package is a + library that provides automatic proxy configuration + management. This is useful in standardizing a way of dealing + with proxy settings across all scenarios. +

+

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

+

+ Package Information +

+
+ +
+

+ libproxy Dependencies +

+
+ Recommended +
+ +
+
+

+ Installation of libproxy +

+

+ Install libproxy by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..        \
+      --prefix=/usr   \
+      -D release=true &&
+
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + proxy +
+
+ Installed Libraries: + libproxy.so and + libpxbackend-1.0.so +
+
+ Installed Directories: + /usr/include/libproxy, + /usr/lib/libproxy, and /usr/share/doc/libproxy-1.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ proxy +

+
+

+ displays the proxy server that should be used to + reach a given network resource +

+
+

+ libproxy.so +

+
+

+ provides a standard method of performing automatic + proxy configuration +

+
+
+
+
+
+
+
+

+ libptytty-2.0 +

+
+
+
+
+
+

+ Introduction to libptytty +

+

+ The libptytty package + provides a library that allows for OS independent and secure + pty/tty and utmp/wtmp/lastlog handling. +

+

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

+

+ Package Information +

+
+ +
+

+ libptytty Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of libptytty +

+

+ Install libptytty by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr     \
+      -D CMAKE_BUILD_TYPE=Release      \
+      -D PT_UTMP_FILE:STRING=/run/utmp \
+      .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libptytty.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libptytty.so +

+
+

+ provides for OS independent and secure pty/tty and + utmp/wtmp/lastlog handling +

+
+
+
+
+
+
+
+

+ libqalculate-5.7.0 +

+
+
+
+
+
+

+ Introduction to libqalculate +

+

+ The libqalculate package + contains a library that provides functions for a + multi-purpose calculator. +

+

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

+

+ Package Information +

+
+ +
+

+ libqalculate Dependencies +

+
+ Required +
+

+ cURL-8.15.0, ICU-77.1, and libxml2-2.14.5 +

+
+ Optional +
+

+ Doxygen-1.14.0 and gnuplot +

+
+
+

+ Installation of libqalculate +

+

+ Install libqalculate by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libqalculate-5.7.0 &&
+make
+

+ To test the results, issue: make check. One set of + tests, strings.batch, fails, but the log does not say why. + Removing src/strings.batch allows all other tests to pass. +

+

+ Now, as the root user: +

+
make install
+

+ The libtool archive file from this package is referring to + the libraries from ICU-77.1. Such a reference may cause packages + depending on this package to be unnecessary linked against + the ICU libraries and increase the burden to rebuild packages + if ICU is updated to a new major version. As we've explained + in Libtool archive (.la) + files, these libtool archive files are unneeded anyway. + So as the root user, remove + the libtool archive file now: +

+
rm -v /usr/lib/libqalculate.la
+
+
+

+ Command Explanations +

+

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

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + qalc +
+
+ Installed Library: + libqalculate.so +
+
+ Installed Directories: + /usr/include/libqalculate, + /usr/share/doc/libqalculate-5.7.0, and + /usr/share/qalculate +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ qalc +

+
+

+ is a powerful and easy to use command line + calculator +

+
+

+ libqalculate.so +

+
+

+ contains the libqalculate API functions +

+
+
+
+
+
+
+
+

+ libqmi-1.36.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libqmi Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) and libgudev-238 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0, help2man, and + + libqrtr-glib +

+
+
+

+ Installation of libqmi +

+

+ Install libqmi by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                 \
+      --prefix=/usr            \
+      --buildtype=release      \
+      -D bash_completion=false \
+      -D qrtr=false            \
+      -D man=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. +

+

+ -D + bash_completion=false: Use this option if the + external bash-completion + package is not installed. +

+

+ -D man=false: Use + this option if the external help2man + package is not installed. +

+

+ -D qrtr=false: This + switch disables support for the QRTR protocol which needs the + external + libqrtr-glib package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + qmicli, qmi-firmware-update, and + qmi-network +
+
+ Installed Libraries: + libqmi-glib.so +
+
+ Installed Directories: + /usr/include/libqmi-glib +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ qmicli +

+
+

+ is a utility used to control QMI devices +

+
+

+ qmi-firmware-update +

+
+

+ is a utility used to perform firmware updates on + QMI devices +

+
+

+ qmi-network +

+
+

+ is a 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 +

+
+
+
+
+
+
+
+

+ libseccomp-2.6.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libseccomp Dependencies +

+
+ Optional +
+

+ Which-2.23 (needed for + tests), Valgrind-3.25.1, cython-3.1.3 (for python + bindings), and LCOV +

+
+
+

+ 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. +

+

+ --enable-python: this switch is + needed to build python bindings if cython-3.1.3 is installed. + The option --disable-static must + not be given if this option is used. And you must run + sed 's/env python/&3/' -i + tests/regression if this option is used and + you want to run the test suite. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libsigc++-2.12.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libsigc++ Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ DocBook-utils-0.6.14, docbook-xml-5.0, Doxygen-1.14.0, + fop-2.11, + and mm-common +

+
+
+

+ Installation of libsigc++ +

+

+ Install libsigc++ by running + the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D build-documentation=true: Use + this switch if Doxygen-1.14.0 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 +

+
+

+ provides a typesafe callback system for standard + C++ +

+
+
+
+
+
+
+
+

+ libsigc++-3.6.0 +

+
+
+
+
+
+

+ Introduction to libsigc++ +

+

+ The libsigc++ package + implements a typesafe callback system for standard C++. This + version is part of a new API for supporting gtkmm-4. +

+

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

+

+ Package Information +

+
+ +
+

+ libsigc++ Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ DocBook-utils-0.6.14, docbook-xml-5.0, Doxygen-1.14.0, + fop-2.11, + and mm-common +

+
+
+

+ Installation of libsigc++ +

+

+ Install libsigc++ by running + the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D build-documentation=true: Use + this switch if Doxygen-1.14.0 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 +

+
+

+ provides a typesafe callback system for standard + C++ +

+
+
+
+
+
+
+
+

+ libsigsegv-2.15 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.15.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: c2885785b3e5d1c94b1adb22b3002ccc +

    +
  • +
  • +

    + Download size: 484 KB +

    +
  • +
  • +

    + Estimated disk space required: 3.7 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with tests) +

    +
  • +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libssh2-1.11.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.libssh2.org/download/libssh2-1.11.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 38857d10b5c5deb198d6989dacace2e6 +

    +
  • +
  • +

    + Download size: 1.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 15 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests) +

    +
  • +
+
+

+ libssh2 Dependencies +

+
+ Optional +
+

+ CMake-4.1.0 (can be used instead of the + configure + script), libgcrypt-1.11.2 (can be used instead + of OpenSSL), OpenSSH-10.0p1 (for some tests), and + Docker + (for some tests) +

+
+
+

+ Installation of libssh2 +

+

+ Install libssh2 by running + the following commands: +

+
./configure --prefix=/usr          \
+            --disable-docker-tests \
+            --disable-static       &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --disable-docker-tests: Disable + the tests requiring Docker, which is beyond the scope of + BLFS. Remove this switch if you've installed Docker and you + wish to run the test suite. +

+

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

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libssh2.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libssh2.so +

+
+

+ contains functions to use the SSH2 protocol +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libstatgrab Dependencies +

+
+ Optional +
+

+ log4cplus-2.1.2 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libtasn1-4.20.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.20.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 930f71d788cf37505a0327c1b84741be +

    +
  • +
  • +

    + Download size: 1.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 16 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (with tests) +

    +
  • +
+
+

+ libtasn1 Dependencies +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and Valgrind-3.25.1 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libunistring-1.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/libunistring/libunistring-1.3.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 57dfd9e4eba93913a564aa14eab8052e +

    +
  • +
  • +

    + Download size: 2.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 58 MB (add 46 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU (add 0.3 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ libunistring Dependencies +

+
+ Optional +
+

+ texlive-20250308 (or install-tl-unx) (to rebuild the + documentation) +

+
+
+

+ Installation of libunistring +

+

+ Install libunistring by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libunistring-1.3 &&
+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-1.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libunistring.so +

+
+

+ provides the unicode string library API +

+
+
+
+
+
+
+
+

+ libunwind-1.8.2 +

+
+
+
+
+
+

+ Introduction to libunwind +

+

+ The libunwind package + contains a portable and efficient C programming interface + (API) to determine the call-chain of a program. The API + additionally provides the means to manipulate the preserved + (callee-saved) state of each call-frame and to resume + execution at any point in the call-chain (non-local goto). + The API supports both local (same-process) and remote + (across-process) operation. +

+

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

+

+ Package Information +

+
+ +
+

+ libunwind Dependencies +

+
+ Optional +
+

+ texlive-20250308 (for + latex2man) +

+
+
+

+ Installation of libunwind +

+

+ First, fix a problem when building with gcc-15: +

+
sed -i '/func.s/s/s//' tests/Gtest-nomalloc.c
+

+ Install libunwind 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 Libraries: + libunwind.so, + libunwind-coredump.so, libunwind-generic.so (symlink to + libunwind-x86_64.so), libunwind-ptrace.so, + libunwind-setjmp.so, and libunwind-x86_64.so + (libunwind-x86.so on i686) +
+
+ Installed Directories: + /usr/libexec/libunwind +
+
+
+
+
+
+
+
+

+ liburcu-0.15.3 +

+
+
+
+
+
+

+ Introduction to liburcu +

+

+ The userspace-rcu package + provides a set of userspace RCU (read-copy-update) libraries. + These data synchronization libraries provide read-side access + which scales linearly with the number of cores. It does so by + allowing multiples copies of a given data structure to live + at the same time, and by monitoring the data structure + accesses to detect grace periods after which memory + reclamation is possible. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of liburcu +

+

+ Install liburcu by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/liburcu-0.15.3 &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + liburcu.so, liburcu-bp.so, + liburcu-cds.so, liburcu-common.so, liburcu-mb.so, + liburcu-memb.so, liburcu-qsbr.so, and + liburcu-signal.so +
+
+ Installed Directories: + /usr/include/urcu and + /usr/share/doc/liburcu-0.15.3 +
+
+
+
+
+
+
+
+

+ libusb-1.0.29 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libusb Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ 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 --->                                             [USB_SUPPORT]
+    <*/M>   Support for Host-side USB                                      [USB]
+    [*]     PCI based USB host interface                               [USB_PCI]
+    # These are most common USB controller drivers for PC-like systems.
+    # For modern systems often [USB_XHCI_HCD] is the only one needed
+    # even if the system has USB 2.0 ports:
+    < /*/M> xHCI HCD (USB 3.0) support                            [USB_XHCI_HCD]
+    < /*/M> EHCI HCD (USB 2.0) support                            [USB_EHCI_HCD]
+    < /*/M> OHCI HCD (USB 1.1) support                            [USB_OHCI_HCD]
+

+ For more details on setting up USB devices, see the section called “USB Device + Issues”. +

+
+
+

+ Installation of libusb +

+

+ Install libusb by running + the following commands: +

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

+ If Doxygen is installed and + you wish to build the API documentation, issue the following + commands: +

+
pushd doc                &&
+  doxygen -u doxygen.cfg &&
+  make docs              &&
+popd
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the API documentation, install it using the + following commands as the root user: +

+
install -v -d -m755 /usr/share/doc/libusb-1.0.29/apidocs &&
+install -v -m644    doc/api-1.0/* \
+                    /usr/share/doc/libusb-1.0.29/apidocs
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libusb-1.0.so +
+
+ Installed Directories: + /usr/include/libusb-1.0 and + /usr/share/doc/libusb-1.0.29 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libusb-1.0.so +

+
+

+ contains API functions used for accessing USB + hardware +

+
+
+
+
+
+
+
+

+ libuv-1.51.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://dist.libuv.org/dist/v1.51.0/libuv-v1.51.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 5e0109e19c3fed3a8cbecb958de39afa +

    +
  • +
  • +

    + Download size: 1.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 31 MB (with tests and + man page) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (with tests and man page) +

    +
  • +
+
+

+ libuv Dependencies +

+
+ Optional +
+

+ sphinx-8.2.3 +

+
+
+

+ 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 installed the optional sphinx-8.2.3 python module, create + the man page: +

+
make man -C docs
+

+ If you want to run the tests, run: make check as a non-root + user. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the man page, install it as the root user: +

+
install -Dm644 docs/build/man/libuv.1 /usr/share/man/man1
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libxkbcommon-1.11.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ On GitHub we've forked the upstream repository into our own + lfs-book namespace and + recreated a tag for the release. This is done to ensure the + downloaded tarball file name to be correct and consistent + (i.e. it shouldn't change when using the browser instead of + a tool like wget). Our tag and the + upstream release tag are on the same commit, so we've not + introduced any change to the tarball content except the + name of its top-level directory (that Git does not track). +

+
+

+ libxkbcommon Dependencies +

+
+ Required +
+

+ xkeyboard-config-2.45 (runtime) +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 (for generating the + documentation) and Xvfb (from Xorg-Server-21.1.18 or Xwayland-24.1.8) +

+
+
+

+ Installation of libxkbcommon +

+

+ Install libxkbcommon by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --buildtype=release  \
+      -D enable-docs=false &&
+ninja
+

+ To test the results, ensure Xvfb and xkeyboard-config-2.45 are + available, then 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. +

+

+ -D enable-docs=true: + This switch enables documentation generation. Doxygen-1.14.0 is + required. +

+

+ mv -v + /usr/share/doc/libxkbcommon{,-1.11.0}: If you + built the documentation, use this command to install it 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 (optionally) + /usr/share/doc/libxkbcommon-1.11.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 +

+
+
+
+
+
+
+
+

+ libxml2-2.14.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ libxml2 Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Valgrind-3.25.1 (may be used in the + tests) +

+
+
+

+ Installation of libxml2 +

+

+ Install libxml2 by running + the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-static  \
+            --with-history    \
+            --with-icu        \
+            PYTHON=/usr/bin/python3 \
+            --docdir=/usr/share/doc/libxml2-2.14.5 &&
+make
+

+ If you downloaded the test suite, issue the following + command: +

+
tar xf ../xmlts20130923.tar.gz
+

+ To test the results, issue: make check > check.log. + This command will print several lines of error messages like + “Failed to parse + xstc/...” because some test files are + missing and these messages can be safely ignored. A summary + of the results can be obtained with grep -E '^Total|expected|Ran' + check.log. If Valgrind-3.25.1 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: +

+
/etc/init.d/httpd stop
+
+

+ Now, as the root user: +

+
make install
+

+ Finally, prevent some packages from unnecessarily linking to + ICU using the following commands as the root user: +

+
rm -vf /usr/lib/libxml2.la &&
+sed '/libs=/s/xml2.*/xml2"/' -i /usr/bin/xml2-config
+
+
+

+ 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-icu: This + switch enables support for ICU, which provides additional Unicode + support. This is needed for some packages in BLFS, such as + for QtWebEngine. +

+

+ PYTHON=/usr/bin/python3: Allows + building the libxml2 module with Python3 instead of Python2. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + xml2-config, xmlcatalog, and + xmllint +
+
+ Installed Libraries: + libxml2.so +
+
+ Installed Directories: + /usr/include/libxml2, + /usr/lib/cmake/libxml2, /usr/share/doc/libxml2-2.14.5, + 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 +

+
+
+
+
+
+
+
+

+ libxmlb-0.3.23 +

+
+
+
+
+
+

+ Introduction to libxmlb +

+

+ The libxmlb package contains + a library and a tool which help create and query binary XML + blobs. +

+

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

+

+ Package Information +

+
+ +
+

+ libxmlb Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and libstemmer +

+
+
+

+ Installation of libxmlb +

+

+ Install libxmlb by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D gtkdoc=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. +

+

+ -D gtkdoc=false: This + switch disables building the API documentation. Remove it if + you have GTK-Doc-1.34.0 installed and wish to + build the API documentation. +

+

+ -D introspection=false: Use this + switch if you have not built GLib-2.84.4 with GObject + Introspection. +

+

+ -D stemmer=true: Use this switch + if you have libstemmer + installed and wish to build stemmer support. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + xb-tool +
+
+ Installed Libraries: + libxmlb.so +
+
+ Installed Directories: + /usr/include/libxmlb-2, + /usr/libexec/installed-tests/libxmlb, and + /usr/share/gtk-doc/html/libxmlb (if gtk-doc was + enabled) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ xb-tool +

+
+

+ is a tool used to create, dump, or query a binary + XML blob +

+
+

+ libxmlb.so +

+
+

+ contains functions that allow for creating and + querying binary XML blobs +

+
+
+
+
+
+
+
+

+ libxslt-1.1.43 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libxslt Dependencies +

+
+ Required +
+

+ libxml2-2.14.5 +

+
+ Recommended (at runtime) +
+ +
+

+ Note +

+

+ Although it is not a direct dependency, many applications + using libxslt will expect + docbook-xml-4.5 and docbook-xsl-nons-1.79.2 to be + present. +

+
+
+ Optional +
+

+ libgcrypt-1.11.2 (only needed for the + deprecated EXSLT crypto extension, see Command Explanations) +

+
+
+

+ Installation of libxslt +

+

+ Install libxslt by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libxslt-1.1.43 &&
+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. +

+

+ --with-crypto: Enable the + non-standard and deprecated EXSLT crypto extension feature. + It needs libgcrypt-1.11.2 and the upstream will + remove it in the future. +

+

+ --with-debug: Enables thorough + diagnostics with the -v, + --verbose of xsltproc. Use it if you + plan to debug XSLT stylesheets. +

+
+
+

+ 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/cmake/libxslt, + /usr/lib/libxslt-plugins, + /usr/share/gtk-doc/lib{xslt,exslt}, + /usr/share/doc/libxslt-1.1.43, and + /usr/share/doc/libxslt-python-1.1.43 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libwacom-2.16.1 +

+
+
+
+
+
+

+ Introduction to libwacom +

+

+ The libwacom package + contains a library used to identify graphics tablets from + Wacom or various other vendors and their model-specific + features. +

+

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

+

+ Package Information +

+
+ +
+

+ libwacom Dependencies +

+
+ Required +
+

+ libevdev-1.13.4 and libgudev-238 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0, git-2.50.1, librsvg-2.61.0, + Valgrind-3.25.1 (optional for some + tests), and pytest-8.4.1 with python-libevdev and + pyudev +

+
+
+

+ Installation of libwacom +

+

+ Install libwacom by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D tests=disabled    &&
+ninja
+

+ To test the results, issue: ninja test. To run + additional tests, install pytest-8.4.1, python-libevdev, and + pyudev, then remove the "-D tests=disabled" option from the + meson line above. +

+

+ If upgrading from a previous version of libwacom, remove the + old device database installation to prevent a potential + duplicated match of devices in case some old database files + are not overwritten: +

+
rm -rf /usr/share/libwacom
+

+ 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. +

+

+ -D tests=disabled: + This parameter disables some of the more advanced tests + because they require pytest-8.4.1 and other two Python modules + beyond the scope of BLFS 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 +

+
+
+
+
+
+
+
+

+ libyaml-0.2.5 +

+
+
+
+
+
+

+ Introduction to libyaml +

+

+ The yaml package contains a + C library for parsing and emitting YAML (YAML Ain't Markup + Language) code. +

+

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

+

+ Package Information +

+
+ +
+

+ libyaml Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of libyaml +

+

+ Install libyaml by running + the following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ log4cplus-2.1.2 +

+
+
+
+
+
+

+ Introduction to log4cplus +

+

+ log4cplus is an easy to use + C++20 logging API providing thread-safe, flexible, and + arbitrarily granular control over log management and + configuration. It is modeled after the Java log4j API. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of log4cplus +

+

+ Build log4cplus by running + the following command: +

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

+ To test the results, issue: make check. +

+

+ Now, install the package as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + log4cplus.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ log4cplus.so +

+
+

+ is the log4cplus library +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ mtdev-1.1.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://bitmath.org/code/mtdev/mtdev-1.1.7.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 483ed7fdf7c1e7b7375c05a62848cce7 +

    +
  • +
  • +

    + Download size: 296 KB +

    +
  • +
  • +

    + Estimated disk space required: 2.5 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Node.js-22.18.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://nodejs.org/dist/v22.18.0/node-v22.18.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: c465f337ce708750125ee9f3b907cbf1 +

    +
  • +
  • +

    + Download size: 47 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.3 GB (add 46 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 11 SBU (add 2.5 SBU for tests: + both using parallelism=8 and 8 CPUs online, parts of + the tests will use all online CPUs) +

    +
  • +
+
+

+ Node.js Dependencies +

+
+ Required +
+

+ Which-2.23 +

+
+ Recommended +
+ +
+ Optional +
+

+ http-parser and + npm (an + internal copy of npm will be installed if + not present) +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of Node.js +

+

+ Build Node.js by running the + following commands: +

+
./configure --prefix=/usr          \
+            --shared-brotli        \
+            --shared-cares         \
+            --shared-libuv         \
+            --shared-openssl       \
+            --shared-nghttp2       \
+            --shared-zlib          \
+            --with-intl=system-icu &&
+make
+

+ To test the results, issue: make test-only. Out of over + 4400 tests, 3 in the 'parallel' test suite are known to fail. +

+

+ Now, as the root user: +

+
make install &&
+ln -sf node /usr/share/doc/node-22.18.0
+
+
+

+ Command Explanations +

+

+ --with-intl=system-icu: use the + system version of icu. Other + values are full-icu (to build a + local, full icu library) and + small-icu (to build a local, + minimal icu library). +

+

+ --shared-{brotli,cares,libuv,nghttp2,openssl,zlib}: + use the system installed libraries instead of local copies. +

+

+ --without-npm: do not build + npm (use if you'd like to + build a separate npm later). +

+

+ --shared-http-parser: use the + system installed library instead of a local copy. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + corepack, node, npm, and npx +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/include/node, + /usr/lib/node_modules/{corepack,npm}, + /usr/share/doc/{node,node-22.18.0}, and + /usr/share/systemtap/tapset +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ corepack +

+
+

+ is an experimental tool to help with managing + versions of package managers. +

+
+

+ node +

+
+

+ is the server-side JavaScript runtime +

+
+

+ npm +

+
+

+ is the Node.js + package manager +

+
+

+ npx +

+
+

+ is short for npm + exec, which allows running commands + from NPM packages +

+
+

+ /usr/lib/node_modules/npm/ +

+
+

+ is the installation root for Node.js executables + and libraries +

+
+
+
+
+
+
+
+

+ npth-1.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.gnupg.org/ftp/gcrypt/npth/npth-1.8.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: cb4fc0402be5ba67544e499cb2c1a74d +

    +
  • +
  • +

    + Download size: 312 KB +

    +
  • +
  • +

    + Estimated disk space required: 2.9 MB (with checks) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with checks) +

    +
  • +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ NSPR-4.37 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of NSPR +

+

+ Install NSPR by running the + following commands: +

+
cd nspr &&
+
+sed -i '/^RELEASE/s|^|#|' pr/src/misc/Makefile.in &&
+sed -i 's|$(LIBRARY) ||'  config/rules.mk         &&
+
+./configure --prefix=/usr   \
+            --with-mozilla  \
+            --with-pthreads \
+            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&
+make
+

+ The test suite is designed for testing changes to nss or nspr + and is not particularly useful for checking a released + version (e.g. it needs to be run on a non-optimized build + with both nss and nspr directories existing alongside each + other). For further details, see the Editor Notes for nss at + https://wiki.linuxfromscratch.org/blfs/wiki/nss +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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. +

+

+ --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 +

+
+
+
+
+
+
+
+

+ PCRE2-10.45 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ PCRE2 Dependencies +

+
+ Optional +
+

+ Valgrind-3.25.1 and libedit +

+
+
+

+ Installation of PCRE2 +

+

+ Install PCRE2 by running the + following commands: +

+
./configure --prefix=/usr                       \
+            --docdir=/usr/share/doc/pcre2-10.45 \
+            --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.45 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Popt-1.19 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ popt + Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (for generating + documentation) +

+
+
+

+ Installation of Popt +

+

+ Install popt by running the + following commands: +

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

+ If you have Doxygen-1.14.0 installed and wish to + build the API documentation, issue: +

+
sed -i 's@\./@src/@' Doxyfile &&
+doxygen
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the API documentation, install it using the + following commands issued by the root user: +

+
install -v -m755 -d /usr/share/doc/popt-1.19 &&
+install -v -m644 doxygen/html/* /usr/share/doc/popt-1.19
+
+
+

+ 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.19 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libpopt.so +

+
+

+ is used to parse command-line options +

+
+
+
+
+
+
+
+

+ Protobuf-32.0 +

+
+
+
+
+
+

+ Introduction to Protobuf +

+

+ The Protobuf package + contains utilities and libraries for using data in Google's + data interchange format. +

+

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

+

+ Package Information +

+
+ +
+

+ Protobuf Dependencies +

+
+ Required +
+

+ Abseil-cpp-20250814.0 and + CMake-4.1.0 +

+
+ Optional +
+

+ gtest (for tests) +

+
+
+

+ Installation of Protobuf +

+

+ Install Protobuf by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr      \
+      -D CMAKE_BUILD_TYPE=Release       \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON    \
+      -D protobuf_BUILD_TESTS=OFF       \
+      -D protobuf_BUILD_SHARED_LIBS=ON  \
+      -G Ninja ..                       &&
+ninja
+

+ This package does come with a test suite, but it requires + gtest, which is + not part of BLFS. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + protobuf_BUILD_TESTS=OFF: This parameter prevents + the tests from being built because gtest is not part + of BLFS. +

+

+ -D + protobuf_BUILD_SHARED_LIBS=ON: This parameter + enables building shared versions of the libraries provided by + this package instead of static versions. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + protoc (a symlink to + protoc-32.0.0), protoc-32.0.0, protoc-gen-upb (a symlink + to protoc-gen-upb-32.0.0), and protoc-gen-upbdefs (a + symlink to protoc-gen-upbdefs-32.0.0) +
+
+ Installed Libraries: + libprotobuf.so, + libprotobuf-lite.so, libprotoc.so, libupb.a, + libutf8_range.so, and libutf8_validity.so +
+
+ Installed Directories: + /usr/include/google, + /usr/include/upb, /usr/lib/cmake/protobuf, and + /usr/lib/cmake/utf8_range +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ protoc +

+
+

+ parses protocol buffer files and generates output + for several programming languages and formats +

+
+

+ libprotobuf.so +

+
+

+ contains functions for utilizing data in Google's + data interchange format +

+
+

+ libprotobuf-lite.so +

+
+

+ contains a simpler version of the functions for + utilizing data in Google's data interchange format +

+
+

+ libprotoc.so +

+
+

+ contains functions used by protoc at runtime for + outputting data for several programming languages + and formats +

+
+

+ libupb.a +

+
+

+ is a small protobuf implementation written in C +

+
+

+ libutf8_range.so +

+
+

+ contains functions that allow a program to + determine whether a sequence of characters is a + valid UTF-8 sequence +

+
+

+ libutf8_validity.so +

+
+

+ contains functions that allow a program to + determine whether a sequence of bytes is a valid + UTF-8 sequence, and to find what the longest valid + prefix of the sequence is +

+
+
+
+
+
+
+
+

+ Protobuf-c-1.5.2 +

+
+
+
+
+
+

+ Introduction to Protobuf-c +

+

+ The Protobuf-c package + contains an implementation of the Google Protocol Buffers + data serialization format in C. +

+

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

+

+ Package Information +

+
+ +
+

+ Protobuf-c Dependencies +

+
+ Required +
+

+ Protobuf-32.0 +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of Protobuf-c +

+

+ Install Protobuf-c by + running the following commands: +

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

+ 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: + protoc-gen-c and protoc-c + (symlinked to protoc-gen-c) +
+
+ Installed Libraries: + libprotobuf-c.so +
+
+ Installed Directories: + /usr/include/google and + /usr/include/protobuf-c +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ protoc-c +

+
+

+ generates C descriptor code from a .proto file +

+
+

+ libprotobuf-c.so +

+
+

+ contains a C implementation of the Google Protocol + Buffers data serialization format +

+
+
+
+
+
+
+
+

+ Qca-2.3.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.kde.org/stable/qca/2.3.10/qca-2.3.10.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: c3ed3262c83c43bdeb610836769b1534 +

    +
  • +
  • +

    + Download size: 748 KB +

    +
  • +
  • +

    + Estimated disk space required: 56 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (using parallelism=4; + with tests) +

    +
  • +
+
+

+ Qca + Dependencies +

+
+ Required +
+

+ make-ca-1.16.1, CMake-4.1.0, Qt-6.9.2, and Which-2.23 +

+
+ Optional +
+

+ Cyrus SASL-2.1.28, GnuPG-2.4.8, libgcrypt-1.11.2, libgpg-error-1.55, nss-3.115, NSPR-4.37, p11-kit-0.25.5, + Doxygen-1.14.0, and Botan +

+
+
+

+ 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 -D CMAKE_INSTALL_PREFIX=$QT6DIR            \
+      -D CMAKE_BUILD_TYPE=Release                \
+      -D QT6=ON                                  \
+      -D QCA_INSTALL_IN_QT_PREFIX=ON             \
+      -D QCA_MAN_INSTALL_DIR:PATH=/usr/share/man \
+      .. &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply a higher level of compiler optimizations. +

+

+ -D QT6=ON: Ensure the + packages is built with Qt-6.9.2. +

+

+ -D + QCA_MAN_INSTALL_DIR:PATH=/usr/share/man: Install + the qca man page in the normal location. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + mozcerts-qt6 and qcatool-qt6 +
+
+ Installed Libraries: + libqca-qt6.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: + $QT6DIR/include/Qca-qt6, + $QT6DIR/lib/cmake/Qca-qt6, and $QT6DIR/lib/qca-qt6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ mozcerts-qt6 +

+
+

+ is a command line tool for converting certdata.txt + into outfile.pem files +

+
+

+ qcatool-qt6 +

+
+

+ is a command line tool for performing various + cryptographic operations with Qca +

+
+

+ libqca-qt6.so +

+
+

+ is the Qt Cryptography Architecture (Qca) library +

+
+
+
+
+
+
+
+

+ qcoro-0.12.0 +

+
+
+
+
+
+

+ Introduction to qcoro +

+

+ This package provides a set of tools to make use of C++20 + coroutines with Qt. +

+

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

+

+ Package Information +

+
+ +
+

+ qcoro Dependencies +

+
+ Required +
+

+ Qt-6.9.2 +

+
+
+

+ Installation of qcoro +

+

+ Install qcoro by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$QT6DIR \
+      -D CMAKE_BUILD_TYPE=Release     \
+      -D BUILD_TESTING=OFF            \
+      -D QCORO_BUILD_EXAMPLES=OFF     \
+      -D BUILD_SHARED_LIBS=ON         \
+       ..                             &&
+make
+

+ To test this package, remove the 'BUILD_TESTING=OFF' + parameter above and run: +

+
make test
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply a higher level of compiler optimizations. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libQCoro6Core.so, libQCoro6DBus.so, + libQCoro6Network.so, libQCoro6Qml.so, libQCoro6Quick.so, + and libQCoro6WebSockets.so +
+
+ Installed Directories: + Nine directories in + $QT6DIR/lib/cmake/ and $QT6DIR/include/qcoro6 +
+
+
+
+
+
+
+
+

+ SpiderMonkey + from firefox-140.2.0 +

+
+
+
+
+
+

+ Introduction to SpiderMonkey +

+

+ SpiderMonkey is Mozilla's + JavaScript and WebAssembly Engine, written in C++ and Rust. + In BLFS, the source code of SpiderMonkey is taken from + Firefox. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://archive.mozilla.org/pub/firefox/releases/140.2.0esr/source/firefox-140.2.0esr.source.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 64773387a541a2ed5c1ce9f247469ba3 +

    +
  • +
  • +

    + Download size: 602 MB +

    +
  • +
  • +

    + Estimated disk space required: 4.7 GB (48 MB installed + after removing 38 MB static lib; add 30 MB for the main + tests and 27 MB for the jit tests) +

    +
  • +
  • +

    + Estimated build time: 1.8 SBU (with parallelism=4; add + 0.5 SBU for the main tests and 2.1 SBU for the jit + tests) +

    +
  • +
+
+

+ SpiderMonkey Dependencies +

+
+ Required +
+

+ Cbindgen-0.29.0, ICU-77.1, Which-2.23 +

+
+ Recommended +
+ +
+

+ Important +

+

+ If you are building this package on a 32-bit system, and + Clang is not installed or you're overriding the default + compiler choice with the environment variable CXX, please read the Command Explanations + section first. +

+
+
+
+

+ Installation of SpiderMonkey +

+
+

+ Note +

+

+ Unlike most other packages in BLFS, the instructions below + require you to untar firefox-140.2.0esr.tar.xz and change into + the firefox-140.2.0 + directory. +

+

+ 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 SpiderMonkey by + running the following commands: +

+
+

+ Note +

+

+ If you are compiling this package in chroot you must ensure + that /dev/shm is mounted. If + you do not do this, the Python configuration will fail with a + traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py. + As the root user, run: +

+
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
+

+ Compiling the C++ code respects $MAKEFLAGS and defaults to + 'j1', the rust code will use all processors. +

+
+
mkdir obj &&
+cd    obj &&
+
+../js/src/configure --prefix=/usr            \
+                    --disable-debug-symbols  \
+                    --disable-jemalloc       \
+                    --enable-readline        \
+                    --enable-rust-simd       \
+                    --with-intl-api          \
+                    --with-system-icu        \
+                    --with-system-zlib       &&
+make
+

+ To run the SpiderMonkey test suite, issue: +

+
make -C js/src check-jstests \
+     JSTESTS_EXTRA_ARGS="--timeout 300 --wpt=disabled" | tee jstest.log
+

+ Because we are building with system ICU, 24 tests (out of a + total of more than 50,000) are known to fail. The list of + failed tests can be extracted via grep 'UNEXPECTED-FAIL' + jstest.log. Pass the -c option to grep if you only want the + total number of failed tests. +

+

+ The test suite is executed with all CPU cores available: even + in a cgroup with less cores assigned, it still attempts to + spawn as many testing jobs as the number of all cores in the system; + fortunately the kernel still won't run these jobs on cores + not assigned to the cgroup so the CPU usage is still + controlled. +

+

+ To run the JIT test suite, issue the following command: +

+
make -C js/src check-jit-test
+

+ Like the SpiderMonkey test suite, the number of test jobs is + same as the number of all CPU cores in the system even if a + cgroup is used. To make things worse, some test cases can use + up to 4 GB of system memory, so the peak memory usage may be + very large if your CPU have multiple cores. Running the JIT + test suite without enough memory may invoke the kernel OOM + killer and cause stability issues. If you don't have enough + system memory available, append JITTEST_EXTRA_ARGS=-jN to the command and + replace N with the + number of test jobs your available system memory can hold. + For example, if you have 15 GB system memory available and 4 + CPU cores, append JITTEST_EXTRA_ARGS=-j3 to run the test suite + with 3 parallel jobs so the memory usage won't exceed 12 GB. +

+
+

+ Caution +

+

+ An issue in the installation process causes any running + program which links to SpiderMonkey shared library (for + example, GNOME Shell) to crash if SpiderMonkey is + reinstalled, or upgraded or downgraded without a change of + the major version number (140 in 140.2.0). To work around + this issue, remove the old version of the SpiderMonkey + shared library before installation: +

+
rm -fv /usr/lib/libmozjs-140.so
+
+

+ Now, as the root user: +

+
make install &&
+rm -v /usr/lib/libjs_static.ajs &&
+sed -i '/@NSPR_CFLAGS@/d' /usr/bin/js140-config
+

+ Still as the root user, fix + an issue with one of the installed headers: +

+
sed '$i#define XP_UNIX' -i /usr/include/mozjs-140/js-config.h
+
+
+

+ Command Explanations +

+

+ --disable-debug-symbols: Don't + generate debug symbols since they are very large and most + users won't need it. Remove it if you want to debug + SpiderMonkey. +

+

+ --disable-jemalloc: + This switch disables the internal memory allocator used in + SpiderMonkey. jemalloc is only intended for the Firefox + browser environment. For other applications using + SpiderMonkey, the application may crash as items allocated in + the jemalloc allocator are freed on the system (glibc) + allocator. +

+

+ --enable-readline: + This switch enables Readline support in the SpiderMonkey + command line interface. +

+

+ --enable-rust-simd: + This switch enables SIMD optimization in the shipped + encoding_rs crate. +

+

+ --with-intl-api: This + enables the internationalization functions required by + Gjs. +

+

+ --with-system-*: + These parameters allow the build system to use system + versions of the above libraries. These are required for + stability. +

+

+ rm -v + /usr/lib/libjs_static.ajs: Remove a large + static library which is not used by any BLFS package. +

+

+ sed -i '/@NSPR_CFLAGS@/d' + /usr/bin/js140-config: Prevent js140-config from using + buggy CFLAGS. +

+

+ CC=gcc + CXX=g++: BLFS used to prefer to use gcc and g++ + instead of upstream's defaults of the clang programs. With the release of + gcc-12 the build takes longer with gcc and g++, primarily + because of extra warnings, and is bigger. Pass these + environment variables to the configure script if you wish to + continue to use gcc, g++ (by exporting them and unset them + after the installation, or simply prepending them before the + ../js/src/configure + command). If you are building on a 32-bit system, also see + below. +

+

+ CXXFLAGS="-msse2 + -mfpmath=sse": Use SSE2 instead of 387 for + double-precision floating-point operations. It's needed by + GCC to satisfy the expectations of upstream (Mozilla) + developers with floating-point arithmetic. Use it if you are + building this package on a 32-bit system with GCC (if Clang + is not installed or GCC is explicitly specified). Note that + this will cause SpiderMonkey to crash on a processor without + SSE2 capability. If you are running the system on such an old + processor, Clang is strictly needed. This setting is not + needed on 64-bit systems because all 64-bit x86 processors + support SSE2 and the 64-bit compilers (both Clang and GCC) + use SSE2 by default. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + js140 and js140-config +
+
+ Installed Libraries: + libmozjs-140.so +
+
+ Installed Directories: + /usr/include/mozjs-140 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ js140 +

+
+

+ provides a command line interface to the + JavaScript engine +

+
+

+ js140-config +

+
+

+ is used to find the SpiderMonkey compiler and + linker flags +

+
+

+ + libmozjs-140.so +

+
+

+ contains the Mozilla JavaScript API functions +

+
+
+
+
+
+
+
+

+ SPIRV-Headers-1.4.321.0 +

+
+
+
+
+
+

+ Introduction to SPIRV-Headers +

+

+ The SPIRV-Headers package + contains headers that allow for applications to use the + SPIR-V language and instruction set with Vulkan. SPIR-V is a + binary intermediate language for representing graphical + shader stages and compute kernels for multiple Khronos APIs, + including OpenGL and Vulkan. +

+

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

+

+ Package Information +

+
+ +
+

+ SPIRV-Headers Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of SPIRV-Headers +

+

+ Install SPIRV-Headers by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr -G Ninja .. &&
+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/include/spirv and + /usr/share/cmake/SPIRV-Headers +
+
+
+
+
+
+
+
+

+ SPIRV-Tools-1.4.321.0 +

+
+
+
+
+
+

+ Introduction to SPIRV-Tools +

+

+ The SPIRV-Tools package + contains libraries and utilities for processing SPIR-V + modules. +

+

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

+

+ Package Information +

+
+ +
+

+ SPIRV-Tools Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and SPIRV-Headers-1.4.321.0 +

+
+
+

+ Installation of SPIRV-Tools +

+

+ Install SPIRV-Tools by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr     \
+      -D CMAKE_BUILD_TYPE=Release      \
+      -D SPIRV_WERROR=OFF              \
+      -D BUILD_SHARED_LIBS=ON          \
+      -D SPIRV_TOOLS_BUILD_STATIC=OFF  \
+      -D SPIRV-Headers_SOURCE_DIR=/usr \
+      -G Ninja .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D SPIRV_WERROR=OFF: + This switch stops the build system from treating warnings as + errors. +

+

+ -D + BUILD_SHARED_LIBS=ON: This switch forces the + build system to install shared libraries instead of static + libraries. +

+

+ -D + SPIRV_TOOLS_BUILD_STATIC=OFF: This switch + disables building static versions of the libraries. +

+

+ -D + SPIRV-Headers_SOURCE_DIR: This switch tells the + build system that SPIRV-Headers-1.4.321.0 + is installed in /usr. This is needed since the build system + tries to use a copy at external/spirv-headers in the source + directory by default and the copy is not shipped (i.e. you + need to manually extract SPIRV-Headers-1.4.321.0 there + if you want to build with the copy). +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + spirv-as, spirv-cfg, spirv-dis, + spirv-lesspipe.sh, spirv-link, spirv-lint, spirv-objdump, + spirv-opt, spirv-reduce, and spirv-val +
+
+ Installed Libraries: + libSPIRV-Tools-diff.so, + libSPIRV-Tools-link.so, libSPIRV-Tools-lint.so, + libSPIRV-Tools-opt.so, libSPIRV-Tools-reduce.so, + libSPIRV-Tools-shared.so, and libSPIRV-Tools.so +
+
+ Installed Directories: + /usr/include/spirv-tools and + /usr/lib/cmake/SPIRV-Tools +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ spirv-as +

+
+

+ creates a SPIR-V binary module from SPIR-V assembly + text +

+
+

+ spirv-cfg +

+
+

+ shows the control flow graph in "dot" format +

+
+

+ spirv-dis +

+
+

+ disassembles a SPIR-V binary module +

+
+

+ spirv-lesspipe.sh +

+
+

+ automatically disassembles a .SPV file for 'less' +

+
+

+ spirv-link +

+
+

+ links SPIR-V binary files together +

+
+

+ spirv-lint +

+
+

+ checks a SPIR-V binary module for errors +

+
+

+ spirv-objdump +

+
+

+ dumps information from a SPIR-V binary +

+
+

+ spirv-opt +

+
+

+ performs optimizations on SPIR-V binary files +

+
+

+ spirv-reduce +

+
+

+ reduces a SPIR-V binary file +

+
+

+ spirv-val +

+
+

+ validates a SPIR-V binary file +

+
+

+ libSPIRV-Tools.so +

+
+

+ contains functions for processing SPIR-V modules +

+
+
+
+
+
+
+
+

+ SPIRV-LLVM-Translator-20.1.5 +

+
+
+
+
+
+

+ Introduction to SPIRV-LLVM-Translator +

+

+ The SPIRV-LLVM-Translator + package contains a library and utility for converting between + LLVM IR and SPIR-V code. This package currently only supports + the OpenCL/Compute version of SPIR-V. +

+

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

+

+ Package Information +

+
+ +
+

+ SPIRV-LLVM-Translator Dependencies +

+
+ Required +
+

+ libxml2-2.14.5, LLVM-20.1.8, and SPIRV-Tools-1.4.321.0 +

+
+
+

+ Installation of SPIRV-LLVM-Translator +

+

+ Install SPIRV-LLVM-Translator by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr                   \
+      -D CMAKE_BUILD_TYPE=Release                    \
+      -D BUILD_SHARED_LIBS=ON                        \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON                 \
+      -D LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr \
+      -G Ninja ..                                    &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + BUILD_SHARED_LIBS=ON: This parameter forces + building shared versions of the libraries. +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=/usr: This + parameter allows the build system to use the version of + SPIRV-Headers that should have been installed as a dependency + of SPIRV-Tools, instead of redownloading an unnecessary copy + of the headers. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + llvm-spirv +
+
+ Installed Libraries: + libLLVMSPIRVLib.so +
+
+ Installed Directories: + /usr/include/LLVMSPIRVLib +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ llvm-spirv +

+
+

+ converts between LLVM IR and SPIR-V code +

+
+

+ libLLVMSPIRVLib.so +

+
+

+ contains functions that convert between LLVM IR and + SPIR-V code +

+
+
+
+
+
+
+
+

+ Talloc-2.4.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.samba.org/ftp/talloc/talloc-2.4.3.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: a51e4220fda52f4ae39413ed7e281f38 +

    +
  • +
  • +

    + Download size: 672 KB +

    +
  • +
  • +

    + Estimated disk space required: 10 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (with tests) +

    +
  • +
+
+

+ Talloc Dependencies +

+
+ Optional +
+

+ docbook-xml-4.5, docbook-xsl-nons-1.79.2 and + libxslt-1.1.43 (To generate man pages), + GDB-16.3, + git-2.50.1, libnsl-2.0.1, libtirpc-1.3.6, + Valgrind-3.25.1, and xfsprogs-6.15.0 +

+
+
+

+ 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-313-<arch>-linux-gnu.so, + libtalloc.so, and + talloc.cpython-313-<arch>-linux-gnu.so (Python 3 + Module) +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libtalloc.so +

+
+

+ contains a replacement for the Glibc malloc function +

+
+
+
+
+
+
+
+

+ Uchardet-0.0.8 +

+
+
+
+
+
+

+ Introduction to Uchardet +

+

+ The Uchardet package + contains an encoding detector library which takes a sequence + of bytes in an unknown character encoding and attempts to + determine the encoding of the text. +

+

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

+

+ Package Information +

+
+ +
+

+ Uchardet Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of Uchardet +

+

+ Install Uchardet by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D BUILD_STATIC=OFF                 \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -W no-dev ..                        &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D BUILD_STATIC=OFF: + This switch disables building the static version of the + library. +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Umockdev-0.19.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Umockdev Dependencies +

+
+ Required +
+

+ libgudev-238, libpcap-1.10.5, and + Vala-0.56.18 +

+
+ Optional +
+

+ GTK-Doc-1.34.0, Valgrind-3.25.1 (for + tests), and libgphoto2 (for tests) +

+
+
+

+ Installation of Umockdev +

+

+ Install Umockdev by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue as the root user: ninja test. One test needs + to be run in an X session. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D gtk_doc=true: Use this switch + if you have GTK-Doc-1.34.0 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 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 +

+
+
+
+
+
+
+
+

+ utfcpp-4.0.6 +

+
+
+
+
+
+

+ Introduction to utfcpp +

+

+ The utfcpp package contains + a set of include files to provide UTF-8 with C++ in a + Portable Way. +

+

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

+

+ Package Information +

+
+ +
+

+ utfcpp Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of utfcpp +

+

+ Install utfcpp by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_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 Directories: + /usr/include/utf8cpp and + /usr/share/utf8cpp +
+
+
+
+
+
+
+
+

+ Wayland-1.24.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Wayland Dependencies +

+
+ Required +
+

+ libxml2-2.14.5 +

+
+ Optional +
+

+ Doxygen-1.14.0, Graphviz-13.1.2 and + xmlto-0.0.29 (to build the API + documentation) and docbook-xml-4.5, docbook-xsl-nons-1.79.2 and + libxslt-1.1.43 (to build the manual + pages) +

+
+
+

+ Installation of Wayland +

+

+ Install Wayland by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D documentation=false &&
+ninja
+

+ To test the results, issue: env + -u XDG_RUNTIME_DIR ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + documentation=false: 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 +

+
+
+
+
+
+
+
+

+ Wayland-Protocols-1.45 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Wayland-protocols Dependencies +

+
+ Required +
+

+ Wayland-1.24.0 +

+
+
+

+ Installation of Wayland-protocols +

+

+ Install Wayland-protocols by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/wayland-protocols +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ wv + Dependencies +

+
+ Required +
+

+ libgsf-1.14.53 and libpng-1.6.50 +

+
+ Optional +
+

+ libwmf +

+
+
+

+ Installation of wv +

+

+ Install wv by running the + following commands: +

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

+ This package does not have a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 + https://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 +

+
+
+
+
+
+
+
+

+ Xapian-1.4.29 +

+
+
+
+
+
+

+ Introduction to xapian +

+

+ Xapian is an open source search engine library. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://oligarchy.co.uk/xapian/1.4.29/xapian-core-1.4.29.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 17dc9532463bd49695385a5aed1d8da7 +

    +
  • +
  • +

    + Download size: 3.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 146 MB (add 168 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (add 9.1 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Xapian Dependencies +

+
+ Optional +
+

+ Valgrind-3.25.1 (for tests) +

+
+
+

+ Installation of Xapian +

+

+ Install Xapian by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/xapian-core-1.4.29 &&
+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.29, + 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 version of + 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 +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ AAlib Dependencies +

+
+ Optional +
+

+ Xorg + Libraries, Xorg Fonts (runtime), slang-2.3.3, and GPM-1.20.7 +

+
+
+

+ Installation of AAlib +

+

+ Fix a minor problem with the included m4 file: +

+
sed -i -e '/AM_PATH_AALIB,/s/AM_PATH_AALIB/[&]/' aalib.m4
+

+ Change the default X11 font from Xorg Legacy Fonts to + Xorg + Fonts: +

+
sed -e 's/8x13bold/-*-luxi mono-bold-r-normal--13-120-*-*-m-*-*-*/' \
+    -i src/aax.c
+

+ Fix an overuse of some ncurses internal data structures to + allow building this package with ncurses-6.5 or later: +

+
sed 's/stdscr->_max\([xy]\) + 1/getmax\1(stdscr)/' \
+    -i src/aacurses.c
+

+ To allow building this package with GCC-14 or later, add some + missing #include directives and + fix a bad return statement to + make the code C99-compatible. Then regenerate the + configure + script to ensure the C code for probing system features is + C99-compatible as well: +

+
sed -i '1i#include <stdlib.h>'                            \
+    src/aa{fire,info,lib,linuxkbd,savefont,test,regist}.c &&
+sed -i '1i#include <string.h>'                            \
+    src/aa{kbdreg,moureg,test,regist}.c                   &&
+sed -i '/X11_KBDDRIVER/a#include <X11/Xutil.h>'           \
+    src/aaxkbd.c                                          &&
+sed -i '/rawmode_init/,/^}/s/return;/return 0;/'          \
+    src/aalinuxkbd.c                                      &&
+autoconf
+

+ Install AAlib by running the + following commands: +

+
./configure --prefix=/usr             \
+            --infodir=/usr/share/info \
+            --mandir=/usr/share/man   \
+            --with-ncurses=/usr       \
+            --disable-static          &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ babl-0.1.114 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gimp.org/pub/babl/0.1/babl-0.1.114.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: be5ed13a156e0a666695b44892422129 +

    +
  • +
  • +

    + Download size: 316 KB +

    +
  • +
  • +

    + Estimated disk space required: 14 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (Using parallelism=4; + with tests) +

    +
  • +
+
+

+ Babl + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Little + CMS-2.17 and w3m +

+
+
+

+ Installation of Babl +

+

+ Install Babl by running the + following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja 
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install &&
+
+install -v -m755 -d                         /usr/share/gtk-doc/html/babl/graphics &&
+install -v -m644 docs/*.{css,html}          /usr/share/gtk-doc/html/babl          &&
+install -v -m644 docs/graphics/*.{html,svg} /usr/share/gtk-doc/html/babl/graphics
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Exiv2-0.28.5 +

+
+
+
+
+
+

+ Introduction to Exiv2 +

+

+ Exiv2 contains a C++ library + and a command line utility for managing image and video + metadata. +

+

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

+

+ Package Information +

+
+ +
+

+ Exiv2 dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ libssh +

+
+ Optional for documentation +
+

+ Doxygen-1.14.0, Graphviz-13.1.2, and + libxslt-1.1.43 +

+
+
+

+ Installation of Exiv2 +

+

+ Install Exiv2 by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr   \
+      -D CMAKE_BUILD_TYPE=Release    \
+      -D EXIV2_ENABLE_VIDEO=yes      \
+      -D EXIV2_ENABLE_WEBREADY=yes   \
+      -D EXIV2_ENABLE_CURL=yes       \
+      -D EXIV2_BUILD_SAMPLES=no      \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON \
+      -G Ninja ..                    &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + EXIV2_ENABLE_VIDEO=yes: This switch enables + managing video metadata. +

+

+ -D + EXIV2_ENABLE_WEBREADY=yes: This switch enables + managing web image metadata. +

+

+ -D + EXIV2_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. +

+

+ -D + EXIV2_ENABLE_CURL=yes: This switch is necessary + to enable network/http capabilities. +

+

+ -D EXIV2_ENABLE_INIH=no: Use this + switch if you have not installed inih-61. +

+

+ -D EXIV2_ENABLE_BROTLI=no: Use + this switch if you have not installed Brotli-1.1.0. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + exiv2 +
+
+ Installed Library: + libexiv2.so +
+
+ Installed Directories: + /usr/include/exiv2 and + /usr/lib/cmake/exiv2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ exiv2 +

+
+

+ is a utility used to dump Exif data +

+
+
+
+
+
+
+
+

+ FreeType-2.13.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.sourceforge.net/freetype/freetype-2.13.3.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: f3b4432c4212064c00500e1ad63fbc64 +

    +
  • +
  • +

    + Download size: 2.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 33 MB (with additional + documentation) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with additional + documentation) +

    +
  • +
+
+

+ Additional Downloads +

+
+

+ Additional Documentation +

+ +
+

+ FreeType2 Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Brotli-1.1.0 and librsvg-2.61.0 +

+
+ Optional (for documentation) +
+

+ docwriter +

+
+
+

+ Installation of FreeType2 +

+

+ If you downloaded the additional documentation, unpack it + into the source tree using the following command: +

+
tar -xf ../freetype-doc-2.13.3.tar.xz --strip-components=2 -C docs
+

+ Install FreeType2 by running + the following commands: +

+
sed -ri "s:.*(AUX_MODULES.*valid):\1:" modules.cfg &&
+
+sed -r "s:.*(#.*SUBPIXEL_RENDERING) .*:\1:" \
+    -i include/freetype/config/ftoption.h  &&
+
+./configure --prefix=/usr --enable-freetype-config --disable-static &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you downloaded the optional documentation, install it as + the root user: +

+
cp -v -R docs -T /usr/share/doc/freetype-2.13.3 &&
+rm -v /usr/share/doc/freetype-2.13.3/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 https://freetype.org/patents.html + before enabling this option. +

+

+ --enable-freetype-config: This + switch ensure that the man page for freetype-config is + installed. +

+

+ --without-harfbuzz: If + harfbuzz is installed prior + to freetype without + freetype support, use this + switch to avoid a build failure. +

+

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

+
+
+

+ Contents +

+
+
+
+ Installed Program: + freetype-config +
+
+ Installed Library: + libfreetype.so +
+
+ Installed Directories: + /usr/include/freetype2 and + /usr/share/doc/freetype-2.13.3 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Fontconfig-2.17.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Fontconfig Dependencies +

+
+ Required +
+

+ FreeType-2.13.3 +

+
+ Optional +
+

+ bubblewrap-0.11.0 (used by some + tests), cURL-8.15.0 and libarchive-3.8.1 + (both used by some tests for downloading and extracting test + files), JSON-C-0.18, DocBook-utils-0.6.14 and libxml2-2.14.5, texlive-20250308 (or install-tl-unx) +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+

+ Note +

+

+ If you have DocBook Utils + installed and you remove the --disable-docs parameter from + the configure + command below, you must also have SGMLSpm-1.1 and + texlive-20250308 installed, + or the Fontconfig build + will fail. +

+
+
+
+

+ 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.17.1 &&
+make
+

+ To test the results, issue: make check. One test is + known to fail if the kernel does not support user namespaces. + Some tests will download some font files via Internet. +

+

+ Now, as the root user: +

+
make install
+

+ If you did not remove the --disable-docs parameter from + the configure + command, you can install the pre-generated documentation by + using the following commands as the root user: +

+
install -v -dm755 \
+        /usr/share/{man/man{1,3,5},doc/fontconfig-2.17.1} &&
+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/*.{pdf,sgml,txt,html} \
+                                  /usr/share/doc/fontconfig-2.17.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.17.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.17.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 +

+
+
+
+
+
+
+
+

+ FriBidi-1.0.16 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ FriBidi Dependencies +

+
+ Optional +
+

+ c2man (to build + man pages) +

+
+
+

+ Installation of FriBidi +

+

+ Install FriBidi by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gegl-0.4.62 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gimp.org/pub/gegl/0.4/gegl-0.4.62.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 0077654104c84fd54b4b48b92271131c +

    +
  • +
  • +

    + Download size: 5.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 124 MB (Add 4 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (add 0.1 SBU for tests, + both with parallelism=4) +

    +
  • +
+
+

+ gegl + Dependencies +

+
+ Required +
+

+ babl-0.1.114 and JSON-GLib-1.10.6 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1, Cairo-1.18.4, FFmpeg-7.1.1 + (currently broken), gdk-pixbuf-2.42.12, gexiv2-0.14.6, + GTK-Doc-1.34.0, jasper-4.2.8, Little + CMS-2.17, libraw-0.21.4, librsvg-2.61.0, + libspiro-20220722, libtiff-4.7.0, + libwebp-1.6.0, luajit-20250816, + Pango-1.56.4, Poppler-25.08.0, + Ruby-3.4.5, SDL2-2.32.8, v4l-utils-1.30.1, + Vala-0.56.18, lensfun, libnsgif, + libumfpack, + maxflow, MRG, + OpenCL, OpenEXR, poly2tri-c, + source-highlight, + and w3m +

+
+
+

+ Installation of gegl +

+

+ If you are installing over a previous version of gegl, one of the modules will need to be + removed. As the root user, + run the following command to remove it: +

+
rm -f /usr/lib/gegl-0.4/vector-fill.so
+

+ Install gegl by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To run the tests, issue: ninja + test. Fourteen tests are known to fail in the + gegl:ff-load-save portion of + the test suite due to incompatibilities with recent versions + of ffmpeg. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D docs=true: Use this switch to + build and install the documentation (requires GTK-Doc-1.34.0). +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gegl and gegl-imgcmp +
+
+ Installed Libraries: + libgegl-0.4.so, libgegl-npd-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 interfacing with the gegl + library +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ giflib-5.2.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ giflib Dependencies +

+
+ Optional +
+

+ xmlto-0.0.29 (required if you run + make after + make clean) + [1] +

+
+
+

+ Installation of giflib +

+

+ First, prevent the build process from installing XML files + instead of man pages: +

+
patch -Np1 -i ../giflib-5.2.2-upstream_fixes-1.patch
+

+ Next, fix several security vulnerabilities in the 'gif2rgb' + utility: +

+
patch -Np1 -i ../giflib-5.2.2-security_fixes-1.patch
+

+ Next, remove an unnecessary dependency on ImageMagick-7.1.2-1 by moving a + file into an expected location: +

+
cp pic/gifgrid.gif doc/giflib-logo.gif
+

+ Install giflib by running + the following commands: +

+
make
+

+ To test the results, issue: make check. +

+

+ 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.2 &&
+cp -v -R doc/* /usr/share/doc/giflib-5.2.2
+
+
+

+ 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.2 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ [1] Pre-built documentation is present in + this tarball. make will detect that + documentation already exists in the distribution if + make clean + was not run, and will not require the xmlto-0.0.29 dependency. + However, running make + clean will result in the pre-built + documentation being deleted, thus requiring xmlto to build the + documentation if make is run afterwards. +

+
+
+
+
+
+
+

+ Glad-2.0.8 +

+
+
+
+
+
+

+ Introduction to Glad +

+

+ The Glad package contains a + generator for loading Vulkan, OpenGL, EGL, GLES, and GLX + contexts. +

+

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

+

+ Package Information +

+
+ +
+

+ Glad + Dependencies +

+
+ Optional (required to run the tests) +
+

+ pytest-8.4.1, rustc-1.89.0, Xorg Libraries, + glfw, and + WINE +

+
+
+

+ Installation of Glad +

+

+ Install Glad by running the + following commands: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package comes with a test suite, but it cannot be run + without installing the external dependencies listed above. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user glad2
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + glad +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/python3.13/site-packages/glad and + /usr/lib/python3.13/site-packages/glad2-2.0.8.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ glad +

+
+

+ generates loaders for Vulkan, OpenGL, EGL, GLES, + and GLX contexts +

+
+
+
+
+
+
+
+

+ GLM-1.0.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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-1.0.1
+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/include/glm and + /usr/share/doc/glm-1.0.1 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Graphite2 Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ FreeType-2.13.3, + silgraphite to build the comparerender test and + benchmarking tool, and if that is present, and harfBuzz-11.4.1 to add more + functionality to it (this is a circular dependency, you would + need to first build graphite2 without harfbuzz). +

+

+ To build the documentation: asciidoc-10.2.1, Doxygen-1.14.0, + texlive-20250308 (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. +

+
+
+

+ 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
+

+ Fix building this package with CMake 4.0 by updating its + syntax to conform to newer versions of CMake: +

+
sed -i '/cmake_policy(SET CMP0012 NEW)/d' CMakeLists.txt &&
+sed -i 's/PythonInterp/Python3/' CMakeLists.txt          &&
+find . -name CMakeLists.txt | xargs sed -i 's/VERSION 2.8.0 FATAL_ERROR/VERSION 4.0.0/'
+

+ Now fix a problem when building with gcc-15: +

+
sed -i '/Font.h/i #include <cstdint>' tests/featuremap/featuremaptest.cpp
+

+ Install Graphite2 by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr .. &&
+make
+

+ If you wish to build the documentation, issue: +

+
make docs
+

+ To test the results, issue: make test. One test named + nametabletest is known to fail. +

+

+ Now, as the root user: +

+
make install
+

+ If you built the documentation, install, as the root user: +

+
install -v -d -m755 /usr/share/doc/graphite2-1.3.14 &&
+
+cp      -v -f    doc/{GTF,manual}.html \
+                    /usr/share/doc/graphite2-1.3.14 &&
+cp      -v -f    doc/{GTF,manual}.pdf \
+                    /usr/share/doc/graphite2-1.3.14
+
+
+

+ Command Explanations +

+

+ -D CMAKE_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 +

+
+
+
+
+
+
+
+

+ harfBuzz-11.4.1 +

+
+
+
+
+
+

+ Introduction to Harfbuzz +

+

+ The HarfBuzz package + contains an OpenType text shaping engine. +

+

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

+

+ Package Information +

+
+ +
+

+ HarfBuzz Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Cairo-1.18.4 (circular: build cairo and + all its recommended dependencies, including harfbuzz, first, + then rebuild harfbuzz if the cairo backend is needed), + git-2.50.1, GTK-Doc-1.34.0, FontTools + (Python 3 module, for the test suite), ragel, and + wasm-micro-runtime +

+
+

+ 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. +

+
+
+
+

+ Installation of HarfBuzz +

+

+ Install HarfBuzz by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --buildtype=release  \
+      -D graphite2=enabled &&
+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. +

+

+ -D graphite2=enabled: + This switch enables Graphite2 support, which is required for + building texlive-20250308 or LibreOffice-25.8.1.1 with system + harfbuzz. +

+

+ -D docs=disabled: If GTK-Doc-1.34.0 is installed, the + documentation is built and installed. This switch prevents + that. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + hb-info, hb-ot-shape-closure, + hb-shape, hb-subset, and hb-view (only if Cairo is + installed) +
+
+ Installed Libraries: + libharfbuzz.so, + libharfbuzz-cairo.so (only if Cairo is installed), + libharfbuzz-gobject.so, libharfbuzz-icu.so, and + libharfbuzz-subset.so +
+
+ Installed Directories: + /usr/include/harbuzz, + /usr/lib/cmake/harfbuzz, and + /usr/share/gtk-doc/html/harfbuzz (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ hb-info +

+
+

+ is used for gathering information about fonts + installed on the system +

+
+

+ 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-cairo.so +

+
+

+ provides Cairo integration for 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 +

+
+

+ libharfbuzz-subset.so +

+
+

+ provides API functions for performing subsetting + operations on font files +

+
+
+
+
+
+
+
+

+ jasper-4.2.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ jasper Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Freeglut-3.6.0 (required for + jiv), Doxygen-1.14.0 (needed for generating + html documentation), and texlive-20250308 (needed + to regenerate the pdf documentation) +

+
+
+

+ Installation of jasper +

+

+ Install jasper by running + the following commands: +

+
mkdir BUILD &&
+cd    BUILD &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr    \
+      -D CMAKE_BUILD_TYPE=Release     \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON  \
+      -D JAS_ENABLE_DOC=NO            \
+      -D ALLOW_IN_SOURCE_BUILD=YES    \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-4.2.8 \
+      ..  &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D JAS_ENABLE_DOC=NO: + This option disables rebuilding the pdf documentation if + texlive-20250308 is installed. +

+

+ -D + ALLOW_IN_SOURCE_BUILD=YES: This switch allows + building from within the source tree. In our case, this is + needed to allow us to build inside of the BUILD directory + instead of needing to create another directory outside of the + source tree. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + imgcmp, imginfo, jasper, and + jiv +
+
+ Installed Library: + libjasper.so +
+
+ Installed Directories: + /usr/include/jasper and + /usr/share/doc/jasper-4.2.8 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Little CMS-2.17 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Little CMS2 Dependencies +

+
+ Optional +
+

+ libjpeg-turbo-3.0.1 and libtiff-4.7.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libavif-1.3.0 +

+
+
+
+
+
+

+ Introduction to libavif +

+

+ The libavif package contains + a library used for encoding and decoding AVIF files. +

+

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

+

+ Package Information +

+
+ +
+

+ libavif Dependencies +

+
+ Required +
+

+ libaom-3.12.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ gtest, libdav1d, + libyuv, + rav1e, and svt-av1 +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of libavif +

+

+ Install libavif by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D AVIF_CODEC_AOM=SYSTEM     \
+      -D AVIF_BUILD_GDK_PIXBUF=ON  \
+      -D AVIF_LIBYUV=OFF           \
+      -G Ninja .. &&
+ninja
+

+ To test the package (note that it will cause the build system + to download a copy of gtest and build + the test suite with the copy), issue: +

+
cmake .. -D AVIF_GTEST=LOCAL -D AVIF_BUILD_TESTS=ON &&
+ninja && ninja test
+

+ Now, as the root user: +

+
ninja install
+

+ The AV1 format needs to be added to the loaders cache. As the + root user: +

+
gdk-pixbuf-query-loaders --update-cache
+
+
+

+ Command Explanations +

+

+ -D + AVIF_CODEC_AOM=SYSTEM: This switch enables using + the AOM codec. This package is useless without at least one + codec built in. +

+

+ -D + AVIF_BUILD_GDK_PIXBUF=ON: This switch builds the + AVIF loader for applications which use gdk-pixbuf. Remove it + if you have not installed gdk-pixbuf-2.42.12. +

+

+ -D AVIF_LIBYUV=OFF: Use this + switch if you have not installed libyuv. +

+

+ -D AVIF_CODEC_DAV1D=SYSTEM: Use + this switch if you have installed libdav1d and + wish to use it as a codec. +

+

+ -D AVIF_CODEC_RAV1E=SYSTEM: Use + this switch if you have installed rav1e and wish to use it + as a codec. +

+

+ -D AVIF_CODEC_SVT=SYSTEM: Use + this switch if you have installed svt-av1 and + wish to use it as a codec. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libavif.so and + libpixbbufloader-avif.so (in + /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders) +
+
+ Installed Directories: + /usr/include/avif and + /usr/lib/cmake/libavif +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libavif.so +

+
+

+ contains functions that provide a portable C + implementation of the AV1 Image Format +

+
+

+ libpixbufloader-avif.so +

+
+

+ allows applications which use gdk-pixbuf to read + AVIF images +

+
+
+
+
+
+
+
+

+ libexif-0.6.25 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libexif Dependencies +

+
+ Optional (to Build Documentation) +
+

+ Doxygen-1.14.0 and Graphviz-13.1.2 +

+
+
+

+ Installation of libexif +

+

+ Install libexif by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --with-doc-dir=/usr/share/doc/libexif-0.6.25 &&
+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.25. +

+
+
+

+ 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.25 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libexif.so +

+
+

+ contains functions used for parsing, editing, and + saving EXIF data +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Libgxps Dependencies +

+
+ Required +
+

+ GTK-3.24.50, Little CMS-2.17, libarchive-3.8.1, libjpeg-turbo-3.0.1, libtiff-4.7.0, and libxslt-1.1.43 +

+
+ Optional +
+

+ git-2.50.1 + and GTK-Doc-1.34.0 +

+
+
+

+ Installation of Libgxps +

+

+ Install Libgxps by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libjpeg-turbo-3.0.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libjpeg-turbo Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+
+

+ Installation of libjpeg-turbo +

+

+ Install libjpeg-turbo by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=RELEASE         \
+      -D ENABLE_STATIC=FALSE              \
+      -D CMAKE_INSTALL_DEFAULT_LIBDIR=lib \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON      \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/libjpeg-turbo-3.0.1 \
+      .. &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D WITH_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-3.0.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 +

+
+
+
+
+
+
+
+

+ libjxl-0.11.1 +

+
+
+
+
+
+

+ Introduction to libjxl +

+

+ The libjxl package contains + the reference implementation of the JPEG XL image format. +

+

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

+

+ Package Information +

+
+ +
+

+ libjxl Dependencies +

+
+ Required +
+

+ Brotli-1.1.0, CMake-4.1.0, giflib-5.2.2, + highway-1.3.0, Little CMS-2.17, + libjpeg-turbo-3.0.1, and libpng-1.6.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1 (for man pages), + Doxygen-1.14.0 and Graphviz-13.1.2 (for + documentation), Java-24.0.2 (for the JAR), libavif-1.3.0, + libwebp-1.6.0, gtest, OpenEXR, + sjpeg, and + skcms +

+
+
+

+ Installation of libjxl +

+

+ Install libjxl by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr             \
+      -D CMAKE_BUILD_TYPE=Release              \
+      -D BUILD_TESTING=OFF                     \
+      -D BUILD_SHARED_LIBS=ON                  \
+      -D JPEGXL_ENABLE_SKCMS=OFF               \
+      -D JPEGXL_ENABLE_SJPEG=OFF               \
+      -D JPEGXL_ENABLE_PLUGINS=ON              \
+      -D JPEGXL_INSTALL_JARDIR=/usr/share/java \
+      -G Ninja ..                              &&
+ninja
+

+ This package does come with a test suite, but it requires + gtest, which is + not in BLFS. +

+

+ Now, as the root user: +

+
ninja install &&
+gdk-pixbuf-query-loaders --update-cache
+
+
+

+ Command Explanations +

+

+ gdk-pixbuf-query-loaders + --update-cache: This command regenerates the + GDK Pixbuf loader cache so + that it is aware of the JPEG-XL loader. +

+

+ -D BUILD_TESTING=OFF: + This parameter disables the tests because they require + gtest, which is + not in BLFS. If you wish to run the tests and have gtest + installed, remove this parameter. +

+

+ -D + BUILD_SHARED_LIBS=ON: This parameter enables + building shared versions of the libraries instead of static + ones. +

+

+ -D + JPEGXL_ENABLE_SKCMS=OFF: This parameter disables + building support for Skia's skcms since it is not necessary for BLFS + purposes and requires skcms. +

+

+ -D + JPEGXL_ENABLE_SJPEG=OFF: This parameter disables + support for SimpleJPEG since it is not necessary for BLFS + purposes and requires sjpeg. +

+

+ -D + JPEGXL_ENABLE_PLUGINS=ON: This parameter enables + Plugin support, which creates plugins for gdk-pixbuf-2.42.12 if the package is + installed. +

+

+ -D + JPEGXL_INSTALL_JARDIR=/usr/share/java: This + parameter places the JAR file for JPEG XL support in the + correct directory if Java-24.0.2 is installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + benchmark_xl, cjxl, djxl, and + jxlinfo +
+
+ Installed Libraries: + libjxl.so, libjxl_cms.so, + libjxl_extras_codec.so, libjxl_jni.so, libjxl_threads.so, + and libpixbufloader-jxl.so (in + /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders) +
+
+ Installed Directories: + /usr/include/jxl +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ benchmark_xl +

+
+

+ runs performance benchmarks against libjxl +

+
+

+ cjxl +

+
+

+ compresses images into JPEG XL format +

+
+

+ djxl +

+
+

+ decompresses images from JPEG XL format into other + formats +

+
+

+ jxlinfo +

+
+

+ displays information about JPEG XL images +

+
+

+ libjxl.so +

+
+

+ contains the reference implementation of the JPEG + XL standard +

+
+

+ libjxl_cms.so +

+
+

+ contains support for Little CMS in libjxl +

+
+

+ libjxl_extras_codec.so +

+
+

+ contains additional codec support for JPEG XL + images +

+
+

+ libjxl_jni.so +

+
+

+ contains a Java interface to support JPEG XL on + systems where Java-24.0.2 was installed at + build time +

+
+

+ libjxl_threads.so +

+
+

+ contains threading functions for JPEG XL +

+
+

+ libpixbufloader-jxl.so +

+
+

+ contains a loader for gdk-pixbuf to allow it to + load JPEG XL images +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libmng Dependencies +

+
+ Required +
+

+ libjpeg-turbo-3.0.1 and Little + CMS-2.17 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libmypaint Dependencies +

+
+ Required +
+

+ JSON-C-0.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 (to create XML docs), + gegl (0.3 versions + only) and gperftools +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libpng-1.6.50 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+
+
+

+ Installation of libpng +

+

+ If you want to patch libpng to support apng files, apply it + here: +

+
gzip -cd ../libpng-1.6.47-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.50 &&
+cp -v README libpng-manual.txt /usr/share/doc/libpng-1.6.50
+
+
+

+ 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.50 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libqrencode-4.1.1 +

+
+
+
+
+
+

+ Introduction to libqrencode +

+

+ The libqrencode package + provides a fast and compact library for encoding data in a QR + Code symbol, a 2D symbology that can be scanned by handheld + terminals such as a mobile phone with a CCD sensor. +

+

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

+

+ Package Information +

+
+ +
+

+ libqrencode Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 for generating + documentation, and SDL2-2.32.8 for tests +

+
+
+

+ Installation of libqrencode +

+

+ Install libqrencode by + running the following commands: +

+
sh autogen.sh             &&
+./configure --prefix=/usr &&
+make
+

+ If you have installed Doxygen-1.14.0, you can build the + documentation by issuing: +

+
doxygen
+

+ The tests must be run after installing the package. +

+

+ Now, as the root user: +

+
make install
+

+ If you have built the optional documentation, install it as + the root user: +

+
install -vdm 755 /usr/share/doc/libqrencode-4.1.1 &&
+mv html/*        /usr/share/doc/libqrencode-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.32.8. +

+

+ --without-tools: This option + prevents building the qrencode executable, + removing the need for libpng-1.6.50. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libraw-0.21.4 +

+
+
+
+
+
+

+ Introduction to libraw +

+

+ Libraw is a library for + reading RAW files obtained from digital cameras (CRW/CR2, + NEF, RAF, DNG, and others). +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.libraw.org/data/LibRaw-0.21.4.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 26e046621c38c10f56c195dfd29a5661 +

    +
  • +
  • +

    + Download size: 1.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 27 MB +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (Using parallelism=4) +

    +
  • +
+
+

+ libraw Dependencies +

+
+ Recommended +
+ +
+
+

+ Installation of libraw +

+

+ Install libraw by running + the following commands: +

+
./configure --prefix=/usr    \
+            --enable-jpeg    \
+            --enable-jasper  \
+            --enable-lcms    \
+            --disable-static \
+            --docdir=/usr/share/doc/libraw-0.21.4 &&
+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 images. Remove it if you + don't have libjpeg-turbo-3.0.1 installed. +

+

+ --enable-jasper: This + switch enables support for JPEG2000 images. Remove it if you + don't have jasper-4.2.8 installed. +

+

+ --enable-lcms: This + switch enables support for color management. Remove it if you + don't have Little CMS-2.17 installed. +

+

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

+
+
+

+ Contents +

+
+

+ Note +

+

+ All of 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.21.4 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ 4channels +

+
+

+ generates four TIFF files from RAW data, with one + file per channel +

+
+

+ dcraw_half +

+
+

+ emulates running "dcraw -h" (see DCRAW + manpage) +

+
+

+ mem_image +

+
+

+ emulates running "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 running "dcraw [-D] [-T] [-v] [-e] [-4]" + (see DCRAW + manpage) +

+
+

+ dcraw_emu +

+
+

+ is an almost complete dcraw emulator (see DCRAW + manpage) +

+
+

+ half_mt +

+
+

+ emulates running "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 running "dcraw -i [-v]" (see DCRAW + manpage) +

+
+

+ unprocessed_raw +

+
+

+ generates an unprocessed raw image (with masked + pixels and without black subtraction) +

+
+

+ libraw.so +

+
+

+ contains functions used for parsing, editing, and + saving RAW image data. +

+
+
+
+
+
+
+
+

+ librsvg-2.61.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/librsvg/2.61/librsvg-2.61.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 7ed4ffdee87e0d7f356fedfea77744ca +

    +
  • +
  • +

    + Download size: 6.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.1 GB (17 MB installed; + add 385 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (add 0.3 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ librsvg Dependencies +

+
+ Required +
+

+ Cairo-1.18.4, cargo-c-0.10.15, + gdk-pixbuf-2.42.12, and Pango-1.56.4 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+ Recommended +
+ +
+ Optional +
+

+ docutils-0.21.2 (for man pages), + Gi-DocGen-2025.4 (for documentation), + and Xorg Fonts (for tests) +

+
+
+

+ Installation of librsvg +

+

+ First, fix the installation path of the API documentation: +

+
sed -e "/OUTDIR/s|,| / 'librsvg-2.61.0', '--no-namespace-dir',|" \
+    -e '/output/s|Rsvg-2.0|librsvg-2.61.0|'                      \
+    -i doc/meson.build
+

+ Install librsvg by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: +

+
ninja test
+

+ One test, Rust tests (rsvg), is known to fail. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + rsvg-convert +
+
+ Installed Library: + librsvg-2.so and + libpixbufloader-svg.so (installed in + /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders) +
+
+ Installed Directories: + /usr/include/librsvg-2.0 and + /usr/share/doc/librsvg-2.61.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 +

+
+
+
+
+
+
+
+

+ Libspiro-20220722 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libtiff-4.7.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://download.osgeo.org/libtiff/tiff-4.7.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 3a0fa4a270a4a192b08913f88d0cfbdd +

    +
  • +
  • +

    + Download size: 3.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 60 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests) +

    +
  • +
+
+

+ libtiff Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Freeglut-3.6.0 (required for + tiffgt), + libjpeg-turbo-3.0.1, sphinx-8.2.3, + libwebp-1.6.0, JBIG-KIT, and + + LERC +

+
+
+

+ Installation of libtiff +

+

+ Install libtiff by running + the following commands: +

+
mkdir -p libtiff-build &&
+cd       libtiff-build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr ..     \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -G Ninja                            \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.7.0 &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+
+
+

+ 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/lib/cmake/tiff and + /usr/share/doc/tiff-4.7.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 +

+
+
+
+
+
+
+
+

+ libwebp-1.6.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libwebp Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Freeglut-3.6.0 and giflib-5.2.2 +

+
+
+

+ 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: + libsharpyuv.so, 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 the ICC profile +

+
+

+ libwebp.so +

+
+

+ contains the API functions for WebP encoding and + decoding +

+
+
+
+
+
+
+
+

+ mypaint-brushes-1.3.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ mypaint-brushes Dependencies +

+
+ Required at runtime +
+

+ libmypaint-1.6.1 +

+
+
+

+ Installation of mypaint-brushes +

+

+ Install mypaint-brushes by + running the following commands: +

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

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None. +
+
+ Installed Libraries: + None. +
+
+ Installed Directories: + /usr/share/mypaint-data. +
+
+
+
+
+
+
+
+

+ newt-0.52.25 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://releases.pagure.org/newt/newt-0.52.25.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: cca66ed1d8774fb9e3f6a33525de416d +

    +
  • +
  • +

    + Download size: 176 KB +

    +
  • +
  • +

    + Estimated disk space required: 3.0 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+

+ Newt + Dependencies +

+
+ Required +
+

+ popt-1.19 + and slang-2.3.3 +

+
+ Recommended +
+ +
+
+

+ Installation of newt +

+

+ Install newt by running the + following command: +

+
sed -e '/install -m 644 $(LIBNEWT)/ s/^/#/' \
+    -e '/$(LIBNEWT):/,/rv/ s/^/#/'          \
+    -e 's/$(LIBNEWT)/$(LIBNEWTSH)/g'        \
+    -i Makefile.in                          &&
+
+./configure --prefix=/usr      \
+            --with-gpm-support \
+            --with-python=python3.13 &&
+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.13: 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.13/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 +

+
+
+
+
+
+
+
+

+ opencv-4.12.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+
+

+ 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-4.1.0 and libarchive-3.8.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ apache-ant-1.10.15, Doxygen-1.14.0, + Java-24.0.2, NumPy-2.3.2, Protobuf-32.0, + ATLAS, blas, + Cuda, Eigen, + OpenEXR, + GDAL, + lapack, libdc1394, + Threading Building + Blocks (TBB), and VTK - The Visualization Toolkit, +

+
+
+

+ Installation of opencv +

+

+ If you downloaded the optional modules, unpack them now: +

+
tar -xf ../opencv_contrib-4.12.0.tar.gz
+

+ Install opencv by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D ENABLE_CXX11=ON                  \
+      -D BUILD_PERF_TESTS=OFF             \
+      -D WITH_XINE=ON                     \
+      -D BUILD_TESTS=OFF                  \
+      -D ENABLE_PRECOMPILED_HEADERS=OFF   \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON      \
+      -D BUILD_WITH_DEBUG_INFO=OFF        \
+      -D OPENCV_GENERATE_PKGCONFIG=ON     \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -W no-dev  ..                       &&
+make
+

+ The package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D WITH_XINE=ON: This + switch instructs the make procedure to use xine-lib-1.2.13. +

+

+ -D + ENABLE_PRECOMPILED_HEADERS=OFF: This switch is + needed for compatibility with gcc-6.1 and later. +

+

+ -D + OPENCV_GENERATE_PKGCONFIG=ON: This switch tells + the build system to generate a pkg-config file for other + packages to detect and link to the libraries installed by + this package. +

+

+ -D + OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.12.0/modules: + instructs the build system to build additional modules. Some + packages in BLFS (such as gst-plugins-bad-1.26.5) need + these modules to build components that use OpenCV. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + opencv_annotation, + opencv_interactive-calibration, opencv_model_diagnostics, + opencv_version, opencv_visualisation, + opencv_waldboost_detector, and + setup_vars_opencv4.sh +
+
+ Installed Libraries: + libopencv_aruco.so, + libopencv_bgsegm.so, libopencv_bioinspired.so, + libopencv_calib3d.so, libopencv_ccalib.so, + libopencv_core.so, libopencv_datasets.so, + libopencv_dnn_objdetect.so, libopencv_dnn.so, + libopencv_dnn_superres.so, libopencv_dpm.so, + libopencv_face.so, libopencv_features2d.so, + libopencv_flann.so, libopencv_freetype.so, + libopencv_gapi.so, libopencv_hfs.so, + libopencv_highgui.so, libopencv_imgcodecs.so, + libopencv_img_hash.so, libopencv_imgproc.so, + libopencv_intensity_transform.so, + libopencv_line_descriptor.so, libopencv_mcc.so, + libopencv_ml.so, libopencv_objdetect.so, + libopencv_optflow.so, libopencv_phase_unwrapping.so, + libopencv_photo.so, libopencv_plot.so, + libopencv_quality.so, libopencv_rapid.so, + libopencv_reg.so, libopencv_rgbd.so, + libopencv_saliency.so, libopencv_shape.so, + libopencv_signal.so, libopencv_stereo.so, + libopencv_stitching.so, libopencv_structured_light.so, + libopencv_superres.so, libopencv_surface_matching.so, + libopencv_text.so, libopenct_tracking.so, + libopencv_video.so, libopencv_videoio.so, + libopencv_videostage.so, libopencv_wechat_qrcode.so, + libopencv_xfeatures2d.so, libopencv_ximgproc.so, + libopencv_xobjdetect.so, and libopencv_xphoto.so +
+
+ Installed Directories: + /usr/include/opencv4, + /usr/lib/cmake/opencv4, + /usr/lib/python3.13/site-packages/cv2, + /usr/share/licenses/opencv4, /usr/share/opencv4, and + /usr/share/java/opencv4 +
+
+
+
+
+
+
+
+

+ OpenJPEG-2.5.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ OpenJPEG Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ git-2.50.1 + (for tests), Little CMS-2.17, libpng-1.6.50, libtiff-4.7.0, and Doxygen-1.14.0 (to + build the API documentation) +

+
+
+

+ Installation of OpenJPEG +

+

+ Install OpenJPEG by running + the following commands: +

+
mkdir -v build &&
+cd       build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      -D BUILD_STATIC_LIBS=OFF ..  &&
+make
+

+ If you wish to run the tests, some additional files are + required. Download these files and run the tests using the + following commands, but note that 8 tests are known to fail: +

+
git clone https://github.com/uclouvain/openjpeg-data.git --depth 1 &&
+OPJ_DATA_ROOT=$PWD/openjpeg-data cmake -D BUILD_TESTING=ON ..      &&
+make                                                               &&
+make test
+

+ Now, as the root user: +

+
make install &&
+cp -rv ../doc/man -T /usr/share/man
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + opj_compress, opj_decompress, and + opj_dump +
+
+ Installed Libraries: + libopenjp2.so +
+
+ Installed Directories: + /usr/include/openjpeg-2.5 and + /usr/lib/openjpeg-2.5 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Pixman-0.46.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.cairographics.org/releases/pixman-0.46.4.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: c08173c8e1d2cc79428d931c13ffda59 +

    +
  • +
  • +

    + Download size: 808 KB +

    +
  • +
  • +

    + Estimated disk space required: 28 MB (With tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (Using parallelism=4; + with tests) +

    +
  • +
+
+

+ Pixman Dependencies +

+
+ Optional +
+

+ libpng-1.6.50 and GTK-3.24.50 (for tests and + demos) +

+
+
+

+ Installation of Pixman +

+

+ Install Pixman by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Poppler-25.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://poppler.freedesktop.org/poppler-25.08.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 580516efcd6b6d9f06961c6c2ff334da +

    +
  • +
  • +

    + Download size: 1.9 MB +

    +
  • +
  • +

    + Estimated disk space required: 79 MB (with Qt6 library + and tests) +

    +
  • +
  • +

    + Estimated build time: 1.0 SBU (with parallelism=4, + tests, and Qt6 library) +

    +
  • +
+
+

+ Additional Downloads +

+
+

+ Poppler Encoding Data +

+ +
+

+ 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-4.1.0, Fontconfig-2.17.1, and GLib-2.84.4 + (with GObject Introspection) +

+
+ Recommended +
+ +
+ Optional +
+

+ cURL-8.15.0, gdk-pixbuf-2.42.12, git-2.50.1 (for + downloading test files), GTK-Doc-1.34.0 and GTK-3.24.50 +

+
+
+

+ Installation of Poppler +

+

+ Now, install Poppler by + running the following commands: +

+
mkdir build                         &&
+cd    build                         &&
+
+cmake -D CMAKE_BUILD_TYPE=Release   \
+      -D CMAKE_INSTALL_PREFIX=/usr  \
+      -D TESTDATADIR=$PWD/testfiles \
+      -D ENABLE_QT5=OFF             \
+      -D ENABLE_UNSTABLE_API_ABI_HEADERS=ON \
+      -G Ninja ..                   &&
+ninja
+

+ In order to run the test suite, some testcases are needed and + can be obtained only from a git repository. The command to + download them is: git clone + --depth 1 https://gitlab.freedesktop.org/poppler/test.git + testfiles. Then issue: LC_ALL=en_US.UTF-8 ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+

+ To install the documentation, run the following commands as + root: +

+
install -v -m755 -d           /usr/share/doc/poppler-25.08.0 &&
+cp -vr ../glib/reference/html /usr/share/doc/poppler-25.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.12.tar.gz &&
+cd poppler-data-0.4.12
+

+ Now, as the root user: +

+
make prefix=/usr install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply a higher level of compiler optimizations. +

+

+ -D + TESTDATADIR=$PWD/testfiles: Tells the test + programs where the auxiliary files are located. +

+

+ -D ENABLE_QT5=OFF: + This switch is needed to prevent an error when Qt5 is not + installed. +

+

+ -D + ENABLE_UNSTABLE_API_ABI_HEADERS=ON: Installs some + old Xpdf headers required by + certain programs. +

+

+ -D ENABLE_GTK_DOC=ON: Use this + parameter if GTK-Doc is installed and you wish to rebuild and + install the API documentation. +

+

+ -D ENABLE_QT6=OFF: Use this + parameter if Qt-6.9.2 is not installed. +

+

+ -D ENABLE_BOOST=OFF: Use this + parameter if you have not installed boost (the Splash backend for Qt6 + recommends boost). +

+

+ -D ENABLE_NSS3=OFF: Use this + parameter if you have not installed nss. +

+

+ -D ENABLE_GPGME=OFF: Use this + parameter if you have not installed gpgme. +

+

+ -D ENABLE_LIBTIFF=OFF: Use this + parameter if you have not installed libtiff. +

+

+ LC_ALL=en_US.UTF-8 ninja + 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 (optionally) + libpoppler-qt6.so +
+
+ Installed Directories: + /usr/include/poppler, + /usr/share/poppler, and + /usr/share/doc/poppler-25.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-qt6.so +

+
+

+ is a wrapper library used to interface the PDF + rendering functions with Qt6 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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 +
+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Qpdf-12.2.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Qpdf + Dependencies +

+
+ Required +
+

+ libjpeg-turbo-3.0.1 +

+
+ Optional +
+

+ ghostscript-10.05.1, GnuTLS-3.8.10, libtiff-4.7.0, sphinx-8.2.3 + with sphinx_rtd_theme-3.0.2, and + texlive-20250308 or install-tl-unx +

+
+
+

+ Installation of Qpdf +

+

+ Install Qpdf by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_STATIC_LIBS=OFF     \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/qpdf-12.2.0 \
+      .. &&
+make
+

+ To test the results, issue: ctest. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + fix-qdf, qpdf, and + zlib-flate +
+
+ Installed Library: + libqpdf.so +
+
+ Installed Directories: + /usr/lib/cmake/qpdf, + /usr/include/qpdf, and /usr/share/doc/qpdf-12.2.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+
+
+

+ Installation of sassc +

+

+ First, build the library: +

+
tar -xf ../libsass-3.6.6.tar.gz &&
+pushd libsass-3.6.6 &&
+
+autoreconf -fi &&
+
+./configure --prefix=/usr --disable-static &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ Build the command line wrapper: +

+
popd &&
+autoreconf -fi &&
+
+./configure --prefix=/usr &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ webp-pixbuf-loader-0.2.7 +

+
+
+
+
+
+

+ Introduction to webp-pixbuf-loader +

+

+ The webp-pixbuf-loader + package contains a library that allows gdk-pixbuf to load and + process webp images. +

+

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

+

+ Package Information +

+
+ +
+

+ webp-pixbuf-loader Dependencies +

+
+ Required +
+

+ gdk-pixbuf-2.42.12 and libwebp-1.6.0 +

+
+
+

+ Installation of webp-pixbuf-loader +

+

+ Install webp-pixbuf-loader + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+

+ The webp format needs to be added to the loaders cache: +

+
gdk-pixbuf-query-loaders --update-cache
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ gdk-pixbuf-query-loaders + --update-cache: This command updates the + gdk-pixbuf loader cache so that it knows the webp loader has + been installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libpixbufloader-webp.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libpixbufloader-webp.so +

+
+

+ contains functions that allow gdk-pixbuf to load + webp images +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ WOFF2 Dependencies +

+
+ Required +
+

+ Brotli-1.1.0 and CMake-4.1.0 +

+
+
+

+ Installation of WOFF2 +

+

+ First, fix a problem when building with gcc-15: +

+
sed -i '/output.h/i #include <cstdint>' src/woff2_out.cc
+

+ Install WOFF2 by running the + following commands: +

+
mkdir out                                 &&
+cd    out                                 &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON ..   &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ zxing-cpp-2.3.0 +

+
+
+
+
+
+

+ Introduction to zxing-cpp +

+

+ The zxing-cpp package + provides an open-source, multi-format linear/matrix barcode + image processing library. +

+

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

+

+ Package Information +

+
+ +
+

+ zxing-cpp dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ googletest +

+
+
+

+ Installation of zxing-cpp +

+

+ Install zxing-cpp by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D ZXING_EXAMPLES=OFF        \
+      -W no-dev ..                 &&
+make
+

+ Tests require an external package. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libZXing.so +
+
+ Installed Directories: + /usr/include/ZXing and + /usr/lib/cmake/ZXing +
+
+
+
+
+
+
+
+
+

+ [1] Pre-built documentation is present in + this tarball. make will detect that + documentation already exists in the distribution if + make clean was + not run, and will not require the xmlto-0.0.29 dependency. + However, running make + clean will result in the pre-built + documentation being deleted, thus requiring xmlto to build the + documentation if make is run afterwards. +

+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ Asciidoctor-2.0.23 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Asciidoctor Dependencies +

+
+ Required +
+

+ Ruby-3.4.5 +

+
+
+

+ Installation of Asciidoctor +

+
+

+ Note +

+

+ When building this package, the following message may + appear: +

+
fatal: not a git repository (or any of the parent directories): .git
+

+ . This is normal, and the package will continue building + past this point. +

+
+

+ Build the Ruby gem: +

+
gem build asciidoctor.gemspec
+

+ The test suite needs many Ruby gems beyond the scope of BLFS. +

+

+ Now, as the root user: +

+
gem install asciidoctor-2.0.23.gem &&
+install -vm644 man/asciidoctor.1 /usr/share/man/man1
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + asciidoctor +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/ruby/gems/3.4.0/gems/asciidoctor-2.0.23 + and + /usr/lib/ruby/gems/3.4.0/doc/asciidoctor-2.0.23 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ asciidoctor +

+
+

+ converts AsciiDoc source files to HTML, DocBook, + and other formats +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Bogofilter Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ lmdb-0.9.33, xmlto-0.0.29, + Berkeley DB (deprecated), QDBM and TokyoCabinet +

+
+

+ Note +

+

+ If you do not install the recommended gsl-2.8 package then a + statically linked shipped version will be used instead. +

+
+
+
+

+ 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 \
+            --with-database=sqlite3      &&
+make
+

+ To test the results, issue make + check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --with-database=sqlite3: This + switch makes Bogofilter use SQLite-3.50.4 as the database, + instead of Berkeley DB. +

+

+ --with-database={lmdb,qdbm,tokyocabinet}: + This switch also allows to use lmdb, qdbm, or tokyocabinet as + the database. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of Compface +

+

+ First, fix the configure script so that it's C99 compatible: +

+
autoreconf
+

+ Next, fix a build failure that occurs with GCC 14: +

+
sed -e '/compface.h/a #include <unistd.h>' \
+    -i cmain.c                             \
+    -i uncmain.c
+

+ 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.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.a +

+
+

+ allows the compression and decompression algorithms + to be used in other programs such as MTAs +

+
+
+
+
+
+
+
+

+ desktop-file-utils-0.28 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Desktop File Utils Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+ Optional +
+

+ Emacs-30.2 +

+
+
+

+ 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 setup --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 +

+
+
+
+
+
+
+
+

+ dos2unix-7.5.2 +

+
+
+
+
+
+

+ Introduction to dos2unix +

+

+ The dos2unix package + contains an any-to-any text format converter. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of dos2unix +

+

+ Build dos2unix by running + the following commands: +

+
make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + dos2unix, mac2unix, unix2dos, and + unix2mac +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/dos2unix-7.5.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ dos2unix +

+
+

+ converts plain text files in DOS format to Unix + format +

+
+

+ mac2unix +

+
+

+ converts plain text files in Mac format to Unix + format +

+
+

+ unix2dos +

+
+

+ converts plain text files in Unix format to DOS + format +

+
+

+ unix2mac +

+
+

+ converts plain text files in Unix format to Mac + format +

+
+
+
+
+
+
+
+

+ glslc from shaderc-2025.3 +

+
+
+
+
+
+

+ Introduction to glslc +

+

+ The glslc program is + Google's command line compiler for OpenGL Shading + Language/High Level Shading Language (GLSL/HLSL) to Standard + Portable Intermediate Representation (SPIR-V). +

+

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

+

+ Package Information +

+
+ +
+

+ Glslc Dependencies +

+
+ Required +
+

+ CMake-4.1.0, Glslang-15.4.0, and + SPIRV-Tools-1.4.321.0 +

+
+
+

+ Installation of glslc +

+

+ First, allow building with system Glslang-15.4.0 and + SPIRV-Tools-1.4.321.0: +

+
sed '/build-version/d'   -i glslc/CMakeLists.txt            &&
+sed '/third_party/d'     -i CMakeLists.txt                  &&
+sed 's|SPIRV|glslang/&|' -i libshaderc_util/src/compiler.cc &&
+
+echo '"2025.3"' > glslc/src/build-version.inc
+

+ Now install glslc by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D SHADERC_SKIP_TESTS=ON     \
+      -G Ninja ..
+ninja
+

+ Now, as the root user: +

+
install -vm755 glslc/glslc /usr/bin
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + glslc +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ glslc +

+
+

+ compiles OpenGL Shading Language/High Level Shading + Language (GLSL/HLSL) shaders to SPIR-V +

+
+
+
+
+
+
+
+

+ Graphviz-13.1.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Graphviz Dependencies +

+
+

+ Note +

+

+ Basic usage of Graphviz + does not require any libraries out of what is found in the + LFS book. Its “core” rendering engine is able to + generate several graphic formats, such as Postscript, SVG, + VML, .fig, and Tk. Those formats can be converted to almost + any other format using tools from packages such as + ImageMagick-7.1.2-1. The + dependencies below add the ability to generate graph images + in bitmap format, to display the graph image on screen, to + edit a graph by viewing the resulting image directly, or to + view large graphs. Since Graphviz is a dependency of several + other packages in this book, it is suggested that you first + build it without any dependencies, and then rebuild it when + you have built enough packages to suit your needs. +

+
+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended, for needed bitmap + outputs +
+ +
+ Optional, for additional bitmap + outputs +
+

+ AAlib-1.4rc5 (for outputting images in + ASCII art), Cups-2.4.12 (for formatting graphs for + printing), Qt-6.9.2, and WebKitGTK-2.48.5 +

+

+ Adding GTK+-2 + with libjpeg-turbo-3.0.1 adds support + for JPEG, BMP, TIF, and ICO formats, and allows displaying + the image in a GTK+ window +

+

+ GD Library + may be used instead of Pango. It adds the ability to generate + images in GIF, VRML, and GD formats, but Pango provides better outputs for the + other formats, and is needed for displaying images +

+

+ Other formats may be added with libwebp-1.6.0, DevIL, + libLASi, and + glitz +

+
+ Optional (to load graphics that may + be displayed inside the nodes of a graph) +
+

+ libgs.so from ghostscript-10.05.1, librsvg-2.61.0, and Poppler-25.08.0 +

+
+ Optional (to build more tools) +
+

+ libANN and Freeglut-3.6.0 (with GtkGLExt and + libGTS for building the + smyrna large + graph viewer, which is considered experimental) +

+
+ Optional (to build language + bindings) +
+

+ SWIG-4.3.1 (SWIG must be installed or no bindings + will be built), GCC-15.2.0 (for the go compiler), Guile-3.0.10, + OpenJDK-24.0.2, Lua-5.4.8, PHP-8.4.11, Ruby-3.4.5, Tk-8.6.16, and + R +

+
+ Optional (building tools) +
+

+ Criterion + (framework for tests) and + Electric Fence +

+
+ Optional (for building the pdf + documentation) +
+

+ ghostscript-10.05.1 (for the + ps2pdf command) +

+
+
+

+ Installation of Graphviz +

+

+ Install Graphviz by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr   \
+      -D CMAKE_BUILD_TYPE=Release    \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON \
+      ..                             &&
+
+sed -i '/GZIP/s/:.*$/=/' CMakeCache.txt &&
+
+make
+

+ This package does not come with a test suite that provides + meaningful results. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ sed ... + CMakeCache.txt: This command is needed to + prevent compressing the packages's man pages. +

+
+
+

+ Configuring Graphviz +

+
+
+
+
+

+ 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, dijkstra, dot, dot2gxl, dot_builtins, + dot_sandbox, edgepaint, fdp, gc, gml2gv, graphml2gv, + gv2gml, gv2gxl, gvcolor, gvedit, gvgen, gvmap, gvmap.sh, + gvpack, gvpr, gxl2dot, gxl2gv, mm2gv, neato, nop, osage, + patchwork, prune, sccmap, sfdp, tred, twopi, unflatten, + and vimdot +
+
+ Installed Libraries: + libcdt.so, libcgraph.so, libgvc.so, + libgvpr.so, libpathplan.so, libxdot.so, and several + plugins in /usr/lib/graphviz/. +
+
+ Installed Directories: + /usr/include/graphviz, + /usr/lib/graphviz, /usr/lib/cmake/graphviz, 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 a graph in DOT format as input, finds node + clusters, and then augments the graph with this + information +

+
+

+ 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 +

+
+

+ dot_sandbox +

+
+

+ is a wrapper around graphviz. It aims to provide a + safe environment for the processing of untrusted + input graphs and command line options. +

+
+

+ 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 +

+
+

+ 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. It takes any graph in DOT + format as input +

+
+

+ patchwork +

+
+

+ draws clustered graphs using a squarified treemap + layout. It takes any graph in DOT format as input +

+
+

+ 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 command + line parsing interfaces, 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 specified by the xdot language +

+
+
+
+
+
+
+
+

+ GTK-Doc-1.34.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GTK-Doc Dependencies +

+
+ Required +
+

+ docbook-xml-4.5, docbook-xsl-nons-1.79.2, + GLib-2.84.4, itstool-2.0.7, libxslt-1.1.43, and Pygments-2.19.2 +

+
+ Optional +
+

+ For tests: dblatex or + fop-2.11 + (XML PDF support), Which-2.23, and Python + modules lxml-6.0.0, parameterized, + and yelp-tools +

+
+

+ Note +

+

+ The optional python modules above can be easily installed + with the pip3 + command. +

+
+
+
+

+ Installation of GTK-Doc +

+

+ Install GTK-Doc by running + the following commands: +

+
mkdir -p build &&
+cd       build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ The test suite will hang if the package (or a previous + version) is not already installed. +

+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: ninja test. 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 +

+
+
+
+
+
+
+
+

+ Highlight-4.16 +

+
+
+
+
+
+

+ Introduction to Highlight +

+

+ Highlight is a utility that + converts source code to formatted text with syntax + highlighting. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): http://www.andre-simon.de/zip/highlight-4.16.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 56530aebcc69edbde9ea1a8b9e95d919 +

    +
  • +
  • +

    + Download size: 1.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 24 MB (with gui) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (Using parallelism=4; + with gui) +

    +
  • +
+
+

+ Highlight Dependencies +

+
+ Required +
+

+ Boost-1.89.0 and Lua-5.4.8 +

+
+ Optional +
+

+ Qt-6.9.2 (to + build the GUI front-end) +

+
+
+

+ 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 qt6 GUI + front-end, run the following command: +

+
make doc_dir=/usr/share/doc/highlight-4.16/ 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.16/ 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.16/: + 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.16, and + /usr/share/highlight +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ highlight +

+
+

+ is a universal source code to formatted text + converter +

+
+

+ highlight-gui +

+
+

+ is the qt6 + interface to highlight. +

+
+
+
+
+
+
+
+

+ ibus-1.5.32 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/ibus/ibus/archive/1.5.32/ibus-1.5.32.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 0a5b8f8a2b593846038be558ef53b971 +

    +
  • +
  • +

    + Download size: 1.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 57 MB (add 1 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (Using parallelism=4; add + 1.4 SBU for tests) +

    +
  • +
+
+

+ Additional Downloads +

+
+ +
+

+ ibus + Dependencies +

+
+ Required +
+

+ ISO Codes-4.18.0, libarchive-3.8.1 (for extracting the + Unicode Character Database), and Vala-0.56.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for generating API + documentation), D-Bus Python-1.4.0 and PyGObject-3.52.3 (both to build the + Python support library), libxkbcommon-1.11.0, + Wayland-1.24.0 (both to build the + Wayland support programs), EmojiOne, and libdbusmenu +

+
+
+

+ Installation of ibus +

+

+ First, install the Unicode Character Database as the + root user: +

+
mkdir -p               /usr/share/unicode/ucd &&
+unzip -o ../UCD.zip -d /usr/share/unicode/ucd
+

+ Fix an issue with deprecated schema entries: +

+
sed -e 's@/desktop/ibus@/org/freedesktop/ibus@g' \
+    -i data/dconf/org.freedesktop.ibus.gschema.xml
+

+ If GTK-Doc-1.34.0 is not installed, remove + the references to it: +

+
if ! [ -e /usr/bin/gtkdocize ]; then
+  sed '/docs/d;/GTK_DOC/d' -i Makefile.am configure.ac
+fi
+

+ Install ibus by running the + following commands: +

+
SAVE_DIST_FILES=1 NOCONFIGURE=1 ./autogen.sh &&
+
+PYTHON=python3                     \
+./configure --prefix=/usr          \
+            --sysconfdir=/etc      \
+            --disable-python2      \
+            --disable-appindicator \
+            --disable-emoji-dict   \
+            --disable-gtk2         \
+            --disable-systemd-services &&
+make
+

+ To test the results, issue: make -k check. The test + named ibus-compose fails because it uses some locales not + installed in LFS. The xkb-latin-layouts test is also known to + fail on some systems. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --disable-appindicator: This + switch disables use of libdbusmenu. Omit if you installed the + optional dependency. +

+

+ --disable-emoji-dict: + This switch disables the use of emoticon dictionaries. Omit + if you installed the optional package. +

+

+ --disable-gtk2: This + switch removes the dependency on GTK+-2. +

+

+ --disable-gtk4: This switch + disables building the GTK 4 + immodule. Use it if you don't want to install GTK 4. +

+

+ --enable-python-library: This + switch enables building the Python support library. Use it if you + have installed the optional Python modules. +

+

+ --enable-wayland: This switch + enables building the Wayland + support programs. It's automatically enabled if both + libxkbcommon-1.11.0 and Wayland-1.24.0 are installed. +

+

+ NOCONFIGURE=1: Prevent + autogen.sh from + running the generated configure script. We'll run + the script manually instead of relying on autogen.sh to run it, + because autogen.sh would set + -fsanitize=address + -fsanitize=leak in CFLAGS + running configure, but those + compiler options are not suitable for productive use and they + may also cause a build failure. +

+

+ PYTHON=python3: This environment + variable makes the configure script look for + Python 3. Use it if you want + to build the Python 3 + support library. +

+

+ SAVE_DIST_FILES=1: This + environment variable makes the autogen.sh script save some + pre-generated header files instead of overwriting them when + it is run. This prevents build failures when generating + ibusemojigen.h. +

+

+ --enable-gtk-doc: Use this + parameter if GTK-Doc is + installed and you wish to rebuild and install the API + documentation. +

+
+
+

+ Configuring Ibus +

+

+ If GTK+-3 is installed and --disable-gtk3 is not used, the ibus IM + module for GTK+-3 will be installed. As the root user, update a cache file of GTK+-3 + so the GTK-based applications can find the newly installed IM + module and use ibus as an input method: +

+
gtk-query-immodules-3.0 --update-cache
+

+ The command above updates the cache file for GTK+-3. GTK-4 + does not require a cache file for IM modules. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ ImageMagick-7.1.2-1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.imagemagick.org/archive/releases/ImageMagick-7.1.2-1.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: beddceb1c2036007b72671fc1039c5f8 +

    +
  • +
  • +

    + Download size: 10 MB +

    +
  • +
  • +

    + Estimated disk space required: 191 MB, 45 MB installed + (with typical dependencies; add 26 MB for checks) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (with typical + dependencies; add 0.5 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, you can download it from + the BLFS package server at Oregon State University: + + https://ftp.osuosl.org/pub/blfs/conglomeration/ImageMagick/. +

+
+

+ ImageMagick Dependencies +

+
+ Recommended +
+ +

+ 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 +
+

+ 7zip-25.01 (LZMA), Clang from LLVM-20.1.8, + Cups-2.4.12, cURL-8.15.0, FFmpeg-7.1.1, fftw-3.3.10, + SANE-1.4.0, Wget-1.25.0, xdg-utils-1.2.1, + xterm-401, Dmalloc, + Electric Fence and PGP or GnuPG-2.4.8 (you'll + have to do some hacking to use GnuPG), Profiles +

+
+ Optional Graphics Libraries +
+

+ jasper-4.2.8, Little CMS-2.17, + libgxps-0.3.2, libjpeg-turbo-3.0.1, libjxl-0.11.1, libpng-1.6.50, libraw-0.21.4 + (for dng files, needs the thread-safe libraw_r), librsvg-2.61.0, libtiff-4.7.0, libwebp-1.6.0, OpenJPEG-2.5.3, + Pango-1.56.4, DjVuLibre, FlashPIX + (libfpx), FLIF, + JBIG-KIT, + libheif with + libde265 (both + needed if converting macOS heic images), libraqm, + Liquid + Rescale, OpenEXR, and RALCGM + (or ralcgm) +

+
+ Optional Graphics Utilities +
+

+ Dejavu fonts, ghostscript-10.05.1, + Gimp-3.0.4, Graphviz-13.1.2, Inkscape-1.4.2, + Blender, + corefonts, GhostPCL, + Gnuplot, + POV-Ray, + and Radiance +

+
+ Optional Conversion Tools +
+

+ Enscript-1.6.6, Potrace-1.16, texlive-20250308 (or install-tl-unx) AutoTrace, GeoExpress Command + Line Utilities, AKA MrSID Utilities (binary package), + hp2xx, libwmf, + UniConvertor, and Utah + Raster Toolkit (or URT-3.1b) +

+
+
+

+ 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.2 install
+

+ To test the installation, issue: make check. Note that the + EPS, PS, and PDF tests require a working Ghostscript. One test in 'make check' + needs “Helvetica” from “Ghostscript Standard + Fonts,” which are optionally installed in + ghostscript-10.05.1 - 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-fftw: Enables support for + the FFTW shared library. +

+

+ --with-rsvg: Enables support for + the librsvg library. +

+

+ --with-autotrace: Enables support + for the Autotrace library. +

+

+ --with-wmf: Enables support for + the libwmf library. +

+

+ --with-gvc: Enables support for + GraphViz. +

+

+ --with-security-policy=open|limited|secure|websafe: + If you wish to enforce a policy other than the default 'open' + see www/security-policy.html in + the source for details. +

+

+ --with-windows-font-dir= <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.2, + /usr/lib/perl5/site_perl/5.42/{,auto}/Image/Magick, + /usr/share/doc/ImageMagick-7.1.2, 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 +

+
+

+ converts between image formats as well as resizes + an image, blurs, crops, despeckles, dithers, draws + on, flips, joins, re-samples, and much more +

+
+

+ Magick{++,Core,Wand}-config +

+
+

+ shows 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 for reading, manipulating, and writing 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 +

+
+
+
+
+
+
+
+

+ ISO Codes-4.18.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of ISO Codes +

+

+ Install ISO Codes by running + the following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install LN_S='ln -sfn'
+
+
+

+ Command Explanations +

+

+ LN_S='ln -sfn': This + override ensures the installed symlinks correctly recreated + in case we are upgrading or reinstalling the package. It's + unneeded but harmless when installing the package onto the + system for the first time. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/iso-codes, + /usr/share/xml/iso-codes +
+
+
+
+
+
+
+
+

+ lsof-4.99.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ lsof + Dependencies +

+
+ Required +
+

+ libtirpc-1.3.6 +

+
+ Optional +
+

+ Nmap-7.98 + (with a symbolic link nc pointing to ncat in /usr/bin; used in tests) +

+
+
+

+ Kernel + Configuration +

+

+ To run the tests, the following option should be enabled in + the kernel configuration: +

+
General setup --->
+  [*] POSIX Message Queues                                        [POSIX_MQUEUE]
+
+
+

+ Installation of lsof +

+

+ Install lsof by running the + following commands: +

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

+ The tests should be run as the root user. They require that the POSIX + message queues are enabled in the kernel, and that Nmap-7.98 be + installed with a symbolic link /usr/bin/nc pointing to ncat. +

+
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: + lsof +
+
+ Installed Libraries: + liblsof.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lsof +

+
+

+ lists open files for running processes +

+
+

+ liblsof.so +

+
+

+ contains an interface for applications to list open + files +

+
+
+
+
+
+
+
+

+ pinentry-1.3.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ PIN-Entry Dependencies +

+
+ Required +
+

+ libassuan-3.0.2 and libgpg-error-1.55 +

+
+ Optional +
+

+ Emacs-30.2, FLTK-1.4.4, Gcr-4.4.0.1 (or Gcr-3.41.2), + KDE + Frameworks-6.17.0, libsecret-0.21.7, and efl +

+
+
+

+ Installation of PIN-Entry +

+

+ First, make configure consistent with + fltk-1.4.1: +

+
sed -i "/FLTK 1/s/3/4/" configure   &&
+sed -i '14456 s/1.3/1.4/' configure
+

+ 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-gnome3=yes/no: + Default is yes. This option uses Gcr-4.4.0.1 (or Gcr-3.41.2 if the former is not + installed) for the pinentry dialog. +

+

+ --enable-pinentry-tty: Default + is 'maybe'. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + pinentry (symlink), + pinentry-curses, pinentry-emacs, pinentry-fltk, + pinentry-gnome3, 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-qt +

+
+

+ is a Qt4 or 5 + PIN-Entry helper + program +

+
+

+ pinentry-tty +

+
+

+ is a tty + PIN-Entry helper + program +

+
+
+
+
+
+
+
+

+ Screen-5.0.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/screen/screen-5.0.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: fb5e5dfc9353225c2d6929777344b1a6 +

    +
  • +
  • +

    + Download size: 880 KB +

    +
  • +
  • +

    + Estimated disk space required: 8.9 MB +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU +

    +
  • +
+
+

+ Screen Dependencies +

+
+ Optional +
+

+ Linux-PAM-1.7.1 +

+
+
+

+ Installation of Screen +

+

+ Fix an issue causing the info page fail to build: +

+
sed 's/\([a-z]\)@opensuse/\1@@opensuse/' -i doc/screen.texinfo
+

+ Install Screen by running + the following commands: +

+
./configure --prefix=/usr                   \
+            --infodir=/usr/share/info       \
+            --mandir=/usr/share/man         \
+            --disable-pam                   \
+            --enable-socket-dir=/run/screen \
+            --with-pty-group=5              \
+            --with-system_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 +

+

+ --disable-pam: This + option removes a build dependency on Linux-PAM. Remove this + option if you want PAM support. +

+

+ --enable-socket-dir=/run/screen: + This option places the per-user sockets in a standard + location. +

+

+ --with-system_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-5.0.1 +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/screen and + /run/screen +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ screen +

+
+

+ is a terminal multiplexor with VT100/ANSI terminal + emulation +

+
+
+
+
+
+
+
+

+ shared-mime-info-2.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ Shared Mime Info Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and libxml2-2.14.5 +

+
+ Optional +
+

+ xmlto-0.0.29 +

+
+
+

+ Installation of Shared Mime Info +

+

+ Install Shared Mime Info by + running the following commands: +

+

+ If you wish to run the test suite, you must first extract the + xdgmime tarball into the + current directory, and compile it so that meson can find it: +

+
tar -xf ../xdgmime.tar.xz &&
+make -C xdgmime
+

+ Now build the package: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D update-mimedb=true .. &&
+ninja
+

+ If you have followed the instructions above to build + xdgmime, to test the result + issue ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D + update-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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/sharutils/sharutils-4.15.2.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 5975ce21da36491d7aa6dc2b0d9788e0 +

    +
  • +
  • +

    + Download size: 1.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 22 MB (with the test + suite) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (with the test suite) +

    +
  • +
+
+

+ Additional Downloads +

+ +
+
+

+ Installation of Sharutils +

+

+ First, fix issues exposed by current GCC versions: +

+
patch -Np1 -i ../sharutils-4.15.2-consolidated-1.patch
+

+ Install Sharutils by running + the following commands: +

+
autoreconf -fiv                                         &&
+./configure --prefix=/usr --disable-dependency-tracking &&
+make
+

+ To test the results, issue make + check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --disable-dependency-tracking: + This switch is used to disable unneeded code in the build + system. +

+

+ --with-openssl: This + optional switch is used to enable incorporation of integrity + checks into the package's executable programs. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Tidy + HTML5 Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+
+

+ Installation of Tidy HTML5 +

+

+ First, fix a build failure that occurs when using CMake 4.0 + and later: +

+
patch -Np1 -i ../tidy-html5-5.8.0-cmake4_fixes-1.patch
+

+ Install Tidy HTML5 by + running the following commands: +

+
cd build/cmake &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_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 +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + build the release library without any debug `assert` in the + code. +

+

+ -D + BUILD_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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/time/time-1.9.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: d2356e0fe1c0b85285d83c6b2ad51b5f +

    +
  • +
  • +

    + Download size: 584 KB +

    +
  • +
  • +

    + Estimated disk space required: 4.0 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (with tests) +

    +
  • +
+
+
+
+

+ Installation of Time +

+

+ First, fix compiling this package with GCC-15: +

+
sed -i 's/sighandler interrupt_signal/__sighandler_t interrupt_signal/' src/time.c
+

+ 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 +

+
+
+
+
+
+
+
+

+ tree-2.2.1 +

+
+
+
+
+
+

+ Introduction to tree +

+

+ The tree application is + useful to display a dictionary tree's contents, including + files, directories, and links. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ 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 PREFIX=/usr MANDIR=/usr/share/man install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + tree +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ tree +

+
+

+ displays a directory tree in a terminal +

+
+
+
+
+
+
+
+

+ unixODBC-2.3.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ unixODBC Dependencies +

+
+ Optional +
+

+ Mini SQL +

+
+
+

+ 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.12 &&
+cp      -v -R doc/* /usr/share/doc/unixODBC-2.3.12
+
+
+

+ 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.12, there are + many README files throughout + the source tree where the use and functionality of the + programs can be found. Additionally, you can use the + parameter -? for syntax and + usage information. Lastly, the unixODBC web site at http://www.unixodbc.org/ has + very good information. +

+
+
+
+

+ 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.12 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xdg-dbus-proxy-0.1.6 +

+
+
+
+
+
+

+ Introduction to xdg-dbus-proxy +

+

+ The xdg-dbus-proxy package + contains a filtering proxy for D-Bus connections. This is + useful for forwarding data in and out of a sandbox. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-dbus-proxy Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+
+

+ Installation of xdg-dbus-proxy +

+

+ Install xdg-dbus-proxy by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + xdg-dbus-proxy +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ xdg-dbus-proxy +

+
+

+ is a filtering proxy for D-Bus connections +

+
+
+
+
+
+
+
+

+ Xdg-user-dirs-0.18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xdg-user-dirs Dependencies +

+
+ Optional +
+

+ docbook-xml-4.5, docbook-xsl-nons-1.79.2, and + libxslt-1.1.43 (all three for building + the man pages) +

+
+
+

+ Installation of Xdg-user-dirs +

+

+ Install xdg-user-dirs by + running the following commands: +

+
./configure --prefix=/usr           \
+            --sysconfdir=/etc       \
+            --disable-documentation &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --disable-documentation: + Disable the installation of the man pages. Remove this switch + if you've installed the optional dependencies and you wish to + install the man pages of this package. +

+
+
+

+ 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 overridden 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 +

+
+
+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ 7zip-25.01 +

+
+
+
+
+
+

+ Introduction to 7zip +

+

+ 7zip is a file archiver that + archives with high compression ratios. It handles 7z, ZIP, + GZIP, Brotli, BZIP2, XZ, TAR, APM, ARJ, CAB, CHM, CPIO, + CramFS, DEB, DMG, FAT, HFS, ISO, Lizard, LZ5, LZFSE, LZH, + LZMA, LZMA2, MBR, MSI, MSLZ, NSIS, NTFS, RAR, RPM, SquashFS, + UDF, VHD, WIM, XAR, Z, and Zstd formats. +

+

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

+

+ Package Information +

+
+ +
+

+ 7zip + Dependencies +

+
+ Optional +
+

+ UASM +

+
+
+

+ Installation of 7zip +

+

+ Install 7zip by running the + following commands: +

+
(for i in Bundles/{Alone,Alone7z,Format7zF,SFXCon} UI/Console; do
+    make -C CPP/7zip/$i -f ../../cmpl_gcc.mak || exit
+done)
+

+ This package does not have a test suite. +

+

+ Now, as the root user: +

+
install -vDm755 CPP/7zip/Bundles/Alone{/b/g/7za,7z/b/g/7zr} \
+                CPP/7zip/Bundles/Format7zF/b/g/7z.so        \
+                CPP/7zip/UI/Console/b/g/7z                  \
+                -t /usr/lib/7zip/                           &&
+
+install -vm755 CPP/7zip/Bundles/SFXCon/b/g/7zCon \
+               /usr/lib/7zip/7zCon.sfx           &&
+
+(for i in 7z 7za 7zr; do
+    cat > /usr/bin/$i << EOF || exit
+#!/bin/sh
+exec /usr/lib/7zip/$i "\$@"
+EOF
+    chmod 755 /usr/bin/$i || exit
+done) &&
+
+cp -rv DOC -T /usr/share/doc/7zip-25.01
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + 7z, 7za, and 7zr +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/lib/7zip and + /usr/share/doc/7zip-25.01 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ AccountsService-23.13.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ AccountsService Dependencies +

+
+ Required +
+

+ Polkit-126 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and xmlto-0.0.29 +

+
+ Optional (for tests) +
+

+ dbusmock-0.36.0 and PyGObject-3.52.3 +

+
+
+

+ Installation of AccountsService +

+

+ First, rename a directory whose presence prevents the build + system from running if dbusmock-0.36.0 is not installed: +

+
mv tests/dbusmock{,-tests}
+

+ Then fix a test script so that the new directory is found, + and adapt it for Python 3.12.0 or later: +

+
sed -e '/accounts_service\.py/s/dbusmock/dbusmock-tests/' \
+    -e 's/assertEquals/assertEqual/'                      \
+    -i tests/test-libaccountsservice.py
+

+ Fix one test that fails if the en_IE.UTF-8 locale is not installed: +

+
sed -i '/^SIMULATED_SYSTEM_LOCALE/s/en_IE.UTF-8/en_HK.iso88591/' tests/test-daemon.py
+

+ Install AccountsService by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --buildtype=release  \
+      -D admin_group=adm   \
+      -D elogind=true      \
+      -D systemdsystemunitdir=no
+

+ Now adapt the shipped mocklibc copy to allow building the + test suite with GCC 14 or later: +

+
grep 'print_indent'     ../subprojects/mocklibc-1.0/src/netgroup.c \
+     | sed 's/ {/;/' >> ../subprojects/mocklibc-1.0/src/netgroup.h &&
+sed -i '1i#include <stdio.h>'                                      \
+    ../subprojects/mocklibc-1.0/src/netgroup.h
+

+ Build the package: +

+
ninja
+

+ To test the package, 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. +

+

+ -D admin_group=adm: + This switch sets the group for administrator accounts. +

+

+ -D docbook=true: This switch + enables building the D-Bus interface API documentation (needs + xmlto-0.0.29). +

+

+ -D gtk_doc=true: This switch + enables building the libaccountsservice API documentation + (needs GTK-Doc-1.34.0). +

+

+ -D vapi=false: This switch + disables building the vala bindings. Use it if you have not + installed Vala-0.56.18. +

+
+
+

+ 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
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + accounts-daemon (in /usr/libexec) +
+
+ Installed Libraries: + libaccountsservice.so +
+
+ Installed Directories: + /usr/include/accountsservice-1.0, + /usr/share/accountsservice, + /usr/share/gtk-doc/html/libaccountsservice (optional), + and /var/lib/AccountsService +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ accounts-daemon +

+
+

+ is the AccountsService daemon +

+
+

+ libaccountsservice.so +

+
+

+ contains the AccountsService API functions +

+
+
+
+
+
+
+
+

+ acpid-2.0.34 +

+
+
+
+
+
+

+ 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. +

+
+

+ Note +

+

+ Some other packages may handle some ACPI events as well and + they may conflict with this package. For example, + elogind-255.17 (read the + documentation for Handle*= in + logind.conf(5) + for details) and UPower-1.90.9 (used by many desktop + environments such as GNOME, KDE, and XFCE for handling ACPI + events). If you've installed such a package and it's enough + for your use case, this package is probably not needed. If + you really need this package, you must be careful + configuring it and the other packages handling ACPI events + to avoid conflicts. Notably, elogind-255.17 handles some + ACPI events by default, so the handling of these events by + elogind-255.17 should be + disabled first if handling these events with acpid (again, + read logind.conf(5) + for details). +

+
+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of acpid +

+

+ Install acpid by running the + following commands: +

+
./configure --prefix=/usr \
+            --docdir=/usr/share/doc/acpid-2.0.34 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install                         &&
+install -v -m755 -d /etc/acpi/events &&
+cp -r samples /usr/share/doc/acpid-2.0.34
+
+
+

+ 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). The example also + disables the default handling of the lid close event by + elogind-255.17 when the system is + on battery and not connected to any external monitor, in + order to avoid a conflict: +

+
cat > /etc/acpi/events/lid << "EOF"
+event=button/lid
+action=/etc/acpi/lid.sh
+EOF
+
+cat > /etc/acpi/lid.sh << "EOF"
+#!/bin/sh
+/bin/grep -q open /proc/acpi/button/lid/LID/state && exit 0
+/usr/sbin/pm-suspend
+EOF
+chmod +x /etc/acpi/lid.sh
+
+mkdir -pv /etc/elogind/logind.conf.d
+echo HandleLidSwitch=ignore > /etc/elogind/logind.conf.d/acpi.conf
+

+ Unfortunately, not every computer labels ACPI events in the + same way (for example, the lid may be recognized as + LID0 instead of LID). To determine how your buttons are + recognized, use the acpi_listen tool. Also, + look in the samples directory + under /usr/share/doc/acpid-2.0.34 for more + examples. +

+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically start acpid when the system is + rebooted, install the /etc/rc.d/init.d/acpid boot script from + the blfs-bootscripts-20250225 package. +

+
make install-acpid
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + acpid, acpi_listen, and + kacpimon +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /etc/acpi and + /usr/share/doc/acpid-2.0.34 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ at-3.2.5 +

+
+
+
+
+
+

+ Introduction to at +

+

+ The at package provides + delayed job execution and batch processing. It is required + for Linux Standards Base (LSB) conformance. +

+

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

+

+ Package Information +

+
+ +
+

+ at + Dependencies +

+
+ Required +
+

+ An MTA +

+
+ Optional +
+

+ Linux-PAM-1.7.1 +

+
+
+

+ 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       \
+            --with-jobdir=/var/spool/atjobs   \
+            --with-atspool=/var/spool/atspool \
+            SENDMAIL=/usr/sbin/sendmail       &&
+make -j1
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install docdir=/usr/share/doc/at-3.2.5 \
+             atdocdir=/usr/share/doc/at-3.2.5
+
+
+

+ 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
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ Install the /etc/init.d/atd + init script from the blfs-bootscripts-20250225 + package. +

+
make install-atd
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + at, atd, atq (symlink), atrm + (symlink), atrun, and batch +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/at-3.2.5 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ autofs-5.1.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Autofs Dependencies +

+
+ Required +
+

+ libtirpc-1.3.6 and rpcsvc-proto-1.4.4 +

+
+ Optional +
+

+ nfs-utils-2.8.3, libnsl-2.0.1, libxml2-2.14.5, MIT Kerberos + V5-1.22.1, OpenLDAP-2.6.10 (client only), and + Cyrus SASL-2.1.28 +

+
+
+

+ Kernel + Configuration +

+

+ Verify that automounter kernel support has been enabled: +

+
File systems --->
+  <*/M> Kernel automounter support (supports v3, v4 and v5)          [AUTOFS_FS]
+

+ Optionally, enable the following options in the kernel + configuration: +

+
File systems --->
+  [*] Network File Systems --->                            [NETWORK_FILESYSTEMS]
+    <*/M> NFS client support                                            [NFS_FS]
+    <*/M> SMB3 and CIFS support (advanced network filesystem)             [CIFS]
+

+ Recompile and install the new kernel, if necessary. +

+
+
+

+ Installation of Autofs +

+

+ Install Autofs by running + the following commands: +

+
./configure --prefix=/usr             \
+            --with-mapdir=/etc/autofs \
+            --with-libtirpc           \
+            --without-openldap        \
+            --mandir=/usr/share/man   &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+

+ 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. +

+

+ --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.22.1. +

+
+
+

+ 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. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ autofs installs its own + boot script, but it has no capability for logging or visual + conformance with other BLFS scripts. It will be replaced by + an enhanced version. +

+

+ Install the /etc/init.d/autofs mount script included + with the blfs-bootscripts-20250225 package. +

+
make install-autofs
+

+ The time-out variable is set in /etc/sysconfig/autofs.conf. The installed + file sets a default of 60 seconds of inactivity before + unmounting the device. A much shorter time may be necessary + to protect buffer writing to a floppy if users tend to + remove the media prior to the timeout setting. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + automount +
+
+ Installed Libraries: + libautofs.so. lookup_dir.so, + lookup_file.so, lookup_files.so (symlink to + lookup_file.so), lookup_hosts.so, lookup_ldap.so + (optional), lookup_multi.so, lookup_nis.so (symlink to + lookup_yp.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 (symlink to mount_ext2.so), mount_ext4.so + (symlink to mount_ext2.so), mount_generic.so, + mount_nfs.so, mount_nfs4.so (symlink to mount_nfs.so), + parse_amd.so, and parse_sun.so +
+
+ Installed Directories: + /usr/lib/autofs and + /etc/autofs +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ automount +

+
+

+ is the daemon that performs the mounting when a + request is made for the device +

+
+
+
+
+
+
+
+

+ BlueZ-5.83 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.kernel.org/pub/linux/bluetooth/bluez-5.83.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 59cf5b86dd008180503a159109bbfb9a +

    +
  • +
  • +

    + Download size: 2.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 95 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (using parallelism=4; + with tests) +

    +
  • +
+
+

+ BlueZ Dependencies +

+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4, and libical-3.0.20 +

+
+ Optional +
+

+ docutils-0.21.2 (to generate man pages) +

+
+
+

+ 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 in the + “Cryptographic + API” section if you intend to run the tests, + and recompile the kernel if necessary: +

+
General setup --->
+  # If it is disabled, [TIMERFD] and [EVENTFD] will be hidden and
+  # enabled implicitly.  We DO NOT recommend to enable [EXPERT]
+  # unless you are really an expert user:
+  [ /*] Configure standard kernel features (expert users) --->          [EXPERT]
+    [*] Enable timerfd() system call                                   [TIMERFD]
+    [*] Enable eventfd() system call                                   [EVENTFD]
+
+[*] Networking support --->                                                [NET]
+  <*/M> Bluetooth subsystem support --->                                    [BT]
+    [*]   Bluetooth Classic (BR/EDR) features                         [BT_BREDR]
+    <*/M>   RFCOMM protocol support                                  [BT_RFCOMM]
+    [*]       RFCOMM TTY support                                 [BT_RFCOMM_TTY]
+    <*/M>   BNEP protocol support                                      [BT_BNEP]
+    [*]       Multicast filter support                       [BT_BNEP_MC_FILTER]
+    [*]       Protocol filter support                     [BT_BNEP_PROTO_FILTER]
+    <*/M>   HIDP protocol support                                      [BT_HIDP]
+    Bluetooth device drivers --->
+      # Select the appropriate drivers for your bluetooth hardware.
+      # There are more vendor-specific drivers not listed here:
+      < /*/M> HCI USB driver                                       [BT_HCIBTUSB]
+      < /*/M> HCI SDIO driver                                     [BT_HCIBTSDIO]
+      < /*/M> HCI UART driver                                       [BT_HCIUART]
+  <*/M> RF switch subsystem support --->                                [RFKILL]
+
+-*- Cryptographic API --->                                              [CRYPTO]
+  Crypto core or helper --->
+    <*/M> Userspace cryptographic algorithm configuration          [CRYPTO_USER]
+  Block ciphers --->
+    <*/M> AES (Advanced Encryption Standard)                        [CRYPTO_AES]
+  AEAD (authenticated encryption with associated data) ciphers --->
+    <*/M> CCM (Counter with Cipher Block Chaining-MAC)              [CRYPTO_CCM]
+  Hashes, digests, and MACs --->
+    <*/M> CMAC (Cipher-based MAC)                                  [CRYPTO_CMAC]
+  Userspace interface --->
+    <*/M> Hash algorithms                                 [CRYPTO_USER_API_HASH]
+    <*/M> Symmetric key cipher algorithms             [CRYPTO_USER_API_SKCIPHER]
+    <*/M> AEAD cipher algorithms                          [CRYPTO_USER_API_AEAD]
+
+
+

+ Installation of BlueZ +

+

+ Install BlueZ by running the + following commands: +

+
./configure --prefix=/usr         \
+            --sysconfdir=/etc     \
+            --localstatedir=/var  \
+            --enable-library      \
+            --disable-manpages    \
+            --disable-systemd     &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install &&
+ln -svf ../libexec/bluetooth/bluetoothd /usr/sbin
+

+ Install the main configuration file as the root user: +

+
install -v -dm755 /etc/bluetooth &&
+install -v -m644 src/main.conf /etc/bluetooth/main.conf
+

+ If desired, install the API documentation as the root user: +

+
install -v -dm755 /usr/share/doc/bluez-5.83 &&
+install -v -m644 doc/*.txt /usr/share/doc/bluez-5.83
+

+ Install a missing D-Bus service as the root user: +

+
install -m644 ./obexd/src/org.bluez.obex.service /usr/share/dbus-1/services
+
+
+

+ 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.21.2 installed and wish to + generate the manual pages. +

+

+ --enable-library: + This switch enables building the BlueZ 4 compatibility library which is + required by some applications. +

+

+ --disable-systemd: + This switch is needed because systemd is not part of LFS/BLFS. If you + are using systemd, remove this switch. +

+

+ ln -svf + ../libexec/bluetooth/bluetoothd /usr/sbin: + This command makes access to the bluetooth daemon more + convenient. +

+
+
+

+ Configuring BlueZ +

+
+
+
+
+

+ Configuration Files +

+
+
+
+

+ /etc/bluetooth/main.conf is + installed automatically during the install. Additionally, + there are three supplementary configuration files. + /etc/sysconfig/bluetooth is installed as a part of the boot + script below. In addition, you optionally can install the + following, as the root + user: +

+
cat > /etc/bluetooth/rfcomm.conf << "EOF"
+# Start rfcomm.conf
+# Set up the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.
+# Use one line per command
+# See the rfcomm man page for options
+
+
+# End of rfcomm.conf
+EOF
+
cat > /etc/bluetooth/uart.conf << "EOF"
+# Start uart.conf
+# Attach serial devices via UART HCI to BlueZ stack
+# Use one line per device
+# See the hciattach man page for options
+
+# End of uart.conf
+EOF
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically start the bluetoothd daemon when + the system is rebooted, install the /etc/rc.d/init.d/bluetooth bootscript + from the blfs-bootscripts-20250225 package. +

+
make install-bluetooth
+
+
+
+

+ 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.83 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ bluemoon +

+
+

+ is a Bluetooth 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 +

+
+
+
+
+
+
+
+

+ Bubblewrap-0.11.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Bubblewrap Dependencies +

+
+ Optional +
+

+ libxslt-1.1.43 (to generate manual + pages), libseccomp-2.6.0 (built with python + bindings, for tests), bash-completion, + and SELinux +

+
+
+

+ Kernel + Configuration +

+

+ When this package began, upstream expected it could be + installed suid-root. That was a long time ago, suid-root is + generally considered a bad idea. As well as the default + namespaces, this package requires the optional User namespace + to be enabled. If that has not yet been enabled, select the + following option in the kernel configuration and recompile + the kernel: +

+
General setup --->
+  -*- Namespaces support --->                                       [NAMESPACES]
+    [*] User namespace                                                 [USER_NS]
+
+
+

+ Installation of Bubblewrap +

+

+ Install Bubblewrap by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ Next, if you desire to run the test suite, fix an issue + caused by the merged-/usr configuration in LFS: +

+
sed 's@symlink usr/lib64@ro-bind-try /lib64@' -i ../tests/libtest.sh
+

+ To test the results, issue (as a user other than the + root user): ninja test +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + bwrap +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ bwrap +

+
+

+ generates a sandbox for a program to run in +

+
+
+
+
+
+
+
+

+ Colord-1.4.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Colord Dependencies +

+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4 (GObject Introspection + recommended), Little CMS-2.17, libgudev-238, libgusb-0.4.9, Polkit-126, and SQLite-3.50.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ gnome-desktop-44.3 and colord-gtk-0.3.1 (to build the example + tools), docbook-xml-5.0, docbook-xsl-ns-1.79.2, and + libxslt-1.1.43 (to build the man pages), + GTK-Doc-1.34.0, SANE-1.4.0, ArgyllCMS, and + Bash + Completion +

+
+
+

+ 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
+

+ Install Colord by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                  \
+      --prefix=/usr             \
+      --buildtype=release       \
+      -D daemon_user=colord     \
+      -D vapi=true              \
+      -D systemd=false          \
+      -D libcolordcompat=true   \
+      -D argyllcms_sensor=false \
+      -D bash_completion=false  \
+      -D docs=false             \
+      -D man=false              &&
+ninja
+

+ If docbook-xml-5.0, docbook-xsl-ns-1.79.2, and + libxslt-1.1.43 are installed, build the + man pages: +

+
sed -e '/class="manual"/i<refmiscinfo class="source">colord</refmiscinfo>' \
+    -i ../man/*.xml &&
+meson configure -D man=true &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: ninja test. One test, + colord-self-test-daemon, will + fail if the package is already installed. The test suite must + be run with the system-wide D-Bus Daemon running. +

+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D + daemon_user=colord: This switch is used so the + colord daemon will run as an unprivileged user instead of the + root user. +

+

+ -D vapi=true: This + switch enables building the Vala bindings. Remove if you don't have + Vala-0.56.18 installed. +

+

+ -D systemd=false: + This switch disables support for systemd login in Colord applications. +

+

+ -D + libcolordcompat=true: This switch enables + building a compatibility library for older packages that use + Colord. +

+

+ -D + argyllcms_sensor=false: This switch disables the + ArgLLCMS sensor driver. Omit if you have ArgyllCMS installed and + wish to use it. +

+

+ -D + bash_completion=false: This switch disables Bash + Completion support for Colord applications. +

+

+ -D docs=false: This + switch disables building of documentation. Omit if you have + GTK-Doc-1.34.0 available. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ cpio-2.15 +

+
+
+
+
+
+

+ Introduction to cpio +

+

+ The cpio package contains + tools for archiving. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 3394d444ca1905ea56c94b628b706a0b +

    +
  • +
  • +

    + Download size: 1.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 21 MB (with tests and + docs) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (with tests and docs) +

    +
  • +
+
+

+ CPIO + Dependencies +

+
+ Optional +
+

+ texlive-20250308 (or install-tl-unx) +

+
+
+

+ Installation of cpio +

+

+ Add a workaround for an issue shown by gcc15: +

+
sed -e "/^extern int (\*xstat)/s/()/(const char * restrict,  struct stat * restrict)/" \
+    -i src/extern.h
+sed -e "/^int (\*xstat)/s/()/(const char * restrict,  struct stat * restrict)/" \
+    -i 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-20250308 installed and + wish to create PDF or Postscript documentation, issue one or + both of the following commands: +

+
make -C doc pdf &&
+make -C doc ps
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install &&
+install -v -m755 -d /usr/share/doc/cpio-2.15/html &&
+install -v -m644    doc/html/* \
+                    /usr/share/doc/cpio-2.15/html &&
+install -v -m644    doc/cpio.{html,txt} \
+                    /usr/share/doc/cpio-2.15
+

+ If you built PDF or Postscript documentation, install it by + issuing the following commands as the root user: +

+
install -v -m644 doc/cpio.{pdf,ps,dvi} \
+                 /usr/share/doc/cpio-2.15
+
+
+

+ 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.15 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ cpio +

+
+

+ copies files to and from archives +

+
+

+ mt +

+
+

+ controls magnetic tape drive operations +

+
+
+
+
+
+
+
+

+ cups-pk-helper-0.2.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ cups-pk-helper Dependencies +

+
+ Required +
+

+ Cups-2.4.12 and Polkit-126 +

+
+
+

+ Installation of cups-pk-helper +

+

+ Install cups-pk-helper by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cups-pk-helper-mechanism (library + executable) +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ dbus-1.16.2 +

+
+
+
+
+
+

+ Introduction to D-Bus +

+

+ D-Bus is a message bus + system, a simple way for applications to talk to one another. + D-Bus supplies both a system + daemon (for events such as “new hardware device added” or + “printer queue + changed”) and a per-user-login-session daemon + (for general IPC needs among user applications). Also, the + message bus is built on top of a general one-to-one message + passing framework, which can be used by any two applications + to communicate directly (without going through the message + bus daemon). +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://dbus.freedesktop.org/releases/dbus/dbus-1.16.2.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 97832e6f0a260936d28536e5349c22e5 +

    +
  • +
  • +

    + Download size: 1.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 25 MB (add 6 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (add 0.4 SBU for tests) +

    +
  • +
+
+

+ D-Bus Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ For the tests: D-Bus Python-1.4.0, PyGObject-3.52.3, and Valgrind-3.25.1; + for documentation: Doxygen-1.14.0, xmlto-0.0.29, Ducktype, + and Yelp + Tools +

+
+
+

+ Installation of D-Bus +

+

+ Install D-Bus by running the + following commands (you may wish to review the + meson_options.txt file first and add any additional desired + options to the meson setup line below): +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr          \
+            --buildtype=release    \
+            --wrap-mode=nofallback \
+            -D systemd=disabled    \
+            .. &&
+ninja
+

+ See below for test instructions. +

+

+ Now, as the root user: +

+
ninja install
+

+ If you are using a DESTDIR install, dbus-daemon-launch-helper + needs to be fixed afterwards. Issue, as root user: +

+
chown -v root:messagebus /usr/libexec/dbus-daemon-launch-helper &&
+chmod -v      4750       /usr/libexec/dbus-daemon-launch-helper
+

+ If you are still building your system in chroot or you did + not start the daemon yet, but you want to compile some + packages that require D-Bus, + generate the D-Bus UUID to + avoid warnings when compiling some packages with the + following command as the root + user: +

+
dbus-uuidgen --ensure
+

+ If using elogind-255.17, create a symlink to the + /var/lib/dbus/machine-id file: +

+
ln -sfv /var/lib/dbus/machine-id /etc
+

+ Finally, still as the root + user, rename the documentation directory (it only exists if + the optional dependencies are satisfied for at least one + documentation format) to make it versioned: +

+
if [ -e /usr/share/doc/dbus ]; then
+  rm -rf /usr/share/doc/dbus-1.16.2    &&
+  mv -v  /usr/share/doc/dbus{,-1.16.2}
+fi
+

+ Many tests are disabled unless both D-Bus + Python-1.4.0 and PyGObject-3.52.3 have been + installed. They must be run as an unprivileged user from a + local session with bus address. To run the standard tests + issue ninja + test. +

+

+ If you want to run the unit regression tests, meson 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): +

+
meson configure -D asserts=true -D intrusive_tests=true &&
+ninja test
+
+
+

+ Command Explanations +

+

+ --wrap-mode=nofallback: This + switch prevents meson from using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are not installed on the system. +

+

+ -D systemd=disabled: + Don't install systemd support files even if libsystemd exists (i.e. the elogind-255.17 package is installed). +

+

+ -D + intrusive_tests=true: Builds extra parts of the + code to support all tests. Do not use on a production build. +

+

+ -D asserts=true: + Enables debugging code to run assertions for statements + normally assumed to be true. This prevents a warning that + '-D asserts=true' 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 +

+
+
+
+

+ To automatically start dbus-daemon when the + system is rebooted, install the /etc/rc.d/init.d/dbus bootscript from the + blfs-bootscripts-20250225 package. +

+
make install-dbus
+

+ If this is the first time to install D-Bus on the system and you are not + operating in a chroot environment, you can immediately + start dbus-daemon without + rebooting the system: +

+
/etc/init.d/dbus start
+

+ Note that this boot script only starts the system-wide + D-Bus daemon. Each user + requiring access to D-Bus + services will also need to run a session daemon as well. + There are many methods you can use to start a session + daemon using the dbus-launch command. + Review the dbus-launch man page for + details about the available parameters and options. Here + are some suggestions and examples: +

+
+
    +
  • +

    + Add dbus-launch to the + line in the ~/.xinitrc + file that starts your graphical desktop environment. +

    +
  • +
  • +

    + If you use gdm or some other + display manager that calls the ~/.xsession file, you can add + dbus-launch to the + line in your ~/.xsession file that starts your + graphical desktop environment. The syntax would be + similar to the example in the ~/.xinitrc file. +

    +
  • +
  • +

    + The examples shown previously use dbus-launch to + specify a program to be run. This has the benefit + (when also using the --exit-with-x11 + parameter) of stopping the session daemon when the + specified program is stopped. You can also start the + session daemon in your system or personal startup + scripts by adding the following lines: +

    +
    # Start the D-Bus session daemon
    +eval `dbus-launch`
    +export DBUS_SESSION_BUS_ADDRESS
    +

    + This method will not stop the session daemon when you + exit your shell, therefore you should add the + following line to your ~/.bash_logout file: +

    +
    # Kill the D-Bus session daemon
    +kill $DBUS_SESSION_BUS_PID
    +
  • +
+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + dbus-cleanup-sockets, dbus-daemon, + dbus-launch, dbus-monitor, dbus-run-session, dbus-send, + dbus-test-tool, dbus-update-activation-environment, and + dbus-uuidgen +
+
+ Installed Library: + libdbus-1.so +
+
+ Installed Directories: + /etc/dbus-1, + /usr/{include,lib}/dbus-1.0, /usr/lib/cmake/DBus1, + /usr/share/dbus-1, /usr/share/xml/dbus-1, + /usr/share/doc/dbus-1.16.2, and + /var/{lib,run}/dbus +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ dbus-cleanup-sockets +

+
+

+ is used to clean up leftover sockets in a directory +

+
+

+ dbus-daemon +

+
+

+ is the D-Bus + message bus daemon +

+
+

+ dbus-launch +

+
+

+ is used to start dbus-daemon from + a shell script. It would normally be called from a + user's login scripts +

+
+

+ dbus-monitor +

+
+

+ is used to monitor messages going through a + D-Bus message bus +

+
+

+ dbus-run-session +

+
+

+ starts a process as a new D-Bus session +

+
+

+ dbus-send +

+
+

+ is used to send a message to a D-Bus message bus +

+
+

+ dbus-test-tool +

+
+

+ is a D-Bus traffic + generator and test tool; it is a multi-purpose tool + for debugging and profiling D-Bus +

+
+

+ dbus-update-activation-environment +

+
+

+ is used to update the environment used for + D-Bus session + services; it updates the list of environment + variables used by dbus-daemon + --session when it activates session + services without using systemd +

+
+

+ dbus-uuidgen +

+
+

+ is used to generate a universally unique ID +

+
+

+ libdbus-1.so +

+
+

+ contains the API functions used by the D-Bus message daemon. + D-Bus is first a + library that provides one-to-one communication + between any two applications; dbus-daemon is an + application that uses this library to implement a + message bus daemon +

+
+
+
+
+
+
+
+

+ elogind-255.17 +

+
+
+
+
+
+

+ Introduction to elogind +

+

+ elogind is the systemd project's "logind", extracted to + be a standalone daemon. It integrates with Linux-PAM-1.7.1 + to track all the users logged in to a system, and whether + they are logged in graphically, on the console, or remotely. + Elogind exposes this + information via the standard org.freedesktop.login1 + D-Bus interface, and also + through the file system using systemd's standard /run/systemd layout. +

+

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

+

+ Package Information +

+
+ +
+

+ elogind Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ lxml-6.0.0, zsh-5.9, Valgrind-3.25.1 (needed for + tests), audit-userspace, + bash-completion, + + kexec, and SELinux +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Logind +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
File systems --->
+  [*] Inotify support for userspace                               [INOTIFY_USER]
+  Pseudo filesystems --->
+    [*] Tmpfs virtual memory file system support (former shm fs)         [TMPFS]
+    [*]   Tmpfs POSIX Access Control Lists                     [TMPFS_POSIX_ACL]
+

+ In addition, some tests need the userspace cryptographic + kernel API, which is enabled with: +

+
-*- Cryptographic API --->                                              [CRYPTO]
+  Crypto core or helper --->
+    <*/M> Userspace cryptographic algorithm configuration          [CRYPTO_USER]
+  Userspace interface --->
+    <*/M> Hash algorithms                                 [CRYPTO_USER_API_HASH]
+
+
+

+ Installation of elogind +

+

+ Install elogind by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                               \
+      --prefix=/usr                          \
+      --buildtype=release                    \
+      -D man=auto                            \
+      -D docdir=/usr/share/doc/elogind-255.17 \
+      -D cgroup-controller=elogind           \
+      -D dev-kvm-mode=0660                   \
+      -D dbuspolicydir=/etc/dbus-1/system.d &&
+ninja
+

+ To test the results, issue: ninja test. A few tests are + skipped if not run with root + privileges. Three tests, test-login, dbus-docs-fresh, and check-version-history, are known to fail. +

+

+ Now, as the root user: +

+
ninja install                                           &&
+ln -sfv  libelogind.pc /usr/lib/pkgconfig/libsystemd.pc &&
+ln -sfvn elogind /usr/include/systemd
+
+
+

+ Command Explanations +

+

+ -D + docdir=/usr/share/doc/elogind-255.17: This is + needed to install documentation in a versioned directory. +

+

+ -D + cgroup-controller=elogind: This switch is + necessary to build this package when the kernel is not built + with CONFIG_CGROUPS enabled. Note + that elogind strictly needs + a kernel with CONFIG_CGROUPS + enabled at runtime, but this switch will allow building the + package first. +

+

+ -D + dbuspolicydir=/etc/dbus-1/system.d: This switch + sets the location of the D-Bus policy directory. +

+

+ -D dev-kvm-mode=0660: + The LFS udev rule sets the mode of /dev/kvm to 0660. This option ensures the + elogind udev rules consistent with the LFS configuration. +

+

+ -D man=auto: The + default value of this switch is false. Setting it to auto allows building and + installing the man pages if the recommended dependencies are + installed. +

+

+ -D html=auto: The default value + of this switch is false. Setting it to auto allows building and + installing the html documentation if the recommended + dependencies are installed. +

+

+ -D + default-kill-user-processes=false: Determines whether + the processes of a user should be killed when the user logs + out. The default is true, but this defeats the + traditional use of screen or tmux. This can also be + changed in the configuration file (see below). +

+

+ ln -s ...: + These commands install symlinks so that software packages can + find the systemd-compatible library and headers. +

+
+
+

+ Configuring elogind +

+
+
+
+
+

+ Config File +

+
+
+
+

+ /etc/elogind/logind.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ The installed file /etc/elogind/logind.conf contains all the + possible options with their defaults, commented out. You + may wish to disable automatically killing user processes + when the user logs out, by running, as the root user: +

+
sed -e '/\[Login\]/a KillUserProcesses=no' \
+    -i /etc/elogind/logind.conf
+

+ Each user will need to register a user session using + Linux-PAM at login. The + /etc/pam.d/system-session + file needs to be modified and a new file must be created in + order for elogind to work + correctly. Run the following commands as the root user: +

+
cat >> /etc/pam.d/system-session << "EOF" &&
+# Begin elogind addition
+
+session  required    pam_loginuid.so
+session  optional    pam_elogind.so
+
+# End elogind addition
+EOF
+cat > /etc/pam.d/elogind-user << "EOF"
+# Begin /etc/pam.d/elogind-user
+
+account  required    pam_access.so
+account  include     system-account
+
+session  required    pam_env.so
+session  required    pam_limits.so
+session  required    pam_unix.so
+session  required    pam_loginuid.so
+session  optional    pam_keyinit.so force revoke
+session  optional    pam_elogind.so
+
+auth     required    pam_deny.so
+password required    pam_deny.so
+
+# End /etc/pam.d/elogind-user
+EOF
+
+

+ Note +

+

+ After completion of elogind, you should check that it + functions properly. First ensure that dbus is running. It may be easiest + to do this by rebooting the system. After logging in + again, run the command loginctl. The result + should indicate that a SESSION and a SEAT have been + created. +

+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + busctl, elogind-inhibit, and + loginctl +
+
+ Installed Library: + libelogind.so +
+
+ Installed Directories: + /usr/lib/elogind, /etc/elogind, + /usr/include/elogind, and + /usr/share/doc/elogind-255.17 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ busctl +

+
+

+ is used to introspect and monitor the D-Bus bus +

+
+

+ elogind-inhibit +

+
+

+ is used to execute a program with a shutdown, sleep + or idle inhibitor lock taken +

+
+

+ loginctl +

+
+

+ is used to introspect and control the state of the + elogind Login Manager +

+
+

+ libelogind.so +

+
+

+ is the main elogind utility library +

+
+
+
+
+
+
+
+

+ blocaled-0.7 +

+
+
+
+
+
+

+ Introduction to blocaled +

+

+ blocaled is an + implementation of the org.freedesktop.locale1 D-Bus + protocol, which normally comes with systemd. It is needed by the + GNOME desktop. +

+

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

+

+ Package Information +

+
+ +
+

+ blocaled Dependencies +

+
+ Required +
+

+ Polkit-126 and libdaemon-0.14 +

+
+
+

+ Installation of blocaled +

+

+ Install blocaled by running + the following commands: +

+
./configure --prefix=/usr --sysconfdir=/etc &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Configuring blocaled +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/blocaled.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ /etc/blocaled.conf contains + the location of the settings files used by blocaled. The defaults are suitable + for BLFS. Information about the entries is available as + comments in the file. +

+

+ The org.freedesktop.locale1 protocol + is unable to export locale variables. Locale settings are + stored by default in /etc/locale.conf. We need to retrieve + them in the bash profile. As the root user, issue: +

+
cat > /etc/profile.d/i18n.sh << "EOF"
+# Begin /etc/profile.d/i18n.sh
+
+if [ -r /etc/locale.conf ]; then source /etc/locale.conf; fi
+
+if [ -n "$LANG" ];              then export LANG; fi
+if [ -n "$LC_TYPE" ];           then export LC_TYPE; fi
+if [ -n "$LC_NUMERIC" ];        then export LC_NUMERIC; fi
+if [ -n "$LC_TIME" ];           then export LC_TIME; fi
+if [ -n "$LC_COLLATE" ];        then export LC_COLLATE; fi
+if [ -n "$LC_MONETARY" ];       then export LC_MONETARY; fi
+if [ -n "$LC_MESSAGES" ];       then export LC_MESSAGES; fi
+if [ -n "$LC_PAPER" ];          then export LC_PAPER; fi
+if [ -n "$LC_NAME" ];           then export LC_NAME; fi
+if [ -n "$LC_ADDRESS" ];        then export LC_ADDRESS; fi
+if [ -n "$LC_TELEPHONE" ];      then export LC_TELEPHONE; fi
+if [ -n "$LC_MEASUREMENT" ];    then export LC_MEASUREMENT; fi
+if [ -n "$LC_IDENTIFICATION" ]; then export LC_IDENTIFICATION; fi
+
+# End /etc/profile.d/i18n.sh
+EOF
+

+ Then the /etc/locale file + should be generated, as the root user: +

+
cat > /etc/locale.conf << EOF
+# Begin /etc/locale.conf
+
+LANG=$LANG
+
+# End /etc/locale.conf
+EOF
+

+ If you plan to run an X (or Wayland) Window system, you may + want to set up your X keyboard. The best way to do it is to + retrieve the settings from /etc/sysconfig/console, and feed them to + the blocaled daemon. As + the root user: +

+
source /etc/sysconfig/console &&
+KEYMAP=${KEYMAP:-us}          &&
+
+gdbus call --system                                             \
+           --dest org.freedesktop.locale1                       \
+           --object-path /org/freedesktop/locale1               \
+           --method org.freedesktop.locale1.SetVConsoleKeyboard \
+           "$KEYMAP" "$KEYMAP_CORRECTIONS" true true
+

+ This should create or modify the Xorg configuration + file[2] to match the keyboard settings set + in KEYMAP. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + blocaled (in /usr/libexec) +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/share/blocaled +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ blocaled +

+
+

+ is the daemon implementing the org.freedesktop.locale1 + D-Bus protocol +

+
+
+
+
+
+
+
+

+ [2] The default Xorg configuration file is + /etc/X11/xorg.conf.d/30-keyboard.conf. +

+
+
+
+
+
+
+

+ Fcron-3.4.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): http://fcron.free.fr/archives/fcron-3.4.0.src.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 5732a766df42a090749c0c96a6afd42b +

    +
  • +
  • +

    + Download size: 608 KB +

    +
  • +
  • +

    + Estimated disk space required: 4.2 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+

+ Fcron Dependencies +

+
+ Optional +
+

+ An MTA, + text + editor (default is vi from the Vim-9.1.1629 package), + Linux-PAM-1.7.1, and DocBook-utils-0.6.14 +

+
+
+

+ Installation of Fcron +

+

+ Fcron uses the cron facility of + syslog to log + all messages. Since LFS does not set up this facility in + /etc/syslog.conf, it needs to + be done prior to installing Fcron. This command will append the + necessary line to the current /etc/syslog.conf (perform as the + root user): +

+
cat >> /etc/syslog.conf << "EOF"
+# Begin fcron addition to /etc/syslog.conf
+
+cron.* -/var/log/cron.log
+
+# End fcron addition
+EOF
+

+ The configuration file has been modified, so reloading the + sysklogd daemon + will activate the changes (again as the root user). +

+
/etc/rc.d/init.d/sysklogd reload
+

+ For security reasons, an unprivileged user and group for + Fcron should be created + (perform as the root user): +

+
groupadd -g 22 fcron &&
+useradd -d /dev/null -c "Fcron User" -g fcron -s /bin/false -u 22 fcron
+

+ Now fix some locations hard coded in the documentation: +

+
find doc -type f -exec sed -i 's:/usr/local::g' {} \;
+

+ Install Fcron by running the + following commands: +

+
./configure --prefix=/usr          \
+            --sysconfdir=/etc      \
+            --localstatedir=/var   \
+            --without-sendmail     \
+            --with-boot-install=no \
+            --with-systemdsystemunitdir=no &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ DESTDIR install must be done as root user. Furthermore, if PAM + configuration files should be installed in /etc/pam.d, you have to create this + directory in the DESTDIR before doing the install. +

+
+
+

+ 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-systemdsystemunitdir=no: + This prevents building the systemd units, which are not needed for + a SYS V system. +

+

+ --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 set up a periodic hierarchy for the + root user, first issue the following commands (as the + root user) to create the + /usr/bin/run-parts script: +

+
cat > /usr/bin/run-parts << "EOF" &&
+#!/bin/sh
+# run-parts:  Runs all the scripts found in a directory.
+# from Slackware, by Patrick J. Volkerding with ideas borrowed
+# from the Red Hat and Debian versions of this utility.
+
+# keep going when something fails
+set +e
+
+if [ $# -lt 1 ]; then
+  echo "Usage: run-parts <directory>"
+  exit 1
+fi
+
+if [ ! -d $1 ]; then
+  echo "Not a directory: $1"
+  echo "Usage: run-parts <directory>"
+  exit 1
+fi
+
+# There are several types of files that we would like to
+# ignore automatically, as they are likely to be backups
+# of other scripts:
+IGNORE_SUFFIXES="~ ^ , .bak .new .rpmsave .rpmorig .rpmnew .swp"
+
+# Main loop:
+for SCRIPT in $1/* ; do
+  # If this is not a regular file, skip it:
+  if [ ! -f $SCRIPT ]; then
+    continue
+  fi
+  # Determine if this file should be skipped by suffix:
+  SKIP=false
+  for SUFFIX in $IGNORE_SUFFIXES ; do
+    if [ ! "$(basename $SCRIPT $SUFFIX)" = "$(basename $SCRIPT)" ]; then
+      SKIP=true
+      break
+    fi
+  done
+  if [ "$SKIP" = "true" ]; then
+    continue
+  fi
+  # If we've made it this far, then run the script if it's executable:
+  if [ -x $SCRIPT ]; then
+    $SCRIPT || echo "$SCRIPT failed."
+  fi
+done
+
+exit 0
+EOF
+chmod -v 755 /usr/bin/run-parts
+

+ Next, create the directory layout for the periodic jobs + (again as the root user): +

+
install -vdm754 /etc/cron.{hourly,daily,weekly,monthly}
+

+ Finally, add the run-parts to the system + fcrontab (while still the root user): +

+
cat > /var/spool/fcron/systab.orig << "EOF"
+&bootrun 01 * * * * root run-parts /etc/cron.hourly
+&bootrun 02 4 * * * root run-parts /etc/cron.daily
+&bootrun 22 4 * * 0 root run-parts /etc/cron.weekly
+&bootrun 42 4 1 * * root run-parts /etc/cron.monthly
+EOF
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/fcron init script from + the blfs-bootscripts-20250225 package. +

+
make install-fcron
+

+ Finally, again as the root + user, start fcron and generate the /var/spool/fcron/systab file: +

+
/etc/rc.d/init.d/fcron start &&
+fcrontab -z -u systab
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + fcron, fcrondyn, fcronsighup, and + fcrontab +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/fcron-3.4.0 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ GPM + Dependencies +

+
+ Optional +
+

+ texlive-20250308 (for + documentation) +

+
+
+

+ Kernel Configuration +

+

+ Enable the following option in the kernel configuration and + recompile the kernel if necessary: +

+
Device Drivers --->
+  Input device support --->
+    -*-   Generic input layer (needed for keyboard, mouse, ...)          [INPUT]
+    <*/M>   Mouse interface                                     [INPUT_MOUSEDEV]
+
+
+

+ Installation of GPM +

+

+ Install GPM by running the + following commands: +

+
patch -Np1 -i ../gpm-1.20.7-consolidated-1.patch                &&
+patch -Np1 -i ../gpm-1.20.7-gcc15_fixes-1.patch                 &&
+./autogen.sh                                                    &&
+./configure --prefix=/usr --sysconfdir=/etc ac_cv_path_emacs=no &&
+make
+

+ If texlive-20250308 is installed, + build the GPM manual as dvi, ps, and pdf formats: +

+
make -C doc gpm.{dvi,ps} &&
+dvipdfm doc/gpm.dvi -o doc/gpm.pdf
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install                                          &&
+
+install-info --dir-file=/usr/share/info/dir           \
+             /usr/share/info/gpm.info                 &&
+
+rm -fv /usr/lib/libgpm.a                              &&
+ln -sfv libgpm.so.2.1.0 /usr/lib/libgpm.so            &&
+install -v -m644 conf/gpm-root.conf /etc              &&
+
+install -v -m755 -d /usr/share/doc/gpm-1.20.7/support &&
+install -v -m644    doc/support/*                     \
+                    /usr/share/doc/gpm-1.20.7/support &&
+install -v -m644    doc/{FAQ,HACK_GPM,README*}        \
+                    /usr/share/doc/gpm-1.20.7
+

+ If texlive-20250308 is installed + and you've built GPM manual as dvi, ps, and pdf formats, + install them as the root + user: +

+
install -vm644 doc/gpm.{dvi,ps,pdf} /usr/share/doc/gpm-1.20.7
+
+
+

+ Command Explanations +

+

+ ./autogen.sh: + This command creates the missing configure script. +

+

+ ac_cv_path_emacs=no: + This variable works around an issue causing the package fail + to build with Emacs-30.2 installed. It also suppresses the + installations of some “Emacs support files” shipped with GPM. + These files are quite outdated and they should be superseded + with Emacs-30.2 built-in GPM support. If you need + to use Emacs-30.2 in Linux console with mouse + support, you should install (or reinstall) Emacs-30.2 after GPM. +

+

+ install-info + ...: This package installs a .info file, but does not update the system + dir file. This command makes + the update. +

+

+ ln -v -sfn libgpm.so.2.1.0 + /usr/lib/libgpm.so: This command is used to + create (or update) the .so + symlink to the library. +

+
+
+

+ Configuring GPM +

+
+
+
+
+

+ Boot Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/gpm init script included + in the blfs-bootscripts-20250225 package. +

+
make install-gpm
+
+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/gpm-root.conf and + ~/.gpm-root: The default and + individual user gpm-root configuration + files. +

+

+ /etc/sysconfig/mouse: This + file contains the name of your mouse device and the + protocol it uses. To create this file, run the following as + the root user: +

+
cat > /etc/sysconfig/mouse << "EOF"
+# Begin /etc/sysconfig/mouse
+
+MDEVICE="<yourdevice>"
+PROTOCOL="<yourprotocol>"
+GPMOPTS="<additional options>"
+
+# End /etc/sysconfig/mouse
+EOF
+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Examples of values to set MDEVICE, PROTOCOL, and GPMOPTS to are: +

+
MDEVICE="/dev/input/mice"
+PROTOCOL="imps2"
+GPMOPTS=""
+

+ A list of which protocol values are known can be found by + running gpm -m [device] -t + -help. The MDEVICE setting depends on which type of + mouse you have. For example, /dev/ttyS0 for a serial mouse (on Windows + this is COM1), /dev/input/mice is often used for USB + mice and /dev/psaux for PS2 + mice. GPMOPTS is the 'catch all' + for any additional options that are needed for your + hardware. +

+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ hwdata-0.398 +

+
+
+
+
+
+

+ Introduction to hwdata +

+

+ The hwdata package contains + current PCI and vendor id data. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of hwdata +

+

+ Install hwdata by running + the following commands: +

+
./configure --prefix=/usr --disable-blacklist
+

+ 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/hwdata +
+
+
+
+
+
+
+
+

+ LSB-Tools-0.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of LSB-Tools +

+

+ Install LSB-Tools by running + the following commands: +

+
make
+

+ Now, as the root user: +

+
make install
+

+ Remove a file that should not be installed as the + root user: +

+
rm /usr/sbin/lsbinstall
+
+
+

+ Configuration Information +

+

+ The configuration for this package was done in LFS. + The file /etc/lsb-release + should already exist. Be sure that the DISTRIB_CODENAME entry + has been set properly. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lsb_release , + install_initd, and remove_initd +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/lib/python3.13/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 +

+
+
+
+
+
+
+
+

+ Logrotate-3.22.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Logrotate Dependencies +

+
+ Required +
+

+ popt-1.19 +

+
+ Recommended +
+ +
+ Optional +
+

+ An MTA + (runtime) +

+
+
+

+ Installation of Logrotate +

+

+ Install logrotate by running + the following command: +

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

+ To test the results, issue: make test. 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 + https://www.techrepublic.com/article/manage-linux-log-files-with-logrotate/ + for more examples. +

+

+ The command logrotate + /etc/logrotate.conf can be run manually, + however, the command should be run daily. Other useful + commands are logrotate -d + /etc/logrotate.conf for debugging purposes + and logrotate -f + /etc/logrotate.conf forcing the logrotate + commands to be run immediately. Combining the previous + options -df, you can debug the + effect of the force command. When debugging, the commands are + only simulated and are not actually run. As a result, errors + about files not existing will eventually appear because the + files are not actually created. +

+

+ To run the logrotate command daily, + if you've installed Fcron-3.4.0 and + completed the section on periodic jobs, execute the + following commands, as the root user, to create a daily cron job: +

+
cat > /etc/cron.daily/logrotate.sh << "EOF" &&
+#!/bin/bash
+/usr/sbin/logrotate /etc/logrotate.conf
+EOF
+chmod 754 /etc/cron.daily/logrotate.sh
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + logrotate +
+
+ Installed Library: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ logrotate +

+
+

+ performs the log maintenance functions defined in + the configuration files +

+
+
+
+
+
+
+
+

+ MC-4.8.33 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): http://ftp.midnight-commander.org/mc-4.8.33.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: b3596c1f092b9822a6cd9c9a1aef8dde +

    +
  • +
  • +

    + Download size: 2.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 71 MB (add 97 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (using parallelism=4; add + 0.1 SBU for tests) +

    +
  • +
+
+

+ MC + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0, GPM-1.20.7, Graphviz-13.1.2, + libarchive-3.8.1, libssh2-1.11.1, + pcre2-10.45, Ruby-3.4.5, a graphical + environment, and Zip-3.0 +

+
+
+

+ 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 configuration directory in + /etc. +

+

+ --enable-charset: + This switch adds support to mcedit for editing files in + encodings different from the one implied by the current + locale. +

+

+ --with-screen=ncurses: Use this + if you don't have slang-2.3.3 installed. +

+

+ --with-search-engine=pcre2: Use + this switch if you would prefer to use pcre2-10.45 instead of GLib + for the built-in search engine. +

+
+
+

+ 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 +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ mc +

+
+

+ is a visual shell +

+
+

+ mcdiff +

+
+

+ is an internal visual diff tool +

+
+

+ mcedit +

+
+

+ is an internal file editor +

+
+

+ mcview +

+
+

+ is an internal file viewer +

+
+
+
+
+
+
+
+

+ ModemManager-1.24.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ModemManager Dependencies +

+
+ Required +
+

+ libgudev-238 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/ModemManager +

+
+
+

+ Installation of ModemManager +

+

+ Install ModemManager by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                 \
+      --prefix=/usr            \
+      --buildtype=release      \
+      -D bash_completion=false \
+      -D qrtr=false            \
+      -D systemdsystemunitdir=no &&
+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. +

+

+ -D + bash_completion=false: Use this option if the + external bash-completion + package is not installed. +

+

+ -D qrtr=false: This + switch disables support for the QRTR protocol which needs the + external + libqrtr-glib package. +

+

+ -D + systemdsystemunitdir=no: This switch prevents + meson from looking for the + systemd units directory and failing since it is not available + on SysV systems. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + mmcli and ModemManager +
+
+ Installed Libraries: + libmm-glib.so +
+
+ Installed Directories: + /etc/ModemManager, + /usr/include/libmm-glib, /usr/include/ModemManager, + /usr/lib/ModemManager, /usr/share/ModemManager, + /usr/share/gtk-doc/html/libmm-glib (optional), and + /usr/share/gtk-doc/html/ModemManager (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ mmcli +

+
+

+ is a 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Notification Daemon Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and libcanberra-0.30 + (Built with GTK-3.24.50 support). +

+
+
+

+ 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 test suite. +

+

+ Now, as the root user: +

+
make install
+

+ You can test the notification daemon with the command + notify-send: +

+
pgrep -l notification-da &&
+notify-send -i info Information "Hi ${USER}, This is a Test"
+

+ The command pgrep -l + notification-da is added to assure that it is + the daemon of this package that is running, not another one, + e.g. the daemon from xfce4-notifyd-0.9.7. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + none +
+
+ Installed Libraries: + none +
+
+ Installed Directory: + none +
+
+
+
+
+
+
+
+

+ Pax-20240817 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Power Management Utilities + Dependencies +

+
+ Optional +
+

+ xmlto-0.0.29 (to generate man pages) +

+
+ Optional (runtime) +
+

+ Hdparm-9.65, Wireless + Tools-29, ethtool, + and vbetool +

+
+
+

+ 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                                       [SUSPEND]
+  [*] Hibernation (aka 'suspend to disk')                          [HIBERNATION]
+

+ Suspend to RAM allows the system to enter sleep states in + which main memory is powered and thus its contents are + preserved. The method cuts power to most parts of the machine + aside from the RAM. Because of the large power savings, it is + advisable for laptops to automatically enter this mode when + the computer is running on batteries and the lid is closed + (or the user is inactive for some time). +

+

+ Suspend to disk (Hibernation) saves the machine's state into + swap space and completely powers off the machine. When the + machine is powered on, the state is restored. Until then, + there is zero power consumption. Suspend to RAM and + hibernation are normally appropriate for portable devices + such as laptops, but can be used on workstations. The + capability is not really appropriate for servers. +

+

+ To use hibernation, the kernel parameter + resume=/dev/<swap_partition> has to be used on the + kernel command line (in grub.cfg). The swap partition should + be at least the size of the physical RAM on the system. +

+
+
+

+ Installation of Power Management Utilities +

+

+ First, fix several bugs and a couple of incompatibilities + with newer kernels: +

+
patch -Np1 -i ../pm-utils-1.4.1-bugfixes-1.patch
+

+ Install Power Management + Utilities by running the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --docdir=/usr/share/doc/pm-utils-1.4.1 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you don't have xmlto-0.0.29 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) +

+
+
+
+
+
+
+
+

+ Power-profiles-daemon-0.30 +

+
+
+
+
+
+

+ Introduction to Power-profiles-daemon +

+

+ The Power-profiles-daemon + package provides a program that allows modification of the + system power/behavior state. This is used on many laptops and + can be used by a Desktop Environment to activate power saving + or performance CPU governors through dbus. On other systems, + Power-profiles-daemon can be used as a streamlined way to set + the CPU governor in order to increase system performance at + the cost of energy usage. +

+

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

+

+ Package Information +

+
+ +
+

+ Power-profiles-daemon Dependencies +

+
+ Required +
+

+ Polkit-126, PyGObject-3.52.3 + (pycairo is not + needed), and UPower-1.90.9 +

+
+ Optional +
+

+ GTK-Doc-1.34.0, The rest are for the + tests, dbusmock-0.36.0, umockdev-0.19.3, + isort, and mccabe +

+
+
+

+ Kernel Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
Power management and ACPI options --->
+  CPU Frequency scaling --->
+    -*-   CPU Frequency scaling                                       [CPU_FREQ]
+    -*-     'performance' governor                    [CPU_FREQ_GOV_PERFORMANCE]
+    <*/M>   'powersave' governor                        [CPU_FREQ_GOV_POWERSAVE]
+    # Select if CPU is Intel:
+    [ /*]   Intel P state control                             [X86_INTEL_PSTATE]
+    # Select if CPU is AMD:
+    [ /*]   AMD Processor P-State driver                        [X86_AMD_PSTATE]
+
+Device Drivers --->
+  # Some drivers under this submenu provide "platform profile" support
+  # and power-profiles-daemon can take advantage from platform profiles;
+  # select a driver if suitable for your platform:
+  [ /*] X86 Platform Specific Device Drivers --->         [X86_PLATFORM_DEVICES]
+

+ Select the appropriate sub-options that appear when the above + options are selected. As much as possible, the layout should + be the same as in kernel configuration menus. +

+
+
+

+ Installation of Power-profiles-daemon +

+

+ Install Power-profiles-daemon by running the + following commands: +

+
mkdir build &&
+cd build &&
+
+meson setup                        \
+      --prefix=/usr                \
+      --buildtype=release          \
+      -D gtk_doc=false             \
+      -D tests=false               \
+      -D systemdsystemunitdir=/tmp \
+      .. &&
+ninja
+

+ If you have installed the external dependencies, to test the + results issue: ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+

+ Now, clean up an unneeded systemd unit installed into /tmp: +

+
+rm -fv /tmp/power-profiles-daemon.service
+
+

+ Create a directory required for persistent power states after + reboot: +

+
+install -vdm755 /var/lib/power-profiles-daemon
+
+
+
+

+ Command Explanations +

+

+ -D gtk_doc=false: + Prevents building the documentation. Remove this if you have + GTK-Doc installed and wish + to build the documentation. +

+

+ -D tests=false: + Prevents building the tests because they cannot be run within + the boundaries of BLFS. Remove this if you have installed the + external dependencies and wish to run the tests. +

+

+ -D + systemdsystemunitdir=/tmp: Removes the dependency + on systemd. +

+
+
+

+ Configuring Power-profiles-daemon +

+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically start the power-profiles-daemon + when the system is rebooted, install the /etc/rc.d/init.d/power-profiles-daemon + bootscript from the blfs-bootscripts-20250225 as + the root user: +

+
make install-power-profiles-daemon
+
+
+
+
+
+

+ Select a Power Profile +

+
+
+
+

+ To list all supported power profiles, issue: +

+
powerprofilesctl
+

+ To activate a power profile (for example performance), issue: +

+
powerprofilesctl set performance
+

+ Some desktop environments (for example GNOME and KDE) also + provide a graphical interface to interact with power-profiles-daemon and + activate a power profile. +

+

+ The activated power profile is automatically stored in + /var/lib/power-profiles-daemon/state.ini + and power-profiles-daemon + will read it out and activate it again on the next boot if + the bootscript is installed as + above. +

+
+

+ Caution +

+

+ On some older systems power-profiles-daemon will appear + to install and indicate correct values, but will not + actually work. To check this, run cat + /sys/devices/system/cpu/cpufreq/policy0/scaling_driver. + If the result is not "intel_pstate" but instead + "intel_cpufreq" (or similar on AMD systems), then power + changes must be made manually. +

+

+ To change power states manually, first check to see what + governors are available with: cat + /sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors. + Then set the desired governor as the root user with: +

+
gov=performance
+for CPUFREQ in /sys/devices/system/cpu/cpufreq/policy*/scaling_governor; do
+  echo -n ${gov} > ${CPUFREQ}"
+done
+

+ If you are setting the scaling_governor to "performance", + be careful about heat and battery issues with extended + use. +

+
+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + powerprofilesctl +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ powerprofilesctl +

+
+

+ This allows the user to set the power governor of + the CPU. +

+
+
+
+
+
+
+
+

+ Raptor-2.0.16 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.librdf.org/source/raptor2-2.0.16.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 0a71f13b6eaa0a04bf411083d89d7bc2 +

    +
  • +
  • +

    + Download size: 1.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 25 MB (additional 2 MB + for the tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (additional 0.3 SBU for + the tests) +

    +
  • +
+
+

+ Raptor Dependencies +

+
+ Required +
+

+ cURL-8.15.0 and libxslt-1.1.43 +

+
+ Optional +
+

+ GTK-Doc-1.34.0, ICU-77.1 and libyajl +

+
+
+

+ Installation of Raptor +

+

+ First, fix an incompatibility with libxml2-2.11.x: +

+
sed -i 's/20627/20627 \&\& LIBXML_VERSION < 21100/' src/raptor_libxml.c
+

+ Install Raptor by running + the following commands: +

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

+ To test the results, issue: make check. Several of the + XML tests may fail. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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-77.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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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.16 +

+
+ Optional +
+

+ libgcrypt-1.11.2 +

+
+
+

+ 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 a utility for retrieving the installation + options of Rasqal +

+
+

+ roqet +

+
+

+ is an RDF query utility +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Redland Dependencies +

+
+ Required +
+

+ Rasqal-0.9.33 +

+
+ Optional +
+

+ SQLite-3.50.4, MariaDB-11.8.3 or + MySQL, + PostgreSQL-17.6, + Berkeley DB (deprecated) libiodbc, + virtuoso, + and 3store +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Sysstat-12.7.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Sysstat Dependencies +

+ +
+
+

+ Installation of Sysstat +

+

+ Install Sysstat by running + the following commands: +

+
sa_lib_dir=/usr/lib/sa    \
+sa_dir=/var/log/sa        \
+conf_dir=/etc/sysstat     \
+./configure --prefix=/usr \
+            --disable-file-attr &&
+make
+

+ This package does not come with a working test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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 installing the /etc/rc.d/init.d/sysstat init script + included in the blfs-bootscripts-20250225 package + using the following command as the root user: +

+
make install-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.7.8 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 +

+
+
+
+
+
+
+
+

+ UDisks-2.10.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ UDisks Dependencies +

+
+ Required +
+

+ libatasmart-0.19, libblockdev-3.3.1, libgudev-238, and + Polkit-126 +

+
+ Recommended +
+ +
+ Optional (Required if building + GNOME) +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Optional +
+

+ D-Bus Python-1.4.0 (for the + integration tests), GTK-Doc-1.34.0, libxslt-1.1.43 (for the + man pages), LVM2-2.03.34, PyGObject-3.52.3 + (for the integration tests), exFAT, and libiscsi +

+
+ Optional Runtime Dependencies +
+

+ btrfs-progs-6.16, dbus-1.16.2, dosfstools-4.2, + gptfdisk-1.0.10, mdadm-4.4, and xfsprogs-6.15.0 +

+
+
+

+ Installation of UDisks +

+

+ Install UDisks by running + the following commands: +

+
./configure --prefix=/usr        \
+            --sysconfdir=/etc    \
+            --localstatedir=/var \
+            --disable-static     \
+            --enable-available-modules &&
+make
+

+ To test the results, issue: make check. A more thorough + test can be run with make + ci. You must first create the directories + /var/run/udisks2 and + /var/lib/udisks2, and the + optional python modules should be present. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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. +

+

+ --enable-available-modules: + This switch enables additional UDisks2 functionalities if libblockdev-3.3.1 has been built with + optional dependencies. +

+
+
+

+ 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/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 +

+
+
+
+
+
+
+
+

+ UnRar-7.1.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.rarlab.com/rar/unrarsrc-7.1.10.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: d9c51328fcb5d8c31d097b2baaaced00 +

    +
  • +
  • +

    + Download size: 264 KB +

    +
  • +
  • +

    + Estimated disk space required: 2.7 MB +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU +

    +
  • +
+
+
+
+

+ Installation of UnRar +

+
+

+ Note +

+

+ This package extracts the tarball to the unversioned + directory unrar and not the + expected directory unrar-7.1.10. +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ UPower-1.90.9 +

+
+
+
+
+
+

+ Introduction to UPower +

+

+ The UPower package provides + an interface for enumerating power devices, listening to + device events, and querying history and statistics. Any + application or service on the system can access the + org.freedesktop.UPower service via the system message bus. +

+

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

+

+ Package Information +

+
+ +
+

+ UPower Dependencies +

+
+ Required +
+

+ libgudev-238 and libusb-1.0.29 +

+
+ Optional (Required if building + GNOME) +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Optional +
+

+ GTK-Doc-1.34.0, libxslt-1.1.43, + docbook-xsl-nons-1.79.2, + PyGObject-3.52.3, dbusmock-0.36.0, umockdev-0.19.3 (for + part of the test suite), and libimobiledevice +

+
+
+

+ Installation of UPower +

+

+ Install UPower by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                   \
+      --prefix=/usr              \
+      --buildtype=release        \
+      -D gtk-doc=false           \
+      -D man=false               \
+      -D systemdsystemunitdir=no \
+      -D udevrulesdir=/usr/lib/udev/rules.d &&
+ninja
+

+ To test the results, issue: LC_ALL=C ninja test. The + test suite should be run from a local GUI session started + with dbus-launch. On 32-bit machines, one test will fail due + to rounding errors: Tests.test_battery_energy_charge_mixed. On + some systems, two tests relating to the headphone hotplug + feature are known to fail. Those can be safely ignored since + the functionality still works. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D gtk-doc=false: + Prevents building the documentation. Remove this if you have + GTK-Doc installed and wish + to build the documentation. +

+

+ -D man=false: + Prevents building the manual pages. Remove this if you have + libxslt-1.1.43 and docbook-xsl-nons-1.79.2 + installed and wish to build the manual pages. +

+

+ -D + systemdsystemunitdir=no: Removes the dependency + on systemd. +

+

+ -D + udevrulesdir=/usr/lib/udev/rules.d: Tells the + build system where to install udev rules because the information is + missing in /usr/lib/pkgconfig/libudev.pc +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + 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 +

+
+
+
+
+
+
+
+

+ Which-2.23 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/which/which-2.23.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 1963b85914132d78373f02a84cdb3c86 +

    +
  • +
  • +

    + Download size: 197 KB +

    +
  • +
  • +

    + Estimated disk space required: 1.2 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+
+
+

+ 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. +

+
+
+
+
+
+

+ xdotool-3.20211022.1 +

+
+
+
+
+
+

+ Introduction to xdotool +

+

+ The xdotool package provides + the capabilities to simulate keyboard input and mouse + activity, move and resize windows, etc. It does this using + X11’s XTEST extension and other Xlib functions. +

+

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

+

+ Package Information +

+
+ +
+

+ xdotool Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+
+

+ Installation of xdotool +

+

+ Install xdotool by running + the following commands: +

+
make WITHOUT_RPATH_FIX=1
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make PREFIX=/usr INSTALLMAN=/usr/share/man install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + xdotool +
+
+ Installed Libraries: + libxdo.so +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of Zip +

+

+ Install Zip by running the + following commands: +

+
make -f unix/Makefile generic CC="gcc -std=gnu89"
+

+ 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 +

+

+ CC="gcc -std=gnu89": + This parameter overrides the CC + variable that is set to cc in the unix/Makefile file. On LFS cc is a symlink to + gcc, and it + uses -std=gnu17 (ISO 9899:2017 + with GNU extensions) as the default but Zip is a “legacy” package + where some grammar constructs are invalid in ISO 9899:1999 + and newer standards. +

+

+ prefix=/usr: This + parameter overrides the prefix + variable that is set to /usr/local in the unix/Makefile file. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Hardware Utilities +

+
+
+
+
+
+
+
+

+ Hdparm-9.65 +

+
+
+
+
+
+

+ 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 + 12.4 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 +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ lm-sensors-3-6-2 +

+
+
+
+
+
+

+ Introduction to lm-sensors +

+

+ The lm-sensors package + provides userspace support for the hardware monitoring + drivers in the Linux kernel. This is useful for monitoring + the temperature of the CPU and adjusting the performance of + some hardware (such as cooling fans). +

+

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

+

+ Package Information +

+
+ +
+

+ lm-sensors Dependencies +

+
+ Required +
+

+ Which-2.23 +

+
+ Optional +
+

+ RRDtool (required to + build the sensord program) and + dmidecode (runtime) +

+
+
+

+ Kernel + Configuration +

+

+ The following configuration options attempt to cover the most + common hardware monitoring devices in a typical desktop or + laptop system. View the help of each (by pressing the + H button with + the option focused in the make + menuconfig) to know if you need it. There are + many platform-specific hardware monitoring devices so it's + impossible to list the configuration for all of them here. + You may investigate the content of /sys/class/hwmon within a “mainstream” distro + running on the system to know which drivers you need. +

+
Power management and ACPI options --->
+  [*] ACPI (Advanced Configuration and Power Interface) Support --->      [ACPI]
+    < /*/M> Battery                                               [ACPI_BATTERY]
+    < /*/M> Thermal Zone                                          [ACPI_THERMAL]
+
+Device Drivers --->
+  NVME Support --->
+    < /*> NVM Express block device                                [BLK_DEV_NVME]
+    # Set [HWMON] to <*> (not <M>!) or it will not show up:
+    [ /*] NVMe hardware monitoring                                  [NVME_HWMON]
+  <*/M> Hardware Monitoring support --->                                 [HWMON]
+    < /*/M> AMD Athlon64/FX or Opteron temperature sensor       [SENSORS_K8TEMP]
+    < /*/M> AMD Family 10h+ temperature sensor                 [SENSORS_K10TEMP]
+    < /*/M> AMD Family 15h processor power                [SENSORS_FAM15H_POWER]
+    < /*/M> Intel Core/Core2/Atom temperature sensor          [SENSORS_CORETEMP]
+

+ Recompile your kernel and reboot into the new kernel. +

+
+
+

+ 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-2 &&
+cp -rv              README INSTALL doc/* \
+                    /usr/share/doc/lm-sensors-3-6-2
+
+
+

+ 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. Be sure to + install RRDtool in /usr by + running make + prefix=/usr when building it. Otherwise, + lm-sensors will not find it easily. +

+
+
+

+ Configuring lm-sensors +

+
+
+
+
+

+ Config File +

+
+
+
+

+ /etc/sensors3.conf +

+
+
+
+

+ 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-2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ fancontrol +

+
+

+ is a shell script for use with lm-sensors. It reads its + configuration from a file (/etc/sensors3.conf by + default), 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 +

+
+
+
+
+
+
+
+

+ pciutils-3.14.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ pciutils Dependencies +

+
+ Recommended +
+ +
+
+

+ Installation of PCI Utils +

+

+ Prevent the installation of the pci.ids file to avoid a conflict with the + hwdata-0.398 package: +

+
sed -r '/INSTALL/{/PCI_IDS|update-pciids /d; s/update-pciids.8//}' \
+    -i Makefile
+

+ 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
+

+ Next, install the hwdata-0.398 package for the pci.ids file. +

+
+
+

+ Command Explanations +

+

+ SHARED=yes: This + parameter enables building of the shared library instead of + the static one. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lspci, pcilmr, and setpci +
+
+ Installed Library: + libpci.so +
+
+ Installed Directory: + /usr/include/pci +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ lspci +

+
+

+ is a utility for displaying information about all + PCI buses in the system and all devices connected + to them +

+
+

+ pcilmr +

+
+

+ is a utility for managing PCIe links +

+
+

+ setpci +

+
+

+ is a utility for querying and configuring PCI + devices +

+
+

+ libpci.so +

+
+

+ is a library that allows applications to access the + PCI subsystem +

+
+
+
+
+
+
+
+

+ sg3_utils-1.48 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://sg.danny.cz/sg/p/sg3_utils-1.48.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 0024393d2d2942cc081ce613d98db68a +

    +
  • +
  • +

    + Download size: 1.2 MB +

    +
  • +
  • +

    + Estimated disk space required: 27 MB +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU +

    +
  • +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ sysmond-1.0.0 +

+
+
+
+
+
+

+ Introduction to sysmond +

+

+ The sysmond package + (pronounced sys-mon-d) is the daemon portion of the + sysmond/sysmon3 client/server application that monitors + system values including CPU usage, memory usage, and system + temperatures in a compact screen window. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Kernel + Configuration +

+

+ There are many different hardware devices that sense + temperatures. The temperature readings are updated by kernel + drivers that support specific devices. To determine what + devices are present on a system the lm-sensors-3-6-2 + package has a Perl script, sensors-detect that can + look for specific devices that are in the current system. +

+

+ After sensor devices are known, the appropriate kernel driver + must be enabled. In many cases, but not all, the appropriate + drivers are selected by default. The kernel configuration + parameters are located at: +

+
Device Drivers --->                                    
+  Networking options --->
+    [*] Hardware Monitoring support --->        [CONFIG_HWMON]
+

+ In most cases at least Intel Core/Core2/Atom temperature + sensor (SENSORS_CORETEMP) should be enabled for Intel based + systems or CONFIG_SENSORS_K10TEMP (AMD) should be enabled for + AMD based systems. +

+
+
+

+ Installation of sysmond +

+

+ Install sysmond by running + the following commands: +

+
make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Configuring sysmond +

+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/sysmond init script + included in the blfs-bootscripts-20250225 package. +

+
make install-sysmond
+
+
+
+
+
+

+ Config File +

+
+
+
+

+ By default the configuration file is /etc/sysmond.conf but it can be changed + by passing --config-file <filename> on the command + line. Initially all of the configuration items are + commented out and the defaults specified there are used. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + sysmond +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ sysmon3-3.0.1 +

+
+
+
+
+
+

+ Introduction to sysmon3 +

+

+ The sysmon3 package + (pronounced sys-mon-3) is the client portion of the + sysmond/sysmon3 client/server application that monitors + system values including CPU usage, memory usage, and system + temperatures in a compact screen window. Multiple instances + of sysmon3 can be run on a + system to monitor values on different systems. +

+

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

+

+ Package Information +

+
+ +
+

+ sysmon3 Dependencies +

+
+ Required +
+

+ Qt-6.9.2 (or + qt5) +

+
+ Required at runtime +
+

+ sysmond-1.0.0 (runtime on the system to + be monitored) +

+
+
+

+ Installation of sysmon3 +

+

+ Install sysmon3 by running + the following commands: +

+
qmake sysmon3.pro &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
install -vm755 sysmon3 /usr/bin
+
+
+

+ Configuring sysmon3 +

+
+
+
+
+

+ Configuration Files +

+
+
+
+

+ $HOME/.config/LinuxFromScratch/<monitored + system>.conf +

+

+ The configuration files are created at run time for each + system being monitored. They are not normally updated + manually, but are managed by the program's configuration + widgets. +

+

+ When first run, the program asks for the system to be + monitored. After testing that communication to the server + is satisfactory and the server name is saved, the main + window will start. After initial setup, the setup widget + can be bypassed by passing the server name as an argument + to the program. +

+

+ The program is designed to take up minimal screen space so + by default it does not have a frame. The frame can be + toggled on and off with Ctrl-F. This can be useful for + placing the window in the desired location. After initial + placement, the location is saved in the configuration file + for the next time the program is started. +

+

+ A short operation menu is brought up with a right mouse + click on the main window. Configuration widgets are brought + up with F1. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + sysmon3 +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + $HOME/.config/LinuxFromScratch/ +
+
+
+
+
+
+
+
+

+ usbutils-018 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ USB + Utils Dependencies +

+
+ Required +
+

+ libusb-1.0.29 +

+
+ Recommended +
+ +
+
+

+ Installation of USB Utils +

+

+ Install USB Utils by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release &&
+
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ For the usb.ids data file, + install the hwdata-0.398 package. +

+

+ 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. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ [2] The default Xorg configuration file is + /etc/X11/xorg.conf.d/30-keyboard.conf. +

+
+
+
+
+
+
+

+ 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++, + Perl, and Python. This chapter provides instructions + to build many popular programming environments to greatly expand + your system's development capabilities. +

+
+
+
+

+ cargo-c-0.10.15 +

+
+
+
+
+
+

+ Introduction to cargo-c +

+

+ The cargo-c package creates + a cargo subcommand to build and install C-ABI compatible + dynamic and static libraries. +

+

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

+

+ Package Information +

+
+ +
+

+ cargo-c Dependencies +

+
+ Required +
+

+ rustc-1.89.0 +

+
+ Recommended +
+ +
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+
+

+ Installation of cargo-c +

+

+ First, download a file to ensure that cargo uses the dependency + versions specified by the upstream developers when this + cargo-c version (0.10.15) was released. Without this, the + latest versions of the dependencies would be used and they + might cause breakages: +

+
curl -fLO https://github.com/lu-zero/cargo-c/releases/download/v0.10.15/Cargo.lock
+
+

+ Note +

+

+ Normally we would put such a download into an “Additional + Downloads” section. But in this case we + cannot tell the package name and version from the file name + Cargo.lock, so it's better + not to put the ambiguously-named file outside the + cargo-c-0.10.15 directory. We + use curl here + because the cURL-8.15.0 package should have been + installed as a required dependency of rustc-1.89.0. +

+

+ The md5sum of the file should be 57fab87782a5f9ef46fcbddc44d425b1. +

+
+

+ Install cargo-c by running + the following commands: +

+
[ ! -e /usr/include/libssh2.h ] || export LIBSSH2_SYS_USE_PKG_CONFIG=1    &&
+[ ! -e /usr/include/sqlite3.h ] || export LIBSQLITE3_SYS_USE_PKG_CONFIG=1 &&
+
+cargo build --release
+

+ To test the results, issue: cargo test --release. +

+

+ Now, as the root user: +

+
install -vm755 target/release/cargo-{capi,cbuild,cinstall,ctest} /usr/bin/
+

+ Finally, unset the exported environment variables: +

+
unset LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cargo-capi, cargo-cbuild, + cargo-cinstall, and cargo-ctest +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ Cbindgen-0.29.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ cbindgen Dependencies +

+
+ Required +
+

+ rustc-1.89.0 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+
+

+ Installation of cbindgen +

+

+ Install cbindgen by running + the following commands: +

+
cargo build --release
+

+ To test the results, issue: cargo test --release. Three + tests in profile.rs are known + to fail because they expect some Rust unstable features + disabled in the BLFS rustc-1.89.0 configuration. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ Clisp-2.49.95 +

+
+
+
+
+
+

+ Introduction to Clisp +

+

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

+
+

+ Note +

+

+ This package has not had a 'stable' release since 2010. The + package here was created from the upstream git + repository in order to enable it to be built with + gcc-15. The most recent commit was May 2025. +

+
+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://anduin.linuxfromscratch.org/BLFS/clisp/clisp-2.49.95.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: e3b3ba6b3432280e4d4a766404f02d6f +

    +
  • +
  • +

    + Download size: 7.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 146 MB (with tests; 34 + MB installed) +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU (Using parallelism=4; add + 0.3 SBU for tests) +

    +
  • +
+
+

+ Clisp Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ libnsl-2.0.1 and libffcall +

+
+
+

+ Installation of Clisp +

+

+ Install Clisp by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+../configure --srcdir=../  \
+             --prefix=/usr \
+             --docdir=/usr/share/doc/clisp-2.49.95 &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --docdir=/usr/share/doc/clisp-2.49.95: + this switch forces the HTML documentation to be installed + into a versioned directory. +

+

+ --with-libffcall-prefix=/usr: use + this to tell configure that you have + installed the optional libffcall + package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + clisp and clisp-link +
+
+ Installed Libraries: + various static libraries in + /usr/lib/clisp-2.49.95+/base/ +
+
+ Installed Directories: + /usr/lib/clisp-2.49.95+, + /usr/share/doc/clisp-2.49.95, and + /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 +

+
+
+
+
+
+
+
+

+ CMake-4.1.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://cmake.org/files/v4.1/cmake-4.1.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 80ae27faba5068c8ec12c77bf00e6db3 +

    +
  • +
  • +

    + Download size: 11 MB +

    +
  • +
  • +

    + Estimated disk space required: 621 MB (add 1.4 GB for + tests) +

    +
  • +
  • +

    + Estimated build time: 2.6 SBU (add 4.3 SBU for tests, + both using parallelism=4) +

    +
  • +
+
+

+ CMake Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ GCC-15.2.0 + (for gfortran), git-2.50.1 (for use during tests), mercurial-7.1 (for use during tests), + OpenJDK-24.0.2 (for use during tests), + Qt-6.9.2 + (for the Qt-based GUI), sphinx-8.2.3 (for building documents), + Subversion-1.14.5 (for testing), + cppdap, jsoncpp, + and rhash +

+
+
+

+ 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-cppdap   \
+            --no-system-librhash \
+            --docdir=/share/doc/cmake-4.1.0 &&
+make
+

+ To test the results, issue: bin/ctest -j$(nproc). + Replace $(nproc) + with an integer between 1 and the number of system logical + cores if you don't want to use all. +

+

+ 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 the system + installed version for all needed libraries but those + explicitly specified via a --no-system-* option. +

+

+ --no-system-jsoncpp + and --no-system-cppdap: These + switches remove the JSON-C++ + library from the list of system libraries. A bundled version + of that library is used instead. +

+

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

+

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

+

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

+

+ --parallel=: This switch enables + performing the CMake + bootstrap with multiple jobs at one time. It's not needed if + the MAKEFLAGS variable has been + already set for using multiple processors following Using Multiple Processors. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ccmake, cmake, cmake-gui + (optional), cpack, and ctest +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/cmake-4.1 and + /usr/share/doc/cmake-4.1.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Doxygen-1.14.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://doxygen.nl/files/doxygen-1.14.0.src.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: a86f6c0203e51a57fbcaf98830d1be16 +

    +
  • +
  • +

    + Download size: 8.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 256 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 1.3 SBU (with tests; both using + parallelism=4) +

    +
  • +
+
+

+ Doxygen Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and git-2.50.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ Graphviz-13.1.2, ghostscript-10.05.1, + libxml2-2.14.5 (required for the tests), + LLVM-20.1.8 (with clang), texlive-20250308 (or install-tl-unx), xapian-1.4.29 (for + doxyindexer), and javacc +

+
+
+

+ Installation of Doxygen +

+

+ First, fix up some python scripts: +

+
grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/'
+

+ Install Doxygen by running + the following commands: +

+
mkdir -v build &&
+cd       build &&
+
+cmake -G "Unix Makefiles"          \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      -D build_wizard=ON           \
+      -D force_qt=Qt6              \
+      -W no-dev .. &&
+make
+

+ To test the results, issue: make tests. One test, + 012_cite.dox, is known to fail if texlive-20250308 or install-tl-unx is not installed. +

+

+ 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  -D build_doc=ON \
+       -D DOC_INSTALL_DIR=share/doc/doxygen-1.14.0 \
+       .. &&
+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 +

+

+ -D build_wizard=OFF: Use this + switch if Qt6 is not + installed. +

+

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

+

+ -D force_qt6=ON: Use this switch + to build doxywizard with Qt6 even if + Qt5 is installed. +

+

+ -D use_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 require formulas to create PDF + documentation, then you must have texlive-20250308 installed. If + you require formulas to convert PostScript files to bitmaps, + then you must have ghostscript-10.05.1 installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + doxygen and optionally, doxywizard, + doxyindexer and doxysearch.cgi +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/doc/doxygen-1.14.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ dtc-1.7.2 +

+
+
+
+
+
+

+ Introduction to Dtc +

+

+ The dtc package contains the + Device Tree Compiler for working with device tree source and + binary files and also libfdt, a utility library for reading + and manipulating device trees in the binary format. +

+

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

+

+ Package Information +

+
+ +
+

+ Dtc + Dependencies +

+
+ Optional +
+

+ libyaml-0.2.5, SWIG-4.3.1, and texlive-20250308 +

+
+
+

+ Installation of Dtc +

+

+ Install dtc by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D python=disabled  &&
+ninja
+

+ To test the results, issue: CC='gcc -Wl,-z,noexecstack' meson test + -v. +

+

+ Now, as the root user: +

+
ninja install
+

+ Still as the root user, + remove the useless static library: +

+
rm /usr/lib/libfdt.a
+

+ If you have texlive-20250308 installed, you + can build the PDF format of the documentation by issuing the + following command: +

+
pushd ../Documentation
+  latexmk -bibtex --pdf dtc-paper &&
+  latexmk -bibtex --pdf dtc-paper -c
+popd
+

+ To install the documentation, as the root user issue the following command: +

+
cp -R ../Documentation -T /usr/share/doc/dtc-1.7.2
+

+ If you have installed SWIG-4.3.1 and you wish to install the + Python 3 bindings of this package, build the Python 3 module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir ..
+

+ As the root user, install the + Python 3 module: +

+
pip3 install --no-index --find-links dist --no-user libfdt
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D python=disabled: + This switch prevents building the Python 3 binding with the + deprecated method (running setup.py directly). We will + build the Python 3 binding with the pip3 wheel command + separately if wanted. +

+

+ CC='gcc -Wl,-z,noexecstack': This + variable prevents marking the shared libraries in the test + suite as requiring executable stack. Glibc 2.41 or later has + stopped allowing dlopening such + a shared library so the test suite would fail. But those + shared libraries don't really need an executable stack, so we + can use -Wl,-z,noexecstack to fix up + the test suite. It's needed in the CC environment for the meson test because those + shared libraries are built by a test script instead of the + meson/ninja building system, and + the test script does not recognize other “common” + environment variables like LDFLAGS. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + convert-dtsv0, dtc, dtdiff, + fdtdump, fdtget, fdtoverlay, and fdtput +
+
+ Installed Library: + libfdt.so +
+
+ Installed Directory: + /usr/lib/python3.13/site-packages/libfdt-1.7.2.dist-info + and /usr/share/doc/dtc-1.7.2 (optionally) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ convert-dtsv0 +

+
+

+ converts device tree v0 source to device tree v1 +

+
+

+ dtc +

+
+

+ compiles device tree source (dts) to device tree + binary blob (dtb), or de-compiles dtb to dts +

+
+

+ dtdiff +

+
+

+ compares two different device trees +

+
+

+ fdtdump +

+
+

+ prints a readable version of a flat device-tree + file +

+
+

+ fdtget +

+
+

+ reads values from device-tree +

+
+

+ fdtoverlay +

+
+

+ applies a number of overlays to a base device tree + blob +

+
+

+ fdtput +

+
+

+ writes a property value to a device tree +

+
+

+ libfdt.so +

+
+

+ is a utility library for reading and manipulating + device trees in the binary format +

+
+
+
+
+
+
+
+

+ GCC-15.2.0 +

+
+
+
+
+
+

+ Introduction to GCC +

+

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

+
+

+ Note +

+

+ Additional languages, among which COBOL, D, and Ada, are + available in the collection. COBOL is currently only + supported on x86-64 systems. D and Ada have a binary + bootstrap requirement for the first installation, so their + installation is not described here. To install D or Ada, + you can proceed along the same lines as below after + installing the corresponding compiler from a binary + package. Finally add ada or + d or cobol to the --enable-languages line as + desired. +

+
+

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

+
+

+ Caution +

+

+ If you are upgrading GCC + from any other version prior to 15.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. +

+
+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/gcc/gcc-15.2.0/gcc-15.2.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: b861b092bf1af683c46a8aa2e689a6fd +

    +
  • +
  • +

    + Download size: 96 MB +

    +
  • +
  • +

    + Estimated disk space required: 12 GB (3.8 GB installed + with all listed languages; add 2 GB for tests) +

    +
  • +
  • +

    + Estimated build time: 16 SBU (add 33 SBU for tests; + both with parallelism=8) +

    +
  • +
+
+

+ GCC + Dependencies +

+
+ Optional +
+

+ GDB-16.3, + Graphviz-13.1.2 (some tests use it if + installed; note that if it's installed but not built with + libpng-1.6.50 these tests will fail), + Valgrind-3.25.1 (for tests), and + ISL + (to enable graphite optimization) +

+
+
+

+ 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/12.4/chapter08/gcc.html). +

+
+

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

+

+ Install GCC by running the + following commands: +

+
case $(uname -m) in
+  x86_64)
+    sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
+  ;;
+esac
+
+mkdir build               &&
+cd    build               &&
+
+../configure              \
+    --prefix=/usr         \
+    --disable-multilib    \
+    --with-system-zlib    \
+    --enable-default-pie  \
+    --enable-default-ssp  \
+    --enable-host-pie     \
+    --disable-fixincludes \
+    --enable-languages=c,c++,fortran,go,objc,obj-c++,m2 &&
+make
+

+ If you have installed additional packages such as + valgrind and gdb, the gcc part of the test suite will run more + tests than in LFS. Some of those will report FAIL and others + XPASS (pass when expected to FAIL). As of gcc-15.2.0, about + 69 FAILs 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 about 107 + unexpected failures out of over 610,000 tests. To run the + tests, issue: +

+
make -k check
+

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

+
../contrib/test_summary
+

+ Now, as the root user: +

+
make install &&
+
+mkdir -pv /usr/share/gdb/auto-load/usr/lib              &&
+mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&
+
+chown -v -R root:root \
+    /usr/lib/gcc/*linux-gnu/15.2.0/include{,-fixed}     &&
+
+ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/15.2.0/liblto_plugin.so \
+        /usr/lib/bfd-plugins/
+
+

+ Important +

+

+ Now you should upgrade readline to 8.3-rc1 or newer + following the LFS book, or packages using readline may fail + to build. +

+
+
+
+

+ Command Explanations +

+

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

+

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

+

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

+

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

+

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

+

+ --enable-host-pie: + Makes the compiler executables PIE (Position Independent + Executable). This can be used to enhance protection against + ROP (Return Oriented Programming) attacks, and can be viewed + as part of a wider trend to harden binaries. +

+

+ --enable-languages=c,c++,fortran,go,objc,obj-c++,m2: + This command identifies which languages to build. You may + modify this command to remove undesired languages. GCC also + supports Ada and D, but building GCC with Ada (or D) support + needs an existing Ada (or D) compiler. So they are not + enabled here. +

+

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

+

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

+

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

+

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

+

+ --enable-host-shared + --enable-languages=jit: Build libgccjit, a library for embedding GCC + inside programs and libraries for generating machine code. + Despite “JIT” (just-in-time) in the name, the + library can be used for AOT (ahead-of-time) compilation as + well. --enable-host-shared is + needed for building libgccjit, but it significantly slows + down GCC. So libgccjit should + be built and installed separately, not as a part of the + “main” + GCC installation. If you need this library, configure GCC + with these two options and install the library by running + make -C gcc jit.install-common + jit.install-info as the root user. This library is not used by + any BLFS package, nor tested by the BLFS developers. +

+
+
+

+ Contents +

+

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

+
+
+
+ Installed Programs: + gccgo, gfortran, gm2, go, and + gofmt, hard-linked to architecture specific names +
+
+ Installed Libraries: + libgfortran.{so,a}, libgm2.{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 +

+
+

+ gm2 +

+
+

+ is a GCC-based compiler for the Modula-2 language +

+
+

+ go +

+
+

+ is a tool for managing Go source code +

+
+

+ gofmt +

+
+

+ is a tool for formatting Go source code +

+
+

+ gfortran +

+
+

+ is a GCC-based compiler for the Fortran language +

+
+
+
+
+
+
+
+

+ GC-8.2.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+ Optional +
+

+ libatomic_ops-7.8.2 +

+
+
+

+ Installation of GC +

+

+ Install GC by running the + following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

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

+ Command Explanations +

+

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

+

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

+

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

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libcord.so, libgc.so, libgccpp.so, + and libgctba.so +
+
+ Installed Directories: + /usr/include/gc and + /usr/share/doc/gc-8.2.8 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ libcord.so +

+
+

+ contains a tree-based string library +

+
+

+ libgc.so +

+
+

+ contains a C interface to the conservative garbage + collector, primarily designed to replace the C + malloc function +

+
+

+ libgccpp.so +

+
+

+ contains a C++ interface to the conservative + garbage collector +

+
+

+ libgctba.so +

+
+

+ contains a C++ interface to throw bad allocations +

+
+
+
+
+
+
+
+

+ GDB-16.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/gdb/gdb-16.3.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: f7a7e2d0a6d28622ac69a3623b23876b +

    +
  • +
  • +

    + Download size: 23 MB +

    +
  • +
  • +

    + Estimated disk space required: 853 MB (add 825 MB for + docs; add 860 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 1.1 SBU (add 1.0 SBU for docs; + add 3.5 SBU tests; all using parallelism=8) +

    +
  • +
+
+

+ GDB + Dependencies +

+
+ Recommended Runtime Dependency +
+ +
+ Optional +
+

+ Doxygen-1.14.0, GCC-15.2.0 (ada, gfortran, and + go are used for tests), Guile-3.0.10, rustc-1.89.0 (used for some tests), + Valgrind-3.25.1, and SystemTap + (run-time, used for tests) +

+
+
+

+ Installation of GDB +

+

+ Install GDB by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+../configure --prefix=/usr          \
+             --with-system-readline \
+             --with-system-zlib     \
+             --with-python=/usr/bin/python3 &&
+make
+

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

+
make -C gdb/doc doxy
+

+ Running the tests is not recommended. The results vary a lot + depending on the system architecture and what optional + dependencies are installed and what version of gcc is being + used. On one system tested, there were 140 unexpected + failures (out of over 108,000 tests) and on another system + there were "only" 14 unexpected failures. The time to run the + tests varies from approximately 3 SBU to over 15 SBU when + using -j8. This depends on number of tests that time out as + well as other factors. +

+
+

+ Tip +

+

+ With a plain make + check, there are many warning messages + about a missing global configuration file. These can be + avoided by running touch + global.exp and prepending the make check command with + DEJAGNU=$PWD/global.exp. + In addition the tests can be speeded up considerably by + using the make option "-j<N>" + where <N> is the number of cores on your system. At + times though, using parallelism may result in strange + failures. +

+
+

+ To test the results anyway, issue: +

+
pushd gdb/testsuite &&
+make  site.exp      &&
+echo  "set gdb_test_timeout 30" >> site.exp &&
+make check 2>1 | tee gdb-check.log
+popd
+

+ See gdb/testsuite/README and TestingGDB. + There are many additional 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 can also depend on installed compilers. +

    +
  • +
  • +

    + On some AMD-based systems, over 200 additional tests + may fail due to a difference in the threading + implementation on those CPUs. +

    +
  • +
  • +

    + For gdb-16.1, using an Intel Xeon E5-1650 v3, there + were 14 unexpected failures out of over 120,000 tests. +

    +
  • +
  • +

    + Four tests in the gdb.base/step-over-syscall.exp suite + are known to fail due to changes in Linux 6.13 and + glibc-2.41. +

    +
  • +
+
+

+ Now, as the root user: +

+
make -C gdb install &&
+make -C gdbserver install
+

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

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

+ Command Explanations +

+

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

+

+ --with-system-zlib: + This switch forces GDB to + use the copy of Zlib + installed in LFS. +

+

+ --with-python=/usr/bin/python3: + This switch forces GDB to + use Python 3. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gcore, gdb, gdbserver, + gdb-add-index, and gstack +
+
+ Installed Library: + libinproctrace.so +
+
+ Installed Directories: + /usr/{include,share}/gdb and + /usr/share/doc/gdb-16.3 +
+
+
+
+

+ 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) +

+
+

+ gdb-add-index +

+
+

+ Allows adding index files to ELF binaries. This + speeds up gdb start on + large programs. +

+
+

+ gstack +

+
+

+ prints a stack trace from a program which is + currently running +

+
+

+ libinproctrace.so +

+
+

+ contains functions for the in-process tracing + agent. The agent allows for installing fast + tracepoints, listing static tracepoint markers, + probing static tracepoints markers, and starting + trace monitoring. +

+
+
+
+
+
+
+
+

+ Git-2.50.1 +

+
+
+
+
+
+

+ 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-7.1, Bazaar, Subversion-1.14.5, CVS, Perforce, and Team Foundation Server. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.kernel.org/pub/software/scm/git/git-2.50.1.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 2cb96fae126d66f8ff23a68f8dd5d748 +

    +
  • +
  • +

    + Download size: 7.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 453MB (with downloaded + documentation; add 19 MB for building docs; add 21 MB + for tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (with parallelism=4; add + 1.0 SBU for building docs, and up to 7 SBU (disk speed + dependent) for tests) +

    +
  • +
+
+

+ Additional Downloads +

+
+ +
+

+ Git + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Apache-2.4.65 (for some tests), Fcron-3.4.0 + (runtime, for scheduling git + maintenance jobs), GnuPG-2.4.8 (runtime, may + be used to sign Git commits + or tags, or verify the signatures of them), OpenSSH-10.0p1 + (runtime, needed to use Git + over ssh), pcre2-10.45, Subversion-1.14.5 + with Perl bindings (runtime, for git svn), Tk-8.6.16 (gitk, a simple + Git repository viewer, uses + Tk at runtime), Valgrind-3.25.1, Authen::SASL + (runtime, for git + send-email), and + IO-Socket-SSL-2.095 (runtime, for + git send-email + to connect to a SMTP server with SSL encryption) +

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

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

+
+
+

+ Installation of Git +

+

+ Install Git by running the + following commands: +

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

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

+

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

+
make html
+

+ If you have installed asciidoc-10.2.1 and xmlto-0.0.29 you can + create the man pages: +

+
make man
+

+ The test suite can be run in parallel mode. To run the test + suite, issue: GIT_UNZIP=nonexist make test -k |& tee + test.log. The GIT_UNZIP setting prevents the test suite from + using unzip, we + need it because in BLFS unzip is a symlink to + bsdunzip which + does not satisfy the assumption of some tests cases. If any + test case fails, the list of failed tests can be shown via + grep '^not ok' test.log | grep + -v TODO. +

+

+ Now, as the root user: +

+
make perllibdir=/usr/lib/perl5/5.42/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.50.1 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.50.1.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.50.1 &&
+tar   -xf   ../git-htmldocs-2.50.1.tar.xz \
+      -C    /usr/share/doc/git-2.50.1 --no-same-owner --no-overwrite-dir &&
+
+find        /usr/share/doc/git-2.50.1 -type d -exec chmod 755 {} \; &&
+find        /usr/share/doc/git-2.50.1 -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.50.1/man-pages/{html,text}         &&
+mv        /usr/share/doc/git-2.50.1/{git*.adoc,man-pages/text}     &&
+mv        /usr/share/doc/git-2.50.1/{git*.,index.,man-pages/}html &&
+
+mkdir -vp /usr/share/doc/git-2.50.1/technical/{html,text}         &&
+mv        /usr/share/doc/git-2.50.1/technical/{*.adoc,text}        &&
+mv        /usr/share/doc/git-2.50.1/technical/{*.,}html           &&
+
+mkdir -vp /usr/share/doc/git-2.50.1/howto/{html,text}             &&
+mv        /usr/share/doc/git-2.50.1/howto/{*.adoc,text}            &&
+mv        /usr/share/doc/git-2.50.1/howto/{*.,}html               &&
+
+sed -i '/^<a href=/s|howto/|&html/|' /usr/share/doc/git-2.50.1/howto-index.html &&
+sed -i '/^\* link:/s|howto/|&html/|' /usr/share/doc/git-2.50.1/howto-index.adoc
+
+
+

+ 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. +

+

+ tar -xf + ../git-manpages-2.50.1.tar.gz -C /usr/share/man + --no-same-owner: This untars git-manpages-2.50.1.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.50.1 + ...: These commands move some of the files + into subfolders to make it easier to sort through the docs + and find what you're looking for. +

+

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

+
+
+

+ Configuring Git +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ ~/.gitconfig and /etc/gitconfig +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + git, git-receive-pack, + git-upload-archive, and git-upload-pack (hardlinked to + each other), git-cvsserver, git-shell, gitk, and + scalar +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/libexec/git-core, + /usr/lib/perl5/5.42/site_perl/Git, and + /usr/share/{doc/git-2.50.1,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.16) +

+
+

+ git-receive-pack +

+
+

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

+
+

+ git-shell +

+
+

+ is a login shell for SSH accounts to provide + restricted Git access +

+
+

+ git-upload-archive +

+
+

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

+
+

+ git-upload-pack +

+
+

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

+
+

+ scalar +

+
+

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

+
+
+
+
+
+
+
+

+ 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.50.1 + and OpenSSH-10.0p1 +

+
+
+

+ Setting up a Git Server +

+

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

+

+ Configuration of the server consists of the following steps: +

+
+
+
+
+

+ 1. Set Up Users, Groups, and + Permissions +

+
+
+
+

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

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

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

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

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

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

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

+
git config --system init.defaultBranch trunk
+

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

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

+ 2. Create a git repository +

+
+
+
+

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

+
+

+ Note +

+

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

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

+ 3. Populate the repository + from a client system +

+
+
+
+
+

+ Note +

+

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

+
+

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

+

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

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

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

+
+

+ Note +

+

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

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

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

+
git push
+

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

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

+ Note +

+

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

+
+

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

+

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

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

+ Now, the repository can be cloned using +

+
git clone git@gitserver:project1.git
+
+
+
+
+
+

+ 4. + Configure the Server +

+
+
+
+

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

+

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

+
+

+ Note +

+

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

+
+

+ To start the server at boot time, install the git-daemon + bootscript included in the blfs-bootscripts-20250225 package: +

+
make install-git-daemon
+

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

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

+ The script to start the git daemon uses some default values + internally. Most important is the path to the repository + directory which is set to /srv/git. In case you have for whatever + reason created the repository in a different location, + you'll need to tell the boot script where the repository is + to be found. This can be achieved by creating a + configuration file named /etc/sysconfig/git-daemon. This + configuration file will be imported if it exists, meaning + it is optional. The file can look like: +

+
+# Begin /etc/sysconfig/git-daemon
+
+# Specify the location of the git repository
+GIT_BASE_DIR="/srv/git/"
+
+# Directories added to whitelist
+DFT_REPO_DIR="$GIT_BASE_DIR"
+
+# Add extra options which will appended to the 'git daemon'
+# command executed in the boot script
+GIT_DAEMON_OPTS=""
+
+# End /etc/sysconfig/git-daemon
+
+

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

+
+
    +
  • +

    + GIT_BASE_DIR=<dirname> +

    +

    + Specify the location of the git repositories. + Relative paths used when accessing the daemon will + translated relative to this directory. +

    +
  • +
  • +

    + DFT_REPO_DIR=<dirname> +

    +

    + This directory is added to the white list of allowed + directories. This variable can hold multiple + directory names but is usually set equal to + GIT_BASE_DIR. +

    +
  • +
  • +

    + GIT_DAEMON_OPTS=<options> +

    +

    + In case special options to the git daemon command + are needed, they have to be specified in this + setting. One example might be to adjust the port + number where daemon is listening. In this case, add + --port=<port + number> to this variable. For more + information about which options can be set, take a + look at the output of git daemon --help. +

    +
  • +
+
+

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

+
git clone git://gitserver/project1.git
+

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

+
+
+
+
+
+
+

+ Guile-3.0.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 375f8a423a23d229552512113aa4a954 +

    +
  • +
  • +

    + Download size: 5.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 184 MB (add 4 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 4.5 SBU (Using parallelism=4; add + 0.3 SBU for tests) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ Guile Dependencies +

+
+ Required +
+

+ GC-8.2.8 and + libunistring-1.3 +

+
+ Optional +
+

+ Emacs-30.2 and GDB-16.3 (run-time only dependencies). +

+
+
+

+ Installation of Guile +

+

+ First, if you are on a 32-bit system, fix a build failure: +

+
case $(uname -m) in
+    i?86) patch -Np1 -i ../guile-3.0.10-32bit_fixes-1.patch ;;
+esac
+

+ Install Guile by running the + following commands: +

+
CC="gcc -std=gnu17"          \
+./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/guile-3.0.10 &&
+make      &&
+make html &&
+
+makeinfo --plaintext -o doc/r5rs/r5rs.txt doc/r5rs/r5rs.texi &&
+makeinfo --plaintext -o doc/ref/guile.txt doc/ref/guile.texi
+

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

+

+ Now, as the root user: +

+
make install      &&
+make install-html &&
+
+mkdir -p                       /usr/share/gdb/auto-load/usr/lib &&
+mv /usr/lib/libguile-*-gdb.scm /usr/share/gdb/auto-load/usr/lib &&
+mv /usr/share/doc/guile-3.0.10/{guile.html,ref} &&
+mv /usr/share/doc/guile-3.0.10/r5rs{.html,}     &&
+
+find examples -name "Makefile*" -delete         &&
+cp -vR examples   /usr/share/doc/guile-3.0.10   &&
+
+for DIRNAME in r5rs ref; do
+  install -v -m644  doc/${DIRNAME}/*.txt \
+                    /usr/share/doc/guile-3.0.10/${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.10 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 +

+
+
+
+
+
+
+
+

+ LLVM-20.1.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+

+ Cmake modules for + LLVM +

+
+ +
+

+ Third-party dependencies for + LLVM build system +

+
+ +
+

+ Recommended Download +

+

+ Clang +

+
+ +
+

+ Optional Download +

+

+ Compiler RT +

+
+ +
+

+ LLVM + Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ Doxygen-1.14.0, git-2.50.1, Graphviz-13.1.2, + libunwind-1.8.2, libxml2-2.14.5, + psutil-7.0.0 (for tests), Pygments-2.19.2, + PyYAML-6.0.2 (for tests), rsync-3.4.1 (for + tests), sphinx-8.2.3, texlive-20250308 (or install-tl-unx), Valgrind-3.25.1, + Zip-3.0, + myst-parser (for + building documentation), OCaml, and Z3 +

+
+
+

+ Installation of LLVM +

+

+ Two additional tarballs llvm-cmake-20.1.8.src.tar.xz and + llvm-third-party-20.1.8.src.tar.xz are + needed by LLVM building system. The upstream expects them + extracted at the same level as the llvm-20.1.8.src.tar.xz tarball, and the + extracted directories renamed to cmake and third-party. Extract them and modify the + build system to avoid creating ambiguously-named directories + outside the llvm-20.1.8.src + hierarchy: +

+
tar -xf ../llvm-cmake-20.1.8.src.tar.xz                              &&
+tar -xf ../llvm-third-party-20.1.8.src.tar.xz                        &&
+sed '/LLVM_COMMON_CMAKE_UTILS/s@../cmake@cmake-20.1.8.src@'          \
+    -i CMakeLists.txt                                                &&
+sed '/LLVM_THIRD_PARTY_DIR/s@../third-party@third-party-20.1.8.src@' \
+    -i cmake/modules/HandleLLVMOptions.cmake
+
+

+ Note +

+

+ These two tarballs extract into directories named + cmake-20.1.8.src and + third-party-20.1.8.src, i.e. + the directory names lack the llvm- prefix. +

+
+

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

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

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

+
tar -xf ../compiler-rt-20.1.8.src.tar.xz -C projects    &&
+mv projects/compiler-rt-20.1.8.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.13.7. Use the following command + to fix these scripts: +

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

+ Ensure installing the FileCheck program which is + needed by the test suite of some packages (for example + rustc-1.89.0): +

+
sed 's/utility/tool/' -i utils/FileCheck/CMakeLists.txt
+

+ Install LLVM by running the + following commands: +

+
mkdir -v build &&
+cd       build &&
+
+CC=gcc CXX=g++                               \
+cmake -D CMAKE_INSTALL_PREFIX=/usr           \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON         \
+      -D LLVM_ENABLE_FFI=ON                  \
+      -D CMAKE_BUILD_TYPE=Release            \
+      -D LLVM_BUILD_LLVM_DYLIB=ON            \
+      -D LLVM_LINK_LLVM_DYLIB=ON             \
+      -D LLVM_ENABLE_RTTI=ON                 \
+      -D LLVM_TARGETS_TO_BUILD="host;AMDGPU" \
+      -D LLVM_BINUTILS_INCDIR=/usr/include   \
+      -D LLVM_INCLUDE_BENCHMARKS=OFF         \
+      -D CLANG_DEFAULT_PIE_ON_LINUX=ON       \
+      -D CLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang \
+      -W no-dev -G Ninja ..                  &&
+ninja
+

+ If you wish to run the test suite and you've downloaded + compiler-rt, work around an issue causing test failures when + building LLVM with GCC and -D + CLANG_CONFIG_FILE_SYSTEM_DIR and prevent some + test suite from using ld.gold that the LFS + Binutils package no longer provides: +

+
sed -e 's/config.has_no_default_config_flag/True/' \
+    -e 's/"-fuse-ld=gold"//'                       \
+    -i ../projects/compiler-rt/test/lit.common.cfg.py
+

+ LLVM test suite can produce many core dump files. They will + occupy a large amount of disk space, and the core dump + process can significantly slow down the testing. To test the + results with core dump disabled, issue: +

+
sh -c 'ulimit -c 0 && ninja check-all'
+

+ If -jN (N replaced with a number) + is passed to ninja, the tests will be + built with N logical cores, but run using all available + logical cores. Run the test command in a cgroup ( read + the + section called “Use Linux Control Group to Limit the Resource + Usage” for details) to limit the number of logical cores + for running the tests. 23 cfi tests are known to fail because + their assumption about the linker is not true with the BFD + linker and we've had to stop them from using the removed Gold + linker. One test named DataFlowSanitizer-x86_64 :: atomic.cpp is + known to fail with gcc-15.1 or newer. One test named + SanitizerCommon-asan-x86_64-Linux :: + onprint.cpp is known to fail because the unwinder in + the sanitizer depends on the frame pointer that the default + configuration of Glibc does not enable. One test named + Linux/clone_setns.cpp will fail + if CONFIG_USER_NS is not enabled + in kernel configuration. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + LLVM_ENABLE_FFI=ON: This switch allows + LLVM to use libffi. +

+

+ -D + LLVM_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. +

+

+ -D + CMAKE_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. +

+

+ -D + LLVM_TARGETS_TO_BUILD="host;AMDGPU": This switch + enables building for the same target as the host, and also + for the r600 AMD GPU used by the Mesa r600 and radeonsi + drivers. The default is all of the targets. You can use a + semicolon separated list. Valid targets are: host, AArch64, + AMDGPU, ARM, AVR, BPF, Hexagon, Lanai, LoongArch, Mips, + MSP430, NVPTX, PowerPC, RISCV, Sparc, SystemZ, VE, + WebAssembly, X86, XCore, or all. +

+

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

+

+ -D + LLVM_ENABLE_RTTI=ON: This switch is used to build + LLVM with run-time type information. This is required for + building Mesa-25.1.8. +

+

+ -D + LLVM_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). +

+

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

+

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

+

+ -D + CLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang: makes + clang and + clang++ search + /etc/clang for configuration + files. +

+

+ -D BUILD_SHARED_LIBS=ON: if used + instead of -D + LLVM_BUILD_LLVM_DYLIB=ON and -D LLVM_LINK_LLVM_DYLIB=ON, + builds all the LLVM + libraries (about 60) as shared libraries instead of static. +

+

+ -D LLVM_ENABLE_DOXYGEN=ON -D + LLVM_ENABLE_DOCS=ON: Enables the generation of + browsable HTML documentation if you have installed Doxygen-1.14.0. The documentation will + be built at the end of the build process. +

+
+
+

+ Configuring LLVM +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ If you've built Clang, as the root user create two configuration + files to make SSP enabled by + default for clang and clang++, so the default + configuration of their SSP feature will be consistent with + GCC-15.2.0: +

+
mkdir -pv /etc/clang &&
+for i in clang clang++; do
+  echo -fstack-protector-strong > /etc/clang/$i.cfg
+done
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + amdgpu-arch, analyze-build, + bugpoint, c-index-test, clang, clang++ (symlinks to + clang-20), clang-20, clang-check, clang-cl, clang-cpp + (last two symlinks to clang), clang-extdef-mapping, + clang-format, clang-installapi, clang-linker-wrapper, + clang-nvlink-wrapper, clang-offload-bundler, + clang-offload-packager, clang-refactor, clang-repl, + clang-scan-deps, clang-sycl-linker, clang-tblgen, + diagtool, dsymutil, FileCheck, git-clang-format, + hmaptool, intercept-build, llc, lli, llvm-addr2line + (symlink to llvm-symbolizer), llvm-ar, llvm-as, + llvm-bcanalyzer, llvm-bitcode-strip (symlink to + llvm-objcopy), llvm-cat, llvm-cfi-verify, llvm-cgdata, + llvm-config, llvm-cov, llvm-c-test, llvm-ctxprog-util, + llvm-cvtres, llvm-cxxdump, llvm-cxxfilt, llvm-cxxmap, + llvm-debuginfo-analyzer, llvm-debuginfod, + llvm-debuginfod-find, llvm-diff, llvm-dis, llvm-dlltool + (symlink to llvm-ar), llvm-dwarfdump, llvm-dwarfutil, + llvm-dwp, llvm-exegesis, llvm-extract, llvm-gsymutil, + llvm-ifs, llvm-install-name-tool (symlink to + llvm-objcopy), llvm-jitlink, llvm-lib (symlink to + llvm-ar), llvm-libtool-darwin, llvm-link, llvm-lipo, + llvm-lto, llvm-lto2, llvm-mc, llvm-mca, llvm-ml, + llvm-modextract, llvm-mt, llvm-nm, llvm-objcopy, + llvm-objdump, llvm-opt-report, llvm-otool (symlink to + llv-objdump), llvm-pdbutil, llvm-profdata, llvm-profgen, + llvm-ranlib (symlink to llvm-ar), llvm-rc, llvm-readelf + (symlink to llvm-readobj), llvm-readobj, llvm-readtapi, + llvm-reduce, llvm-remarkutil, llvm-rtdyld, llvm-sim, + llvm-size, llvm-split, llvm-stress, llvm-strings, + llvm-strip (symlink to llvm-objcopy), llvm-symbolizer, + llvm-tblgen, llvm-tli-checker, llvm-undname, llvm-windres + (symlink to llvm-rc), llvm-xray, nvptx-arch, opt, sancov, + sanstats, scan-build, scan-build-py, scan-view, and + verify-uselistorder +
+
+ Installed Libraries: + libLLVM.so, libLLVM*.a (107 + libraries), libLTO.so, libRemarks.so, libclang.so, + libclang-cpp.so, libclang*.a (43 libraries), and + LLVMgold.so +
+
+ Installed Directories: + /usr/include/{clang,clang-c,llvm,llvm-c}, + /usr/lib/{clang,cmake/{clang,llvm},libear,libscanbuild}, + /usr/share/{clang,opt-viewer,scan-build,scan-view}, and + /etc/clang +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ amdgpu-arch +

+
+

+ lists AMD GPUs installed; at runtime it needs + libhsa-runtime64.so + which is not a part of BLFS +

+
+

+ analyze-build +

+
+

+ is a static analysis tool +

+
+

+ bugpoint +

+
+

+ is the automatic test case reduction tool +

+
+

+ c-index-test +

+
+

+ is used to test the libclang API and demonstrate + its usage +

+
+

+ clang +

+
+

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

+
+

+ clang-check +

+
+

+ is a tool to perform static code analysis and + display Abstract Syntax Trees (AST) +

+
+

+ clang-extdef-mapping +

+
+

+ is a tool to collect the USR name and location of + external definitions in a source file +

+
+

+ clang-format +

+
+

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

+
+

+ clang-linker-wrapper +

+
+

+ is a wrapper utility over the host linker +

+
+

+ clang-offload-bundler +

+
+

+ is a tool to bundle/unbundle OpenMP offloaded files + associated with a common source file +

+
+

+ clang-offload-packager +

+
+

+ is a tool to bundle several object files into a + single binary, which can then be used to create a + fatbinary containing offloading code +

+
+

+ clang-refactor +

+
+

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

+
+

+ clang-scan-deps +

+
+

+ is a tool to scan for dependencies in a source file +

+
+

+ clang-tblgen +

+
+

+ is a program that translates compiler-related + target description (.td) files into C++ code and + other output formats +

+
+

+ diagtool +

+
+

+ is a combination of tools for dealing with + diagnostics in clang +

+
+

+ FileCheck +

+
+

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

+
+

+ dsymutil +

+
+

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

+
+

+ git-clang-format +

+
+

+ runs clang-format on git generated patches + (requires git-2.50.1) +

+
+

+ hmaptool +

+
+

+ is a Python tool to dump and construct header maps +

+
+

+ intercept-build +

+
+

+ generates a database of build commands for a + project +

+
+

+ 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-debuginfo-analyzer +

+
+

+ prints a logical representation of low-level debug + information +

+
+

+ llvm-debuginfod +

+
+

+ is a service providing debug information over an + HTTP API for analyzing stripped binaries +

+
+

+ llvm-debuginfod-find +

+
+

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

+
+

+ llvm-diff +

+
+

+ is the LLVM + structural 'diff' +

+
+

+ llvm-dis +

+
+

+ is the LLVM + disassembler +

+
+

+ llvm-dwarfdump +

+
+

+ prints the content of DWARF sections in object + files +

+
+

+ llvm-dwarfutil +

+
+

+ is a tool to copy and manipulate debug info +

+
+

+ llvm-dwp +

+
+

+ merges split DWARF files +

+
+

+ llvm-elfabi +

+
+

+ is used to read information about an ELF binary's + ABI +

+
+

+ llvm-exegesis +

+
+

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

+
+

+ llvm-extract +

+
+

+ is used to extract a function from an LLVM module +

+
+

+ llvm-gsymutil +

+
+

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

+
+

+ llvm-ifs +

+
+

+ is used to merge interface stubs with object files +

+
+

+ llvm-install-name-tool +

+
+

+ is used to rewrite load commands into MachO binary + format +

+
+

+ llvm-jitlink +

+
+

+ is used to parse relocatable object files to make + their contents executable in a target process +

+
+

+ llvm-libtool-darwin +

+
+

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

+
+

+ llvm-link +

+
+

+ is the LLVM linker +

+
+

+ llvm-lipo +

+
+

+ is used to create universal binaries from MachO + files +

+
+

+ llvm-lto +

+
+

+ is the LLVM LTO + (link time optimization) linker +

+
+

+ llvm-lto2 +

+
+

+ is a test harness for the resolution based LTO + interface +

+
+

+ llvm-mc +

+
+

+ is a standalone machine code assembler/disassembler +

+
+

+ llvm-mca +

+
+

+ is a performance analysis tool to statically + measure the performance of machine code +

+
+

+ llvm-ml +

+
+

+ is a playground for machine code provided by LLVM +

+
+

+ llvm-modextract +

+
+

+ is a tool to extract one module from multimodule + bitcode files +

+
+

+ llvm-mt +

+
+

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

+
+

+ llvm-nm +

+
+

+ is used to list LLVM bitcode and object file's + symbol table +

+
+

+ llvm-objcopy +

+
+

+ is LLVM's version of an objcopy tool +

+
+

+ llvm-objdump +

+
+

+ is an LLVM object + file dumper +

+
+

+ llvm-opt-report +

+
+

+ is a tool to generate an optimization report from + YAML optimization record files +

+
+

+ llvm-pdbutil +

+
+

+ is a PDB (Program Database) dumper. PDB is a + Microsoft format +

+
+

+ llvm-profdata +

+
+

+ is a small tool to manipulate and print profile + data files +

+
+

+ llvm-profgen +

+
+

+ generates LLVM SPGO profiling information +

+
+

+ llvm-ranlib +

+
+

+ is used to generate an index for a LLVM archive +

+
+

+ llvm-rc +

+
+

+ is a platform-independent tool to compile resource + scripts into binary resource files +

+
+

+ llvm-readobj +

+
+

+ displays low-level format-specific information + about object files +

+
+

+ llvm-readtapi +

+
+

+ is the LLVM TAPI file reader and transformer +

+
+

+ llvm-reduce +

+
+

+ is used to automatically reduce testcases when + running a test suite +

+
+

+ llvm-remarkutil +

+
+

+ converts remark files between bitstream and YAML; + or prints function instruction count information in + remark files +

+
+

+ llvm-rtdyld +

+
+

+ is the LLVM MC-JIT + tool +

+
+

+ llvm-size +

+
+

+ is the LLVM object + size dumper +

+
+

+ llvm-split +

+
+

+ is the LLVM module + splitter +

+
+

+ llvm-stress +

+
+

+ is used to generate random .ll files +

+
+

+ llvm-strings +

+
+

+ print strings found in a binary (object file, + executable, or archive library) +

+
+

+ llvm-symbolizer +

+
+

+ converts addresses into source code locations +

+
+

+ llvm-tblgen +

+
+

+ is the LLVM Target + Description To C++ Code Generator +

+
+

+ llvm-tli-checker +

+
+

+ is the LLVM + TargetLibraryInfo versus SDK checker +

+
+

+ llvm-undname +

+
+

+ is a tool to demangle names +

+
+

+ llvm-xray +

+
+

+ is an implementation of Google's XRay function call + tracing system +

+
+

+ nvptx-arch +

+
+

+ lists NVIDIA GPUs installed; at runtime it needs + libcuda.so which is + not a part of BLFS +

+
+

+ opt +

+
+

+ is the LLVM + optimizer +

+
+

+ sancov +

+
+

+ is the sanitizer coverage processing tool +

+
+

+ sanstats +

+
+

+ is the sanitizer statistics processing tool +

+
+

+ scan-build +

+
+

+ is a Perl script + that invokes the Clang static analyzer +

+
+

+ scan-build-py +

+
+

+ is a Python script + that invokes the Clang static analyzer +

+
+

+ scan-view +

+
+

+ is a viewer for Clang static analyzer results +

+
+

+ verify-uselistorder +

+
+

+ is the LLVM tool + to verify use-list order +

+
+
+
+
+
+
+
+

+ Lua-5.4.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.lua.org/ftp/lua-5.4.8.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 81cf5265b8634967d8a7480d238168ce +

    +
  • +
  • +

    + Download size: 368 KB +

    +
  • +
  • +

    + Estimated disk space required: 3.7 MB (with Basic + tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with Basic + tests) +

    +
  • +
+
+

+ Additional Downloads +

+
+ +
+
+
+

+ 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.8
+
+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.8-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.8" \
+     install &&
+
+mkdir -pv                      /usr/share/doc/lua-5.4.8 &&
+cp -v doc/*.{html,css,gif,png} /usr/share/doc/lua-5.4.8 &&
+
+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.8-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.8 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ lua +

+
+

+ is the standalone Lua interpreter +

+
+

+ luac +

+
+

+ is the Lua compiler +

+
+

+ liblua.so +

+
+

+ contains the Lua + API functions +

+
+
+
+
+
+
+
+

+ luajit-20250816 +

+
+
+
+
+
+

+ Introduction to luajit +

+

+ The luajit package contains + a Just-In-Time compiler for Lua. It is often used as + scripting middleware, and it is high performance while also + having a low memory footprint. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of luajit +

+

+ Install luajit by running + the following commands: +

+
make PREFIX=/usr amalg
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make PREFIX=/usr install &&
+rm -v /usr/lib/libluajit-5.1.a
+
+
+

+ Command Explanations +

+

+ amalg: This ensures + an amalgamated build, i.e. the LuaJIT core is compiled as one + huge C file, allowing GCC to generate faster and shorter + code. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + luajit (symlink to + luajit-2.1.ROLLING) and luajit-2.1.ROLLING +
+
+ Installed Libraries: + libluajit-5.1.so +
+
+ Installed Directories: + /usr/include/luajit-2.1 and + /usr/share/luajit-2.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ luajit +

+
+

+ provides a Just-In-Time compiler for Lua +

+
+

+ libluajit-5.1.so +

+
+

+ contains an API for the Just-In-Time compiler for + Lua +

+
+
+
+
+
+
+
+

+ Mercurial-7.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.mercurial-scm.org/release/mercurial-7.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 885a2a5ff89e78f066ec80b1ede5b314 +

    +
  • +
  • +

    + Download size: 8.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 125 MB (with docs, add + 32 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (with docs; add 23 SBU + for tests; both using parallelism=4) +

    +
  • +
+
+

+ Mercurial Dependencies +

+
+ Optional +
+

+ build-1.3.0, docutils-0.21.2 + (required to build the documentation), git-2.50.1, OpenSSH-10.0p1 + (runtime, to access ssh://... repositories), Pygments-2.19.2, + rustc-1.89.0 (see rust/README.rst and rust/rhg/README.md), Subversion-1.14.5 + (with Python bindings), CVS, pyflakes, and + re2 +

+
+
+

+ Installation of Mercurial +

+

+ Mercurial is built and + installed in a single command as the root user: +

+
make PREFIX=/usr install
+

+ The documentation is built by the above command (in man and + html formats), but only the manual pages are installed. If + you wish to install the html documentation, issue as the + root user: +

+
mkdir /usr/share/doc/mercurial-7.1 &&
+cp -R doc/html /usr/share/doc/mercurial-7.1
+

+ If you wish to run the tests, the rust tests must be removed + as they are currently broken due to syntax errors. To do + this, issue: +

+
sed -i '151,154d' Makefile
+

+ To run the test suite, issue: +

+
TESTFLAGS="-j<N> --with-hg /usr/bin/hg" make check
+

+ where <N> is + an integer between one and the number of ( processor X + threads ), inclusive (default is the total number of + processors as returned by nproc). Tests may fail + because some error messages have changed in Python or some + deprecation warnings are printed that were not present when + the test was designed. +

+

+ In order to investigate any apparently failing tests, you may + use the run-tests.py script in the + tests directory. 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 --with-hg /usr/bin/hg test-import.t
+popd
+

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

+

+ 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. This will output a list + of enabled and disabled extensions, as well as more + information such as how to enable or disable extensions + using configuration files. +

+

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

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

+ Contents +

+
+
+
+ Installed Programs: + hg +
+
+ Installed Libraries: + several internal modules under + /usr/lib/python3.13/site-packages/mercurial +
+
+ Installed Directories: + /etc/mercurial, + /usr/lib/python3.13/site-packages/hgdemandimport, + /usr/lib/python3.13/site-packages/hgext, + /usr/lib/python3.13/site-packages/hgext3rd, + /usr/lib/python3.13/site-packages/mercurial, + /usr/lib/python3.13/site-packages/mercurial-7.1.dist-info, + and /usr/share/doc/mercurial-7.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ hg +

+
+

+ is the mercurial version control system +

+
+
+
+
+
+
+
+

+ NASM-2.16.03 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ NASM + Dependencies +

+
+ Optional (for generating + documentation): +
+

+ asciidoc-10.2.1 and xmlto-0.0.29 +

+
+
+

+ Installation of NASM +

+

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

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

+ Install NASM by running the + following commands: +

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

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

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

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

+ Contents +

+
+
+
+ Installed Programs: + nasm and ndisasm +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/doc/nasm-2.16.03 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ nasm +

+
+

+ is a portable 80x86 assembler +

+
+

+ ndisasm +

+
+

+ is an 80x86 binary file disassembler +

+
+
+
+
+
+
+
+

+ Patchelf-0.18.0 +

+
+
+
+
+
+

+ Introduction to Patchelf +

+

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

+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of Patchelf +

+

+ Install patchelf by running + the following commands: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + patchelf +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ patchelf +

+
+

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

+
+
+
+
+
+
+
+

+ Perl Modules +

+
+
+
+
+
+

+ Introduction to Perl Modules +

+

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

+

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

+

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

+

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

+

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

+

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

+

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

+

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

+ +
+
+

+ Archive::Zip-1.68 +

+
+
+
+
+

+ Introduction to Archive::Zip +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Archive::Zip Dependencies +
+
+ Recommended (for the test suite) +
+

+ libarchive-3.8.1 +

+
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + autovivification +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Business::ISBN-3.012 +

+
+
+
+
+

+ Introduction to + Business::ISBN +

+
+
+
+

+ The Business::ISBN module provides functions for working + with International Standard Book Numbers. +

+

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

+
+ Package Information +
+
+ +
+
+ Business::ISBN Dependencies +
+
+ Required +
+

+ Business-ISBN-Data-20250815.001 +

+
+
+
+
+
+

+ 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.205 +

+
+
+
+
+

+ Introduction to + Business::ISMN +

+
+
+
+

+ The Business::ISMN module provides functions for working + with International Standard Music Numbers. +

+

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

+
+ Package Information +
+
+ +
+
+ Business::ISMN Dependencies +
+
+ Required +
+

+ Tie-Cycle-1.231 +

+
+
+
+
+
+

+ 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.008 +

+
+
+
+
+

+ Introduction to + Business::ISSN +

+
+
+
+

+ The Business::ISSN module provides functions for working + with International Standard Serial Numbers. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Business::ISSN +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Class::Accessor-0.51 +

+
+
+
+
+

+ Introduction to + Class::Accessor +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Class::Accessor +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Data::Compare-1.29 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Data::Compare Dependencies +
+
+ Required +
+

+ Clone-0.47 and File-Find-Rule-0.35 +

+
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Data::Dump +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Data::Uniqid-0.12 +

+
+
+
+
+

+ Introduction to Data::Uniqid +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Data::Uniqid +

+
+
+
+

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

+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ DateTime::Calendar::Julian-0.107 +

+
+
+
+
+

+ Introduction to + DateTime::Calendar::Julian +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ DateTime::Calendar::Julian + Dependencies +
+
+ Required +
+

+ DateTime-1.66 +

+
+
+
+
+
+

+ 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 creates DateTime parser classes + and objects. +

+

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

+
+ Package Information +
+
+ +
+
+ DateTime::Format::Builder + Dependencies +
+
+ Required +
+

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

+
+
+
+
+
+

+ Installation of + DateTime::Format::Builder +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Encode::EUCJPASCII-0.03 +

+
+
+
+
+

+ Introduction to + Encode::EUCJPASCII +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Encode::EUCJPASCII +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Encode::HanExtra-0.23 +

+
+
+
+
+

+ Introduction to + Encode::HanExtra +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Encode::HanExtra +

+
+
+
+

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

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

+ Now, as the root user: +

+
make install
+
+
+
+

+ Encode::JIS2K-0.05 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Encode::JIS2K +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ File::FcntlLock-0.22 +

+
+
+
+
+

+ Introduction to + File::FcntlLock +

+
+
+
+

+ File::FcntlLock is a module to do file locking in an object + oriented fashion using the fcntl(2) system + call. This allows locks on parts of a file as well as on + the whole file and overcomes some known problems with + flock(2), on + which which Perl's flock() + function is based per default. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + File::FcntlLock +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ File::Slurper-0.014 +

+
+
+
+
+

+ Introduction to + File::Slurper +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ File::Slurper Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of File::Which +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ HTML::Parser-3.83 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ HTML::Parser Dependencies +
+
+ Required +
+

+ HTML-Tagset-3.24 and HTTP-Message-7.00 (strictly + speaking, not required for building, but its module + HTTP::Headers is required for tests and a run-time + requirement for HTML::HeadParser from this distribution). +

+
+
+
+
+
+

+ 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.16 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ HTTP::Daemon Dependencies +
+
+ Required +
+

+ HTTP-Message-7.00 +

+
+

+ Note +

+

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

+
+
+
+
+
+
+

+ Installation of HTTP::Daemon +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ IO::Socket::SSL-2.095 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ IO::Socket::SSL Dependencies +
+
+ Required +
+

+ make-ca-1.16.1 and Net-SSLeay-1.94 +

+
+ Recommended +
+ +
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set + up with make-ca-1.16.1 before testing this + package. +

+
+
+
+
+
+
+

+ Installation of + IO::Socket::SSL +

+
+
+
+

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

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

+ One test, Client non-SSL + connection, is known to fail. +

+

+ 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', which will allow 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of IO::String +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ IPC::Run3-0.049 +

+
+
+
+
+

+ Introduction to IPC::Run3 +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of IPC::Run3 +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Lingua::Translit-0.29 +

+
+
+
+
+

+ Introduction to + Lingua::Translit +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Lingua::Translit +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + translit +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ translit +

+
+

+ transliterates text between writing systems using + various standards +

+
+
+
+
+
+

+ LWP + (libwww-perl-6.79) +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ libwww-perl Dependencies +
+
+ Required +
+

+ File-Listing-6.16, HTTP-CookieJar-0.014, HTTP-Cookies-6.11, HTTP-Daemon-6.16, HTTP-Negotiate-6.01, HTML-Parser-3.83, Net-HTTP-6.23, Try-Tiny-0.32 + and WWW-RobotRules-6.02 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.14. +

+
+
+
+
+
+

+ Contents +

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

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ lwp-download +

+
+

+ is a script to fetch a large file from the web +

+
+

+ lwp-dump +

+
+

+ is used to see what headers and content is + returned for a URL +

+
+

+ lwp-mirror +

+
+

+ is a simple mirror utility +

+
+

+ lwp-request +

+
+

+ is a simple command line user agent +

+
+
+
+
+
+

+ List::AllUtils-0.19 +

+
+
+
+
+

+ Introduction to + List::AllUtils +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ List::AllUtils Dependencies +
+
+ Required +
+

+ List-SomeUtils-0.59 and + List-UtilsBy-0.12 +

+
+
+
+
+
+

+ Installation of + List::AllUtils +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ List::MoreUtils-0.430 +

+
+
+
+
+

+ Introduction to + List::MoreUtils +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ List::MoreUtils Dependencies +
+
+ Required +
+

+ Exporter-Tiny-1.006002 and + List-MoreUtils-XS-0.430 +

+
+
+
+
+
+

+ Installation of + List::MoreUtils +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Log::Log4perl-1.57 +

+
+
+
+
+

+ Introduction to + Log::Log4perl +

+
+
+
+

+ Log::Log4perl provides a Log4j implementation for + perl. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Log::Log4perl +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + l4p-templ +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ l4p-templ +

+
+

+ prints out the text of a template Log4perl + configuration for starting a new Log4perl + configuration file +

+
+
+
+
+
+

+ LWP::Protocol::https-6.14 +

+
+
+
+
+

+ Introduction to + LWP::Protocol::https +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ LWP::Protocol::https Dependencies +
+
+ Required +
+

+ IO-Socket-SSL-2.095, libwww-perl-6.79, and + make-ca-1.16.1 with /etc/pki/tls/certs/ca-bundle.crt. +

+
+
+
+
+
+

+ Installation of + LWP::Protocol::https +

+
+
+
+

+ 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.4234 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Module::Build +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+

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

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + config_data +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ config_data +

+
+

+ is used to query or change the configuration of + perl modules +

+
+
+
+
+
+

+ Net::DNS-1.52 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Net::DNS +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Parse::RecDescent-1.967015 +

+
+
+
+
+

+ Introduction to + Parse::RecDescent +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Parse::RecDescent +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Parse::Yapp-1.21 +

+
+
+
+
+

+ Introduction to Parse::Yapp +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Parse::Yapp +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + yapp +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ yapp +

+
+

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

+
+
+
+
+
+

+ PerlIO::utf8_strict-0.010 +

+
+
+
+
+

+ Introduction to + PerlIO::utf8_strict +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ PerlIO::utf8_strict Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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-2024080801 +

+
+
+
+
+

+ Introduction to + Regexp::Common +

+
+
+
+

+ Regexp::Common provides commonly requested regular + expressions. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Regexp::Common +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ SGMLSpm-1.1 +

+
+
+
+
+

+ Introduction to SGMLSpm +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of SGMLSpm +

+
+
+
+

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

+
chmod -v 644 MYMETA.yml
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+

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

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

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + sgmlspl.pl, sgmlspl +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ sgmlspl.pl +

+
+

+ is an SGML processor +

+
+

+ sgmlspl +

+
+

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

+
+
+
+
+
+

+ Sort::Key-1.33 +

+
+
+
+
+

+ Introduction to Sort::Key +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Sort::Key +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Command-0.11 +

+
+
+
+
+

+ Introduction to + Test::Command +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::Command +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Differences-0.72 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Test::Differences Dependencies +
+
+ Required +
+

+ Text-Diff-1.45 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.91 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Text::BibTeX Dependencies +
+
+ Required +
+

+ Config-AutoConf-0.320 and + ExtUtils-LibBuilder-0.09 +

+
+
+
+
+
+

+ 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, bibparse, + dumpnames +
+
+ Installed Libraries: + libbtparse.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ biblex +

+
+

+ performs lexical analysis on a BibTeX file +

+
+

+ bibparse +

+
+

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

+
+

+ dumpnames +

+
+

+ parses a BibTeX file, splitting 'author' and + 'editor' fields into lists of names, and then + dumps everything to stdout +

+
+

+ libbtparse.so +

+
+

+ is a library for parsing and processing BibTeX + data files +

+
+
+
+
+
+

+ Text::CSV-2.06 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Text::CSV Dependencies +
+
+ Recommended +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Text::Roman +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Unicode::Collate-1.31 +

+
+
+
+
+

+ Introduction to + Unicode::Collate +

+
+
+
+

+ Unicode::Collate provides a Unicode collation algorithm. +

+
+

+ Note +

+

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

+
+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Unicode::Collate +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Unicode::LineBreak-2019.001 +

+
+
+
+
+

+ Introduction to + Unicode::LineBreak +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Unicode::LineBreak Dependencies +
+
+ Required +
+

+ MIME-Charset-1.013.1 and + Wget-1.25.0 (to download two files from + unicode.org in the test suite) +

+
+ Optional +
+ +
+
+
+
+
+

+ 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.32 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ URI Dependencies +
+
+ Required +
+

+ MIME-Base32-1.303 +

+
+ Recommended (required for the test + suite) +
+ +
+ Optional +
+

+ Business-ISBN-3.012 +

+
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ XML::LibXML::Simple Dependencies +
+
+ Required +
+

+ XML-LibXML-2.0210 +

+
+
+
+
+
+

+ Installation of + XML::LibXML::Simple +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ XML::LibXSLT-2.003000 +

+
+
+
+
+

+ Introduction to XML::LibXSLT +

+
+
+
+

+ XML-LibXSLT provides an interface to libxslt-1.1.43 +

+

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

+
+ Package Information +
+
+ +
+
+ XML::LibXSLT Dependencies +
+
+ Required +
+

+ libxslt-1.1.43 and XML-LibXML-2.0210 +

+
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ XML::Simple Dependencies +
+
+ Optional +
+

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

+
+
+
+
+
+

+ Installation of XML::Simple +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ XML::Writer-0.900 +

+
+
+
+
+

+ Introduction to XML::Writer +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of XML::Writer +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ CPAN + automated install of perl modules +

+
+
+
+
+

+ Automatic Installation of + Perl Modules. +

+
+
+
+

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

+

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

+

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

+

+ In particular, you may wish to configure it so that + Sudo-1.9.17p2 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. +

+
+
+
+
+
+
+

+ Perl Module + Dependencies +

+
+
+
+
+
+

+ Perl Modules which are only required by other modules +

+

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

+

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

+
+

+ Note +

+

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

+

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

+

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

+
+
+ +
+
+
+

+ Algorithm::Diff-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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Algorithm::Diff +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Alien::Build-2.84 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Alien::Build Dependencies +
+
+ Required +
+

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

+
+
+
+
+
+

+ Installation of Alien::Build +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

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

+
+
+
+
+

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

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Alien::Build::Plugin::Download::GitLab + Dependencies +
+
+ Required +
+

+ Alien-Build-2.84 and URI-5.32 +

+
+
+
+
+
+

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

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Alien::Libxml2-0.20 +

+
+
+
+
+

+ 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.14.5. +

+

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

+
+ Package Information +
+
+ +
+
+ Alien::Libxml2 Dependencies +
+
+ Required +
+

+ Alien-Build-Plugin-Download-GitLab-0.01, + libxml2-2.14.5, and Path-Tiny-0.150 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + Alien::Libxml2 +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ B::COW-0.007 +

+
+
+
+
+

+ Introduction to B::COW +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of B::COW +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ B::Hooks::EndOfScope-0.28 +

+
+
+
+
+

+ Introduction to + B::Hooks::EndOfScope +

+
+
+
+

+ B::Hooks::EndOfScope allows you to execute code when Perl + finishes compiling the surrounding scope. +

+

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

+
+ Package Information +
+
+ +
+
+ B::Hooks::EndOfScope Dependencies +
+
+ Required +
+

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

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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-20250815.001 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Business-ISBN-Data +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Capture::Tiny-0.50 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Capture::Tiny +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Class::Data::Inheritable-0.10 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Class::Data::Inheritable +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Class::Inspector-1.36 +

+
+
+
+
+

+ Introduction to + Class::Inspector +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Class::Inspector +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Class::Singleton-1.6 +

+
+
+
+
+

+ Introduction to + Class::Singleton +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Class::Singleton +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Class:Tiny-1.008 +

+
+
+
+
+

+ Introduction to Class:Tiny +

+
+
+
+

+ Class:Tiny offers a minimalist class construction kit. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Class:Tiny +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Clone-0.47 +

+
+
+
+
+

+ Introduction to Clone +

+
+
+
+

+ Clone recursively copies perl datatypes. +

+

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

+
+ Package Information +
+
+ +
+
+ Clone Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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
+
+
+
+

+ Clone::PP-1.08 +

+
+
+
+
+

+ Introduction to Clone::PP +

+
+
+
+

+ Clone:PP recursively copies Perl datatypes, allowing for a + deep copy of a given Perl data structure. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Fu::Bar +

+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Config::AutoConf Dependencies +
+
+ Required +
+

+ Capture-Tiny-0.50 and File-Slurper-0.014 +

+
+
+
+
+
+

+ Installation of + Config::AutoConf +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ CPAN::Meta::Check-0.018 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + CPAN::Meta::Check +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ DateTime-1.66 +

+
+
+
+
+

+ Introduction to DateTime +

+
+
+
+

+ DateTime is a date and time object for perl. +

+

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

+
+ Package Information +
+
+ +
+
+ DateTime Dependencies +
+
+ Required +
+

+ DateTime-Locale-1.45 and + DateTime-TimeZone-2.65 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ DateTime::Format::Strptime + Dependencies +
+
+ Required +
+

+ DateTime-1.66 +

+
+
+
+
+
+

+ 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.45 +

+
+
+
+
+

+ Introduction to + DateTime::Locale +

+
+
+
+

+ DateTime::Locale provides localization support for + DateTime-1.66. +

+

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

+
+ Package Information +
+
+ +
+
+ DateTime::Locale Dependencies +
+
+ Required +
+

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

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.65 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ DateTime::TimeZone Dependencies +
+
+ Required +
+

+ Class-Singleton-1.6, Module-Runtime-0.018, and + Params-ValidationCompiler-0.31 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.05 +

+
+
+
+
+

+ Introduction to + Devel::StackTrace +

+
+
+
+

+ Devel::StackTrace provides an object representing a stack + trace. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Devel::StackTrace +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Dist::CheckConflicts-0.11 +

+
+
+
+
+

+ Introduction to + Dist::CheckConflicts +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Dist::CheckConflicts Dependencies +
+
+ Required +
+

+ Module-Runtime-0.018 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Encode::Locale +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Eval::Closure-0.14 +

+
+
+
+
+

+ Introduction to + Eval::Closure +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Eval::Closure Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Exception::Class Dependencies +
+
+ Required +
+

+ Class-Data-Inheritable-0.10 + and Devel-StackTrace-2.05 +

+
+
+
+
+
+

+ 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.006002 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Exporter::Tiny +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ ExtUtils::LibBuilder-0.09 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ ExtUtils::LibBuilder Dependencies +
+
+ Required +
+

+ Module-Build-0.4234 +

+
+
+
+
+
+

+ Installation of + ExtUtils::LibBuilder +

+
+
+
+

+ This module is built using Build.PL: +

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

+ Now, as the root user: +

+
./Build install
+
+
+
+

+ FFI::CheckLib-0.31 +

+
+
+
+
+

+ Introduction to + FFI::CheckLib +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ FFI::CheckLib Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + FFI::CheckLib +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ File::chdir-0.1011 +

+
+
+
+
+

+ Introduction to File::chdir +

+
+
+
+

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

+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of File::chdir +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ File::Copy::Recursive-0.45 +

+
+
+
+
+

+ Introduction to + File::Copy::Recursive +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ File::Copy::Recursive Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.35 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ File::Find::Rule Dependencies +
+
+ Required +
+

+ Number-Compare-0.03 and + 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.16 +

+
+
+
+
+

+ Introduction to + File::Listing +

+
+
+
+

+ File::Listing parses a directory listing. +

+

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

+
+ Package Information +
+
+ +
+
+ File::Listing Dependencies +
+
+ Required +
+

+ HTTP-Date-6.06 +

+
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ File::ShareDir Dependencies +
+
+ Required +
+

+ Class-Inspector-1.36 and + File-ShareDir-Install-0.14 +

+
+
+
+
+
+

+ Installation of + File::ShareDir +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ File::ShareDir::Install-0.14 +

+
+
+
+
+

+ Introduction to + File::ShareDir::Install +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + File::ShareDir::Install +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ HTML::Tagset-3.24 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of HTML::Tagset +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ HTTP::CookieJar-0.014 +

+
+
+
+
+

+ Introduction to + HTTP::CookieJar +

+
+
+
+

+ HTTP::CookieJar provides a minimalist HTTP user agent + cookie jar. +

+

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

+
+ Package Information +
+
+ +
+
+ HTTP::CookieJar Dependencies +
+
+ Required +
+

+ HTTP-Date-6.06 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + HTTP::CookieJar +

+
+
+
+

+ 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.11 +

+
+
+
+
+

+ 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.79) object knows + about. +

+

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

+
+ Package Information +
+
+ +
+
+ HTTP::Cookies Dependencies +
+
+ Required +
+

+ HTTP-Message-7.00 +

+
+
+
+
+
+

+ 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.06 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ HTTP::Date Dependencies +
+
+ Recommended +
+ +
+
+
+
+
+

+ 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-7.00 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ HTTP::Message Dependencies +
+
+ Required +
+

+ Clone-0.47, Encode-Locale-1.05, HTTP-Date-6.06, IO-HTML-1.004, + LWP-MediaTypes-6.04, and + URI-5.32 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ HTTP::Negotiate Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of IO::HTML +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ IPC::System::Simple-1.30 +

+
+
+
+
+

+ Introduction to + IPC::System::Simple +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + IPC::System::Simple +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ List::MoreUtils::XS-0.430 +

+
+
+
+
+

+ Introduction to + List::MoreUtils::XS +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + List::MoreUtils::XS +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ List::SomeUtils-0.59 +

+
+
+
+
+

+ Introduction to + List::SomeUtils +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ List::SomeUtils Dependencies +
+
+ Required +
+

+ Module-Implementation-0.09 + and 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ List::SomeUtils::XS Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + List::SomeUtils::XS +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ List::UtilsBy-0.12 +

+
+
+
+
+

+ Introduction to + List::UtilsBy +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + List::UtilsBy +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ LWP::MediaTypes-6.04 +

+
+
+
+
+

+ Introduction to + LWP::MediaTypes +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ LWP::MediaTypes Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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::Base32-1.303 +

+
+
+
+
+

+ Introduction to MIME::Base32 +

+
+
+
+

+ MIME::Base32 is for Encoding/Decoding data. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of MIME::Base32 +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ MIME::Charset-1.013.1 +

+
+
+
+
+

+ Introduction to + MIME::Charset +

+
+
+
+

+ MIME::Charset provides information about character sets + used for MIME messages on the internet, such as their + encodings. +

+

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

+
+ Package Information +
+
+ +
+
+ MIME::Charset Dependencies +
+
+ Recommended +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Module::Implementation + Dependencies +
+
+ Required +
+

+ Module-Runtime-0.018 and + Try-Tiny-0.32 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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::Runtime-0.018 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Module::Runtime +

+
+
+
+

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

+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ MRO::Compat-0.15 +

+
+
+
+
+

+ Introduction to MRO::Compat +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of MRO::Compat +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ namespace::autoclean-0.31 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ namespace::autoclean Dependencies +
+
+ Required +
+

+ namespace-clean-0.27 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ namespace::clean Dependencies +
+
+ Required +
+

+ B-Hooks-EndOfScope-0.28 and + Package-Stash-0.40 +

+
+
+
+
+
+

+ Installation of + namespace::clean +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Net::HTTP-6.23 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Net::HTTP Dependencies +
+
+ Required +
+

+ URI-5.32 +

+
+
+
+
+
+

+ 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.94 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Net::SSLeay +

+
+
+
+
+

+ Note +

+

+ One test named 32_x509_get_cert_info.t is known to + fail with OpenSSL-3.4.0 or later. 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 || true
+

+ 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. +

+

+ || true: When + running a script which exits on error, this prevents + stopping because of the known test failure. +

+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Number::Compare +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Package::Stash-0.40 +

+
+
+
+
+

+ Introduction to + Package::Stash +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Package::Stash Dependencies +
+
+ Required +
+

+ Dist-CheckConflicts-0.11 + and Module-Implementation-0.09 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + Package::Stash +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Params::Validate-1.31 +

+
+
+
+
+

+ Introduction to + Params::Validate +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Params::Validate Dependencies +
+
+ Required +
+

+ Module-Build-0.4234 and + Module-Implementation-0.09 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ Installation of + Params::Validate +

+
+
+
+

+ This module is built using Build.PL: +

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

+ Now, as the root user: +

+
./Build install
+
+
+
+

+ Params::ValidationCompiler-0.31 +

+
+
+
+
+

+ Introduction to + Params::ValidationCompiler +

+
+
+
+

+ Params::ValidationCompiler builds an optimized subroutine + parameter validator. +

+

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

+
+ Package Information +
+
+ +
+
+ Params::ValidationCompiler + Dependencies +
+
+ Required +
+

+ Exception-Class-1.45 and + Specio-0.52 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.150 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Path::Tiny +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Role::Tiny-2.002004 +

+
+
+
+
+

+ Introduction to Role::Tiny +

+
+
+
+

+ Role::Tiny is a minimalist role composition tool. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Role::Tiny +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Scope::Guard-0.21 +

+
+
+
+
+

+ Introduction to Scope::Guard +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Scope::Guard +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Specio-0.52 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Specio Dependencies +
+
+ Required +
+

+ Devel-StackTrace-2.05, + Eval-Closure-0.14, Module-Runtime-0.018, Role-Tiny-2.002004, Sub-Quote-2.006008, and Try-Tiny-0.32 +

+
+ Recommended (required for the test + suite) +
+ +
+ Optional +
+

+ namespace-autoclean-0.31 + (for the test suite) +

+
+
+
+
+
+

+ Installation of Specio +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Sub::Exporter::Progressive-0.001013 +

+
+
+
+
+

+ Introduction to + Sub::Exporter::Progressive +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Sub::Exporter::Progressive +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Sub::Quote-2.006008 +

+
+
+
+
+

+ Introduction to Sub::Quote +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Sub::Quote +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Sub::Uplevel-0.2800 +

+
+
+
+
+

+ Introduction to Sub::Uplevel +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Sub::Uplevel +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Term::Table-0.024 +

+
+
+
+
+

+ 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 gone wrong. +

+

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

+
+ Package Information +
+
+ +
+
+ Term::Table Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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.205 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Test::Deep +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Exception-0.43 +

+
+
+
+
+

+ Introduction to + Test::Exception +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Test::Exception Dependencies +
+
+ Required +
+

+ Sub-Uplevel-0.2800 +

+
+
+
+
+
+

+ Installation of + Test::Exception +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Fatal-0.017 +

+
+
+
+
+

+ Introduction to Test::Fatal +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Test::Fatal Dependencies +
+
+ Required +
+

+ Try-Tiny-0.32 +

+
+
+
+
+
+

+ 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.995 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Test::File Dependencies +
+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Test::File::ShareDir Dependencies +
+
+ Required +
+

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

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::LeakTrace +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Needs-0.002010 +

+
+
+
+
+

+ Introduction to Test::Needs +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Test::Needs +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Requires-0.11 +

+
+
+
+
+

+ Introduction to + Test::Requires +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::Requires +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::RequiresInternet-0.05 +

+
+
+
+
+

+ Introduction to + Test::RequiresInternet +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::RequiresInternet +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Simple-1.302214 +

+
+
+
+
+

+ Introduction to Test::Simple +

+
+
+
+

+ Test::Simple contains basic utilities for writing tests. +

+

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

+
+ Package Information +
+
+ +
+
+ Test::Simple Dependencies +
+
+ Required +
+

+ Term-Table-0.024 +

+
+
+
+
+
+

+ Installation of Test::Simple +

+
+
+
+

+ 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.03 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Test::utf8 +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Warnings-0.038 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::Warnings +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test::Without::Module-0.23 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Test::Without::Module +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Test2::Plugin::NoWarnings-0.10 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Test2::Plugin::NoWarnings + Dependencies +
+
+ Required +
+

+ Test-Simple-1.302214 +

+
+ Recommended (required for the test + suite) +
+ +
+
+
+
+
+

+ 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
+
+
+
+

+ Text::CSV_XS-1.61 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Text::CSV_XS +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Text::Diff-1.45 +

+
+
+
+
+

+ Introduction to Text::Diff +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ Text::Diff Dependencies +
+
+ Required +
+

+ Algorithm-Diff-1.201 +

+
+
+
+
+
+

+ Installation of Text::Diff +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Text::Glob-0.11 +

+
+
+
+
+

+ Introduction to Text::Glob +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Text::Glob +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Tie::Cycle-1.231 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Tie::Cycle +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ TimeDate-2.33 +

+
+
+
+
+

+ Introduction to TimeDate +

+
+
+
+

+ TimeDate provides miscellaneous timezone manipulation + routines. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of TimeDate +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ Try::Tiny-0.32 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Try::Tiny Dependencies +
+
+ Optional (can be used by the test + suite) +
+

+ Capture-Tiny-0.50 +

+
+
+
+
+
+

+ 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.64 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Variable::Magic +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ WWW::RobotRules-6.02 +

+
+
+
+
+

+ Introduction to + WWW::RobotRules +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ WWW::RobotRules Dependencies +
+
+ Required (runtime) +
+

+ libwww-perl-6.79 (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.0210 +

+
+
+
+
+

+ Introduction to XML::LibXML +

+
+
+
+

+ XML::LibXML is a perl binding for libxml2-2.14.5. +

+

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

+
+ Package Information +
+
+ +
+
+ Additional Download +
+ +
+ XML::LibXML Dependencies +
+
+ Required +
+

+ Alien-Libxml2-0.20 and XML-SAX-1.02 +

+
+
+
+
+
+

+ Installation of XML::LibXML +

+
+
+
+

+ First, apply a patch to fix issues with the testsuite when + compiled against libxml2-2.13: +

+
patch -Np1 -i ../XML-LibXML-2.0210-testsuite_fixes-1.patch
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + XML::NamespaceSupport +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+

+ XML::SAX-1.02 +

+
+
+
+
+

+ Introduction to XML::SAX +

+
+
+
+

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

+

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

+
+ Package Information +
+
+ +
+
+ XML::SAX Dependencies +
+
+ Required +
+

+ libxml2-2.14.5, 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + XML::SAX-Base +

+
+
+
+

+ This module uses the standard build and installation + instructions: +

+
perl Makefile.PL &&
+make             &&
+make test
+

+ Now, as the root user: +

+
make install
+
+
+
+
+
+
+

+ PHP-8.4.11 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.php.net/distributions/php-8.4.11.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: d08a7fbf770f2b9218a18eb70b2e9717 +

    +
  • +
  • +

    + Download size: 13 MB +

    +
  • +
  • +

    + Estimated disk space required: 395 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (add 2.6 SBU for tests; + both with parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+
+ +
+

+ PHP + Dependencies +

+
+ Recommended +
+ +
+ Optional System Utilities and + Libraries +
+

+ Aspell-0.60.8.1, enchant-2.8.12, + libxslt-1.1.43, an MTA (that + provides a sendmail command), + pcre2-10.45, AppArmor, Dmalloc, Net-SNMP, + oniguruma, OSSP mm, + re2c, and + XMLRPC-EPI +

+
+ Optional Graphics Utilities and + Libraries +
+

+ FreeType-2.13.3, libexif-0.6.25, + libjpeg-turbo-3.0.1, libpng-1.6.50, libtiff-4.7.0, libwebp-1.6.0, a graphical + environment, + FDF Toolkit, GD, and t1lib +

+
+ Optional Web Utilities +
+

+ cURL-8.15.0, tidy-html5-5.8.0, + Caudium, + Hyperwave, and WDDX +

+
+ Optional Data Management Utilities + and Libraries +
+

+ lmdb-0.9.33, MariaDB-11.8.3 or + MySQL, + OpenLDAP-2.6.10, PostgreSQL-17.6, + SQLite-3.50.4, unixODBC-2.3.12, + + Berkeley DB (deprecated) + Adabas, Birdstep, cdb, DBMaker, + Empress, + FrontBase, + IBM DB2, + libiodbc, + Mini SQL, + Monetra, + and QDBM +

+

+ PHP also provides support + for many commercial database tools such as Oracle, SAP and ODBC + Router. +

+
+ Optional Security/Encryption + Utilities and Libraries +
+

+ Cyrus SASL-2.1.28, libmcrypt, and + mhash +

+

+ Editor 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.14.5 + installed, you need to add --disable-libxml to the configure command in the + instructions below. Note that this will prevent the + pear command + from being built. +

+
+

+ Install PHP by running the + following commands: +

+
./configure --prefix=/usr                \
+            --sysconfdir=/etc            \
+            --localstatedir=/var         \
+            --datadir=/usr/share/php     \
+            --mandir=/usr/share/man      \
+            --without-pear               \
+            --enable-fpm                 \
+            --with-fpm-user=apache       \
+            --with-fpm-group=apache      \
+            --with-config-file-path=/etc \
+            --with-zlib                  \
+            --enable-bcmath              \
+            --with-bz2                   \
+            --enable-calendar            \
+            --enable-dba=shared          \
+            --with-gdbm                  \
+            --with-gmp                   \
+            --enable-ftp                 \
+            --with-gettext               \
+            --enable-mbstring            \
+            --disable-mbregex            \
+            --with-readline              &&
+make
+

+ To test the results, issue: make test. Several tests + (out of over 20000) 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.4.11 &&
+install -v -m644    CODING_STANDARDS* EXTENSIONS NEWS README* UPGRADING* \
+                    /usr/share/doc/php-8.4.11
+

+ 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.4.11 &&
+gunzip -v /usr/share/doc/php-8.4.11/php_manual_en.html.gz
+

+ For the “Many HTML + files” tarball: +

+
tar -xvf ../php_manual_en.tar.gz \
+    -C /usr/share/doc/php-8.4.11 --no-same-owner
+

+ The bundled pear is not installed because of a bug which + might pollute the filesystem with several hidden files and + directories. If pear is needed, execute the following + commands to install it: +

+
wget https://pear.php.net/go-pear.phar
+php ./go-pear.phar
+
+
+

+ Command Explanations +

+

+ --datadir=/usr/share/php: This + works around a bug in the build machinery, which installs + some data to a wrong location. +

+

+ --enable-fpm: This + parameter allows building the fastCGI Process Manager. +

+

+ --without-pear: This + switch disables installation of bundled pear software. +

+

+ --with-config-file-path=/etc: + This parameter makes PHP + look for the php.ini + configuration file in /etc. +

+

+ --with-zlib: This + parameter adds support for Zlib compression. +

+

+ --enable-bcmath: + Enables bc + style precision math functions. +

+

+ --with-bz2: Adds + support for Bzip2 + compression functions. +

+

+ --enable-calendar: + This parameter provides support for calendar conversion. +

+

+ --enable-dba=shared: + This parameter enables support for database (dbm-style) + abstraction layer functions. +

+

+ --enable-ftp: This + parameter enables FTP functions. +

+

+ --with-gettext: + Enables functions that use Gettext text translation. +

+

+ --enable-mbstring: + This parameter enables multibyte string support. +

+

+ --with-readline: This + parameter enables command line Readline support. +

+

+ --disable-libxml: This option + allows building PHP without libxml2 installed. +

+

+ --with-apxs2: Instead of building + the fastCGI process manager, it is possible to build an + apache module. This has some + performance penalty for heavy loaded servers, but may be + easier to set up. This switch is incompatible with the + --enable-fpm and + --with-fpm-... + switches. +

+

+ --with-mysqli=shared: This option + includes MySQLi support. +

+

+ --with-mysql-sock=/run/mysqld/mysqld.sock: + Location of the MySQL unix socket pointer. +

+

+ --with-pdo-mysql=shared: This + option includes PDO: MySQL support. +

+

+ --with-tidy=shared: This option + includes tidy library support. +

+
+
+

+ Configuring PHP +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/php.ini, /etc/pear.conf, /etc/php-fpm.conf, and /etc/php-fpm.d/www.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ The file used as the default /etc/php.ini configuration file is + recommended by the PHP + development team. This file modifies the default behavior + of PHP. If no /etc/php.ini is used, all configuration + settings fall to the defaults. You should review the + comments in this file and ensure the changes are acceptable + in your particular environment. +

+

+ The fastCGI process manager uses the configuration file + /etc/php-fpm.conf. The + default file shipped with PHP includes all the /etc/php-fpm.d/*.conf in turn. There is a + shipped /etc/php-fpm.d/www.conf file, that + contains the parameters related to the interaction with the + Apache Web server. +

+

+ You may have noticed the following from the output of the + make install + command: +

+
You may want to add: /usr/lib/php to your php.ini include_path
+

+ If desired, add the entry using the following command as + the root user: +

+
sed -i 's@php/includes"@&\ninclude_path = ".:/usr/lib/php"@' \
+    /etc/php.ini
+

+ To enable fastCGI support in the Apache web server, two LoadModule + directives must be added to the httpd.conf file. They are commented out, + so just issue the following command as root user: +

+
sed -i -e '/proxy_module/s/^#//'      \
+       -e '/proxy_fcgi_module/s/^#//' \
+       /etc/httpd/httpd.conf
+

+ Those modules accept various ProxyPass directives. One + possibility is (as the root + user): +

+
echo \
+'ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/srv/www/$1' >> \
+/etc/httpd/httpd.conf
+

+ Additionally, it may be useful to add an entry for + index.php to the + DirectoryIndex directive of the httpd.conf file. Lastly, adding a line to + set up the .phps extension to + show highlighted PHP + source may be desirable: +

+
AddType application/x-httpd-php-source .phps
+

+ You'll need to restart the Apache web server after making any + modifications to the httpd.conf file. +

+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically start the php-fpm daemon when the + system is rebooted, install the /etc/rc.d/init.d/php bootscript from the + blfs-bootscripts-20250225 package + as the root user: +

+
make install-php
+
+
+
+

+ 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-20230831 +
+
+ Installed Directories: + /etc/php-fpm.d, + /usr/{include,lib,share}/php, and + /usr/share/doc/php-8.4.11 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Python-3.13.7 +

+
+
+
+
+
+

+ Introduction to Python 3 +

+

+ The Python 3 package + contains the Python + development environment. This is useful for object-oriented + programming, writing scripts, prototyping large programs or + developing entire applications. +

+
+

+ Note +

+

+ Python 3 was installed in + LFS. The only reason to rebuild it here is if optional + modules are needed, or to upgrade this package. +

+
+

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

+
+

+ Important +

+

+ If upgrading to a new Python-3 minor version (for example, + from Python-3.11.x to Python-3.12.0), you will need to + reinstall any Python3 modules you have installed. You + should also reinstall packages that generate Python3 + modules including GLib-2.84.4 (with GObject Introspection), + libxml2-2.14.5, opencv-4.12.0, + FontForge-20230101, gnome-tweaks-46.1, Samba-4.22.4, and + Graphviz-13.1.2 (if swig is + installed). +

+

+ Before you upgrade, you can get a list of modules installed + with pip3 + list. The list may be incomplete as some + Python modules are not installed with pip3, for example the + cracklib module installed by + CrackLib-2.10.3. Use ls /usr/lib/python3.minor/site-packages + for a comprehensive list. +

+

+ The Python modules from LFS will also have to be + reinstalled: flit-core, + packaging, + wheel, + setuptools, + meson, + MarkupSafe, + and Jinja2. +

+
+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.python.org/ftp/python/3.13.7/Python-3.13.7.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 256cdb3bbf45cdce7499e52ba6c36ea3 +

    +
  • +
  • +

    + Download size: 22 MB +

    +
  • +
  • +

    + Estimated disk space required: 379 MB (add 59 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 1.5 SBU (add 2.8 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Additional Optional Download +

+
+ +
+

+ Python 3 Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ BlueZ-5.83, GDB-16.3 (required for some tests), + Valgrind-3.25.1, and libmpdec +

+
+ Optional (For Additional Modules) +
+

+ libnsl-2.0.1, Tk-8.6.16, and + Berkeley DB (deprecated) +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/Python3 +

+
+
+

+ Installation of Python 3 +

+

+ Install Python 3 by running + the following commands: +

+
./configure --prefix=/usr          \
+            --enable-shared        \
+            --with-system-expat    \
+            --enable-optimizations \
+            --without-static-libpython &&
+make
+

+ Some tests are known to occasionally hang indefinitely. So to + test the results, run the test suite but set a 2-minute time + limit for each test case: +

+
make test TESTOPTS="--timeout 120"
+

+ For a relatively slow system you may need to increase the + time limit and 1 SBU (measured when building Binutils pass 1 + with one CPU core) should be enough. Some tests are flaky, so + the test suite will automatically re-run failed tests. If a + test failed but then passed when re-run, it should be + considered as passed. +

+

+ Of over 44,000 tests, the following tests are known to fail: + test_idle, test_importlib, test_tkinter, and test_zipfile. +

+

+ Now, as the root user: +

+
make install
+

+ If upgrading and the documentation has been downloaded, + optionally install it as the root user: +

+
install -v -dm755 /usr/share/doc/python-3.13.7/html
+
+tar --strip-components=1  \
+    --no-same-owner       \
+    --no-same-permissions \
+    -C /usr/share/doc/python-3.13.7/html \
+    -xvf ../python-3.13.7-docs-html.tar.bz2
+
+
+

+ Command Explanations +

+

+ CXX="/usr/bin/g++" ./configure + ...: Avoid an annoying message during + configuration. +

+

+ --with-system-expat: + This switch enables linking against the system version of + Expat. +

+

+ --enable-optimizations: This + switch enables stable, but expensive, optimizations. +

+

+ --with-lto: This optional switch + enables thick Link Time Optimization. Unusually, it creates a + much larger /usr/lib/python3.13/config-3.13-<arch>-linux-gnu/libpython3.13.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.13.7 /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: + idle3 (symlink) and idle3.13, pip3 + and pip3.13, pydoc3 (symlink) and pydoc3.13, python3 + (symlink) and python3.13, and python3-config (symlink) + and python3.13-config +
+
+ Installed Libraries: + libpython3.13.so and + libpython3.so +
+
+ Installed Directories: + /usr/include/python3.13, + /usr/lib/python3.13, and + /usr/share/doc/python-3.13.7 +
+
+
+
+

+ 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.13 +

+
+

+ is a version-specific name for the python program +

+
+
+
+
+
+
+
+

+ Python-3.11.1 +

+
+
+
+
+
+

+ Introduction to Python 3.11 +

+

+ The Python 3.11 package + contains an older version of the Python development environment. This is + only needed for + building seamonkey-2.53.21 because its build + system has not been updated to support Python-3.13.7. +

+
+

+ Note +

+

+ Do NOT install this package if you are not installing + Seamonkey. +

+
+

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

+

+ Package Information +

+
+ +
+

+ Python 3.11 Dependencies +

+
+ Recommended +
+ +
+
+

+ Installation of Python 3.11 +

+

+ Install Python 3.11 by + running the following commands: +

+
./configure --prefix=/opt/python3.11 \
+            --disable-shared         \
+            --with-system-expat      \
+            --without-static-libpython &&
+make
+

+ Since this package is only used in very limited situations, + tests are not recommended. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ CXX="/usr/bin/g++" ./configure + ...: Avoid an annoying message during + configuration. +

+

+ --prefix=/opt/python3.11: This + installs python 3.11 into /opt in order to avoid conflicts + with the system version of python, and allows for easy + removal/isolation once programs update to python3.12 or + later. +

+

+ --disable-shared: + This switch disables building shared libraries. Since all the + packages that need python-3.11 have built in modules and + don't directly link to python, it is safe to turn off shared + library support. +

+

+ --with-system-expat: + This switch enables linking against the system version of + Expat. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + python3.11 +
+
+ Installed Libraries: + libpython3.11.a +
+
+ Installed Directories: + /opt/python3.11/include/python3.11, + and /opt/python3.11/lib/python3.11, +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ python3.11 +

+
+

+ is a version-specific name for the python program +

+
+
+
+
+
+
+
+

+ 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. +

+
+

+ Note +

+

+ If you want to run tests, several of the following modules + depend on the sqlite3 core + python module that has not been built in LFS. It is + therefore recommended to rebuild Python after installing + the recommended dependency listed in Python-3.13.7. +

+
+
+

+ Important +

+

+ In BLFS, we normally build and install Python 3 modules + with pip3. + Please take care that the pip3 install commands in + the book should be run as root unless it's for a Python virtual + environment. Running pip3 + install as a non-root user may seem to work fine, but it + will cause the installed module to be inaccessible by other + users. +

+

+ pip3 install + will not reinstall an already installed module by default. + For using the pip3 + install command to upgrade a module (for + example, from meson-0.61.3 to meson-0.62.0), insert + --upgrade into the + command line. If it's really necessary to downgrade a + module or reinstall the same version for some reason, + insert --force-reinstall into the + command line. +

+

+ If you have installed make-ca-1.16.1 before and have + copied files from /etc/profile.d to a new system, you must + install make-ca first prior to installing any Python + modules from this page. +

+
+
+ +
+
+
+

+ Asciidoc-10.2.1 +

+
+
+
+
+

+ Introduction to Asciidoc + Module +

+
+
+
+

+ The Asciidoc package is a + text document format for writing notes, documentation, + articles, books, ebooks, slideshows, web pages, man pages + and blogs. AsciiDoc files can be translated to many formats + including HTML, PDF, EPUB, and man page. +

+

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

+
+ Package Information +
+
+ +
+
+ Asciidoc Dependencies +
+
+ Optional (runtime) +
+

+ docbook-xsl-nons-1.79.2, + fop-2.11, + libxslt-1.1.43, Lynx-2.9.2, dblatex, + and W3m +

+
+
+
+
+
+

+ Installation of Asciidoc +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user asciidoc
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + a2x and asciidoc +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/asciidoc + and + /usr/lib/python3.13/site-packages/asciidoc-10.2.1.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + + + + + +
+

+ a2x +

+
+

+ is a toolchain manager for AsciiDoc (converts + Asciidoc text files to other file formats) +

+
+

+ asciidoc +

+
+

+ converts an AsciiDoc text file to HTML or DocBook +

+
+
+
+
+
+

+ build-1.3.0 +

+
+
+
+
+

+ Introduction to build +

+
+
+
+

+ build is a Python build + frontend implementing the PEP-517 resolution. +

+

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

+
+ Package Information +
+
+ +
+
+ build Dependencies +
+
+ Required +
+

+ pyproject_hooks-1.2.0 +

+
+ Optional (for tests) +
+

+ pytest-8.4.1, Python-3.13.7 (rebuilt + with SQLite-3.50.4), filelock, + pytest-cov, + pytest-mock, + pytest-rerunfailures, + pytest-xdist, + and uv +

+
+
+
+
+
+

+ Installation of build +

+
+
+
+

+ Build the package with: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the package run the following as the + root user: +

+
pip3 install --no-index --find-links dist --no-user build
+

+ Assuming pytest-8.4.1 is installed and Python-3.13.7 has been rebuilt with + SQLite-3.50.4, but the other optional + dependencies are not, the installation can be tested with + the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install --group test                      &&
+python3 -m pytest
+deactivate
+

+ One test in test_projectbuilder.py is known to fail + due to a conflict with the system copy of flit_core. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + pyproject-build +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/build and + /usr/lib/python3.13/site-packages/build-1.3.0.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ pyproject-build +

+
+

+ is a simple Python build frontend +

+
+
+
+
+
+

+ cachecontrol-0.14.3 +

+
+
+
+
+

+ Introduction to cachecontrol + Module +

+
+
+
+

+ CacheControl is a port of + the caching algorithms in httplib2 for use with requests + session object. It was written because httplib2's better + support for caching is often mitigated by its lack of + thread safety. The same is true of requests in terms of + caching. +

+

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

+
+ Package Information +
+
+ +
+
+ CacheControl Dependencies +
+
+ Required +
+

+ msgpack-1.1.1 and requests-2.32.5 +

+
+
+
+
+
+

+ Installation of CacheControl +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user cachecontrol
+

+ This module does not have a working test suite. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + doesitcache +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/CacheControl-0.14.3.dist-info + and + /usr/lib/python3.13/site-packages/cachecontrol +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ doesitcache +

+
+

+ is an undocumented command line script. +

+
+
+
+
+
+

+ CSSSelect-1.3.0 +

+
+
+
+
+

+ Introduction to CSSSelect + Module +

+
+
+
+

+ CSSSelect provides CSS + selectors for Python. +

+

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

+
+ Package Information +
+
+ +
+
+ CSSSelect Dependencies +
+
+ Required +
+

+ setuptools_scm-8.3.1 +

+
+ Optional (for testing) +
+

+ lxml-6.0.0 and pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of CSSSelect +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user cssselect
+

+ To test the installation issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/cssselect +
+
+
+
+
+
+

+ Cython-3.1.3 +

+
+
+
+
+

+ Introduction to Cython + Module +

+
+
+
+

+ The Cython package + provides a compiler for writing C extensions for the Python + language. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Cython +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user Cython
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + cygdb, cython, and + cythonize +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/Cython, + /usr/lib/python3.13/site-packages/Cython-3.1.3.dist-info, + and /usr/lib/python3.13/site-packages/pyximport +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + + + + + + + + + +
+

+ cygdb +

+
+

+ is the Cython debugger +

+
+

+ cython +

+
+

+ is a compiler for code written in the Cython + language. It outputs a C/C++ program which can be + compiled with a C/C++ compiler +

+
+

+ cythonize +

+
+

+ is a compiler for code written in the Cython + language. It outputs an extension module which is + directly importable from Python +

+
+
+
+
+
+

+ dbusmock-0.36.0 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ dbusmock Dependencies +
+
+ Required +
+

+ D-Bus Python-1.4.0 +

+
+ Optional +
+

+ pytest-8.4.1 (required to run the test + suite), PyGObject-3.52.3 (required to run + the test suite), BlueZ-5.83 (optional for the test suite), + and UPower-1.90.9 (optional for the test + suite; if not installed one test will fail) +

+
+
+
+
+
+

+ Installation of dbusmock +

+
+
+
+

+ Build the package with: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the package run the following as the + root user: +

+
pip3 install --no-index --find-links dist --no-user python-dbusmock
+

+ To test the results, issue: LC_ALL=C pytest +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/dbusmock + and + /usr/lib/python3.13/site-packages/python_dbusmock-0.36.0.dist-info +
+
+
+
+
+
+

+ D-Bus Python-1.4.0 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ D-Bus Python Dependencies +
+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4, meson_python-0.18.0, and + patchelf-0.18.0 +

+
+ Optional +
+

+ PyGObject-3.52.3 (for tests) +

+
+
+
+
+
+

+ Installation of D-Bus Python +

+
+
+
+

+ Build the D-Bus Python module by running the following + command: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now install the module as the root user: +

+
pip3 install --no-index --find-links dist --no-user dbus-python
+

+ To test the result, issue: DBUS_TOP_SRCDIR=$PWD PYTHON=python3 + dbus-run-session test/run-test.sh. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/dbus and + /usr/lib/python3.13/site-packages/dbus_python-1.4.0.egg-info +
+
+
+
+
+
+

+ docutils-0.21.2 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of docutils +

+
+
+
+

+ First, remove some files installed in a previous version + that are no longer valid. As the root user: +

+
for f in /usr/bin/rst*.py; do
+  rm -fv /usr/bin/$(basename $f .py)
+done
+

+ To build the Python 3 + applications, run the following command: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the Python + applications run the following as the root user: +

+
pip3 install --no-index --find-links dist --no-user docutils
+

+ To test the installation, issue: test/alltests.py. Two + tests in the test_parser + suite are known to fail. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + docutils, rst2html4, rst2html5, + rst2html, rst2latex, rst2man, rst2odt_prepstyles, + rst2odt, rst2pseudoxml, rst2s5, rst2xetex, rst2xml, and + rstpep2html +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/docutils{,-0.21.2.dist-info} +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ docutils +

+
+

+ converts documents into various formats +

+
+

+ rst2html +

+
+

+ generates (X)HTML documents from standalone + reStructuredText sources +

+
+

+ rst2html4 +

+
+

+ generates (X)HTML documents from standalone + reStructuredText sources +

+
+

+ rst2html5 +

+
+

+ generates HTML5 documents from standalone + reStructuredText sources +

+
+

+ rst2latex +

+
+

+ generates LaTeX documents from standalone + reStructuredText sources +

+
+

+ rst2man +

+
+

+ generates plain unix manual documents from + standalone reStructuredText sources +

+
+

+ rst2odt +

+
+

+ generates OpenDocument/OpenOffice/ODF documents + from standalone reStructuredText sources +

+
+

+ rst2odt_prepstyles +

+
+

+ Fix a word-processor-generated styles.odt for + odtwriter use +

+
+

+ rst2pseudoxml +

+
+

+ generates pseudo-XML from standalone + reStructuredText sources (for testing purposes) +

+
+

+ rst2s5 +

+
+

+ generates S5 (X)HTML slideshow from standalone + reStructuredText sources +

+
+

+ rst2xetex +

+
+

+ generates LaTeX documents from standalone + reStructuredText sources for compilation with the + Unicode-aware TeX variants XeLaTeX or LuaLaTeX +

+
+

+ rst2xml +

+
+

+ generates Docutils-native XML from standalone + reStructuredText sources +

+
+

+ rstpep2html +

+
+

+ generates (X)HTML from reStructuredText-format + PEP files +

+
+
+
+
+
+

+ Doxypypy-0.8.8.7 +

+
+
+
+
+

+ Introduction to Doxypypy + Module +

+
+
+
+

+ The Doxypypy package is a + doxygen filter for python. +

+

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

+
+ Package Information +
+
+ +
+
+ Doxypypy Dependencies +
+
+ Required +
+

+ chardet-5.2.0 and Doxygen-1.14.0 (at + run time) +

+
+
+
+
+
+

+ Installation of Doxypypy +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user doxypypy
+

+ This package does not come with a working test suite. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + doxypypy +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/doxypypy + and + /usr/lib/python3.13/site-packages/doxypypy-0.8.8.7.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ doxypypy +

+
+

+ filters Python code for use with Doxygen, using a + syntax-aware approach. +

+
+
+
+
+
+

+ Doxyqml-0.5.3 +

+
+
+
+
+

+ Introduction to Doxyqml + Module +

+
+
+
+

+ The Doxyqml package allows + using Doxygen to document QML classes. +

+

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

+
+ Package Information +
+
+ +
+
+ Doxyqml Dependencies +
+
+ Required (Run Time) +
+

+ Doxygen-1.14.0 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Doxyqml +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user doxyqml
+

+ To test the installation, issue: +

+
python3 tests/functional/tests.py &&
+python3 tests/unit/tests.py
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + doxyqml +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/doxyqml and + /usr/lib/python3.13/site-packages/doxyqml-0.5.3.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ doxyqml +

+
+

+ is a Doxygen input filter for QML files. +

+
+
+
+
+
+

+ Gi-DocGen-2025.4 +

+
+
+
+
+

+ Introduction to Gi-DocGen + Module +

+
+
+
+

+ Gi-DocGen is a document + generator for GObject-based libraries. GObject is the base + type system of the GNOME project. Gi-DocGen reuses the + introspection data generated by GObject-based libraries to + generate the API reference of these libraries, as well as + other ancillary documentation. +

+

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

+
+ Package Information +
+
+ +
+
+ Gi-DocGen Dependencies +
+
+ Required +
+

+ Markdown-3.8.2, Pygments-2.19.2, + and typogrify-2.1.0 +

+
+ Optional +
+

+ Graphviz-13.1.2 (runtime, for + visualizing class hierarchy graphs) and pytest-8.4.1 (for + testing) +

+
+
+
+
+
+

+ Installation of gi-docgen +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user gi-docgen
+

+ To test the installation, issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + gi-docgen +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/gidocgen + and + /usr/lib/python3.13/site-packages/gi_docgen-2025.4.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gi-docgen +

+
+

+ manages documentation for libgobject based + libraries. +

+
+
+
+
+
+

+ html5lib-1.1 +

+
+
+
+
+

+ Introduction to html5lib + Module +

+
+
+
+

+ html5lib provides a + pure-python library for parsing HTML. It is designed to + conform to the WHATWG HTML specification. +

+

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

+
+ Package Information +
+
+ +
+
+ html5lib Dependencies +
+
+ Required +
+

+ six-1.17.0 and webencodings-0.5.1 +

+
+
+
+
+
+

+ Installation of html5lib +

+
+
+
+

+ To build the Python 3 + module, run: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the module, issue the following command as the + root user: +

+
pip3 install --no-index --find-links dist --no-user html5lib
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/html5lib + and + /usr/lib/python3.13/site-packages/html5lib-1.1.dist-info +
+
+
+
+
+
+

+ lxml-6.0.0 +

+
+
+
+
+

+ Introduction to lxml Module +

+
+
+
+

+ lxml provides Python bindings for libxslt-1.1.43 + and libxml2-2.14.5. +

+

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

+
+ Package Information +
+
+ +
+
+ lxml Dependencies +
+
+ Required +
+

+ libxslt-1.1.43 +

+
+
+
+
+
+

+ Installation of lxml +

+
+
+
+

+ To build the Python 3 + module, run: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the module, issue the following command as the + root user: +

+
pip3 install --no-index --find-links dist --no-user lxml
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/lxml and + /usr/lib/python3.13/site-packages/lxml-6.0.0.dist-info +
+
+
+
+
+
+

+ Mako-1.3.10 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+

+ Note +

+

+ The tarball name has changed from Mako to mako, but still + installs the module as Mako. +

+
+
+ Mako Dependencies +
+
+ Optional (for Testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Mako +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Install the module as the root user: +

+
pip3 install --no-index --find-links dist --no-user Mako
+

+ To test the installation, issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + mako-render +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/mako and + /usr/lib/python3.13/site-packages/Mako-1.3.10.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ mako-render +

+
+

+ renders a template +

+
+
+
+
+
+

+ NumPy-2.3.2 +

+
+
+
+
+

+ Introduction to NumPy Module +

+
+
+
+

+ NumPy is the fundamental + package for scientific computing with Python. +

+

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

+
+ Package Information +
+
+ +
+
+ NumPy Dependencies +
+
+ Required +
+

+ cython-3.1.3, meson_python-0.18.0, and + pyproject-metadata-0.9.1 +

+
+ Optional +
+

+ fortran from GCC-15.2.0, lapack and cblas, and + openblas +

+
+ Optional (for testing) +
+

+ attrs-25.3.0, pytest-8.4.1, pytz-2025.2, + and hypothesis +

+
+
+
+
+
+

+ Installation of NumPy +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir -C setup-args=-Dallow-noblas=true $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user numpy
+

+ The installation can be tested with the following commands: +

+
mkdir -p test                                  &&
+cd       test                                  &&
+python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install hypothesis                        &&
+python3 -c "import numpy, sys; sys.exit(numpy.test() is False)"
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + f2py, f2py3 and f2py3.13 (3 + copies of the same script) +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/numpy +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ f2py +

+
+

+ is the Fortran to Python interface generator + utility. +

+
+
+
+
+
+

+ ply-3.11 +

+
+
+
+
+

+ Introduction to ply Module +

+
+
+
+

+ The ply package is a 100% + Python implementation of the common parsing tools 'lex' and + 'yacc'. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of ply +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user ply
+

+ This package does not come with a working test suite. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/ply and + /usr/lib/python3.13/site-packages/ply-3.11.dist-info +
+
+
+
+
+
+

+ psutil-7.0.0 +

+
+
+
+
+

+ Introduction to psutil + Module +

+
+
+
+

+ psutil (process and system utilities) is a cross-platform + library for retrieving information on running processes and + system utilization (CPU, memory, disks, network, sensors) + in Python. It is useful mainly for system monitoring, + profiling and limiting process resources and management of + running processes. It implements many functionalities + offered by classic UNIX command line tools such as ps, top, + iotop, lsof, netstat, ifconfig, free and others. +

+

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

+
+ Package Information +
+
+ +
+
+ Packaging Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1, requests-2.32.5, + and pypinfo +

+
+
+
+
+
+

+ Installation of psutil +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user psutil
+

+ To test the results, issue: make test. +

+

+ Two tests, TestSystemAPIs::test_disk_usage and + TestNetAPIs::test_net_if_addrs, are known + to fail. One test named TestAvailProcessAPIs::test_io_counters is + known to fail if the kernel does not have CONFIG_TASK_IO_ACCOUNTING enabled. + TestExampleScripts.test_who is + known to fail if the login manager does not write into + /run/utmp (note that due to + the potential year 2037 problem, Shadow has already stopped + writing into it). TestInternalScripts.test_import_all is + known to fail if requests-2.32.5 is not installed. + TestInternalScripts::test_import_all is + known to fail if the external module pyinfo is not + installed. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/psutil-7.0.0.dist-info +
+
+
+
+
+
+

+ Py3c-1.4 +

+
+
+
+
+

+ Introduction to Py3c +

+
+
+
+

+ Py3c helps you port C + extensions to Python 3. It provides a detailed guide, and a + set of macros to make porting easy and reduce boilerplate. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Py3c +

+
+
+
+

+ The Py3c package is a + headers-only package and because of that, no configuration + and compilation is required. +

+

+ To test the package, issue: +

+
make test-python3 &&
+make test-python3-cpp
+

+ To install the Python 3 + module, run the following command as the root user: +

+
make prefix=/usr install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/include/py3c +
+
+
+
+
+
+

+ PyAtSpi2-2.46.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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ PyAtSpi2 Dependencies +
+
+ Required +
+

+ PyGObject-3.52.3 +

+
+ Recommended +
+ +
+
+
+
+
+

+ Installation of PyAtSpi2 +

+
+
+
+

+ To build PyAtSpi2 as a + Python 3 module, run the + following commands: +

+
./configure --prefix=/usr --with-python=/usr/bin/python3
+

+ This package does not come with a test suite. +

+

+ To install the Python 3 + module, run the following command as the root user: +

+
make install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pyatspi +
+
+
+
+
+
+

+ PyCairo-1.28.0 +

+
+
+
+
+

+ Introduction to PyCairo + Module +

+
+
+
+

+ PyCairo provides Python + bindings to Cairo. +

+

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

+
+ Package Information +
+
+ +
+
+ PyCairo Dependencies +
+
+ Required +
+

+ Cairo-1.18.4 +

+
+ Optional +
+

+ pytest-8.4.1 (for tests) +

+
+
+
+
+
+

+ Installation of PyCairo +

+
+
+
+

+ Install PyCairo by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To run the tests, this package requires the optional pytest + module. If it is installed, run the tests by running + ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Program: + None +
+
+ Installed Library: + None +
+
+ Installed + Directories: /usr/include/pycairo, + /usr/lib/python3.13/site-packages/cairo, and + /usr/lib/python3.13/site-packages/pycairo-1.28.0.egg-info +
+
+
+
+
+
+

+ pygdbmi-0.11.0.0 +

+
+
+
+
+

+ Introduction to pygdbmi + Module +

+
+
+
+

+ GDB/MI is a line based machine oriented text interface to + GDB and is activated by specifying using the --interpreter + command line option (see Mode Options). It is specifically + intended to support the development of systems which use + the debugger as just one small component of a larger + system. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of pygdbmi +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pygdbmi
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pygdbmi-0.11.0.0.dist-info +
+
+
+
+
+
+

+ Pygments-2.19.2 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+

+ Pygments Dependencies +

+
+ Required +
+

+ hatchling-1.27.0 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 and wcag-contrast-ratio +

+
+
+
+
+
+

+ Installation of Pygments +

+
+
+
+

+ Build the Python 3 module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the package run the following as the + root user: +

+
pip3 install --no-index --find-links dist --no-user Pygments
+

+ To test the installation, make sure pytest-8.4.1 is + installed and run: +

+
python3 -m venv --system-site-packages testenv &&
+testenv/bin/pip3 install wcag-contrast-ratio   &&
+testenv/bin/python -m pytest
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + pygmentize +
+
+ Installed Library: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pygments + and + /usr/lib/python3.13/site-packages/Pygments-2.19.2.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ pygmentize +

+
+

+ highlights an input file and writes the result to + an output file +

+
+
+
+
+
+

+ PyGObject-3.52.3 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ PyGObject3 Dependencies +
+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Recommended +
+ +
+ Optional (for the tests) +
+

+ GTK-4.18.6, pep8, pyflakes, and + pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of PyGObject3 +

+
+
+
+

+ First, remove two faulty tests: +

+
mv -v tests/test_gdbus.py{,.nouse}         &&
+mv -v tests/test_overrides_gtk.py{,.nouse}
+

+ Install pygobject3 by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. An already + active graphical session with a bus address is necessary to + run the tests. Another round of tests may report ERROR if + GTK-4.18.6 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. +

+

+ -D pycairo=disabled: use this + switch if you do not have PyCairo-1.28.0 installed. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + /usr/lib/python3.13/site-packages/gi/_gi{,_cairo}.cpython-313-<arch>-linux-gnu.so +
+
+ Installed + Directories: /usr/include/pygobject-3.0 and + /usr/lib/python3.13/site-packages/{gi,pygtkcompat} +
+
+
+
+
+
+

+ pyparsing-3.2.3 +

+
+
+
+
+

+ Introduction to pyparsing + Module +

+
+
+
+

+ The pyparsing module is an + alternative approach to creating and executing simple + grammars, vs. the traditional lex/yacc approach, or the use + of regular expressions. It provides a library of classes + that client code uses to construct the grammar directly in + Python code. +

+

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

+
+ Package Information +
+
+ +
+
+ pyparsing Dependencies +
+
+ Optional +
+

+ railroad-diagrams + (also needed for tests) +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of pyparsing +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pyparsing
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependency is not, the installation can be tested + with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install railroad-diagrams matplotlib      &&
+python3 /usr/bin/pytest
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pyparsing + and + /usr/lib/python3.13/site-packages/pyparsing-3.2.3.dist-info +
+
+
+
+
+
+

+ pySerial-3.5 +

+
+
+
+
+

+ Introduction to pySerial + Module +

+
+
+
+

+ The pySerial module + encapsulates access to the serial port. +

+

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

+
+ Package Information +
+
+ +
+
+ pySerial Dependencies +
+
+ Required +
+

+ setuptools_scm-8.3.1 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of pySerial +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pyserial
+

+ To test the installation issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + pyserial-miniterm and + pyserial-ports +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pyserial-3.5.dist-info + and /usr/lib/python3.13/site-packages/serial +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + + + + + +
+

+ pyserial-miniterm +

+
+

+ is a console application that provides a small + terminal application. It may inherit terminal + features from the terminal in which it is run. +

+
+

+ pyserial-ports +

+
+

+ lists available ports. +

+
+
+
+
+
+

+ Pytest-8.4.1 +

+
+
+
+
+

+ Introduction to Pytest + Module +

+
+
+
+

+ The Pytest framework makes + it easy to write small, readable tests, and can scale to + support complex functional testing for applications and + libraries. +

+

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

+
+ Package Information +
+
+ +
+
+ Pytest Dependencies +
+
+ Required +
+

+ iniconfig-2.1.0 and pluggy-1.6.0 +

+
+ Recommended +
+ +
+ Optional (for testing) +
+

+ attrs-25.3.0, Pygments-2.19.2, + requests-2.32.5, argcomplete, + hypothesis, + mock, and xmlschema +

+
+
+
+
+
+

+ Installation of Pytest +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pytest
+

+ The installation can be tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install pytest[dev] xmlschema hypothesis  &&
+python3 /usr/bin/pytest
+deactivate
+

+ One test, testing/acceptance_test.py, is known to + fail. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + pytest and py.test (different + files but with same content) +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/_pytest, + /usr/lib/python3.13/site-packages/pytest, and + /usr/lib/python3.13/site-packages/pytest-8.4.1.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ pytest +

+
+

+ sets up, manages, and/or runs tests in python + module source directories +

+
+
+
+
+
+

+ PyXDG-0.28 +

+
+
+
+
+

+ Introduction to PyXDG Module +

+
+
+
+

+ PyXDG is a Python library to access + freedesktop.org standards. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of PyXDG +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Install the module as the root user: +

+
pip3 install --no-index --find-links dist --no-user pyxdg
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Directory: + /usr/lib/python3.13/site-packages/xdg and + /usr/lib/python3.13/site-packages/pyxdg-0.28.dist-info +
+
+
+
+
+
+

+ PyYAML-6.0.2 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ PyYAML Dependencies +
+
+ Required +
+

+ cython-3.1.3 and libyaml-0.2.5 +

+
+ Optional +
+

+ pytest-8.4.1 (for testing) +

+
+
+
+
+
+

+ Installation of PyYAML +

+
+
+
+

+ Build PyYAML with the following command: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, install the module as the root user: +

+
pip3 install --no-index --find-links dist --no-user PyYAML
+

+ To test the results, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/PyYAML-0.2.5.dist-info +
+
+
+
+
+
+

+ Recommonmark-0.7.1 +

+
+
+
+
+

+ Introduction to Recommonmark + Module +

+
+
+
+

+ Recommonmark is a + docutils-compatibility bridge to CommonMark. It allows + writing CommonMark inside of Docutils and Sphinx projects. + Recommonmark is now + deprecated in favor of MyST-Parser. + Unfortunately, libinput-1.29.0 depends on this + module. +

+

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

+
+ Package Information +
+
+ +
+
+ Recommonmark Dependencies +
+
+ Required +
+

+ commonmark-0.9.1 and sphinx-8.2.3 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Recommonmark +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user recommonmark
+

+ Recommonmark is now + deprecated in favor of MyST-Parser. + For this reason, a lot of tests have to be disabled because + they do not pass with recent versions of Sphinx. The installation can be + partially tested with the following command: +

+
pytest -k 'not (test_integration or test_code or test_headings or test_image or test_links or test_lists)'
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + cm2html, cm2latex, cm2man, + cm2pseudoxml, cm2xetex, and cm2xml +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/recommonmark + and + /usr/lib/python3.13/site-packages/recommonmark-0.7.1.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ cm2html +

+
+

+ generates a html document from markdown sources +

+
+

+ cm2latex +

+
+

+ generates a latex document from markdown sources +

+
+

+ cm2man +

+
+

+ generates a manpage from markdown sources +

+
+

+ cm2pseudoxml +

+
+

+ generates a pseudo-XML document from markdown + sources +

+
+

+ cm2xetex +

+
+

+ generates a xetex document from markdown sources +

+
+

+ cm2xml +

+
+

+ generates an XML document from markdown sources +

+
+
+
+
+
+

+ Requests-2.32.5 +

+
+
+
+
+

+ Introduction to Requests + Module +

+
+
+
+

+ The Requests package is an + elegant and simple HTTP library for Python, built for human + beings. It allows sending HTTP/1.1 requests extremely + easily. +

+

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

+
+ Package Information +
+
+ +
+
+ Additional Download +
+ +
+ Requests Dependencies +
+
+ Required +
+

+ charset-normalizer-3.4.3, + idna-3.10, and urllib3-2.5.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ PySocks (also + needed for testing) +

+
+ Optional (for testing) +
+

+ pytest-8.4.1, Flask<2, httpbin, MarkupSafe<2.1, + pytest-mock, + pytest-httpbin, + sphinx<5, + trustme, and + Werkzeug<2 +

+
+
+
+
+
+

+ Installation of Requests +

+
+
+
+

+ First apply a patch so that the same environment variable + already used to point to system certificates in + Python3 following the + installation of make-ca + can also be used by this module: +

+
patch -Np1 -i ../requests-use_system_certs-1.patch
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user requests
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependencies are not, the installation can be + tested with the following commands: +

+
+

+ Note +

+

+ Some of the setup instructions below may indicate an + error due to dependent module versions, but these errors + do not affect the test results. +

+
+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install --force-reinstall sphinx\<5       &&
+pip3 install pytest-mock    \
+             werkzeug\<2    \
+             flask\<2       \
+             pytest-httpbin \
+             pysocks        \
+             trustme                           &&
+pip3 install --force-reinstall Markupsafe\<2.1 &&
+python3 /usr/bin/pytest tests
+deactivate
+
+

+ Note +

+

+ See make-ca-1.16.1 for how to set the + environment variable, and for how local copies of the + Certifi and Requests modules installed in a virtual + environment will + override the system certificates. +

+
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/requests + and + /usr/lib/python3.13/site-packages/requests-2.32.5.dist-info +
+
+
+
+
+
+

+ Scour-0.38.2 +

+
+
+
+
+

+ Introduction to Scour Module +

+
+
+
+

+ Scour is an SVG (Scalable + Vector Graphics) optimizer/cleaner that reduces their size + by optimizing structure and removing unnecessary data. +

+

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

+
+ Package Information +
+
+ +
+
+ Scour Dependencies +
+
+ Required +
+

+ six-1.17.0 +

+
+ Optional (required for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of scour +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ To install the module, run the following command as the + root user: +

+
pip3 install --no-index --find-links dist --no-user scour
+

+ To test the results, issue: pytest +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + scour +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/scour and + /usr/lib/python3.13/site-packages/scour-0.38.2.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ scour +

+
+

+ is a program to optimize and clean SVG files +

+
+
+
+
+
+

+ sentry-sdk-2.35.0 +

+
+
+
+
+

+ Introduction to sentry-sdk + Module +

+
+
+
+

+ The sentry-sdk module is + the official Python SDK for Sentry.io. +

+

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

+
+ Package Information +
+
+ +
+
+ sentry-sdk Dependencies +
+
+ Required +
+

+ certifi-2025.8.3 and urllib3-2.5.0 +

+
+
+
+
+
+

+ Installation of sentry-sdk +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sentry-sdk
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sentry_sdk-2.35.0.dist-info + and /usr/lib/python3.13/site-packages/sentry_sdk +
+
+
+
+
+
+

+ six-1.17.0 +

+
+
+
+
+

+ Introduction to Six Module +

+
+
+
+

+ Six is a Python 2 to 3 compatibility library. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Six +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user six
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/six-1.17.0.dist-info +
+
+
+
+
+
+

+ Sphinx-8.2.3 +

+
+
+
+
+

+ Introduction to Sphinx + Module +

+
+
+
+

+ The Sphinx package is a + set of tools for translating some structured text formats + into pretty documentation in various formats. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinx Dependencies +
+
+ Required +
+

+ alabaster-1.0.0, babel-2.17.0, + docutils-0.21.2, imagesize-1.4.1, Pygments-2.19.2, requests-2.32.5, roman-numerals-py-3.1.0, + snowballstemmer-3.0.1, + sphinxcontrib-applehelp-2.0.0, + sphinxcontrib-devhelp-2.0.0, + sphinxcontrib-htmlhelp-2.1.0, + sphinxcontrib-jsmath-1.0.1, + sphinxcontrib-qthelp-2.0.0, + and sphinxcontrib-serializinghtml-2.0.0 +

+
+ Optional (for tests) +
+

+ cython-3.1.3, html5lib-1.1, + pytest-8.4.1, texlive-20250308, defusedxml, and + typing_extensions +

+
+
+
+
+
+

+ Installation of Sphinx +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinx
+

+ Assuming cython-3.1.3 and pytest-8.4.1 are + installed, but the other optional dependencies are not, the + installation can be tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install sphinx[test]                      &&
+python3 -m pytest
+deactivate
+

+ One test, test_ext_math.py::test_imgmath_numfig_html, is + known to fail. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + sphinx-apidoc, sphinx-autogen, + sphinx-build, and sphinx-quickstart +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinx and + /usr/lib/python3.13/site-packages/sphinx-8.2.3.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ sphinx-apidoc +

+
+

+ creates an reST file from python modules and + packages +

+
+

+ sphinx-autogen +

+
+

+ generates ReStructuredText from special + directives contained in given input files +

+
+

+ sphinx-build +

+
+

+ generates documentation in various formats from + ReStructuredText source files +

+
+

+ sphinx-quickstart +

+
+

+ generates required files for a sphinx project +

+
+
+
+
+
+

+ Sphinx_rtd_theme-3.0.2 +

+
+
+
+
+

+ Introduction to + Sphinx_rtd_theme Module +

+
+
+
+

+ The sphinx_rtd_theme + module is a Sphinx theme designed to provide a great reader + experience for documentation users on both desktop and + mobile devices. This theme is used primarily on Read the + Docs but can work with any Sphinx project. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinx_rtd_theme Dependencies +
+
+ Required +
+

+ sphinx-8.2.3 and sphinxcontrib-jquery-4.1 +

+
+ Optional (for tests) +
+

+ pytest-8.4.1 and readthedocs-sphinx-ext +

+
+
+
+
+
+

+ Installation of + Sphinx_rtd_theme +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinx_rtd_theme
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependency is not, the installation can be tested + with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install readthedocs-sphinx-ext            &&
+python3 /usr/bin/pytest
+deactivate
+

+ Several tests return warnings because they use a deprecated + sphinx API. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinx_rtd_theme + and + /usr/lib/python3.13/site-packages/sphinx_rtd_theme-3.0.2.dist-info +
+
+
+
+
+
+
+
+
+

+ Python Dependencies +

+
+
+
+
+
+

+ Introduction to Python Dependencies +

+

+ Python modules listed in Python Modules + have dependencies that are not referenced by other packages + in BLFS. These dependencies are listed here. They will not + get updated on regular basis, unless a more recent version is + needed. +

+
+

+ Important +

+

+ In BLFS, we normally build and install Python 3 modules + with pip3. + Please take care that the pip3 install commands in + the book should be run as root unless it's for a Python virtual + environment. Running pip3 + install as a non-root user may seem to work fine, but it + will cause the installed module to be inaccessible by other + users. +

+

+ pip3 install + will not reinstall an already installed module by default. + For using the pip3 + install command to upgrade a module (for + example, from meson-0.61.3 to meson-0.62.0), insert + --upgrade into the + command line. If it's really necessary to downgrade a + module or reinstall the same version for some reason, + insert --force-reinstall into the + command line. +

+
+ +
+
+

+ Alabaster-1.0.0 +

+
+
+
+
+

+ Introduction to Alabaster + Module +

+
+
+
+

+ The Alabaster package is a + theme for the sphinx + documentation system. Although developed separately, it is + the default theme for sphinx. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of Alabaster +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user alabaster
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/alabaster + and + /usr/lib/python3.13/site-packages/alabaster-1.0.0.dist-info +
+
+
+
+
+
+

+ Attrs-25.3.0 +

+
+
+
+
+

+ Introduction to Attrs Module +

+
+
+
+

+ The Attrs package is a + python module that allows for writing attributes without + extra boilerplate. +

+

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

+
+ Package Information +
+
+ +
+
+ Attrs Dependencies +
+
+ Required +
+

+ hatch-fancy-pypi-readme-25.1.0 + and hatch_vcs-0.5.0 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1, cloudpickle, + hypothesis, + Pympler, mypy, + pytest-mypy-plugins, + pytest-xdist[psutil], + and zope.interface +

+
+
+
+
+
+

+ Installation of Attrs +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user attrs
+

+ To test the installation, run: +

+
python3 -m venv --system-site-packages testenv           &&
+testenv/bin/pip3 install 'attrs[tests]'                  &&
+PATH=$PWD/testenv/bin:$PATH testenv/bin/python -m pytest
+

+ Three tests related to Mypy are known to fail. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/attr, + /usr/lib/python3.13/site-packages/attrs, and + /usr/lib/python3.13/site-packages/attrs-25.3.0.dist-info +
+
+
+
+
+
+

+ babel-2.17.0 +

+
+
+
+
+

+ Introduction to Babel Module +

+
+
+
+

+ The Babel package is an + integrated collection of utilities that assist in + internationalizing and localizing Python applications, with + an emphasis on web-based applications. +

+

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

+
+ Package Information +
+
+ +
+
+ Babel Dependencies +
+
+ Required +
+

+ pytz-2025.2 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1, Python-3.13.7 (with + the sqlite module), freezegun, and + pytest-cov +

+
+
+
+
+
+

+ Installation of Babel +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user Babel
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependencies are not, the installation can be + tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install pytest-cov freezegun              &&
+python3 /usr/bin/pytest
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + pybabel +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/babel and + /usr/lib/python3.13/site-packages/Babel-2.17.0.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ pybabel +

+
+

+ is a command-line interface for working with + message catalogs +

+
+
+
+
+
+

+ certifi-2025.8.3 +

+
+
+
+
+

+ Introduction to Certifi + Module +

+
+
+
+

+ The certifi module + provides Mozilla’s carefully curated collection of Root + Certificates for validating the trustworthiness of SSL + certificates while verifying the identity of TLS hosts. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of certifi +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user certifi
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/certifi and + /usr/lib/python3.13/site-packages/certifi-2025.8.3.dist-info +
+
+
+
+
+
+

+ Chardet-5.2.0 +

+
+
+
+
+

+ Introduction to chardet + Module +

+
+
+
+

+ Chardet is a universal + character encoding detector. +

+

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

+
+ Package Information +
+
+ +
+
+ Chardet Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Chardet +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user chardet
+

+ To test the installation issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + chardetect +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/chardet and + /usr/lib/python3.13/site-packages/chardet-5.2.0.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ chardetect +

+
+

+ is a Universal Character Encoding Detector +

+
+
+
+
+
+

+ Charset-normalizer-3.4.3 +

+
+
+
+
+

+ Introduction to + charset-normalizer Module +

+
+
+
+

+ The charset-normalizer + library helps with reading text from an unknown character + encoding. +

+

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

+
+ Package Information +
+
+ +
+
+ Charset-normalizer Dependencies +
+
+ Required +
+

+ setuptools_scm-8.3.1 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1, Python-3.13.7 (rebuilt + after installing SQLite-3.50.4), and pytest-cov +

+
+
+
+
+
+

+ Installation of + Charset-normalizer +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user charset-normalizer
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependencies are not, the installation can be + tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install pytest-cov                        &&
+python3 /usr/bin/pytest
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + normalizer +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/charset_normalizer + and + /usr/lib/python3.13/site-packages/charset_normalizer-3.4.3.dist-info +
+
+
+
+
+ Short Descriptions +
+ + + + + + + + + + + +
+

+ normalizer +

+
+

+ is a Universal Charset Detector (discovers + originating encoding and normalizes text to + unicode) +

+
+
+
+
+
+

+ Commonmark-0.9.1 +

+
+
+
+
+

+ Introduction to Commonmark + Module +

+
+
+
+

+ Commonmark Python parser + for the CommonMark Markdown specification. +

+

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

+
+ Package Information +
+
+ +
+
+ Commonmark Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1, flake8, and + hypothesis +

+
+
+
+
+
+

+ Installation of Commonmark +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user commonmark
+

+ Assuming pytest-8.4.1 is installed and the other + optional dependency is not, the installation can be tested + with: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install hypothesis                        &&
+python3 /usr/bin/pytest commonmark/tests/unit_tests.py
+python3 commonmark/tests/run_spec_tests.py
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + cmark +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/commonmark + and + /usr/lib/python3.13/site-packages/commonmark-0.9.1.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ cmark +

+
+

+ processes Markdown according to the CommonMark + specification +

+
+
+
+
+
+

+ Editables-0.5 +

+
+
+
+
+

+ Introduction to Editables + Module +

+
+
+
+

+ Editables is python + library for creating “editable wheels.” +

+

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

+
+ Package Information +
+
+ +
+
+ Editables Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Editables +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user editables
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/editables + and + /usr/lib/python3.13/site-packages/editables-0.5.dist-info +
+
+
+
+
+
+

+ Hatchling-1.27.0 +

+
+
+
+
+

+ Introduction to Hatchling + Module +

+
+
+
+

+ Hatchling is an + extensible, standards compliant build backend for python + modules. +

+

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

+
+ Package Information +
+
+ +
+
+ Hatchling Dependencies +
+
+ Required +
+

+ editables-0.5, pathspec-0.12.1, + pluggy-1.6.0, and trove-classifiers-2025.8.6.13 +

+
+
+
+
+
+

+ Installation of Hatchling +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a working test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user hatchling
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + hatchling +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/hatchling + and + /usr/lib/python3.13/site-packages/hatchling-1.27.0.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ hatchling +

+
+

+ is a python module builder +

+
+
+
+
+
+

+ Hatch-Fancy-Pypi-Readme-25.1.0 +

+
+
+
+
+

+ Introduction to + Hatch-Fancy-Pypi-Readme Module +

+
+
+
+

+ Hatch-Fancy-Pypi-Readme is + a hatch plugin filling the readme field into the metadata + of a Python module from markup language documentation files + of the module. +

+

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

+
+ Package Information +
+
+ +
+
+ Hatch-Fancy-Pypi-Readme + Dependencies +
+
+ Required +
+

+ hatchling-1.27.0 +

+
+ Optional (for testing) +
+

+ build-1.3.0 and pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of + Hatch-Fancy-Pypi-Readme +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user hatch-fancy-pypi-readme
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/hatch_fancy_pypi_readme + and + /usr/lib/python3.13/site-packages/hatch_fancy_pypi_readme-25.1.0.dist-info +
+
+
+
+
+
+

+ Hatch_vcs-0.5.0 +

+
+
+
+
+

+ Introduction to Hatch-vcs + Module +

+
+
+
+

+ Hatch_vcs is a Hatch + plugin for versioning with several Version Control Systems + ( VCS ). +

+

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

+
+ Package Information +
+
+ +
+
+ Hatch_vcs Dependencies +
+
+ Required +
+

+ hatchling-1.27.0 and setuptools_scm-8.3.1 +

+
+ Optional (for testing) +
+

+ git-2.50.1 and pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Hatch_vcs +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user hatch_vcs
+

+ To test the installation, issue (HOME= prevents the .gitconfig file in the home directory + from interfering the tests): HOME= pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/hatch_vcs + and + /usr/lib/python3.13/site-packages/hatch_vcs-0.5.0.dist-info +
+
+
+
+
+
+

+ Idna-3.10 +

+
+
+
+
+

+ Introduction to Idna Module +

+
+
+
+

+ The Idna module provides + support for the Internationalized Domain Names in + Applications (IDNA) protocol as specified in RFC 5891. +

+

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

+
+ Package Information +
+
+ +
+
+ Idna Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Idna +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user idna
+

+ To test the installation, run pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/idna and + /usr/lib/python3.13/site-packages/idna-3.10.dist-info +
+
+
+
+
+
+

+ Imagesize-1.4.1 +

+
+
+
+
+

+ Introduction to Imagesize + Module +

+
+
+
+

+ The imagesize package + analyzes image file headers and returns the image size and + DPI. It works with JPEG/JPEG + 2000/PNG/GIF/TIFF/SVG/Netpbm/WebP formats. +

+

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

+
+ Package Information +
+
+ +
+
+ Imagesize Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 and requests-2.32.5 +

+
+
+
+
+
+

+ Installation of Imagesize +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user imagesize
+

+ The tests for this package are known to be broken. To test + the installation anyway, run pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/imagesize + and + /usr/lib/python3.13/site-packages/imagesize-1.4.1.dist-info +
+
+
+
+
+
+

+ Iniconfig-2.1.0 +

+
+
+
+
+

+ Introduction to Iniconfig + Module +

+
+
+
+

+ Iniconfig is a small and + simple INI-file parser module. +

+

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

+
+ Package Information +
+
+ +
+
+ Iniconfig Dependencies +
+
+ Required +
+

+ hatch_vcs-0.5.0 +

+
+
+
+
+
+

+ Installation of Iniconfig +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user iniconfig
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/iniconfig + and + /usr/lib/python3.13/site-packages/iniconfig-2.1.0.dist-info +
+
+
+
+
+
+

+ Markdown-3.8.2 +

+
+
+
+
+

+ Introduction to Markdown + Module +

+
+
+
+

+ Markdown is a Python + parser for John Gruber's Markdown specification. +

+

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

+
+ Package Information +
+
+ +
+
+ Markdown Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1, PyYAML-6.0.2, and + coverage +

+
+
+
+
+
+

+ Installation of Markdown +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user Markdown
+

+ Assuming pytest-8.4.1 and PyYAML-6.0.2 are + installed and the other optional dependency is not, the + installation can be tested with: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install coverage                          &&
+python3 /usr/bin/pytest --ignore=tests/test_syntax/extensions/test_md_in_html.py
+deactivate
+

+ Two tests in the tests/test_syntax/blocks/test_html_blocks.py + file are known to fail due to changes in Python-3.13.6 and + later's HTML Parser module. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + markdown_py +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/markdown + and + /usr/lib/python3.13/site-packages/Markdown-3.8.2.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ markdown_py +

+
+

+ converts markdown files to (x)html +

+
+
+
+
+
+

+ Meson_python-0.18.0 +

+
+
+
+
+

+ Introduction to Meson_python + Module +

+
+
+
+

+ The Meson_python module + contains a Python build backend (PEP 517) for Meson + projects. +

+

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

+
+ Package Information +
+
+ +
+
+ Meson_python Dependencies +
+
+ Required +
+

+ pyproject-metadata-0.9.1 +

+
+ Recommended (Runtime) +
+

+ patchelf-0.18.0 +

+
+ Optional (for testing) +
+

+ build-1.3.0, cython-3.1.3, git-2.50.1, + pytest-8.4.1, Python-3.13.7 (rebuilt + after installing SQLite-3.50.4), and pytest-mock +

+
+
+
+
+
+

+ Installation of Meson_python +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user meson_python
+

+ To test the installation, make sure git-2.50.1, patchelf-0.18.0, and pytest-8.4.1 are + installed, and Python-3.13.7 has been rebuilt after + installing SQLite-3.50.4, then issue (HOME= prevents the .gitconfig file in the home directory + from interfering the tests): +

+
python3 -m venv --system-site-packages testenv &&
+testenv/bin/pip3 install 'meson_python[test]'  &&
+HOME= testenv/bin/python -m pytest
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/meson_python + and + /usr/lib/python3.13/site-packages/meson_python-0.18.0.dist-info +
+
+
+
+
+
+

+ Msgpack-1.1.1 +

+
+
+
+
+

+ Introduction to Msgpack + Module +

+
+
+
+

+ Msgpack is an efficient + binary serialization format. It lets you exchange data + among multiple languages like JSON. But it's faster and + smaller. This package provides CPython bindings for reading + and writing Msgpack data. +

+

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

+
+ Package Information +
+
+ +
+
+ Msgpack Dependencies +
+
+ Required +
+

+ cython-3.1.3 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Msgpack +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user msgpack
+

+ To test the installation issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/msgpack-1.1.1.dist-info + and /usr/lib/python3.13/site-packages/msgpack +
+
+
+
+
+
+

+ Pathspec-0.12.1 +

+
+
+
+
+

+ Introduction to Pathspec + Module +

+
+
+
+

+ Pathspec is a utility + library for pattern matching of file paths. +

+

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

+
+ Package Information +
+
+ +
+
+ Pathspec Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Pathspec +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pathspec
+

+ To test the installation, issue pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pathspec + and + /usr/lib/python3.13/site-packages/pathspec-0.12.1.dist-info +
+
+
+
+
+
+

+ Pluggy-1.6.0 +

+
+
+
+
+

+ Introduction to Pluggy + Module +

+
+
+
+

+ The Pluggy package gives + users the ability to extend or modify the behaviour of a + host program by installing a plugin for that program. The + plugin code will run as part of normal program execution, + changing or enhancing certain aspects of it. In essence, + pluggy enables function + hooking so a user can build “pluggable” + systems. +

+

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

+
+ Package Information +
+
+ +
+
+ Pluggy Dependencies +
+
+ Recommended +
+ +
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Pluggy +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pluggy
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pluggy and + /usr/lib/python3.13/site-packages/pluggy-1.6.0.dist-info +
+
+
+
+
+
+

+ Pyproject_Hooks-1.2.0 +

+
+
+
+
+

+ Introduction to + Pyproject_Hooks Module +

+
+
+
+

+ Pyproject_Hooks is a + low-level library for calling build-backends in + pyproject.toml-based + projects. +

+

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

+
+ Package Information +
+
+ +
+
+ Pyproject_Hooks Dependencies +
+
+ Optional (for tests) +
+

+ pytest-8.4.1 and testpath +

+
+
+
+
+
+

+ Installation of + Pyproject_Hooks +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pyproject_hooks
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependency is not, the installation can be tested + with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install testpath                          &&
+python3 -m pytest
+deactivate
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pyproject_hooks + and + /usr/lib/python3.13/site-packages/pyproject_hooks-1.2.0.dist-info +
+
+
+
+
+
+

+ Pyproject-Metadata-0.9.1 +

+
+
+
+
+

+ Introduction to + Pyproject-Metadata Module +

+
+
+
+

+ The Pyproject-Metadata + module contains a data class for PEP 621 metadata with + support for “core + metadata” (PEP 643) generation. +

+

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

+
+ Package Information +
+
+ +
+
+ Pyproject-Metadata Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of + Pyproject-Metadata +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pyproject-metadata
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pyproject_metadata + and + /usr/lib/python3.13/site-packages/pyproject_metadata-0.9.1.dist-info +
+
+
+
+
+
+

+ Pytz-2025.2 +

+
+
+
+
+

+ Introduction to Pytz Module +

+
+
+
+

+ The Pytz library brings + the IANA tz database into Python. It allows accurate and + cross-platform timezone calculations. +

+

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

+
+ Package Information +
+
+ +
+
+ Pytz dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Pytz +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user pytz
+

+ To test the installation, run pytest. A few warnings + are issued. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/pytz and + /usr/lib/python3.13/site-packages/pytz-2025.2.dist-info +
+
+
+
+
+
+

+ Roman-numerals-py-3.1.0 +

+
+
+
+
+

+ Introduction to + Roman-numerals-py Module +

+
+
+
+

+ Roman-numerals-py is a + python library for manipulating well-formed Roman numerals. +

+

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

+
+ Package Information +
+
+ +
+
+ Roman-numerals-py Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of + Roman-numerals-py +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user roman-numerals-py
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/roman_numerals + and + /usr/lib/python3.13/site-packages/roman_numerals_py-3.1.0.dist-info +
+
+
+
+
+
+

+ Setuptools_scm-8.3.1 +

+
+
+
+
+

+ Introduction to + Setuptools_scm Module +

+
+
+
+

+ The Setuptools_scm package + is used to extract Python package versions from git or hg + metadata instead of declaring them. +

+

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

+
+ Package Information +
+
+ +
+
+ Setuptools_scm Dependencies +
+
+ Optional (for testing) +
+

+ build-1.3.0, git-2.50.1, mercurial-7.1, + pytest-8.4.1, and Sudo-1.9.17p2 +

+
+
+
+
+
+

+ Installation of + Setuptools_scm +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user setuptools_scm
+

+ To test the installation, make sure pytest-8.4.1 and the + other optional dependencies are installed and run + (HOME= prevents the + .gitconfig file in the home + directory from interfering the tests): +

+
TZ=UTC HOME= pytest
+

+ If git-2.50.1 and/or mercurial-7.1 are + not installed, the tests depending on the missing one(s) + will be skipped. Some tests may invoke Sudo-1.9.17p2 and + request a password. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/setuptools_scm + and + /usr/lib/python3.13/site-packages/setuptools_scm-8.3.1.dist-info +
+
+
+
+
+
+

+ Smartypants-2.0.2 +

+
+
+
+
+

+ Introduction to Smartypants + Module +

+
+
+
+

+ Smartypants translates + plain ASCII punctuation characters into “smart” + typographic punctuation HTML entities. +

+

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

+
+ Package Information +
+
+ +
+
+ Smartypants Dependencies +
+
+ Optional (for testing) +
+

+ docutils-0.21.2, Pygments-2.19.2, and pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of Smartypants +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a working test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user smartypants
+

+ To test the results, issue: +

+
cp /usr/bin/smartypants . &&
+pytest
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + smartypants +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/smartypants-2.0.2.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ smartypants +

+
+

+ translates ASCII punctuation to HTML punctuation. +

+
+
+
+
+
+

+ Snowballstemmer-3.0.1 +

+
+
+
+
+

+ Introduction to + Snowballstemmer Module +

+
+
+
+

+ The Snowballstemmer + package is a small string processing language for creating + stemming algorithms for use in Information Retrieval, plus + a collection of stemming algorithms implemented using it. + Stemming maps different forms of the same word to a common + “stem” — for example, the English + stemmer maps connection, connections, connective, connected, and connecting to connect. Running a search for + connected would also + find documents which only have the other forms. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of + Snowballstemmer +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user snowballstemmer
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/snowballstemmer + and + /usr/lib/python3.13/site-packages/snowballstemmer-3.0.1.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-applehelp-2.0.0 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-applehelp Module +

+
+
+
+

+ The Sphinxcontrib-applehelp package is a + Sphinx extension which + outputs Apple help books. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-applehelp + Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 and sphinx-8.2.3 (circular + dependency) +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-applehelp +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-applehelp
+

+ To test the installation, run pytest. Several warnings + may be issued, due to the use of deprecated functions. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_applehelp-2.0.0.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-devhelp-2.0.0 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-devhelp Module +

+
+
+
+

+ The Sphinxcontrib-devhelp + package is a Sphinx + extension which outputs Devhelp + documents. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-devhelp Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 and sphinx-8.2.3 (circular + dependency) +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-devhelp +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-devhelp
+

+ To test the installation, run pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_devhelp-2.0.0.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-htmlhelp-2.1.0 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-htmlhelp Module +

+
+
+
+

+ The Sphinxcontrib-htmlhelp + package is a Sphinx + extension which renders HTML help files. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-htmlhelp + Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1, sphinx-8.2.3 (circular + dependency), and html5lib-1.1 +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-htmlhelp +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-htmlhelp
+

+ If the optional dependencies are installed, the package can + be tested with: +

+
pytest
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_htmlhelp-2.1.0.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-jquery-4.1 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-jquery Module +

+
+
+
+

+ The Sphinxcontrib-jquery + package is a Sphinx + extension which includes jQuery on newer Sphinx releases. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-jquery Dependencies +
+
+ Required +
+

+ sphinx-8.2.3 +

+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-jquery +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-jquery
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_jquery-4.1.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-jsmath-1.0.1 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-jsmath Module +

+
+
+
+

+ The Sphinxcontrib-jsmath + package is a Sphinx + extension which renders display math in HTML via + JavaScript. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-jsmath Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 and sphinx-8.2.3 (circular + dependency) +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-jsmath +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-jsmath
+

+ The installation can be tested with the following commands: +

+
sed -i 's/text()/read_&/' tests/test_jsmath.py &&
+pytest
+

+ the sed ... + command is needed because of a change in Sphinx API for versions greater than + 5.0. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-qthelp-2.0.0 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-qthelp Module +

+
+
+
+

+ The Sphinxcontrib-qthelp + package is a Sphinx + extension which outputs QtHelp documents. +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-qthelp Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1, sphinx-8.2.3 (circular + dependency), and defusedxml +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-qthelp +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-qthelp
+

+ The installation can be tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+testenv/bin/pip3 install defusedxml            &&
+testenv/bin/python -m pytest
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_qthelp-2.0.0.dist-info +
+
+
+
+
+
+

+ Sphinxcontrib-serializinghtml-2.0.0 +

+
+
+
+
+

+ Introduction to + Sphinxcontrib-serializinghtml Module +

+
+
+
+

+ The Sphinxcontrib-serializinghtml package + is a Sphinx extension + which outputs “serialized” HTML files (json and + pickle). +

+

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

+
+ Package Information +
+
+ +
+
+ Sphinxcontrib-serializinghtml + Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 and sphinx-8.2.3 (circular + dependency) +

+
+
+
+
+
+

+ Installation of + Sphinxcontrib-serializinghtml +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user sphinxcontrib-serializinghtml
+

+ To test the installation, first install sphinx-8.2.3, then + run pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/sphinxcontrib + and + /usr/lib/python3.13/site-packages/sphinxcontrib_serializinghtml-2.0.0.dist-info +
+
+
+
+
+
+

+ Trove-Classifiers-2025.8.6.13 +

+
+
+
+
+

+ Introduction to + Trove-Classifiers Module +

+
+
+
+

+ Trove-Classifiers is a + Python library to encompass all valid PyPI classifiers used + to categorize projects and releases per PEP 301, for + example Topic :: System :: + Filesystems and Development + Status :: 6 - Mature. +

+

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

+
+ Package Information +
+
+ +
+
+ Trove-Classifiers Dependencies +
+
+ Optional (for testing) +
+

+ pytest-8.4.1 +

+
+
+
+
+
+

+ Installation of + Trove-Classifiers +

+
+
+
+

+ First, hard code the package version into setup.py to work around an issue causing + the generated wheel to contain an incorrect version string + when the calver module is + not installed: +

+
sed -i '/calver/s/^/#/;$iversion="2025.8.6.13"' setup.py
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user trove-classifiers
+

+ To test the installation, issue: pytest. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/trove_classifiers + and + /usr/lib/python3.13/site-packages/trove_classifiers-2025.8.6.13.dist-info +
+
+
+
+
+
+

+ Typogrify-2.1.0 +

+
+
+
+
+

+ Introduction to Typogrify + Module +

+
+
+
+

+ Typogrify provides filters + to enhance web typography, including support for Django and + Jinja templates. +

+

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

+
+ Package Information +
+
+ +
+
+ Typogrify Dependencies +
+
+ Required +
+

+ hatchling-1.27.0 and smartypants-2.0.2 +

+
+
+
+
+
+

+ Installation of Typogrify +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user typogrify
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/typogrify + and + /usr/lib/python3.13/site-packages/typogrify-2.1.0.dist-info +
+
+
+
+
+
+

+ Urllib3-2.5.0 +

+
+
+
+
+

+ Introduction to Urllib3 + Module +

+
+
+
+

+ The Urllib3 module is a + powerful, user-friendly HTTP client for Python. It brings + many critical features that are missing from the Python + standard libraries. +

+

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

+
+ Package Information +
+
+ +
+
+ Urllib3 Dependencies +
+
+ Required +
+

+ hatch_vcs-0.5.0 +

+
+ Optional (for tests) +
+

+ pytest-8.4.1, httpx, hypercorn, + mock, PySocks, + pytest-timeout, + python-dateutil, + quart, quart-trio, + tornado, trio, and + trustme +

+
+
+
+
+
+

+ Installation of Urllib3 +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user urllib3
+

+ Assuming pytest-8.4.1 is installed, but the other + optional dependencies are not, the installation can be + tested with the following commands: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install trustme         \
+             tornado         \
+             python-dateutil \
+             mock            \
+             pysocks         \
+             pytest-timeout  \
+             trio            \
+             hypercorn       \
+             quart           \
+             quart_trio      \
+             httpx           &&
+python3 /usr/bin/pytest
+deactivate
+

+ As many as 34 failures are known to occur due to slight + behavior changes in the external Python modules above, when + combined with Python 3.13.7. +

+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/urllib3 and + /usr/lib/python3.13/site-packages/urllib3-2.5.0.dist-info +
+
+
+
+
+
+

+ webencodings-0.5.1 +

+
+
+
+
+

+ Introduction to Webencodings + Module +

+
+
+
+

+ The webencodings module is + a Python implementation of the WHATWG Encoding + standard. +

+

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

+
+ Package Information +
+
+ +
+
+
+
+
+
+

+ Installation of webencodings +

+
+
+
+

+ Build the module: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ Now, as the root user: +

+
pip3 install --no-index --find-links dist --no-user webencodings
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -w dist: builds the + appropriate "wheel" for this module in the directory + dist. +

+

+ --no-build-isolation: tells + pip3 to run the build in the system environment instead of + creating a temporary build environment. +

+

+ --no-deps: prevents + pip3 from building wheels for the project's dependencies. +

+

+ --no-index: ignores + the package index (only looking at --find-links URLs + instead). +

+

+ --find-links dist: + looks for links to archives such as wheel (.whl) files in + the directory dist. +

+

+ --no-cache-dir: + Disables the cache to prevent a warning when installing as + the root user. +

+

+ --no-user: Prevent + mistakenly running the install command as a non-root user. +

+

+ --upgrade: Upgrade the package + to the newest available version. This option is used with + the install command if a version of the package is already + installed. +

+

+ --force-reinstall: Reinstall + the package even if it is up-to-date. This option is used + with the install command if reinstalling the package or + reverting to an earlier version of the package. +

+

+ --no-deps: Do not install + package dependencies. This option may be needed with the + --upgrade or --force-reinstall options. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed + Directories: /usr/lib/python3.13/site-packages/webencodings + and + /usr/lib/python3.13/site-packages/webencodings-0.5.1.dist-info +
+
+
+
+
+
+
+
+
+

+ Ruby-3.4.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.5.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 7c46a4fbece1073bbef0d7d61bc030cc +

    +
  • +
  • +

    + Download size: 16 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.5 GB (with C API docs + and tests) +

    +
  • +
  • +

    + Estimated build time: 1.6 SBU (with C API docs; add 0.2 + SBU for tests; all with using parallelism=4) +

    +
  • +
+
+

+ Ruby + Dependencies +

+
+ Required +
+

+ libyaml-0.2.5 +

+
+ Optional +
+

+ Doxygen-1.14.0, Graphviz-13.1.2, + rustc-1.89.0, Tk-8.6.16, Valgrind-3.25.1, + + Berkeley DB (deprecated) and DTrace +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of Ruby +

+
+

+ Note +

+

+ If you have installed a package that provides a ruby gem, + such as asciidoctor-2.0.23, you must + reinstall those packages when upgrading to a new minor + version of Ruby. +

+
+

+ Install Ruby by running the + following command: +

+
./configure --prefix=/usr         \
+            --disable-rpath       \
+            --enable-shared       \
+            --without-valgrind    \
+            --without-baseruby    \
+            ac_cv_func_qsort_r=no \
+            --docdir=/usr/share/doc/ruby-3.4.5 &&
+make
+

+ Optionally, build the CAPI documents by running the following + commands: +

+
make capi
+

+ To test the results, issue: make -k check. If the + environment has variables related to proxy settings + (all_proxy, ALL_PROXY, http_proxy, and etc.) set, the test suite will + bail out early with messages like net/ftp is not found. Make sure that + you unset these variables for the test suite. +

+

+ Now, as the root user: +

+
make install
+
+

+ Note +

+

+ If you have Ruby-On-Rails applications installed and did an + upgrade of Ruby by + installing this package, you might need to run an update + there, too (as the root + user): +

+
cd /path/to/web/app
+bundle update rake
+

+ and restart the webserver which serves the application. +

+
+
+
+

+ Command Explanations +

+

+ --disable-rpath: This + switch disables embedding /usr/lib as a library search path into the + ruby program. + Doing so is not needed (because /usr/lib is a system library path) and it + may cause the test suite running with the system libruby.so instead of the just built one + when Ruby has been installed. +

+

+ --enable-shared: This + switch enables building the libruby shared library. +

+

+ --without-baseruby: + This switch prevents using the system ruby if it is already + installed. The build system will use the newly built version + instead. +

+

+ ac_cv_func_qsort_r=no: This + switch prevents using the qsort_r function from Glibc. Ruby makes + some aggressive optimization assuming some implementation + details of the sorting algorithm, but the assumption is not + true with the Glibc implementation. With this switch Ruby + will use its own sort implementation instead. +

+

+ --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, rdbg, rdoc, ri, ruby, and + typeprof +
+
+ Installed Libraries: + libruby.so +
+
+ Installed Directories: + /usr/include/ruby-3.4.0, + /usr/lib/ruby, /usr/share/doc/ruby-3.4.5 and + /usr/share/ri +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ bundle +

+
+

+ creates bundles of Ruby Gems +

+
+

+ bundler +

+
+

+ manages an application's dependencies throughout + it's lifecycle +

+
+

+ erb +

+
+

+ is a command line front-end for eRuby, which + provides a templating system for Ruby +

+
+

+ gem +

+
+

+ is the command for RubyGems, which is a + sophisticated package manager for Ruby. This is similar to + Python's 'pip' command +

+
+

+ irb +

+
+

+ is the interactive interface for Ruby +

+
+

+ rake +

+
+

+ is a make-like build utility for Ruby +

+
+

+ rdbg +

+
+

+ is an interactive debugger for Ruby +

+
+

+ rdoc +

+
+

+ generates Ruby + documentation +

+
+

+ ri +

+
+

+ displays documentation from a database on + Ruby classes, + modules, and methods +

+
+

+ ruby +

+
+

+ is an interpreted scripting language for quick and + easy object-oriented programming +

+
+

+ libruby.so +

+
+

+ contains the API functions required by Ruby +

+
+
+
+
+
+
+
+

+ Rustc-1.89.0 +

+
+
+
+
+
+

+ Introduction to Rust +

+

+ The Rust programming + language is designed to be a safe, concurrent, practical + language. +

+

+ As with many other programming languages, rustc (the rust + compiler) needs a binary from which to bootstrap. It will + download a stage0 binary at the start of the build, so you + cannot compile it without an Internet connection. +

+
+

+ Note +

+

+ Although BLFS usually installs in /usr, when you later upgrade to a newer + version of rust the old + libraries in /usr/lib/rustlib + will remain, with various hashes in their names, but will + not be usable and will waste space. The editors recommend + placing the files in the /opt + directory. In particular, if you have reason to rebuild + with a modified configuration (e.g. using the shipped LLVM + after building with shared LLVM, perhaps to compile crates + for architectures which the BLFS LLVM build does not + support) it is possible for the install to leave a broken + cargo + program. In such a situation, either remove the existing + installation first, or use a different prefix such as + /opt/rustc-1.89.0-build2. +

+

+ If you prefer, you can of course change the prefix to + /usr. +

+
+

+ The current rustbuild + build-system will use all processors, although it does not + scale well and often falls back to just using one core while + waiting for a library to compile. However it can be mostly + limited to a specified number of processors by a combination + of adding the switch --jobs + <N> (e.g. '--jobs 4' to limit to 4 processors) + on each invocation of ./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 2 GB DRAM per core) that might be an alternative to + taking CPUs offline. Read the + section called “Use Linux Control Group to Limit the Resource + Usage” for how to use a cgroup. +

+

+ At the moment Rust does not + provide any guarantees of a stable ABI. +

+
+

+ Note +

+

+ Rustc defaults to building for ALL supported architectures, + using a shipped copy of LLVM. In BLFS the build is only for + the X86 architecture. If you intend to develop rust crates, + this build may not be good enough for your purposes. +

+

+ The build times of this version when repeated on the same + machine are often reasonably consistent, but as with all + compilations using rustc there can be some + very slow outliers. +

+
+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://static.rust-lang.org/dist/rustc-1.89.0-src.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 982f087479302e6d91432efc81852b00 +

    +
  • +
  • +

    + Download size: 256 MB +

    +
  • +
  • +

    + Estimated disk space required: 9.4 GB (252 MB + installed); add 7.4 GB if running the tests +

    +
  • +
  • +

    + Estimated build time: 9.0 SBU (including download time; + add 15 SBU for tests, both using parallelism=8) +

    +
  • +
+
+

+ Rust + Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and cURL-8.15.0 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+ Recommended +
+ +
+

+ Note +

+

+ If a recommended dependency is not installed, a shipped + copy in the Rustc source tarball will be built and used. +

+
+
+ Optional +
+

+ GDB-16.3 + (used by the test suite if it is present), git-2.50.1 (required by + the test suite), + cranelift, jemalloc, libgccjit (read command + explanation in GCC-15.2.0), and libgit2 +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/rust +

+
+
+

+ Installation of Rust +

+

+ To install into the /opt + directory, remove any existing /opt/rustc symlink and create a new + directory (i.e. with a different name if trying a modified + build of the same version). As the root user: +

+
mkdir -pv /opt/rustc-1.89.0      &&
+ln -svfn rustc-1.89.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 bootstrap.toml file which will configure + the build. +

+
cat << EOF > bootstrap.toml
+# See bootstrap.toml.example for more possible options,
+# and see src/bootstrap/defaults/bootstrap.dist.toml for a few options
+# automatically set when building from a release tarball
+# (unfortunately, we have to override many of them).
+
+# Tell x.py the editors have reviewed the content of this file
+# and updated it to follow the major changes of the building system,
+# so x.py will not warn us to do such a review.
+change-id = 142379
+
+[llvm]
+# When using system llvm prefer shared libraries
+link-shared = true
+
+# If building the shipped LLVM source, only enable the x86 target
+# instead of all the targets supported by LLVM.
+targets = "X86"
+
+[build]
+description = "for BLFS 12.4"
+
+# Omit docs to save time and space (default is to build them).
+docs = false
+
+# Do not query new versions of dependencies online.
+locked-deps = true
+
+# Specify which extended tools (those from the default install).
+tools = ["cargo", "clippy", "rustdoc", "rustfmt"]
+
+[install]
+prefix = "/opt/rustc-1.89.0"
+docdir = "share/doc/rustc-1.89.0"
+
+[rust]
+channel = "stable"
+
+# Enable the same optimizations as the official upstream build.
+lto = "thin"
+codegen-units = 1
+
+# Don't build lld which does not belong to this package and seems not
+# so useful for BLFS.  Even if it turns out to be really useful we'd build
+# it as a part of the LLVM package instead.
+lld = false
+
+# Don't build llvm-bitcode-linker which is only useful for the NVPTX
+# backend that we don't enable.
+llvm-bitcode-linker = false
+
+[target.x86_64-unknown-linux-gnu]
+llvm-config = "/usr/bin/llvm-config"
+
+[target.i686-unknown-linux-gnu]
+llvm-config = "/usr/bin/llvm-config"
+EOF
+

+ Compile Rust by running the + following commands: +

+
[ ! -e /usr/include/libssh2.h ] || export LIBSSH2_SYS_USE_PKG_CONFIG=1
+[ ! -e /usr/include/sqlite3.h ] || export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
+./x.py build
+
+

+ Note +

+

+ The test suite will generate some messages in the + system log for traps on invalid + opcodes, and for segmentation faults. In themselves these + are nothing to worry about, just a way for the test to be + terminated. +

+
+

+ To run the tests (again using all available CPUs) issue: +

+
./x.py test --verbose --no-fail-fast | tee rustc-testlog
+

+ Eight tests in the ui test suite are known to fail with + description set in the + build section of the + bootstrap.toml file. Four tests + in the bootstrap test suite are known to fail because they + expect to run in the Rust Git repository. The test named + tests/run-make/musl-default-linking is + known to fail because we've not enabled the AArch64 target in + LLVM-20.1.8. The test named tests/run-make/linker-warning is known to + fail due to some reason unknown yet. +

+

+ As with all large test suites, some tests might fail on some + machines - if the number of additional failures is low, check + the log for 'failures:' and review lines above that, + particularly the 'stderr:' lines. Any mention of SIGSEGV or + signal 11 in a failing test is a cause for concern. +

+
+

+ Note +

+

+ If you've stripped /usr/lib/libc.a with strip --strip-unneeded, + all statically-linked Rust programs will crash with SIGSEGV + on start-up, causing several tests (for example + tests/ui/process/nofile-limit.rs) + to fail with SIGSEGV. +

+

+ We are still investigating the root cause of this issue, + but for now we've replaced --strip-unneeded with + --strip-debug in + both the LFS book and the section called + “Stripping One More Time” to work around the problem. + If you hit this issue, rebuild Glibc and replace the + /usr/lib/libc.a file with the + unstripped libc.a from the + fresh build. +

+
+

+ If you get any other + failing test which reports an issue number then you should + search for that issue. For example, when rustc >= 1.41.1 + was built with a version of sysllvm before 10.0 the test for + issue 69225 failed https://github.com/rust-lang/rust/issues/69225 + and that should be regarded as a critical failure (they + released 1.41.1 because of it). Most other failures will not + be critical. +

+

+ Therefore, you should determine the number of failures. The + number of tests which passed and failed can be found by + running: +

+
grep '^test result:' rustc-testlog |
+ awk '{sum1 += $4; sum2 += $6} END { print sum1 " passed; " sum2 " failed" }'
+

+ The other available fields are $8 for those which were + ignored (i.e. skipped), $10 for 'measured' and $12 for + 'filtered out' but both those last two are probably zero. +

+

+ Now, as the root user, + install the package: +

+
+

+ Note +

+

+ If sudo or + su is invoked + for switching to the root + user, ensure LIBSSH2_SYS_USE_PKG_CONFIG and LIBSQLITE3_SYS_USE_PKG_CONFIG are correctly + passed or the following command may rebuild cargo with shipped copies + of libssh2 and sqlite. For sudo, use the + --preserve-env=LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG + option. For su, do not use the - or --login + options. +

+
+
./x.py install
+

+ Still as the root user, fix + the installation of documentation, symlink a Zsh completion file into the correct + location, and move a Bash + completion file into the location recommended by the + Bash completion maintainers: +

+
rm -fv /opt/rustc-1.89.0/share/doc/rustc-1.89.0/*.old   &&
+install -vm644 README.md                                \
+               /opt/rustc-1.89.0/share/doc/rustc-1.89.0 &&
+
+install -vdm755 /usr/share/zsh/site-functions      &&
+ln -sfv /opt/rustc/share/zsh/site-functions/_cargo \
+        /usr/share/zsh/site-functions
+
+mv -v /etc/bash_completion.d/cargo /usr/share/bash-completion/completions
+

+ Finally, unset the exported environment variables: +

+
unset LIB{SSH2,SQLITE3}_SYS_USE_PKG_CONFIG
+
+
+

+ Command Explanations +

+

+ ln -svfn rustc-1.89.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. +

+

+ tools = ["cargo", "clippy", "rustdoc", + "rustfmt"]: only build the tools from the 'default' + profile in binary command rustup which are + recommended for most users. The other tools are unlikely to + be useful unless using (old) code analyzers or editing the + standard library. +

+

+ channel = "stable": this ensures + only stable features can be used, the default in bootstrap.toml is to use development + features, which is not appropriate for a released version. +

+

+ [target.x86_64-unknown-linux-gnu]: the + syntax of bootstrap.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 should be omitted + if you wish to build against the shipped llvm, but the + resulting build will be larger and take longer. +

+

+ export + LIBSSH2_SYS_USE_PKG_CONFIG=1: Allow + cargo to link + to system libssh2. +

+

+ export + LIBSQLITE3_SYS_USE_PKG_CONFIG=1: Allow + cargo to link + to system sqlite. +

+

+ --verbose: this + switch can sometimes provide more information about a test + which fails. +

+

+ --no-fail-fast: this + switch ensures that the test suite will not stop at the first + error. +

+
+
+

+ Configuring Rust +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ If you installed rustc in + /opt, you need to update the + following configuration files so that rustc is correctly found by other + packages and system processes. +

+

+ As the root user, create + the /etc/profile.d/rustc.sh + file: +

+
cat > /etc/profile.d/rustc.sh << "EOF"
+# Begin /etc/profile.d/rustc.sh
+
+pathprepend /opt/rustc/bin           PATH
+
+# End /etc/profile.d/rustc.sh
+EOF
+

+ Immediately after installation, update the current PATH for + your current shell as a normal user: +

+
source /etc/profile.d/rustc.sh
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cargo-clippy, cargo-fmt, cargo, + clippy-driver, rust-gdb, rust-gdbgui, rust-lldb, rustc, + rustdoc, and rustfmt +
+
+ Installed Libraries: + librustc-driver-<16-byte-hash>.so, + libstd-<16-byte-hash>.so, and + libtest-<16-byte-hash>.so +
+
+ Installed Directories: + ~/.cargo, /opt/rustc, symbolic link + to /opt/rustc-1.89.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ cargo-clippy +

+
+

+ provides lint checks for a cargo package +

+
+

+ cargo-fmt +

+
+

+ formats all bin and lib files of the current crate + using rustfmt +

+
+

+ cargo +

+
+

+ is the Package Manager for Rust +

+
+

+ clippy-driver +

+
+

+ provides lint checks for Rust +

+
+

+ rust-gdb +

+
+

+ is a wrapper script for gdb, pulling in Python + pretty-printing modules installed in /opt/rustc-1.89.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 +

+
+
+
+
+
+
+
+

+ rust-bindgen-0.72.0 +

+
+
+
+
+
+

+ Introduction to rust-bindgen +

+

+ The rust-bindgen package + contains a utility that generates Rust bindings from C/C++ + headers. +

+

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

+

+ Package Information +

+
+ +
+

+ rust-bindgen Dependencies +

+
+ Required +
+

+ rustc-1.89.0 and LLVM-20.1.8 (with Clang, + runtime) +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+
+

+ Installation of rust-bindgen +

+

+ Install rust-bindgen by + running the following commands: +

+
cargo build --release
+

+ To test the results, issue: cargo test --release. +

+

+ Now, as the root user: +

+
install -v -m755 target/release/bindgen /usr/bin
+

+ Still as the root user, + install the Bash and Zsh completion support files: +

+
bindgen --generate-shell-completions bash \
+    > /usr/share/bash-completion/completions/bindgen
+bindgen --generate-shell-completions zsh  \
+    > /usr/share/zsh/site-functions/_bindgen
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + bindgen +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ bindgen +

+
+

+ generates bindings for Rust from C/C++ headers +

+
+
+
+
+
+
+
+

+ SCons-4.9.1 +

+
+
+
+
+
+

+ Introduction to SCons +

+

+ SCons is a tool for building + software (and other files) implemented in Python. +

+
+

+ Note +

+

+ When expanding the tarball the package expands to + scons-4.9.1, not the expected SCons-4.9.1. +

+
+

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

+

+ Package Information +

+
+ +
+
+
+

+ Installation of SCons +

+

+ Build the package: +

+
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+

+ As the root user, install the + package: +

+
pip3 install --no-index --find-links dist --no-user SCons &&
+install -v -m664 *.1 /usr/share/man/man1
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + scons, scons-configure-cache, and + sconsign +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/lib/python3.13/site-packages/SCons{,-4.9.1.dist-info} +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ slang-2.3.3 +

+
+
+
+
+
+

+ Introduction to slang +

+

+ S-Lang (slang) is an + interpreted language that may be embedded into an application + to make the application extensible. It provides facilities + required by interactive applications such as display/screen + management, keyboard input and keymaps. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.jedsoft.org/releases/slang/slang-2.3.3.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 69015c8300088373eb65ffcc6ed4db8c +

    +
  • +
  • +

    + Download size: 1.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 22 MB (add 15 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (add 0.5 SBU for tests) +

    +
  • +
+
+

+ Slang Dependencies +

+
+ Optional +
+

+ libpng-1.6.50 and Oniguruma +

+
+
+

+ 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 RPATH=
+

+ To test the results, issue: LC_ALL=C make check. +

+

+ Now, as the root user: +

+
make install_doc_dir=/usr/share/doc/slang-2.3.3   \
+     SLSH_DOC_DIR=/usr/share/doc/slang-2.3.3/slsh \
+     RPATH= install
+
+
+

+ Command Explanations +

+

+ --with-readline=gnu: + This parameter sets GNU Readline to be used by the parser + interface instead of the slang internal version. +

+

+ RPATH=: This + overridden make + variable prevents hard coding library search paths (rpath) + into the binary executable files and shared libraries. This + package does not need rpath for an installation into the + standard location, and rpath may sometimes cause unwanted + effects or even security issues. +

+

+ install_doc_dir=/usr/share/doc/slang-2.3.3 + SLSH_DOC_DIR=/usr/share/doc/slang-2.3.3/slsh: + These overridden make variables ensure + installing this package with a versioned documentation + installation directory. +

+
+
+

+ Configuring slang +

+
+
+
+
+

+ Config + Files +

+
+
+
+

+ ~/.slshrc and /etc/slsh.rc +

+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + slsh +
+
+ Installed Libraries: + libslang.so and numerous support + modules +
+
+ Installed Directories: + /usr/lib/slang, + /usr/share/doc/slang-2.3.3 and /usr/share/slsh +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ slsh +

+
+

+ is a simple program for interpreting slang scripts. It supports + dynamic loading of slang modules and includes a + Readline interface + for interactive use +

+
+
+
+
+
+
+
+

+ Subversion-1.14.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://archive.apache.org/dist/subversion/subversion-1.14.5.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: af6001dc7af2f1242a4f72e8a5c565d2 +

    +
  • +
  • +

    + Download size: 8.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 260 MB (add 189 MB for + bindings, 54 MB for docs, 1.3 GB for tests) +

    +
  • +
  • +

    + Estimated build time: 1.5 SBU (Using parallelism=4; add + 2.0 SBU for bindings, 30 SBU for tests) +

    +
  • +
+
+

+ Subversion Dependencies +

+
+ Required +
+

+ Apr-Util-1.6.3 and SQLite-3.50.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ Apache-2.4.65, Boost-1.89.0, Cyrus + SASL-2.1.28, dbus-1.16.2, Doxygen-1.14.0 (for + generating HTML documentation), gnome-keyring-48.0, libsecret-0.21.7, Py3c-1.4 (for the python + bindings, and tests), Python-3.13.7 (with sqlite support for + the tests), Ruby-3.4.5, SWIG-4.3.1, and UTF8proc +

+
+ Optional (for the Java Bindings) +
+

+ One of OpenJDK-24.0.2, Dante or Jikes, JUnit 4 (to test + the Java bindings) and apache-ant-1.10.15. +

+
+
+

+ Installation of Subversion +

+

+ Install Subversion by + running the following commands: +

+
./configure --prefix=/usr            \
+            --disable-static         \
+            --with-apache-libexecdir \
+            --with-utf8proc=internal &&
+make
+

+ If you have Doxygen-1.14.0 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.15 and must be + downloaded separately. To build the Java bindings, issue the + following command: +

+
make -j1 javahl
+

+ If you are going to compile the Ruby bindings, set the C standard to + prevent the build from failing: +

+
sed -i 's/Wno-int-to-pointer-cast/std=gnu17/' Makefile
+

+ 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.13/site-packages/libsvn \
+     swig_pydir_extra=/usr/lib/python3.13/site-packages/svn # for Python
+make swig-rb # for Ruby
+

+ To test the results, issue: make check. +

+

+ 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.5 &&
+cp      -v -R doc/* /usr/share/doc/subversion-1.14.5
+

+ 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.13/site-packages/libsvn \
+      swig_pydir_extra=/usr/lib/python3.13/site-packages/svn
+make install-swig-rb
+

+ The java bindings need to be installed in order for the tests + to run, since the tests attempt to look for them in + CLASSPATH. To test the results of the Java bindings build, + issue LANG=C make + check-javahl. +

+
+
+

+ Command Explanations +

+

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

+

+ --with-apache-libexecdir: If + Apache-2.4.65 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-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 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.42/{,auto/}SVN, + /usr/lib/python3.13/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.5 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Running a Subversion + Server +

+
+
+
+
+
+

+ Running a Subversion Server +

+

+ This section will describe how to set up, administer and + secure a Subversion server. +

+

+ Subversion Server Dependencies +

+
+ Required +
+

+ Subversion-1.14.5 and OpenSSH-10.0p1 +

+
+
+

+ Setting up a Subversion Server. +

+

+ The following instructions will install a Subversion server, which will be set up + to use OpenSSH as the secure + remote access method, with svnserve available for + anonymous access. +

+

+ Configuration of the Subversion server consists of the + following steps: +

+
+
+
+
+

+ 1. Set Uup Users, Groups, + and Permissions +

+
+
+
+

+ You'll need to be user root + for the initial portion of configuration. Create the + svn user and group with the + following commands: +

+
groupadd -g 56 svn &&
+useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn
+

+ If you plan to have multiple repositories, you should have + a group dedicated to each repository for ease of + administration. Create the svntest group for the test repository + and add the svn user to + that group with the following commands: +

+
groupadd -g 57 svntest &&
+usermod -G svntest -a svn
+

+ Additionally you should set umask 002 while working + with a repository so that all new files will be writable by + owner and group. This is made mandatory by creating a + wrapper script for svn and svnserve: +

+
mv /usr/bin/svn /usr/bin/svn.orig &&
+mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
+cat >> /usr/bin/svn << "EOF"
+#!/bin/sh
+umask 002
+/usr/bin/svn.orig "$@"
+EOF
+cat >> /usr/bin/svnserve << "EOF"
+#!/bin/sh
+umask 002
+/usr/bin/svnserve.orig "$@"
+EOF
+chmod 0755 /usr/bin/svn{,serve}
+
+

+ Note +

+

+ If you use Apache for + working with the repository over HTTP, even for anonymous + access, you should wrap /usr/sbin/httpd in a + similar script. +

+
+
+
+
+
+
+

+ 2. Create a Subversion + repository. +

+
+
+
+

+ There are several ways to set up a subversion repository. + It is recommended to have a look at the + SVN Book corresponding chapter. A basic repository can + be set up with the instructions below. +

+

+ Create a new Subversion + repository with the following commands (as the root user): +

+
install -v -m 0755 -d /srv/svn &&
+install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
+svnadmin create /srv/svn/repositories/svntest
+

+ Now that the repository is created, it should be populated + with something useful. You'll need to have a predefined + directory layout set up exactly as you want your repository + to look. For example, here is a sample BLFS layout setup + with a root of svntest/. + You'll need to set up a directory tree similar to the + following: +

+
svntest/            # The name of the repository
+   trunk/           # Contains the existing source tree
+      BOOK/
+      bootscripts/
+      edguide/
+      patches/
+      scripts/
+   branches/        # Needed for additional branches
+   tags/            # Needed for tagging release points
+

+ Once you've created your directory layout as shown above, + you are ready to do the initial import: +

+
svn import -m "Initial import." \
+    </path/to/source/tree>      \
+    file:///srv/svn/repositories/svntest
+

+ Now change owner and group information on the repository, + and add an unprivileged user to the svn and svntest groups: +

+
chown -R svn:svntest /srv/svn/repositories/svntest    &&
+chmod -R g+w         /srv/svn/repositories/svntest    &&
+chmod g+s            /srv/svn/repositories/svntest/db &&
+usermod -G svn,svntest -a <username>
+

+ svntest is the group + assigned to the svntest repository. As mentioned earlier, + this eases administration of multiple repositories when + using OpenSSH for + authentication. Going forward, you'll need to add your + unprivileged user, and any additional users that you wish + to have write access to the repository, to the svn and svntest groups. +

+

+ In addition, you'll notice that the new repository's + db directory is set-groupID. + If the reasoning is not immediately obvious, when using any + external authentication method (such as ssh), the sticky bit is + set so that all new files will be owned by the user, but + group of svntest. Anyone in + the svntest group can + create files, but still give the entire group write access + to those files. This avoids locking out other users from + the repository. +

+

+ Now, return to an unprivileged user account, and take a + look at the new repository using svnlook: +

+
svnlook tree /srv/svn/repositories/svntest/
+
+

+ Note +

+

+ You may need to log out and back in again to refresh your + group memberships. su + <username> + should work as well. +

+
+
+
+
+
+
+

+ 3. Configure the Server +

+
+
+
+

+ As mentioned previously, these instructions will configure + the server to use only ssh for write access to + the repository and to provide anonymous access using + svnserve. + There are several other ways to provide access to the + repository. These additional configurations are best + explained at https://svnbook.red-bean.com/. +

+

+ Access configuration needs to be done for each repository. + Create the svnserve.conf file + for the svntest repository using the following commands: +

+
cp /srv/svn/repositories/svntest/conf/svnserve.conf \
+   /srv/svn/repositories/svntest/conf/svnserve.conf.default &&
+
+cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
+[general]
+anon-access = read
+auth-access = write
+EOF
+

+ There is not a lot to the configuration file at all. You'll + notice that only the general section is required. Take a + look at the svnserve.conf.default file for + information on using svnserve's built-in + authentication method. +

+
+
+
+
+
+

+ 4. + Starting the Server +

+
+
+
+

+ To start the server at boot time, install the svn + bootscript included in the blfs-bootscripts-20250225 package: +

+
make install-svn
+
+
+
+
+
+
+

+ SWIG-4.3.1 +

+
+
+
+
+
+

+ Introduction to SWIG +

+

+ SWIG (Simplified Wrapper and + Interface Generator) is a compiler that integrates + C and C++ with languages including + Perl, Python, Tcl, Ruby, PHP, Java, JavaScript, C#, D, + Go, Lua, Octave, R, Racket, Scilab, 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.sourceforge.net/swig/swig-4.3.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 4929864e1b040a51370160d17669d6f1 +

    +
  • +
  • +

    + Download size: 8.2 MB +

    +
  • +
  • +

    + Estimated disk space required: 90 MB (2.2 GB with + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (add 8.4 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ SWIG + Dependencies +

+
+ Required +
+

+ pcre2-10.45 +

+
+ Optional +
+

+ Boost-1.89.0 for tests, and any of the + languages mentioned in the introduction, as run-time + dependencies +

+
+
+

+ Installation of SWIG +

+

+ Install SWIG by running the + following commands: +

+
./configure --prefix=/usr                      \
+            --without-javascript               \
+            --without-maximum-compile-warnings &&
+make
+

+ To test the results, issue: make JSCXX=g++ TCL_INCLUDE= -k + check. 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 &&
+cp -v -R Doc -T /usr/share/doc/swig-4.3.1
+
+
+

+ Command Explanations +

+

+ --without-maximum-compile-warnings: + disables compiler ansi conformance enforcement, which + triggers errors in the Lua + headers (starting with Lua 5.3). +

+

+ --without-<language>: + allows disabling the building of tests and examples for + <language>, but all the languages capabilities of + SWIG are always built. This + switch is used for JavaScript because the SWIG + implementation is incomplete and a lot of tests fail due to + API changes in Node-20. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + swig and ccache-swig +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/doc/swig-4.3.1 and + /usr/share/swig +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ swig +

+
+

+ takes an interface file containing C/C++ + declarations and SWIG special instructions, and + generates the corresponding wrapper code needed to + build extension modules +

+
+

+ ccache-swig +

+
+

+ is a compiler cache, which speeds up re-compilation + of C/C++/SWIG code +

+
+
+
+
+
+
+
+

+ Tk-8.6.16 +

+
+
+
+
+
+

+ Introduction to Tk +

+

+ The Tk package contains a + TCL GUI Toolkit. +

+

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

+

+ Package Information +

+
+ +
+

+ Tk + Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+
+

+ 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 +

+

+ --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 +

+
+
+
+
+
+
+
+

+ unifdef-2.12 +

+
+
+
+
+
+

+ Introduction to unifdef +

+

+ The unifdef package contains + a utility that is useful for removing preprocessor + conditionals from code. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://dotat.at/prog/unifdef/unifdef-2.12.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: b225312c110cd2600ca7166bd0419751 +

    +
  • +
  • +

    + Download size: 88 KB +

    +
  • +
  • +

    + Estimated disk space required: 1.9 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+
+
+

+ Installation of unifdef +

+

+ First, fix a problem when building with gcc-15: +

+
sed -i 's/constexpr/unifdef_&/g' unifdef.c
+

+ Now fix a problem if reinstalling the package: +

+
sed -i 's/ln -s/ln -sf/' Makefile
+

+ Install unifdef by running + the following commands: +

+
make
+

+ To test the results, issue: make test. +

+

+ Finally, finish the installation as the root user: +

+
make prefix=/usr install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + unifdef and unifdefall +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ unifdef +

+
+

+ removes preprocessor conditionals from code +

+
+

+ unifdefall +

+
+

+ removes preprocessor conditionals from code across + a whole tree +

+
+
+
+
+
+
+
+

+ Vala-0.56.18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/vala/0.56/vala-0.56.18.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 14238ac89810b932db9fd75999739494 +

    +
  • +
  • +

    + Download size: 3.8 MB +

    +
  • +
  • +

    + Estimated disk space required: 160 MB (add 19 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (add 1.0 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Vala + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + for the tests) +

+
+ Recommended +
+ +
+ Optional +
+

+ dbus-1.16.2 (Required for the tests), + libxslt-1.1.43 (Required for generating + the documentation), help2man, + jing, and + weasyprint +

+
+
+

+ 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 +

+

+ bootstrap: This make target forces the + building system to build the package twice and use the + vala executable + produced in the first build to regenerate the .c files from the .vala files if needed. If a vala executable is not + installed yet and you've modified any .vala files in the source tree, run + make bootstrap + instead of make. +

+

+ --disable-valadoc: This option is + required if Graphviz-13.1.2 is not installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + vala, vala-0.56, valac, valadoc, + vala-gen-introspect, and vapigen (symlinks); valac-0.56, + valadoc-0.56, vala-gen-introspect-0.56, and + vapigen-0.56 +
+
+ Installed Library: + libvala-0.56.so and + libvaladoc-0.56.so +
+
+ Installed Directories: + /usr/include/vala-0.56, + /usr/include/valadoc-0.56, /usr/lib/vala-0.56, + /usr/lib/valadoc-0.56, /usr/share/vala, + /usr/share/vala-0.56, /usr/share/valadoc-0.56, and + /usr/share/devhelp/books/vala-0.56 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ valac +

+
+

+ is a compiler that translates Vala source code into C source + and header files +

+
+

+ valadoc +

+
+

+ is a documentation generator for generating API + documentation from Vala source code based on + libvala +

+
+

+ vala-gen-introspect +

+
+

+ generates a GI file for GObject and GLib based packages +

+
+

+ vapigen +

+
+

+ is a utility which generates Vala API (VAPI) files from GI + files +

+
+

+ libvala-0.56.so +

+
+

+ contains the Vala + API functions +

+
+
+
+
+
+
+
+

+ Valgrind-3.25.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://sourceware.org/pub/valgrind/valgrind-3.25.1.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 2b424c9a43aa9bf2840d4989b01ea6e7 +

    +
  • +
  • +

    + Download size: 16 MB +

    +
  • +
  • +

    + Estimated disk space required: 419 MB (add 86 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (add 5.7 SBU for tests; + both using parallelism=4) +

    +
  • +
+
+

+ Valgrind Dependencies +

+
+ Optional +
+

+ docbook-xml-4.5 (for tests), GDB-16.3 (for tests), + libaio-0.3.113, LLVM-20.1.8 (with Clang), and + Which-2.23 (for tests) +

+
+
+

+ Installation of Valgrind +

+

+ Install Valgrind by running + the following commands: +

+
sed -i 's|/doc/valgrind||' docs/Makefile.in &&
+
+./configure --prefix=/usr \
+            --datadir=/usr/share/doc/valgrind-3.25.1 &&
+make
+

+ To test the results, issue: make regtest. The tests may + hang forever if GDB-16.3 is not installed. Some tests are + known to hang also, depending on the version of glibc. A few + tests can fail in various suites. Problematic tests can be + disabled by changing the prereq: line in the + corresponding .vgtest file to + prereq: + false. For example: +

+
sed -e 's@prereq:.*@prereq: false@' \
+    -i {helgrind,drd}/tests/pth_cond_destroy_busy.vgtest
+

+ An additional test suite is now available that tests Valgrind + with every system call provided by the kernel. The test suite + is designed to test not only glibc and the kernel's + conformance to standards, but also Valgrind's ability to + handle different system calls. The test suite does require an + internet connection to download the tests, and it takes a + long time to run (an additional 20 SBUs and 1.3GB of disk + space.) If you wish to run this test suite, issue the + following command: make + ltpchecks. Note that the output will show + several failures where Valgrind does not currently support + certain system calls, but the logs for the test suite can be + found in the auxprogs/auxchecks/ltp-full-20250130/valgrind-ltp-logs + directory. +

+
+

+ 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.25.1 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ yasm-1.3.0 +

+
+
+
+
+
+

+ Introduction to yasm +

+

+ Yasm is a complete rewrite + of the NASM-2.16.03 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 + 12.4 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 +
+

+ cython-3.1.3 and Python2 +

+
+
+

+ Installation of yasm +

+

+ First, fix a problem when building with gcc-15: +

+
sed -e 's/def __cplusplus/ defined(__cplusplus) || __STDC_VERSION__ >= 202311L/' \
+    -i libyasm/bitvect.h
+

+ Install yasm by running the + following commands: +

+
sed -i 's#) ytasm.*#)#' Makefile.in &&
+
+./configure --prefix=/usr &&
+make
+

+ To test the results, issue: make -j1 check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ sed -i 's#) ytasm.*#)#' + Makefile.in: This sed prevents it compiling 2 + programs (vsyasm and ytasm) that are only of use on Microsoft + Windows. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + yasm +
+
+ Installed Library: + libyasm.a +
+
+ Installed Directory: + /usr/include/libyasm +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ yasm +

+
+

+ is a portable, retargetable assembler that supports + the x86 and AMD64 instruction sets, accepts NASM + and GAS assembler syntaxes and outputs binaries in + ELF32 and ELF64 object formats +

+
+

+ libyasm.a +

+
+

+ provides all of the core functionality of + yasm, + for manipulating machine instructions and object + file constructs +

+
+
+
+
+
+
+
+

+ Java +

+
+
+
+
+
+
+
+

+ Java-24.0.2 +

+
+
+
+
+
+

+ About Java +

+

+ Java is different from most of the packages in LFS and BLFS. + It is a programming language that works with files of + bytecode to obtain instructions and executes them in a Java + Virtual Machine (JVM). An introductory java program looks + like: +

+
public class HelloWorld
+{
+    public static void main(String[] args)
+    {
+        System.out.println("Hello, World");
+    }
+}
+

+ This program is saved as HelloWorld.java. The file name, + HelloWorld, must match + the class name. It is then converted into byte code with + javac + HelloWorld.java. The output file is + HelloWorld.class. The program + is executed with java + HelloWorld. This creates a JVM and runs the + code. The 'class' extension must not be specified. +

+

+ Several class files can be combined into one file with the + jar command. + This is similar to the standard tar command. For instance, + the command jar cf myjar.jar + *.class will combine all class files in a + directory into one jar file. These act as library files. +

+

+ The JVM can search for and use classes in jar files + automatically. It uses the CLASSPATH environment variable to search for + jar files. This is a standard list of colon-separated + directory names similar to the PATH environment variable. +

+
+
+

+ Binary JDK Information +

+

+ Creating a JVM from source requires a set of circular + dependencies. The first thing that's needed is a set of + programs called a Java Development Kit (JDK). This set of + programs includes java, javac, jar, and several others. It + also includes several base jar files. +

+

+ To start, we set up a binary installation of the JDK created + by the BLFS editors. It is installed in the /opt directory to allow for multiple + installations, including a source based version. +

+

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

+

+ Binary Package Information +

+
+ +
+
+ +
+

+ Java + Binary Runtime Dependencies +

+

+ alsa-lib-1.2.14, Cups-2.4.12, giflib-5.2.2, + Little + CMS-2.17, and Xorg Libraries +

+
+
+

+ Installation of the Java BinaryJDK +

+

+ Begin by extracting the appropriate binary tarball for your + architecture and changing to the extracted directory. Install + the binary OpenJDK with the + following commands as the root user: +

+
install -vdm755 /opt/OpenJDK-24.0.2-bin &&
+mv -v * /opt/OpenJDK-24.0.2-bin         &&
+chown -R root:root /opt/OpenJDK-24.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-24.0.2-bin /opt/jdk
+

+ You may now proceed to Configuring the Java + environment, where the instructions assume that the above + link exists. +

+
+
+
+
+
+

+ OpenJDK-24.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 + 12.4 platform. +

+

+ OpenJDK is GPL'd code, with a special exception made for + non-free projects to use these classes in their proprietary + products. In similar fashion to the LGPL, which allows + non-free programs to link to libraries provided by free + software, the GNU General Public + License, version 2, with the Classpath Exception allows + third party programs to use classes provided by free software + without the requirement that the third party software also be + free. As with the LGPL, any modifications made to the free + software portions of a third party application, must also be + made freely available. +

+
+

+ Note +

+

+ The OpenJDK source + includes a very thorough, open source test suite using the + JTreg test harness. The + testing instructions below allow testing the just built JDK + for reasonable compatibility with the proprietary Oracle + JDK. However, in order for an independent implementation to + claim compatibility, it must pass a proprietary + JCK/TCK test suite. No + claims of compatibility, or even partial compatibility, may + be made without passing an approved test suite. +

+

+ Oracle does provide free community access, on a + case-by-case basis, to a closed toolkit to ensure 100% + compatibility with its proprietary JDK. Neither the binary + version provided on the Java-24.0.2 page nor the JVM built with + the instructions below have been tested against the + + TCK. Any version that is built using the instructions + given, cannot claim to be compatible with the proprietary + JDK, without the user applying for, and completing the + compatibility tests themselves. +

+

+ With that in mind, the binaries produced using this build + method are regularly tested against the TCK by the members + listed on the site above. In addition to the community + license above, an educational, non-commercial license for + the TCK can be obtained here. +

+
+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/openjdk/jdk24u/archive/jdk-24.0.2-ga.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 160e4f0de98c13fddba4f1dc0bad3615 +

    +
  • +
  • +

    + Download Size: 115 MB +

    +
  • +
  • +

    + Estimated disk space required: 3.8 GB (add 630 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 4.3 SBU with 4 jobs (add 35 SBU + for tests with 4 jobs) +

    +
  • +
+
+

+ Additional Downloads +

+

+ Optional test + harness +

+
+ +
+

+ OpenJDK Dependencies +

+
+ Required Dependencies +
+

+ An existing binary (Java-24.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.14, cpio-2.15, Cups-2.4.12, libarchive-3.8.1, Which-2.23, Xorg Libraries, + and Zip-3.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ git-2.50.1, Graphviz-13.1.2, mercurial-7.1, + ccache, + pandoc, and + pigz +

+
+
+

+ Installation of OpenJDK +

+

+ If you have downloaded the optional test harness, unpack it + now: +

+
tar -xf ../jtreg-7.5.1+1.tar.gz
+

+ Fix a build failure caused by glibc-2.42: +

+
find src -name *.*pp -exec sed -i 's/uabs(/g_uabs(/' {} \;
+
+

+ Note +

+

+ Before proceeding, you should ensure that your environment + PATH variable contains the + location of the Java compiler used for bootstrapping + OpenJDK. This is the only + requirement for the environment. Modern Java installations + do not need JAVA_HOME and + CLASSPATH is not used here. + Furthermore, OpenJDK developers recommend unsetting + JAVA_HOME and CLASSPATH. +

+

+ 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: +

+
export MAKEFLAGS_HOLD=$MAKEFLAGS           &&
+unset  JAVA_HOME                           &&
+unset  CLASSPATH                           &&
+unset  MAKEFLAGS                           &&
+bash configure --enable-unlimited-crypto    \
+               --disable-warnings-as-errors \
+               --with-stdc++lib=dynamic     \
+               --with-giflib=system         \
+               --with-harfbuzz=system       \
+               --with-jtreg=$PWD/jtreg      \
+               --with-lcms=system           \
+               --with-libjpeg=system        \
+               --with-libpng=system         \
+               --with-zlib=system           \
+               --with-version-build="12"     \
+               --with-version-pre=""        \
+               --with-version-opt=""        \
+               --with-jobs=$(nproc)         \
+               --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 80 failures and 10 errors. +

+

+ Install the package with the following commands as the + root user: +

+
install -vdm755 /opt/jdk-24.0.2+12             &&
+cp -Rv build/*/images/jdk/* /opt/jdk-24.0.2+12 &&
+chown -R root:root /opt/jdk-24.0.2+12          &&
+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 will be plenty of binaries with debug info that take up + over half of the installed size. If you don't care about + debugging, you can remove the info: +

+
find /opt/jdk-24.0.2+12 -name *.debuginfo -delete
+

+ Restore the MAKEFLAGS variable: +

+
export MAKEFLAGS=$MAKEFLAGS_HOLD &&
+unset  MAKEFLAGS_HOLD
+

+ 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-24.0.2+12 /opt/jdk
+

+ If desired, you can create .desktop files to add entries in + the menu for java and jconsole. The needed icons + have already been installed. As the root user: +

+
mkdir -pv /usr/share/applications &&
+
+cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
+[Desktop Entry]
+Name=OpenJDK Java 24.0.2 Runtime
+Comment=OpenJDK Java 24.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 24.0.2 Console
+Comment=OpenJDK Java 24.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=$(nproc): 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,harfbuzz,lcms,libjpeg,libpng,zlib}=system: + These switches force the build system to use the system + libraries instead of the bundled versions. +

+

+ --with-version-build: + Currently, the build system does not include the build number + in the version string. It has to be specified here. +

+

+ --with-version-pre: + This switch allows you to prefix the version string with a + custom string. +

+

+ --with-version-opt: + This switch allows you to add an optional build description + to the version string. +

+

+ --with-cacerts-file=/etc/pki/tls/java/cacerts: + Specifies where to find a cacerts file, /etc/pki/tls/java/ on a BLFS system. + Otherwise, an empty one is created. You can use the + /usr/sbin/make-ca + --force command to generate it, once you have + installed the Java binaries. +

+

+ --with-boot-jdk: This switch + provides the location of the temporary JDK. It is normally not needed if + java is found + in the PATH. +

+
+
+

+ Configuring + OpenJDK +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Normally, the Java environment has been configured after + installing the binary version, and can be used with the + just built package as well. Review Configuring the Java + environment in case you want to modify something. +

+

+ To test if the man pages are correctly installed, issue + source + /etc/profile and man java to display the + respective man page. +

+
+
+
+
+
+

+ Setting up the JRE + Certificate Authority Certificates (cacerts) file +

+
+
+
+

+ If you have run the instructions on the make-ca-1.16.1 + page, you only need to create a symlink in the default + location for the cacerts + file. As user root: +

+
ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts
+

+ To check the installation, issue: +

+
cd /opt/jdk
+bin/keytool -list -cacerts
+

+ At the prompt Enter keystore + password:, enter changeit (the default) or + just press the “Enter” key. If the cacerts file was installed correctly, you + will see a list of the certificates with related + information for each one. If not, you need to reinstall + them. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + jar, jarsigner, java, javac, + javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, + jfr, jhsdb, jimage, jinfo, jlink, jmap, jmod, + jnativescan, jpackage, jps, jrunscript, jshell, jstack, + jstat, jstatd, jwebserver, keytool, rmiregistry, and + serialver +
+
+ Installed Libraries: + 37 libraries in + /opt/jdk-24.0.2+12/lib/ +
+
+ Installed Directory: + /opt/jdk-24.0.2+12 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ jar +

+
+

+ combines multiple files into a single jar archive +

+
+

+ jarsigner +

+
+

+ signs jar files and verifies the signatures and + integrity of a signed jar file +

+
+

+ java +

+
+

+ launches a Java application by starting a Java + runtime environment, loading a specified class and + invoking its main method +

+
+

+ javac +

+
+

+ reads class and interface definitions, written in + the Java programming language, and compiles them + into bytecode class files +

+
+

+ javadoc +

+
+

+ parses the declarations and documentation comments + in a set of Java source files and produces a + corresponding set of HTML pages describing the + classes, interfaces, constructors, methods, and + fields +

+
+

+ javap +

+
+

+ disassembles a Java class file +

+
+

+ jcmd +

+
+

+ is a utility to send diagnostic command requests to + a running Java Virtual Machine +

+
+

+ jconsole +

+
+

+ is a graphical console tool to monitor and manage + both local and remote Java applications and virtual + machines +

+
+

+ jdb +

+
+

+ is a simple command-line debugger for Java classes +

+
+

+ jdeprscan +

+
+

+ scans class or jar files for uses of deprecated API + elements +

+
+

+ jdeps +

+
+

+ shows the package-level or class-level dependencies + of Java class files +

+
+

+ jfr +

+
+

+ is a tool for working with “Flight + Recorder” files +

+
+

+ jhsdb +

+
+

+ is a tool to analyze the content of a core dump + from a crashed Java Virtual Machine (JVM) +

+
+

+ jimage +

+
+

+ is used to list, extract, verify, or get + information about modules in jimage format +

+
+

+ jinfo +

+
+

+ prints Java configuration information for a given + Java process, core file, or a remote debug server +

+
+

+ jlink +

+
+

+ is used to assemble and optimize a set of modules + and their dependencies into a custom runtime image +

+
+

+ jmap +

+
+

+ prints shared object memory maps or heap memory + details of a given process, core file, or a remote + debug server +

+
+

+ jmod +

+
+

+ creates JMOD files and lists the content of + existing JMOD files +

+
+

+ jnativescan +

+
+

+ finds methods that access native functionality when + run. This will include restricted method calls and + 'native' method declarations +

+
+

+ jpackage +

+
+

+ generates java application packages and images +

+
+

+ jps +

+
+

+ lists the instrumented JVMs on the target system +

+
+

+ jrunscript +

+
+

+ is a command line script shell +

+
+

+ jshell +

+
+

+ is an interactive tool for learning the Java + programming language and prototyping Java code +

+
+

+ jstack +

+
+

+ prints Java stack traces of Java threads for a + given Java process, core file, or a remote debug + server +

+
+

+ jstat +

+
+

+ displays performance statistics for an instrumented + JVM +

+
+

+ jstatd +

+
+

+ is an RMI server application that monitors for the + creation and termination of instrumented JVMs +

+
+

+ jwebserver +

+
+

+ provides a minimal HTTP server, designed to be used + for prototyping, testing, and debugging +

+
+

+ keytool +

+
+

+ is a key and certificate management utility +

+
+

+ rmiregistry +

+
+

+ creates and starts a remote object registry on the + specified port on the current host +

+
+

+ serialver +

+
+

+ returns the serialVersionUID for one or more + classes in a form suitable for copying into an + evolving class +

+
+
+
+
+
+
+
+

+ 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
+
+# Auto Java CLASSPATH: Copy jar files to, or create symlinks in, the
+# /usr/share/java directory.
+
+AUTO_CLASSPATH_DIR=/usr/share/java
+
+pathprepend . CLASSPATH
+
+for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2>/dev/null`; do
+    pathappend $dir CLASSPATH
+done
+
+for jar in `find ${AUTO_CLASSPATH_DIR} -name "*.jar" 2>/dev/null`; do
+    pathappend $jar CLASSPATH
+done
+
+export JAVA_HOME
+
+# By default, Java creates several files in a directory named
+# /tmp/hsperfdata_[username]. This directory contains files that are used for
+# performance monitoring and profiling, but aren't normally needed on a BLFS
+# system. This environment variable disables that feature.
+_JAVA_OPTIONS="-XX:-UsePerfData"
+
+export _JAVA_OPTIONS
+
+unset AUTO_CLASSPATH_DIR dir jar _JAVA_OPTIONS
+
+# End /etc/profile.d/openjdk.sh
+EOF
+

+ If Sudo-1.9.17p2 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
+Defaults env_keep += _JAVA_OPTIONS
+EOF
+

+ To use mandb to + include the OpenJDK man pages in its database, issue, as the + root user: +

+
cat >> /etc/man_db.conf << "EOF" &&
+# Begin Java addition
+MANDATORY_MANPATH     /opt/jdk/man
+MANPATH_MAP           /opt/jdk/bin     /opt/jdk/man
+MANDB_MAP             /opt/jdk/man     /var/cache/man/jdk
+# End Java addition
+EOF
+
+mkdir -p /var/cache/man &&
+mandb -c /opt/jdk/man
+
+
+

+ Setting up the + Certificate Authority Certificates for Java +

+

+ OpenJDK uses its own format + for the CA certificates. The Java security modules use + $JAVA_HOME/lib/security/cacerts by default. In order + to keep all the certificates in one place, we use + /etc/pki/tls/java/cacerts. The + instructions on the make-ca-1.16.1 page previously created + the file located in /etc/pki/tls/java. Set up a symlink in the + default location as the root + user: +

+
ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts
+

+ Use the following command to check if the cacerts file has been successfully + installed: +

+
/opt/jdk/bin/keytool -list -cacerts
+

+ At the prompt Enter keystore + password:, enter changeit (the default) or + just press the “Enter” key. If the cacerts file was installed correctly, you + will see a list of the certificates with related information + for each one. If not, you need to reinstall them. +

+

+ If you later install a new JVM, you just have to create the + symlink in the default location to be able to use the + cacerts. +

+
+
+
+
+
+

+ apache-ant-1.10.15 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Apache Ant Dependencies +

+
+ Required +
+

+ A JDK (Java Binary or OpenJDK-24.0.2) + and GLib-2.84.4 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+
+

+ 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.15 dist
+

+ Install, as the root user: +

+
cp -rv ant-1.10.15 /opt/            &&
+chown -R root:root /opt/ant-1.10.15 &&
+ln -sfv ant-1.10.15 /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.15 dist: This + command builds, tests, then installs the package into a + temporary directory. +

+
+
+

+ Configuring Apache Ant +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/ant/ant.conf, + ~/.ant/ant.conf, and + ~/.antrc +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Some packages will require ant to be in the search + path and the ANT_HOME + environment variable defined. Satisfy these requirements by + issuing, as the root user: +

+
cat > /etc/profile.d/ant.sh << EOF
+# Begin /etc/profile.d/ant.sh
+
+pathappend /opt/ant/bin
+export ANT_HOME=/opt/ant
+
+# End /etc/profile.d/ant.sh
+EOF
+

+ The above instructions assume you have configured your + system as described in The Bash Shell Startup + Files. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ant, antRun, antRun.pl, + complete-ant-cmd.pl, runant.pl, and runant.py +
+
+ Installed Libraries: + Numerous ant*.jar and dependent libraries in + $ANT_HOME/lib +
+
+ Installed Directories: + /opt/ant-1.10.15 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ dhcpcd-10.2.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ dhcpcd Dependencies +

+
+ Optional +
+

+ LLVM-20.1.8 (with Clang), ntp-4.2.8p18, chronyd, and + ypbind +

+
+
+

+ Privilege + separation +

+

+ Recent releases of dhcpcd + optionally support privilege separation. As the practical + security benefits of this are unclear for a program like + dhcpcd and the setup is more + complicated, the book currently defaults to disable it. +

+

+ If you however would like to use privilege separation, + additional installation steps are necessary to set up the + proper environment. Issue 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 
+
+
+

+ Installation of dhcpcd +

+

+ Build dhcpcd without + privilege separation by running the following command: +

+
./configure --prefix=/usr                \
+            --sysconfdir=/etc            \
+            --libexecdir=/usr/lib/dhcpcd \
+            --dbdir=/var/lib/dhcpcd      \
+            --runstatedir=/run           \
+            --disable-privsep         &&
+make
+

+ Alternatively, build dhcpcd + with privilege separation by running the following commands: +

+
./configure --prefix=/usr                \
+            --sysconfdir=/etc            \
+            --libexecdir=/usr/lib/dhcpcd \
+            --dbdir=/var/lib/dhcpcd      \
+            --runstatedir=/run           \
+            --privsepuser=dhcpcd         &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --libexecdir=/usr/lib/dhcpcd: + This switch sets a better location for the dhcpcd internal + libraries. +

+

+ --dbdir=/var/lib/dhcpcd: This + switch adjusts the database directory because the default + directory, /var/db, is not + FHS-compliant. +

+

+ --runstatedir=/run: + This switch sets the runtime state directory because the + default /var/run is a symbolic + link to /run, and using + /var/run is deprecated. +

+

+ --disable-privsep: + This switch disables privilege separation, which is the + default in dhcpcd. This switch is not used in the build + configuration where privilege separation is used. +

+

+ --privsepuser=dhcpcd: + This switch sets the privilege separation user in the build + configuration where privilege escalation is used. +

+

+ --with-hook=...: You can + optionally install more hooks, for example to install some + configuration files such as ntp.conf. A set of hooks can be found in + the dhcpcd-hooks directory in + the build tree. +

+
+
+

+ Configuring dhcpcd +

+
+
+
+
+

+ Config + Files +

+
+
+
+

+ /etc/dhcpcd.conf +

+
+
+
+
+
+

+ General + Configuration Information +

+
+
+
+

+ To configure dhcpcd, you need to first + install the network service script, /usr/lib/services/dhcpcd included in the + blfs-bootscripts-20250225 package + (as the root user): +

+
make install-service-dhcpcd
+
+

+ Note +

+

+ The + default for dhcpcd is to set the + hostname and mtu. It also overwrites /etc/resolv.conf and /etc/ntp.conf. These modifications to + system files are done by hooks which are stored in + /usr/lib/dhcpcd/dhcpcd-hooks. You can + change this behavior 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. +

+
+

+ Finally, + as the root user, create + the /etc/sysconfig/ifconfig.eth0 + configuration file using the following commands. Adjust + appropriately for additional interfaces: +

+
cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
+ONBOOT="yes"
+IFACE="eth0"
+SERVICE="dhcpcd"
+DHCP_START="-b -q -h $HOSTNAME <insert appropriate start options here>"
+DHCP_STOP="-k <insert additional stop options here>"
+EOF
+

+ For more information on the appropriate DHCP_START and DHCP_STOP values, examine the man page for + dhcpcd. +

+
+
+
+
+
+

+ Configuration Information: fixed + ip +

+
+
+
+

+ Although + not usual, it is possible that you need to configure + dhcpcd to use a fixed ip. + Here, we give an example. As the root user, create the /etc/sysconfig/ifconfig.eth0 + configuration file using the following commands. Adjust + appropriately for additional interfaces and for the actual + ip and router you need: +

+
cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
+ONBOOT="yes"
+IFACE="eth0"
+SERVICE="dhcpcd"
+DHCP_START="-b -q -S ip_address=192.168.0.10/24 -S routers=192.168.0.1"
+DHCP_STOP="-k"
+EOF
+

+ You can either use DNS servers in /etc/resolv.conf from another system, + your preferred servers, or just the example /etc/resolv.conf.head file below as is: +

+
cat > /etc/resolv.conf.head << "EOF"
+# OpenDNS servers
+nameserver 208.67.222.222
+nameserver 208.67.220.220
+EOF
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ bridge-utils Dependencies +

+
+ Optional (to run tests) +
+

+ Net-tools-2.10 +

+
+
+

+ Kernel Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
[*] Networking support --->                                                [NET]
+  Networking options --->
+    <*/M> 802.1d Ethernet Bridging                                      [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
+
+
+

+ Configuring bridge-utils +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ To automate bridge creation and configuration, install the + /usr/lib/services/bridge + service script included in the blfs-bootscripts-20250225 package. +

+
make install-service-bridge
+
+

+ Note +

+

+ The bridge script depends + on the commands /sbin/ifup and + /sbin/ifdown and the + service script ipv4-static from the + LFS bootscripts + dated January 27, 2012 or later. +

+
+

+ The following configuration file will create a bridge + device at boot time and attach the eth0 device to it. If + more than one device is desired, use a space separated list + of INTERFACE_COMPONENTS. This configuration is useful when + planning to run a virtual machine such as kvm/qemu. +

+

+ Other SERVICE combinations are + possible, for example, SERVICE="bridge + dhcp". In that case, the address parameters are not + needed, but do not interfere if present. The bridge service + may also be used alone, but will require additional + subsequent configuration. +

+
+

+ Caution +

+

+ Do not run a parallel configuration for a device in the + INTERFACE_COMPONENTS list. For instance, in the example + below, do not configure /etc/sysconfig/ifconfig.eth0 to run at + boot time. The command ifdown br0 followed by + command ifup + eth0 will work, but don't try to have + both up at the same time. +

+
+
cat > /etc/sysconfig/ifconfig.br0 << "EOF"
+ONBOOT=yes
+IFACE=br0
+VIRTINT=yes
+SERVICE="bridge ipv4-static"  # Space separated
+IP=192.168.1.32
+GATEWAY=192.168.1.1
+PREFIX=24
+BROADCAST=192.168.1.255
+CHECK_LINK=no                 # Don't check before bridge is created
+STP=no                        # Spanning tree protocol, default no
+INTERFACE_COMPONENTS="eth0"   # Add to IFACE, space separated devices
+IP_FORWARD=true
+EOF
+

+ All addresses should be changed to meet your circumstance. +

+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ cifs-utils-7.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ cifs-utils Dependencies +

+
+ Required +
+

+ Talloc-2.4.3 +

+
+ Recommended +
+ +
+ Optional +
+

+ docutils-0.21.2 (to create the man + pages), keyutils-1.6.3 (required to build PAM + module), Linux-PAM-1.7.1, Samba-4.22.4, and libcap-2.76 with PAM or libcap-ng +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
File systems --->
+  [*] Network File Systems --->                            [NETWORK_FILESYSTEMS]
+    <*/M> SMB3 and CIFS support (advanced network filesystem)             [CIFS]
+

+ Depending on your server configuration, additional kernel + options may be required. +

+
+
+

+ Installation of cifs-utils +

+

+ First, make the build system compatible with GCC-15: +

+
autoreconf -fiv
+

+ Install cifs-utils by + running the following commands: +

+
./configure --prefix=/usr \
+            --disable-pam \
+            --disable-systemd &&
+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.7.1 + is installed and you wish PAM support. +

+

+ --disable-systemd: + Disable systemd specific behavior for mount.cifs. +

+

+ --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 +

+
+
+
+
+
+
+
+

+ NcFTP-3.3.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of NcFTP +

+

+ To install NcFTP, run the + following commands: +

+
CC=/usr/bin/gcc \
+./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
+
+
+

+ Command Explanations +

+

+ CC=/usr/bin/gcc. This environment + variable ensures that gcc is used if LLVM-20.1.8 is + installed. +

+

+ make -C ... && make + ...: These commands make and install the + dynamic library libncftp which + is then used to link against when compiling the main program. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ncftp, ncftpbatch, 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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ NFS-Utils-2.8.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ NFS + Utilities Dependencies +

+
+ Required +
+

+ libevent-2.1.12, libnl-3.11.0, libtirpc-1.3.6, libxml2-2.14.5, + rpcsvc-proto-1.4.4, and SQLite-3.50.4 +

+
+ Optional +
+

+ Cyrus SASL-2.1.28 (for SASL + authentication), libnsl-2.0.1 (for NIS client support), + LVM2-2.03.34 (libdevmapper for NFSv4 + support), OpenLDAP-2.6.10 (for LDAP + authentication), MIT Kerberos V5-1.22.1 or + libgssapi, + and librpcsecgss + (for GSS and RPC security support), and libcap-2.76 with + PAM +

+
+ Required (runtime) +
+

+ rpcbind-1.2.8 +

+
+
+

+ 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 --->                            [NETWORK_FILESYSTEMS]
+    <*/M> NFS client support                                            [NFS_FS]
+    <*/M> NFS server support                                              [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 +

+

+ Install NFS Utilities by + running the following commands: +

+
./configure --prefix=/usr       \
+            --sysconfdir=/etc   \
+            --sbindir=/usr/sbin \
+            --disable-nfsv4     \
+            --disable-gss       \
+            LIBS="-lsqlite3 -levent_core" &&
+make
+

+ Now, as the root user: +

+
make install                       &&
+chmod u+w,go+r /usr/sbin/mount.nfs &&
+chown nobody:nogroup /var/lib/nfs
+

+ The tests for this package require that the package be + installed. In addition, the rpc.statd daemon must not be + running and the tests need to be run as the root user. +

+

+ To test the results, issue, as root: +

+
make check
+
+
+

+ Command Explanations +

+

+ --disable-gss: + Disables GSSAPI support in this package. If you need to use + it, make sure that MIT Kerberos V5-1.22.1 is + installed, and that you have GSSAPI support enabled in + libtirpc-1.3.6 as well. +

+

+ LIBS="-lsqlite3 + -levent_core": is required for the fsidd program. +

+

+ 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 https://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. +

+
+
+
+
+
+
+ Boot Script +
+
+
+
+

+ Install the /etc/rc.d/init.d/nfs-server init + script included in the blfs-bootscripts-20250225 package + to start the server at boot. +

+
make install-nfs-server
+

+ Now create the /etc/sysconfig/nfs-server configuration + file: +

+
cat > /etc/sysconfig/nfs-server << "EOF"
+PORT="2049"
+PROCESSES="8"
+KILLDELAY="10"
+EOF
+
+

+ Note +

+

+ The above parameters may be optionally placed in + /etc/sysconfig/rc.site. +

+
+
+
+
+
+
+
+

+ 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 specify other options. +

+
+
+
+
+
+ Boot Script +
+
+
+
+
+

+ Note +

+

+ The following boot script + is not required if the nfs-server script is installed. +

+
+

+ Install the /etc/rc.d/init.d/nfs-client init + script included in the blfs-bootscripts-20250225 package + to start the client services at boot. +

+
make install-nfs-client
+

+ To automatically mount nfs filesystems, clients will also + need to install the netfs + bootscript as described in Configuring for + Network Filesystems. +

+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + exportfs, fsidd, 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 +

+
+

+ fsidd +

+
+

+ offers a local UNIX domain socket interface for all + NFS userspace to query the reexport database +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Configuring for Network + Filesystems +

+
+
+
+
+

+ While LFS is capable of mounting network file systems such as + NFS, these are not mounted by the mountfs init script. Network file systems + must be mounted after the networking is activated and unmounted + before the network goes down. The netfs bootscript was written to handle both + boot-time mounting of network filesystems, if the entry in + /etc/fstab contains the + _netdev option, and unmounting of + all network filesystems before the network is brought down. +

+

+ As the root user, install the + /etc/rc.d/init.d/netfs bootscript + included with the blfs-bootscripts-20250225 package. +

+
make install-netfs
+
+
+
+
+

+ ntp-4.2.8p18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ntp + Dependencies +

+
+ Required +
+

+ IO-Socket-SSL-2.095 +

+
+ Optional +
+

+ libcap-2.76 with PAM, libevent-2.1.12, libedit, and + libopts from + AutoGen +

+

+ Editor 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
+

+ Fix an type issue by executing +

+
sed -e "s;pthread_detach(NULL);pthread_detach(0);" \
+    -i configure \
+       sntp/configure
+

+ 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.8p18 &&
+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 +

+

+ --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 capabilities 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. Since + the documentation included with the package is sparse, + visit the ntp website at https://www.ntp.org/ and + https://www.ntppool.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
+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 /etc/rc.d/init.d/ntp + init script included in the blfs-bootscripts-20250225 package. +

+
make install-ntpd
+

+ If you prefer to run ntpd periodically, add + the following command to root's crontab: +

+
ntpd -q
+

+ Execute the following command if you would like to set the + hardware clock to the current system time at shutdown and + reboot: +

+
ln -v -sf ../init.d/setclock /etc/rc.d/rc0.d/K46setclock &&
+ln -v -sf ../init.d/setclock /etc/rc.d/rc6.d/K46setclock
+

+ The other way around is already set up by LFS. +

+
+
+
+

+ 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. +

+
+

+ Note +

+

+ In November 2022, at the 27th General Conference + on Weights and Measures, it was decided to + abandon the leap second. In addition this script + hardcodes a URL for an update file that no longer + exists. The last time a leap second was declared + was January 2017. This script will probably be + removed in a future release. +

+
+
+
+
+
+
+
+
+

+ rpcbind-1.2.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ rpcbind Dependencies +

+
+ Required +
+

+ libtirpc-1.3.6 +

+
+
+

+ Installation of rpcbind +

+

+ 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: +

+
./configure --prefix=/usr                                  \
+            --bindir=/usr/sbin                             \
+            --with-rpcuser=root                            \
+            --enable-warmstarts                            \
+            --without-systemdsystemunitdir                 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --with-rpcuser=root: This + works around an error in the configure script. +

+

+ --without-systemdsystemunitdir: + This version of BLFS does not support systemd. +

+
+
+

+ Configuring rpcbind +

+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/rpcbind init + script included in the blfs-bootscripts-20250225 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 +

+
+
+
+
+
+
+
+

+ rsync-3.4.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.samba.org/ftp/rsync/src/rsync-3.4.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 04ce67866db04fd7a1cde0b78168406e +

    +
  • +
  • +

    + Download size: 1.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 11 MB (with tests; add + 24 MB for HTML API documentation) +

    +
  • +
  • +

    + Estimated build time: 0.6 SBU (with tests) +

    +
  • +
+
+

+ rsync Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 and xxhash +

+
+
+

+ 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-xxhash \
+            --without-included-zlib &&
+make
+

+ If you have Doxygen-1.14.0 installed and wish to + build HTML API documentation, issue: +

+
doxygen
+

+ To run the tests, fix one test and then run the test suite: +

+
sed -i '/typedef/d' wildtest.c &&
+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.4.1/api &&
+install -v -m644 dox/html/*  /usr/share/doc/rsync-3.4.1/api
+
+
+

+ Command Explanations +

+

+ --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-10.0p1 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. +

+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ 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 script to run the rsync client. +

+

+ Install the /etc/rc.d/init.d/rsyncd init + script included in the blfs-bootscripts-20250225 package. +

+
make install-rsyncd
+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + rsync and rsync-ssl +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + Optionally, + /usr/share/doc/rsync-3.4.1 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Samba-4.22.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.samba.org/pub/samba/stable/samba-4.22.4.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 08cffdd420609c1b4933fe4f0a8d8496 +

    +
  • +
  • +

    + Download size: 41 MB +

    +
  • +
  • +

    + Estimated disk space required: 687 MB (add 64 MB for + quicktest) +

    +
  • +
  • +

    + Estimated build time: 2.1 SBU (using parallelism=4; add + 0.4 SBU for quicktest) +

    +
  • +
+
+

+ Samba Dependencies +

+
+ Required +
+

+ GnuTLS-3.8.10, libtirpc-1.3.6, + Parse-Yapp-1.21, and rpcsvc-proto-1.4.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ Avahi-0.8, BIND-9.20.12, Cups-2.4.12, Cyrus + SASL-2.1.28, GDB-16.3, git-2.50.1, GnuPG-2.4.8 (required for ADS and the + test suite), libaio-0.3.113, libarchive-3.8.1 + (for tar in smbclient), libcap-2.76 with PAM, + libgcrypt-1.11.2, libnsl-2.0.1, + libunwind-1.8.2, Markdown-3.8.2, + nss-3.115, + popt-1.19, + Talloc-2.4.3 (used by the test suite), + Vala-0.56.18, Valgrind-3.25.1 + (optionally used by the test suite), xfsprogs-6.15.0, + cmocka, + cryptography, + ctdb + (included), cwrap, dnspython, + FAM, Gamin, GlusterFS, + Heimdal (included), + iso8601, ldb (included), + OpenAFS, + poetry-core + (required for ADS), pyasn1, tevent + (included), tdb (included), and tracker-2 +

+
+ Optional (for the Developer Test + Suite) +
+

+ Install in listed order: six-1.17.0, pytest-8.4.1, argparse, + testtools, + testscenarios, + and python-subunit +

+

+ Editor 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 --system-site-packages pyvenv         &&
+./pyvenv/bin/pip3 install cryptography pyasn1 iso8601
+

+ Install Samba by running the + following commands: +

+
PYTHON=$PWD/pyvenv/bin/python3             \
+PATH=$PWD/pyvenv/bin:$PATH                 \
+./configure                                \
+    --prefix=/usr                          \
+    --sysconfdir=/etc                      \
+    --localstatedir=/var                   \
+    --with-piddir=/run/samba               \
+    --with-pammodulesdir=/usr/lib/security \
+    --enable-fhs                           \
+    --without-ad-dc                        \
+    --without-systemd                      \
+    --with-system-mitkrb5                  \
+    --enable-selftest                      \
+    --disable-rpath-install                &&
+make
+

+ To test the results, 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. +

+
+

+ 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 hard coded paths to Python 3 interpreter: +

+
sed '1s@^.*$@#!/usr/bin/python3@' \
+    -i ./bin/default/source4/scripting/bin/*.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.13/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.samba &&
+
+install -v -m644    examples/LDAP/samba* \
+                    /etc/openldap/schema &&
+
+install -v -m755    examples/LDAP/{get*,ol*} \
+                    /etc/openldap/schema
+
+
+

+ Command Explanations +

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+

+ --enable-fhs: Assigns + all other file paths in a manner compliant with the + Filesystem Hierarchy Standard (FHS). +

+

+ --without-systemd: + Disable systemd integration, + since it is not built in the System V version of LFS/BLFS. +

+

+ --with-shared-modules='!vfs_snapper': Disable + the vfs_snapper module if you want to build samba without + dbus support, for setups + without graphical user interfaces. +

+

+ --without-ad-dc: + Disables Active Directory Domain Controller functionality. + See + Set up 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-system-mitkrb5: Enables + building with the system version of Kerberos. This mitigates + security vulnerabilities and reduces build time. Remove this + if you do not have MIT Kerberos V5-1.22.1 + installed. +

+

+ --disable-rpath-install: + Removes the library installation path from embedded shared + library search paths in the installed binary executable files + and shared libraries. When this package is installed into the + standard location the library installation path is + /usr/lib. It's always searched + by the dynamic linker, so there is no need to embed it into + installed files. +

+

+ --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 + writable 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 = WORKGROUP
+    dos charset = cp850
+    unix charset = ISO-8859-1
+

+ The values in this example specify that the computer + belongs to a Windows workgroup named WORKGROUP, 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 bootscripts. +

+
+
+
+
+
+
+ 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 = WORKGROUP
+    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 bootscript. 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 bootscript 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. +

+
+
+
+
+
+
+ Boot + Script +
+
+
+
+

+ For your convenience, boot scripts have been provided for + Samba. There are two + included in the blfs-bootscripts-20250225 + package. The first, samba, + will start the smbd and nmbd daemons needed to + provide SMB/CIFS services. The second script, + winbind, starts the + winbindd + daemon, used for providing Windows domain services to + Linux clients. +

+
make install-samba
+
make install-winbindd
+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cifsdd, dbwrap_tool, dumpmscat, + eventlogadm, gentest, ldbadd, ldbdel, ldbedit, ldbmodify, + ldbrename, ldbsearch, locktest, masktest, mdsearch, + mvxattr, ndrdump, net, nmbd, nmblookup, ntlm_auth, + oLschema2ldif, pdbedit, profiles, regdiff, regpatch, + regshell, regtree, rpcclient, samba-log-parser, + samba-gpupdate, samba-regedit, samba-tool, 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.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-311-x86_64-linux-gnu.so, + libsamba-util.so, libsamdb.so, libsmbclient.so, + libsmbconf.so, libsmbldap.so, libtevent-util.so, + libwbclient.so, and filesystem and support modules under + /usr/lib/{python3.13,samba} +
+
+ Installed Directories: + /etc/samba, /run/samba, + /usr/include/samba-4.0, + /usr/lib/python3.13/site-packages/samba, + /usr/{lib,libexec,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 +

+
+

+ dumpmscat +

+
+

+ dumps the content of MS catalog files +

+
+

+ 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) +

+
+

+ 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 utility 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 +

+
+

+ mdsearch +

+
+

+ 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 +

+
+

+ 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-log-parser +

+
+

+ parses winbind logs generated by Samba +

+
+

+ samba-gpupdate +

+
+

+ allows you to edit Microsoft Group Policy Objects + (GPOs) +

+
+

+ samba-regedit +

+
+

+ is a ncurses based tool to manage the Samba + registry +

+
+

+ samba-tool +

+
+

+ is the main Samba administration tool +

+
+

+ 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 a 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 to a file +

+
+

+ smbtorture +

+
+

+ is a test suite 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 a 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 +

+
+
+
+
+
+
+
+

+ Wget-1.25.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.gnu.org/gnu/wget/wget-1.25.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: c70ba58b36f944e8ba1d655ace552881 +

    +
  • +
  • +

    + Download size: 5.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 38 MB (add 27 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (add 0.4 SBU for tests) +

    +
  • +
+
+

+ Wget + Dependencies +

+
+ Recommended +
+ +
+ Recommended at runtime +
+ +
+ Optional +
+

+ GnuTLS-3.8.10, HTTP-Daemon-6.16 (for the test + suite), IO-Socket-SSL-2.095 (for the test + suite), libidn2-2.3.8, libproxy-0.5.10, + pcre2-10.45, and Valgrind-3.25.1 (for + the test suite) +

+
+
+

+ 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. +

+

+ Some tests may fail when Valgrind tests are enabled. +

+

+ 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.8.10. +

+

+ --enable-libproxy: This switch + allows wget to use libproxy for proxy configuration. Use it + if you have the libproxy-0.5.10 package installed and + wish to use a proxy server. +

+

+ --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 +

+
+
+
+
+
+
+
+

+ Configuring the Linux Kernel for + Wireless +

+
+
+
+
+

+ Before using any userspace tools for connecting to a wireless + AP, the Linux kernel must be configured to drive the wireless + NIC properly. 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 --->                                                [NET]
+  [*] Wireless --->                                                   [WIRELESS]
+    <*/M>   cfg80211 - wireless configuration API                     [CFG80211]
+    < /*/M>   Generic IEEE 802.11 Networking Stack (mac80211)         [MAC80211]
+
+Device Drivers --->
+  [*] Network device support --->                                   [NETDEVICES]
+    [*] Wireless LAN --->                                                 [WLAN]
+

+ Open the “Wireless + LAN” submenu and select the options that support + your hardware. lspci from pciutils-3.14.0 or + lsusb from + usbutils-018 can be used to view your + hardware configuration. Note that many (though not all) options + for the wireless NICs depend on CONFIG_MAC80211. After the + correct drivers are loaded, the interface will appear in + /sys/class/net, or in the output + of the ip link + command. +

+

+ Many wireless NIC drivers require firmware. If you've enabled + the correct driver in the kernel configuration but it fails to + load (with messages like Direct + firmware load for <filename> failed with + error -2, it means that you need to install the firmware + or the wireless NIC won't work. Read About Firmware + for more details. +

+
+
+
+
+

+ iw-6.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ iw + Dependencies +

+
+ Required +
+

+ libnl-3.11.0 +

+
+ Required (Runtime) +
+

+ Configuring the + Linux Kernel for Wireless +

+
+
+

+ Kernel Configuration +

+

+ To use iw, the kernel must + have the appropriate drivers and other support available. + Read Configuring the + Linux Kernel for Wireless for details. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 userspace. 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Wireless Tools Dependencies +

+
+ Required (Runtime) +
+

+ Configuring the + Linux Kernel for Wireless +

+
+
+

+ Kernel Configuration +

+

+ To use Wireless Tools, the + kernel must have the appropriate drivers and other support + available. Besides the configurations mentioned by Configuring the + Linux Kernel for Wireless, it's also needed to enable the + following options in the kernel configuration: +

+
[*] Networking support --->                                                [NET]
+  [*] Wireless --->                                                   [WIRELESS]
+    <*/M> cfg80211 - wireless configuration API                       [CFG80211]
+    [*]     cfg80211 wireless extensions compatibility           [CFG80211_WEXT]
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ wpa_supplicant-2.11 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://w1.fi/releases/wpa_supplicant-2.11.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 72a4a00eddb7a499a58113c3361ab094 +

    +
  • +
  • +

    + Download size: 3.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 35 MB +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU +

    +
  • +
+
+

+ WPA + Supplicant Dependencies +

+
+ Required (Runtime) +
+

+ Configuring the + Linux Kernel for Wireless +

+
+ Recommended +
+ +
+ Optional +
+

+ dbus-1.16.2 and libxml2-2.14.5 +

+
+
+

+ Kernel Configuration +

+

+ To use wpa_supplicant, the + kernel must have the appropriate drivers and other support + available. Read Configuring + the Linux Kernel for Wireless for details. +

+
+
+

+ 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.54.0, + make sure that you have installed + dbus-1.16.2, 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
+

+ 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/
+

+ 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
+
+

+ Note +

+

+ You will need to restart the system D-Bus daemon before you can use the + WPA Supplicant + D-Bus interface. +

+
+
+
+

+ Configuring wpa_supplicant +

+
+

+ Important +

+

+ If you are using WPA Supplicant with NetworkManager-1.54.0 (or + anything communicating with WPA Supplicant via D-Bus), this + section should be skipped. Running a D-Bus connected WPA + Supplicant instance and another WPA supplicant instance + configured following this section simultaneously can cause + subtle issues. +

+
+
+
+
+
+

+ Config File +

+
+
+
+

+ /etc/sysconfig/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/sysconfig/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: +

+
wpa_passphrase SSID | sed '/^\t#/d' > /etc/sysconfig/wpa_supplicant-wifi0.conf
+

+ The wpa_supplicant command + will ask you to input the password of the access point. +

+

+ /etc/sysconfig/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/sysconfig/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, 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 +

+
+
+
+

+ If you want to + configure network interfaces at boot using wpa_supplicant, you need + to install the /lib/services/wpa script included in + blfs-bootscripts-20250225 package: +

+
make install-service-wpa
+

+ If your router/access point uses DHCP to allocate IP + addresses, you can install dhcpcd-10.2.4 and use it to + automatically obtain network addresses. Create the + /etc/sysconfig/ifconfig-wifi0 by running the + following command as the root user: +

+
cat > /etc/sysconfig/ifconfig.wifi0 << "EOF"
+ONBOOT="yes"
+IFACE="wlan0"
+SERVICE="wpa"
+
+# Additional arguments to wpa_supplicant
+WPA_ARGS=""
+
+WPA_SERVICE="dhcpcd"
+DHCP_START="-b -q <insert appropriate start options here>"
+DHCP_STOP="-k <insert additional stop options here>"
+EOF
+

+ Alternatively, if you use static addresses on your local + network, then create the /etc/sysconfig/ifconfig-wifi0 by running the + following command as the root user: +

+
cat > /etc/sysconfig/ifconfig.wifi0 << "EOF"
+ONBOOT="yes"
+IFACE="wlan0"
+SERVICE="wpa"
+
+# Additional arguments to wpa_supplicant
+WPA_ARGS=""
+
+WPA_SERVICE="ipv4-static"
+IP="192.168.1.1"
+GATEWAY="192.168.1.2"
+PREFIX="24"
+BROADCAST="192.168.1.255"
+EOF
+

+ You can connect to the wireless access point by running the + following command as the root user: +

+
ifup wifi0
+

+ Replace wlan0 + with the correct wireless interface and wifi0 with desired name for + the configuration file. Please note that wpa_supplicant-*.conf and ifconfig.* configuration files need to + have identical names, ie both contain wifi0 in their name. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + wpa_supplicant, wpa_passphrase and + wpa_cli +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ Chapter 16. Networking Utilities +

+
+
+
+
+

+ This chapter contains some tools that come in handy when the + network needs investigating. +

+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Avahi Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) +

+
+ Recommended +
+ +
+ Optional +
+

+ D-Bus Python-1.4.0, libevent-2.1.12, + Doxygen-1.14.0, GTK+-2 + (deprecated), and xmltoman + (for generating documentation) +

+
+
+

+ 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 /run/avahi-daemon -u 84 \
+        -g avahi -s /bin/false avahi
+

+ There should also be a dedicated privileged 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 vulnerability 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                  \
+    --disable-qt5                  \
+    --enable-core-docs             \
+    --with-distro=none             \
+    --with-systemdsystemunitdir=no \
+    --with-dbus-system-address='unix:path=/run/dbus/system_bus_socket' &&
+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. +

+

+ --with-systemdsystemunitdir=no: + Without it, the daemon fails to start in BLFS, which does not + support systemd. +

+

+ --with-dbus-system-address=: + This option prevents the package from referring to the + deprecated /var/run directory. +

+

+ --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 automatically start the avahi-daemon when the + system is rebooted, install the /etc/rc.d/init.d/avahi bootscript from + the blfs-bootscripts-20250225 package. +

+
make install-avahi
+
+
+
+

+ 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-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-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 +

+
+
+
+
+
+
+
+

+ BIND + Utilities-9.20.12 +

+
+
+
+
+
+

+ 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.20.12. 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ BIND + Utilities Dependencies +

+
+ Required +
+

+ liburcu-0.15.3 and libuv-1.51.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ libcap-2.76 with PAM, libxml2-2.14.5, and sphinx-8.2.3 +

+
+
+

+ Installation of BIND Utilities +

+

+ Install BIND Utilities by + running the following commands: +

+
./configure --prefix=/usr &&
+make -C lib/isc      &&
+make -C lib/dns      &&
+make -C lib/ns       &&
+make -C lib/isccfg   &&
+make -C lib/isccc    &&
+make -C bin/dig      &&
+make -C bin/nsupdate &&
+make -C bin/rndc     &&
+make -C doc
+

+ This portion of the package does not come with a test suite. +

+

+ Now, as the root user: +

+
make -C lib/isc      install &&
+make -C lib/dns      install &&
+make -C lib/ns       install &&
+make -C lib/isccfg   install &&
+make -C lib/isccc    install &&
+make -C bin/dig      install &&
+make -C bin/nsupdate install &&
+make -C bin/rndc     install &&
+cp -v doc/man/{dig.1,host.1,nslookup.1,nsupdate.1} /usr/share/man/man1 &&
+cp -v doc/man/rndc.8 /usr/share/man/man8
+
+
+

+ Command Explanations +

+

+ --disable-doh: Use this option if + you have not installed nghttp2-1.66.0 and you don't need DNS + over HTTPS support. +

+

+ make -C + lib/...: These commands build the libraries + that are needed for the client programs. +

+

+ make -C + bin/...: This command builds the client + programs. +

+

+ make -C doc: + This command builds the manual pages if the optional Python + module sphinx-8.2.3 is installed. +

+

+ Use cp -v doc/man/... + /usr/share/man/man... to install the manual + pages if they have been built. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + dig, host, nslookup, nsupdate and + rndc +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+

+ Short Descriptions +

+

+ See the program descriptions in the BIND-9.20.12 section. +

+
+
+
+
+
+

+ NetworkManager-1.54.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ NetworkManager Dependencies +

+
+ Required +
+

+ libndp-1.9 +

+
+ Recommended +
+ +
+ Optional +
+

+ BlueZ-5.83, D-Bus + Python-1.4.0 (for the test suite), GnuTLS-3.8.10 (can be + used instead of nss-3.115), GTK-Doc-1.34.0, jansson-2.14.1, + libnvme-1.15, ModemManager-1.24.2, UPower-1.90.9, Valgrind-3.25.1, + dnsmasq, + firewalld, + libaudit, + libteam, + mobile-broadband-provider-info, PPP, and RP-PPPoE +

+
+
+

+ Kernel Configuration +

+

+ If you wish to run the tests, check that at least the + following options are enabled in the kernel configuration. + Those options have been determined to be necessary, but may + not be sufficient. Recompile the kernel if necessary: +

+
[*] Networking support --->                                                [NET]
+  Networking options --->
+    [*]   TCP/IP networking                                               [INET]
+    <*/M>   IP: tunneling                                             [NET_IPIP]
+    <*/M>   IP: GRE demultiplexer                              [NET_IPGRE_DEMUX]
+    <*/M>   IP: GRE tunnels over IP                                  [NET_IPGRE]
+    <*>     The IPv6 protocol --->                                        [IPV6]
+      <*/M>   IPv6: IPv6-in-IPv4 tunnel (SIT driver)                  [IPV6_SIT]
+      <*/M>   IPv6: GRE tunnel                                        [IPV6_GRE]
+      [*]     IPv6: Multiple Routing Tables               [IPV6_MULTIPLE_TABLES]
+    [*]     MPTCP: Multipath TCP                                         [MPTCP]
+    [*]       MPTCP: IPv6 support for Multipath TCP                 [MPTCP_IPV6]
+    <*/M> 802.1Q/802.1ad VLAN Support                               [VLAN_8021Q]
+    [*]   QoS and/or fair queueing --->                              [NET_SCHED]
+      <*> Stochastic Fairness Queueing (SFQ)                       [NET_SCH_SFQ]
+      <*> Token Bucket Filter (TBF)                                [NET_SCH_TBF]
+      <*> Fair Queue Controlled Delay AQM (FQ_CODEL)          [NET_SCH_FQ_CODEL]
+      <*> Ingress/classifier-action Qdisc                      [NET_SCH_INGRESS]
+
+Device Drivers --->
+  [*] Network device support --->                                   [NETDEVICES]
+    [*]   Network core driver support                                 [NET_CORE]
+    <*/M>   Bonding driver support                                     [BONDING]
+    <*/M>   Dummy net driver support                                     [DUMMY]
+    <*/M>   Ethernet team driver support --->                         [NET_TEAM]
+    <*/M>   MAC-VLAN support                                           [MACVLAN]
+    <*/M>     MAC-VLAN based tap driver                                [MACVTAP]
+    <*/M>   IP-VLAN support                                             [IPVLAN]
+    <*/M>   Virtual eXtensible Local Area Network (VXLAN)                [VXLAN]
+    <*/M>   Virtual ethernet pair device                                  [VETH]
+    <*/M>   Virtual Routing and Forwarding (Lite)                      [NET_VRF]
+
+
+

+ Installation of NetworkManager +

+

+ 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 &&
+
+meson setup ..                    \
+      --prefix=/usr               \
+      --buildtype=release         \
+      -D libaudit=no              \
+      -D nmtui=true               \
+      -D ovs=false                \
+      -D ppp=false                \
+      -D nbft=false               \
+      -D selinux=false            \
+      -D session_tracking=elogind \
+      -D modem_manager=false      \
+      -D systemdsystemunitdir=no  \
+      -D systemd_journal=false    \
+      -D nm_cloud_setup=false     \
+      -D qt=false                 &&
+ninja
+

+ An already active graphical session with a bus address is + necessary to run the tests. To test the results, issue + ninja test. +

+

+ A few tests may fail, depending on enabled kernel options. +

+

+ Now, as the root user: +

+
ninja install &&
+mv -v /usr/share/doc/NetworkManager{,-1.54.0}
+

+ If you have not passed the -D + docs=true option to meson, you can install the + pregenerated manual pages with (as the root user): +

+
for file in $(echo ../man/*.[1578]); do
+    section=${file##*.} &&
+    install -vdm 755 /usr/share/man/man$section
+    install -vm 644 $file /usr/share/man/man$section/
+done
+

+ If you have not used -D + docs=true, the pregenerated HTML documentation can + also be installed with (as the root user): +

+
cp -Rv ../docs/{api,libnm} /usr/share/doc/NetworkManager-1.54.0
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D docs=true: Use this switch to + enable building man pages and documentation if GTK-Doc-1.34.0 is installed. +

+

+ -D nmtui=true: This + switch enables building nmtui. +

+

+ -D + systemdsystemunitdir=no and -D systemd_journal=false: + systemd is not used for sysv init systems, so prevent + installing units and using the systemd journal. +

+

+ -D ovs=false: This + switch disable the Open vSwitch integration because it needs + jansson-2.14.1. Remove it if you have + jansson-2.14.1 installed on your system. +

+

+ -D + modem_manager=false: This switch is required if + ModemManager is not + installed. Omit this switch if you have built ModemManager and mobile-broadband-provider-info. +

+

+ -D nbft=false: This + switch is required if libnvme-1.15 is not installed, and + disabled NBFT support in the initrd generator. Note that BLFS + does not use the initrd generator provided from + NetworkManager by default. +

+

+ -D + session_tracking=elogind: This switch is used to + set elogind as + the default program for session tracking. +

+

+ -D ppp=false: This + switch disables PPP support + in NetworkManager since the + programs necessary for it are not installed. Remove this + switch if you need PPP support and have PPP installed. +

+

+ -D libaudit=no and + -D selinux=false: + This switch disables support for libaudit and SELinux since + they are not used in BLFS. +

+

+ -D qt=false: This + switch disables the Qt 5 + examples. +

+

+ -D + nm_cloud_setup=false: Use this switch if you have + not installed jansson-2.14.1. This disables + nm-cloud-setup which is used to automatically configure the + network in a public cloud environment within a VM. +

+

+ -D crypto=gnutls: Use this switch + if you have GnuTLS installed and want to use it for + certificate and key operations in NetworkManager, instead of + using NSS (the default). +

+

+ -D crypto=null: Use this switch + if neither NSS nor GnuTLS is installed but you want to build + NetworkManager anyway. This switch will make NetworkManager + lack some features (for example 802.1X). +

+
+
+

+ 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 dhcpcd or + internal): +

+
cat > /etc/NetworkManager/conf.d/dhcp.conf << "EOF"
+[main]
+dhcp=dhcpcd
+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 configuration 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
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To automatically start the NetworkManager daemon + when the system is rebooted, install the /etc/rc.d/init.d/networkmanagerbootscript + from the blfs-bootscripts-20250225 package. +

+
+

+ 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. +

+

+ The easiest way to do this is to remove S20network from + /etc/rc.d/rc3.d/ and + /etc/rc.d/rc5.d/. +

+

+ Also, if using dhcpcd-10.2.4, be careful about + timing issues if setting up network applications such as + ntpd, nfs, or sshd. It takes several seconds for dhcpcd + to initialize the network interface and if these + applications start before the network interface is + completely initialized, these applications may have to be + started manually. +

+
+
make install-networkmanager
+
+
+
+

+ 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.54.0, + /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 a 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 +

+
+
+
+
+
+
+
+

+ network-manager-applet-1.34.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ NetworkManager Applet Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libnma-1.10.6, and libsecret-0.21.7 +

+
+ Recommended +
+ +
+ Required (Runtime) +
+

+ Since this package uses Polkit-126 for authorization, one Polkit Authentication + Agent should be running when the functionality of this + package is used. +

+
+ Optional +
+

+ gnome-bluetooth-47.1, jansson-2.14.1, and libindicator +

+
+
+

+ Installation of NetworkManager Applet +

+

+ Install NetworkManager + Applet by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D appindicator=no  \
+      -D selinux=false    \
+      -D team=false       &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D appindicator=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. +

+

+ -D selinux=false: + This switch forcibly disables SELinux support since it is not + currently in BLFS and the build will fail without it. +

+

+ -D team=false: This + switch disables the team configuration editor since it + requires jansson-2.14.1. If you have Jansson + installed, remove this option or set it to true. +

+

+ -D wwan=false: This switch + disables WWAN support. Use this if you do not have ModemManager-1.24.2 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 +

+
+
+
+
+
+
+
+

+ Nmap-7.98 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://nmap.org/dist/nmap-7.98.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 4d6b817ed0739141656e06a74bac5e57 +

    +
  • +
  • +

    + Download size: 12 MB +

    +
  • +
  • +

    + Estimated disk space required: 118 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (Using parallelism=4; + with tests) +

    +
  • +
+
+

+ Nmap + Dependencies +

+
+ Required +
+

+ build-1.3.0 +

+
+ Recommended +
+
+

+ Note +

+

+ If the PyGObject3 module + is not installed, you'd have to skip the command making the + build system use the LFS Setuptools installation and then an + Internet connection would be needed. The other packages are + recommended because if they're not installed, the build + process will compile and link against its own (often older) + version. +

+
+ +
+ Optional +
+

+ libdnet and setuptools-gettext + (currently useless) +

+
+
+

+ Installation of Nmap +

+

+ Make the build system use the Setuptools Python module from LFS + instead of downloading a copy from the Internet, and install + the Python wheels already created when running the + make instead of + rebuilding them again on make + install: +

+
sed -ri Makefile.in \
+    -e 's#-m build#& --no-isolation#'  \
+    -e '/pip install/s#(ZENMAP|NDIFF)DIR\)/#&dist/*.whl#'
+

+ Remove a useless dependency on setuptools-gettext: +

+
sed 's/, "setuptools-gettext"//' -i zenmap/pyproject.toml
+

+ Install Nmap by running the + following commands: +

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

+ If you wish to run the test suite, run the following command: +

+
sed -e '/import imp/d'                \
+    -e 's/^ndiff = .*$/import ndiff/' \
+    -i ndiff/ndifftest.py
+

+ Tests need a graphical session and to be run as the + root user. To test the + results, issue: +

+
make check
+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ncat, ndiff, nmap, nping, zenmap, + and 2 symlinks to zenmap: nmapfe and xnmap +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/python3.13/site-packages/{radialnet,zenmapCore,zenmapGUI,zenmap-7.98.dist-info}, + 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 +

+
+
+
+
+
+
+
+

+ Traceroute-2.1.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Whois-5.6.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Whois Dependencies +

+
+ Optional +
+

+ libidn-1.43 or libidn2-2.3.8 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Wireshark-4.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ Wireshark dependencies +

+
+ Required +
+

+ CMake-4.1.0, c-ares-1.34.5, GLib-2.84.4, libgcrypt-1.11.2, Qt-6.9.2, and Speex-1.2.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoctor-2.0.23, Brotli-1.1.0, + Cups-2.4.12, Doxygen-1.14.0, + git-2.50.1, GnuTLS-3.8.10, libnl-3.11.0, + libxslt-1.1.43, libxml2-2.14.5, + Lua-5.4.8, + MIT Kerberos V5-1.22.1, + nghttp2-1.66.0, SBC-2.1, Vulkan-Headers-1.4.321, + BCG729, + libilbc, libsmi, + libssh, + MaxMindDB, + Minizip, + nghttp3, Snappy, + and Spandsp +

+
+
+

+ Kernel + Configuration +

+

+ The kernel must have the Packet protocol enabled for + Wireshark to capture live + packets from the network: +

+
[*] Networking support --->                                                [NET]
+  Networking options --->
+    <*/M> Packet socket                                                 [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 -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/wireshark-4.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-4.4.8 &&
+install -v -m644    ../README.linux ../doc/README.* ../doc/randpkt.txt \
+                    /usr/share/doc/wireshark-4.4.8 &&
+
+pushd /usr/share/doc/wireshark-4.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-4.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 &&
+chmod -v 6550 /usr/bin/tshark
+

+ 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.11. 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, dumpcap, captype, + 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/{lib,share}/wireshark and + /usr/share/doc/wireshark-4.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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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.34.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ c-ares Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of c-ares +

+

+ Install c-ares by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake  -D CMAKE_INSTALL_PREFIX=/usr .. &&
+make
+

+ This package does not include a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + adig and ahost +
+
+ Installed Libraries: + libcares.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+
+
+
+
+
+
+

+ cURL-8.15.0 +

+
+
+
+
+
+

+ Introduction to cURL +

+

+ The cURL package contains a + utility and a library used for transferring files with URL + syntax to any of the following protocols: DICT, FILE, FTP, + FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, + MQTT, POP3, POP3S, RTSP, SMB, SMBS, SMTP, SMPTS, TELNET, and + TFTP. 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://curl.se/download/curl-8.15.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: b8872bb6cc5d18d03bea8ff5090b2b81 +

    +
  • +
  • +

    + Download size: 2.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 49 MB (add 68 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (add 4.5 SBU for tests + (without valgrind, add 16 SBU with valgrind) all using + parallelism=4) +

    +
  • +
+
+

+ cURL + Dependencies +

+
+ Recommended +
+ +
+

+ Note +

+

+ While there is an option to build the package without + libpsl, both the upstream developers and the BLFS editors + alike highly recommend not disabling support for libpsl due + to severe security implications. +

+
+
+ Recommended at runtime +
+ +
+ Optional +
+

+ Brotli-1.1.0, c-ares-1.34.5, GnuTLS-3.8.10, libidn2-2.3.8, libssh2-1.11.1, MIT Kerberos + V5-1.22.1, nghttp2-1.66.0, OpenLDAP-2.6.10, + Samba-4.22.4 (runtime, for NTLM + authentication), gsasl, + impacket, libmetalink, + librtmp, ngtcp2, + quiche, and + SPNEGO +

+
+ Optional if Running the Test Suite +
+

+ Apache-2.4.65 and stunnel-5.75 (for the + HTTPS and FTPS tests), OpenSSH-10.0p1, and Valgrind-3.25.1 + (this will slow the tests down and may cause failures) +

+
+
+

+ Installation of cURL +

+

+ Install cURL by running the + following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --with-openssl   \
+            --with-ca-path=/etc/ssl/certs &&
+make
+

+ To run the test suite, issue: make test. Some tests are + flaky, so if some tests have failed it's possible to run a + test again with: (cd tests; + ./runtests.pl <test + ID>) (the ID of failed tests + are shown in the “These test cases + failed:” message). If you run the tests + after the package has been installed, some tests may fail + because the man pages were deleted by the 'find' command in + the installation instructions below. +

+

+ Now, as the root user: +

+
make install &&
+
+rm -rf docs/examples/.deps &&
+
+find docs \( -name Makefile\* -o  \
+             -name \*.1       -o  \
+             -name \*.3       -o  \
+             -name CMakeLists.txt \) -delete &&
+
+cp -v -R docs -T /usr/share/doc/curl-8.15.0
+

+ To run some simple verification tests on the newly installed + curl, issue the + following commands: curl + --trace-ascii debugdump.txt + https://www.example.com/ and curl --trace-ascii d.txt --trace-time + https://example.com/. Inspect the locally + created trace files debugdump.txt and d.txt, which contains version information, + 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. +

+

+ --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 option is not needed if + --with-gnutls is selected + instead. +

+

+ --with-gssapi: This parameter + adds Kerberos 5 support to + libcurl. +

+

+ --with-gnutls: Use this switch 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. +

+

+ 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-8.15.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 +

+
+
+
+
+
+
+
+

+ GeoClue-2.7.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GeoClue Dependencies +

+
+ Required +
+

+ JSON-GLib-1.10.6 and libsoup-3.6.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of GeoClue +

+

+ Install GeoClue by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk-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. +

+

+ -D 3g-source=false: This switch + disables the 3G backend. Use it if you have not installed the + ModemManager package. +

+

+ -D modem-gps-source=false: This + switch disables the modem GPS backend. Use it if you have not + installed the ModemManager + package. +

+

+ -D cdma-source=false: This switch + disables the CDMA source backend. Use it if you have not + installed the ModemManager + package. +

+

+ -D nmea-source=false: This switch + disables the NMEA source. Use it if you have not installed + the Avahi package. +

+

+ -D demo-agent=false: This switch + disables the demo. Use it if you have not installed the + libnotify package. +

+
+
+

+ Configuring GeoClue +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/geoclue/conf.d/90-lfs-google.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ In March of 2024, Mozilla announced the shutdown of the + Mozilla Location Service. Geoclue uses this service for + determining a user's location when requested by other + applications. The only supported alternative by upstream is + to use Google's Geolocation Service. +

+

+ To use Google's Geolocation Service, an API key must be + used, and a configuration file must be created. + This API key is only intended + for use with LFS. Please do not use this API key if you are + building for another distro or distributing binary copies. + If you need an API key, you can request one at https://www.chromium.org/developers/how-tos/api-keys. +

+

+ Create the configuration needed for using Google's + Geolocation Service as the root user: +

+
cat > /etc/geoclue/conf.d/90-lfs-google.conf << "EOF"
+# Begin /etc/geoclue/conf.d/90-lfs-google.conf
+
+# This configuration applies for the WiFi source.
+[wifi]
+
+# Set the URL to Google's Geolocation Service.
+url=https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ
+
+# End /etc/geoclue/conf.d/90-lfs-google.conf
+EOF
+

+ If you do not wish to request your location from a + Geolocation service, you can hardcode your location in + /etc/geolocation using the + format described in geoclue(5). +

+
+
+
+

+ 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} +
+
+
+
+
+
+
+
+

+ glib-networking-2.80.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GLib + Networking Dependencies +

+
+ Required +
+

+ GLib-2.84.4 and GnuTLS-3.8.10 +

+
+ Recommended +
+ +
+ Optional +
+

+ libproxy-0.5.10 +

+
+
+

+ Installation of GLib Networking +

+

+ Install GLib Networking by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup             \
+   --prefix=/usr        \
+   --buildtype=release  \
+   -D libproxy=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. +

+

+ -D libproxy=disabled: + This switch disables libproxy support. If you wish to build + with libproxy to allow this package to retrieve proxy + settings via it's API, remove this switch. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Libraries: + libgiognomeproxy.so and + libgiognutls.so (GIO Modules installed in /usr/lib/gio/modules) +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ kdsoap-2.2.0 +

+
+
+
+
+
+

+ Introduction to kdsoap +

+

+ The kdsoap is Qt-based + client-side and server-side SOAP component. It can be used to + create client applications for web services and also provides + the means to create web services without the need for any + further component such as a dedicated web server. +

+

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

+

+ Package Information +

+
+ +
+

+ kdsoap Dependencies +

+
+ Required +
+

+ Qt-6.9.2 +

+
+
+

+ Installation of kdsoap +

+

+ Install kdsoap by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D KDSoap_QT6=ON             \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/kdsoap-2.2.0 \
+      .. &&
+make
+

+ The package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + kdwsdl2cpp-qt6 +
+
+ Installed Libraries: + libkdsoap-qt6.so and + libkdsoap-server-qt6.so +
+
+ Installed Directories: + /usr/lib/cmake/KDSoap-Qt6, + /usr/share/doc/kdsoap-2.2.0-qt6, + /usr/include/KDSoapClient-Qt6. and + /usr/include/KDSoapServer-Qt6 +
+
+
+
+
+
+
+
+

+ kdsoap-ws-discovery-client-0.4.0 +

+
+
+
+
+
+

+ Introduction to kdsoap-ws-discovery-client +

+

+ The kdsoap-ws-discovery-client package + contains a library that provides support for the WS-Discovery + protocol, a recent protocol used to discover services + available on a local network. +

+

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

+

+ Package Information +

+
+ +
+

+ kdsoap-ws-discovery-client + Dependencies +

+
+ Required +
+

+ Doxygen-1.14.0, extra-cmake-modules-6.17.0, + and kdsoap-2.2.0 +

+
+
+

+ Installation of kdsoap-ws-discovery-client +

+

+ Install kdsoap-ws-discovery-client by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr    \
+      -D CMAKE_BUILD_TYPE=Release     \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON  \
+      -D QT_MAJOR_VERSION=6           \
+      -W no-dev .. &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install &&
+mv -v /usr/share/doc/KDSoapWSDiscoveryClient{,-0.4.0}
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ mv -v + /usr/share/doc/KDSoapWSDiscoveryClient[...]:: + This command moves the documentation to a versioned + directory. +

+

+ -D + QT_MAJOR_VERSION=6: This parameter tells the + build system to build the Qt6 version of this package instead + of the Qt5 version. +

+

+ -D BUILD_QCH=ON: This option + tells the build system to create documentation that can be + used with QtCreator, QtAssistant, or KDevelop. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libKDSoapWSDiscoveryClient.so +
+
+ Installed Directories: + /usr/include/KDSoapWSDiscoveryClient, + /usr/lib/cmake/KDSoapWSDiscoveryClient, and + /usr/share/doc/KDSoapWSDiscoveryClient-0.4.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libKDSoapWSDiscoveryClient.so +

+
+

+ provides an implementation of the WS-Discovery + protocol using KDSoap +

+
+
+
+
+
+
+
+

+ ldns-1.8.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ldns + Dependencies +

+
+ Optional +
+

+ make-ca-1.16.1 and libpcap-1.10.5 (for + example programs), SWIG-4.3.1 (for Python bindings), and + Doxygen-1.14.0 (for html documentation) +

+
+
+

+ 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.14.0 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.8.4 &&
+install -v -m644 doc/html/* /usr/share/doc/ldns-1.8.4
+
+
+

+ 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. If you use this + option, you will need to add PYTHON=/usr/bin/python3 to the + configure line as well. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + drill and ldns-config +
+
+ Installed Library: + libldns.so +
+
+ Installed Directories: + /usr/include/ldns and + /usr/share/doc/ldns-1.8.4 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ drill +

+
+

+ is a tool like dig from + BIND Utilities-9.20.12 + 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libevent Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (for API documentation) +

+
+
+

+ Installation of libevent +

+

+ First, fix an issue that prevents event_rpcgen.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.14.0 installed and wish to + build API documentation, issue : +

+
doxygen Doxyfile
+

+ To test the results, issue: make verify. Six tests in + every suite related to regress_ssl.c and regress_http.c are known to fail due to + incompatibilities with OpenSSL-3. Some tests that are related + to regress_dns.c are also known + to fail intermittently due to insufficient test timeouts. +

+

+ 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 +
+
+
+
+
+
+
+
+

+ libmnl-1.0.5 +

+
+
+
+
+
+

+ Introduction to libmnl +

+

+ The libmnl library provides + a minimalistic userspace library oriented to Netlink + developers. There are a lot of common tasks in the parsing, + validating, and constructing of both the Netlink header and + TLVs that are repetitive and easy to get wrong. This library + aims to provide simple helpers that allow you to re-use code + and to avoid re-inventing the wheel. +

+

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

+

+ Package Information +

+
+ +
+

+ libnma Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libndp-1.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): http://libndp.org/files/libndp-1.9.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 9d486750569e7025e5d0afdcc509b93c +

    +
  • +
  • +

    + Download size: 368 KB +

    +
  • +
  • +

    + Estimated disk space required: 2.5 MB +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU +

    +
  • +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libnl-3.11.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Optional Download +

+
+ +
+
+
+

+ Installation of libnl +

+

+ Install libnl by running the + following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-static  &&
+make
+
+

+ Note +

+

+ If the make + command was executed with multiple parallel jobs enabled, + it might disrupt the terminal mode and cause some + “amusing” visual effects. In the worst + case, this issue may cause keyboard inputs not displayed on + the screen at all (but you can still run any command if you + can type it correctly). Run the reset command to fix such + an issue. +

+
+

+ If you wish to run the tests, check that the following + options are enabled in the kernel configuration and recompile + the kernel if necessary. Some of them may not be strictly + needed, but they should support a complete test coverage. +

+
General setup --->
+  -*- Namespaces support --->                                       [NAMESPACES]
+    [*] User namespace                                                 [USER_NS]
+    [*] Network namespace                                               [NET_NS]
+
+[*] Networking support --->                                                [NET]
+  Networking options --->
+    [*]   TCP/IP networking                                               [INET]
+    [*]     IP: advanced router                             [IP_ADVANCED_ROUTER]
+    [*]       IP: policy routing                            [IP_MULTIPLE_TABLES]
+    <*/M>   IP: tunneling                                             [NET_IPIP]
+    <*/M>   IP: GRE demultiplexer                              [NET_IPGRE_DEMUX]
+    <*/M>   IP: GRE tunnels over IP                                  [NET_IPGRE]
+    <*/M>   Virtual (secure) IP: tunneling                           [NET_IPVTI]
+    <*>     The IPv6 protocol --->                                        [IPV6]
+      <*/M>   IPv6: IPv6-in-IPv4 tunnel (SIT driver)                  [IPV6_SIT]
+      <*/M>   IPv6: IP-in-IPv6 tunnel (RFC2473)                    [IPV6_TUNNEL]
+      [*]     IPv6: Multiple Routing Tables               [IPV6_MULTIPLE_TABLES]
+    [*]   Network packet filtering framework (Netfilter) --->        [NETFILTER]
+      Core Netfilter Configuration --->
+        <*/M> Netfilter nf_tables support                            [NF_TABLES]
+        [*]     Netfilter nf_tables netdev tables support     [NF_TABLES_NETDEV]
+        {*/M}   Netfilter packet duplication support             [NF_DUP_NETDEV]
+        <*/M>   Netfilter nf_tables netdev packet forwarding support
+                                                           ...  [NFT_FWD_NETDEV]
+    <*/M> 802.1d Ethernet Bridging                                      [BRIDGE]
+    <*/M> 802.1Q/802.1ad VLAN Support                               [VLAN_8021Q]
+    -*-   L3 Master device support                           [NET_L3_MASTER_DEV]
+
+Device Drivers --->
+  [*] Network device support --->                                   [NETDEVICES]
+    [*]   Network core driver support                                 [NET_CORE]
+    <*/M>   Bonding driver support                                     [BONDING]
+    <*/M>   Dummy net driver support                                     [DUMMY]
+    <*/M>   Intermediate Functional Block support                          [IFB]
+    <*/M>   MAC-VLAN support                                           [MACVLAN]
+    <*/M>     MAC-VLAN based tap driver                                [MACVTAP]
+    <*/M>   IP-VLAN support                                             [IPVLAN]
+    <*/M>   Virtual eXtensible Local Area Network (VXLAN)                [VXLAN]
+    <*/M>   IEEE 802.1AE MAC-level encryption (MACsec)                  [MACSEC]
+    <*/M>   Virtual ethernet pair device                                  [VETH]
+    <*/M>   Virtual Routing and Forwarding (Lite)                      [NET_VRF]
+

+ 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.11.0 &&
+tar -xf ../libnl-doc-3.11.0.tar.gz --strip-components=1 --no-same-owner \
+    -C  /usr/share/doc/libnl-3.11.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.11.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 +

+
+
+
+
+
+
+
+

+ libnma-1.10.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libnma Dependencies +

+
+ Required +
+

+ Gcr-3.41.2, GTK-3.24.50, ISO Codes-4.18.0, + and NetworkManager-1.54.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ + mobile-broadband-provider-info +

+
+
+

+ Installation of libnma +

+

+ Install libnma by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gtk_doc=false    \
+      -D libnma_gtk4=true \
+      -D mobile_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. +

+

+ -D gtk_doc=false: + This parameter disables generating API documentation using + gtk-doc. If you have GTK-Doc-1.34.0 installed and wish to + generate the API documentation, omit this switch. +

+

+ -D libnma_gtk4=true: + This parameter builds the GTK-4 version of libnma. It is + needed by gnome-control-center-48.4. +

+

+ -D + mobile_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 and libnma-gtk4.so +
+
+ Installed Directories: + /usr/include/libnma +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libnma.so +

+
+

+ contains the NetworkManager GUI library +

+
+

+ libnma-gtk4.so +

+
+

+ contains the GTK-4 version of the NetworkManager GUI library +

+
+
+
+
+
+
+
+

+ libnsl-2.0.1 +

+
+
+
+
+
+

+ Introduction to libnsl +

+

+ The libnsl package contains + the public client interface for NIS(YP). It replaces the NIS + library that used to be in glibc. +

+

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

+

+ Package Information +

+
+ +
+

+ libnsl Dependencies +

+
+ Required +
+

+ libtirpc-1.3.6 +

+
+
+

+ Installation of libnsl +

+

+ Install libnsl by running + the following commands: +

+
./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: + /usr/include/rpcsvc +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libnsl.so +

+
+

+ provides the NIS (YP) API functions required by + other programs +

+
+
+
+
+
+
+
+

+ libpcap-1.10.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libpcap Dependencies +

+
+ Optional +
+

+ BlueZ-5.83, libnl-3.11.0, libusb-1.0.29, Software + distribution for the DAG, and Septel range of passive network + monitoring cards. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libpsl-0.21.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libpsl Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for documentation), + ICU-77.1 + (may be used instead of libidn2), libidn-1.43 (may be used + instead of libidn2), Valgrind-3.25.1 (for tests) +

+
+
+

+ Installation of libpsl +

+

+ Install libpsl by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release &&
+
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libslirp-4.9.1 +

+
+
+
+
+
+

+ Introduction to libslirp +

+

+ Libslirp is a user-mode + networking library used by virtual machines, containers or + various tools. +

+

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

+

+ Package Information +

+
+ +
+

+ libslirp Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+
+

+ Installation of Libslirp +

+

+ Install libslirp by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+
+ninja
+

+ To test the results, issue: ninja test +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 Library: + libslirp.so +
+
+ Installed Directory: + /usr/include/slirp +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libclirp.so +

+
+

+ contains user-mode TCP-IP emulation functions +

+
+
+
+
+
+
+
+

+ libsoup-3.6.5 +

+
+
+
+
+
+

+ Introduction to libsoup3 +

+

+ The libsoup3 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libsoup3 Dependencies +

+
+ Required +
+

+ glib-networking-2.80.1, + libpsl-0.21.5, libxml2-2.14.5, + nghttp2-1.66.0, and SQLite-3.50.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ Apache-2.4.65 (required to run the test + suite), Brotli-1.1.0, cURL-8.15.0 (required to run the test + suite), Gi-DocGen-2025.4, MIT Kerberos + V5-1.22.1 (required to run the test suite), PHP-8.4.11 compiled + with XMLRPC-EPI support (only used for the XMLRPC regression + tests), Samba-4.22.4 (ntlm_auth is required to run + the test suite), sysprof, and + wstest +

+
+
+

+ Installation of libsoup3 +

+

+ Fix the installation path of API documentation: +

+
sed 's/apiversion/soup_version/' -i docs/reference/meson.build
+

+ Install libsoup3 by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr          \
+            --buildtype=release    \
+            --wrap-mode=nofallback \
+            ..                     &&
+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. +

+

+ --wrap-mode=nofallback: This + switch prevents meson from using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are not installed on the system. +

+

+ -D docs=enabled: If Gi-DocGen-2025.4 is installed, the API + documentation will be built and installed no matter if this + option is used or not. This option causes the meson command to fail if + Gi-DocGen-2025.4 is not installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libsoup-3.0.so +
+
+ Installed Directories: + /usr/include/libsoup-3.0, + /usr/share/doc/libsoup-3.6.5 (only installed if gi-docgen + is available) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libsoup-3.0.so +

+
+

+ provides functions for asynchronous HTTP + connections +

+
+
+
+
+
+
+
+

+ libtirpc-1.3.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ libtirpc Dependencies +

+
+ Optional +
+

+ MIT Kerberos V5-1.22.1 for + GSSAPI support +

+
+
+

+ Installation of libtirpc +

+
+

+ Note +

+

+ If updating this package, you will also need to update any + existing version of rpcbind-1.2.8 +

+
+

+ First, apply a patch to make the package compatible with + gcc-15: +

+
patch -Np1 -i ../libtirpc-1.3.6-gcc15_fixes-1.patch
+

+ Install libtirpc by running + the following commands: +

+
./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 providers are installed, + such as MIT Kerberos V5-1.22.1. Remove + this switch if you have installed MIT Kerberos + V5-1.22.1 and you need to use the GSSAPI support. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ neon-0.35.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://notroj.github.io/neon/neon-0.35.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 6fa30b9c2720b70761a2d1eb50e76471 +

    +
  • +
  • +

    + Download size: 928 KB +

    +
  • +
  • +

    + Estimated disk space required: 7.1 MB (additional 321 + MB for tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (add 0.4 SBU + for tests) +

    +
  • +
+
+

+ neon + Dependencies +

+
+ Optional +
+

+ GnuTLS-3.8.10, libproxy-0.5.10, + libxml2-2.14.5, MIT Kerberos + V5-1.22.1, nss-3.115 (for some tests), xmlto-0.0.29 (to + regenerate the documentation), and PaKChoiS +

+
+
+

+ 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. +

+

+ If you wish to regenerate the documentation, issue: +

+
make docs
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --with-ssl: This + switch enables SSL support using OpenSSL. GnuTLS can be used instead, by passing + --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. +

+

+ --with-libproxy: This switch + enables support for using libproxy to retrieve proxy server + information. Use this switch if you have libproxy-0.5.10 + installed and wish to use it. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + neon-config +
+
+ Installed Library: + libneon.so +
+
+ Installed Directories: + /usr/include/neon and + /usr/share/doc/neon-0.35.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ neon-config +

+
+

+ is a script that provides information about an + installed copy of the neon library +

+
+

+ libneon.so +

+
+

+ is used as a high-level interface to common HTTP + and WebDAV methods +

+
+
+
+
+
+
+
+

+ nghttp2-1.66.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ nghttp2 Dependencies +

+
+ Recommended +
+

+ libxml2-2.14.5 +

+
+ Optional +
+

+ The following are only used if building the full package + instead of only the main libraries: Boost-1.89.0, c-ares-1.34.5, cython-3.1.3, jansson-2.14.1, libevent-2.1.12, + sphinx-8.2.3, jemalloc, libev, + mruby, and + Spdylay. +

+
+
+

+ Installation of nghttp2 +

+

+ Install nghttp2 by running + the following commands: +

+
./configure --prefix=/usr     \
+            --disable-static  \
+            --enable-lib-only \
+            --docdir=/usr/share/doc/nghttp2-1.66.0 &&
+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-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.66.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libnghttp2.so +

+
+

+ an implementation of the Hypertext Transfer + Protocol version 2 in C +

+
+
+
+
+
+
+
+

+ rpcsvc-proto-1.4.4 +

+
+
+
+
+
+

+ 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.6, along with the rpcgen + program. +

+

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

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Serf-1.3.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Serf + Dependencies +

+
+ Required +
+

+ Apr-Util-1.6.3 and SCons-4.9.1 +

+
+ Optional +
+

+ MIT Kerberos V5-1.22.1 (for + GSSAPI support) +

+
+
+

+ 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 &&
+
+scons PREFIX=/usr
+

+ This package does not come with a functional test suite. +

+

+ 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. +

+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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 Firefox/Falkon/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 two console web browsers: +

+
+
+
+

+ Links-2.30 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Links Dependencies +

+
+ Recommended +
+ +
+ 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 a graphical + environment +

+

+ For decoding various image formats Links can utilize libavif-1.3.0, libpng-1.6.50, libjpeg-turbo-3.0.1, librsvg-2.61.0, and libtiff-4.7.0 +

+

+ For decompressing web pages that are compressed with Brotli, + Links can utilize Brotli-1.1.0 +

+
+
+

+ 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.30 &&
+install -v -m644 doc/links_cal/* KEYS BRAILLE_HOWTO \
+    /usr/share/doc/links-2.30
+
+
+

+ 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.30 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ links +

+
+

+ is a text and graphics mode WWW browser +

+
+
+
+
+
+
+
+

+ Lynx-2.9.2 +

+
+
+
+
+
+

+ Introduction to Lynx +

+

+ Lynx is a text based web + browser. +

+

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

+

+ Package Information +

+
+ +
+
+ Optional +
+

+ GnuTLS-3.8.10 (experimental, to replace + openssl), libarchive-3.8.1, Zip-3.0, an MTA (that + provides a sendmail command), and + Sharutils-4.15.2 (for the uudecode program) +

+
+
+

+ Installation of Lynx +

+

+ Install Lynx by running the + following commands: +

+
./configure --prefix=/usr           \
+            --sysconfdir=/etc/lynx  \
+            --with-zlib             \
+            --with-bzlib            \
+            --with-ssl              \
+            --with-screen=ncursesw  \
+            --enable-locale-charset \
+            --datadir=/usr/share/doc/lynx-2.9.2 &&
+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.9.2/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.9.2: + This parameter is used so that the documentation files are + installed into /usr/share/doc/lynx-2.9.2 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.9.2/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-9.1.1629, 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.9.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lynx +

+
+

+ is a general purpose, text-based, distributed + information browser for the World Wide Web +

+
+
+
+
+
+
+
+
+

+ 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.5.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Fetchmail Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ MIT Kerberos V5-1.22.1 and + libgssapi +

+
+ Optional (for running fetchmailconf) +
+

+ Python-3.13.7, built after Tk-8.6.16, with the + py-future package +

+
+
+

+ 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: +

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

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install &&
+chown -v fetchmail:nogroup /usr/bin/fetchmail
+
+
+

+ 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 uses the Tkinter module +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Heirloom mailx Dependencies +

+
+ Optional +
+

+ nss-3.115, + MIT Kerberos V5-1.22.1 (for IMAP + GSSAPI authentication), and an MTA +

+
+
+

+ 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/" \
+         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 and ~/.mailrc +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ For displaying mails, mailx uses a pager program. Since the + default of pg + is not available on a LFS system, its required to specify + which pager is to use. By default, there is more and the more + comfortable less installed. If the + variable PAGER is not set in /etc/profile or ~/.bash_profile, or if it should be + another pager just for reading mails, it can be set system + wide in /etc/nail.rc: +

+
echo "set PAGER=<more|less>" >> /etc/nail.rc
+

+ or individually for the actual user in ~/.mailrc: +

+
echo "set PAGER=<more|less>" >> ~/.mailrc
+

+ Other interesting options to set in the config files might + be EDITOR and MAILDIR. +

+

+ If not set in the environment for other packages, the + default editor can be set by: +

+
echo "set EDITOR=<vim|nano|...>" >> /etc/nail.rc
+

+ Depending on which kind of MTA is + installed, it might be required to set the MAILDIR variable + so mailx is able to find + the mails: +

+
echo "set MAILDIR=Maildir" >> /etc/nail.rc
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Mutt-2.2.14 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Mutt + Dependencies +

+
+ Recommended (for a text version of + the manual) +
+ +
+ Optional +
+

+ Aspell-0.60.8.1, Cyrus + SASL-2.1.28, DocBook-utils-0.6.14, GDB-16.3, GnuPG-2.4.8, + GnuTLS-3.8.10, gpgme-2.0.0 (currently + broken), libidn-1.43, MIT Kerberos V5-1.22.1, an + MTA (that + provides a sendmail command), + slang-2.3.3, SQLite-3.50.4, libgssapi, + Mixmaster, QDBM or Tokyo + Cabinet +

+

+ Editor 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 (as the root user): +

+
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  -e 's/ -with_backspaces//' \
+     -e 's/elinks/links/'       \
+     -e 's/-no-numbering -no-references//' \
+     -i doc/Makefile.in
+

+ Now configure and build the application: +

+
./configure --prefix=/usr                            \
+            --sysconfdir=/etc                        \
+            --with-docdir=/usr/share/doc/mutt-2.2.14 \
+            --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 management + 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.28 + 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. +

+

+ --with-gss: This parameter adds + authentication support for Kerberos. If you need to use this + support, make sure that MIT Kerberos V5-1.22.1 is + installed and configured correctly, and then use this option + while building this package. +

+
+
+

+ 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.2.14/samples/gpg.rc >> ~/.muttrc
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + flea, mutt, mutt_dotlock, muttbug, + pgpewrap, mutt_pgpring, and smime_keys +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/mutt-2.2.14 +
+
+
+
+

+ 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.4.8 + utilities +

+
+

+ pgpring +

+
+

+ is a key ring dumper for PGP. It is not + needed for GnuPG-2.4.8 +

+
+

+ smime_keys +

+
+

+ manages a keystore for S/MIME certificates +

+
+
+
+
+
+
+
+

+ Procmail-3.24 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Procmail Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ libnsl-2.0.1 +

+
+
+

+ Installation of Procmail +

+

+ This package does not come with a test suite. +

+

+ Install Procmail by running + the following commands as the root user: +

+
patch -Np1 -i ../procmail-3.24-consolidated_fixes-1.patch               &&
+
+make CC="gcc -std=gnu17" LOCKINGTEST=/tmp MANDIR=/usr/share/man install &&
+make install-suid
+
+
+

+ Command Explanations +

+

+ make LOCKINGTEST=/tmp + install: This prevents make from asking you where + to test file-locking patterns. +

+

+ CC="gcc + -std=gnu17": This sets the C standard to C17 + because this package is not compatible with C23, and no fixes + are readily available. +

+

+ 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 + https://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) +

+
+
+
+
+
+
+
+

+ Other Mail and News Programs +

+
+
+
+
+

+ Balsa-2.6.5 is a GTK2 based mail client. +

+

+ seamonkey-2.53.21 includes both a mail + client and newsreader in its installation. +

+

+ Thunderbird-140.2.0esr is a + mail/news client based on the Mozilla code base. +

+

+ Evolution-3.56.2 is a mail client and + organizer from the GNOME + desktop. +

+
+
+
+
+
+
+

+ 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.65 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Apache HTTPD Dependencies +

+
+ Required +
+

+ Apr-Util-1.6.3 and pcre2-10.45 +

+
+ Optional +
+

+ Brotli-1.1.0, Doxygen-1.14.0, + jansson-2.14.1, libxml2-2.14.5, + Lua-5.4.8, + Lynx-2.9.2 or Links-2.30 or ELinks, nghttp2-1.66.0, + OpenLDAP-2.6.10 (Apr-Util-1.6.3 needs + to be installed with ldap support), rsync-3.4.1, + Berkeley DB (deprecated), and Distcache +

+
+
+

+ 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-blfs_layout-1.patch             &&
+
+sed '/dir.*CFG_PREFIX/s@^@#@' -i support/apxs.in       &&
+
+sed -e '/HTTPD_ROOT/s:${ap_prefix}:/etc/httpd:'       \
+    -e '/SERVER_CONFIG_FILE/s:${rel_sysconfdir}/::'   \
+    -e '/AP_TYPES_CONFIG_FILE/s:${rel_sysconfdir}/::' \
+    -i configure  &&
+
+./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-uidmin=100                \
+            --with-suexec-userdir=public_html       \
+            --with-suexec-logfile=/var/log/httpd/suexec.log &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root 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. +

+

+ sed -e '/HTTPD_ROOT/s + ...: Fixes some paths. +

+

+ --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. +

+

+ There is no reason, at least for internet facing sites, not + to use SSL encryption. Setting up a secured website does + not cost anything except installing one additional small + tool and a few minutes of configuration work. Use this + guideline at + https://wiki.linuxfromscratch.org/blfs/wiki/Securing_a_website + to create world-wide accepted certificates and renew them + on a regular basis. +

+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ If you want the Apache + server to start automatically when the system is booted, + install the /etc/rc.d/init.d/httpd init script + included in the blfs-bootscripts-20250225 package: +

+
make install-httpd
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ab, apachectl, apxs, checkgid, + dbmmanage, fcgistarter, htcacheclean, htdbm, htdigest, + htpasswd, httpd, httxt2dbm, logresolve, and + rotatelogs +
+
+ 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 +

+
+
+
+
+
+
+
+

+ BIND-9.20.12 +

+
+
+
+
+
+

+ 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.20.12. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.isc.org/isc/bind9/9.20.12/bind-9.20.12.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: b900609638c5f3ab561ac9d4b45e85f2 +

    +
  • +
  • +

    + Download size: 5.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 137 MB (22 MB installed) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (with parallelism=4; + about 40 minutes somewhat processor independent, to run + the complete test suite) +

    +
  • +
+
+

+ BIND + Dependencies +

+
+ Required +
+

+ liburcu-0.15.3 and libuv-1.51.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ cURL-8.15.0, libidn2-2.3.8, libxml2-2.14.5, lmdb-0.9.33, MIT Kerberos + V5-1.22.1, pytest-8.4.1, sphinx-8.2.3 (required to + build documentation), cmocka, geoip, jemalloc, + w3m +

+
+ Optional (to run the test suite) +
+

+ Net-DNS-1.52 and hypothesis +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/bind +

+
+
+

+ Installation of BIND +

+

+ Install BIND by running the + following commands: +

+
./configure --prefix=/usr           \
+            --sysconfdir=/etc       \
+            --localstatedir=/var    \
+            --mandir=/usr/share/man \
+            --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” or do even fail if Net-DNS-1.52 is not installed. One test, + dnssec, is known to fail. The + tests require the hypothesis python + module, which is not in BLFS. To work around this, the + instructions below create a Python virtual environment and + then install the module in there before running the tests. To + run the tests, as an unprivileged user, execute: +

+
python3 -m venv --system-site-packages testenv &&
+source testenv/bin/activate                    &&
+pip3 install hypothesis                        &&
+make -k check                                  &&
+deactivate
+

+ 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-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-doh: Use this option if + you do not have nghttp2-1.66.0 installed and do not need + support for DNS over HTTPS. +

+

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

+

+ --system-site-packages: Allow + the Python3 venv module to + access the system-installed /usr/lib/python3.13/site-packages + directory. +

+
+
+

+ 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
+

+ Create 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       170.247.170.2
+B.ROOT-SERVERS.NET.     6D  IN      AAAA    2801:1b8:10::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 https://www.internic.net/domain/named.root. + For details, consult the "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
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To start the DNS server at boot, install the /etc/rc.d/init.d/bind init script + included in the blfs-bootscripts-20250225 package: +

+
make install-bind
+

+ Now start BIND with the + following command: +

+
/etc/rc.d/init.d/bind start
+
+
+
+
+
+

+ 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 + (see below) for further configuration options. +

+
+
+
+

+ Administrator Reference Manual (ARM) +

+

+ The ARM documentation (do not confuse with the processor + architecture) is included in the source package. The + documentation is in .rst format which means that it can be + converted in human readable formats if sphinx-8.2.3 is installed. +

+

+ When BIND is set up, + especially if it is going to be operating in a real live + scenario, it is highly + recommended to consult the ARM documentation. ISC provides an + updated set of excellent documentation along with every + release so it can be easily viewed and/or downloaded – so + there is no excuse to not read the docs. The formats ISC + provides are epub and html at https://downloads.isc.org/isc/bind9/9.20.12/doc/arm/. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + arpaname, ddns-confgen, delv, dig, + dnssec-cds, dnssec-dsfromkey, dnssec-importkey, + dnssec-keyfromlabel, dnssec-keygen, dnssec-ksr, + dnssec-revoke, dnssec-settime, dnssec-signzone, + dnssec-verify, host, mdig, named, named-checkconf, + named-checkzone, named-compilezone, named-journalprint, + named-nzd2nzf, named-rrchecker, nsec3hash, nslookup, + nsupdate, rndc, rndc-confgen, and tsig-keygen + (symlink) +
+
+ Installed Libraries: + libdns.so, libisc.so, libisccc.so, + libisccfg.so, and libns.so +
+
+ Installed Directories: + /usr/include/{dns,dst,irs,isc,isccc,isccfg,ns}, + /usr/lib/bind, 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-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-keymgr +

+
+

+ ensures correct DNSKEY coverage based on a defined + policy +

+
+

+ dnssec-ksr +

+
+

+ creates signed key response (SKR) files for offline + KSK setups +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Kea 3.0.1 DHCP Server +

+
+
+
+
+
+

+ Introduction to ISC Kea DHCP Server +

+

+ The ISC Kea package contains + the server programs for DHCP. It is the successor of the old + ISC DHCP server which is end-of-life since December 2022. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.isc.org/isc/kea/3.0.1/kea-3.0.1.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: fc0e6d43f0afbab9e2abc458bded16ac +

    +
  • +
  • +

    + Download size: 6.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.5 GB (332 MB + installed; add 4 GB for tests) +

    +
  • +
  • +

    + Estimated build time: 4.1 SBU (with parallelism=4; add + 12 SBU for tests) +

    +
  • +
+
+

+ Kea + Dependencies +

+
+ Required +
+

+ Boost-1.89.0 and log4cplus-2.1.2 +

+
+ Optional +
+

+ botan, MIT Kerberos + V5-1.22.1, Valgrind-3.25.1; for documentation: + Doxygen-1.14.0, Graphviz-13.1.2, and + sphinx_rtd_theme-3.0.2 +

+
+ Optional database backends +
+

+ MariaDB-11.8.3 or MySQL, and PostgreSQL-17.6 +

+
+
+

+ Kernel + Configuration +

+

+ You must have Packet Socket support. IPv6 support is + optional. +

+
[*] Networking support --->                                                [NET]
+  Networking options --->
+    <*/M> Packet socket                                                 [PACKET]
+    [*]   TCP/IP networking                                               [INET]
+    <*>     The IPv6 protocol --->                                        [IPV6]
+
+
+

+ Installation of ISC Kea DHCP Server +

+

+ First, apply a few fixes required for boost-1.89.0: +

+
sed -e "s/, modules: \['system'\]//" -i meson.build                      &&
+sed -e "/shared_ptr.hpp/a#include <boost/asio/deadline_timer.hpp>"       \
+    -i src/lib/asiolink/interval_timer.cc                                &&
+sed -e "/posix_time_types.hpp/a#include <boost/asio/deadline_timer.hpp>" \
+    -i src/lib/asiodns/io_fetch.cc                                       &&
+sed -e "/posix_time_types.hpp/a#include <boost/asio/deadline_timer.hpp>" \
+    -i src/lib/asiodns/tests/io_fetch_unittest.cc
+

+ Now, install ISC Kea DHCP + Server by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --sysconfdir=/etc    \
+      --localstatedir=/var \
+      --buildtype=release  \
+      -D crypto=openssl    \
+      -D runstatedir=/run  &&
+
+ninja
+

+ If tests were enabled, run ninja test to test the + results. There are tests which require a live database when + any of the database hooks are built. +

+

+ To install the ISC Kea DHCP + Server suite, issue the following commands as the + root user: +

+
ninja install
+

+ Fix some paths coded in the keactrl script: +

+
sed -e "s;\${prefix}/;;" -i /usr/sbin/keactrl
+

+ Create some directories and fix their permission settings as + the root user: +

+
install -dm0750 /var/lib/kea
+install -dm0750 /var/log/kea
+
+
+

+ Command Explanations +

+

+ -D crypto=openssl: Allows using + OpenSSL for communicating with the control-agent and for DNS + updates. Use -D crypto=botan if + you want to use botan. Default is openssl. +

+

+ -D postgresql=enabled or + -D mysql=enabled: ISC Kea can store the leases on a + database. This might be useful in large environments running + a cluster of DHCP servers. Using the memfile backend (which is a CSV + file stored locally) is possible anyhow. +

+

+ -D tests=enabled: This option is + required to build the test suite. Drop it if you are not + going to run the tests. +

+

+ -D krb5=enabled: This switch + enables integration with Kerberos for authenticating client + computers in an enterprise environment. +

+
+
+

+ Configuring ISC Kea DHCP Server +

+

+ The support of IPv4, IPv6 and DDNS has been split into + separate servers which runs independently from each other. + Each of them has its own configuration file. Additional configuration files come from the keactrl + agent which is used to control the servers in an easy + way. +

+

+ Note that the Kea Control Agent is deprecated since version + 3.0.0. Do not confuse kea-ctrl-agent with keactrl. +

+

+ Consult the Kea Administrator + Reference Manual for detailed information about the + configuration of ISC Kea as + it is a quite capable system. The configuration shown below + is a bare minimum to get a DHCP server running but it already + includes configuration for DDNS (Dynamic DNS). That setup + might be working for small networks with a few clients and + low traffic. For greater installations with thousands of + clients, ISC Kea can be + configured to use databases (mariadb or postgresql) to store + the leases and build a cluster with multiple nodes. It can be + integrated to ISC Stork which + is a management dashboard to ISC + Kea. +

+

+ If you want to start the DHCP Server at boot, install the + /etc/rc.d/init.d/kea-dhcpd init + script included in the blfs-bootscripts-20250225 package: +

+
make install-kea-dhcpd
+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/kea/keactrl.conf, + /etc/kea/kea-ctrl-agent.conf, + /etc/kea/kea-dhcp4.conf, + /etc/kea/kea-dhcp6.conf, and + /etc/kea/kea-dhcp-ddns.conf +

+
+
+
+
+
+

+ Kea + Control Configuration +

+
+
+
+

+ keactrl is + used to control the independent servers (IPv4, IPv6, DDNS). + Its configuration file /etc/kea/keactrl.conf is installed by + default and includes many path settings which are defined + due to the configure at build time. + It also includes settings to specify which of the servers + should be started. +

+
+
    +
  • +

    + Control Agent +

    +

    + The Control Agent is a daemon which allows the + (re)configuration of the Kea DHCP service via REST + API. Set ctrl_agent=yes + to start the control agent (service providing a REST + API), set ctrl_agent=no + in case the control agent is not needed. +

    +
  • +
  • +

    + IPv4 DHCP server +

    +

    + This daemon handles requests for IPv4 addresses. Set + dhcp4=yes to start it, + set dhcp4=no in case + DHCP service for IPv4 is not wanted. +

    +
  • +
  • +

    + IPv6 DHCP server +

    +

    + This daemon handles requests for IPv6 addresses. Set + dhcp6=yes to start it, + set dhcp6=no in case + DHCP service for IPv6 is not wanted. +

    +
  • +
  • +

    + Dynamic DNS +

    +

    + This daemon is used to update a DNS server + dynamically when Kea assigns an IP address to a + device. Set dhcp_ddns=yes to enable it, set + dhcp_ddns=no in case + dynamic DNS updates are not wanted. +

    +
  • +
+
+

+ The Netconf service is not installed because required + dependencies are not covered by the current BLFS book. . +

+

+ With the following command, Kea will be configured to start + the dhcp service for IPv4 and the dynamic DNS update, while + the control agent and the dhcp service for IPv6 remain + down. Tweak the command to match your needs on started + services and execute as the root user: +

+
sed -e "s/^dhcp4=.*/dhcp4=yes/" \
+    -e "s/^dhcp6=.*/dhcp6=no/" \
+    -e "s/^dhcp_ddns=.*/dhcp_ddns=yes/" \
+    -e "s/^ctrl_agent=.*/ctrl_agent=no/" \
+    -i /etc/kea/keactrl.conf
+
+
+
+
+
+
+

+ Control Agent + Configuration +

+
+
+
+

+ The provided configuration could be used without changes + but in BLFS, objects like sockets are stored in + /run rather than in + /tmp. +

+
cat > /etc/kea/kea-ctrl-agent.conf << "EOF"
+// Begin /etc/kea/kea-ctrl-agent.conf
+{
+  // This is a basic configuration for the Kea Control Agent.
+  // RESTful interface to be available at http://127.0.0.1:8000/
+  "Control-agent": {
+    "http-host": "127.0.0.1",
+    "http-port": 8000,
+    "control-sockets": {
+      "dhcp4": {
+        "socket-type": "unix",
+        "socket-name": "/run/kea/kea4-ctrl-socket"
+      },
+      "dhcp6": {
+        "socket-type": "unix",
+        "socket-name": "/run/kea/kea6-ctrl-socket"
+      },
+      "d2": {
+        "socket-type": "unix",
+        "socket-name": "/run/kea/kea-ddns-ctrl-socket"
+      }
+    },
+
+    "loggers": [
+      {
+        "name": "kea-ctrl-agent",
+        "output_options": [
+          {
+            "output": "/var/log/kea/kea-ctrl-agent.log",
+            "pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\n"
+          }
+        ],
+        "severity": "INFO",
+        "debuglevel": 0
+      }
+    ]
+  }
+}
+// End /etc/kea/kea-ctrl-agent.conf
+EOF
+
+
+
+
+
+

+ IPv4 DHCP Server Configuration +

+
+
+
+

+ A sample configuration file is created in /etc/kea/kea-dhcp4.conf. Adjust the file + to suit your needs or overwrite it by running the following + command as the root user + (you'll need to edit this file anyway: at least the + interfaces field, + the ddns-qualifying-suffix field, + and almost all the fields in Subnet4: +

+
cat > /etc/kea/kea-dhcp4.conf << "EOF"
+// Begin /etc/kea/kea-dhcp4.conf
+{
+  "Dhcp4": {
+    // Add names of your network interfaces to listen on.
+    "interfaces-config": {
+      "interfaces": [ "eth0", "eth2" ]
+    },
+
+    "control-socket": {
+      "socket-type": "unix",
+      "socket-name": "/run/kea/kea4-ctrl-socket"
+    },
+
+    "lease-database": {
+      "type": "memfile",
+      "lfc-interval": 3600,
+      "name": "/var/lib/kea/kea-leases4.csv"
+    },
+
+    "expired-leases-processing": {
+      "reclaim-timer-wait-time": 10,
+      "flush-reclaimed-timer-wait-time": 25,
+      "hold-reclaimed-time": 3600,
+      "max-reclaim-leases": 100,
+      "max-reclaim-time": 250,
+      "unwarned-reclaim-cycles": 5
+    },
+
+    "renew-timer": 900,
+    "rebind-timer": 1800,
+    "valid-lifetime": 3600,
+
+    // Enable DDNS - Kea will dynamically update the DNS
+    "ddns-send-updates" : true,
+    "ddns-qualifying-suffix": "your.domain.tld",
+    "dhcp-ddns" : {
+      "enable-updates": true
+    },
+
+    "subnet4": [
+      {
+        "id": 1001,   // Each subnet requires a unique numeric id
+        "subnet": "192.168.56.0/24",
+        "pools": [ { "pool": "192.168.56.16 - 192.168.56.254" } ],
+        "option-data": [
+          {
+            "name": "domain-name",
+            "data": "your.domain.tld"
+          },
+          {
+            "name": "domain-name-servers",
+            "data": "192.168.56.2, 192.168.3.7"
+          },
+          {
+            "name": "domain-search",
+            "data": "your.domain.tld"
+          },
+          {
+            "name": "routers",
+            "data": "192.168.56.2"
+          }
+        ]
+      }
+    ],
+
+    "loggers": [
+      {
+        "name": "kea-dhcp4",
+        "output_options": [
+          {
+            "output": "/var/log/kea/kea-dhcp4.log",
+            "pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\n"
+          }
+        ],
+        "severity": "INFO",
+        "debuglevel": 0
+      }
+    ]
+  }
+}
+// End /etc/kea/kea-dhcp4.conf
+EOF
+
+
+
+
+
+

+ IPv6 DHCP Server Configuration +

+
+
+
+

+ The configuration for IPv6 is similar to the configuration + of IPv4. The configuration file is /etc/kea/kea-dhcp6.conf. +

+
+
+
+
+
+

+ Dynamic DNS Configuration +

+
+
+
+

+ If there is a BIND-9.20.12 server running, + ISC Kea can update the DNS + when it gives an IP address to a client. A sample + configuration file is created in /etc/kea/kea-dhcp-ddns.conf. Adjust the + file to suit your needs or overwrite it by running the + following command as the root user: +

+
cat > /etc/kea/kea-dhcp-ddns.conf << "EOF"
+// Begin /etc/kea/kea-dhcp-ddns.conf
+{
+  "DhcpDdns": {
+    "ip-address": "127.0.0.1",
+    "port": 53001,
+    "control-socket": {
+      "socket-type": "unix",
+      "socket-name": "/run/kea/kea-ddns-ctrl-socket"
+    },
+
+    "tsig-keys": [
+      {
+        "name"      : "rndc-key",
+        "algorithm" : "hmac-sha256",
+        "secret"    : "1FU5hD7faYaajQCjSdA54JkTPQxbbPrRnzOKqHcD9cM="
+      }
+    ],
+
+    "forward-ddns" : {
+      "ddns-domains" : [
+        {
+          "name" : "your.domain.tld.",
+          "key-name": "rndc-key",
+          "dns-servers" : [
+            {
+              "ip-address" : "127.0.0.1",
+              "port" : 53
+            }
+          ]
+        }
+      ]
+    },
+
+    "reverse-ddns" : {
+      "ddns-domains" : [
+        {
+          "name" : "56.168.192.in-addr.arpa.",
+          "key-name": "rndc-key",
+          "dns-servers" : [
+            {
+              "ip-address" : "127.0.0.1",
+              "port" : 53
+            }
+          ]
+        }
+      ]
+    },
+
+    "loggers": [
+      {
+        "name": "kea-dhcp-ddns",
+        "output_options": [
+          {
+            "output": "/var/log/kea/kea-ddns.log",
+            "pattern": "%D{%Y-%m-%d %H:%M:%S.%q} %-5p %m\n"
+          }
+        ],
+        "severity": "INFO",
+        "debuglevel": 0
+      }
+    ]
+  }
+}
+// End /etc/kea/kea-dhcp-ddns.conf
+EOF
+
+

+ Note +

+

+ The value of secret is just + an example. Generate the key for your installation by + using the rndc-confgen + -a command or the tsig-keygen command + which both are provided by BIND-9.20.12. +

+

+ In this example configuration, it is assumed that the DNS + server runs on the same machine as Kea does (accessible + via 127.0.0.1) and that this + machine has the IP 192.168.56.2. +

+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + keactrl, kea-admin, kea-ctrl-agent, + kea-dhcp4, kea-dhcp6, kea-dhcp-ddns, kea-lfc, + kea-shell +
+
+ Installed Libraries: + libkea-asiodns.so, + libkea-asiolink.so, libkea-cc.so, libkea-cgfclient.so, + libkea-cryptolink.so, libkea-d2srv.so, + libkea-database.so, libkea-dhcp_ddns.so, + libkea-dhcp++.so, libkea-dhcpsrv.so, libkea-dns++.so, + libkea-eval.so, libkea-exceptions.so, libkea-hooks.so, + libkea-http.so, libkea-log.so, libkea-process.so, + libkea-stats.so, libkea-tcp.so, libkea-util.so, and + libkea-util-io.so +
+
+ Installed Directories: + /etc/kea, /run/kea, + /usr/include/kea, /usr/lib/kea, + /usr/lib/python3.13/site-packages/kea, /usr/share/kea, + /usr/share/doc/kea-3.0.1, /var/lib/kea, and + /var/log/kea +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ keactrl +

+
+

+ Tool to control (start/stop) the server processes. +

+
+

+ kea-admin +

+
+

+ kea-admin is a shell script which offers database + maintenance. +

+
+

+ kea-ctrl-agent +

+
+

+ Daemon which exposes a RESTful control interface + for managing Kea servers. +

+
+

+ kea-dhcp4 +

+
+

+ The server daemon providing IPv4 addresses. +

+
+

+ kea-dhcp6 +

+
+

+ The server daemon providing IPv6 addresses. +

+
+

+ kea-dhcp-ddns +

+
+

+ The server daemon performing the dynamic DNS + updates. +

+
+

+ kea-lfc +

+
+

+ The kea-lfc service process removes redundant + information from the files used to provide + persistent storage for the memfile database + backend. It is run by the Kea DHCP server. +

+
+

+ keashell +

+
+

+ RESTful client to the ISC + Kea services. +

+
+
+
+
+
+
+
+

+ ProFTPD-1.3.9 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ProFTPD Dependencies +

+
+ Optional +
+

+ libcap-2.76 with PAM, libssh2-1.11.1, Linux-PAM-1.7.1, + MariaDB-11.8.3 or MySQL, pcre2-10.45, PostgreSQL-17.6, and Net::SSH2 +

+
+
+

+ 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 /usr/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=/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.9 &&
+cp -Rv doc/*     /usr/share/doc/proftpd-1.3.9
+
+
+

+ Command Explanations +

+

+ install -v -d -m775 -o proftpd + -g proftpd /srv/ftp: Create the home + directory for ProFTPD. +

+

+ ln -v -s /usr/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
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/proftpd init + script included in the blfs-bootscripts-20250225 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.9, 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 +

+
+
+
+
+
+
+
+
+

+ 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. +

+

+ In addition to the SMTP servers, there is also a POP/IMAP server + (Dovecot). +

+
+
+
+

+ Dovecot-2.4.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Dovecot Dependencies +

+
+ Required +
+

+ libtirpc-1.3.6 and Linux-PAM-1.7.1 +

+
+ Optional +
+

+ Cyrus SASL-2.1.28, ICU-77.1, libcap-2.76 + with PAM, libunwind-1.8.2, Lua-5.4.8, MariaDB-11.8.3 or + MySQL, + OpenLDAP-2.6.10, PostgreSQL-17.6, + SQLite-3.50.4, Valgrind-3.25.1, + xapian-1.4.29, xfsprogs-6.15.0, + Cassandra, stemmer and + libsodium +

+
+
+

+ Installation of Dovecot +

+
+

+ Warning +

+

+ There are significant changes in the configuration of this + package that are required when updating to Dovecot 2.4.0. + Please review the documentation at + Dovecot Upgrade Guide before continuing if you are + upgrading this package from a previous version. +

+
+

+ 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
+

+ Install Dovecot by running + the following commands: +

+
./configure --prefix=/usr                          \
+            --sysconfdir=/etc                      \
+            --localstatedir=/var                   \
+            --with-systemd=no                      \
+            --docdir=/usr/share/doc/dovecot-2.4.0  \
+            --disable-static &&
+make
+

+ To test the results, issue make + -k check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --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-lua=no: This switch + enables Lua plugin support. + This includes a mail and push notification plugin. +

+
+
+

+ Configuring Dovecot +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/dovecot/dovecot.conf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ The following configuration is a simple proof of concept + with IMAP service using local users for authentication and + mailbox location. +

+
mv -v /etc/dovecot/dovecot.conf{,.orig} &&
+chmod -v 1777 /var/mail &&
+cat > /etc/dovecot/dovecot.conf << "EOF"
+
+# The dovecot configuration requires a minimum version to be set. The server
+# will refuse to start if the version set here is older than the version of
+# Dovecot installed. This option allows the Dovecot server to set reasonable
+# default values based on what version is set here.
+dovecot_config_version = 2.4.0
+
+# This option sets the minimum version that is able to read data files from
+# the Dovecot server. This is primarily for a cluster which may have several
+# different versions of Dovecot installed, but is required for the server to
+# run.
+dovecot_storage_version = 2.4.0
+
+protocols = imap
+ssl = no
+# The next line is only needed if you have no IPv6 network interfaces
+listen = *
+mail_inbox_path = /var/mail/%{user}
+mail_driver = mbox
+mail_path = ~/Mail
+userdb users {
+  driver = passwd
+}
+passdb passwords {
+  driver = pam
+}
+EOF
+

+ The above configuration also requires a configuration file + to be installed for Linux-PAM so dovecot can authenticate + users. Issue the following command as the root user to create the configuration + file for Linux-PAM: +

+
cat > /etc/pam.d/dovecot << "EOF"
+# Begin /etc/pam.d/dovecot
+
+auth     include system-auth
+account  include system-account
+password include system-password
+
+# End /etc/pam.d/dovecot
+EOF
+

+ You will definitely want to read the official documentation + at https://doc.dovecot.org/2.4.0/ + if you plan to use Dovecot + in a production environment. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ If you want the Dovecot + server to start automatically when the system is booted, + install the /etc/rc.d/init.d/dovecot init script + included in the blfs-bootscripts-20250225 package. +

+
make install-dovecot
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + doveadm, doveconf, dovecot, and + dovecot-sysreport +
+
+ 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.4.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Exim-4.98.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+
    +
  • +

    + Additional formats of the documentation (text-based + docs are shipped with the sources) can be downloaded by + following the links shown at https://exim.org/docs.html. +

    +
  • +
+
+

+ Exim + Dependencies +

+
+ Required +
+

+ libnsl-2.0.1, File-FcntlLock-0.22 and pcre2-10.45 +

+
+ Optional +
+

+ TDB (alternative + to GDBM, built in LFS), Cyrus SASL-2.1.28, libidn-1.43, + Linux-PAM-1.7.1, MariaDB-11.8.3 or + MySQL, + OpenLDAP-2.6.10, GnuTLS-3.8.10, PostgreSQL-17.6, SQLite-3.50.4, a graphical + environment, Heimdal GSSAPI, + libspf2, and + OpenDMARC +

+
+
+

+ 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
+

+ Configure 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 '/# USE_OPENSSL/s,^#,,' src/EDITME > Local/Makefile &&
+
+printf "USE_GDBM = yes\nDBMLIB = -lgdbm\n" >> Local/Makefile
+
+

+ If you want to add Linux PAM + support, also run the following commands: +

+
sed -i '/# SUPPORT_PAM=yes/s,^#,,' Local/Makefile
+echo "EXTRALIBS=-lpam" >> Local/Makefile
+
+

+ Build Exim with the + following command: +

+
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 -vdm 755    /usr/share/doc/exim-4.98.2 &&
+cp      -Rv doc/*   /usr/share/doc/exim-4.98.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 (deprecated). +

+

+ 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 needs to hand off the daemon to the + exim user. +

+

+ USE_OPENSSL: + uncommenting USE_OPENSSL=yes and + USE_OPNSSL_PC=yes tells the build + system to use OpenSSL, and + to find the needed libraries with pkg-config. +

+

+ Uncomment EXIM_MONITOR: This + allows building the Exim + monitor program, which requires X + Window System support, and is commented out by + default. +

+

+ 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 + https://exim.org/exim-html-4.98.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 + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch45.html. +

+

+ To use a backend database other than GDBM, see the instructions at + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch04.html#SECTdb. +

+

+ For SSL functionality, see the instructions at + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch04.html#SECTinctlsssl + and + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch42.html. +

+

+ For tcpwrappers + functionality, see the instructions at + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch04.html#SECID27. +

+

+ For information about adding authentication mechanisms to the + build, see chapters 33—41 of + https://exim.org/exim-html-4.98.2/doc/html/spec_html/index.html. +

+

+ For information about linking Linux-PAM, refer to the instructions + + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch11.html#SECTexpcond. +

+

+ For information about linking database engine libraries used + for Exim name lookups, see + the instructions at + https://exim.org/exim-html-4.98.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 + https://exim.org/exim-html-4.98.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 + https://exim.org/exim-html-4.98.2/doc/html/spec_html/ch-log_files.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. +

+
+
+
+
+
+

+ Linux PAM Configuration +

+
+
+
+

+ If you have built Exim + 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/exim << "EOF"
+# Begin /etc/pam.d/exim
+
+auth    include system-auth
+account include system-account
+session include system-session
+
+# End /etc/pam.d/exim
+EOF
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically start exim at boot, install the + /etc/rc.d/init.d/exim init script + included in the blfs-bootscripts-20250225 package: +

+
make install-exim
+

+ The bootscript also starts the Exim daemon and dispatches a queue + runner process every 15 minutes. Modify the -q<time + interval> parameter in /etc/rc.d/init.d/exim, if necessary for + your installation. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + exicyclog, exigrep, exim, + exim-4.98.2-2, exim_checkaccess, exim_dbmbuild, + exim_dumpdb, exim_fixdb, exim_id_update, exim_lock, + exim_msgdate, 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.98.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.98.2-2 MTA + daemon +

+
+

+ exim-4.98.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_update_id +

+
+

+ upgrades and downgrades Exim message-id formats in + spool files +

+
+

+ exim_lock +

+
+

+ locks a mailbox file +

+
+

+ exim_msgdate +

+
+

+ converts an Exim message-id to a human readable + form +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Postfix-3.10.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Postfix Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ ICU-77.1 for + Email Address Internationalization (SMTPUTF8) support, + MariaDB-11.8.3 or MySQL, OpenLDAP-2.6.10, + pcre2-10.45, PostgreSQL-17.6, + SQLite-3.50.4, + Berkeley DB (deprecated), and CDB or TinyCDB +

+

+ Note that SQLite, + MySQL, PostgreSQL and CDB are only useful if there is a known + need for them. +

+

+ Editor 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/*
+

+ 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. +

+
+

+ Note +

+

+ For all variants of the CCARGS you should ensure that + '-DNO_NIS' is specified so that the build does not + attempt to access an rpcsvc header which do not exist in + BLFS. If + Berkeley DB (deprecated) is not installed, '-DNO_DB' + needs to be specified as well. +

+
+

+ For more details read the readme files. +

+

+ Initialize the CCARGS and + AUXLIBS according to the note + above: +

+
CCARGS="-DNO_NIS -DNO_DB"
+AUXLIBS=""
+

+ Next, the CCARGS and the + AUXLIBS variables are filled + with settings depending on the actual system configuration. + If an optional package is installed but should not be included in the + Postfix build, simply skip + the corresponding if [ ... ]; + then scriptlets. +

+
+
+
+
+
+ Cyrus-SASL +
+
+
+
+

+ To use Cyrus-SASL with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libsasl2.so ]; then
+  CCARGS="$CCARGS -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl"
+  AUXLIBS="$AUXLIBS -lsasl2"
+fi
+
+
+
+
+
+
+ LMDB +
+
+
+
+

+ To use LMDB with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/liblmdb.so ]; then
+  CCARGS="$CCARGS -DHAS_LMDB"
+  AUXLIBS="$AUXLIBS -llmdb"
+fi
+
+
+
+
+
+
+ OpenLDAP +
+
+
+
+

+ To use OpenLDAP with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libldap.so -a -r /usr/lib/liblber.so ]; then
+  CCARGS="$CCARGS -DHAS_LDAP"
+  AUXLIBS="$AUXLIBS -lldap -llber"
+fi
+
+
+
+
+
+
+ Sqlite +
+
+
+
+

+ To use Sqlite with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libsqlite3.so ]; then
+  CCARGS="$CCARGS -DHAS_SQLITE"
+  AUXLIBS="$AUXLIBS -lsqlite3 -lpthread"
+fi
+
+
+
+
+
+
+ MySQL +
+
+
+
+

+ To use MySQL with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libmysqlclient.so ]; then
+  CCARGS="$CCARGS -DHAS_MYSQL -I/usr/include/mysql"
+  AUXLIBS="$AUXLIBS -lmysqlclient -lz -lm"
+fi
+
+
+
+
+
+
+ PostgreSQL +
+
+
+
+

+ To use PostgreSQL with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libpq.so ]; then
+  CCARGS="$CCARGS -DHAS_PGSQL -I/usr/include/postgresql"
+  AUXLIBS="$AUXLIBS -lpq -lz -lm"
+fi
+
+
+
+
+
+
+ CDB/TinyCDB +
+
+
+
+

+ To use CDB or + TinyCDB with + Postfix, use the + following arguments: +

+
if [ -r </path/to/CDB>/libcdb.a ]; then
+  CCARGS="$CCARGS -DHAS_CDB"
+  AUXLIBS="$AUXLIBS </path/to/CDB>/libcdb.a"
+fi
+
+
+
+
+
+
+ StartTLS Authentication +
+
+
+
+

+ To use OpenSSL with + Postfix, use the + following arguments: +

+
if [ -r /usr/lib/libssl.so -a -r /usr/lib/libcrypto.so ]; then
+  CCARGS="$CCARGS -DUSE_TLS -I/usr/include/openssl/"
+  AUXLIBS="$AUXLIBS -lssl -lcrypto"
+fi
+

+ OpenSSL is installed by + LFS so it should be always there. The if ... then is here just for consistency. +

+
+
+
+
+
+
+

+ Installing Postfix +

+
+
+
+

+ There might be duplicate settings in AUXLIBS like -lm + when both, MariaDB and + PostgreSQL are used. They + do not harm. Install Postfix by running the following + commands: +

+
make CC="gcc -std=gnu17" CCARGS="$CCARGS" AUXLIBS="$AUXLIBS" 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.10.4/html \
+   readme_directory=/usr/share/doc/postfix-3.10.4/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. +

+

+ CC="gcc -std=gnu17": this is used + to overcome an issue with gcc-15. This version of gcc uses + -std=gnu23 by default which + exposes several issues in the source code. +

+

+ 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. +

+

+ The BLFS editors recommend to use LMDB instead of Berkeley + DB for Postfix tables. Add three lines into /etc/postfix/main.cf to make postmap encode the lookup + tables in the LMDB format by default and to change the + default hash setting of the alias tables: +

+
echo 'default_database_type = lmdb'       >> /etc/postfix/main.cf &&
+echo 'alias_database = lmdb:/etc/aliases' >> /etc/postfix/main.cf &&
+echo 'alias_maps = lmdb:/etc/aliases'     >> /etc/postfix/main.cf
+

+ To protect your server against the recent SMTP smuggling + attacks, additional steps are required. Add two lines into + /etc/postfix/main.cf to + disconnect remote SMTP clients that send bare newlines in + the DATA section, while also allowing clients on your + network with non-standard SMTP implementations to still + send mail: +

+
echo 'smtpd_forbid_bare_newline = normalize' >> /etc/postfix/main.cf &&
+echo 'smtpd_forbid_bare_newline_exclusions = $mynetworks' >> /etc/postfix/main.cf
+

+ Note that if you are following an online tutorial to + configure Postfix, the tutorial may refer to a lookup table + with hash:/path/to/lookup_table. You should + replace hash with lmdb in order to use a lookup table + encoded in the LMDB format. +

+
+

+ 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. +

+
+

+ To ensure that all permissions are set properly, + postfix provides a tool + which is to be run as the root user: +

+
/usr/sbin/postfix -c /etc/postfix set-permissions
+

+ 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
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To automate the running of Postfix at startup, install the + /etc/rc.d/init.d/postfix init + script included in the blfs-bootscripts-20250225 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.10.4 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 +

+
+
+
+
+
+
+
+

+ sendmail-8.18.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ftp.sendmail.org/sendmail.8.18.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: b6b332295b5779036d4c9246f96f673c +

    +
  • +
  • +

    + Download size: 2.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 21 MB +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU +

    +
  • +
+
+ +

+ sendmail Dependencies +

+
+ Required +
+

+ OpenLDAP-2.6.10 (client) +

+
+ Recommended +
+ +
+ Optional +
+

+ ghostscript-10.05.1 (for creating + PDF documentation), Procmail-3.24 (the configuration proposed + below requires that procmail be present at + run-time), and nph +

+
+
+

+ 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
+

+ Fix building this package with gcc-15: +

+
patch -Np1 -i ../sendmail-8.18.1-gcc15_fixes-1.patch
+
+

+ 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',`-D STARTTLS -D SASL -D LDAPMAP -D HASFLOCK')
+APPENDDEF(`confLIBS', `-lssl -lcrypto -lsasl2 -lldap -llber')
+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.18.1/{cf,sendmail} &&
+
+install -v -m644 CACerts FAQ KNOWNBUGS LICENSE PGPKEYS README RELEASE_NOTES \
+        /usr/share/doc/sendmail-8.18.1 &&
+
+install -v -m644 sendmail/{README,SECURITY,TRACEFLAGS,TUNING} \
+        /usr/share/doc/sendmail-8.18.1/sendmail &&
+
+install -v -m644 cf/README /usr/share/doc/sendmail-8.18.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.18.1 &&
+install -v -m644 op.ps op.txt op.pdf /usr/share/doc/sendmail-8.18.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 Makefiles. + 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
+# Does not work if there is no database backend compiled in:
+#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. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To automate the running of sendmail at startup, install the + /etc/rc.d/init.d/sendmail init + script included in the blfs-bootscripts-20250225 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 init script. 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.18.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 +

+
+
+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ Important Notes + About Upgrading Database Server Software +

+
+
+
+
+
+

+ Note +

+

+ This section is about reinstalling database software when an + existing database is in use. It is not applicable for initial + installations or if there is no existing database for the + package being updated, but users should read through it to + become aware of issues that can arise in the future. +

+
+

+ Let's start this chapter with a dramatic screenshot of an error + that really happened. This error will not occur if you are + installing database software for the first time: +

+
$ sudo systemctl status postgresql
+-- postgresql.service - PostgreSQL database server
+     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
+     Active: failed (Result: exit-code) since Tue 2021-10-26 17:11:53 CDT; 2min 49s ago
+    Process: 17336 ExecStart=/usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120 (code=exited, status=1/FAILURE)
+        CPU: 7ms
+
+Oct 26 17:11:53 SVRNAME systemd[1]: Starting PostgreSQL database server...
+Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] FATAL:
+                database files are incompatible with server
+Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] DETAIL:
+                The data directory was initialized by PostgreSQL version 13,
+                which is not compatible with this version 14.0.
+Oct 26 17:11:53 SRVNAME postgres[17336]: pg_ctl: could not start server
+Oct 26 17:11:53 SRVNAME postgres[17336]: Examine the log output.
+Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
+Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Failed with result 'exit-code'.
+Oct 26 17:11:53 SRVNAME systemd[1]: Failed to start PostgreSQL database server.
+

+ To avoid situations like this (i.e., your database server + software refuses to start), read the following discussion of + the best way to upgrade a DBMS (Database Management System). +

+

+ The root cause of the error shown above was an upgrade of the + server software to a newer major version which left the data + files untouched. In this case, the administrator was able to + recover the DBMS without any loss of data. +

+

+ Even if you are doing an initial DBMS install, read through + this section. It provides information about implementing backup + and restore procedures (or at least a strategy for creating + them) which will satisfy your needs and guarantee the safety of + your data. +

+
+

+ Upgrade Database Server Packages +

+

+ Database systems work on files which hold the database + metadata and the data itself. The internal structure of these + files is optimized for use by the server software. When such + server software is upgraded, the new software may utilize a + different file format than had previously been used. + Sometimes the new software can work with the old format as + well as the new one—but without the performance improvements + the new format provides. Other times, the new server software + will reformat the data files automatically after the upgrade. +

+

+ Unfortunately, the most likely case is that the new server + software complains about out of date file formats and exits. + When this happens, and you have overwritten the old server + software, you may end up with a broken system and lost data. +

+

+ Changes in data file formats usually happen at major version + changes, but they can also occur at other times. Before + upgrading any DBMS software, check the documentation to see + if this upgrade makes changes which require reformatting the + database. +

+

+ Of course, if you have databases with content that is not + easily rebuilt, it is always a good idea to create backups of + the database from time to time. Before upgrading the server + software, you should run another backup. +

+
+
+
+
+

+ Upgrade by Backup and + Restore +

+
+
+
+
+

+ Note +

+

+ A backup is useless if there is no verified process to + restore the data from this backup. When running a + database server, you should not only create backups; you + should also verify that the restore process really works. + The time to test the restore procedure is before you urgently need to + recover lost data. +

+
+

+ Most database server software provides some basic tools to + create backups of your data. Usually the backups created + with those tools can be read by newer versions of the + software (via a restore tool). Using older restore tools + with newer backup data is a bad idea; you should + never blindly assume + that it will work. It might, but usually it doesn't. +

+

+ The easiest way to upgrade your database files is to +

+
+
    +
  • +

    + Create a full database backup using the old tools. +

    +

    + This step creates an offline copy of the database + files—for long term archiving, for disaster recovery, + or as preparation for an upgrade. This offline backup + consists of either (1) a full one-to-one copy of the + current database files, or (2) a full backup of the + database files from a certain point in time, plus all + the journal data (that is Oracle® terminology, it is + called "Continuous Archiving" or "write ahead log + (WAL)" in Postgresql) describing the changes made + after that point in time. This second form takes less + time to create (if the DB software provides this type + of journaling) because you only have to save the data + that have changed since the last full backup was + created. +

    +

    + When upgrading database server software, a full + backup (which can be used for subsequent incremental + backups) should be created; but if there is a lot of + data, an incremental backup will suffice. The best + strategy for you depends on the amount of data stored + in your database (is it a few hundred table rows, or + is it hundreds of terabytes?). A full backup in the + latter case can't be done quickly. To fully protect + your data, create a backup of the old programs + (and/or their sources) and save it, along with the + data files, to be certain there is a fallback + solution if the new software cannot read the old + data. +

    +
  • +
  • +

    + Upgrade the server software +

    +

    + In this step, instructions to build the database + server software are executed just as they are shown + in subsequent sections talking about the DBMs like + MariaDB or Postgresql. That is, build the software as + usual using BLFS instructions. +

    +
  • +
  • +

    + Restore the database by using the new tools. +

    +

    + To restore the data, the tools of the newly installed + server software should be used. During the + restoration process, the new tools will create and/or + upgrade the data files in the format the new software + requires. It is assumed that newer software is + capable of reading old data. +

    +
  • +
+
+

+ Since you already have a backup procedure in place (and you + have tested your restore procedure, right?), this might be + the easiest way to upgrade as you can use your well known + processes to upgrade just as you always do—at least in + terms of the backup and restore. +

+
+
+
+
+
+

+ Upgrade the Database Files + by Using System Tools +

+
+
+
+

+ Some database systems (for instance Postgresql) provide a + tool which can reformat (upgrade) the existing database + files to the new format. If you need to restore from a + backup (for example, running the upgrade tool failed) you + will have to reinstall the old software to recover your + data. +

+

+ Even though the reformatting tools might work as + advertised, you should create a full backup before running + them. A failure could cause serious damage to the database. +

+
+
+
+

+ Notes for Specific DBMS +

+
+
+
+
+

+ PostgreSQL +

+
+
+
+

+ Upstream documentation for Backup/Restore: https://www.postgresql.org/docs/current/backup.html +

+
+
+
+
+
+

+ MariaDB +

+
+
+
+

+ Upstream documentation for Backup/Restore: https://mariadb.com/kb/en/backup-and-restore-overview/ +

+
+
+
+
+
+

+ Sqlite +

+
+
+
+

+ Do not underestimate Sqlite. It is a feature-rich DBMS. The + main difference from the two big players above is that + Sqlite does not provide access via a network API. Sqlite + databases are always stored on the machine running the + program which uses the database. The manipulation of data + content is done via API calls to library functions directly + within the program. +

+

+ In the upstream documentation you may find the following + useful: +

+

+ Documentation of the sqlite3 command line tool: https://www.sqlite.org/cli.html +

+

+ Documentation of backup API calls: https://www.sqlite.org/backup.html +

+

+ Unfortunately, there is no dedicated chapter in the + upstream documentation talking about backup/restore, but + there are several articles about it on the Internet. Here + is an example. +

+

+ Documentation for Backup/Restore: https://database.guide/backup-sqlite-database/ +

+
+
+
+
+
+

+ LMDB +

+
+
+
+

+ Like Sqlite, this software + acts on local database files; there is no network + interface. +

+

+ The relevant resources to back up/restore a LMDB database + are the man pages for mdb_dump and its counterpart mdb_load. +

+
+
+
+
+
+
+

+ lmdb-0.9.33 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of lmdb +

+
+

+ Note +

+

+ This package extracts to + openldap-LMDB_0.9.33-3a29a24777c82a0165de813ae696a5068b5add30. +

+
+

+ 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 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ mdb_copy +

+
+

+ copies an LMDB environment from one database to + another, including the option to compact the + database +

+
+

+ mdb_dump +

+
+

+ reads a database and writes its contents to + standard output using a portable flat-text format, + which can be interpreted by mdb_load +

+
+

+ mdb_load +

+
+

+ imports a database from standard input or from a + file +

+
+

+ mdb_stat +

+
+

+ displays the status of a LMDB environment +

+
+

+ liblmdb.so +

+
+

+ provides functions for accessing a LMDB database +

+
+
+
+
+
+
+
+

+ MariaDB-11.8.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ The installed size of MariaDB is 761 MB, but this can be + reduced by about 268 MB, if desired, by removing the + /usr/share/mariadb/test + directory after installation. +

+
+
+

+ Caution +

+

+ If you are upgrading an existing database, please see the + + MariaDB Release Notes for additional information, and + use the instructions after the Configuration Information + section to ensure a safe upgrade. +

+
+

+ MariaDB Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Boost-1.89.0, fmt-11.2.0, git-2.50.1, Java-24.0.2, libaio-0.3.113, libxml2-2.14.5, + Linux-PAM-1.7.1, LZO-2.10, MIT Kerberos + V5-1.22.1, pcre2-10.45, Ruby-3.4.5, sphinx-8.2.3, unixODBC-2.3.12, Valgrind-3.25.1, + Groonga, + KyTea, Judy, + libstemmer, MeCab, MessagePack, + mruby, + MyRocks, Snappy, + and ZeroMQ +

+
+
+

+ 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 mariadb &&
+useradd -c "MariaDB Server" -d /srv/mariadb -g mariadb -s /bin/false -u 40 mariadb
+

+ Fix an issue with detecting Boost-1.89.0 and later: +

+
sed -i 's/regex system/regex/' \
+       storage/columnstore/columnstore/cmake/boost.cmake
+

+ Install MariaDB by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release                       \
+      -D CMAKE_INSTALL_PREFIX=/usr                      \
+      -D GRN_LOG_PATH=/var/log/groonga.log              \
+      -D INSTALL_DOCDIR=share/doc/mariadb-11.8.3        \
+      -D INSTALL_DOCREADMEDIR=share/doc/mariadb-11.8.3  \
+      -D INSTALL_MANDIR=share/man                       \
+      -D INSTALL_MYSQLSHAREDIR=share/mariadb            \
+      -D INSTALL_MYSQLTESTDIR=share/mariadb/test        \
+      -D INSTALL_PAMDIR=lib/security                    \
+      -D INSTALL_PAMDATADIR=/etc/security               \
+      -D INSTALL_PLUGINDIR=lib/mariadb/plugin           \
+      -D INSTALL_SBINDIR=sbin                           \
+      -D INSTALL_SCRIPTDIR=bin                          \
+      -D INSTALL_SQLBENCHDIR=share/mariadb/bench        \
+      -D INSTALL_SUPPORTFILESDIR=share/mariadb          \
+      -D MYSQL_DATADIR=/srv/mariadb                     \
+      -D MYSQL_UNIX_ADDR=/run/mariadb/mariadb.sock      \
+      -D WITH_EXTRA_CHARSETS=complex                    \
+      -D WITH_EMBEDDED_SERVER=ON                        \
+      -D SKIP_TESTS=ON                                  \
+      -D TOKUDB_OK=0                                    \
+      -W no-dev                                         \
+      .. &&
+make
+

+ To test the results, issue: make test. Two tests, + my_tzinfo and test-connect, are 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. A few tests + may fail, mainly due to character set issues. +

+
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + WITH_EMBEDDED_SERVER=ON: This switch enables + compiling the embedded server library needed by certain + applications, such as Amarok. +

+

+ -D + WITH_EXTRA_CHARSETS=complex: This switch enables + support for the complex character sets. +

+

+ -D SKIP_TESTS=ON: + This switch disables tests for MariaDB Connector/C which are + not supported without additional setup. +

+

+ -D WITHOUT_SERVER=ON: Use this + switch if you don't want the server and would like to build + the client only. +

+

+ -W no-dev: This + switch turns off some warnings that are only useful for + developers. +

+
+

+ Note +

+

+ There are numerous options available to cmake. Check the output + of the cmake . + -LH for additional customization options. +

+
+
+
+

+ Configuring MariaDB +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/mariadb/my.cnf and + ~/.my.cnf +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Create a basic /etc/mariadb/my.cnf file using the + following command as the root user: +

+
install -v -dm 755 /etc/mariadb &&
+cat > /etc/mariadb/my.cnf << "EOF"
+# Begin /etc/mariadb/my.cnf
+
+# The following options will be passed to all MySQL clients
+[client]
+#password       = your_password
+port            = 3306
+socket          = /run/mariadb/mariadb.sock
+
+# The MySQL server
+[mariadb]
+port            = 3306
+socket          = /run/mariadb/mariadb.sock
+datadir         = /srv/mariadb
+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/mariadb
+innodb_log_group_home_dir = /srv/mariadb
+# 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
+
+[mariadbdump]
+quick
+max_allowed_packet = 16M
+
+[mariadb]
+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
+
+[mariadbhotcopy]
+interactive-timeout
+
+# End /etc/mariadb/my.cnf
+EOF
+

+ You can now install a database and change the ownership to + the unprivileged user and group (perform as the + root user): +

+
mariadb-install-db --basedir=/usr --datadir=/srv/mariadb --user=mariadb &&
+chown -R mariadb:mariadb /srv/mariadb
+

+ Further configuration requires that the MariaDB server is running. Start the + server using the following commands as the root user: +

+
install -v -m755 -o mariadb -g mariadb -d /run/mariadb &&
+mariadbd-safe --user=mariadb 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. +

+
mariadb-admin -u root password
+

+ Configuration of the server is now finished. Shut the + server down using the following command as the root user: +

+
mariadb-admin -p shutdown
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/mariadb init + script included in the blfs-bootscripts-20250225 package + as the root user to start + the MariaDB server during + system boot-up. +

+
make install-mariadb
+
+

+ Note +

+

+ If you have an existing database already and this + installation of binaries was just an upgrade to a newer + version, check the upstream documentation for upgrading. + It is recommended to run: +

+
mariadb-upgrade
+
+
+
+
+

+ 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: + libmariadb.a, libmariadb.so, + libmariadbclient.a, libmariadbd.a, libmariadbd.so, + libmariadb.so.3, libmysqlclient.a, libmysqlclient.so, + libmysqlclient_r.a, libmysqlclient_r.so, libmysqld.a, + libmysqld.so, libmysqlservices.a, and about 70 modules + under /usr/lib/mysql/plugin/ +
+
+ Installed Directories: + /usr/{include,lib,share}/mysql, + /usr/share/groonga{,-normalizer-mysql}, and + /usr/share/doc/mariadb-11.8.3 +
+
+
+

+ 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 mariadb-test 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 mariadb processes + that listen for connections on different Unix + socket files and TCP/IP ports +

+
+

+ mariadbd-safe +

+
+

+ is the recommended way to start a mariadb 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 mariadb-test + command but is built with support for the + libmariadbd embedded server +

+
+

+ mariadb-tzinfo-to-sql +

+
+

+ loads the time zone tables in the mariadb 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 a 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) +

+
+
+
+
+
+
+
+

+ PostgreSQL-17.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ PostgreSQL Dependencies +

+
+ Optional +
+

+ ICU-77.1, + libxml2-2.14.5, libxslt-1.1.43, + OpenLDAP-2.6.10, Linux-PAM-1.7.1, + MIT Kerberos V5-1.22.1 and + Bonjour +

+
+ Optional (To Generate Documentation) +
+

+ fop-2.11, + docbook-4.5-dtd, docbook-dsssl-1.79, DocBook-utils-0.6.14, OpenJade-1.3.2, and SGMLSpm-1.1 +

+

+ Editor 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 \
+            --docdir=/usr/share/doc/postgresql-17.6 &&
+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. +

+
+

+ Note +

+

+ If you are installing PostgreSQL to upgrade an existing + installation, there are important steps that you need to + follow. If the major version of the new build is greater + than the previous version, there is a chance that the data + file format has changed. New software cannot use the + existing data files. In this case, the server will not + start because the old programs have been overwritten, so + the data is unavailable until it's file format has been + converted. +

+

+ Before upgrading an existing installation of PostgreSQL, + check the documentation for any considerations that you + must keep in mind during the upgrade. Note that new major + versions might use a different binary format in the data + objects, causing potential incompatibilities. For more + information, please review upstream's documentation about + upgrading PostgreSQL here: https://www.postgresql.org/docs/current/upgrading.html. +

+

+ At this point, you may have both the old and the new + binaries installed on your filesystem. These binaries can + be used to perform an upgrade of your existing database + files. For the following instructions it is assumed that +

+
+
    +
  • +

    + The actual data files are stored in /srv/pgsql/data +

    +
  • +
  • +

    + The upgraded data files will be stored in + /srv/pgsql/newdata +

    +
  • +
  • +

    + There is enough disk space to hold the actual data + files twice. The upgrade is not an inline upgrade but + it will copy the data to new database files. +

    +
  • +
+
+

+ First, do a temporary install which makes access to the new + binaries much easier: +

+
make DESTDIR=$(pwd)/DESTDIR install
+

+ Next, create a directory which is writable by the + postgres user, as the + root user: +

+
install -d -o postgres $(pwd)/DESTDIR/tmp
+

+ Now, stop the existing instance of PostgreSQL and start the upgrade + process as the root user: +

+
pushd $(pwd)/DESTDIR/tmp
+/etc/rc.d/init.d/postgresql stop
+su postgres -c "../usr/bin/initdb -D /srv/pgsql/newdata"
+su postgres -c "../usr/bin/pg_upgrade \
+                    -d /srv/pgsql/data    -b /usr/bin \
+                    -D /srv/pgsql/newdata -B ../usr/bin"
+popd
+

+ At this point, your database files are available in two + locations on disk. The old data is located in /srv/pgsql/data, and the new data is in + /srv/pgsql/newdata. Backing + up the old database files is recommended before continuing. +

+

+ Next, remove the old database files, and rename the new + data directory as the root + user: +

+
rm -rf /srv/pgsql/data
+mv /srv/pgsql/newdata /srv/pgsql/data
+
+

+ Now, as the root user: +

+
make install
+

+ If you had the optional dependencies installed that are + needed to generate the documentation, install it as the + root user: +

+
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. +

+
+

+ If you have upgraded an existing database, skip the rest of + the commands because your database is ready to use. If this + is the first time you install PostgreSQL, continue with the + initialization. +

+

+ 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. +

+

+ --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. +

+

+ --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-17.6/html/index.html. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/postgresql init + script included in the blfs-bootscripts-20250225 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_amcheck, + 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, 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-17.6,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_amcheck +

+
+

+ checks for corruption in one or more PostgreSQL + databases +

+
+

+ 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 +

+
+

+ postgres +

+
+

+ is the PostgreSQL database server +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ SQLite-3.50.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://sqlite.org/2025/sqlite-autoconf-3500400.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: d74bbdca4ab1b2bd46d3b3f8dbb0f3db +

    +
  • +
  • +

    + Download size: 3.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 44 MB (with + documentation) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (Using parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+
+

+ Optional Documentation +

+ +
+

+ SQLite Dependencies +

+
+ Optional +
+

+ libarchive-3.8.1 (required to unzip + the documentation) and libedit +

+
+
+

+ 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-3500400.zip
+

+ Install SQLite by running + the following commands: +

+
./configure --prefix=/usr     \
+            --disable-static  \
+            --enable-fts{4,5} \
+            CPPFLAGS="-D SQLITE_ENABLE_COLUMN_METADATA=1 \
+                      -D SQLITE_ENABLE_UNLOCK_NOTIFY=1   \
+                      -D SQLITE_ENABLE_DBSTAT_VTAB=1     \
+                      -D SQLITE_SECURE_DELETE=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.50.4 &&
+cp -v -R sqlite-doc-3500400/* /usr/share/doc/sqlite-3.50.4
+
+

+ Important +

+

+ Several packages use an sqlite Python plugin. After + installing this package, Python-3.13.7 should be rebuilt + to create this plugin. +

+
+
+
+

+ Command Explanations +

+

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

+

+ --enable-fts{4,5}: + These switches enable support for version 4 and 5 of the full + text search (FTS) extension. +

+

+ CPPFLAGS="-D + SQLITE_ENABLE_COLUMN_METADATA=1 ... : Some + applications 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 https://www.sqlite.org/compile.html. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + sqlite3 +
+
+ Installed Library: + libsqlite3.so +
+
+ Installed Directory: + /usr/share/doc/sqlite-3.50.4 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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.6.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ OpenLDAP Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ GnuTLS-3.8.10, unixODBC-2.3.12, + MariaDB-11.8.3 or PostgreSQL-17.6 or + MySQL, + OpenSLP, + WiredTiger, + and + Berkeley DB (deprecated) (for slapd, also deprecated) +

+
+
+

+ 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.6.10-consolidated-1.patch &&
+autoconf &&
+
+./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-static  \
+            --enable-dynamic  \
+            --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.6.10-consolidated-1.patch &&
+autoconf &&
+
+./configure --prefix=/usr         \
+            --sysconfdir=/etc     \
+            --localstatedir=/var  \
+            --libexecdir=/usr/lib \
+            --disable-static      \
+            --disable-debug       \
+            --with-tls=openssl    \
+            --with-cyrus-sasl     \
+            --without-systemd     \
+            --enable-dynamic      \
+            --enable-crypt        \
+            --enable-spasswd      \
+            --enable-slapd        \
+            --enable-modules      \
+            --enable-rlookups     \
+            --enable-backends=mod \
+            --disable-sql         \
+            --disable-wt          \
+            --enable-overlays=mod &&
+
+make depend &&
+make
+

+ The tests are fragile, and errors may cause the tests to + abort prior to finishing. Some errors may happen due to + timing problems. The tests take around an hour, and the time + is CPU independent due to delays in the tests. On most + systems, the tests will run up to the test065-proxyauth for mdb test. 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.6.10 &&
+cp      -vfr      doc/{drafts,rfc,guide} \
+                  /usr/share/doc/openldap-2.6.10
+
+
+

+ 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-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-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. +

+

+ --disable-versioning: This switch + disables symbol versioning in the OpenLDAP libraries. The default is to + have symbol versioning. Note that if you have built + applications using this package with symbol versioning, and + remove the symbols, the applications may fail to run. +

+
+

+ 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: +

+
+ +
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To automate the startup of the LDAP server at system + bootup, install the /etc/rc.d/init.d/slapd init script + included in the blfs-bootscripts-20250225 package + using the following command: +

+
make install-slapd
+
+

+ Note +

+

+ You'll need to modify /etc/sysconfig/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 the init + script: +

+
/etc/rc.d/init.d/slapd start
+

+ 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.6.10 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Unbound-1.23.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://nlnetlabs.nl/downloads/unbound/unbound-1.23.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 63f13e96ee2b609d6d0aeb119d539210 +

    +
  • +
  • +

    + Download size: 6.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 156 MB (with docs; add + 11 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (Using parallelism=4; + with docs; add 0.3 SBU for tests) +

    +
  • +
+
+

+ Unbound Dependencies +

+
+ Optional +
+

+ libevent-2.1.12, Nettle-3.10.2, Protobuf-c-1.5.2 (for dnstap), + sphinx-8.2.3 (for Python bindings + documentation), SWIG-4.3.1 (for Python bindings), Doxygen-1.14.0 (for html documentation), + dnstap, and + Python2 +

+
+
+

+ 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.14.0 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.23.1 &&
+install -v -m644 doc/html/* /usr/share/doc/unbound-1.23.1
+
+
+

+ Command Explanations +

+

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

+

+ --with-libevent: This option + enables libevent support, which allows for the use of large + outgoing port ranges. +

+

+ --with-pyunbound: This option + enables building the Python bindings. If you want to build + the bindings, you also need to pass the PYTHON_VERSION=3.13 environment variable to + configure. +

+
+
+

+ 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
+

+ 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
+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ If you want the Unbound + server to start automatically when the system is booted, + install the /etc/rc.d/init.d/unbound init + script included in the blfs-bootscripts-20250225 package: +

+
make install-unbound
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + unbound, unbound-anchor, + unbound-checkconf, unbound-control, + unbound-control-setup, and unbound-host +
+
+ Installed Library: + libunbound.so +
+
+ Installed Directories: + /etc/unbound and + /usr/share/doc/unbound-1.23.1 (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ unbound +

+
+

+ is a DNS resolver daemon +

+
+

+ unbound-anchor +

+
+

+ initializes or updates 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.20.12 +

+
+

+ libunbound.so +

+
+

+ provides the Unbound API functions to + programs +

+
+
+
+
+
+
+
+
+
+

+ Part VI. Graphical Components +

+
+
+
+
+
+
+
+

+ Chapter 24. Graphical + Environments +

+
+
+
+
+

+ This chapter contains instructions to build and configure a + graphical user environment. +

+

+ For a long time the only graphical environment usable with + GNU/Linux has been the X Window + System. It uses a client/server model which allows + writing applications completely independent of the graphical + hardware. This has the drawback that accessing modern hardware + acceleration is difficult, so another approach named Wayland is developed. It is a simpler + replacement for X, easier to develop and maintain, using the + OpenGL framework. The main desktop environments GNOME and KDE + have been ported to it. +

+

+ This chapter provides the basic components of the X Window System + and Wayland. For X, the chosen implementation is Xorg, which is a + modular implementation and requires more than 100 packages to be + installed. The distribution of Xorg is given a release number by + the developers, in this case Xorg-7. Individual packages are + updated as needed without changing this number. +

+
+
+
+

+ 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). +

+

+ 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.25.0 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. +

+
+

+ 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.17p2 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. +

+

+ The BLFS editors recommend using the /usr prefix. +

+

+ 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"
+
+

+ Note +

+

+ We will use $XORG_CONFIG in the + instructions for many packages belonging to or related to + Xorg. These instructions won't work properly with the + default behavior of zsh-5.9. So if you are using zsh-5.9 as the interactive + shell and building a package for which the instruction uses + this variable, make zsh-5.9 behavior expanding $XORG_CONFIG same as bash: +

+
set -o shwordsplit
+

+ If you want to make this setting persistent, add this + command into the zsh startup file. +

+
+

+ 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 confusion 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 backslash. It + must then be removed manually. +

+
+

+ If you've installed Sudo-1.9.17p2, 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
+

+ If + you are not using the standard Xorg prefix... +

+
+

+ 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.20.2. +

+
+

+ 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 -e "s@X11R6/man@X11R6/share/man@g" \
+    -e "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
+
+
+
+
+
+

+ util-macros-1.20.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ util-macros Dependencies +

+
+ Required +
+

+ Xorg build + environment (should be set for the following instructions + to work) +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ xorgproto-2024.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xorgproto Dependencies +

+
+ Required +
+

+ util-macros-1.20.2 +

+
+ Optional +
+

+ fop-2.11, + libxslt-1.1.43, xmlto-0.0.29 and asciidoc-10.2.1 (to build additional + documentation) +

+
+

+ Note +

+

+ There is a reciprocal dependency with fop-2.11. If you wish to build + the documentation, you'll need to re-install the Protocol + Headers after the installation is complete and fop-2.11 has been + installed. +

+
+

+ Editor Notes: + https://wiki.linuxfromscratch.org/blfs/wiki/Xorg7ProtocolHeaders +

+
+
+

+ Installation of xorgproto +

+

+ Install xorgproto by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=$XORG_PREFIX .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install &&
+mv -v $XORG_PREFIX/share/doc/xorgproto{,-2024.1}
+
+
+

+ Command Explanations +

+

+ -D legacy=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-2024.1 +
+
+
+
+
+
+
+
+

+ libXau-1.0.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.x.org/pub/individual/lib/libXau-1.0.12.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 4c9f81acf00b62e5de56a912691bd737 +

    +
  • +
  • +

    + Download size: 276 KB +

    +
  • +
  • +

    + Estimated disk space required: 2.9 MB (with test) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with test) +

    +
  • +
+
+

+ libXau Dependencies +

+
+ Required +
+

+ xorgproto-2024.1 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libXdmcp-1.1.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.x.org/pub/individual/lib/libXdmcp-1.1.5.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: ce0af51de211e4c99a111e64ae1df290 +

    +
  • +
  • +

    + Download size: 292 KB +

    +
  • +
  • +

    + Estimated disk space required: 3.0 MB (with test) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with test) +

    +
  • +
+
+

+ libXdmcp Dependencies +

+
+ Required +
+

+ xorgproto-2024.1 +

+
+ Optional +
+

+ xmlto-0.0.29, fop-2.11, libxslt-1.1.43, and + Xorg-SGML-doctools + (for documentation) +

+
+
+

+ Installation of libXdmcp +

+

+ Install libXdmcp by running + the following commands: +

+
./configure $XORG_CONFIG --docdir=/usr/share/doc/libXdmcp-1.1.5 &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libXdmcp.so +
+
+ Installed Directory: + $XORG_PREFIX/share/doc/libXdmcp-1.1.5 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libXdmcp.so +

+
+

+ is the X Display Manager Control Protocol library +

+
+
+
+
+
+
+
+

+ xcb-proto-1.17.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xcb-proto Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ libxml2-2.14.5 (required to run the + tests) +

+
+
+

+ 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
+

+ If you are upgrading from version 1.15.1 or lower, the old + pkgconfig file needs to be removed. Issue, as the + root user: +

+
rm -f $XORG_PREFIX/lib/pkgconfig/xcb-proto.pc
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + $XORG_PREFIX/share/xcb and $XORG_PREFIX/lib/python3.13/site-packages/xcbgen +
+
+
+
+
+
+
+
+

+ libxcb-1.17.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libxcb Dependencies +

+
+ Required +
+

+ libXau-1.0.12 and xcb-proto-1.17.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 (to generate API + documentation) and libxslt-1.1.43 +

+
+
+

+ Installation of libxcb +

+

+ Install libxcb by running + the following commands: +

+
./configure $XORG_CONFIG      \
+            --without-doxygen \
+            --docdir='${datadir}'/doc/libxcb-1.17.0 &&
+LC_ALL=en_US.UTF-8 make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+

+ If the package was built as a non-root user, the installed documentation is + now owned by this user. As the root user, fix the ownership: +

+
chown -Rv root:root $XORG_PREFIX/share/doc/libxcb-1.17.0
+
+
+

+ Command Explanations +

+

+ LC_ALL=en_US.UTF-8: Some Python 3 + script in the building system of this package may fail with + certain system locale settings. This environment variable + forces a locale setting known to work. +

+

+ --without-doxygen: Do + not use doxygen to generate API documentation (default: + auto). Without it, if Doxygen-1.14.0 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-dbe.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.17.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libxcb.so +

+
+

+ is an interface to the X Window System protocol +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.x.org/pub/individual/lib/ +

    +
  • +
  • +

    + Download size: 12 MB +

    +
  • +
  • +

    + Estimated disk space required: 274 MB (47 MB installed) + - if source directories not deleted +

    +
  • +
  • +

    + Estimated build time: 1.8 SBU +

    +
  • +
+
+

+ Xorg + Libraries Dependencies +

+
+ Required +
+

+ Fontconfig-2.17.1 and libxcb-1.17.0 +

+
+ Optional +
+

+ asciidoc-10.2.1, xmlto-0.0.29 with one or + more of the following: fop-2.11, Links-2.30, Lynx-2.9.2, ncompress (for some + tests), and W3m (to generate + additional PDF or text documentation for the libXfont + package). +

+
+
+

+ 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"
+6ad67d4858814ac24e618b8072900664  xtrans-1.6.0.tar.xz
+146d770e564812e00f97e0cbdce632b7  libX11-1.8.12.tar.xz
+e59476db179e48c1fb4487c12d0105d1  libXext-1.3.6.tar.xz
+c5cc0942ed39c49b8fcd47a427bd4305  libFS-1.0.10.tar.xz
+d1ffde0a07709654b20bada3f9abdd16  libICE-1.1.2.tar.xz
+3aeeea05091db1c69e6f768e0950a431  libSM-1.2.6.tar.xz
+e613751d38e13aa0d0fd8e0149cec057  libXScrnSaver-1.2.4.tar.xz
+9acd189c68750b5028cf120e53c68009  libXt-1.3.1.tar.xz
+85edefb7deaad4590a03fccba517669f  libXmu-1.2.1.tar.xz
+05b5667aadd476d77e9b5ba1a1de213e  libXpm-3.5.17.tar.xz
+2a9793533224f92ddad256492265dd82  libXaw-1.0.16.tar.xz
+65b9ba1e9ff3d16c4fa72915d4bb585a  libXfixes-6.0.1.tar.xz
+af0a5f0abb5b55f8411cd738cf0e5259  libXcomposite-0.4.6.tar.xz
+4c54dce455d96e3bdee90823b0869f89  libXrender-0.9.12.tar.xz
+5ce55e952ec2d84d9817169d5fdb7865  libXcursor-1.2.3.tar.xz
+ca55d29fa0a8b5c4a89f609a7952ebf8  libXdamage-1.1.6.tar.xz
+8816cc44d06ebe42e85950b368185826  libfontenc-1.1.8.tar.xz
+66e03e3405d923dfaf319d6f2b47e3da  libXfont2-2.0.7.tar.xz
+d378be0fcbd1f689f9a132e0d642bc4b  libXft-2.3.9.tar.xz
+95a960c1692a83cc551979f7ffe28cf4  libXi-1.8.2.tar.xz
+228c877558c265d2f63c56a03f7d3f21  libXinerama-1.1.5.tar.xz
+24e0b72abe16efce9bf10579beaffc27  libXrandr-1.5.4.tar.xz
+66c9e9e01b0b53052bb1d02ebf8d7040  libXres-1.2.2.tar.xz
+b62dc44d8e63a67bb10230d54c44dcb7  libXtst-1.2.5.tar.xz
+8a26503185afcb1bbd2c65e43f775a67  libXv-1.0.13.tar.xz
+a90a5f01102dc445c7decbbd9ef77608  libXvMC-1.0.14.tar.xz
+74d1acf93b83abeb0954824da0ec400b  libXxf86dga-1.1.6.tar.xz
+d3db4b6dc924dc151822f5f7e79ae873  libXxf86vm-1.1.6.tar.xz
+57c7efbeceedefde006123a77a7bc825  libpciaccess-0.18.1.tar.xz
+229708c15c9937b6e5131d0413474139  libxkbfile-1.1.3.tar.xz
+9805be7e18f858bed9938542ed2905dc  libxshmfence-1.3.3.tar.xz
+bdd3ec17c6181fd7b26f6775886c730d  libXpresent-1.0.1.tar.xz
+EOF
+

+ To download the needed files using Wget-1.25.0, 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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, libXmu, libXpm, 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.?z*}
+  echo "Building $packagedir"
+
+  tar -xf $package
+  pushd $packagedir
+  docdir="--docdir=$XORG_PREFIX/share/doc/$packagedir"
+  
+  case $packagedir in
+    libXfont2-[0-9]* )
+      ./configure $XORG_CONFIG $docdir --disable-devel-docs
+    ;;
+
+    libXt-[0-9]* )
+      ./configure $XORG_CONFIG $docdir \
+                  --with-appdefaultdir=/etc/X11/app-defaults
+    ;;
+
+    libXpm-[0-9]* )
+      ./configure $XORG_CONFIG $docdir --disable-open-zfile
+    ;;
+  
+    libpciaccess* )
+      mkdir build
+      cd    build
+        meson setup --prefix=$XORG_PREFIX --buildtype=release ..
+        ninja
+        #ninja test
+        as_root ninja install
+      popd     # $packagedir
+      continue # for loop
+    ;;
+
+    * )
+      ./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 +

+

+ --disable-open-zfile: + Allow libXpm to build + without the optional compress command present. +

+

+ --disable-devel-docs: + Disable generation of text documentation in the libXfont2 + package if xmlto-0.0.29 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.11 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: + libfontenc.so, libFS.so, libICE.so, + libpciaccess.so, libSM.so, libX11.so, libX11-xcb, + 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, + libXpresent.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/ICE, + $XORG_PREFIX/include/X11/SM, + $XORG_PREFIX/include/X11/Xmu, + $XORG_PREFIX/include/X11/Xtrans, + $XORG_PREFIX/share/doc/libFS, + $XORG_PREFIX/share/doc/libICE-1.1.2, + $XORG_PREFIX/share/doc/libSM-1.2.6, + $XORG_PREFIX/share/doc/libX11-1.8.12, + $XORG_PREFIX/share/doc/libXaw, + $XORG_PREFIX/share/doc/libXext, + $XORG_PREFIX/share/doc/libXi, + $XORG_PREFIX/share/doc/libXmu-1.2.1, + $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 +

+
+

+ 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 +

+
+

+ libXpresent.so +

+
+

+ is the library interface to the X Present Extension +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libxcvt-0.1.3 +

+
+
+
+
+
+

+ Introduction to libxcvt +

+

+ libxcvt is a library + providing a standalone version of the X server implementation + of the VESA CVT standard timing modelines generator. It is + meant to be a direct replacement to the version formerly + provided by the Xorg server. +

+

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

+

+ Package Information +

+
+ +
+

+ libxcvt Dependencies +

+
+ Required +
+

+ Xorg build + environment (should be set for the following instructions + to work) +

+
+
+

+ Installation of libxcvt +

+

+ Install libxcvt by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=$XORG_PREFIX --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 Program: + cvt +
+
+ Installed Library: + libxcvt.so +
+
+ Installed Directory: + $XORG_PREFIX/include/libxcvt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ cvt +

+
+

+ calculates VESA Coordinated Video Timing (CVT) + modelines for use with X +

+
+

+ libxcvt.so +

+
+

+ contains functions for calculating VESA CVT +

+
+
+
+
+
+
+
+

+ xcb-util-0.4.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xcb-util Dependencies +

+
+ Required +
+

+ libxcb-1.17.0 +

+
+ Optional +
+

+ Doxygen-1.14.0 (for documentation) +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ XCB + Utilities +

+
+
+
+
+
+

+ Introduction to XCB Utilities +

+

+ The XCB utilities provide extensions that developers can use + when making X Window software. xcb-util-0.4.1 was + just installed but these utilities offer even more extensions + that X Window software may depend on. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://xcb.freedesktop.org/dist/ +

    +
  • +
  • +

    + Download size: 1.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 13.3 MB +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (ignoring the time to + download) +

    +
  • +
+
+

+ XCB + Utilities Dependencies +

+
+ Required +
+

+ libxcb-1.17.0 and xcb-util-0.4.1 +

+
+
+

+ Downloading XCB Utilities +

+

+ 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 > xcb-utils.md5 << "EOF"
+a67bfac2eff696170259ef1f5ce1b611  xcb-util-image-0.4.1.tar.xz
+fbdc05f86f72f287ed71b162f1a9725a  xcb-util-keysyms-0.4.1.tar.xz
+193b890e2a89a53c31e2ece3afcbd55f  xcb-util-renderutil-0.3.10.tar.xz
+581b3a092e3c0c1b4de6416d90b969c3  xcb-util-wm-0.4.2.tar.xz
+bc30cd267b11ac5803fe19929cabd230  xcb-util-cursor-0.1.5.tar.xz
+EOF
+

+ To download the needed files using Wget-1.25.0, use the + following commands: +

+
mkdir xcb-utils &&
+cd    xcb-utils &&
+grep -v '^#' ../xcb-utils.md5 | awk '{print $2}' | wget -i- -c \
+     -B https://xcb.freedesktop.org/dist/ &&
+md5sum -c ../xcb-utils.md5
+
+
+

+ Installation of XCB Utilities +

+
+

+ 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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 '^#' ../xcb-utils.md5 | awk '{print $2}')
+do
+  packagedir=${package%.tar.?z*}
+  tar -xf $package
+  pushd $packagedir
+     ./configure $XORG_CONFIG
+     make
+     as_root make install
+  popd
+  rm -rf $packagedir
+done
+

+ Finally, exit the shell that was started earlier: +

+
exit
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libxcb-image.so, libxcb-keysyms.so, + libxcb-render-util.so, libxcb-ewmh.so, libxcb-icccm.so, + and libxcb-cursor.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ libxcb-image.so +

+
+

+ is a port of Xlib's XImage and XShmImage functions +

+
+

+ libxcb-keysyms.so +

+
+

+ provides the standard X key constants and API + functions for conversion to/from keycodes +

+
+

+ libxcb-render-util.so +

+
+

+ provides convenience functions for the Render + extension +

+
+

+ libxcb-ewmh.so +

+
+

+ provides the client and window-manager helpers for + EWMH +

+
+

+ libxcb-icccm.so +

+
+

+ provides the client and window-manager helpers for + ICCCM +

+
+

+ libxcb-cursor.so +

+
+

+ is a port of Xlib's libXcursor functions +

+
+
+
+
+
+
+
+

+ Mesa-25.1.8 +

+
+
+
+
+
+

+ Introduction to Mesa +

+

+ Mesa is an OpenGL compatible + 3D graphics library. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://mesa.freedesktop.org/archive/mesa-25.1.8.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: fe3eb39e8a3c6fbb36eb3da57be022e7 +

    +
  • +
  • +

    + Download size: 45 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.1 GB (with docs; add + 576 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 3.8 SBU (with docs; add 1.7 SBU + for tests; both with parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+
+ +
+

+ Mesa + Dependencies +

+
+ Required +
+

+ Xorg + Libraries, libdrm-2.4.125, Mako-1.3.10, and PyYAML-6.0.2 +

+
+ Recommended +
+ +
+ +
+ +
+

+ Note +

+

+ An Internet connection is needed for building the Nouveau + Vulkan driver. The system certificate store may need to be + set up with make-ca-1.16.1 before building this + package. +

+
+
+

+ Note +

+

+ Choosing Mesa + Drivers +

+

+ In the instructions below, all the available drivers are + built. That will almost always work. However, it is not + efficient. Depending on your video hardware, you probably + need only specific drivers. +

+

+ The first thing you need to know is which type of video + device you have. In some cases it is built into the CPU. In + others it is a separate PCI card. In either case you can + tell what video hardware you have by installing pciutils-3.14.0 and running: +

+
lspci | grep VGA
+

+ The video device is most likely one of three families: AMD, + Intel, or NVIDIA. See the Command Explanations for + -D + gallium-drivers=auto below to see what options + are available for your specific video hardware (or emulated + video hardware). You should probably add the softpipe or + llvmpipe option as a backup driver. +

+

+ For 'platforms' you can select x11 and/or wayland. Note + that in BLFS currently only Gnome and KDE can use wayland. + If you are not going to use one of those desktop + environments then you probably only want x11. +

+

+ For 'vulkan-drivers' you may want to limit the selection to + your current hardware. These drivers are used by some + specific applications. For example, ffmpeg (including + ffplay) will use Vulkan instead of OpenGL for rendering + video on the GPU. If you do not want to do this you may or + may not want to install them. See the Command Explanations + for -D + vulkan-drivers=auto below to see what options + are available for your specific video hardware (or emulated + video hardware). You should probably add the swrast option + as a backup driver unless you don't need Vulkan at all. +

+
+
+ Optional +
+

+ libgcrypt-1.11.2, libunwind-1.8.2, lm-sensors-3-6-2, + Nettle-3.10.2, Valgrind-3.25.1, + 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), and + libtizonia, +

+
+
+

+ Kernel + Configuration +

+

+ Enable the following options in the kernel configuration and + recompile the kernel if necessary: +

+
Device Drivers --->
+  Graphics support --->
+    <*/M>   Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    
+    # For r300 or r600:
+    < /*/M> ATI Radeon                                              [DRM_RADEON]
+    
+    # For radeonsi:
+    < /*/M> AMD GPU                                                 [DRM_AMDGPU]
+    [*]       Enable amdgpu support for SI parts                 [DRM_AMDGPU_SI]
+    [*]       Enable amdgpu support for CIK parts               [DRM_AMDGPU_CIK]
+      Display Engine Configuration --->
+      [*]   AMD DC - Enable new display engine                      [DRM_AMD_DC]
+    
+    # For nouveau:
+    < /*/M> Nouveau (NVIDIA) cards                                 [DRM_NOUVEAU]
+    [*]       Use GSP firmware for Turing/Ampere (needs firmware installed)
+                                                  ...  [DRM_NOUVEAU_GSP_DEFAULT]
+    
+    # For i915, crocus, or iris:
+    < /*/M> Intel 8xx/9xx/G3x/G4x/HD Graphics                         [DRM_I915]
+    
+    # For iris:
+    < /*/M> Intel Xe2 Graphics                                          [DRM_XE]
+    [*]       Enable display support                            [DRM_XE_DISPLAY]
+    (*)       Force probe xe for selected Intel hardware IDs
+                                                       ...  [DRM_XE_FORCE_PROBE]
+    
+    # For llvmpipe or softpipe:
+    < /*>   Virtual GEM provider                                      [DRM_VGEM]
+    
+    # For svga:
+    < /*/M> DRM driver for VMware Virtual GPU                       [DRM_VMWGFX]
+
+

+ Note +

+

+ The corresponding Mesa Gallium3D driver name is provided as + the comment for the configuration entries. If you don't + know the name of the Mesa Gallium3D driver for your GPU, + see Mesa + Gallium3D Drivers below. +

+

+ For the GPUs supported by the Iris Gallium3D driver, with + CONFIG_DRM_I915 enabled and + CONFIG_DRM_XE_FORCE_PROBE set + to the string *, the i915 + driver will be used if it supports the GPU, and the Xe + driver will be used if it supports the GPU but the i915 + driver does not. If you are sure your GPU is supported by + the i915 driver, you can disable the Xe driver to save some + build time. If your GPU is supported by both drivers and + you want to use the Xe driver, you can disable the i915 + driver, or make the i915 driver deny your GPU via the + CONFIG_DRM_I915_FORCE_PROBE + option, for example setting it to !7d55 would make i915 deny the Meteor Lake + integrated GPU (of which the PCI ID is 8086:7d55), leaving it for the Xe driver. +

+

+ CONFIG_DRM_RADEON, CONFIG_DRM_AMDGPU, CONFIG_DRM_NOUVEAU, CONFIG_DRM_I915, and CONFIG_DRM_XE may require firmware. See + About Firmware for details. +

+

+ Selecting CONFIG_DRM_RADEON, + CONFIG_DRM_AMDGPU, or + CONFIG_DRM_NOUVEAU as + “y” is not recommended. If it + is, any required firmware must be built as a part of the + kernel image or the initramfs for the driver to function + correctly. +

+

+ The sub-entries under CONFIG_DRM_AMDGPU are used to ensure the + AMDGPU kernel driver supports all GPUs using the + radeonsi driver. They are not + needed if you won't need CONFIG_DRM_AMDGPU itself. They may be + unneeded for some GPU models. +

+

+ For llvmpipe or softpipe, CONFIG_DRM_VGEM is required or X clients + may fail to start with a cryptic message Error: couldn't get an RGB, + Double-buffered visual. Strictly speaking, it can be + compiled as a module. But the module will not be loaded + automatically, so it's more convenient to build it as a + part of the kernel image. +

+
+
+
+

+ 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-add_xdemos-4.patch
+

+ Install Mesa by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                 \
+      --prefix=$XORG_PREFIX    \
+      --buildtype=release      \
+      -D platforms=x11,wayland \
+      -D gallium-drivers=auto  \
+      -D vulkan-drivers=auto   \
+      -D valgrind=disabled     \
+      -D video-codecs=all      \
+      -D libunwind=disabled    &&
+
+ninja
+
+

+ Warning +

+

+ Please ask your lawyer or remove the -D video-codecs=all option if + you will distribute the compiled Mesa libraries and drivers + to others. +

+
+

+ To test the results, issue: +

+
meson configure -D build-tests=true &&
+sed '/float rsqrtf/,/^}/d' \
+    -i ../src/gallium/drivers/llvmpipe/lp_test_arit.c &&
+ninja test
+

+ Now, as the root user: +

+
ninja install
+

+ If desired, install the optional documentation by running the + following commands as the root user: +

+
cp -rv ../docs -T /usr/share/doc/mesa-25.1.8
+
+
+

+ 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 2 GB range. +

+

+ + -D + gallium-drivers=auto: This parameter controls + which Gallium3D drivers should be built: +

+
+
    +
  • +

    + auto selects all Gallium3D + drivers available for x86. With a comma-separated list, + only a subset of these drivers will be built. If you + precisely know which drivers you need, you can select + them explicitly. For example, -D + gallium-drivers=radeonsi,iris,llvmpipe. +

    +
  • +
  • +

    + r300 (for ATI Radeon 9000 + or Radeon X series) +

    +
  • +
  • +

    + r600 (for AMD/ATI Radeon + HD 2000-6000 series) +

    +
  • +
  • +

    + radeonsi (for AMD Radeon + HD 7000 or newer AMD GPU models) +

    +
  • +
  • +

    + nouveau (for supported + NVIDIA GPUs, they are listed as all “3D features” + either “DONE” or “N/A” in + the + Nouveau status page) +

    +
  • +
  • +

    + virgl (for a QEMU virtual + GPU with virglrender + support; note that BLFS qemu-10.0.3 is not built with + virglrender) +

    +
  • +
  • +

    + svga (for a VMWare virtual + GPU) +

    +
  • +
  • +

    + llvmpipe (using CPU for 3D + rasterization. Note that it's much slower than using a + modern 3D-capable GPU, so it should be only used if the + GPU is not supported by other drivers) +

    +
  • +
  • +

    + softpipe (also using CPU + for 3D rasterization, but slower than llvmpipe. There + is not much reason to use it unless LLVM is not + available) +

    +
  • +
  • +

    + iris (for Intel GPUs + shipped with Broadwell or newer CPUs, or as a dedicated + PCIe card) +

    +
  • +
  • +

    + crocus (for Intel GMA + 3000, X3000 series, 4000 series, or X4000 series GPUs + shipped with chipsets, or Intel HD GPUs shipped with + pre-Broadwell CPUs) +

    +
  • +
  • +

    + i915 (for Intel GMA 900, + 950, 3100, or 3150 GPUs shipped with chipsets or Atom + D/N 4xx/5xx CPUs) +

    +
  • +
  • +

    + zink (uses Vulkan to + implement OpenGL, and while unstable at times, it can + be a decent replacement for non-performant gallium + drivers like nouveau) +

    +
  • +
+
+

+ -D + vulkan-drivers=auto: This parameter controls + which Vulkan drivers should be built: +

+
+
    +
  • +

    + auto selects all Vulkan + drivers available for x86. With a comma-separated list, + only a subset of these drivers will be built. If you + precisely know which drivers you need, you can select + them explicitly. For example, -D + vulkan-drivers=amd,nouveau,swrast. +

    +
  • +
  • +

    + amd (for AMD Radeon HD + 7730 or newer AMD GPUs) +

    +
  • +
  • +

    + intel (for Intel GPUs + shipped with Skylake or newer CPUs, or as a dedicated + PCIe card) +

    +
  • +
  • +

    + intel_hasvk (for Intel + GPUs shipped with Ivy Bridge, Haswell, or Broadwell + CPUs) +

    +
  • +
  • +

    + nouveau (for GTX 16XX, RTX + 20XX, or newer NVIDIA GPUs) +

    +
  • +
  • +

    + swrast (for using the CPU + for 3D rasterization) Note that it's much slower than + using a modern 3D-capable GPU, so it should be only + used if the GPU is not supported by other drivers. +

    +
  • +
  • +

    + "" (empty list, use + -D vulkan-drivers="" if + you've not installed and you don't plan to install + Vulkan-Loader-1.4.321) +

    +
  • +
+
+

+ -D platforms=...: + This parameter controls which windowing systems will be + supported. Available linux platforms are x11 and wayland. +

+

+ -D valgrind=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. +

+

+ -D video-codecs=all: + This parameter enables building codecs for video formats + covered by third-party patents. +

+

+ -D + libunwind=disabled: This parameter disables the + usage of libunwind. +

+

+ meson configure -D + build-tests=true: This command will + reconfigure the build to set -D + build-tests=true, but keep the other options specified + in the meson + setup command unchanged. It allows + ninja test to + build and run unit tests. +

+

+ -D egl-native-platform="...": + This parameter controls which Embedded Graphics Library + support will be built. Available linux options are auto + (default), x11, wayland, surfaceless, and drm. +

+

+ -D legacy-x11="..." This + parameter controls which legacy X11 features get built-in + support. Available linux options are none (default) and dri2. + These features are rarely needed anymore. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + glxgears, glxinfo, + mme_fermi_sim_hw_test, and mme_tu104_sim_hw_test +
+
+ Installed Libraries: + libEGL.so, libGL.so, + libGLESv1_CM.so, libGLESv2.so, libgbm.so, libglapi.so, + libgallium-25.1.8.so, and libxatracker.so +
+
+ Installed DRI Driver + Stubs: libdril_dri.so and + symlinks to it: crocus_dri.so, i915_dri.so, iris_dri.so, + kms_swrast_dri.so, nouveau_dri.so, r300_dri.so, + r600_dri.so, r600_drv_video.so, radeonsi_dri.so, + swrast_dri.so, virtio_gpu_dri.so, vmwgfx_dri.so, and + zink_dri.so +
+
+ Installed VA-API + Drivers: nouveau_drv_video.so, radeonsi_drv_video.so, + and virtio_gpu_drv_video.so +
+
+ Installed GBM Backends: + dri_gbm.so +
+
+ Installed VDPAU + Drivers: libvdpau_nouveau.so, libvdpau_r600.so, + libvdpau_radeonsi.so, and libvdpau_virtio_gpu.so (many of + these drivers are hard-linked) +
+
+ Installed Vulkan + Drivers: libvulkan_intel_hasvk.so, libvulkan_intel.so, + libvulkan_lvp.so, libvulkan_nouveau.so, and + libvulkan_radeon.so +
+
+ Installed Directories: + $XORG_PREFIX/{include/{EGL,GLES,GLES2,GLES3,KHR}, + $XORG_PREFIX/lib/{dri,gbm,vdpau}}, + $XORG_PREFIX/share/drirc.d (contains workarounds for + various applications, particularly browsers and games), + $XORG_PREFIX/share/vulkan, and + /usr/share/doc/mesa-25.1.8 +
+
+
+
+

+ 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 +

+
+

+ dri_gbm.so +

+
+

+ implements Graphics Buffer Management functions + needed by libgbm on + top of libdrm +

+
+

+ libdril_dri.so +

+
+

+ is a stub allowing Xorg server to co-operate with + the Gallium3D drivers +

+
+

+ libEGL.so +

+
+

+ provides a native platform graphics interface as + defined by the EGL-1.4 specification +

+
+

+ libgallium-25.1.8.so +

+
+

+ contains all the Gallium3D drivers +

+
+

+ libgbm.so +

+
+

+ is the Mesa + Graphics Buffer Manager library +

+
+

+ libglapi.so +

+
+

+ is the Mesa + implementation of the OpenGL API +

+
+

+ 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 +

+
+

+ libxatracker.so +

+
+

+ is the XA state tracker for the VMWare vmwgfx + driver +

+
+
+
+
+
+
+
+

+ xbitmaps-1.1.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xbitmaps Dependencies +

+
+ Required +
+

+ util-macros-1.20.2 +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.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.50, Mesa-25.1.8, xbitmaps-1.1.3, + and xcb-util-0.4.1 +

+
+ Optional +
+

+ Linux-PAM-1.7.1 and both cairo-5c and + Nickle (only + if you wish to try to run the undocumented xkeyhost script). +

+
+
+

+ 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"
+30f898d71a7d8e817302970f1976198c  iceauth-1.0.10.tar.xz
+7dcf5f702781bdd4aaff02e963a56270  mkfontscale-1.2.3.tar.xz
+b9efe1d21615c474b22439d41981beef  sessreg-1.1.4.tar.xz
+1d61c9f4a3d1486eff575bf233e5776c  setxkbmap-1.3.4.tar.xz
+6484cd8ee30354aaaf8f490988f5f6ef  smproxy-1.0.8.tar.xz
+bf7b5a94561c7c98de447ea53afabfc4  xauth-1.1.4.tar.xz
+37063ccf902fe3d55a90f387ed62fe1f  xcmsdb-1.0.7.tar.xz
+f97e81b2c063f6ae9b18d4b4be7543f6  xcursorgen-1.0.9.tar.xz
+700556957773d378fa16a65a4406be0a  xdpyinfo-1.4.0.tar.xz
+830a54ef3ba338013e06a1b5b012b4bd  xdriinfo-1.0.8.tar.xz
+f29d1544f8dd126a1b85e2f7f728672d  xev-1.2.6.tar.xz
+687e42aa5afaec37f14da3072651c635  xgamma-1.0.8.tar.xz
+45c7e956941194e5f06a9c7307f5f971  xhost-1.0.10.tar.xz
+8e4d14823b7cbefe1581c398c6ab0035  xinput-1.6.4.tar.xz
+83d711948de9ccac550d2f4af50e94c3  xkbcomp-1.4.7.tar.xz
+543c0535367ca30e0b0dbcfa90fefdf9  xkbevd-1.1.6.tar.xz
+07483ddfe1d83c197df792650583ff20  xkbutils-1.0.6.tar.xz
+f62b99839249ce9a7a8bb71a5bab6f9d  xkill-1.0.6.tar.xz
+da5b7a39702841281e1d86b7349a03ba  xlsatoms-1.1.4.tar.xz
+ab4b3c47e848ba8c3e47c021230ab23a  xlsclients-1.1.5.tar.xz
+ba2dd3db3361e374fefe2b1c797c46eb  xmessage-1.0.7.tar.xz
+0d66e07595ea083871048c4b805d8b13  xmodmap-1.0.11.tar.xz
+ab6c9d17eb1940afcfb80a72319270ae  xpr-1.2.0.tar.xz
+5ef4784b406d11bed0fdf07cc6fba16c  xprop-1.2.8.tar.xz
+dc7680201afe6de0966c76d304159bda  xrandr-1.5.3.tar.xz
+c8629d5a0bc878d10ac49e1b290bf453  xrdb-1.2.2.tar.xz
+55003733ef417db8fafce588ca74d584  xrefresh-1.1.0.tar.xz
+18ff5cdff59015722431d568a5c0bad2  xset-1.2.5.tar.xz
+fa9a24fe5b1725c52a4566a62dd0a50d  xsetroot-1.1.3.tar.xz
+d698862e9cad153c5fefca6eee964685  xvinfo-1.1.5.tar.xz
+b0081fb92ae56510958024242ed1bc23  xwd-1.0.9.tar.xz
+c91201bc1eb5e7b38933be8d0f7f16a8  xwininfo-1.1.6.tar.xz
+3e741db39b58be4fef705e251947993d  xwud-1.0.7.tar.xz
+EOF
+

+ To download the needed files using Wget-1.25.0, 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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
+     ./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, mkfontdir, mkfontscale, + sessreg, setxkbmap, smproxy, xauth, 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 +

+
+

+ 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 +

+
+

+ xauth +

+
+

+ is the X authority file utility +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ luit-20240910 +

+
+
+
+
+
+

+ Introduction to luit +

+

+ The luit package is a filter + that can be run between an arbitrary application and a UTF-8 + terminal emulator. It will convert application output from + the locale’s encoding into UTF‐8, and convert terminal input + from UTF‐8 into the locale’s encoding. +

+

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

+

+ Package Information +

+
+ +
+

+ luit + Dependencies +

+
+ Required +
+

+ Xorg Applications +

+
+
+

+ Installation of luit +

+

+ Install luit 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: + luit +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + None +
+
+
+
+
+
+
+
+

+ xcursor-themes-1.0.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ xcursor-themes Dependencies +

+
+ Required +
+

+ Xorg Applications +

+
+
+

+ Installation of xcursor-themes +

+
+

+ Note +

+

+ We explicitly install the cursor themes in /usr instead of + $XORG_PREFIX so non-Xorg desktop + environments can find them. +

+
+

+ Install xcursor-themes 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/handhelds, + /usr/share/icons/redglass, and + /usr/share/icons/whiteglass +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xorg + Fonts Dependencies +

+
+ Required +
+

+ xcursor-themes-1.0.7 +

+
+
+

+ 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"
+a6541d12ceba004c0c1e3df900324642  font-util-1.4.1.tar.xz
+a56b1a7f2c14173f71f010225fa131f1  encodings-1.1.0.tar.xz
+79f4c023e27d1db1dfd90d041ce89835  font-alias-1.0.5.tar.xz
+546d17feab30d4e3abcf332b454f58ed  font-adobe-utopia-type1-1.0.5.tar.xz
+063bfa1456c8a68208bf96a33f472bb1  font-bh-ttf-1.0.4.tar.xz
+51a17c981275439b85e15430a3d711ee  font-bh-type1-1.0.4.tar.xz
+00f64a84b6c9886040241e081347a853  font-ibm-type1-1.0.4.tar.xz
+fe972eaf13176fa9aa7e74a12ecc801a  font-misc-ethiopic-1.0.5.tar.xz
+3b47fed2c032af3a32aad9acc1d25150  font-xfree86-type1-1.0.5.tar.xz
+EOF
+

+ To download the needed files using Wget-1.25.0, 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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.?z*}
+  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 the fonts are outside of the default search path of + several packages if XORG_PREFIX is not /usr, make symlinks to the + Xorg TrueType font + directories in /usr/share/fonts + 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 +

+
+
+
+
+
+
+
+

+ XKeyboardConfig-2.45 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ XKeyboardConfig Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Optional (required for tests) +
+

+ libxkbcommon-1.11.0, pytest-8.4.1, + and Xorg Applications +

+
+
+

+ Installation of XKeyboardConfig +

+

+ Install XKeyboardConfig by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=$XORG_PREFIX --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+
+

+ Important +

+

+ If upgrading from version 2.44 or earlier, the installation + will fail if some files are not symbolic links. To fix + this, run as the root user: +

+
if [ -d $XORG_PREFIX/share/X11/xkb ]; then
+  rm -rf $XORG_PREFIX/share/X11/xkb
+  rm -f  $XORG_PREFIX/share/man/man7/xkeyboard-config.7
+  rm -f  $XORG_PREFIX/share/pkgconfig/xkeyboard-config.pc
+fi
+
+

+ 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: + None +
+
+ Installed Directory: + $XORG_PREFIX/share/X11/xkb +
+
+
+
+
+
+
+
+

+ Xwayland-24.1.8 +

+
+
+
+
+
+

+ Introduction to Xwayland +

+

+ The Xwayland package is an + Xorg server running on top of the wayland server. It has been + separated from the main Xorg server package. It allows + running X clients inside a wayland session. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://www.x.org/pub/individual/xserver/xwayland-24.1.8.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 1644a66e2843a400885e90051094b582 +

    +
  • +
  • +

    + Download size: 1.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 28 MB (add 362 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with parallelism=4; add + 1.7 SBU for tests, not including clone time) +

    +
  • +
+
+

+ Xwayland Dependencies +

+
+ Required +
+

+ libxcvt-0.1.3, Pixman-0.46.4, wayland-protocols-1.45, + Xorg Applications (runtime), and + Xorg + Fonts (only font-util) +

+
+ Recommended +
+ +
+ Optional +
+

+ git-2.50.1 + (to download packages needed for the tests), libei-1.4.1, libgcrypt-1.11.2, Nettle-3.10.2, + xmlto-0.0.29, Xorg Legacy Fonts + (only bdftopcf, for building fonts required for the tests), + rendercheck + (for tests), and weston + (for tests) +

+
+
+

+ Installation of Xwayland +

+

+ Install xwayland by running + the following commands: +

+
sed -i '/install_man/,$d' meson.build &&
+
+mkdir build &&
+cd    build &&
+
+meson setup ..              \
+      --prefix=$XORG_PREFIX \
+      --buildtype=release   \
+      -D xkb_output_dir=/var/lib/xkb &&
+ninja
+

+ Building the test framework needs some work. First, weston + brings in several dependencies, but the number can be reduced + by disabling unneeded features. The meson command for a + stripped down build of weston is shown in + Upstream continuous integration build. +

+

+ Running the tests involves downloading two other frameworks, + in addition to the mentioned optional dependencies: +

+
mkdir tools &&
+pushd tools &&
+
+git clone https://gitlab.freedesktop.org/mesa/piglit.git --depth 1 &&
+cat > piglit/piglit.conf << EOF                                    &&
+[xts]
+path=$(pwd)/xts
+EOF
+
+git clone https://gitlab.freedesktop.org/xorg/test/xts --depth 1   &&
+
+export DISPLAY=:22           &&
+../hw/vfb/Xvfb $DISPLAY &
+VFB_PID=$!                   &&
+cd xts                       &&
+CFLAGS=-fcommon ./autogen.sh &&
+make                         &&
+kill $VFB_PID                &&
+unset DISPLAY VFB_PID        &&
+popd
+

+ Then the tests can be run with: +

+
XTEST_DIR=$(pwd)/tools/xts PIGLIT_DIR=$(pwd)/tools/piglit ninja test
+

+ Now, as the root user: +

+
ninja install &&
+cat >> /etc/sysconfig/createfiles << "EOF"
+/tmp/.X11-unix dir 1777 root root
+EOF
+

+ If Xorg-Server-21.1.18 is not + installed and you do not plan to install it later, you can + install Xvfb + from this package. As the root user: +

+
install -vm755 hw/vfb/Xvfb /usr/bin
+
+
+

+ Command Explanations +

+

+ sed -i '/install_man/,$d' + meson.build: Prevents installing a manual + page for Xserver, which is also + provided by Xorg-Server-21.1.18. Remove this + command if Xorg-Server-21.1.18 is not + installed and you don't plan to install it later. +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D secure-rpc=false: This option + disables building RPC support if libtirpc-1.3.6 is not + installed. +

+

+ cat >> + /etc/sysconfig/createfiles...: This command + creates the /tmp/.X11-unix + directory at startup, and ensures that the permissions and + ownership are correct as required by applications using + Xwayland. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + Xwayland +
+
+ Installed Library: + None +
+
+ Installed Directory: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ Xwayland +

+
+

+ Allows X clients to run under wayland +

+
+
+
+
+
+
+
+

+ Xorg-Server-21.1.18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+
    +
  • +

    + With the removal of the xf86-video-* drivers, the + TearFree option is no longer functional. To work around + this, upstream has added the TearFree option to the + default modesetting driver. This patch backports this + feature. Apply this patch if you are going to use Xorg + in an environment without a compositor (such as TWM, + IceWM, Openbox, or Fluxbox). +

    +

    + Optional patch: + https://www.linuxfromscratch.org/patches/blfs/12.4/xorg-server-21.1.18-tearfree_backport-1.patch +

    +
  • +
+
+

+ Xorg + Server Dependencies +

+
+ Required +
+

+ libxcvt-0.1.3, Pixman-0.46.4, Xorg Fonts + (only font-util), and at runtime: xkeyboard-config-2.45 +

+
+ Recommended +
+ +
+

+ Note +

+

+ Although it's possible to build this + package without dbus-1.16.2 installed or run the + Xorg server without elogind-255.17 functioning, it + would require running the Xorg server as the root user or Xorg server will + malfunction or even fail to start. The BLFS editors + strongly discourage skipping these two + dependencies. Do not attempt to do so unless you + really know what you are doing. +

+
+
+ Optional +
+

+ acpid-2.0.34 (runtime), Doxygen-1.14.0 (to + build API documentation), fop-2.11 (to build documentation), libunwind-1.8.2, Nettle-3.10.2, libgcrypt-1.11.2, XCB Utilities + (to build Xephyr), xmlto-0.0.29 (to build documentation), + xkeyboard-config-2.45 (for tests), + rendercheck + (for tests), and xorg-sgml-doctools + (to build documentation) +

+
+
+

+ Kernel Configuration +

+

+ The traditional Device Dependent X (DDX) drivers have been + removed from BLFS in favor of the modesetting_drv driver which will be built + as a part of this package. To use the modesetting_drv driver, the kernel must + provide a Direct Rendering Manager (DRM) driver for your GPU. +

+

+ If your GPU supports 3D acceleration and Mesa-25.1.8 provides a + Gallium3D driver for utilizing its 3D capability, you should + have already enabled the necessary kernel configuration + options in Mesa Kernel Configuration. + Otherwise, you need to find the kernel configuration option + of the DRM driver for the GPU and enable it. Notably, the + virtual GPUs provided by some virtual machine managers: +

+
Device Drivers --->
+  Graphics support --->
+    <*/M>   Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    < /*/M> DRM driver for VMware Virtual GPU                       [DRM_VMWGFX]
+    < /*/M> DRM Support for bochs dispi vga interface (qemu stdvga)  [DRM_BOCHS]
+    < /*/M> Virtual Box Graphics Card                            [DRM_VBOXVIDEO]
+

+ If the kernel does not provide a DRM driver for your GPU, on + most x86 systems the “simple frame buffer” DRM driver running + on VESA or UEFI frame buffer can be used as a fallback. + Enable the following options in the kernel configurations if + you don't have a dedicated DRM driver for the GPU, or you + want to keep the simple frame buffer driver as a fallback in + case the dedicated driver fails: +

+
Device Drivers --->
+  Firmware Drivers --->
+    [*] Mark VGA/VBE/EFI FB as generic system framebuffer       [SYSFB_SIMPLEFB]
+  Graphics support --->
+    <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    Drivers for system framebuffers --->
+      <*> Simple framebuffer driver                              [DRM_SIMPLEDRM]
+

+ To allow the kernel to print debug messages at an early boot + stage, CONFIG_DRM and + CONFIG_DRM_SIMPLEDRM should not + be built as kernel modules unless an initramfs will be used. +

+

+ If you want to use the simple frame buffer driver on a system + booted via BIOS (instead of UEFI), add the following line + before the first menuentry block + in the /boot/grub/grub.cfg file + to initialize the VESA frame buffer: +

+
set gfxpayload=1024x768x32
+

+ You may replace 1024, + 768, and 32 with a resolution and color depth setting + suitable for your monitor. +

+

+ If all of these DRM drivers do not work for you and you need + to use a DDX driver with a non-DRM kernel GPU driver (usually + named CONFIG_FB_* in the kernel + configuration, or existing as out-tree kernel modules), or + you need an device specific functionality requiring a DDX + driver, consult + a prior version of BLFS, or + an even earlier prior version for more DDX drivers. +

+
+
+

+ Installation of Xorg Server +

+

+ First, if you need the TearFree option to work around screen + tearing, apply the backported patch: +

+
patch -Np1 -i ../xorg-server-21.1.18-tearfree_backport-1.patch
+

+ Install the server by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..               \
+      --prefix=$XORG_PREFIX  \
+      --localstatedir=/var   \
+      -D glamor=true         \
+      -D systemd_logind=true \
+      -D xkb_output_dir=/var/lib/xkb &&
+ninja
+

+ To test the results, issue: ninja test. You will need + to run ldconfig + as the root user first or + some tests may fail. +

+

+ Now as the root user: +

+
ninja install &&
+mkdir -pv /etc/X11/xorg.conf.d &&
+install -v -d -m1777 /tmp/.{ICE,X11}-unix &&
+cat >> /etc/sysconfig/createfiles << "EOF"
+/tmp/.ICE-unix dir 1777 root root
+/tmp/.X11-unix dir 1777 root root
+EOF
+
+
+

+ Command Explanations +

+

+ -D glamor=true: + Ensure building the Glamor module. It's needed to build the + modesetting_drv driver which + replaces the traditional Device Dependent X (DDX) drivers. +

+

+ -D secure-rpc=false: This option + disables building RPC support if libtirpc-1.3.6 is not + installed. +

+

+ -D + systemd_logind=true: This switch makes the + building system error out if dbus-1.16.2 is not installed. The + BLFS editors discourage building this package without + dbus-1.16.2 installed. +

+

+ -D suid_wrapper=true: Builds the + suid-root wrapper for legacy DDX driver support on rootless + xserver systems. +

+

+ cat >> + /etc/sysconfig/createfiles...: This command + creates the /tmp/.ICE-unix and + /tmp/.X11-unix directories at + startup, and ensures that the permissions and ownership are + correct as required by the server. +

+

+ -D xephyr=true: This option + allows building Xephyr if its dependencies are met. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gtf, X, Xnest, Xorg, Xvfb, and + optionally Xephyr +
+
+ Installed Libraries: + several under + $XORG_PREFIX/lib/xorg/modules/ including the modesetting_drv driver +
+
+ Installed Directories: + /etc/X11/xorg.conf.d, + $XORG_PREFIX/include/xorg, $XORG_PREFIX/lib/xorg, and + $XORG_PREFIX/share/X11/xorg.conf.d +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gtf +

+
+

+ calculates VESA GTF mode lines +

+
+

+ X +

+
+

+ is a symbolic link to Xorg +

+
+

+ 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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Xorg Input Drivers +

+
+
+
+
+
+

+ Introduction to Xorg Input Drivers +

+

+ The Xorg Input Drivers page + contains the instructions for building Xorg input drivers + that are necessary in order for Xorg Server to respond user + inputs. +

+
+
+
+
+

+ Xorg Input Drivers +

+
+
+
+ +
+
+
+

+ libevdev 1.13.4 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ libevdev Dependencies +
+
+ Optional +
+

+ Doxygen-1.14.0, Valgrind-3.25.1 + (optional for tests), and check (required for + tests) +

+
+
+
+
+
+

+ 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, ...)          [INPUT]
+    <*/M>   Event interface                                        [INPUT_EVDEV]
+

+ If you want to test this package with full coverage, the + following options are needed as well: +

+
Device Drivers --->
+  Input device support --->
+    -*- Generic input layer (needed for keyboard, mouse, ...)            [INPUT]
+    [*]   Miscellaneous devices --->                                [INPUT_MISC]
+      <*/M>   User level driver support                           [INPUT_UINPUT]
+

+ If you build this as a module, it needs to be inserted + before the test suite runs. +

+
+
+
+
+
+

+ Installation of libevdev +

+
+
+
+

+ Install libevdev by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                  \
+      --prefix=$XORG_PREFIX     \
+      --buildtype=release       \
+      -D documentation=disabled \
+      -D tests=disabled         &&
+ninja
+

+ The test suite requires Check that we've removed from LFS. +

+

+ Now, as the root user: +

+
ninja install
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ -D tests=disabled: + This allows the package to compile if Check is not installed. We've removed + Check from LFS. +

+
+
+
+
+
+

+ 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.11.0 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Xorg Evdev Driver Dependencies +
+
+ Required +
+

+ libevdev-1.13.4, mtdev-1.1.7, and + Xorg-Server-21.1.18 +

+
+
+
+
+
+

+ 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.29.0 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ libinput Dependencies +
+
+ Required +
+

+ libevdev-1.13.4 and mtdev-1.1.7 +

+
+ Optional +
+

+ Valgrind-3.25.1 (to run the tests), + GTK-3.24.50 (to build the GUI event + viewer), libunwind-1.8.2 (required for tests), + libwacom-2.16.1, Doxygen-1.14.0, + Graphviz-13.1.2, recommonmark-0.7.1, and sphinx_rtd_theme-3.0.2 + (required to build documentation), pyparsing-3.2.3 + (for one non-root test), pytest-8.4.1 (for another non-root + test), and check (for another + non-root test) +

+
+
+
+
+
+

+ Kernel Configuration for + Running the Libinput Test Suite +

+
+
+
+

+ Although libinput works with the same kernel configuration + used by libevdev-1.13.4, its standard and + more expansive test suite requires the presence of + /dev/uinput (as well as both + Valgrind-3.25.1 and libunwind-1.8.2). +

+

+ If you wish to run the standard test suite, enable the + following option in the kernel configuration and recompile + the kernel if necessary: +

+
Device Drivers --->
+  Input device support --->
+    -*- Generic input layer (needed for keyboard, mouse, ...)            [INPUT]
+    [*]   Miscellaneous devices --->                                [INPUT_MISC]
+      <*/M>   User level driver support                           [INPUT_UINPUT]
+

+ If you build this as a module, it needs to be inserted + before the test suite runs. +

+
+
+
+
+
+

+ Installation of Libinput +

+
+
+
+

+ Install libinput by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..              \
+      --prefix=$XORG_PREFIX \
+      --buildtype=release   \
+      -D debug-gui=false    \
+      -D tests=false        \
+      -D libwacom=false     \
+      -D udev-dir=/usr/lib/udev &&
+ninja
+

+ To test the package, issue: meson configure -D tests=true && + ninja test. Many tests are skipped unless + running the test suite as the root user. To run those tests, as the + root user issue: + meson test + --suite=root. +

+

+ Now, as the root user: +

+
ninja install
+

+ If you have passed -D + documentation=true to meson, you can install + the generated documentation by running the following + commands as the root user: +

+
install -v -dm755      /usr/share/doc/libinput-1.29.0/html &&
+cp -rv Documentation/* /usr/share/doc/libinput-1.29.0/html
+
+
+
+
+
+

+ Command Explanations +

+
+
+
+

+ --buildtype=release: Specify + a buildtype suitable for stable releases of the package, as + the default may produce unoptimized binaries. +

+

+ -D debug-gui=false: + This switch disables creation of a visual debug helper for + libinput. Remove if you want it, and you have GTK-3.24.50 + installed. +

+

+ -D tests=false: + This switch disables compilation of the standard test + suite. Even with the tests defined as false, you can still + run the first six minor tests as a regular user, but one + will be skipped if pyparsing-3.2.3 is not installed, and + another one if pytest-8.4.1 is not installed. +

+

+ -D libwacom=false: + Remove this option if you have libwacom-2.16.1 + installed, or if you are installing GNOME. +

+

+ -D + udev-dir=/usr/lib/udev: In case that the value + of XORG_PREFIX is not set to + /usr, this option prevents + the package from installing Udev rules and helpers into + $XORG_PREFIX/lib/udev which + is not searched by Udev daemon. This option is not needed + for systems with XORG_PREFIX set + to /usr, but does no harm. +

+

+ -D documentation=true: This + switch enables generation of the documentation. Add it if + you want to generate the documentation. See the optional + dependencies required to build documentation. +

+
+
+
+
+
+

+ Contents +

+
+
+
+
+
+
+ Installed Programs: + libinput +
+
+ Installed Libraries: + libinput.so +
+
+ Installed + Directories: /etc/libinput, $XORG_PREFIX/libexec/libinput, + $XORG_PREFIX/share/libinput, and (optionally) + $XORG_PREFIX/share/doc/libinput-1.29.0 +
+
+
+
+

+ 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.5.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 drop-in replacement for evdev and synaptics. +

+

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

+
+ Package Information +
+
+ +
+
+ Xorg Libinput Driver Dependencies +
+
+ Required +
+

+ libinput-1.29.0 and Xorg-Server-21.1.18 +

+
+
+
+
+
+

+ 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.10.0 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Xorg Synaptics Driver Dependencies +
+
+ Required +
+

+ libevdev-1.13.4 and Xorg-Server-21.1.18 +

+
+
+
+
+
+

+ 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-1.2.3 +

+
+
+
+
+

+ 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 12.4 platform. +

+
+ Package Information +
+
+ +
+
+ Xorg Wacom Drivers Dependencies +
+
+ Required +
+

+ Xorg-Server-21.1.18 +

+
+ Optional +
+

+ Doxygen-1.14.0 and Graphviz-13.1.2 +

+
+
+
+
+
+

+ 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 bus support --->                                         [HID_SUPPORT]
+    {*/M} HID bus core support                                             [HID]
+      Special HID drivers --->
+      <*/M>   Wacom Intuos/Graphire tablet support (USB)             [HID_WACOM]
+    USB HID support --->
+      <*/M> USB HID transport layer                                    [USB_HID]
+  [*] USB support --->                                             [USB_SUPPORT]
+    <*/M> Support for Host-side USB                                        [USB]
+
+
+
+
+
+

+ Installation of Xorg Wacom + Driver +

+
+
+
+

+ Install Xorg Wacom Driver + by running the following commands: +

+
./configure $XORG_CONFIG --with-systemd-unit-dir=no &&
+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 +

+
+
+
+
+
+
+
+
+

+ twm-1.0.13.1 +

+
+
+
+
+
+

+ Introduction to twm +

+

+ The twm package contains a + very minimal window manager. +

+

+ This package is provided for testing the completed Xorg + installation. +

+

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

+

+ Package Information +

+
+ +
+

+ twm + Dependencies +

+
+ Required +
+

+ Xorg-Server-21.1.18 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xterm-401 +

+
+
+
+
+
+

+ Introduction to xterm +

+

+ xterm is a terminal emulator + for the X Window System. +

+

+ This package is provided for testing the completed Xorg + installation. +

+

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

+

+ Package Information +

+
+ +
+

+ xterm Dependencies +

+
+ Required +
+

+ luit-20240910 +

+
+ Required (at runtime) +
+

+ A monospace TTF or OTF font such as Dejavu fonts +

+
+ Optional +
+

+ Emacs-30.2, pcre2-10.45, Valgrind-3.25.1 and + man2html +

+
+
+

+ 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 &&
+
+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. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xclock-1.1.1 +

+
+
+
+
+
+

+ Introduction to xclock +

+

+ The xclock package contains + a simple clock application which is used in the default xinit + configuration. +

+

+ This package is provided for testing the completed Xorg + installation. +

+

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

+

+ Package Information +

+
+ +
+

+ xclock Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xinit-1.4.4 +

+
+
+
+
+
+

+ Introduction to xinit +

+

+ The xinit package contains a + usable script to start the xserver. +

+

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

+

+ Package Information +

+
+ +
+

+ xinit Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended (runtime only) +
+ +
+
+

+ 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
+
+

+ Note +

+

+ If starting Xorg from the command line, the default + instructions above start Xorg on the current virtual + terminal. It may be convenient to see Xorg and associated + application messages on the current virtual terminal, + normally tty1, and start the graphical environment on the + first available unused virtual terminal, normally tty7. To + do this, set the suid bit on the Xorg application as the + root user: +

+
chmod u+s $XORG_PREFIX/bin/Xorg
+

+ At this point you can start Xorg on virtual terminal 7 with + startx <client + arguments> -- vt7. Now you can toggle + between tty1 and tty7 with the Ctrl-Alt-F1 and Ctrl-Alt-F7 + key combinations. +

+

+ To automatically start Xorg on the first available virtual + terminal, modify the startx script as the + root user with: +

+
sed -i '/$serverargs $vtarg/ s/serverargs/: #&/' $XORG_PREFIX/bin/startx
+

+ After this change, the virtual terminal does not need to be + specified on the startx command line. +

+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Xorg-7 Testing + and Configuration +

+
+
+
+
+
+

+ Testing Xorg +

+
+

+ Note +

+

+ Before starting Xorg for the first time, is useful to + rebuild the library cache by running ldconfig as the + root user. +

+
+
+

+ Note +

+

+ Before starting Xorg for the first time, is often needed to + reboot the system to ensure all appropriate daemons are + started and appropriate 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 responding 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. +

+
+
+

+ Note +

+

+ On systems with NVIDIA GPUs which are using the Nouveau + kernel driver, you may encounter occasional GPU crashes and + hangs. If this problem occurs, downgrade to the latest + version of the Linux 6.1 kernel. +

+
+

+ 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-21.1.18 with the suid + bit) for statements such as: +

+
(II) modeset(0): [DRI2] Setup complete
+(II) modeset(0): [DRI2]   DRI driver: crocus
+(II) modeset(0): [DRI2]   VDPAU driver: va_gl
+
+

+ Note +

+

+ DRI configuration may differ if you are using alternate + drivers, such as traditional DDX drivers, or the + proprietary drivers 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-25.1.8. From an X terminal, run + glxinfo -B 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 | grep -E "(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-20.1.8 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. +

+
+
+

+ Debugging Xorg +

+

+ When starting xorg, there are a couple of ways to check what + any issues you may have. If the system comes up, you can see + what driver is being used by running xdriinfo. If there are + issues or you just want to check, look at Xorg.0.log. +

+

+ The location of Xorg.0.log + depends on how Xorg is installed. If the instructions in the + book are followed closely and Xorg is started from the + command line, it will be located in the $HOME/.local/share/xorg/ directory. If Xorg + is started by a display manager (e.g. lightdm-1.32.0, + sddm-0.21.0, or GDM-48.0) or if $XORG_PREFIX/bin/Xorg has the suid bit set, + it will be located in the /var/log/ directory. +

+

+ Xorg.0.log Issues +

+

+ When you look at Xorg.0.log, check for entries like (EE) or + (WW). Below are some common entries: +

+
+ (WW) + Open ACPI failed (/var/run/acpid.socket) +
+

+ This warning is because acpid-2.0.34 is not installed. If you are + not on a laptop, it can be safely ignored. On a laptop, + install acpid-2.0.34 to enable actions like + recognizing when the lid is closed. +

+
+ (WW) + VGA arbiter: cannot open kernel arbiter, no multi-card + support +
+

+ This warning is displayed when a regular user starts Xorg. + The library libpciaccess.so + issues this warning when it tries to open /dev/vga_arbiter. If there is no more than + one legacy PCI (not PCIe) graphic cards on the system, it can + safely be ignored. If really necessary, the permissions of + this device can be changed by adding a udev rule and adding + the local user to the video group. As the root user: +

+
cat > /etc/udev/rules.d/99-vga-arbiter.rules << EOF
+# /etc/udev/rules.d/99-vga-arbiter.rules: Set vga_arbiter group/mode
+
+ACTION=="add", KERNEL=="vga_arbiter", GROUP="video" MODE="0660"
+EOF
+
+usermod -a -G video <user running xorg>
+
+
+

+ 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 automatically. 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:modesetting
+Provider 1: id: 0x56 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 1 associated providers: 1 name:modesetting
+

+ 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 id of the more powerful discrete + card, and <sink> is the id of card which has a display + connected: +

+
xrandr --setprovideroffloadsink <provider> <sink>
+
+

+ Note +

+

+ With the Xorg modesetting + driver, which is 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 | grep -E "(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 +

+
+
+
+

+ If you want to set the monitor resolution for Xorg, first + run xrandr in + a X terminal to list the supported resolutions and the + corresponding refresh rates. For example, it outputs the + following for one monitor: +

+
Screen 0: minimum 16 x 16, current 5760 x 2160, maximum 32767 x 32767
+DP-1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 600mm x 340mm
+   3840x2160     59.98*+
+   2048x1536     59.95
+   1920x1440     59.90
+   1600x1200     59.87
+   1440x1080     59.99
+   1400x1050     59.98
+   1280x1024     59.89
+   1280x960      59.94
+   1152x864      59.96
+   1024x768      59.92
+   800x600       59.86
+   640x480       59.38
+

+ From the output we can see the monitor is identified + DP-1. Select a suitable + resolution from the output list, for example 1920x1440. Then as the root user, create a configuration file + for the Xorg server: +

+
cat > /etc/X11/xorg.conf.d/monitor-DP-1.conf << "EOF"
+Section "Monitor"
+    Identifier  "DP-1"
+    Option      "PreferredMode" "1920x1440"
+EndSection
+EOF
+

+ Sometimes xrandr may fail to detect + some resolution settings supported by the monitor. It + usually happens with virtual monitors of virtual machine + managers like qemu-10.0.3 or VMWare: a virtual monitor + actually supports all pairs of integers in a range as the + resolution, but xrandr will only list a + few. To use a resolution not listed by xrandr, first run + cvt to get + the mode line for the resolution. For example: +

+
cvt 1600 900
+# 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz
+Modeline "1600x900_60.00"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync
+

+ As the root user, create a + Xorg server configuration file containing this mode line, + and specify the mode as preferred mode: +

+
cat > /etc/X11/xorg.conf.d/monitor-DP-1.conf << "EOF"
+Section "Monitor"
+    Identifier  "DP-1"
+    Modeline    "1600x900_60.00"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync
+    Option      "PreferredMode"   "1600x900_60.00"
+EndSection
+EOF
+

+ Some high-end LCD monitors support a refresh rate higher + than 100 Hz but xrandr may fail to + recognize the supported refresh rate and use 60 Hz instead. + This issue would prevent you from utilizing the full + capability of the monitor, and may cause the screen to + flicker or show “artifacts” like meshes or grids. To + resolve the issue, again use cvt to get the mode line + with a custom refresh rate: +

+
cvt 3840 2160 144
+# 3840x2160 143.94 Hz (CVT) hsync: 338.25 kHz; pclk: 1829.25 MHz
+Modeline "3840x2160_144.00"  1829.25  3840 4200 4624 5408  2160 2163 2168 2350 -hsync +vsync
+

+ Then paste it into the Xorg server configuration file and + set it as the preferred mode. +

+

+ 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
+

+ When you drag a window in twm (or any non-compositing + window manager) horizontally, you may observe that the + vertical borders of the window are broken into multiple + segments. This is an example of the visual artifacts called + screen tearing. To + resolve the screen tearing problems, create a configuration + file that enables the TearFree option. Note that you must + have the Tearfree patch applied from Xorg-Server-21.1.18 for this to + function properly, and it may increase memory allocation + and reduce performance. +

+
cat > /etc/X11/xorg.conf.d/20-tearfree.conf << "EOF"
+Section "Device"
+   Identifier "Graphics Adapter"
+   Driver     "modesetting"
+   Option     "TearFree" "true"
+EndSection
+EOF
+

+ With modern Xorg, little or no additional graphic card + configuration is necessary. If you should need extra + options passed to your video driver, add them into the + Device section as well. The + options supported by the modesetting driver are documented + in the man page modesetting(4). +

+
+
+
+
+
+
+

+ 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. +

+

+ However, before spending a long time trying out different + settings please be aware that modern applications and desktop + environments may ignore the settings of fontconfig - see + Items which can + override Fontconfig. +

+

+ 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, why they may not + always work, and to identify online information which is + no-longer appropriate. +

+

+ Unfortunately, some of the terminology is ambiguous (e.g. + 'font face' can mean a name known to Fontconfig, or the ordinary, condensed, etc + variations of a font) and 'style' can be used to + differentiate 'ordinary' from 'italic', or in describing some + classes of Serif fonts. +

+

+ The following links are to assist navigation in this page. +

+ +
+
+

+ 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.31 which can use fonts + listed in ~/.Xresources) 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 have + a lot of fonts installed). +

+

+ 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} in Xorg + Fonts. 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, particularly if + you are interested in overriding which font will be chosen. +

+

+ fc-list | less + : shows a list of all available fonts (/path/to/filename: + Font Name:style). If you installed a font and it doesn't + show, then the directory it is contained in is not readable + by your user. +

+

+ fc-match 'Font + Name' : tells 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 think + that the font supports your language). +

+

+ fc-match TYPE : shows + which font will be used in the current language for that + TYPE (Monospace, + Sans, Serif (initial capital + letter is optional)). If that font does not map a + codepoint, Fontconfig can + take a glyph from any available font, even if it is not of + the specified type. Any other value for TYPE will be assumed to be + Sans. +

+

+ fc-match 'Serif + :lang=ja:weight=bold' will tell you which + font and weight will be chosen for Japanese text in bold + weight. It does not mean that the reported font will + necessarily be able to show Japanese ideograms, so a fallback + might be used, or some glyphs may be missing. For language + codes, use ISO-639 values such as 'fr', 'ja', 'zh-cn'. Note + that an unrecognized value such as just 'zh' will not return + any match. To illustrate the fallback, on a system where both + Noto Sans Mono and DejaVu Sans Mono are installed, + fc-match 'monospace + :lang=en shows Noto Sans Mono will be used, + but if the lang is changed to 'ar' (arabic) DejaVu Sans will + be used. +

+

+ If you want to determine if a font file has hinting (many + older fonts do not, because it was patented) use fc-query /path/to/fontfile | grep + 'fonthashint:': which will report 'True(s)' + or 'False(s)'. Some recent fonts with both TTF and OTF + versions will have hinting in the TTF files. +

+

+ 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.56.4 and ImageMagick-7.1.2-1 - 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 such as zh-sg or + zh-tw). +

+
+
+

+ The + configuration 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 (such as antialiasing) +

    +
  • +
  • +

    + 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. +

+

+ However, 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). Note that there are both weak and strong + aliases so that aliases for one form such as Helvetica or + Times New Roman can be satisfied by the other style, i.e. + anything which is an alias of Arial or Times in those + examples. some examples of Latin fonts with the same metrics + can be found in the 'Substitutes' PDFs at typosetting.co.uk. +

+

+ After that, an unknown font will be searched for in + 45-latin.conf: 'Latin' covers + Cyrillic and Greek, and now also maps system-ui fonts which + are used for User Interface messages in other alphabets. If + the font is found it will be mapped as serif, sans-serif, + monospace, fantasy, cursive, or system-ui. Otherwise, + 49-sansserif.conf will assume it is Sans. +

+

+ Then 60-latin.conf provides + ordered lists of the fallbacks - Noto fonts will be used + if you installed them. Cyrillic and Greek appear to be + treated in the same way.All of these files prefer commercial + fonts if they are present, although modern libre fonts are + often at least equal. Finally, if a codepoint is still not + found it can be taken from any available system font. The + following details only mention freely available fonts. +

+

+ Default Persian fonts are dealt with in 65-fonts-persian.conf. It looks as if all + the listed fonts are commercial. Using fonts that support + Persian (which has its own variant of the arabic alphabet, + and its own font styles) is outside the skills of the BLFS + editors. +

+

+ All remaining scripts for which Fontconfig has preferences (CJK scripts, + Indic scripts) are dealt with in 65-nonlatin.conf. These are again nominally + grouped as Serif, Sans-Serif, Monospace. Of the free fonts, + WenQuanYi Zen Hei (Pan-CJK Sans) comes first for both Serif + and for Sans. Therefore, if you install this as a fallback + but want to use different fonts for Japanese or Korean you + will need to set up a preference. Similarly, the old + fireflysung Serif font is also listed for Sans. +

+

+ After Pan-CJK and Chinese fonts come several Japanese fonts + and then several Korean fonts (both split appropriately + between Sans and Serif). Finally come the various Lohit Indic + families (one font file per script), labelled as both Sans + and Serif. +

+

+ The Monospace fonts listed in 65-nonlatin.conf do not include WenQuanYi + Zen Hei although that will be available as a fallback if + installed. Several Japanese Gothic fonts are listed, followed + by AR PL KaitiM GB (a zh-sc 'Brush' font), AR PL Serif fonts + for zh-sc (SungtiL) and zh-tw (Mingti2L), some Korean Sans + fonts and the various Lohit Indic families. +

+

+ For UI fonts, various Noto Sans UI fonts are the only listed + free fonts. +

+

+ The various Noto CJK fonts are not among the listed fonts, + possibly the RedHat developers preferred other fonts. These + now come in many variations, and most users who use these + will not install any other CJK fonts. +

+

+ Before Fontconfig-2.14, the first preferred Latin font family + was Bitstream Vera. In practice that was rarely used because + it covered so little. After that, DejaVu was the next + preferred family, so people were recommended to install that. + That has now changed, Bitstream Vera has been replaced by the + relevant Noto fonts (Serif, Sans, Sans Mono), so these will + be preferred if they have been installed, followed by DejaVu. +

+

+ For serif, Times New Roman could have been aliased from + Liberation Serif or Tinos, and Times from TeX Gyre Termes, so + although the named fonts are not free, the metric-compatible + fonts can be used. Ignoring other non-free fonts, the + remaining order for serif is: Times New Roman, Luxi Serif, + Nimbus Roman No9 L, and Times. In practice, that means those + fonts at the end of the list are unlikely to be used unless a + web page asks for them. +

+

+ For sans-serif, the remaining order is anything mapped to + Arial, Luxi Sans, Nimbus Sans L, and anything mapped to + Helvetica. +

+

+ The remaining alternatives for monospace are Inconsolata, + anything mapped to Courier New, Luxi Mono, Nimbus Mono, and + anything mapped to Courier. +

+

+ For 'fantasy' there are no free fonts, so Fontconfig will fall back to sans-serif. +

+

+ For 'cursive', the only free font is TeX Gyre Chorus as an + alias for ITC Zapf chancery, otherwise Fontconfig will again fall back to + sans-serif. +

+

+ The system-ui category is unusual. It is for interface + messages, so some scripts need special versions to fit in the + available space. For Latin, Greek and Cyrillic an ordinary + sans font should fit without problems. However, the first + preferred font is Cantarell, followed by Noto Sans UI. + Cantarell started as a Latin sans-serif font, that has been + forked in Gnome under the same name but they only provide the + source. The Noto Sans UI fonts are for other languages. +

+

+ Since Fontconfig-2.12.5, there is also generic family + matching for some emoji and math fonts, please 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 run startx again so that all + applications use the new settings. Several things can + override the fontconfig settings, see Items which can + override Fontconfig below for more details. 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 https://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. However, anything
+    using Pango >= 1.44 will not support full hinting, Pango now uses harfbuzz
+    for hinting. Apps which use Skia (e.g. Chromium, Firefox) should not be
+    affected by this. 
+
+    hintmedium: is reported to be broken.
+    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. + Many of the different settings give very subtle differences + and the results may differ for some of the fonts you use. +

+
+

+ Note +

+

+ Hinting, if enabled, is done in FreeType. Since FreeType-2.7 the + default TrueType interpreter is v40. The original v35 + hinter could be enabled by an environment variable, but is + only really appropriate to original Microsoft TTF fonts + (Arial, etc). The v38 hinter (Infinality) is not built by + default and all the options to tune it have been removed. + For full details see subpixel-hinting (Spoiler: there is + NO sub-pixel hinting, the code simply ignores all horizontal hinting + instructions). +

+

+ Xorg assumes screens have 96 dots per inch (DPI). Most LCD + screens are close to this, but some people detect colour + fringing if their screen diverges from that size. See + calc-dpi. +

+

+ If you have a High DPI screen (often described as '4K' or + larger) you will probably use larger font sizes and benefit + from disabling hinting. +

+
+

+ 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 from 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
+
+
+

+ Synthetic changes +

+

+ In 90-synthetic.conf there are + examples of applying synthetic slanting and emboldening to a + font. The synthetic emboldening can be applied to a visibly + faint font, but the results are not always as expected: With + just the embolden, Epiphany + showed darker fonts while Firefox did not - so although + Cairo is now used by + firefox the comment about + setting Weight is still valid. But setting both, Epiphany will show bold text by default, + but it will show heavy text if markup for bold is used. In + both cases, neither libreOffice nor falkon showed bolder text. +

+
+
+

+ 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-20250308 puts many + fonts in /opt/texlive/2025/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 + fonts difficult. +

    +
  2. +
  3. +

    + 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. +

    +
  4. +
  5. +

    + Several fonts have multiple sizes and impenetrable + short names, which both make selecting the correct font + even more difficult. +

    +
  6. +
  7. +

    + 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. +

    +
  8. +
+
+

+ 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 truetypefonts 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/2025/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
+  <dir>/opt/texlive/2025/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 +

+

+ With the exception of web pages which use WOFF fonts and + either supply them or link to google to download them, web + pages have traditionally suggested a list of preferred font + family names if they cared (e.g. Times New Roman, Serif). + There are many reasons why people may wish to have pages + which specify a preferred 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 documentation +

+

+ 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.17.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. It + is particularly appropriate where no language is specified, + or for reading CJK text in a non-CJK locale, and where the + Japanese forms of the codepoints shared with Chinese are + preferred. In particular, alternative approaches would be to + specify a Chinese font ahead of the Japanese font, meaning + that only Kana symbols will be used from the Japanese font, + or to not specify DejaVu so that the first font in each set + of preferences is preferred for text using Latin alphabets. +

+
+
    +
  1. +

    + If a Serif font is specified, it prefers Dejavu + fonts. If Han codepoints are found, or the Japanese + language is specified, the Mincho font from IPAex + fonts will be used. If Hangul codepoints are found + or the Korean language is specified, UnBatang (see + Korean fonts) will be used: Change + that line If you installed a different Korean serif + font. After that, WenQuanYi + ZenHei (Sans, but a default for Serif and + monospace) is used. A previous version of this page + mentioned using UMing which is a Traditional Chinese + font that ships with an old conf file preferring it for + zh-tw and zh-hk language codes (and for sans-serif and + monospace). But without the conf file, Fontconfig will only treat it as + suitable for zh-hk. The conf file needs to be edited to + current style and will then be prepended, so specifying + UMing does not belong in this local.conf file. +

    +
  2. +
  3. +

    + For Sans Serif preferences again start with Dejavu + fonts, then VL Gothic for Japanese before falling + back to WenQuanYi Zen Hei which is Sans and covers both + Chinese and Korean Hangul. +

    +
  4. +
  5. +

    + The Monospace fonts are forced to the preferred Sans + fonts. If the text is in Chinese or Korean then + WenQuanYi ZenHei will be used. +

    +
  6. +
+
+

+ In a non-CJK locale, the result is that suitable fonts will + be used for all variants of Chinese, Japanese and Hangul + Korean (but Japanese variants of the glyphs shared with + Chinese Han will be used). 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>DejaVu Serif</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>DejaVu Sans</family>
+             <family>VL Gothic</family>
+         <!-- This assumes WenQuanYi is good enough for Korean Sans -->
+         </prefer>
+    </alias>
+    <alias>
+         <family>monospace</family>
+         <prefer>
+             <family>DejaVu Sans Mono</family>
+             <family>VL Gothic</family>
+         <!-- This assumes WenQuanYi is good enough for Korean Monospace -->
+         </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 many 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>
+
+
+
+

+ About font + weights +

+

+ When this page and the next page were first created, Latin + fonts came with a maximum of two weights - either Regular or + Book (Book typically has a larger X-height to make it easier + to read in large blocks of text), and Bold - and perhaps an + Italic (or Slant) style. A few fonts also had Condensed faces + (to fit more text into a line and usually only used when + specified). Without CSS (Cascading Style Sheets) markup, text + used the Regular or Book weight except when <b> ... + </b> markup was used for bold text. Italic styles would + be invoked by <i> ... </i> markup, along with the + bold markup for Bold Italic. +

+

+ Some faces now contain up to 9 weights, possibly also with a + variable font (to save space by including all the + alternatives in one file and possibly allowing intermediate + weights). For most desktop users who do not need this wide + range of weights for creating content, it is simpler to only + install one or two weights. If a face has individual weights + plus a variable font, the variable font is usually in the top + level of the supplied directory, with individual weights in a + static/ subdirectory. Except + when initially reviewing a font, it makes no sense to install + both static and variable, nor all the possible weights. +

+

+ The weights are labelled from 100 (Thin) to 900 (Black or + Heavy) in CSS terminology, with 400 being normal and 700 + bold. The full set of weights is described at Table + of CSS font weights. +

+

+ If you have installed a font with a range of weights, you can + copy font-weights.html + to your local machine. As shipped it will use your default + Serif font assuming you have one. Edit it to point to a + specific installed font using the name known to Fontconfig (also in the *EDITME + FONTNAME* text items) and open it from your desktop browser. + You can also use it to look at a font with only two installed + weights, e.g. for testing to see if you prefer other weights. +

+

+ Despite the details in that Mozilla link, it appears that if + only normal and bold weights are installed, SemiBold (600) + will be shown using bold. +

+

+ There seems to be a little scope for changing which weights + are used for normal and bold if + only two weights have been installed. Firefox, + and probably other browsers, will look for the next weight + heavier than normal. If that is less than bold (Medium, maybe + SemiBold - uncertain) it will be used for normal and then the + next higher weight, if any will be used for bold, allowing + you to make the fonts slightly darker. Conversely, if only a + weight less than normal has been installed, such as Light, + that will be used for both normal and bold weights (the + upward search happens first). +

+

+ If you remove some weights of a system font, you may need to + run fc-cache as + the root user and then log + out completely to clear caches associated with your user. +

+
+
+

+ Items which can + override Fontconfig +

+

+ Several desktop environments, as well as some programs, will + use Fontconfig to find fonts + but may override certain things. +

+

+ GNOME: The settings in + org.gnome.desktop.interface can be updated with dconf-editor. You can set the fonts to + your preference and desired point size. To use the fonts + chosen by Fontconfig specify + e.g. 'Sans 12', Serif 11', 'Mono 10' as desired. Also review + the antialiasing, hinting and rgba settings. Alternatively, + gnome-tweaks-46.1 can also update the + font settings in a GUI form. +

+

+ LXQt: Change font settings + as necessary to match Fontconfig in lxqt-config-appearance. +

+

+ KDE Plasma: The settings can + be adjusted in System + Settings under Appearance -> Fonts or in Edit -> + Preferences of the individual application. +

+

+ Xfce desktop: The settings + can be adjusted in Settings + -> Appearance -> Fonts. Specify your preferred fonts, + e.g. 'Sans Regular' (to use the normal face and weight rather + than Bold and/or Italic) and adjust the point size in the + option. Review the Rendering and DPI options. +

+

+ Firefox: This browser allows + you to specify its default fonts. For the 128esr series use + the 'Hamburger' menu to go to Settings, General, and under + Fonts -> Advanced select Sans Serif, Serif or Monospace as + appropriate if you wish to use the fonts which match + Fontconfig. Set the point + sizes as desired. In later versions, the settings are at + Preferences -> Fonts. +

+

+ Libreoffice: Tests using + English text with an old Japanese font (HanaMinA) which + supports several European languages but had only one weight + and no italics or slant showed that although Libreoffice uses Fontconfig to find the font, it created + its own bold or slanted text. It is not clear if it will do + the same where a font actually has bold weight or an italic + style. Also, documentation shows that Libreoffice has its own substitution + rules for when a codepoint is not found in the selected font, + but is unclear if those rules apply on Linux using + Fontconfig. +

+

+ Pango: as noted in the + example ~/.config/fontconfig + above, anything using Pango-1.44 (from 2019) or later now + uses Harfbuzz for hinting, + not FreeType, and + hintfull is not supported. +

+

+ Thunderbird: The font + settings can be changed by going to "Edit -> Settings" and + then scrolling down to "Fonts & Colors". +

+
+
+

+ External + Links +

+

+ 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. +

+

+ subpixel-hinting +

+

+ The documentation of the FreeType v40 interpreter at + + freetype docs explains how the current hinter works, and + why the previous (slow) Infinality interpreter was replaced. +

+

+ Calculating DPI +

+

+ An old answer at + askubuntu gives some detail on calculating a screen's + dots per inch, but essentially you just measure the width and + height of the visible panel, convert to inches if using + metric measurements, and divide by the number of pixels. You + can then pass -dpi 90 when you start + Xorg, using your own value. +

+

+ Table of CSS font + weights +

+

+ Perhaps more than you ever wished to know is at + Mozilla CSS docs. +

+

+ Applying + autohinting to a font +

+

+ If you are using hinting and have a TTF (not OTF) font which + lacks hints but permits you to fork it, you might be able to + apply hints using ttfautohint which is + based on the old autohinter. As of version 1.8.4 it fails to + build without Qt5. +

+

+ 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. +

+
+
+
+
+
+

+ 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, with + Fontconfig (see previous + page for details including how fonts are selected and various + reasons why a font might be ignored). +

+

+ A few fonts are provided as collections (TTC or OTC) where + font data is shared between different fonts, which saves disk + space. These should be treated in exactly the same way as + individual TTF or OTF files. +

+

+ If a font provides both TTF and OTF forms, you should prefer + the OTF form in Linux, as it may provide more features for + programs which know how to use them (such as xelatex). The + TTF files of these fonts usually contain hinting, see + Hinting and Anti-aliasing and + Items which can + override Fontconfig for reasons why hinting may be + undesirable or unusable. +

+

+ A font may have multiple variations. For example, Noto Sans + has 9 weights (ExtraLight, Light, Thin, Normal, Medium, + SemiBold, Bold, ExtraBold, and Black) and 2 styles (Regular + and Italic), thus 18 variations in total. Normally each + variation is provided as a separate TTF or OTF file. For full + coverage you need to install all these TTF or OTF files. Even + if you are low on disk space, you should still install two + weights (Regular and Bold) by two styles (Normal and Italic) + if the font has these variations. Some fonts do not have + Italic style (for example most CJK fonts and some monospace + fonts), and some fonts only have one variation (for example + Noto Sans Math, it only provides the glyph of some mathematic + symbols). +

+

+ Some fonts are also available as variable font files. Unlike a + normal font file which only contains one variation, a + variable font file contains infinite variations. Each + variation can be defined by the application using this font + by assigning number(s) to one or more variables. There are + also pre-defined named + instances analogous to the traditional + variations. For example, with the variable version of Noto + Sans, the weight variable can be assigned any number not less + than 100 and not greater than 900, and 9 named instances are + pre-defined: ExtraLight for weight=100, Regular for + weight=400, Bold for weight=700, etc. So once a variable font + file for Noto Sans is installed, all the 9 named instances + (or “variations”) are available. Note that + the slope is not defined as a variable in the variable + version of Noto Sans, so Regular and Italic are still + traditional variations and a separate variable font file is + needed for the Italic variation. +

+

+ A variable font file is obviously more flexible than the + normal (static) font files. It's extremely useful for fine + tuning the font for Web pages or publications. And, the size + of a variable font file is usually significantly smaller than + the total size of several static font files for multiple + variations. For example, the variable font file for Noto Sans + SC is only 11M, while the total size of 9 static font files + for Noto Sans SC is 91M. But you must make sure your + applications really support variable fonts before installing + one. For example, lualatex supports variable + font but xelatex does not. So if you + want to use a font for an article and use xelatex for typesetting, + you must not install the variable font files. +

+

+ For information about variable fonts, please see + Variable Fonts. +

+

+ 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 not necessary anymore on Linux, + Fontconfig will do it + automatically if needed as well as if the font caches are + more than 30 seconds old. However, if you add a font and want + to use it immediately, 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 the full set of Noto fonts (there are + separate fonts for different writing systems). 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, can be found at + typosetting.linuxfromscratch.org + which aims to analyse and compare fonts and despite the name + eventually added some reasonable examples of typesetting. +

+

+ Fonts are often supplied in zip files, requiring tools from + libarchive-3.8.1 or 7zip-25.01 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 (scattering the contents of a zipfile or tarball + across the current directory can be very messy, and a few + fonts create __MACOSX/ directories). In addition, many fonts + are supplied with permissions which do not let 'other' users + 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 you need to change them if the permissions are different. + If you forget, the root user may be able to see a particular + font in fc-list, but a normal user + will not be able to use them. +

+

+ 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 the completed TTF or + OTF file(s). Unless you intend to modify the font, and have + the correct tools (sometimes FontForge-20230101, 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 - this is useful if you run a webserver + and want to use that font on your website, but not useful for + a desktop system. +

+

+ To provide greater Unicode coverage, you should install some + of the following fonts, depending on what websites and + languages you want to read. The next part of this page + details some fonts which cover at least Latin alphabets, and + the final part deals with some CJK issues. +

+
+

+ Note +

+

+ Installation of the Dejavu fonts used to be strongly + recommended, but the Noto fonts will be used in + preference if both have been installed. The only likely + reason to now prefer a DejaVu font is that DejaVu-Serif has + an open 'g' (Both DejaVu Sans and Noto Sans also use an + open 'g'). Other than that, Noto is more up to date with + fuller coverage. +

+
+

+ Adwaita fonts +

+

+ Adwaita + fonts – The Adwaita family provides clear, modern and + maintained fonts. They are the preferred fonts for GNOME-48 + and later. The tarball includes update scripts for the + source, as well as TTF fonts in the mono/ and sans/ + directories. The variable-width sans fonts are adapted to fit + in UI dialog messages and intended for normal use. The mono + fonts (normal and italic in regular and, bold weights), are + intended to match, for use in terminals and programming. +

+

+ Caladea +

+

+ Caladea + (created as a Chrome OS extra font) 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. +

+

+ Cantarell + fonts +

+

+ Cantarell + fonts – The Cantarell typeface family provides a + contemporary Humanist Sans Serif. It is particularly + optimised for legibility at small sizes and was the preferred + font family for the GNOME + user interface before GNOME-48. +

+

+ Carlito +

+

+ Carlito (created + as another Chrome OS extra font) 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. +

+

+ 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 were the default fallback fonts for 'Latin' + languages. As of Fontconfig-2.14, if the Noto 'Latin' fonts + have been installed they will be prioritised ahead of DejaVu. +

+

+ GNU FreeFont +

+

+ GNU FreeFont – + This set of fonts covers many non-CJK characters, but the + glyphs are comparatively small (unlike Noto and 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 MS Georgia is + requested but is 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, and Times Roman, though for these + it can prefer a different font (see the examples in the PDFs + at typosetting.co.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.8.1. Make sure that you + 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 used 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 + output which looks better, less old posts say that these are + 'ugly' or 'broken' with modern Fontconfig, Freetype and Pango. Most people will not want to + install any of these fonts. +

+

+ 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. However, if you do not have + them installed you can find metric equivalents (Carlito and + Caladea) above. +

+

+ Noto fonts +

+

+ The Noto fonts ('No Tofu', + i.e. avoiding boxes with dots [hex digits] when a glyph + cannot be found) are a set of fonts which aim to cover + every glyph in Unicode, no matter + how obscure. +

+

+ People using languages written in Latin, Greek or Cyrillic + alphabets only need to install Noto Sans, Noto Serif and/or + Noto Sans Mono. For more details on the organization of Noto + fonts see + how are noto fonts organized. There are also separate + fonts for every other current writing system, but those do + not cover text in Latin languages. +

+

+ Those three fonts are the first-choice preferences of + Fontconfig for text in those + three alphabets, and they are updated frequently to cover + recent Unicode additions such as the extensions for phonetic + transcription in Latin and Cyrillic alphabets. +

+

+ It may be easier to download a specific Noto font by going to + Noto Sans + and changing the font name as appropriate, with '+' between + each word, e.g. 'Noto+Kufi+Arabic', 'Noto+Serif+Georgian' or + whatever, then clicking on 'Download family'. +

+

+ For the Noto CJK fonts it is easier to find the specific zip + archive you desire at Github. Go to https://github.com/notofonts/noto-cjk/releases/ + and look for the newest Sans or Serif version with its own + updated Download guide and its assets. The Download guides + should help you to identify which zip file best matches your + requirements. +

+

+ Noto Sans is the preferred font for KDE Plasma and + applications, except for monospace fonts where Hack is + preferred. +

+

+ For writing systems not using the Latin, Greek or Cyrillic + alphabets the Noto fonts are not preferred by Fontconfig. If you use a Noto font for a + modern language where another installed font also covers it + (e.g. the DejaVu fonts cover several Right-to-Left + alphabets), you might need to set a preference for + Fontconfig - see the + previous page. +

+

+ 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-48.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 will 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). +

+

+ Lohit fonts +

+

+ For Indic languages, Fontconfig now prefers Lohit fonts + (Sanskrit for 'red'). They can be found at pagure.org +

+
+
+

+ CJK fonts +

+

+ As indicated earlier, usage of a combination of Chinese, + Japanese and Korean characters 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, Fontconfig prefers + Chinese to Japanese by default. Tuning that is covered at + Preferring 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 + (Mainland China, Malaysia, and Singapore) or Traditional + (Hong Kong and 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 these characters where local + names are written in Mandarin. The UMing HK, Noto Sans HK and + WenQuanYi Zen Hei fonts all seem to cover Hong Kong usage + (Fontconfig disagrees about + Noto Sans HK). +

+

+ The Han glyphs are double width, and 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 you wish to use Noto fonts, there are also Serif versions + of their various CJK fonts. The Noto Sans/Serif + SC/TC/HK/JP/KR fonts are derived from a monolithic noto-cjk + repository and you can find the .ttc files for the entire Noto Sans CJK + (including SC/TC/HK/JP/KR) or Noto Serif CJK font family + there. Google recommends the normal users to use the separate + Noto Sans/Serif SC/TC/HK/JP/KR fonts instead, but if you are + capable and willing to read texts in more than one CJK + character systems it may be easier to use a monolithic + .ttc file for full coverage. +

+

+ If all you wish to do is 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. +

+

+ The current versions of Chinese Noto Sans fonts can be found + at Noto Sans + SC for Simplified Chinese, Noto Sans + TC for Traditional Chinese, and as mentioned above + Noto Sans + HK for use in Hong Kong. +

+
+ 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, and 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 + JP. +

+
+ IPAex fonts +
+

+ The IPAex + fonts are the current version of the IPA fonts. Use + + Google Translate on the home page, then click on the + download link for IPAex Font Ver.004.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). If you install the IPAex fonts, + you may want to make it known to Fontconfig. Please see Preferring chosen CJK fonts for + one way to accomplish 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 + KR or WenQuanYi ZenHei. +

+
+
+
+
+
+

+ 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 book at + https://www.linuxfromscratch.org/blfs/view/7.10/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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.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 +
+

+ Xorg + Fonts +

+
+
+

+ 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"
+e09b61567ab4a4d534119bba24eddfb1 util/ bdftopcf-1.1.1.tar.xz
+20239f6f99ac586f10360b0759f73361 font/ font-adobe-100dpi-1.0.4.tar.xz
+2dc044f693ee8e0836f718c2699628b9 font/ font-adobe-75dpi-1.0.4.tar.xz
+2c939d5bd4609d8e284be9bef4b8b330 font/ font-jis-misc-1.0.4.tar.xz
+6300bc99a1e45fbbe6075b3de728c27f font/ font-daewoo-misc-1.0.4.tar.xz
+fe2c44307639062d07c6e9f75f4d6a13 font/ font-isas-misc-1.0.4.tar.xz
+145128c4b5f7820c974c8c5b9f6ffe94 font/ font-misc-misc-1.1.3.tar.xz
+EOF
+

+ To download the needed files using Wget-1.25.0, 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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.?z*}
+  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 +

+
+
+
+
+
+
+
+
+

+ Chapter 25. Graphical Environment + 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. +

+
+
+
+

+ Atkmm-2.28.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Atkmm Dependencies +

+
+ Required +
+

+ at-spi2-core-2.56.4 and GLibmm-2.66.8 +

+
+
+

+ Installation of Atkmm +

+

+ Install Atkmm by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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.4} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libatkmm-1.6.so +

+
+

+ contains the ATK + API classes +

+
+
+
+
+
+
+
+

+ Atkmm-2.36.3 +

+
+
+
+
+
+

+ Introduction to Atkmm +

+

+ Atkmm is the official C++ + interface for the ATK accessibility toolkit library. This + version is part of a new API for supporting gtkmm-4. +

+

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

+

+ Package Information +

+
+ +
+

+ Atkmm Dependencies +

+
+ Required +
+

+ at-spi2-core-2.56.4 and GLibmm-2.84.0 +

+
+
+

+ Installation of Atkmm +

+

+ Install Atkmm by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libatkmm-2.36.so +
+
+ Installed Directories: + /usr/{include,lib}/atkmm-2.36 and + /usr/share/{devhelp/books/atkmm-2.36,doc/atkmm-2.28.4} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libatkmm-2.36.so +

+
+

+ contains the ATK + API classes +

+
+
+
+
+
+
+
+

+ at-spi2-core-2.56.4 +

+
+
+
+
+
+

+ Introduction to At-Spi2 Core +

+

+ The At-Spi2 Core package + contains a comprehensive accessibility framework for the + Assistive Technologies available on the GNOME platform. This includes a set of + interfaces which are implemented by other toolkits and + applications. +

+

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

+

+ Package Information +

+
+ +
+

+ At-Spi2 Core Dependencies +

+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4 (GObject Introspection + required for GNOME), gsettings-desktop-schemas-48.0 + (Runtime), and Xorg Libraries +

+
+ Optional +
+

+ Gi-DocGen-2025.4 and sphinx-8.2.3 +

+
+
+

+ Installation of At-Spi2 Core +

+

+ Install At-Spi2 Core by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                  \
+      --prefix=/usr             \
+      --buildtype=release       \
+      -D gtk2_atk_adaptor=false \
+      -D systemd_user_dir=/tmp  &&
+ninja
+

+ Now, as the root user: +

+
ninja install &&
+rm /tmp/at-spi-dbus-bus.service
+

+ The test suite requires the glib schemas of the package to be + installed already. The tests also need to run in a graphical + environment. Now that the package is installed, test the + results by issuing: dbus-run-session ninja + test. +

+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D + systemd_user_dir=/tmp: This flag puts the systemd + unit file in /tmp where it will be removed. SysV is unable to + use this file. +

+

+ -D docs=true: Use this switch if + you want to build the documentation. Note that you must have + both Gi-DocGen-2025.4 and sphinx-8.2.3 + installed on your system. +

+

+ -D + gtk2_atk_adaptor=false: This switch disables + building the GTK+-2 module for this package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libatk-1.0.so, + libatk-bridge-2.0.so, and libatspi.so +
+
+ Installed Directories: + /usr/include/atk-1.0, + /usr/include/at-spi-2.0, /usr/include/at-spi2-atk, + /usr/lib/gnome-settings-daemon-3.0, + /usr/share/defaults/at-spi2, and + /usr/share/gtk-doc/html/libatspi (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ libatk-1.0.so +

+
+

+ contains functions that are used by assistive + technologies to interact with desktop applications +

+
+

+ libatk-bridge-2.0.so +

+
+

+ contains the Accessibility Toolkit GTK+ module +

+
+

+ libatspi.so +

+
+

+ contains the At-Spi2 API functions +

+
+
+
+
+
+
+
+

+ Cairo-1.18.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Cairo Dependencies +

+
+ Required +
+

+ libpng-1.6.50 and Pixman-0.46.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ ghostscript-10.05.1, GTK-Doc-1.34.0, libdrm-2.4.125, + librsvg-2.61.0, libxml2-2.14.5, + LZO-2.10, + Poppler-25.08.0, Valgrind-3.25.1, + GTK+-2, + and libspectre +

+
+

+ 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. +

+
+
+
+

+ Installation of Cairo +

+

+ Install Cairo by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not have a working 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. +

+

+ -D xlib-xcb=enabled: This switch + enables several experimental Xlib/XCB functions used by some + window managers. +

+

+ -D gtk_doc=true: 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/cairo and + /usr/lib/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 +

+
+
+
+
+
+
+
+

+ libcairomm-1.0 + (cairomm-1.14.5) +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libcairomm-1.0 Dependencies +

+
+ Required +
+

+ Cairo-1.18.4 and libsigc++-2.12.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of libcairomm-1.0 +

+

+ Install Cairomm-1.0 by + running the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --buildtype=release  \
+      -D build-tests=true  \
+      -D boost-shared=true &&
+ninja
+

+ To run the test suite, run: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D build-tests=true: + This switch is for building the unit tests. Remove if you + have not installed Boost-1.89.0. +

+

+ -D boost-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 -D build-tests=true. +

+

+ -D build-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 +

+
+
+
+
+
+
+
+

+ libcairomm-1.16 (cairomm-1.18.0) +

+
+
+
+
+
+

+ Introduction to libcairomm-1.16 +

+

+ The libcairomm-1.16 package + provides a C++ interface to Cairo. This version of the API is needed + to support gtkmm-4. +

+

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

+

+ Package Information +

+
+ +
+

+ libcairomm-1.16 Dependencies +

+
+ Required +
+

+ Cairo-1.18.4 and libsigc++-3.6.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of libcairomm-1.16 +

+

+ Install Cairomm-1.16 by + running the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup ..             \
+      --prefix=/usr        \
+      --buildtype=release  \
+      -D build-tests=true  \
+      -D boost-shared=true &&
+ninja
+

+ To run the test suite, run: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D build-tests=true: + This switch is for building the unit tests. Remove if you + have not installed Boost-1.89.0. +

+

+ -D boost-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 -D build-tests=true. +

+

+ -D build-documentation=true: This + switch builds the html documentation if doxygen is installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libcairomm-1.16.so +
+
+ Installed Directories: + /usr/{lib,include}/cairomm-1.16 and + /usr/share/{devhelp/books,doc}/cairomm-1.16 + (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libcairomm-1.16.so +

+
+

+ contains the Cairo + API classes +

+
+
+
+
+
+
+
+

+ colord-gtk-0.3.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Colord GTK Dependencies +

+
+ Required +
+

+ colord-1.4.8 and GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ docbook-xml-5.0, docbook-xsl-ns-1.79.2, libxslt-1.1.43 (to build the man page), + and GTK-Doc-1.34.0 +

+
+
+

+ 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 setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk4=true        \
+            -D vapi=true        \
+            -D docs=false       \
+            -D man=false        \
+            ..                  &&
+ninja
+

+ If docbook-xml-5.0, docbook-xsl-ns-1.79.2, and + libxslt-1.1.43 are installed, build the + man page: +

+
sed '/class="manual"/i \
+     <refmiscinfo class="source">colord-gtk</refmiscinfo>' \
+    -i ../man/*.xml &&
+meson configure -D man=true &&
+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. +

+

+ -D vapi=true: This + switch enables building of the Vala bindings. Remove this + switch if you don't have Vala-0.56.18 installed. +

+

+ -D gtk4=true: This + switch enables building the GTK-4 bindings for colord. Set + this option to 'false' if you do not have GTK-4.18.6 installed. +

+

+ -D docs=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. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cd-convert +
+
+ Installed Libraries: + libcolord-gtk.so and + libcolord-gtk4.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-gtk4.so +

+
+

+ contains the Colord GTK-4 bindings +

+
+
+
+
+
+
+
+

+ FLTK-1.4.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ FLTK + Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended +
+ +
+ Optional +
+

+ alsa-lib-1.2.14, desktop-file-utils-0.28, + Doxygen-1.14.0, GLU-9.0.3, Mesa-25.1.8, and texlive-20250308 (or install-tl-unx) +

+
+
+

+ Installation of FLTK +

+
+

+ Note +

+

+ The tar extraction directory is fltk-1.4.4 and not + fltk-1.4.4-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, install the package and remove unneeded static + libraries. As the root user: +

+
make docdir=/usr/share/doc/fltk-1.4.4 install &&
+rm -vf /usr/lib/libfltk*.a
+

+ 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.4.4 install-linux &&
+make -C documentation docdir=/usr/share/doc/fltk-1.4.4 install-linux
+

+ If you downloaded the optional html documentation, install it + as the root user: +

+
tar -C /usr/share/doc/fltk-1.4.4 --strip-components=4 -xf ../fltk-1.4.4-docs-html.tar.gz
+
+
+
+

+ 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.so, libfltk_forms.so, + libfltk_gl.so, and libfltk_images.so +
+
+ Installed Directories: + /usr/include/FL and + /usr/share/doc/fltk-1.4.4 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Freeglut-3.6.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Freeglut Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and Mesa-25.1.8 +

+
+ Recommended +
+ +
+
+

+ Installation of Freeglut +

+

+ First, fix a problem when building with gcc-15: +

+
sed -e '/Context/s/()/(SFG_PlatformDisplay, SFG_WindowContextType)/' \
+    -i src/egl/fg_init_egl.h
+

+ Install Freeglut by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D FREEGLUT_BUILD_DEMOS=OFF         \
+      -D FREEGLUT_BUILD_STATIC_LIBS=OFF   \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + FREEGLUT_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. +

+

+ -D + FREEGLUT_BUILD_STATIC_LIBS=OFF: Do not build the + static library. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libglut.so +
+
+ Installed Directories: + /usr/lib/cmake/FreeGLUT +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libglut.so +

+
+

+ contains functions that implement the OpenGL + Utility Toolkit +

+
+
+
+
+
+
+
+

+ gdk-pixbuf-2.42.12 +

+
+
+
+
+
+

+ Introduction to Gdk Pixbuf +

+

+ The Gdk Pixbuf package is a + toolkit for image loading and pixel buffer manipulation. It + is used by 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gdk + Pixbuf Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + for GNOME), libjpeg-turbo-3.0.1, libpng-1.6.50, and shared-mime-info-2.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 (to generate + documentation), libavif-1.3.0 (runtime dependency, needed + for loading AVIF images), libjxl-0.11.1 (runtime dependency, + needed for loading JPEG XL images), and webp-pixbuf-loader-0.2.7 + (runtime dependency, needed for loading WebP images) +

+
+
+

+ Installation of Gdk Pixbuf +

+

+ Install Gdk Pixbuf by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D others=enabled   \
+      --wrap-mode=nofallback &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir =/s@\$@ / 'gdk-pixbuf-2.42.12'@" -i ../docs/meson.build &&
+meson configure -D gtk_doc=true                                        &&
+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 using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are not installed on the system. +

+

+ -D others=enabled: + Enable the loaders for various image formats, for example BMP + and XPM. +

+

+ -D man=false: Use this option if + you do not want to generate manual pages, or if you do not + want to install docutils-0.21.2. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ glew + Dependencies +

+
+ Required +
+

+ Mesa-25.1.8 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ glslang-15.4.0 +

+
+
+
+
+
+

+ Introduction to Glslang +

+

+ The Glslang package contains + an frontend and validator for OpenGL, OpenGL ES, and Vulkan + shaders. +

+

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

+

+ Package Information +

+
+ +
+

+ Glslang Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and SPIRV-Tools-1.4.321.0 +

+
+
+

+ Installation of Glslang +

+

+ Install Glslang by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr     \
+      -D CMAKE_BUILD_TYPE=Release      \
+      -D ALLOW_EXTERNAL_SPIRV_TOOLS=ON \
+      -D BUILD_SHARED_LIBS=ON          \
+      -D GLSLANG_TESTS=ON              \
+      -G Ninja .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + ALLOW_EXTERNAL_SPIRV_TOOLS=ON: This switch allows + the build system to use the system-installed copy of + SPIRV-Tools-1.4.321.0, instead of + downloading and installing it's own copy. +

+

+ -D + BUILD_SHARED_LIBS=ON: This switch builds shared + versions of the libraries, and does not install static + versions of them. +

+

+ -D GLSLANG_TESTS=ON: + This switch builds the tests for the package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + glslang, glslang-validator (symlink + to glslang), and spirv-remap +
+
+ Installed Libraries: + libglslang.so, + libglslang-default-resource-limits.so, libSPIRV.so, and + libSPVRemapper.so +
+
+ Installed Directories: + /usr/include/glslang and + /usr/lib/cmake/glslang +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ glslang +

+
+

+ provides a front end and validator for OpenGL, + OpenGL ES, and Vulkan shaders +

+
+

+ libglslang.so +

+
+

+ contains functions that provide a front-end and + validator for OpenGL, OpenGL ES, and Vulkan shaders + to other programs +

+
+

+ libSPIRV.so +

+
+

+ provides a front-end and generator for SPIR-V + binaries +

+
+

+ libSPVRemapper.so +

+
+

+ provides a remapper for SPIR-V binaries +

+
+
+
+
+
+
+
+

+ GLU-9.0.3 +

+
+
+
+
+
+

+ Introduction to GLU +

+

+ This package provides the Mesa OpenGL Utility library. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://archive.mesa3d.org/glu/glu-9.0.3.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 06a4fff9179a98ea32ef41b6d83f6b19 +

    +
  • +
  • +

    + Download size: 216 KB +

    +
  • +
  • +

    + Estimated disk space required: 5.9 MB +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU +

    +
  • +
+
+

+ GLU + Dependencies +

+
+ Required +
+

+ Mesa-25.1.8 +

+
+
+

+ Installation of GLU +

+

+ Install GLU by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..              \
+      --prefix=$XORG_PREFIX \
+      -D gl_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 +

+
+
+
+
+
+
+
+

+ GOffice-0.10.59 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GOffice Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libgsf-1.14.53, librsvg-2.61.0, + libxslt-1.1.43, and Which-2.23 +

+
+ Optional +
+

+ GLib-2.84.4 (with GObject Introspection), + ghostscript-10.05.1, gsettings-desktop-schemas-48.0, + GTK-Doc-1.34.0, Lasem, and + libspectre +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Graphene-1.10.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Graphene Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+
+

+ Installation of Graphene +

+

+ Install Graphene by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_doc=true: Use this switch + if you have GTK-Doc-1.34.0 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 +

+
+
+
+
+
+
+
+

+ GTK-3.24.50 +

+
+
+
+
+
+

+ Introduction to GTK3 +

+

+ The GTK3 package contains + libraries used for creating graphical user interfaces for + applications. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/gtk/3.24/gtk-3.24.50.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 0b3c6d1d6fc321a32624e65750b60f5d +

    +
  • +
  • +

    + Download size: 13 MB +

    +
  • +
  • +

    + Estimated disk space required: 248 MB (add 8 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.7 SBU (using parallelism=4; add + 0.2 SBU for tests) +

    +
  • +
+
+

+ GTK3 + Dependencies +

+
+ Required +
+

+ at-spi2-core-2.56.4, gdk-pixbuf-2.42.12, libepoxy-1.5.10, + and Pango-1.56.4 +

+
+ Recommended +
+ +
+ Recommended (Required if building + GNOME) +
+ +
+ Optional +
+

+ colord-1.4.8, Cups-2.4.12, GTK-Doc-1.34.0, + libcloudproviders-0.3.6, + PyAtSpi2-2.46.1 (for tests), sassc-3.6.2, + tinysparql-3.9.2, and PAPI +

+
+
+

+ Installation of GTK3 +

+

+ Install GTK3 by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D man=true         \
+      -D broadway_backend=true &&
+ninja
+

+ To test the results you need a graphical session, then issue + dbus-run-session ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+

+ One test named check-cursor-names is known to fail if + adwaita-icon-theme-48.1 is not + installed. +

+
+

+ 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 +

+

+ -D + broadway_backend=true: This switch enables the + HTML5 GTK backend. +

+

+ -D man=true: This + switch allows generating manual pages. +

+

+ -D gtk_doc=true: This switch + enables building documentation. It requires GTK-Doc-1.34.0. +

+

+ -D tracker3=true: This switch + enables the search function based on TinySPARQL in the GTK3 + file chooser dialog. It requires tinysparql-3.9.2. +

+

+ -D cloudproviders=true: Use this + switch if you have libcloudproviders-0.3.6 + installed and wish to enable support for cloud providers in a + file chooser window. +

+
+
+

+ Configuring GTK3 +

+
+
+
+
+

+ Config + Files +

+
+
+
+

+ ~/.config/gtk-3.0/settings.ini and + /etc/gtk-3.0/settings.ini +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ GTK3 themes change the way + a GTK3 application looks. + An icon theme can be used to change the icons that appear + on the application's toolbar. If you have installed a + GTK3 theme (e.g. the + Adwaita theme built in GTK3), an icon theme (such as + oxygen-icons-6.0.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: + GTK3 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, + and /usr/share/themes/{Default,Emacs}/gtk-3.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ broadwayd +

+
+

+ provides support for displaying GTK3 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 GTK3 +

+
+

+ gtk3-demo-application +

+
+

+ is a simple GTK3 + 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 GTK3 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. GTK3 + 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 GTK3 + 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 GTK3 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ GTK-4.18.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/gtk/4.18/gtk-4.18.6.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 9ad89b1e6a71ac3a06ca8bbeed6fd466 +

    +
  • +
  • +

    + Download size: 17 MB +

    +
  • +
  • +

    + Estimated disk space required: 890 MB (with docs; add + 132 MB for tests) +

    +
  • +
  • +

    + Estimated build time: 1.4 SBU (using parallelism=4; + with docs; add 3.6 SBU for tests) +

    +
  • +
+
+

+ GTK + 4 Dependencies +

+
+ Required +
+

+ gdk-pixbuf-2.42.12, graphene-1.10.8, + ISO Codes-4.18.0, libepoxy-1.5.10, + libxkbcommon-1.11.0, Pango-1.56.4, + PyGObject-3.52.3, and wayland-protocols-1.45 +

+
+ Recommended +
+ +
+ Recommended (Required if building + GNOME) +
+ +
+ Optional +
+

+ Avahi-0.8 + (for some tests), colord-1.4.8, Cups-2.4.12, docutils-0.21.2, + Gi-DocGen-2025.4, Highlight-4.16 + (runtime, only used by gtk4-demo for syntax + highlighting of demo source code), libcloudproviders-0.3.6, + sassc-3.6.2, tinysparql-3.9.2, + accesskit-c, + cpdb, + pydbus (for some + tests), and sysprof +

+
+
+

+ Installation of GTK 4 +

+

+ First, fix a problem when building with gcc-15: +

+
sed -e '939 s/= { 0, }//'                                       \
+    -e '940 a memset (&transform, 0, sizeof(GtkCssTransform));' \
+    -i gtk/gtkcsstransformvalue.c
+

+ Install GTK 4 by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr            \
+            --buildtype=release      \
+            -D broadway-backend=true \
+            -D introspection=enabled \
+            -D vulkan=enabled        \
+            .. &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "s@'doc'@& / 'gtk-4.18.6'@" -i ../docs/reference/meson.build &&
+meson configure -D documentation=true                            &&
+ninja
+

+ To run the tests, issue: +

+
env -u{GALLIUM_DRIVER,MESA_LOADER_DRIVER_OVERRIDE}          \
+    LIBGL_ALWAYS_SOFTWARE=1 VK_LOADER_DRIVERS_SELECT='lvp*' \
+    dbus-run-session meson test --setup x11                 \
+                                --no-suite={headless,needs-udmabuf}
+

+ If you are in a Wayland session, replace the one occurrence + of x11 with wayland. Many tests will fail if + ~/.config/gtk-4.0/settings.ini + exists and the gtk-modules line is not commented out. Several + other tests may fail for unknown reasons. On systems with + NVIDIA graphics cards, the tests may take significantly + longer. +

+

+ 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. +

+

+ -D + broadway-backend=true: This switch enables the + HTML5 GDK backend. +

+

+ -D + introspection=enabled: This switch enables using + GObject Introspection to generate GIR bindings of this + packages. These bindings are required by GNOME. +

+

+ -D cloudproviders=enabled: Use + this switch if you have libcloudproviders-0.3.6 + installed and wish to enable support for cloud providers in a + file chooser window. +

+

+ -D tracker=enabled: Use this + switch if you have tinysparql-3.9.2 installed and wish to + use search functionality when running a file chooser. +

+

+ -D colord=enabled: Use this + switch if you have colord-1.4.8 installed and wish to use + colord with the CUPS printing backend. +

+

+ -D man-pages=true: Use this + switch if you have docutils-0.21.2 installed and wish to + generate the man pages. +

+

+ -D sysprof=enabled: Use this + switch if you have sysprof installed + and wish to enable tracing support for GTK4-based + applications. +

+

+ -D vulkan=disabled: Use this + switch instead of -D + vulkan=enabled if you don't have Vulkan-Loader-1.4.321 or + glslc from shaderc-2025.3 + installed. It will disable the Vulkan backend that the + upstream prefers to use on Wayland-based graphical + environments. +

+

+ LIBGL_ALWAYS_SOFTWARE=1 and + VK_LOADER_DRIVERS_SELECT='lvp*': + Force the test suite to use the softpipe or llvmpipe Gallium + driver and the lavapipe Vulkan driver from Mesa. The test + suite is so sensitive that the minor differences caused by a + different Mesa driver can trigger test failures. +

+

+ env + -u{GALLIUM_DRIVER,MESA_LOADER_DRIVER_OVERRIDE}: + Unset variables which may conflict with LIBGL_ALWAYS_SOFTWARE=1. +

+

+ --no-suite={headless,needs-udmabuf}: + Disable the tests requiring the external dependency pydbus, + and the tests requiring the device node /dev/udmabuf. The device node does not + exist if the feature is not enabled in the kernel + configuration, and even if it exists it + cannot be accessed as unprivileged users. +

+
+
+

+ 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-icons-6.0.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-cursor-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-image-tool, gtk4-launch, + gtk4-node-editor, gtk4-path-editor, gtk4-print-editor, + gtk4-query-settings, gtk4-rendernode-tool, + 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-image-tool +

+
+

+ performs various operations on images, including + comparisons, conversions, listing information on + the images, relabeling the images, and showing the + images +

+
+

+ 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-node-editor +

+
+

+ is a utility to show and edit render node files. + Such render node files can be obtained e.g. from + the GTK inspector +

+
+

+ gtk4-path-tool +

+
+

+ performs various tasks on paths, including + decompositions, reversals, restrictions, rendering, + displaying the path, and listing information about + the paths +

+
+

+ 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-rendernode-tool +

+
+

+ performs various tasks on GTK render nodes, + including benchmarks, comparisons, extracting data + URLs, displaying information about the nodes, + displaying the nodes, and taking screenshots of + nodes +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Gtkmm-3.24.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gtkmm Dependencies +

+
+ Required +
+

+ Atkmm-2.28.4, GTK-3.24.50, and Pangomm-2.46.4 +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of Gtkmm +

+

+ Install Gtkmm by running the + following commands: +

+
mkdir gtkmm3-build &&
+cd    gtkmm3-build &&
+
+meson setup --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.10
+
+
+

+ Command Explanations +

+

+ -D build-documentation=true: If + you have installed Doxygen-1.14.0 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.10} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libgdkmm-3.0.so +

+
+

+ contains the GDK API classes +

+
+

+ libgtkmm-3.0.so +

+
+

+ contains the GTK+ + 3 API classes +

+
+
+
+
+
+
+
+

+ Gtkmm-4.18.0 +

+
+
+
+
+
+

+ Introduction to Gtkmm +

+

+ The Gtkmm package provides a + C++ interface to GTK-4. +

+

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

+

+ Package Information +

+
+ +
+

+ Gtkmm Dependencies +

+
+ Required +
+

+ GTK-4.18.6 and Pangomm-2.56.1 +

+
+ Optional +
+

+ Doxygen-1.14.0 and Vulkan-Loader-1.4.321 +

+
+
+

+ Installation of Gtkmm +

+

+ Install Gtkmm by running the + following commands: +

+
mkdir gtkmm4-build &&
+cd    gtkmm4-build &&
+
+meson setup --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-4.0. For consistency, + move it to a versioned directory as the root user: +

+
mv -v /usr/share/doc/gtkmm-4.0 /usr/share/doc/gtkmm-4.18.0
+
+
+

+ Command Explanations +

+

+ -D build-documentation=true: If + you have installed Doxygen-1.14.0 this define will build + and install the documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libgdkmm-4.0.so and + libgtkmm-4.0.so +
+
+ Installed Directories: + /usr/include/gdkmm-4.0, + /usr/include/gtkmm-4.0, /usr/lib/gdkmm-4.0, + /usr/lib/gtkmm-4.0, and optionally + /usr/share/{devhelp/books/gtkmm-4.0,doc/gtkmm-4.18.0} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libgdkmm-4.0.so +

+
+

+ contains the GDK API classes +

+
+

+ libgtkmm-4.0.so +

+
+

+ contains the GTK 4 + API classes +

+
+
+
+
+
+
+
+

+ gtk-vnc-1.5.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gtk + VNC Dependencies +

+
+ Required +
+

+ GnuTLS-3.8.10, GTK-3.24.50, and libgcrypt-1.11.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Cyrus SASL-2.1.28 and Gi-DocGen-2025.4 (for generating + documentation) +

+
+
+

+ Installation of Gtk VNC +

+

+ Install Gtk VNC by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D with-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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GtkSourceView Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ Vala-0.56.18, Valgrind-3.25.1, + GTK-Doc-1.34.0, itstool-2.0.7, fop-2.11 (or + dblatex), and + Glade +

+
+
+

+ Installation of GtkSourceView +

+

+ First, fix building this package with gcc-14 and later: +

+
sed -i 's/g_object_ref (buffer)/g_object_ref (GTK_SOURCE_BUFFER (buffer))/' gtksourceview/gtksourceview.c
+

+ 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 +

+
+
+
+
+
+
+
+

+ gtksourceview4-4.8.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GtkSourceView Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ Vala-0.56.18, Valgrind-3.25.1, + GTK-Doc-1.34.0, itstool-2.0.7, fop-2.11 (or + dblatex), and + Glade +

+
+
+

+ Installation of GtkSourceView +

+

+ Install GtkSourceView by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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 +

+

+ -D gtk_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 +

+
+
+
+
+
+
+
+

+ gtksourceview5-5.16.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GtkSourceView Dependencies +

+
+ Required +
+

+ GTK-4.18.6 and pcre2-10.45 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, Vala-0.56.18, Valgrind-3.25.1, Vulkan-Loader-1.4.321, and + sysprof +

+
+
+

+ Installation of GtkSourceView +

+

+ Install GtkSourceView by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D documentation=true: Use this + switch if you have Gi-DocGen-2025.4 installed and wish to + generate the API documentation. +

+

+ -D sysprof=true: Use this switch + if you have sysprof 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 +

+
+
+
+
+
+
+
+

+ imlib2-1.12.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ imlib2 Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 (for API documentation), + highway-1.3.0, libjpeg-turbo-3.0.1, libjxl-0.11.1, libpng-1.6.50, libtiff-4.7.0, libwebp-1.6.0, libheif, + libid3tag, + libspectre +

+
+
+

+ 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
+

+ If you generated the API documentation, install it as the + root user: +

+
install -v -m755 -d            /usr/share/doc/imlib2-1.12.5/html &&
+install -v -m644    doc/html/* /usr/share/doc/imlib2-1.12.5/html
+
+
+

+ Command Explanations +

+

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

+

+ --enable-doc-build: This switch + generates the API documentation. Doxygen-1.14.0 must be + installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + imlib2_bumpmap, imlib2_colorspace, + imlib2_conv, imlib2_grab, imlib2_load, 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.12.5, 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_conv +

+
+

+ converts images between formats +

+
+

+ imlib2_grab +

+
+

+ takes screenshots +

+
+

+ imlib2_load +

+
+

+ loads and caches images +

+
+

+ imlib2_poly +

+
+

+ is to test the imlib2 poly function +

+
+

+ imlib2_show +

+
+

+ is an imlib2 + program test +

+
+

+ imlib2_test +

+
+

+ is an imlib2 + program test +

+
+

+ imlib2_view +

+
+

+ displays image files +

+
+

+ libImlib2.so +

+
+

+ provides the functions for programs to handle + various image data formats +

+
+
+
+
+
+
+
+

+ kColorPicker-0.3.1 +

+
+
+
+
+
+

+ Introduction to kColorPicker +

+

+ kColorPicker is a QToolButton library with a color popup + menu, which lets you select colors. The popup menu features a + color dialog button which can be used to add custom colors to + the popup menu. +

+

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

+

+ Package Information +

+
+ +
+

+ kColorPicker Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and Qt-6.9.2 +

+
+
+

+ Installation of kColorPicker +

+

+ Install kColorPicker by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_SHARED_LIBS=ON      \
+      -D BUILD_WITH_QT6=ON         \
+      .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libkColorPicker.so +
+
+ Installed Directories: + /usr/lib/cmake/kColorPicker +
+
+
+
+
+
+
+
+

+ kImageAnnotator-0.7.1 +

+
+
+
+
+
+

+ Introduction to kImageAnnotator +

+

+ kImageAnnotator is a tool for annotating images. +

+

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

+

+ Package Information +

+
+ +
+

+ kImageAnnotator Dependencies +

+
+ Required +
+

+ kcolorpicker-0.3.1 +

+
+
+

+ Installation of kImageAnnotator +

+

+ Install kImageAnnotator by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_SHARED_LIBS=ON      \
+      -D BUILD_WITH_QT6=ON         \
+      .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libkImageAnnotator.so +
+
+ Installed Directories: + /usr/include/kImageAnnotator-Qt6, + /usr/lib/cmake/kImageAnnotator-Qt6, and + /usr/share/kImageAnnotator +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ keybinder-3.0 Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.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 +

+
+
+
+
+
+
+
+

+ libadwaita-1.7.6 +

+
+
+
+
+
+

+ Introduction to libadwaita +

+

+ The libadwaita package + provides additional GTK4 UI widgets for use in developing + user interfaces. It is used primarily for GNOME applications. +

+

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

+

+ Package Information +

+
+ +
+

+ libadwaita Dependencies +

+
+ Required +
+

+ AppStream-1.0.6, GTK-4.18.6, and sassc-3.6.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 and xdg-desktop-portal-1.20.3 + (for two tests) +

+
+
+

+ Installation of libadwaita +

+

+ Install libadwaita by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "s/apiversion/'1.7.6'/" -i ../doc/meson.build &&
+meson configure -D documentation=true             &&
+ninja
+

+ To test the results, issue: ninja test. The tests must + be run from a graphical session. Two tests will fail if + xdg-desktop-portal-1.20.3 is + not installed. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + adwaita-1-demo +
+
+ Installed Libraries: + libadwaita-1.so +
+
+ Installed Directories: + /usr/include/libadwaita-1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ adwaita-1-demo +

+
+

+ provides an example of how to use the libadwaita library +

+
+

+ libadwaita-1.so +

+
+

+ provides additional GTK widgets for use in creating + user interfaces +

+
+
+
+
+
+
+
+

+ libei-1.4.1 +

+
+
+
+
+
+

+ Introduction to libei +

+

+ The libei package contains a + set of libraries for handling emulated inputs. It is + primarily aimed at the Wayland stack. +

+

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

+

+ Package Information +

+
+ +
+

+ libei Dependencies +

+
+ Required +
+

+ attrs-25.3.0 and + elogind-255.17 +

+
+ Optional +
+

+ libevdev-1.13.4, libxkbcommon-1.11.0, libxml2-2.14.5, munit, and structlog +

+
+
+

+ Installation of libei +

+

+ Install libei by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D tests=disabled &&
+ninja
+

+ This package does come with a test suite, but it requires an + external dependency. If you have both munit and structlog + installed, and you wish to run the test suite, run the + following commands: +

+
meson configure -D tests=enabled &&
+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. +

+

+ -D tests=disabled: + This switch avoids a dependency on munit. Remove this + switch if you have munit + installed and wish to run the test suite. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libei.so, libeis.so, and + liboeffis.so +
+
+ Installed Directories: + /usr/include/libei-1.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ libei.so +

+
+

+ provides a client side implementation for handling + Emulated Input +

+
+

+ libeis.so +

+
+

+ provides a server side implementation for handling + Emulated Input +

+
+

+ liboffis +

+
+

+ provides DBus communication services between libei + and the XDG RemoteDesktop portal +

+
+
+
+
+
+
+
+

+ libhandy-1.8.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libhandy Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and Glade +

+
+
+

+ Installation of libhandy +

+

+ Install libhandy by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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. +

+

+ -D gtk_doc=true: Use this option + if you have GTK-Doc-1.34.0 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 +

+
+
+
+
+
+
+
+

+ Libdrm-2.4.125 +

+
+
+
+
+
+

+ Introduction to Libdrm +

+

+ Libdrm provides a userspace + library for accessing the direct rendering manager (DRM) 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://dri.freedesktop.org/libdrm/libdrm-2.4.125.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 3baec8e685510892b3355a7074baa874 +

    +
  • +
  • +

    + Download size: 476 KB +

    +
  • +
  • +

    + Estimated disk space required: 12 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (with tests) +

    +
  • +
+
+

+ libdrm Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Cairo-1.18.4 (for tests), CMake-4.1.0 (could be + used to find dependencies without pkgconfig files), docbook-xml-4.5, docbook-xsl-nons-1.79.2, + docutils-0.21.2, and libxslt-1.1.43 (to + build manual pages), libatomic_ops-7.8.2 (required + by architectures without native atomic operations), Valgrind-3.25.1, and CUnit (for AMDGPU + tests) +

+
+
+

+ Installation of Libdrm +

+

+ Install libdrm by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=$XORG_PREFIX \
+            --buildtype=release   \
+            -D udev=true          \
+            -D valgrind=disabled  \
+            ..                    &&
+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. +

+

+ -D udev=true: This + parameter enables support for using Udev instead of mknod. +

+

+ -D valgrind=disabled: + This parameter disables building libdrm with valgrind + support. This fixes building some packages that use libdrm. + Change this parameter to "enabled" (or remove it) if you need + support for valgrind. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libdrm_amdgpu.so, libdrm_intel.so, + libdrm_nouveau.so, libdrm_radeon.so, and libdrm.so +
+
+ Installed Directories: + /usr/include/libdrm 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 +

+
+
+
+
+
+
+
+

+ libepoxy-1.5.10 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libepoxy Dependencies +

+
+ Required +
+

+ Mesa-25.1.8 +

+
+ Optional +
+

+ Doxygen-1.14.0 (for documentation) +

+
+
+

+ Installation of libepoxy +

+

+ Install libepoxy by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D docs=true: If you have + Doxygen-1.14.0 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 +

+
+
+
+
+
+
+
+

+ libnotify-0.8.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libnotify Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Optional (Required if building + GNOME) +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Optional +
+

+ Gi-DocGen-2025.4 and xmlto-0.0.29 +

+
+ Required (runtime) +
+

+ At least one of notification-daemon-3.20.0, + xfce4-notifyd-0.9.7, or lxqt-notificationd-2.2.0 +

+
+

+ Note +

+

+ GNOME Shell and + KDE KWin provide their own + notification daemons. +

+
+
+
+

+ Installation of libnotify +

+

+ Install libnotify by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk_doc=false    \
+            -D man=false        \
+            ..                  &&
+ninja
+

+ This package does not come with a test suite. +

+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir =/s@\$@ / 'libnotify'@" \
+    -i ../docs/reference/meson.build   &&
+meson configure -D gtk_doc=true        &&
+ninja
+

+ Now, as the root user: +

+
ninja install &&
+if [ -e /usr/share/doc/libnotify ]; then
+  rm -rf /usr/share/doc/libnotify-0.8.6
+  mv -v  /usr/share/doc/libnotify{,-0.8.6}
+fi
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libxklavier Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended), ISO Codes-4.18.0, libxml2-2.14.5 and + Xorg + Libraries +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and Vala-0.56.18 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Pango-1.56.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Pango Dependencies +

+
+ Required +
+

+ Fontconfig-2.17.1 (must be built with + FreeType-2.13.3 using harfBuzz-11.4.1), FriBidi-1.0.16, and + GLib-2.84.4 (GObject Introspection required + for GNOME) +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 (to generate + documentation), help2man, + libthai, and + sysprof +

+
+
+

+ Installation of Pango +

+

+ Install Pango by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr            \
+            --buildtype=release      \
+            --wrap-mode=nofallback   \
+            -D introspection=enabled \
+            ..                       &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir =/s@\$@ / 'pango-1.56.4'@" -i ../docs/meson.build &&
+meson configure -D documentation=true                            &&
+ninja
+

+ To test the results, issue: ninja test. Three tests, + test-font-data, test-font, and test-layout are known to fail + due to missing font data. +

+

+ 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. +

+

+ -D introspection=disabled: Use + this switch if you do not want to use GObject Introspection. +

+

+ --wrap-mode=nofallback: This + switch prevents meson from using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are 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/doc/pango-1.56.4 (if gi-docgen is + available) +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Pangomm-2.46.4 +

+
+
+
+
+
+

+ Introduction to Pangomm +

+

+ The Pangomm package provides + a C++ interface to Pango. +

+

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

+

+ Package Information +

+
+ +
+

+ Pangomm Dependencies +

+
+ Required +
+

+ libcairomm-1.14.5, + GLibmm-2.66.8 and Pango-1.56.4 +

+
+
+

+ Installation of Pangomm +

+

+ Install Pangomm by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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.4} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libpangomm-1.4.so +

+
+

+ contains the Pango + API classes +

+
+
+
+
+
+
+
+

+ Pangomm-2.56.1 +

+
+
+
+
+
+

+ Introduction to Pangomm +

+

+ The Pangomm package provides + a C++ interface to Pango. + This version is part of a new API for supporting gtkmm-4. +

+

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

+

+ Package Information +

+
+ +
+

+ Pangomm Dependencies +

+
+ Required +
+

+ libcairomm-1.18.0, + GLibmm-2.84.0 and Pango-1.56.4 +

+
+
+

+ Installation of Pangomm +

+

+ Install Pangomm by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libpangomm-2.48.so +
+
+ Installed Directories: + /usr/include/pangomm-2.48, + /usr/lib/pangomm-2.48, and + /usr/share/{devhelp/books/pangomm-2.48,doc/pangomm-2.46.4} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libpangomm-2.48.so +

+
+

+ contains the Pango + API classes +

+
+
+
+
+
+
+
+

+ Qt-6.9.2 +

+
+
+
+
+
+

+ Introduction to Qt6 +

+

+ Qt6 is a cross-platform + application framework that is widely used for developing + application software with a graphical user interface (GUI) + (in which cases Qt6 is + classified as a widget toolkit), and also used for developing + non-GUI programs such as command-line tools and consoles for + servers. +

+

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

+

+ Package Information +

+
+ +
+

+ Qt6 + Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended +
+ +
+ Optional +
+

+ BlueZ-5.83 (for sdpscanner, and at runtime + for QtConnectivity module), GTK-3.24.50, ibus-1.5.32, LLVM-20.1.8 (with + Clang), libproxy-0.5.10, MariaDB-11.8.3 or + MySQL, + MIT Kerberos V5-1.22.1, + pciutils-3.14.0, PostgreSQL-17.6, + Protobuf-32.0, PulseAudio-17.0, + SDL2-2.32.8, unixODBC-2.3.12, + assimp, + Flite, Firebird, + FreeTDS, + OpenAL, + speech-dispatcher, and + tslib +

+
+
+

+ Setting the installation prefix +

+

+ Installing in /opt/qt6 +

+

+ The BLFS editors recommend installing Qt6 in a directory other than + /usr, i.e. /opt/qt6. To do this, set the following + environment variable: +

+
export QT6PREFIX=/opt/qt6
+
+

+ Tip +

+

+ Sometimes the installation paths are hardcoded into + installed files. This is the reason why /opt/qt6 is used as installation prefix + instead of /opt/qt-6.9.2. To + create a versioned Qt6 + directory, you may rename the directory and create a + symlink: +

+
mkdir -pv /opt/qt-6.9.2
+ln -sfnv qt-6.9.2 /opt/qt6
+

+ Later on, you may want to install other versions of + Qt6. To do that, just + remove the symlink, create the new versioned directory, and + recreate the /opt/qt6 symlink + again before building the new version. Which version of + Qt6 you use depends only + on where the symlink points. +

+
+
+

+ Note +

+

+ If qca-2.3.10, qcoro-0.12.0, or sddm-0.21.0 have been + installed and you are reinstalling or updating this + package, then those packages will need to be reinstalled. +

+
+
+
+

+ Installation of Qt6 +

+
+

+ Warning +

+

+ If Qt6 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-Qt6 based window manager. It overwrites + Qt6 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 Qt6 is quite long. The instructions + below do not build the tutorials and examples. Removing the + -nomake line will + create additional resources.. +

+
+
+

+ Note +

+

+ The BLFS editors do not recommend installing Qt6 into the /usr hierarchy because it + becomes difficult to find components and to update to a new + version. +

+
+

+ Disable a conflicting declaration on i686 systems and fix a + build error due to SIMD intrinsics in QtMultimedia: +

+
if [ "$(uname -m)" == "i686" ]; then
+    sed -e "/^#elif defined(Q_CC_GNU_ONLY)/s/.*/& \&\& 0/" \
+         -i qtbase/src/corelib/global/qtypes.h &&
+    export CXXFLAGS+="-DDISABLE_SIMD -DPFFFT_SIMD_DISABLE"
+fi
+

+ Install Qt6 by running the + following commands: +

+
./configure -prefix $QT6PREFIX      \
+            -sysconfdir /etc/xdg    \
+            -dbus-linked            \
+            -openssl-linked         \
+            -system-sqlite          \
+            -nomake examples        \
+            -no-rpath               \
+            -no-sbom                \
+            -syslog                 \
+            -skip qt3d              \
+            -skip qtquick3dphysics  \
+            -skip qtwebengine       &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ Remove references to the build directory from installed + library dependency (prl) files by running the following + command as the root user: +

+
find $QT6PREFIX/ -name \*.prl \
+   -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;
+

+ Install images and create the menu entries for installed + applications. Again as the root user: +

+
pushd qttools/src &&
+
+install -v -Dm644 assistant/assistant/images/assistant-128.png       \
+                  /usr/share/pixmaps/assistant-qt6.png               &&
+
+install -v -Dm644 designer/src/designer/images/designer.png          \
+                  /usr/share/pixmaps/designer-qt6.png                &&
+
+install -v -Dm644 linguist/linguist/images/icons/linguist-128-32.png \
+                  /usr/share/pixmaps/linguist-qt6.png                &&
+
+install -v -Dm644 qdbus/qdbusviewer/images/qdbusviewer-128.png       \
+                  /usr/share/pixmaps/qdbusviewer-qt6.png             &&
+popd &&
+
+
+cat > /usr/share/applications/assistant-qt6.desktop << EOF
+[Desktop Entry]
+Name=Qt6 Assistant
+Comment=Shows Qt6 documentation and examples
+Exec=$QT6PREFIX/bin/assistant
+Icon=assistant-qt6.png
+Terminal=false
+Encoding=UTF-8
+Type=Application
+Categories=Qt;Development;Documentation;
+EOF
+
+cat > /usr/share/applications/designer-qt6.desktop << EOF
+[Desktop Entry]
+Name=Qt6 Designer
+GenericName=Interface Designer
+Comment=Design GUIs for Qt6 applications
+Exec=$QT6PREFIX/bin/designer
+Icon=designer-qt6.png
+MimeType=application/x-designer;
+Terminal=false
+Encoding=UTF-8
+Type=Application
+Categories=Qt;Development;
+EOF
+
+cat > /usr/share/applications/linguist-qt6.desktop << EOF
+[Desktop Entry]
+Name=Qt6 Linguist
+Comment=Add translations to Qt6 applications
+Exec=$QT6PREFIX/bin/linguist
+Icon=linguist-qt6.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-qt6.desktop << EOF
+[Desktop Entry]
+Name=Qt6 QDbusViewer
+GenericName=D-Bus Debugger
+Comment=Debug D-Bus applications
+Exec=$QT6PREFIX/bin/qdbusviewer
+Icon=qdbusviewer-qt6.png
+Terminal=false
+Encoding=UTF-8
+Type=Application
+Categories=Qt;Development;Debugger;
+EOF
+
+
+

+ Command Explanations +

+

+ -nomake examples: + This switch disables building of the example programs + included in the source tarball. Remove it if you want to + build them. +

+

+ -skip qt3d: This + switch disables building qt3d support. There is a problem + building these files without an external library and no + packages in BLFS use qt3d. +

+

+ -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 Qt6 libraries instead of dlopen()-ing them. +

+

+ -syslog: This switch + allows sending Qt messages to the syslog logging system. +

+

+ -skip qtwebengine: + This switch disables building the QtWebEngine. The BLFS + editors have chosen to build qtwebengine-6.9.2 separately. +

+

+ -skip + qtquick3dphysics: This switch disables building + the Qt Quick 3D Physics submodule. On 32-bit systems, this + will cause the build process to fail with an inlining error + in Qt6's bundled copy of the PhysX SDK. +

+

+ -libproxy: This switch enables + the usage of libproxy for determining proxy server + information. +

+
+
+

+ Configuring Qt6 +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ If Sudo-1.9.17p2 is installed, QT6DIR + 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 += QT6DIR
+EOF
+

+ You now need to update the following configuration files so + that Qt6 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/qt6/lib
+
+# End Qt addition
+EOF
+
+ldconfig
+

+ As the root user, create + the /etc/profile.d/qt6.sh + file: +

+
cat > /etc/profile.d/qt6.sh << "EOF"
+# Begin /etc/profile.d/qt6.sh
+
+QT6DIR=/opt/qt6
+
+pathappend $QT6DIR/bin           PATH
+pathappend $QT6DIR/lib/pkgconfig PKG_CONFIG_PATH
+
+export QT6DIR
+
+# End /etc/profile.d/qt6.sh
+EOF
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + androiddeployqt (hard link to + androiddeployqt6), androiddeployqt6, androidtestrunner, + assistant, balsam, balsamui, canbusutil, designer, + instancer, lconvert, linguist, lrelease, lupdate, + materialeditor, meshdebug, pixeltool, qdbus, + qdbuscpp2xml, qdbusviewer, qdbusxml2cpp, + qdistancefieldgenerator, qdoc, qmake (hard link to + qmake6), qmake6, qml, qmldom, qmleasing, qmlformat, + qmllint, qmlls, qmlplugindump, qmlpreview, qmlprofiler, + qmlscene, qmltc, qmltestrunner, qmltime, + qopcuaxmldatatypes2cpp, qqem, qsb, qtdiag (hard link to + qtdiag6), qtdiag6, qtpaths (hard link to qtpaths6), + qtpaths6, qtplugininfo, qt-cmake, qt-cmake-create, + qt-configure-module, shadergen, shapegen, and + svg2xml +
+
+ Installed Libraries: + libQt6Bluetooth.so, + libQt6Bodymovin.so, libQt6BundledEmbree.a, + libQt6BundledOpenXR.a, libQt6BundledResonanceAudio.a, + libQt6Charts.so, libQt6ChartsQml.so, libQt6Coap.so, + libQt6Concurrent.so, libQt6Core.so, libQt6Core5Compat.so, + libQt6DBus.so, libQt6DataVisualization.so, + libQt6DataVisualizationQml.so, libQt6DeclarativeOpcua.so, + libQt6Designer.so, libQt6DesignerComponents.so, + libQt6DeviceDiscoverySupport.a, + libQt6EglFSDeviceIntegration.so, + libQt6EglFsKmsGbmSupport.so, libQt6EglFsKmsSupport.so, + libQt6ExampleIcons.a, libQt6ExamplesAssetDownloader.a, + libQt6FbSupport.a, libQt6Graphs.so, + libQt6GraphsWidgets.so, libQt6Grpc.so, + libQt6GrpcQuick.so, libQt6Gui.so, libQt6Help.so, + libQt6HttpServer.so, libQt6InputSupport.a, + libQt6JsonRpc.so, libQt6KmsSupport.a, + libQt6LabsAnimation.so, libQt6LabsFolderListModel.so, + libQt6LabsPlatform.so, libQt6LabsQmlModels.so, + libQt6LabsSettings.so, libQt6LabsSharedImage.so, + libQt6LabsWavefrontMesh.so, libQt6LanguageServer.a, + libQt6Location.so, libQt6Mqtt.so, libQt6Multimedia.so, + libQt6MultimediaQuick.so, libQt6MultimediaTestLib.a, + libQt6MultimediaWidgets.so, libQt6Network.so, + libQt6NetworkAuth.so, libQt6Nfc.so, libQt6OpcUa.so, + libQt6OpenGL.so, libQt6OpenGLWidgets.so, + libQt6PacketProtocol.a, libQt6Positioning.so, + libQt6PositioningQuick.so, libQt6PrintSupport.so, + libQt6Protobuf.so, libQt6ProtobufQtCoreTypes.so, + libQt6ProtobufQtGuiTypes.so, libQt6ProtobufQuick.so, + libQt6ProtobufWellKnownTypes.so, + libQt6QGstreamerMediaPluginImpl.a, libQt6Qml.so, + libQt6QmlAssetDownloader.a, libQt6QmlCompiler.so, + libQt6QmlCore.so, libQt6QmlDebug.a, libQt6QmlDom.a, + libQt6QmlLocalStorage.so, libQt6QmlLS.a, + libQt6QmlMeta.so, libQt6QmlModels.so, + libQt6QmlNetwork.so, libQt6QmlToolingSettings.a, + libQt6QmlTypeRegistrar.a, libQt6QmlWorkerScript.so, + libQt6QmlXmlListModel.so, libQt6Quick.so, + libQt6Quick3D.so, libQt6Quick3DAssetImport.so, + libQt6Quick3DAssetUtils.so, libQt6Quick3DEffects.so, + libQt6Quick3DGlslParser.so, libQt6Quick3DHelpers.so, + libQt6Quick3DHelpersImpl.so, libQt6Quick3DIblBaker.so, + libQt6Quick3DParticleEffects.so, + libQt6Quick3DParticles.so, libQt6Quick3DRuntimeRender.so, + libQt6Quick3DSpatialAudio.so, libQt6Quick3DUtils.so, + libQt6Quick3DXr.so, libQt6QuickControls2.so, + libQt6QuickControls2Basic.so, + libQt6QuickControls2BasicStyleImpl.so, + libQt6QuickControls2FluentWinUI3StyleImpl.so, + libQt6QuickControls2Fusion.so, + libQt6QuickControls2FusionStyleImpl.so, + libQt6QuickControls2Imagine.so, + libQt6QuickControls2ImagineStyleImpl.so, + libQt6QuickControls2Impl.so, + libQt6QuickControls2Material.so, + libQt6QuickControls2MaterialStyleImpl.so, + libQt6QuickControls2Universal.so, + libQt6QuickControls2UniversalStyleImpl.so, + libQt6QuickControlsTestUtils.a, libQt6QuickDialogs2.so, + libQt6QuickDialogs2QuickImpl.so, + libQt6QuickDialogs2Utils.so, libQt6QuickEffects.so, + libQt6QuickLayouts.so, libQt6QuickParticles.so, + libQt6QuickShapes.so, libQt6QuickTemplates2.so, + libQt6QuickTimelineBlendTrees.so, libQt6QuickTest.so, + libQt6QuickTestUtils.a, libQt6QuickTimeline.so, + libQt6QuickVectorImageGenerator.so, + libQt6QuickVectorImage.so, libQt6QuickWidgets.so, + libQt6RemoteObjects.so, libQt6RemoteObjectsQml.so, + libQt6Scxml.so, libQt6ScxmlQml.so, libQt6Sensors.so, + libQt6SensorsQuick.so, libQt6SerialBus.so, + libQt6SerialPort.so, libQt6ShaderTools.so, + libQt6SpatialAudio.so, libQt6Sql.so, + libQt6StateMachine.so, libQt6StateMachineQml.so, + libQt6Svg.so, libQt6SvgWidgets.so, libQt6Test.so, + libQt6TextToSpeech.so, libQt6UiTools.so, + libQt6VirtualKeyboard.so, + libQt6VirtualKeyboardSettings.so, libQt6WaylandClient.so, + libQt6WaylandCompositor.so, + libQt6WaylandCompositorIviapplication.so, + libQt6WaylandCompositorPresentationTime.so, + libQt6WaylandCompositorWLShell.so, + libQt6WaylandCompositorXdgShell.so, + libQt6WaylandEglClientHwIntegration.so, + libQt6WaylandEglCompositorHwIntegration.so, + libQt6WebChannel.so, libQt6WebChannelQuick.so, + libQt6WebSockets.so, libQt6WebView.so, + libQt6WebViewQuick.so, libQt6Widgets.so, + libQt6WlShellIntegration.so, libQt6XcbQpa.so, and + libQt6Xml.so +
+
+ Installed Directories: + /opt/qt6 and /opt/qt-6.9.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 +

+
+

+ lconvert +

+
+

+ is part of Qt6'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 files in TS format and produces message + files used by the application +

+
+

+ 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 +

+
+

+ meshdebug +

+
+

+ displays information about qtquick-3d mesh files +

+
+

+ pixeltool +

+
+

+ is a desktop magnifier - as you move your mouse + around the screen, it will show the magnified + contents in its window +

+
+

+ qdbus +

+
+

+ lists available services, object paths, methods, + signals, and properties of objects on a bus +

+
+

+ qdbuscpp2xml +

+
+

+ takes a C++ source file and generates a D-Bus XML + definition of the interface +

+
+

+ 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 +

+
+

+ qmake +

+
+

+ uses information stored in project files to + determine what should go in the makefiles it + generates +

+
+

+ qml +

+
+

+ executes a QML file +

+
+

+ 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 +

+
+

+ qmllint +

+
+

+ is a syntax checker for QML files +

+
+

+ 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 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ QtWebEngine-6.9.2 +

+
+
+
+
+
+

+ Introduction to QtWebEngine +

+
+

+ Important +

+

+ This package has historically had frequent updates that + address security vulnerabilities. To determine the latest + status check the BLFS + Security Advisories. +

+
+

+ 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 seem to fork a newer version for minor Qt + versions, but because chromium moves to newer versions very + often, by the time the Qt developers get a forked version + to pass their extended tests it is always an old version + and security fixes from chromium (some of which have a CVE + number) can take several months to appear in a QtWebengine + release, even if the severity has been rated as Critical. +

+

+ Therefore, you should be wary of using QtWebEngine in a + sensitive context and should always update to the next + release as soon as it appears in this book, even if is not + flagged as a Security Update. Identifying which + vulnerabilities have been fixed in a particular release + requires pulling the appropriate 'based-NNN' branch just + before the previous and current releases and is often + impractical. Reports of fixed QTBUG items do not seem to be + available and there is not any documentation in the tarball + for changes after the qt-5 versions. +

+
+

+ This package is known to build and work properly using an LFS + 12.4 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 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. +

+
+

+ Package Information +

+
+ +
+

+ qtwebengine Dependencies +

+
+ Required +
+

+ Cups-2.4.12, html5lib-1.1, nodejs-22.18.0, nss-3.115, pciutils-3.14.0, and + Qt-6.9.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. +

+
+ +
+ Optional +
+

+ MIT Kerberos V5-1.22.1, + Poppler-25.08.0, jsoncpp, + libsrtp, and + snappy +

+
+
+

+ Installation of qtwebengine +

+

+ Install qtwebengine by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_MESSAGE_LOG_LEVEL=STATUS             \
+      -D QT_FEATURE_webengine_system_ffmpeg=ON      \
+      -D QT_FEATURE_webengine_system_icu=ON         \
+      -D QT_FEATURE_webengine_system_libevent=ON    \
+      -D QT_FEATURE_webengine_proprietary_codecs=ON \
+      -D QT_FEATURE_webengine_webrtc_pipewire=ON    \
+      -D QT_BUILD_EXAMPLES_BY_DEFAULT=OFF           \
+      -D QT_GENERATE_SBOM=OFF                       \
+      -G Ninja ..                                   &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ CMAKE_MESSAGE_LOG_LEVEL=STATUS: + Output interesting messages that project users might be + interested in. Ideally these should be concise, no more than + a single line, but still informative. +

+

+ QT_FEATURE_webengine_system_*: + Specify what external packages the system should use. +

+

+ QT_BUILD_EXAMPLES_BY_DEFAULT=OFF: + Do not build examples by default. +

+

+ 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 python and node jobs run). +

    +
  • +
  • +

    + On a machine with only 4 CPUs online, the default of + scheduling N+2 jobs 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 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 --->                                       [NAMESPACES]
+    # Enable or disable *both* of them:
+    [ /*] User namespace                                               [USER_NS]
+    [ /*] PID Namespaces                                                [PID_NS]
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + qtwebengine_convert_dict and + QtWebEngineProcess (both in $QT6DIR/libexec) +
+
+ Installed Libraries: + libQt6Pdf.so, libQt6PdfQuick.so, + libQt6PdfWidgets.so, libQt6WebEngineCore.so, + libQt6WebEngineiQuick.so, + libQt6WebEngineQuickDelegatesQml.so, and + libQt6WebEngineWidgets.so +
+
+ Installed Directories: + $QT6DIR/include/QtPdf, + $QT6DIR/include/QtPdfQuick, $QT6DIR/include/QtPdfWidgets, + $QT6DIR/include/QtWebEngineCore, + $QT6DIR/include/QtWebEngineQuick, + $QT6DIR/include/QtWebEngineWidgets, + $QT6DIR/qml/QtWebEngine, and + $QT6DIR/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) +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ startup-notification Dependencies +

+
+ Required +
+

+ Xorg + Libraries and xcb-util-0.4.1 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Vulkan-Headers-1.4.321 +

+
+
+
+
+
+

+ Introduction to Vulkan-Headers +

+

+ The Vulkan-Headers package + contains a set of header files necessary to build and link + applications against the Vulkan API. +

+

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

+

+ Package Information +

+
+ +
+

+ Vulkan-Headers Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of Vulkan-Headers +

+

+ Install Vulkan-Headers by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr -G Ninja .. &&
+ninja
+

+ To test the results, issue: ninja test. Two tests are + known to fail due to the use of the deprecated ciso646 header with GCC 15 or newer. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/include/vk_video, + /usr/include/vulkan, /usr/share/cmake/VulkanHeaders, and + /usr/share/vulkan +
+
+
+
+
+
+
+
+

+ Vulkan-Loader-1.4.321 +

+
+
+
+
+
+

+ Introduction to Vulkan-Loader +

+

+ The Vulkan-Loader package + contains a library which provides the Vulkan API and provides + core support for graphics drivers for Vulkan. +

+

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

+

+ Package Information +

+
+ +
+

+ Vulkan-loader Dependencies +

+
+ Required +
+

+ CMake-4.1.0, Vulkan-Headers-1.4.321, and + Xorg + Libraries +

+
+ Recommended +
+ +
+ Recommended (Runtime) +
+

+ Mesa-25.1.8 (for Vulkan drivers) +

+
+ Optional (for testing) +
+

+ git-2.50.1 +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of Vulkan-Loader +

+
+

+ Note +

+

+ If this package is being installed on a system where Mesa + has already been installed previously, please rebuild + Mesa-25.1.8 after this package to install + Vulkan graphics drivers. +

+
+

+ Install Vulkan-Loader by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr   \
+      -D CMAKE_BUILD_TYPE=Release    \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON \
+      -G Ninja .. &&
+ninja
+

+ To run the test suite, issue (note that the command will use + git-2.50.1 + to download a copy of GoogleTest for building the test + suite): +

+
sed "s/'git', 'clone'/&, '--depth=1', '-b', self.commit/" \
+    -i ../scripts/update_deps.py &&
+cmake -D BUILD_TESTS=ON -D UPDATE_DEPS=ON .. &&
+ninja &&
+ninja test
+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D BUILD_WSI_WAYLAND_SUPPORT=OFF: + This option allows building without Wayland-1.24.0 support. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libvulkan.so +
+
+ Installed Directories: + /usr/lib/cmake/VulkanLoader +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libvulkan.so +

+
+

+ provides the Vulkan API and core support for + graphics drivers +

+
+
+
+
+
+
+
+

+ WebKitGTK-2.48.5 +

+
+
+
+
+
+

+ Introduction to WebKitGTK +

+

+ The WebKitGTK package is a + port of the portable web rendering engine WebKit to the GTK+ 3 and GTK + 4 platforms. +

+

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

+
+

+ Important +

+

+ This package has historically had frequent updates that + address security vulnerabilities. To determine the latest + status check the BLFS + Security Advisories. +

+
+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://webkitgtk.org/releases/webkitgtk-2.48.5.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 23e26bc4e30b80462cb1030fab352409 +

    +
  • +
  • +

    + Download size: 42 MB +

    +
  • +
  • +

    + Estimated disk space required: 1.5 GB (186 MB + installed, add 181 MB for GTK-4) +

    +
  • +
  • +

    + Estimated build time: 21 SBU (for GTK-3, using + parallelism=8, add 21 SBU for GTK-4) +

    +
  • +
+
+

+ WebKitGTK Dependencies +

+
+ Required +
+

+ Cairo-1.18.4, CMake-4.1.0, gst-plugins-base-1.26.5, + gst-plugins-bad-1.26.5, + GTK-3.24.50, GTK-4.18.6, ICU-77.1, Little CMS-2.17, + libgudev-238, libsecret-0.21.7, + libsoup-3.6.5, libtasn1-4.20.0, + libwebp-1.6.0, Mesa-25.1.8, OpenJPEG-2.5.3, + Ruby-3.4.5, SQLite-3.50.4, unifdef-2.12, and + Which-2.23 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, harfBuzz-11.4.1, + Wayland-1.24.0, WOFF2-1.0.2, ccache, flite, + Hyphen, + libbacktrace, + libmanette, + libspiel, and + sysprof +

+
+
+

+ Installation of WebKitGTK +

+

+ Installation of WebKitGTK +

+
+

+ Important +

+

+ This package allows building with either GTK-3 or GTK-4, + but not both in the same build. The GTK-4 version is needed + for packages such as Epiphany-48.5. Other packages, + such as Balsa-2.6.5 or Evolution-3.56.2, + require the GTK-3 version. Both versions can be installed + side by side on the same system. We give build instructions + for both cases below, but the only difference is the + setting of -D + USE_GTK4 +

+

+ With the default “release” build configuration, some + source files of this package require more than 4 GiB of RAM + to be built. As the result, you should pass -j<N> to + ninja + (replacing <N> with the quotient + of the amount of available RAM and 4 GiB) to limit the + number of parallel jobs and avoid the job from being killed + by the kernel OOM killer. +

+

+ On a 32-bit system, the sum of RAM and swap space used by a + build job (in fact, any single process) cannot exceed 4 + GiB. So if you are building this package on a 32-bit + system, you must add the -D + CMAKE_CXX_FLAGS_RELEASE="-O2 -DNDEBUG" + option to the cmake to disable some + optimizations which need a lot of memory to limit the + memory usage of individual build jobs. Performance will be + impacted slightly, but not at a level where it is + noticeable during normal usage. +

+
+

+ If you want to install the GTK+-3 version of WebKitGTK, run the following commands: +

+
mkdir -vp build &&
+cd        build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release     \
+      -D CMAKE_INSTALL_PREFIX=/usr    \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON  \
+      -D PORT=GTK                     \
+      -D LIB_INSTALL_DIR=/usr/lib     \
+      -D USE_LIBBACKTRACE=OFF         \
+      -D USE_LIBHYPHEN=OFF            \
+      -D ENABLE_GAMEPAD=OFF           \
+      -D ENABLE_MINIBROWSER=ON        \
+      -D ENABLE_DOCUMENTATION=OFF     \
+      -D ENABLE_WEBDRIVER=OFF         \
+      -D USE_WOFF2=OFF                \
+      -D USE_GTK4=OFF                 \
+      -D ENABLE_JOURNALD_LOG=OFF      \
+      -D ENABLE_BUBBLEWRAP_SANDBOX=ON \
+      -D USE_SYSPROF_CAPTURE=NO       \
+      -D ENABLE_SPEECH_SYNTHESIS=OFF  \
+      -W no-dev -G Ninja ..           &&
+ninja
+

+ This package does not have a working test suite. 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. +

+

+ Now, as the root user: +

+
ninja install
+

+ If you want to install the GTK4 version of WebKitGTK, run the following commands: +

+
rm -rf * .[^.]* &&
+
+cmake -D CMAKE_BUILD_TYPE=Release      \
+      -D CMAKE_INSTALL_PREFIX=/usr     \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON   \
+      -D PORT=GTK                      \
+      -D LIB_INSTALL_DIR=/usr/lib      \
+      -D USE_LIBBACKTRACE=OFF          \
+      -D USE_LIBHYPHEN=OFF             \
+      -D ENABLE_GAMEPAD=OFF            \
+      -D ENABLE_MINIBROWSER=ON         \
+      -D ENABLE_DOCUMENTATION=OFF      \
+      -D USE_WOFF2=OFF                 \
+      -D USE_GTK4=ON                   \
+      -D ENABLE_JOURNALD_LOG=OFF       \
+      -D ENABLE_BUBBLEWRAP_SANDBOX=ON  \
+      -D USE_SYSPROF_CAPTURE=NO        \
+      -D ENABLE_SPEECH_SYNTHESIS=OFF   \
+      -W no-dev -G Ninja ..            &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+

+ As the -D + ENABLE_DOCUMENTATION=OFF option is used, the + documentation is not rebuilt nor installed now. If you need + the documentation, you can either install Gi-DocGen-2025.4 and remove this + option from the cmake command, or install + the pre-built documentation (only for the GTK-4 version) + instead: +

+
install -vdm755 /usr/share/gtk-doc/html &&
+cp -rv ../Documentation/* /usr/share/gtk-doc/html
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + USE_LIBBACKTRACE=OFF: This switch disables the + use of libbacktrace for dumping a stack trace when a crash + happens. You need to install libbacktrace + if you wish to enable it (replacing OFF with ON or just + removing the switch). +

+

+ -D USE_LIBHYPHEN=OFF: + This switch disables the default automatic hyphenation + implementation. You need to install Hyphen + if you wish to enable it (replacing OFF with ON or just + removing the switch). +

+

+ -D + ENABLE_DOCUMENTATION=OFF: This switch disables + regenerating the documentation. Remove this switch if you + have Gi-DocGen-2025.4 installed and wish to + regenerate the documentation. +

+

+ -D + ENABLE_GAMEPAD=OFF: This switch disables gamepad + support. Remove this switch if you have libmanette + installed and wish to enable it. +

+

+ -D + ENABLE_MINIBROWSER=ON: This switch enables + compiling and installing the MiniBrowser. +

+

+ -D + ENABLE_WEBDRIVER=OFF: This switch disables + compiling and installing WebKitWebDriver. We use it + for the GTK-3 build because the WebKitWebDriver from the + GTK-3 build will be overwritten by the GTK-4 build anyway. + Remove this option if you don't plan to build this package + with GTK-4. +

+

+ -D + ENABLE_BUBBLEWRAP_SANDBOX=ON: This switch enables + the Bubblewrap sandbox, which helps mitigate the impact of + most security vulnerabilities in this package. Change this + switch to OFF if you do not want to install bubblewrap-0.11.0, libseccomp-2.6.0, or xdg-dbus-proxy-0.1.6, but note + that this may put you at risk. +

+

+ -D + ENABLE_JOURNALD_LOG=OFF: This switch disables + using the systemd journal for logging errors and debugging + information since it is not available on SysV systems. +

+

+ -D + USE_SYSPROF_CAPTURE=NO: This switch disables a + hard dependency on sysprof. +

+

+ -D + ENABLE_SPEECH_SYNTHESIS=OFF: This switch disables + building speech synthesis support into WebKitGTK because it + requires additional external dependencies. You will need both + flite and libspiel if + you wish to enable this. +

+

+ -D USE_SYSTEM_MALLOC=ON: This + switch enables building against the system installed + malloc. +

+

+ -D ENABLE_GEOLOCATION=OFF: Use + this switch if you don't want to install GeoClue-2.7.2. +

+

+ -D USE_AVIF=OFF: Use this switch + if you don't want to install libavif-1.3.0. Note that you will + not have support for AVIF images if you do this. +

+

+ -D USE_WOFF2=ON: Use this switch + if the optional package WOFF2-1.0.2 is installed. This adds + additional support for fonts. +

+

+ -D USE_JPEGXL=OFF: Use this + switch if the recommended package libjxl-0.11.1 is not + installed. Note that you will not have support for JPEG XL + images if this option is passed. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + WebKitWebDriver +
+
+ Installed Libraries: + libjavascriptcoregtk-4.1.so, + libjavascriptcoregtk-6.0.so, libwebkit2gtk-4.1.so, and + libwebkitgtk-6.0.so +
+
+ Installed Directories: + /usr/include/webkitgtk-4.1, + /usr/include/webkitgtk-6.0, + /usr/lib{,exec}/webkit2gtk-4.1, + /usr/lib{,exec}/webkitgtk-6.0, + /usr/share/gtk-doc/html/{jsc-glib,webkit2gtk{,-web-extension}}-4.1 + (optional), and + /usr/share/gtk-doc/html/{jsc-glib,webkit2gtk{,-web-process-extension}}-6.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ WebKitWebDriver +

+
+

+ allows debugging and automation of web pages and + browsers +

+
+

+ libjavascriptcoregtk-4.1.so +

+
+

+ contains core JavaScript API functions used by + jsc + and libwebkit2gtk-4.1 +

+
+

+ libjavascriptcoregtk-6.0.so +

+
+

+ contains core JavaScript API functions used by + jsc + and libwebkitgtk-6.0 +

+
+

+ libwebkit2gtk-4.1.so +

+
+

+ contains the WebKit2 API functions +

+
+

+ libwebkitgtk-6.0.so +

+
+

+ contains the WebKit API functions for GTK-4 + applications +

+
+
+
+
+
+
+
+

+ xdg-desktop-portal-1.20.3 +

+
+
+
+
+
+

+ Introduction to xdg-desktop-portal +

+

+ xdg-desktop-portal is a + D-Bus service that allows applications to interact with the + desktop in a safe way. Several aspects of desktop + interaction, like file chooser, desktop style, etc are + implemented in different D-Bus APIs, known as portals. Sandboxed applications + benefit the most from this service since they don't need + special permissions to use the portal APIs, but any + application can use it. xdg-desktop-portal safeguards many + resources and features with a user-controlled permission + system. This service needs a backend implementing + desktop-specific portal interfaces. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-desktop-portal Dependencies +

+
+ Required +
+

+ Fuse-3.17.4, gdk-pixbuf-2.42.12, JSON-GLib-1.10.6, pipewire-1.4.7, + and dbus-1.16.2 (at runtime). Furthermore, a + backend is needed at runtime for this package to be of any + use, either xdg-desktop-portal-gtk-1.15.3 + or xdg-desktop-portal-gnome-48.0 + or xdg-desktop-portal-lxqt-1.2.0 +

+
+ Recommended +
+ +
+

+ Note +

+

+ Although there is an option to build the package without + bubblewrap, upstream + developers and LFS editors alike highly recommend to not + use this possibility, as it will create a large security + issue. +

+
+
+ Optional +
+

+ GeoClue-2.7.2 (for the “location” portal), + and pytest-8.4.1 with libportal-0.9.1, + dbusmock-0.36.0, and umockdev-0.19.3 + (for running tests) +

+
+ Optional (for building the + documentation) +
+

+ sphinx-8.2.3 with sphinxext.opengraph, + sphinx_copybutton, + furo, and flatpak +

+
+
+

+ Installation of xdg-desktop-portal +

+

+ Install xdg-desktop-portal + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D tests=disabled .. &&
+ninja
+

+ If the optional dependencies are installed, you can test the + results by running: +

+
meson configure -D tests=enabled &&
+ninja test
+

+ Without the external dependencies one test, + integration/dynamiclauncher is known to fail. +

+

+ Now, as the root user: +

+
ninja install
+

+ Remove systemd files that are useless (as the root user): +

+
rm -rvf /usr/lib/systemd
+
+
+

+ Command Explanations +

+

+ -D tests=disabled: + Prevents requiring several optional dependencies that are + only needed for tests. +

+
+
+

+ Configuring xdg-desktop-portal +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ The main configuration files are ~/.config/xdg-desktop-portal/portals.conf, + /etc/xdg-desktop-portal/portals.conf, and + /usr/share/xdg-desktop-portal/portals.conf. + Several other locations can be searched for configuration + files. See portals.conf(5). +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ The various configuration files are used to choose the + backend depending of various conditions. See portals.conf(5) + for details. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + several daemons in + /usr/libexec +
+
+ Installed + Librar(y,ies): None +
+
+ Installed + Director(y,ies): None +
+
+
+
+
+
+
+
+

+ xdg-desktop-portal-gtk-1.15.3 +

+
+
+
+
+
+

+ Introduction to xdg-desktop-portal-gtk +

+

+ xdg-desktop-portal-gtk is a + backend for xdg-desktop-portal, that is using GTK + and various pieces of GNOME infrastructure. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-desktop-portal-gtk Dependencies +

+
+ Required +
+

+ gnome-desktop-44.3, GTK-3.24.50 and + xdg-desktop-portal-1.20.3 +

+
+ Recommended +
+ +
+
+

+ Installation of xdg-desktop-portal-gtk +

+

+ Install xdg-desktop-portal-gtk by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ Remove systemd files that are useless (as the root user): +

+
rm -rvf /usr/lib/systemd
+
+
+

+ Contents +

+
+
+
+ Installed Program: + one daemon in /usr/libexec +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/share/xdg-desktop-portal (if + no other xdg-desktop-portal backend is + installed) +
+
+
+
+
+
+
+
+
+

+ 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, Plasma, 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. +

+
+
+
+

+ GDM-48.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GDM + Dependencies +

+
+ Required +
+

+ AccountsService-23.13.9, + DConf-0.40.0, + libcanberra-0.30 (built after + GTK-3.24.50), and Linux-PAM-1.7.1 +

+
+ Optional +
+

+ keyutils-1.6.3 and check (for + testing) +

+
+ Runtime Dependencies +
+

+ gnome-session-48.0, gnome-shell-48.4, and elogind-255.17 +

+
+
+

+ 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
+

+ First, adapt GDM to build with GCC 15: +

+
sed -r 's/([(*])bool([) ])/\1boolval\2/' -i common/gdm-settings-utils.*
+

+ Install GDM by running the + following commands: +

+
sed -e 's@systemd@elogind@'                                \
+    -e 's/-session optional/-session required/'            \
+    -e '/elogind/isession  required       pam_loginuid.so' \
+
+    -i data/pam-lfs/gdm-launch-environment.pam &&
+
+mkdir build &&
+cd    build &&
+
+meson setup ..                   \
+      --prefix=/usr              \
+      --buildtype=release        \
+      -D gdm-xsession=true       \
+      -D initial-vt=7            \
+      -D run-dir=/run/gdm        \
+      -D logind-provider=elogind \
+      -D systemd-journal=false   \
+      -D systemdsystemunitdir=no \
+      -D systemduserunitdir=no   &&
+ninja
+

+ The test suite requires Check that we've removed from LFS. +

+

+ 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. +

+

+ -D initial-vt=7: This + switch starts GDM on VT7 by default, since on SysV systems, + elogind is not available until it gets activated by PAM + during a login session. The default behavior is to start on + the currently active TTY, but this behavior causes GDM to + fail to start in virtual environments and other situations + where Wayland is not supported. +

+

+ -D default-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. +

+

+ -D gdm-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. +

+

+ On some systems with NVIDIA GPUs or virtual GPUs (such as + provided by qemu), GDM will hide Wayland sessions by + default. This is often done to prevent users from + encountering problems with buggy drivers, which can result + in system lockups, application crashes, power management + problems, and graphics slowdowns. If your system is a + virtual machine or you have an NVIDIA GPU and still want to + try running Wayland sessions anyway, execute the following + command as the root user: +

+
ln -s /dev/null /etc/udev/rules.d/61-gdm.rules
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To start gdm + automatically when the system is switched to runlevel 5, + install the /etc/rc.d/init.d/xdm script and the + /etc/sysconfig/xdm + configuration file included in the blfs-bootscripts-20250225 package + and adjust /etc/inittab by + running as the root user: +

+
make install-gdm
+

+ In order to permanently set the default runlevel to 5, + starting the gdm greeter screen + automatically, you can modify /etc/inittab. As the root user: +

+
sed /initdefault/s/3/5/ -i /etc/inittab
+
+
+
+
+
+

+ Configuring GDM Auto-Suspend +

+
+
+
+

+ GDM will suspend the system when the greeter screen has + been running for a while without any interactive input. If + you want to disable auto-suspending for any reason (for + example if the system is hosting some services besides + functioning as a desktop system), as the root user, issue: +

+
su gdm -s /bin/bash                                                \
+       -c "dbus-run-session                                        \
+             gsettings set org.gnome.settings-daemon.plugins.power \
+                           sleep-inactive-ac-type                  \
+                           nothing"
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gdm, gdm-config, and + gdmflexiserver +
+
+ Installed Libraries: + libgdm.so and pam_gdm.so (PAM + Module) +
+
+ Installed Directories: + /etc/gdm, /usr/include/gdm, + /usr/share/gdm, and /usr/share/help/*/gdm +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ gdm +

+
+

+ is a login prompt for GNOME +

+
+

+ gdm-config +

+
+

+ configures a variety of authentication options for + GDM +

+
+
+
+
+
+
+
+

+ lightdm-1.32.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 + 12.4 platform. +

+

+ Lightdm Package Information +

+
+ +
+

+ 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. +

+
+
+ +
+

+ Lightdm Dependencies +

+
+ Required +
+

+ Exo-4.20.0 + (for the greeter), libgcrypt-1.11.2, itstool-2.0.7, + Linux-PAM-1.7.1, and Xorg-Server-21.1.18 (Runtime) +

+
+ Recommended +
+ +
+ Optional +
+

+ AccountsService-23.13.9 (run + time), at-spi2-core-2.56.4, GTK-Doc-1.34.0, libido, and libindicator +

+
+
+

+ 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
+

+ Then change the Linux-PAM + configuration files so that elogind is used: +

+
sed -i s/systemd/elogind/ data/pam/*
+

+ 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.32.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.9.tar.gz &&
+cd lightdm-gtk-greeter-2.0.9 &&
+
+./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.9 &&
+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,lightdm-gtk-greeter}.conf +

+

+ The configuration files offer many options. If, for + instance, you have a multiple monitor setup but prefer the + login window to be displayed on only one monitor, set + 'active-monitor=<monitor-name>' in lightdm-gtk-greeter.conf. For example you + could use active-monitor=HDMI-1. You can determine + the monitor-names with xrandr + --listmonitors. Note that the monitor names + may change if you change the graphics driver and you may + have to adjust the configuration accordingly. +

+
+
+
+
+
+

+ Boot + Script +

+
+
+
+

+ To start lightdm automatically + when the system is switched to runlevel 5, install the + /etc/rc.d/init.d/xdm script + and the /etc/sysconfig/xdm + configuration file included in the blfs-bootscripts-20250225 package + and adjust /etc/inittab by + running as the root user: +

+
make install-lightdm
+
+
+
+
+
+

+ Starting + lightdm +

+
+
+
+

+ The lightdm + greeter can be started from the command line as the + root user: +

+
telinit 5
+
+
+
+
+
+

+ 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.9, + /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 +

+
+
+
+
+
+
+
+

+ sddm-0.21.0 +

+
+
+
+
+
+

+ Introduction to sddm +

+

+ The sddm package contains a + lightweight display manager based upon Qt and QML. +

+

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

+

+ Package Information +

+
+ +
+

+ SDDM + Dependencies +

+
+ Required +
+

+ CMake-4.1.0, extra-cmake-modules-6.17.0, + and Qt-6.9.2 +

+
+ Recommended +
+ +
+
+

+ Installation of SDDM +

+

+ First, create a dedicated user and group to take control of + the sddm daemon + after it is started. Issue the following commands as the + root user: +

+
groupadd -g 64 sddm &&
+useradd  -c "sddm Daemon" \
+         -d /var/lib/sddm \
+         -u 64 -g sddm    \
+         -s /bin/false sddm
+

+ Install sddm by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -D ENABLE_JOURNALD=OFF              \
+      -D NO_SYSTEMD=ON                    \
+      -D RUNTIME_DIR=/run/sddm            \
+      -D USE_ELOGIND=ON                   \
+      -D BUILD_MAN_PAGES=ON               \
+      -D BUILD_WITH_QT6=ON                \
+      -D DATA_INSTALL_DIR=/usr/share/sddm \
+      -D DBUS_CONFIG_FILENAME=sddm_org.freedesktop.DisplayManager.conf \
+      .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install &&
+install -v -dm755 -o sddm -g sddm /var/lib/sddm
+/usr/bin/sddm --example-config > /etc/sddm.conf
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply additional compiler optimizations. +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -D + ENABLE_JOURNALD=OFF and -D NO_SYSTEMD=ON: These + switches are used because this version of BLFS does not + support systemd. +

+

+ -D + DBUS_CONFIG_FILENAME=sddm_org.freedesktop.DisplayManager.conf: + This switch prevents the file /etc/dbus-1/system.d/org.freedesktop.DisplayManager.conf + from being overwritten, as it may be used by other DM's. +

+

+ -D + BUILD_MAN_PAGES=ON: This switch is used to build + and install man pages. +

+
+
+

+ Configuring SDDM +

+
+
+
+
+

+ Config + Files +

+
+
+
+

+ /etc/sddm.config +

+

+ Normally, you want to edit this file. For example, if Xorg + is installed in /opt, use your preferred editor as the + root user to replace the + default XauthPath + value by /opt/xorg/bin/xauth. Or, as the + root user, issue: +

+
sed -i.orig '/ServerPath/ s|usr|opt/xorg|' /etc/sddm.conf
+

+ This command will do the substitution and create a copy of + the original file with name /etc/sddm.conf.orig. +

+

+ From now on, we will describe how to modify configurations + using sed. Of course, you may instead use your preferred + editor as the root user. +

+

+ For security reasons, you normally want the default + ServerArguments=-nolisten + tcp, unless a remote machine needs access to + the local X server. In that case, as the root user, issue: +

+
sed -i 's/-nolisten tcp//' /etc/sddm.conf
+

+ Desktop (Notebook) users, normally want the Num Lock key on + (off). For that, as root, + issue: +

+
sed -i '/Numlock/s/none/on/' /etc/sddm.conf
+

+ for Desktop users. For Notebook users, replace /on/ by + /off/ in the command above. +

+

+ By default, a virtual keyboard is presented for the user. + If this is not desired, run as root: +

+
sed -i 's/qtvirtualkeyboard//' /etc/sddm.conf
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ Install the /etc/rc.d/init.d/xdm init script from the + blfs-bootscripts-20250225 package, + as the root user: +

+
make install-sddm
+
+
+
+
+
+

+ Linux PAM Configuration +

+
+
+
+
+

+ Note +

+

+ The install procedure above installed a set of PAM + configuration files. These procedures overwrite them and + use versions compatible with a BLFS environment. +

+
+

+ If you have built sddm + with Linux PAM support, + create the necessary configuration files by running the + following commands as the root user: +

+
cat > /etc/pam.d/sddm << "EOF"
+# Begin /etc/pam.d/sddm
+
+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/sddm
+EOF
+
+cat > /etc/pam.d/sddm-autologin << "EOF"
+# Begin /etc/pam.d/sddm-autologin
+
+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 required       pam_deny.so
+
+session  required       pam_limits.so
+session  include        system-session
+
+# End /etc/pam.d/sddm-autologin
+EOF
+
+cat > /etc/pam.d/sddm-greeter << "EOF"
+# Begin /etc/pam.d/sddm-greeter
+
+auth     required       pam_env.so
+auth     required       pam_permit.so
+
+account  required       pam_permit.so
+password required       pam_deny.so
+session  required       pam_unix.so
+-session optional       pam_systemd.so
+
+# End /etc/pam.d/sddm-greeter
+EOF
+
+
+
+
+
+

+ Starting sddm +

+
+
+
+

+ If the sddm bootscript has been installed, start sddm by + running, as the root user: +

+
/etc/rc.d/init.d/xdm start
+

+ By convention, X should be executed at runlevel 5, + consequently, the same is true for sddm. However, the default runlevel is + 3. Changing to runlevel 5, from a console terminal, as + root user, starts the + sddm + bootscript, bringing up the greeter screen: +

+
init 5
+

+ In order to permanently set the default to 5, starting the + sddm greeter + screen automatically, modify /etc/inittab as the root user: +

+
cp -v /etc/inittab{,-orig} &&
+sed -i '/initdefault/ s/3/5/' /etc/inittab
+
+
+
+
+
+

+ 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 or + /usr/share/wayland-sessions. + Most of the Window Managers and Desktop Environments + automatically provide those files, but if necessary, you + may include a custom one. +

+
+
+
+
+
+

+ Themes +

+
+
+
+

+ Three themes are installed at /usr/share/sddm/themes: elarun, maldives, + and maya. There is also a default theme, which is not + present in that directory. You can install other themes in + that directory. In order to change the theme, you need to + edit /etc/sddm.conf, to + change the default (empty) theme, replacing Current= with Current=<new + theme>, e.g. Current=maldives. +

+

+ In order to see the theme without leaving the session, + issue: +

+
sddm-greeter --test-mode --theme <theme path>
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + sddm and sddm-greeter +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/sddm and + /var/lib/sddm +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ sddm +

+
+

+ is a display and login manager based on + Qt libraries. +

+
+

+ sddm-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. +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Fluxbox Dependencies +

+
+ Required +
+

+ a graphical + environment +

+
+ Optional +
+

+ dbus-1.16.2 (runtime), FriBidi-1.0.16, + and imlib2-1.12.5 (if you wish to use other + image formats in addition to XPM) +

+
+
+

+ Installation of Fluxbox +

+

+ First, fix a build failure when building with gcc-11.1 and + later: +

+
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 test suite. +

+

+ 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-48.0 or + lightdm-1.32.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-48.0 or lightdm-1.32.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.12.5 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) +

+
+
+
+
+
+
+
+

+ IceWM-3.8.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ IceWM Dependencies +

+
+ Required +
+

+ CMake-4.1.0, imlib2-1.12.5, and a graphical + environment +

+
+ Optional +
+

+ asciidoc-10.2.1 (for regenerating the + HTML documentation), FriBidi-1.0.16 (for languages written + right to left), librsvg-2.61.0, libao-1.2.0, libsndfile-1.2.2, alsa-lib-1.2.14 + (for the experimental icesound program), and gdk-pixbuf-xlib +

+
+
+

+ Installation of IceWM +

+

+ Install IceWM by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D CFGDIR=/etc               \
+      -D ENABLE_LTO=ON             \
+      -D DOCDIR=/usr/share/doc/icewm-3.8.2  \
+      .. &&
+make
+

+ This package does not have a working test suite. +

+

+ Now, as the root user: +

+
make install
+

+ This package creates two .desktop files in the /usr/share/xsessions/ directory. Both are + not needed in a BLFS system, so prevent the extra file + showing up as an option in a display manager. As the + root user: +

+
rm -v /usr/share/xsessions/icewm.desktop
+
+
+

+ Command Explanations +

+

+ -D ENABLE_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 specify 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 + 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 + FN : go to + ttyN. +

    +
  • +
  • +

    + 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-3.8.2, + /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 to provide hints to the user +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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: 19 MB +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU +

    +
  • +
+
+

+ Additional Download +

+ +

+ Openbox Dependencies +

+
+ Required +
+

+ a graphical + environment and Pango-1.56.4 (compiled with support for + libXft) +

+
+ Optional +
+

+ dbus-1.16.2 (runtime), imlib2-1.12.5 (to + enable icons in the right click menu), ImageMagick-7.1.2-1 (to show + desktop backgrounds as seen in the Configuration Information + section below), PyXDG-0.28, startup-notification-0.12, + and librsvg-2.61.0 +

+
+
+

+ Installation of Openbox +

+
+

+ Note +

+

+ If XORG_PREFIX is not /usr, + tell gcc + about it: +

+
export LIBRARY_PATH=$XORG_PREFIX/lib
+
+

+ Update the package scripts to enable Python 3: +

+
patch -Np1 -i ../openbox-3.6.1-py3-1.patch
+

+ Install Openbox by running + the following commands: +

+
autoreconf -fi &&
+./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
+

+ This package creates three .desktop files in the /usr/share/xsessions/ directory. Two of + these are not appropriate in a BLFS system, so prevent the + extra files showing up as options in a display manager. As + the root user: +

+
rm -v /usr/share/xsessions/openbox-{gnome,kde}.desktop
+
+
+

+ 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
+

+ To have icons in your right click menu requires installing + imlib2-1.12.5 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 behavior 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 when you start + Xorg, install + Numlockx and add that to your xinitrc. Another useful + application is dbus-1.16.2: +

+
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 +

+
+
+
+
+
+
+
+
+

+ 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-48.1 +

+
+
+
+
+
+

+ Introduction to Adwaita Icon Theme +

+

+ The Adwaita Icon Theme + package contains an icon theme for GTK+ 3 and GTK + 4 applications. +

+

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

+

+ Package Information +

+
+ +
+

+ Adwaita Icon Theme Dependencies +

+
+ Required +
+

+ GTK-3.24.50 or GTK-4.18.6, and librsvg-2.61.0 +

+
+
+

+ Installation of Adwaita Icon Theme +

+

+ Install Adwaita Icon Theme + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Remove any old icons and install the new ones. As the + root user: +

+
rm -rf /usr/share/icons/Adwaita/ &&
+ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/share/icons/Adwaita +
+
+
+
+
+
+
+
+

+ breeze-icons-6.17.0 +

+
+
+
+
+
+

+ Introduction to Breeze Icons +

+

+ The Breeze Icons package + contains the default icons for KDE + Plasma applications, but it can be used for other + window environments. +

+

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

+

+ Package Information +

+
+ +
+

+ Breeze Icons Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 + and Qt-6.9.2 +

+
+ Optional +
+

+ KDE + Frameworks-6.17.0, libxml2-2.14.5, and lxml-6.0.0 +

+
+
+

+ Installation of Breeze Icons +

+

+ Install Breeze Icons by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D BUILD_TESTING=OFF         \
+      -W no-dev ..                 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D BUILD_TESTING=OFF: + This parameter disables building the testing framework, which + requires some modules from KDE + Frameworks-6.17.0. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKF6BreezeIcons.so +
+
+ Installed Directory: + /usr/include/KF6/BreezeIcons, + /usr/lib/cmake/KF6BreezeIcons, and + /usr/share/icons/breeze{,-dark} +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Icon Theme Dependencies +

+
+ Required +
+

+ GTK-3.24.50, hicolor-icon-theme-0.18, and + icon-naming-utils-0.8.90 +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Icon Theme Extras Dependencies +

+
+ Required +
+

+ gnome-icon-theme-3.12.0 +

+
+ Optional +
+

+ git-2.50.1 + and Inkscape-1.4.2 +

+
+
+

+ 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
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Icon Theme Symbolic + Dependencies +

+
+ Required +
+

+ gnome-icon-theme-3.12.0 +

+
+ Optional +
+

+ git-2.50.1 + and Inkscape-1.4.2 +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Themes Extra Dependencies +

+
+ Required +
+

+ GTK-3.24.50 with librsvg-2.61.0 +

+
+
+

+ Installation of GNOME Themes Extra +

+

+ Install GNOME Themes Extra + by running the following commands: +

+
./configure --prefix=/usr --disable-gtk2-engine &&
+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 because GTK+-2 is + no longer part of BLFS. +

+

+ --disable-gtk3-engine: This + switch disables the GTK+-3 theming engine. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/icons/HighContrast, + /usr/share/themes/Adwaita, + /usr/share/themes/Adwaita-dark, and + /usr/share/themes/HighContrast +
+
+
+
+
+
+
+
+

+ hicolor-icon-theme-0.18 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of hicolor-icon-theme +

+

+ Install hicolor-icon-theme + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ icon-naming-utils Dependencies +

+
+ Required +
+

+ XML-Simple-2.25 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ LXDE + Icon Theme Dependencies +

+
+ Optional +
+

+ GTK-3.24.50 (for gtk-update-icon-cache + command) +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ oxygen-icons-6.0.0 +

+
+
+
+
+
+

+ Introduction to oxygen-icons +

+

+ The oxygen icons 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ oxygen-icons Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 + and Qt-6.9.2 +

+
+
+

+ Installation of oxygen-icons +

+

+ First, enable scalable icons: +

+
sed -i '/( oxygen/ s/)/scalable )/' CMakeLists.txt
+

+ Install oxygen-icons by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr -W no-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 +
+
+
+
+
+
+
+
+
+
+

+ 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 + https://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 KDE6 system has two main blocks: the libraries, called KDE + Frameworks 6 or KF6, which can be used in other environments, + and the desktop environment called KDE Plasma 6. Most of the + applications written by the KDE team only use KF6, and do not + need the plasma environment. +

+

+ For more information visit the official KDE project site at + https://kde.org/. +

+
+
+
+
+

+ extra-cmake-modules-6.17.0 +

+
+
+
+
+
+

+ Introduction to Extra Cmake Modules +

+

+ The Extra Cmake Modules + package contains extra CMake + modules used by KDE + Frameworks and other packages. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Extra Cmake Modules Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ sphinx-8.2.3 (for building documentation), + PyQt (experimental + support for building KDE Python bindings), and ReuseTool (for + running internal tests) +

+
+
+

+ Installation of Extra Cmake Modules +

+

+ First, fix the package to be compatible with the latest + Python release: +

+
patch -Np1 -i ../extra-cmake-modules-6.17.0-upstream_fix-1.patch
+

+ Install Extra Cmake Modules + by running the following commands: +

+
sed -i '/"lib64"/s/64//' kde-modules/KDEInstallDirsCommon.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 -D CMAKE_INSTALL_PREFIX=/usr -D BUILD_WITH_QT6=ON .. &&
+make
+

+ This package does not come with a test suite. +

+
+

+ Note +

+

+ Unlike other KF6 packages, this module is installed in /usr + because it can be used by some non-KF6 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/kf6 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) +
+
+
+
+
+
+
+
+

+ Phonon-4.12.0 +

+
+
+
+
+
+

+ Introduction to Phonon +

+

+ Phonon is the multimedia API + for KDE. It replaces the old aRts package. Phonon needs the VLC + backend. +

+

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

+

+ Package Information +

+
+ +
+

+ Phonon Dependencies +

+
+ Required +
+

+ CMake-4.1.0, extra-cmake-modules-6.17.0, + GLib-2.84.4, and Qt-6.9.2 +

+

+ phonon-backend-vlc-0.12.0 + needs to be installed afterwards for multimedia operation in + KDE. +

+
+ Optional +
+

+ PulseAudio-17.0 +

+
+
+

+ Installation of Phonon +

+

+ Install Phonon by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D PHONON_BUILD_QT5=OFF      \
+      -W no-dev .. &&
+make
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply higher level of the compiler optimizations. +

+

+ -D + PHONON_BUILD_QT5=OFF: This switch is needed to + prevent building the Qt5 + bindings, which fails if Qt5 + is not installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + phononsettings +
+
+ Installed Libraries: + libphonon4qt6.so and + libphonon4qt6experimental.so +
+
+ Installed Directories: + /usr/include/phonon4qt6, + /usr/lib/cmake/phonon4qt6, and + /usr/lib/plugins/designer +
+
+
+
+
+
+
+
+

+ Phonon-backend-vlc-0.12.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Phonon-backend-vlc Dependencies +

+
+ Required +
+

+ phonon-4.12.0 and VLC-3.0.21 (gui is not needed) +

+
+
+

+ Installation of Phonon-backend-vlc +

+

+ Install Phonon-backend-vlc + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D PHONON_BUILD_QT5=OFF      \
+      .. &&
+make
+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply higher level of compiler optimizations. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + none +
+
+ Installed Libraries: + phonon_vlc_qt6.so +
+
+ Installed Directory: + /usr/lib/plugins/phonon4qt6_backend +
+
+
+
+
+
+
+
+

+ Polkit-Qt-0.200.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Polkit-Qt Dependencies +

+
+ Required +
+

+ CMake-4.1.0, Polkit-126, and Qt-6.9.2 +

+
+
+

+ Installation of Polkit-Qt +

+

+ Install Polkit-Qt by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D QT_MAJOR_VERSION=6        \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply higher level of the compiler optimizations. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + none +
+
+ Installed Libraries: + libpolkit-qt6-agent-1.so, + libpolkit-qt6-core-1.so, and + libpolkit-qt6-gui-1.so +
+
+ Installed Directories: + /usr/include/polkit-qt6-1 and + /usr/lib/cmake/PolkitQt6-1 +
+
+
+
+
+
+
+
+

+ plasma-wayland-protocols-1.18.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Plasma-wayland-protocols + Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 +

+
+
+

+ Installation of Plasma-wayland-protocols +

+

+ Install Plasma-wayland-protocols by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr ..
+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + none +
+
+ Installed Libraries: + none +
+
+ Installed Directories: + /usr/share/plasma-wayland-protocols + and /usr/lib/cmake/PlasmaWaylandProtocols +
+
+
+
+
+
+
+
+
+

+ Chapter 30. KDE + Frameworks 6 +

+
+
+
+
+
+
+
+

+ KDE Frameworks 6 + Pre-installation Configuration +

+
+
+
+
+

+ KF6 can be installed in /usr or + /opt/kf6. The BLFS editors + recommend the latter in the BLFS environment. +

+
+

+ Installing in /usr +

+

+ One option is to install KDE + Frameworks into the /usr + hierarchy. This creates a simpler setup but makes it more + difficult to try multiple versions of KDE Frameworks. +

+
export KF6_PREFIX=/usr
+

+ It is a good idea to add the following variables to your + system or personal profiles: +

+
cat >> /etc/profile.d/qt6.sh << "EOF"
+# Begin kf6 extension for /etc/profile.d/qt6.sh
+
+pathappend /usr/lib/plugins        QT_PLUGIN_PATH
+pathappend $QT6DIR/lib/plugins     QT_PLUGIN_PATH
+
+pathappend /usr/lib/qt6/qml        QML2_IMPORT_PATH
+pathappend $QT6DIR/lib/qml         QML2_IMPORT_PATH
+
+# End extension for /etc/profile.d/qt6.sh
+EOF
+
+cat > /etc/profile.d/kf6.sh << "EOF"
+# Begin /etc/profile.d/kf6.sh
+
+export KF6_PREFIX=/usr
+
+# End /etc/profile.d/kf6.sh
+EOF
+
+

+ Note +

+

+ If qt6 was installed in + /usr, the $QT6DIR/lib/ portions of the above paths + may need to be changed to $QT6DIR/lib/qt6/. +

+
+

+ Additionally, if Sudo-1.9.17p2 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 += KF6_PREFIX
+EOF
+
+
+

+ Installing in /opt +

+

+ A method of building multiple versions installs KDE Frameworks in the /opt hierarchy: +

+
export KF6_PREFIX=/opt/kf6
+

+ If you are not installing KDE + Frameworks 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/kf6.sh << "EOF"
+# Begin /etc/profile.d/kf6.sh
+
+export KF6_PREFIX=/opt/kf6
+
+pathappend $KF6_PREFIX/bin              PATH
+pathappend $KF6_PREFIX/lib/pkgconfig    PKG_CONFIG_PATH
+
+pathappend $KF6_PREFIX/etc/xdg          XDG_CONFIG_DIRS
+pathappend $KF6_PREFIX/share            XDG_DATA_DIRS
+
+pathappend $KF6_PREFIX/lib/plugins      QT_PLUGIN_PATH
+pathappend $KF6_PREFIX/lib/plugins/kcms QT_PLUGIN_PATH
+
+pathappend $KF6_PREFIX/lib/qml          QML2_IMPORT_PATH
+
+pathappend $KF6_PREFIX/lib/python3.13/site-packages PYTHONPATH
+
+pathappend $KF6_PREFIX/include          CPLUS_INCLUDE_PATH
+
+pathappend $KF6_PREFIX/lib/gtk-3.0      GTK_PATH
+# End /etc/profile.d/kf6.sh
+EOF
+
+cat >> /etc/profile.d/qt6.sh << "EOF"
+# Begin Qt6 changes for KF6
+
+pathappend /usr/lib/plugins            QT_PLUGIN_PATH
+pathappend $QT6DIR/plugins             QT_PLUGIN_PATH
+pathappend $QT6DIR/qml                 QML2_IMPORT_PATH
+
+# End Qt6 changes for KF6
+EOF
+

+ Expand your /etc/ld.so.conf + file: +

+
cat >> /etc/ld.so.conf << "EOF"
+# Begin KF6 addition
+
+/opt/kf6/lib
+
+# End KF6 addition
+EOF
+

+ Several KDE Frameworks and + Plasma packages install + files into D-Bus and + Polkit directories. When + installing KDE Frameworks in + a location other than /usr, + D-Bus and Polkit 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           $KF6_PREFIX/{etc,share} &&
+ln -sfv /etc/dbus-1         $KF6_PREFIX/etc         &&
+ln -sfv /usr/share/dbus-1   $KF6_PREFIX/share       &&
+ln -sfv /usr/share/polkit-1 $KF6_PREFIX/share
+

+ 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.18. + Run the following commands as the root user: +

+
install -v -dm755                $KF6_PREFIX/share/icons &&
+ln -sfv /usr/share/icons/hicolor $KF6_PREFIX/share/icons
+
+

+ Tip +

+

+ Sometimes, the installation paths are hardcoded into + installed files. This is the reason why /opt/kf6 is used as installation prefix + instead of /opt/kf6-6.17.0. + After installing KDE + Frameworks, you may rename the directory and create + a symlink: +

+
mv /opt/kf6{,-6.17.0}
+ln -sfv kf6-6.17.0 /opt/kf6
+

+ Later on, you may want to install other versions of + KDE Frameworks. To do + that, just remove the symlink and use /opt/kf6 as the prefix again. Which + version of KDE Frameworks + you use depends only on where the symlink points. No other + reconfiguration will be needed. +

+
+
+
+
+
+
+

+ Building + KDE Frameworks 6.17.0 (KF6) +

+
+
+
+
+

+ KDE Frameworks is a collection of libraries based on top of Qt6 + and QML derived from the previous KDE libraries. They can be + used independent of the KDE Display Environment (Plasma 6). +

+

+ This package is known to build and work properly using an LFS + 12.4 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/6.17 +

    +
  • +
  • +

    + Download MD5 sum: See Below +

    +
  • +
  • +

    + Download size: 109 MB +

    +
  • +
  • +

    + Estimated disk space required: 2.9 GB (191 MB installed) +

    +
  • +
  • +

    + Estimated build time: 13 SBU (using parallelism=8) +

    +
  • +
+
+

+ KF6 + Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0, + breeze-icons-6.17.0, docbook-xml-4.5, + docbook-xsl-nons-1.79.2, + libcanberra-0.30, libgcrypt-1.11.2, + libical-3.0.20, libxslt-1.1.43, lmdb-0.9.33, + qca-2.3.10, + libqrencode-4.1.1, plasma-wayland-protocols-1.18.0, + PyYAML-6.0.2, shared-mime-info-2.4, URI-5.32, and + Wget-1.25.0 (required to download the + packages) +

+
+ Recommended +
+ + +
+ Optional +
+

+ BlueZ-5.83 + (needed to build Bluez-Qt) and Datamatrix (deemed + recommended for Prison by upstream) +

+
+ Runtime dependency for + FrameworkIntegration +
+

+ Noto + fonts +

+
+ Additional recommended dependencies + for kapidox +
+ +
+ Additional image formats support in + KImageFormats +
+

+ libavif-1.3.0, libjxl-0.11.1, libraw-0.21.4, + libheif, OpenEXR +

+
+ Optional dependencies for Solid +
+

+ UDisks-2.10.2, UPower-1.90.9 and media-player-info + (runtime) +

+
+ Optional dependency for KWallet +
+

+ gpgmepp-2.0.0 +

+
+ Optional dependencies for kcoreaddons +
+

+ Shiboken6 and + PySide6 +

+
+ Optional dictionary backends for + Sonnet +
+

+ Hspell + and Hunspell +

+
+

+ 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/6.17/
+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-6.17.0.md5 << "EOF"
+82423c1b42100b5b776c8fecdc042a40  attica-6.17.0.tar.xz
+#c6c6e39f1bba551a21401cd5fbba1c1a  extra-cmake-modules-6.17.0.tar.xz
+8a59548faa1778cef7a6ad3395490ed2  kapidox-6.17.0.tar.xz
+7ac1e1b5d4be693f208381b4fa704965  karchive-6.17.0.tar.xz
+77d7969cda44acc3c679f230d2a82f9d  kcodecs-6.17.0.tar.xz
+51d38c6aec7f6af07bd0fff8c96b3505  kconfig-6.17.0.tar.xz
+0e497f3da6780a81eebadd22c856bc00  kcoreaddons-6.17.0.tar.xz
+4ae23e5cba7f547e5202e5eeb1842f49  kdbusaddons-6.17.0.tar.xz
+cbd3e5128e0cdcdb8096d54579601bb7  kdnssd-6.17.0.tar.xz
+f33a5c69a7649ffba69a1aa52feaf649  kguiaddons-6.17.0.tar.xz
+4c75596dc00ad12e9a80bf7798d9f843  ki18n-6.17.0.tar.xz
+e86f50568a3303f2542db2b4fb5183db  kidletime-6.17.0.tar.xz
+4b291a60f6374f96e2cf99a38ddb5eb9  kimageformats-6.17.0.tar.xz
+4aca52e11e671da59d87c24de5206055  kitemmodels-6.17.0.tar.xz
+e01dc3235328a28275f9b6f30d915a60  kitemviews-6.17.0.tar.xz
+c1afe10db53a7f061364bb8be10fc451  kplotting-6.17.0.tar.xz
+238a7cb973629f9d6207fbd80e3a2a43  kwidgetsaddons-6.17.0.tar.xz
+9a8e56599a0bfa0fd5ca8f52c04dd410  kwindowsystem-6.17.0.tar.xz
+a999ecf34d2a08ddf9de8d1ef6b00930  networkmanager-qt-6.17.0.tar.xz
+8c8239af3e50c7ae75c51292e077307d  solid-6.17.0.tar.xz
+38b1c0354ca13efb9378c9a9f7ca6d4c  sonnet-6.17.0.tar.xz
+1dea5634f166937e9657defd8a1c435a  threadweaver-6.17.0.tar.xz
+c1c4bdcd93a64b424938efd31994b391  kauth-6.17.0.tar.xz
+164f867d80ea9d511d120a2316e2d083  kcompletion-6.17.0.tar.xz
+9bbc4d738ffcdb2980b7d03483f0ecaf  kcrash-6.17.0.tar.xz
+318b37f959efb7b8414fd6f225fc6180  kdoctools-6.17.0.tar.xz
+b53d98281af63012844e42f4d2340e72  kpty-6.17.0.tar.xz
+81260390604d84f30fc7e397f2a71377  kunitconversion-6.17.0.tar.xz
+e178d79bf39b6eca3c5a43904e1e6812  kcolorscheme-6.17.0.tar.xz
+288b6d923b1e0e470902226cb0150aef  kconfigwidgets-6.17.0.tar.xz
+bdec608acd77463bc13be706143e1ad1  kservice-6.17.0.tar.xz
+bc8d0c1a7915679d265996c3f8cf022d  kglobalaccel-6.17.0.tar.xz
+71aced57987eecd1a54cd78c4acf0997  kpackage-6.17.0.tar.xz
+e4e7130dbc3df657419a41b1716fae88  kdesu-6.17.0.tar.xz
+973fc15005119c8206deac1e7c950928  kiconthemes-6.17.0.tar.xz
+7d2f8797d6a7d01481ccaa5853853f78  knotifications-6.17.0.tar.xz
+1281a859bbade7b6d0f4062be5801503  kjobwidgets-6.17.0.tar.xz
+a7241f89698eef4da4476c5f8e942532  ktextwidgets-6.17.0.tar.xz
+f081efe2093e1808ec936a1504aa921b  kxmlgui-6.17.0.tar.xz
+d9e0be9f6ab3a826d46bd69fab5df3cc  kbookmarks-6.17.0.tar.xz
+be6b34cd7395ce1bfbb026202a0fb049  kwallet-6.17.0.tar.xz
+ade7d92808bcc51303aac1e3d2fac1ea  kded-6.17.0.tar.xz
+6f2caa8f5cc4c473c14024ef33292aa6  kio-6.17.0.tar.xz
+af1144caf162a8e7183178b9697d4b76  kdeclarative-6.17.0.tar.xz
+75a1a1af5647ef5ae2a4800bd5d0436e  kcmutils-6.17.0.tar.xz
+9c3167fb2f81a610149d0baa9086cd03  kirigami-6.17.0.tar.xz
+eefe9fd856c0d90c8e70c36cf8d71b0b  syndication-6.17.0.tar.xz
+3315f351aac4fd66d1be6783d25f767b  knewstuff-6.17.0.tar.xz
+58f3a8d01b2471487b5e1fee5d7428d7  frameworkintegration-6.17.0.tar.xz
+b58edde459f7df84e6ac15b8c0d8a0b3  kparts-6.17.0.tar.xz
+c9b97c254e572760633966017640447d  syntax-highlighting-6.17.0.tar.xz
+00047f9c145d242212cf7e0bdbdd11c5  ktexteditor-6.17.0.tar.xz
+c155065874518609dd0ca9159e03ee2f  modemmanager-qt-6.17.0.tar.xz
+cc4c525dff89bdb2f65e3130df58e280  kcontacts-6.17.0.tar.xz
+ddbcacdc97fcac94fc23624f8d86b3cd  kpeople-6.17.0.tar.xz
+cff7e94d07346f8fe0863ab4140965d1  bluez-qt-6.17.0.tar.xz
+07374ffc535818d174f3b2a477935c74  kfilemetadata-6.17.0.tar.xz
+5f352802358f0106418a233379e6f67a  baloo-6.17.0.tar.xz
+#9aaed8b97970adf982f732e528050aca  breeze-icons-6.17.0.tar.xz
+3c04c64a88d1273856b9dfca5b31e787  krunner-6.17.0.tar.xz
+051d08b46b47d9f79266f8c54f67ddc3  prison-6.17.0.tar.xz
+1fc84041ca6959adf18aeb6f7f16519e  qqc2-desktop-style-6.17.0.tar.xz
+6560b5d9e25758afc0c72a35374d6f8f  kholidays-6.17.0.tar.xz
+6c40e376dae0209229739c9e92259964  purpose-6.17.0.tar.xz
+60e2beddf625dd29b06ecb9966968824  kcalendarcore-6.17.0.tar.xz
+76a127b6826b69f24a491c911d5f1731  kquickcharts-6.17.0.tar.xz
+dad770e5aa4ad6b7c83625488c119619  knotifyconfig-6.17.0.tar.xz
+2ef222252c3e1f9f131fe6d89ada580e  kdav-6.17.0.tar.xz
+e60223dddf9812597933d37c9ced0003  kstatusnotifieritem-6.17.0.tar.xz
+bd54e23c136fcb53ec866c476f1919c4  ksvg-6.17.0.tar.xz
+242303b5dcdb5d4eab00c4d16980aec0  ktexttemplate-6.17.0.tar.xz
+56e69133a11b2e67355d4869959be9ba  kuserfeedback-6.17.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. +

    +
  • +
  • +

    + This icon package is covered separately at breeze-icons-6.17.0. It is + separate to allow users that need these icons but do + not need the full set of KF6 packages (e.g. LXQt-Post-Install) + to more easily install them. +

    +
  • +
+
+
+
+

+ 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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/kf6 either as a regular directory + or a symbolic link, it should be reinitialized (as + root): +

+
mv -v /opt/kf6 /opt/kf6.old                         &&
+install -v -dm755           $KF6_PREFIX/{etc,share} &&
+ln -sfv /etc/dbus-1         $KF6_PREFIX/etc         &&
+ln -sfv /usr/share/dbus-1   $KF6_PREFIX/share       &&
+ln -sfv /usr/share/polkit-1 $KF6_PREFIX/share
+
+

+ 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|-6.*$||') # Isolate package name
+
+    tar -xf $file
+    pushd $packagedir
+
+      # kapidox is a python module
+      case $name in
+        kapidox)
+          pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
+          as_root pip3 install --no-index --find-links dist --no-user kapidox
+          popd
+          rm -rf $packagedir
+          continue
+          ;;
+      esac
+
+      mkdir build
+      cd    build
+
+      cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+            -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+            -D CMAKE_PREFIX_PATH=$QT6DIR        \
+            -D CMAKE_SKIP_INSTALL_RPATH=ON      \
+            -D CMAKE_BUILD_TYPE=Release         \
+            -D BUILD_TESTING=OFF                \
+            -D BUILD_PYTHON_BINDINGS=OFF        \
+            -W no-dev ..
+      make
+      as_root make install
+    popd
+
+  as_root rm -rf $packagedir
+  as_root /sbin/ldconfig
+
+done < frameworks-6.17.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. +

+
+

+ Useless systemd units have been installed in $KF6_PREFIX/lib. Remove them now (as + root): +

+
rm -rf $KF6_PREFIX/lib/systemd
+

+ 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/kf6 /opt/kf6-6.17.0
+ln -sfvn kf6-6.17.0 /opt/kf6
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_PREFIX_PATH=$QT6DIR: This switch is used to + allow cmake to find the proper Qt libraries. +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + apply higher level of the compiler optimizations. +

+

+ -D BUILD_TESTING=OFF: + This switch is used to prevent building test programs and + libraries that are of no use to an end user. +

+

+ -D + BUILD_PYTHON_BINDINGS=OFF: This switch is used to + prevent building Python modules that require external + optional dependencies. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + balooctl, baloo_file, + baloo_file_extractor, baloosearch, balooshow, checkXML6, + depdiagram-generate, depdiagram-generate-all, + depdiagram-prepare, desktoptojson, gentrigrams, + kactivities-cli, kapidox_generate, + kate-syntax-highlighter, kbuildsycoca6, kcookiejar6, + kdebugdialog6, kded6, kdeinit6, kdeinit6_shutdown, + kdeinit6_wrapper, kf6-config, kf6kross, + kgendesignerplugin, kglobalaccel6, kiconfinder6, kjs6, + kjscmd6, kjsconsole, knewstuff-dialog, + kpackagelauncherqml, kpackagetool6, kquitapp6, + kreadconfig6, kshell6, ktelnetservice6, ktrash6, + kwalletd6, kwallet-query, kwrapper6, kwriteconfig6, + meinproc6, parsetrigrams, plasmapkg2, preparetips6, + protocoltojson, and solid-hardware6 +
+
+ Installed Libraries: + libkdeinit6_klauncher.so, + libKF6Activities.so, libKF6ActivitiesStats.so, + libKF6Archive.so, libKF6Attica.so, libKF6AuthCore.so, + libKF6Auth.so, libKF6Baloo.so, libKF6BluezQt.so, + libKF6Bookmarks.so, libKF6CalendarCore.so, + libKF6CalendarEvents.so, libKF6Codecs.so, + libKF6Completion.so, libKF6ConfigCore.so, + libKF6ConfigGui.so, libKF6ConfigWidgets.so, + libKF6Contacts.so, libKF6CoreAddons.so, libKF6Crash.so, + libKF6DAV.so, libKF6DBusAddons.so, libKF6Declarative.so, + libKF6DNSSD.so, libKF6DocTools.so, libKF6Emoticons.so, + libKF6FileMetaData.so, libKF6GlobalAccel.so, + libKF6GuiAddons.so, libKF6Holidays.so, libKF6I18n.so, + libKF6IconThemes.so, libKF6IdleTime.so, + libKF6ItemModels.so, libKF6ItemViews.so, + libKF6JobWidgets.so, libKF6JSApi.so, libKF6JsEmbed.so, + libKF6JS.so, libKF6KCMUtils.so, libKF6KDELibs4Support.so, + libKF6KHtml.so, libKF6KIOCore.so, + libKF6KIOFileWidgets.so, libKF6KIOGui.so, + libKF6KIONTLM.so, libKF6KIOWidgets.so, + libKF6Kirigami2.so, libKF6KrossCore.so, libKF6KrossUi.so, + libKF6MediaPlayer.so, libKF6NetworkManagerQt.so, + libKF6NewStuffCore.so, libKF6NewStuff.so, + libKF6Notifications.so, libKF6NotifyConfig.so, + libKF6Package.so, libKF6Parts.so, libKF6PeopleBackend.so, + libKF6People.so, libKF6PeopleWidgets.so, + libKF6PlasmaQuick.so, libKF6Plasma.so, libKF6Plotting.so, + libKF6Prison.so, libKF6Pty.so, libKF6Purpose.so, + libKF6PurposeWidgets.so, libKF6QuickAddons.so, + libKF6Runner.so, libKF6Service.so, libKF6Solid.so, + libKF6SonnetCore.so, libKF6SonnetUi.so, libKF6Style.so, + libKF6Su.so, libKF6SyntaxHighlighting.so, + libKF6TextEditor.so, libKF6TextWidgets.so, + libKF6ThreadWeaver.so, libKF6UnitConversion.so, + libKF6Wallet.so, libKF6WaylandClient.so, + libKF6WaylandServer.so, libKF6WidgetsAddons.so, + libKF6WindowSystem.so, libKF6XmlGui.so, + libKF6XmlRpcClient.so, and libkwalletbackend6.so +
+
+ Installed Directories: + /opt/kf6 (symlink to + /opt/kf6-6.17.0) if installing in /opt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ checkXML6 +

+
+

+ 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 +

+
+

+ kbuildsycoca6 +

+
+

+ rebuilds the KService desktop file system + configuration cache +

+
+

+ kcookiejar6 +

+
+

+ is a command line interface to the HTTP cookie + store used by KDE, a D-BUS service to + store/retrieve/clean cookies +

+
+

+ kded6 +

+
+

+ consolidates several small services in one process +

+
+

+ kdeinit6 +

+
+

+ is a process launcher somewhat similar to the + famous init used for booting UNIX +

+
+

+ kf6-config +

+
+

+ is a command line program used to retrieve + information about KDE installation or user paths +

+
+

+ kf6kross +

+
+

+ executes kross scripts written in KDE Javascript, + Python, Ruby, Java and Falcon +

+
+

+ kgendesignerplugin +

+
+

+ generates widget plugins for Qt(TM) Designer +

+
+

+ kglobalaccel6 +

+
+

+ is a daemon use to register the key bindings and + for getting notified when the action triggered +

+
+

+ kjs6 +

+
+

+ is KDE ECMAScript/JavaScript engine +

+
+

+ kjscmd6 +

+
+

+ is a tool for launching KJSEmbed scripts from the + command line +

+
+

+ kjsconsole +

+
+

+ is a console for kjs6 +

+
+

+ kpackagelauncherqml +

+
+

+ is a commandline tool for launching kpackage QML + application +

+
+

+ kpackagetool6 +

+
+

+ is a command line kpackage tool +

+
+

+ kreadconfig6 +

+
+

+ is a command line tool to retrieve values from KDE + configuration files +

+
+

+ kshell6 +

+
+

+ start applications via kdeinit +

+
+

+ ktelnetservice6 +

+
+

+ is a telnet service +

+
+

+ ktrash6 +

+
+

+ is a helper program to handle the KDE trash can +

+
+

+ kwalletd6 +

+
+

+ is the wallet manager daemon +

+
+

+ kwriteconfig6 +

+
+

+ is a command line tool to write values in KDE + configuration files +

+
+

+ meinproc6 +

+
+

+ converts DocBook files to HTML +

+
+

+ plasmapkg2 +

+
+

+ is a tool to install, list, remove Plasma packages +

+
+

+ preparetips6 +

+
+

+ is a script to extract the text from a tips file +

+
+

+ solid-hardware6 +

+
+

+ is a command line tool to investigate available + devices +

+
+
+
+
+
+
+
+
+

+ Chapter 31. KDE + Frameworks 6 Based Applications +

+
+
+
+
+
+
+
+

+ ark-25.08.0 +

+
+
+
+
+
+

+ Introduction to Ark +

+

+ The Ark package is a KF6 + 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Ark + Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and libarchive-3.8.1 +

+
+ Recommended +
+ +
+
+

+ Installation of Ark +

+

+ Install Ark by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + $KF6_PREFIX/lib/plugins/kerfuffle + and $KF6_PREFIX/share/doc/HTML/*/ark +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ ark +

+
+

+ is a KF6-based Archive Manager +

+
+
+
+
+
+
+
+

+ dolphin-25.08.0 +

+
+
+
+
+
+

+ Introduction to dolphin +

+

+ The dolphin package is a KF6 + file manager. +

+

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

+

+ Package Information +

+
+ +
+

+ dolphin Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and phonon-4.12.0 +

+
+ Optional +
+

+ baloo-widgets + (for the metadata features of Dolphin) and packagekit-qt +

+
+ Optional (Runtime) +
+

+ kio-extras-25.08.0 (for mounting SMB + shares) +

+
+
+

+ Installation of dolphin +

+

+ Install dolphin by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + dolphin +
+
+ Installed Libraries: + libdolphinvcs.so and + libdolphinprivate.so +
+
+ Installed Directories: + $KF6_PREFIX/include/Dolphin, + $KF6_PREFIX/lib/cmake/DolphinVcs, + $KF6_PREFIX/lib/plugins/dolphin, and + $KF6_PREFIX/share/doc/HTML/*/dolphin +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ dolphin +

+
+

+ is a KF6-based file manager +

+
+
+
+
+
+
+
+

+ dolphin-plugins-25.08.0 +

+
+
+
+
+
+

+ Introduction to dolphin-plugins +

+

+ The dolphin-plugins package + provides extra plugins for the dolphin file manager. +

+

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

+

+ Package Information +

+
+ +
+

+ dolphin-plugins Dependencies +

+
+ Required +
+

+ dolphin-25.08.0 +

+
+
+

+ Installation of dolphin-plugins +

+

+ Install dolphin-plugins by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + In + $KF6_PREFIX/lib/plugins/dolphin/vcs/: + fileviewsvnplugin.so, fileviewgitplugin.so, + fileviewbazaarplugin.so, fileviewdropboxplugin.so, + fileviewhgplugin.so, makefileactions.so, and + mountisoaction.so +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ kdenlive-25.08.0 +

+
+
+
+
+
+

+ Introduction to Kdenlive +

+

+ The Kdenlive package is a + KF6 based video editor. +

+

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

+

+ Package Information +

+
+ +
+

+ Kdenlive Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0, mlt-7.32.0, and v4l-utils-1.30.1 + (runtime) +

+
+ Recommended +
+ +
+
+

+ Installation of Kdenlive +

+

+ Install Kdenlive by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + $KF6_PREFIX/share/doc/HTML/*/kdenlive and + $KF6_PREFIX/share/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 +

+
+
+
+
+
+
+
+

+ KMix-25.08.0 +

+
+
+
+
+
+

+ Introduction to KMix +

+

+ The KMix package contains a + KF6 based Sound Mixer application. +

+

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

+

+ Package Information +

+
+ +
+

+ KMix + Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ libcanberra-0.30 and PulseAudio-17.0 +

+
+
+

+ Installation of KMix +

+

+ Install KMix by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + $KF6_PREFIX/share/kmix and + $KF6_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 +

+
+
+
+
+
+
+
+

+ khelpcenter-25.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Khelpcenter Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0, libxml2-2.14.5, and xapian-1.4.29 +

+
+ Recommended +
+ +
+ Optional (Runtime) +
+

+ kio-extras-25.08.0 (for displaying + man pages and info pages) +

+
+
+

+ Installation of Khelpcenter +

+

+ Install khelpcenter by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + khelpcenter +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + $KF6_PREFIX/share/khelpcenter, + $KF6_PREFIX/share/doc/HTML/*/{khelpcenter,fundamentals,onlinehelp} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ khelpcenter +

+
+

+ is the help viewer for KDE applications +

+
+
+
+
+
+
+
+

+ Konsole-25.08.0 +

+
+
+
+
+
+

+ Introduction to Konsole +

+

+ The Konsole package is a KF6 + based terminal emulator. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Konsole Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+
+

+ 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-adjust_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 -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + libkdeinit6_konsole.so and + libkonsoleprivate.so +
+
+ Installed Directories: + $KF6_PREFIX/share/doc/HTML/*/konsole, + $KF6_PREFIX/share/konsole, and + $KF6_PREFIX/share/kxmlgui6/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 +

+
+
+
+
+
+
+
+

+ konversation-25.08.0 +

+
+
+
+
+
+

+ Introduction to konversation +

+

+ The konversation package is + a KF6 based IRC client. +

+

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

+

+ Package Information +

+
+ +
+

+ konversation Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+
+

+ Installation of konversation +

+

+ Install konversation by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + konversation +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + $KF6_PREFIX/share/doc/HTML/*/konversation, and + $KF6_PREFIX/share/konversation +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ konversation +

+
+

+ is an IRC client +

+
+
+
+
+
+
+
+

+ libkexiv2-25.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libkexiv2 Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and Exiv2-0.28.5 +

+
+
+

+ Installation of libkexiv2 +

+

+ Install libkexiv2 by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_WITH_QT6=ON                \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKExiv2Qt6.so +
+
+ Installed Directories: + $KF6_PREFIX/include/KExiv2Qt6 and + $KF6_PREFIX/lib/cmake/KExiv2Qt6 +
+
+
+
+
+
+
+
+

+ plasma-activities-6.4.4 +

+
+
+
+
+
+

+ Introduction to plasma-activities-6.4.4 +

+

+ The plasma-activities-6.4.4 + application provides core components for KDE Activities. It + is normally built with Plasma-6.4.4 but is included here + because it is needed for okular-25.08.0 and kio-extras-25.08.0 if Plasma-6.4.4 is not yet built. +

+

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

+

+ Package Information +

+
+ +
+

+ plasma-activities Dependencies +

+
+ Required +
+

+ Boost-1.89.0 and KDE + Frameworks-6.17.0 +

+
+
+

+ Installation of plasma-activities +

+

+ Install plasma-activities by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + plasma-activities-cli6 +
+
+ Installed Libraries: + libPlasmaActivities.so +
+
+ Installed Directories: + $KF6_PREFIX/include/PlasmaActivities, + $KF6_PREFIX/lib/cmake/PlasmaActivities, and + $KF6_PREFIX/share/share/qlogging-categories6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ plasma-activities-cli6 +

+
+

+ is the activity manager for KDE applications +

+
+
+
+
+
+
+
+

+ plasma-activities-stats-6.4.4 +

+
+
+
+
+
+

+ Introduction to plasma-activities-stats-6.4.4 +

+

+ The plasma-activities-stats-6.4.4 library + provides access to the usage data collected by the KDE + Activities system. It is normally built with Plasma-6.4.4 + but is included here because it is needed for kio-extras-25.08.0. +

+

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

+

+ Package Information +

+
+ +
+

+ plasma-activities Dependencies +

+
+ Required +
+

+ plasma-activities-6.4.4 +

+
+
+

+ Installation of plasma-activities-stats +

+

+ Install plasma-activities-stats by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Libraries: + libPlasmaActivitiesStats.so +
+
+ Installed Directories: + $KF6_PREFIX/include/PlasmaActivitiesStats and + $KF6_PREFIX/lib/cmake/PlasmaActivitiesStats +
+
+
+
+
+
+
+
+

+ kio-extras-25.08.0 +

+
+
+
+
+
+

+ Introduction to kio-extras +

+

+ The kio-extras package + contains additional components to increase the functionality + of the KDE resource and network access abstractions. +

+

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

+

+ Package Information +

+
+ +
+

+ kio-extras Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0, kdsoap-ws-discovery-client-0.4.0, + libproxy-0.5.10, plasma-activities-stats-6.4.4, + and qcoro-0.12.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ libtirpc-1.3.6, Samba-4.22.4, taglib-2.1.1, + libappimage, + libimobiledevice, + libmtp, libplist, + libssh, + and OpenEXR +

+
+
+

+ Installation of kio-extras +

+

+ Install kio-extras by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libkioarchive6.so and 33 + plugins +
+
+ Installed Directories: + $KF6_PREFIX/include/KioArchive6, + $KF6_PREFIX/lib/cmake/KioArchive6, and + $KF6_PREFIX/share/doc/HTML/en/kioworker6 +
+
+
+
+
+
+
+
+

+ okular-25.08.0 +

+
+
+
+
+
+

+ Introduction to Okular +

+

+ Okular is a document viewer for KDE. It can view documents of + many types including PDF, PostScript, TIFF, DjVu, DVI, XPS, + and ePub. +

+

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

+

+ Package Information +

+
+ +
+

+ Okular Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and plasma-activities-6.4.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ qca-2.3.10, discount, + DjVuLibre, libspectre, + libepub, + and LibZip +

+
+
+

+ Installation of Okular +

+

+ Install Okular by running + the following commands: +

+
+

+ Note +

+

+ If any of the optional dependencies are installed, remove + the associated reference in the SKIP_OPTIONAL environment + variable. +

+
+
mkdir build &&
+cd    build &&
+
+SKIP_OPTIONAL='Discount;DjVuLibre;EPub;LibSpectre;LibZip'
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -D FORCE_NOT_REQUIRED_DEPENDENCIES="$SKIP_OPTIONAL" \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + okular +
+
+ Installed Library: + Okular6Core.so +
+
+ Installed Directories: + $KF6_PREFIX/include/okular, + $KF6_PREFIX/lib/cmake/Okular6, + $KF6_PREFIX/lib/plugins/okular, $KF6_PREFIX/share/okular, + and $KF6_PREFIX/share/doc/HTML/*/okular +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ okular +

+
+

+ is a document viewer +

+
+
+
+
+
+
+
+

+ libkdcraw-25.08.0 +

+
+
+
+
+
+

+ Introduction to libkdcraw +

+

+ Libkdcraw is a KDE wrapper + around the libraw-0.21.4 library for manipulating + image metadata. +

+

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

+

+ Package Information +

+
+ +
+

+ libkdcraw Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and libraw-0.21.4 +

+
+
+

+ Installation of libkdcraw +

+

+ Install libkdcraw by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -D QT_MAJOR_VERSION=6               \
+      -W no-dev .. &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKDcrawQt6.so +
+
+ Installed Directories: + $KF6_PREFIX/include/KDcrawQt6 and + $KF6_PREFIX/lib/cmake/KDcrawQt6 +
+
+
+
+
+
+
+
+

+ gwenview-25.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gwenview Dependencies +

+
+ Required +
+

+ Exiv2-0.28.5, kimageannotator-0.7.1, KDE + Frameworks-6.17.0, and Little CMS-2.17 +

+
+ Recommended +
+ +
+ Optional +
+

+ plasma-activities-6.4.4 and + CFitsio +

+
+
+

+ Installation of Gwenview +

+

+ Install Gwenview by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + $KF6_PREFIX/share/{gwenview,doc/HTML/*/gwenview} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ gwenview +

+
+

+ is the KDE image viewer +

+
+

+ gwenview_importer +

+
+

+ is a Photo importer +

+
+
+
+
+
+
+
+

+ libkcddb-25.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libkcddb Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+ Recommended +
+ +
+
+

+ Installation of libkcddb +

+

+ Install libkcddb by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -D QT_MAJOR_VERSION=6               \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libKCddb6.so +
+
+ Installed Directories: + $KF6_PREFIX/include/KCddb6 + $KF6_PREFIX/lib/cmake/KCddb6 + $KF6_PREFIX/share/doc/HTML/*/kcontrol +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libKCddb6.so +

+
+

+ contains functions used to retrieve audio CD meta + data from the internet +

+
+
+
+
+
+
+
+

+ k3b-25.08.0 +

+
+
+
+
+
+

+ Introduction to K3b +

+

+ The K3b package contains a + KF6-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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ K3b + Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0, libkcddb-25.08.0, libsamplerate-0.2.2, and shared-mime-info-2.4 +

+

+ The CD/DVD drive is detected at run time using UDisks-2.10.2, which must therefore be + installed before running k3b. +

+
+ Recommended +
+ + +
+ Optional Runtime +
+

+ FFmpeg-7.1.1 +

+
+ Optional +
+

+ FLAC-1.5.0, LAME-3.100, libmad-0.15.1b, + libsndfile-1.2.2, libvorbis-1.3.7, and Musepack (libmpcdec) +

+
+
+

+ Installation of K3b +

+

+ Install K3b by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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: + $KF6_PREFIX/share/k3b and + $KF6_PREFIX/share/doc/HTML/*/k3b +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ k3b +

+
+

+ is the graphical CD/DVD program +

+
+
+
+
+
+
+
+

+ Further KDE + packages +

+
+
+
+
+

+ This chapter did not provide instructions for all of the + available packages in the KDE Software Compilation (KDE Gear). + 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 KDE6 + servers at https://download.kde.org/stable/release-service/25.08.0/src. +

+

+ Editor Notes: + https://wiki.linuxfromscratch.org/blfs/wiki/Further_KDE_Packages +

+

+ Some additional packages worth mentioning are: +

+
+
    +
  • +

    + Juk: A lightweight music player. +

    +
  • +
  • +

    + Dragon: A video player. +

    +
  • +
  • +

    + Kcalc: A scientific calculator. +

    +
  • +
  • +

    + Kwalletmanager: A credentials management application. +

    +
  • +
  • +

    + Marble: A global map program. +

    +
  • +
  • +

    + Spectacle: a screenshot 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 -W no-dev -LH .
+

+ Note that this creates some files in the top of the source + directory, so that it is better to reextract a clean source + before proceeding to the build. +

+
+

+ Most of these packages can be built with the standard KDE6 + instructions: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev .. &&
+make
+

+ And as the root user: +

+
make install
+
+
+
+
+
+

+ Chapter 32. KDE + Plasma +

+
+
+
+
+

+ KDE Plasma is a desktop environment built using KDE Frameworks + and QML which runs on top of a fully hardware accelerated + graphics stack using Qt, QtQuick, and an OpenGL(-ES) scenegraph. +

+

+ No additional configuration is needed before building the KDE + Plasma because it uses the same configuration that KDE Frameworks + uses. +

+
+
+
+

+ kirigami-addons-1.9.0 +

+
+
+
+
+
+

+ Introduction to kirigami-addons +

+

+ This package provides add-on qml files for the Kirigami + framework. +

+

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

+

+ Package Information +

+
+ +
+

+ kirigami-addons Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 +

+
+ Recommended +
+ +
+
+

+ Installation of kirigami-addons +

+

+ Install kirigami-addons by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+       ..                                 &&
+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: + $KF6_PREFIX/lib/qml/org/kde/kirigamiaddons and + $KF6_PREFIX/lib/cmake/KF6KirigamiAddons +
+
+
+
+
+
+
+
+

+ pulseaudio-qt-1.7.0 +

+
+
+
+
+
+

+ Introduction to pulseaudio-qt +

+

+ This package is a Qt-style wrapper for PulseAudio-17.0. It + allows querying and manipulation of various PulseAudio + objects such as Sinks, Sources and Streams. It does not wrap + the full feature set of libpulse. +

+

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

+

+ Package Information +

+
+ +
+

+ Konsole Dependencies +

+
+ Required +
+

+ KDE + Frameworks-6.17.0 and PulseAudio-17.0 +

+
+
+

+ Installation of pulseaudio-qt +

+

+ Install pulseaudio-qt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_PREFIX_PATH=$QT6DIR        \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON      \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      .. &&
+make
+

+ Now as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libKF6PulseAudioQt.so +
+
+ Installed Directories: + $KF6_PREFIX/lib/cmake/KF6PulseAudioQt and + $KF6_PREFIX/include/KF6/KF6PulseAudioQt +
+
+
+
+
+
+
+
+

+ Building + Plasma +

+
+
+
+
+

+ KDE Plasma is a collection of packages based on top of KDE + Frameworks and QML. They implement the KDE Display Environment + (Plasma). +

+

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

+

+ The instructions below build all of the Plasma packages in one + step by using a bash script. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://download.kde.org/stable/plasma/6.4.4 +

    +
  • +
  • +

    + Download MD5 sum: See Below +

    +
  • +
  • +

    + Download size: 292 MB +

    +
  • +
  • +

    + Estimated disk space required: 2.7 GB (638 MB installed) +

    +
  • +
  • +

    + Estimated build time: 18 SBU (using parallelism=8) +

    +
  • +
+
+

+ Plasma + Dependencies +

+
+ Required +
+

+ Boost-1.89.0, FFmpeg-7.1.1, GTK-3.24.50, KDE + Frameworks-6.17.0, kirigami-addons-1.9.0, + libdisplay-info-0.3.0, libpwquality-1.4.5, libqalculate-5.7.0, libnl-3.11.0, libxcvt-0.1.3, + libxkbcommon-1.11.0, Mesa-25.1.8 built with + Wayland-1.24.0, opencv-4.12.0, phonon-4.12.0, + pipewire-1.4.7, pulseaudio-qt-1.7.0, qca-2.3.10, qcoro-0.12.0, sassc-3.6.2, + taglib-2.1.1, xdotool-3.20211022.1, and Xorg Evdev Driver-2.11.0 +

+
+ Recommended +
+ +
+ Recommended (runtime) +
+ +
+ Optional +
+

+ AppStream-1.0.6 (build with -qt=true), + GLU-9.0.3, + ibus-1.5.32, qtwebengine-6.9.2, + KDevPlatform, libgps, libhybris, + packagekit-qt, + Qapt, + SCIM, and socat (for + pam_kwallet) +

+
+

+ Downloading KDE Plasma +

+

+ The easiest way to get the KDE Plasma packages is to use a + single wget to + fetch them all at once: +

+
url=https://download.kde.org/stable/plasma/6.4.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-6.4.4.md5 << "EOF"
+1e80c73ad404ff95a607f46ec453ac07  kdecoration-6.4.4.tar.xz
+6788dae93c3fb8d3790651c3cc13a459  libkscreen-6.4.4.tar.xz
+f7075d4472969968507a72cb35168dbc  libksysguard-6.4.4.tar.xz
+e45d3b003a98b53f93b027b26038a4d2  breeze-6.4.4.tar.xz
+2d8a7936962ae30177c14f9cad0917ff  breeze-gtk-6.4.4.tar.xz
+57485b21e575b632223946b936a11d35  layer-shell-qt-6.4.4.tar.xz
+1294ad60e08e3d14263c316c5f2123c3  plasma-activities-6.4.4.tar.xz
+69892c484106a65edc8669f9ff07f1de  libplasma-6.4.4.tar.xz
+d2660f748364304a38534ad9f8302f65  kscreenlocker-6.4.4.tar.xz
+5b2aa8e2f826a5537ce018645094bc06  kinfocenter-6.4.4.tar.xz
+2a3cb2bc67a700808ee4de996fbcf7e1  kglobalacceld-6.4.4.tar.xz
+5f2f27d10a309f87a7fcc7abe3f33c7a  kwayland-6.4.4.tar.xz
+b5ce13deed26c030e80078997bcd3f59  aurorae-6.4.4.tar.xz
+29aa486a4c9c03623f06019c4c6f4a6f  kwin-x11-6.4.4.tar.xz
+38bd47faac424693d15e6cbec7bb4f8c  kwin-6.4.4.tar.xz
+c89eed60be47c41acdaab7f7738474d9  plasma5support-6.4.4.tar.xz
+e19f331b7233dfa00c1f9a4dc282aa6d  plasma-activities-stats-6.4.4.tar.xz
+1234acb0cf42bb51fa1e44de15300daf  kpipewire-6.4.4.tar.xz
+e387fc191c75643adf8647115e5b8135  plasma-workspace-6.4.4.tar.xz
+f7955fe53dcfce1d3ee28385fb0460c5  plasma-disks-6.4.4.tar.xz
+359c9fcedc3ee2660a7414c96f6a0888  bluedevil-6.4.4.tar.xz
+8dd8c635342894da4a61dabc5820fce4  kde-gtk-config-6.4.4.tar.xz
+123d1734729b0f6d66c45017d810ff10  kmenuedit-6.4.4.tar.xz
+81cfc86c317b76e66c8fa69bd211580e  kscreen-6.4.4.tar.xz
+2c7b043f2ec05c4b03f210dcedc0b502  kwallet-pam-6.4.4.tar.xz
+5695632187671ca756c4e7185a71195e  kwrited-6.4.4.tar.xz
+1a6dd6488b0125451102045aa8efdc1a  milou-6.4.4.tar.xz
+2bf7e0444338ae3a792ccaf1049466ed  plasma-nm-6.4.4.tar.xz
+00cbf448523569d1ecf799ffe8097961  plasma-pa-6.4.4.tar.xz
+44bcf4f669bfa5dfd9b4a54f6016ba7b  plasma-workspace-wallpapers-6.4.4.tar.xz
+cf1fe247a40af3e6dd5ca2ad53b327d0  polkit-kde-agent-1-6.4.4.tar.xz
+96158610825e79a419a28f45bb809eb9  powerdevil-6.4.4.tar.xz
+714b58e169c5d2e8c80d65ca8e284cff  plasma-desktop-6.4.4.tar.xz
+35d2e17964ddda121f50098c29d4c30d  kgamma-6.4.4.tar.xz
+27a3515f9ae4184b4987c83892d6b74a  ksshaskpass-6.4.4.tar.xz
+#070839c487e9d8229ce8298d77480c8b  plasma-sdk-6.4.4.tar.xz
+b19b0189993f7ebc509d3e24cc1e8aa0  sddm-kcm-6.4.4.tar.xz
+#328b5f55fd21129c9184b7d1b672a0bf  discover-6.4.4.tar.xz
+#3094f57a829def773d0f6ebb8b08f1f6  breeze-grub-6.4.4.tar.xz
+#b3469dba2137b484b193a99fc064be67  breeze-plymouth-6.4.4.tar.xz
+6e15c7a2bb5788b93acebde0318fae83  kactivitymanagerd-6.4.4.tar.xz
+902966727cc9a5ebb4761df12e142c32  plasma-integration-6.4.4.tar.xz
+#53cde99837265125361385ddf6246070  plymouth-kcm-6.4.4.tar.xz
+eaeb0a047ac662cef2ecaf03a336ce91  xdg-desktop-portal-kde-6.4.4.tar.xz
+b2b868b09d36cdbd77d086c3e215947e  drkonqi-6.4.4.tar.xz
+2d2c9bcc3d499fadff6ba8c78e0a78d6  plasma-vault-6.4.4.tar.xz
+#5c043fbaf5c84975c469472cc5880a59  plasma-browser-integration-6.4.4.tar.xz
+7b9720ff5aaccfff5a9dddc2a71e4eb6  kde-cli-tools-6.4.4.tar.xz
+88cf35de0ee8ca3b45474ffaf0d54432  systemsettings-6.4.4.tar.xz
+5e2c2591807a58cf6cdf4e884c3dd4be  plasma-thunderbolt-6.4.4.tar.xz
+#6a9b80fa6e10454556c4528c2510b2f7  plasma-mobile-6.4.4.tar.xz
+#257173def078b51674cd27601828d732  plasma-nano-6.4.4.tar.xz
+3c58fb9253970cb7a651088f423e0d9c  plasma-firewall-6.4.4.tar.xz
+ff6d636282233f101ec9349321cc4e70  plasma-systemmonitor-6.4.4.tar.xz
+3e2a5476e578a309854f7a965bd627a8  qqc2-breeze-style-6.4.4.tar.xz
+9d4579bd5ce554f5d21bfe41a0fe64e6  ksystemstats-6.4.4.tar.xz
+3fcde8974282d0ae737f38a2d5cc4c7e  oxygen-sounds-6.4.4.tar.xz
+88e1e9c59db958a326c8e59769334eae  kdeplasma-addons-6.4.4.tar.xz
+#e2af8aad6f916339a20d79b70434adde  flatpak-kcm-6.4.4.tar.xz
+d6849ab3c3d626217e71ac5c571a0e56  plasma-welcome-6.4.4.tar.xz
+67e934afb009c0cc85b6b5a7818dfc21  ocean-sound-theme-6.4.4.tar.xz
+6a4cc6c6068851e488a85f94efe40959  print-manager-6.4.4.tar.xz
+d66d7c32a5811a172ede92e86d0b050b  wacomtablet-6.4.4.tar.xz
+#6df9d0417921b08811b3b37640f81ae7  kwayland-integration-6.4.4.tar.xz
+#e377c170815f38c88d04fbacc6c2ba46  krdp-6.4.4.tar.xz
+8bcecf5327af741a21af37a93901fd35  oxygen-6.4.4.tar.xz
+#079df59ec207b0c7d9e83fd544c34af9  plasma-dialer-6.4.4.tar.xz
+#2425c5d7af8b994b9b2a7b78db8a5bb3  spacebar-6.4.4.tar.xz
+51b35f64a4e47bb39d1c27f1e6171ab9  spectacle-6.4.4.tar.xz
+EOF
+
+

+ About Commented Out Packages +

+

+ In the above list, several files are commented out with a + hash (#) character. +

+
+
    +
  • +

    + The plasma-sdk package is optional and used for + software development. +

    +
  • +
  • +

    + The discover package requires AppStream-1.0.6 to be built + with the -D qt=true switch. +

    +
  • +
  • +

    + 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-browser-integration package is designed to + implement browser integration for Plasma into Mozilla + Firefox and Google Chrome. The package does build, + but is only useful if you want these browsers to be + integrated into the shell in a way that lets you see + (and control) downloads from Plasma's notifications + area, as well as allowing you to search browser + history in the KDE Runner. Note that you must also + install a browser extension for this to work. For + more details, see + the KDE Plasma wiki page about browser + integration. +

    +
  • +
  • +

    + The krdp package is used to allow an RDP server to be + run while using Plasma. This feature requires the 2.x + version of FreeRDP, which is not in BLFS. +

    +
  • +
  • +

    + The plasma-nano package is used for embedded systems. +

    +
  • +
  • +

    + The plasma-mobile, plasma-dialer, and spacebar + packages provide phone functionality for Plasma. +

    +
  • +
  • +

    + The flatpak-kcm package is for managing support of + flatpak applications. +

    +
  • +
  • +

    + The kwayland-integration application requires plasma5 + support. +

    +
  • +
+
+
+
+
+

+ Installation of Plasma +

+
+

+ 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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
+    name=$(      echo $pkg |sed 's|-6.*$||')   # Isolate package name
+    packagedir=$(echo $pkg |sed 's|\.tar.*||') # Source directory
+
+    tar -xf $file
+    pushd $packagedir
+
+       mkdir build
+       cd    build
+
+       cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+             -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+             -D CMAKE_BUILD_TYPE=Release         \
+             -D BUILD_QT5=OFF                    \
+             -D BUILD_TESTING=OFF                \
+             -W no-dev ..  &&
+
+        make
+        as_root make install
+    popd
+
+
+    as_root rm -rf $packagedir
+    as_root /sbin/ldconfig
+
+done < plasma-6.4.4.md5
+
+exit
+

+ If you did not set $KF6_PREFIX to + /usr, create symlinks to allow + display managers to find Plasma, and to allow the XDG Desktop + Portal to be detected. As the root user: +

+
# Setup xsessions (X11 sessions)
+install -dvm 755 /usr/share/xsessions
+cd /usr/share/xsessions
+
+[ -e plasma.desktop ] ||
+ln -sfv $KF6_PREFIX/share/xsessions/plasmax11.desktop 
+
+# Setup wayland-sessions 
+install -dvm 755 /usr/share/wayland-sessions
+cd /usr/share/wayland-sessions
+
+[ -e plasmawayland.desktop ] ||
+ln -sfv $KF6_PREFIX/share/wayland-sessions/plasma.desktop
+
+# Setup xdg-desktop-portal
+install -dvm 755 /usr/share/xdg-desktop-portal
+cd /usr/share/xdg-desktop-portal 
+
+[ -e kde-portals.conf ] ||
+ln -sfv $KF6_PREFIX/share/xdg-desktop-portal/kde-portals.conf
+
+# Setup kde portal
+install -dvm 755 /usr/share/xdg-desktop-portal/portals
+cd /usr/share/xdg-desktop-portal/portals
+
+[ -e kde.portal ] ||
+ln -sfv $KF6_PREFIX/share/xdg-desktop-portal/portals/kde.portal
+

+ Useless systemd units have been installed in $KF6_PREFIX/lib. Remove them now (as + root): +

+
rm -rf $KF6_PREFIX/lib/systemd
+
+
+

+ 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 Plasma +

+

+ You can start Plasma from + runlevel 3, using xinit-1.4.4, or from runlevel 5, using a + Display Manager, such as lightdm-1.32.0. +

+

+ To start Plasma using + xinit-1.4.4, run the following commands: +

+
cat > ~/.xinitrc << "EOF"
+dbus-launch --exit-with-x11 $KF6_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 + (over 50 in /opt/kf6/bin) to list separately here. +
+
+ Installed Libraries: + There are too many plasma libraries + (over 250 in /opt/kf6/lib) to list separately + here. +
+
+ Installed Directories: + There are too many plasma + directories (over 2700 in /opt/kf6) to list separately + here. +
+
+
+
+
+
+
+
+
+
+

+ Part VIII. GNOME +

+
+
+
+
+
+
+
+

+ Chapter 33. GNOME Libraries and + Desktop +

+
+
+
+
+

+ The objective of this section is to build a GNOME desktop. +

+
+
+
+

+ Libraries +

+
+
+
+
+
+
+
+

+ Gcr-3.41.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/gcr/3.41/gcr-3.41.2.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 40a754ba44d5e95e4d07656d6302900c +

    +
  • +
  • +

    + Download size: 1012 KB +

    +
  • +
  • +

    + Estimated disk space required: 33 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests; both using + parallelism=4) +

    +
  • +
+
+

+ Gcr + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended), libgcrypt-1.11.2, and p11-kit-0.25.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 and Valgrind-3.25.1 +

+
+
+

+ Installation of Gcr +

+

+ First, apply a fix for building without OpenSSH installed: +

+
sed '/ssh.add/d; /ssh.agent/d' -i meson.build
+

+ Install Gcr by running the + following commands: +

+
sed -i 's:"/desktop:"/org:' schema/*.xml &&
+
+mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk_doc=false    \
+            -D ssh_agent=false  \
+            ..                  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -e "/install_dir/s@,\$@ / 'gcr-3.41.2'&@" \
+    -i ../docs/*/meson.build                  &&
+meson configure -D gtk_doc=true               &&
+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. +

+

+ -D ssh_agent=false: + Disable the ssh-agent implementation from this package. This + implementation is intended to replace the ssh-agent + implementation of gnome-keyring-48.0, but the + replacement still has several unresolved issues. +

+

+ -D gtk=false: Use this switch if + you haven't installed GTK-3.24.50. Note that gcr-viewer will not be installed if this + is option is used. +

+

+ -D gtk_doc=true: Allow building + this package without Gi-DocGen-2025.4 installed. If you + have Gi-DocGen-2025.4 installed and you + wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Gcr-4.4.0.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/gcr/4.4/gcr-4.4.0.1.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 01da4445b5b16801c6dcc7d8945b4cc4 +

    +
  • +
  • +

    + Download size: 728 KB +

    +
  • +
  • +

    + Estimated disk space required: 26 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (with tests; both using + parallelism=4) +

    +
  • +
+
+

+ Gcr + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended), libgcrypt-1.11.2, p11-kit-0.25.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, GnuTLS-3.8.10, + OpenSSH-10.0p1, and Valgrind-3.25.1 +

+
+
+

+ Installation of Gcr +

+
+

+ Note +

+

+ Both gcr-3 and gcr-4 are coinstallable. This version of the + package is used to support GTK-4 applications, such as + gnome-shell-48.4 and Epiphany-48.5. +

+
+

+ Install Gcr by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk_doc=false    \
+            -D ssh_agent=false  \
+            ..                  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -e "/install_dir/s@,\$@ / 'gcr-4.4.0.1'&@" \
+    -i ../docs/*/meson.build                 &&
+meson configure -D gtk_doc=true              &&
+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. +

+

+ -D gtk4=false: Use this switch if + you haven't installed GTK-4.18.6. Note that gcr-viewer-gtk4 will not be installed if + this is passed to meson. +

+

+ -D gtk_doc=false: + Allow building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+

+ -D ssh_agent=false: + Disable the ssh-agent implementation of this package. This + implementation is intended to replace the ssh-agent + implementation of gnome-keyring-48.0, but the + replacement still has several unresolved issues. +

+

+ -D crypto=gnutls: Use this switch + if you have GnuTLS-3.8.10 installed and wish to use + it instead of libgcrypt-1.11.2. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + gcr-viewer-gtk4 +
+
+ Installed Libraries: + libgck-2.so, libgcr-4.so +
+
+ Installed Directories: + /usr/include/gck-2, + /usr/include/gcr-4, and + /usr/share/gtk-doc/html/{gcr,gck} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ gcr-viewer-gtk4 +

+
+

+ is used to view certificates and key files +

+
+

+ libgck-2.so +

+
+

+ contains GObject bindings for PKCS#11 +

+
+

+ libgcr-4.so +

+
+

+ contains functions for accessing key stores and + displaying certificates +

+
+
+
+
+
+
+
+

+ gsettings-desktop-schemas-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GSettings Desktop Schemas + Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+
+

+ 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 setup --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 +
+
+
+
+
+
+
+
+

+ libsecret-0.21.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libsecret Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 and docbook-xml-4.5, + docbook-xsl-nons-1.79.2, + libxslt-1.1.43 (to build manual pages), + Valgrind-3.25.1 (can be used in tests), + and tpm2-tss (for + TPM support) +

+
+ Optional (Required for the test + suite) +
+

+ D-Bus Python-1.4.0, Gjs-1.84.2, and PyGObject-3.52.3 +

+
+ Required Runtime Dependency +
+

+ gnome-keyring-48.0 +

+
+

+ Note +

+

+ Any package requiring libsecret expects GNOME Keyring to be present at + runtime. +

+
+
+
+

+ Installation of libsecret +

+

+ Install libsecret by running + the following commands: +

+
mkdir bld &&
+cd    bld &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk_doc=false    \
+            ..                  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "s/api_version_major/'0.21.7'/"            \
+    -i ../docs/reference/libsecret/meson.build &&
+meson configure -D gtk_doc=true                &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: dbus-run-session ninja + test. +

+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_doc=false: + Allow building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+

+ -D manpage=false: Use this switch + if you have not installed libxslt-1.1.43 and DocBook + packages. +

+

+ -D crypto=gnutls: Use this switch + if you want to use GnuTLS-3.8.10 for cryptography instead of + libgcrypt-1.11.2. +

+

+ -D crypto=disabled: Use this + switch if you don't have GnuTLS-3.8.10 or libgcrypt-1.11.2 installed. Note that + disabling transport encryption support by doing this is not + recommended. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + secret-tool +
+
+ Installed Library: + libsecret-1.so +
+
+ Installed Directories: + /usr/include/libsecret-1 and + /usr/share/doc/libsecret-0.21.7 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ rest-0.9.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 make remote usage of the + RESTful API easier. +

+

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

+

+ Package Information +

+
+ +
+

+ rest + Dependencies +

+
+ Required +
+

+ JSON-GLib-1.10.6, libsoup-3.6.5, and + make-ca-1.16.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, libadwaita-1.7.6 and gtksourceview5-5.16.0 (to build + the demo), and Vala-0.56.18 +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of rest +

+

+ Install rest by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D examples=false   \
+            -D gtk_doc=false    \
+            ..                  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/output/s/librest-1.0/rest-0.9.1/" -i ../docs/meson.build &&
+meson configure -D gtk_doc=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. +

+

+ -D gtk_doc=false: + Allow building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+

+ -D examples=false: + Remove this option if libadwaita-1.7.6 and gtksourceview5-5.16.0 are + installed and you wish to build the demonstration application + provided by this package. +

+

+ -D vapi=true: Use this switch if + Vala-0.56.18 is installed and you wish to + build the Vala bindings provided by this package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + librest-demo (optional) +
+
+ Installed Libraries: + librest-1.0.so and + librest-extras-1.0.so +
+
+ Installed Directories: + /usr/include/rest-1.0 and + /usr/share/gtk-doc/html/rest-1.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ librest-demo +

+
+

+ provides an example of how to use the RESTful Web + API Query functions +

+
+

+ librest-1.0.so +

+
+

+ contains the RESTful Web API Query functions +

+
+

+ librest-extras-1.0.so +

+
+

+ contains extra RESTful Web API Query functions +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Totem PL Parser Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ CMake-4.1.0, GTK-Doc-1.34.0, + Gvfs-1.56.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 +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of Totem PL Parser +

+

+ Install Totem PL Parser by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. The test named + parser 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 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 +

+
+
+
+
+
+
+
+

+ VTE-0.80.3 +

+
+
+
+
+
+

+ Introduction to VTE +

+

+ The VTE package contains a + virtual terminal widget for GTK applications. +

+

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

+

+ Package Information +

+
+ +
+

+ VTE + Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libxml2-2.14.5, and + pcre2-10.45 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, both git-2.50.1 and make-ca-1.16.1 (for downloading a + fast_float copy, only if the recommended dependency is + omitted) +

+
+
+

+ Installation of VTE +

+

+ Install VTE by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D _systemd=false   &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -e "/docdir =/s@\$@/ 'vte-0.80.3'@" \
+    -i ../doc/reference/meson.build     &&
+meson configure -D docs=true            &&
+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. +

+

+ -D gnutls=false: Add this switch + if you do not want to enable GnuTLS support. +

+

+ -D vapi=false: Add this switch if + you do not want to enable vala bindings. +

+

+ -D gtk4=false: Add this switch if + you do not want to build the GTK-4 version of VTE. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + vte-2.91 and vte-2.91-gtk4 +
+
+ Installed Library: + libvte-2.91.so and + libvte-2.91-gtk4.so +
+
+ Installed Directories: + /usr/include/vte-2.91, + /usr/include/vte-2.91-gtk4, and (optional) + /usr/share/doc/vte-0.80.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ vte-2.91 +

+
+

+ is a test application for the VTE libraries +

+
+

+ vte-2.91-gtk4 +

+
+

+ is a test application for the GTK-4 version of the + VTE libraries +

+
+

+ libvte-2.91.so +

+
+

+ is a library which implements a terminal emulator + widget for GTK+ 3 +

+
+

+ libvte-2.91-gtk4.so +

+
+

+ is a library which implements a terminal emulator + widget for GTK-4 +

+
+
+
+
+
+
+
+

+ yelp-xsl-42.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Yelp + XSL Dependencies +

+
+ Required +
+

+ libxslt-1.1.43 and itstool-2.0.7 +

+
+
+

+ Installation of Yelp XSL +

+

+ Install Yelp XSL by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/yelp-xsl +
+
+
+
+
+
+
+
+

+ geocode-glib-3.26.4 +

+
+
+
+
+
+

+ Introduction to Geocode GLib +

+

+ The Geocode GLib is a + convenience library for the Yahoo! Place Finder APIs. The + Place Finder web service allows you to do geocoding (finding + longitude and latitude from an address), as well as reverse + geocoding (finding an address from coordinates). +

+

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

+

+ Package Information +

+
+ +
+

+ Geocode GLib Dependencies +

+
+ Required +
+

+ JSON-GLib-1.10.6 and libsoup-3.6.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of Geocode GLib +

+

+ Install Geocode GLib by + running the following commands: +

+
mkdir build                   &&
+cd    build                   &&
+
+meson setup --prefix=/usr           \
+            --buildtype=release     \
+            -D enable-gtk-doc=false \
+            -D soup2=false          \
+            ..                      &&
+ninja
+

+ To test the results, issue: LANG=C ninja test. One test + fails because it needs the sv_SE.utf8 locale, which is not installed by + default in LFS. +

+

+ 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. +

+

+ -D + enable-gtk-doc=false: Allow this package to be + built without GTK-Doc-1.34.0. Remove this parameter if + GTK-Doc-1.34.0 is installed and you wish + to rebuild and install the API documentation. +

+

+ -D soup2=false: This + switch forces this package to use libsoup-3 for HTTP requests + instead of libsoup-2. The packages in BLFS that use + geocode-glib now expect libsoup-3 to be used. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libgeocode-glib-2.so +
+
+ Installed Directories: + /usr/include/geocode-glib-2.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-2.so +

+
+

+ contains the Geocode + GLib API functions +

+
+
+
+
+
+
+
+

+ Gjs-1.84.2 +

+
+
+
+
+
+

+ Introduction to Gjs +

+

+ Gjs is a set of Javascript + bindings for GNOME. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/gjs/1.84/gjs-1.84.2.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 5083ed4dc52910eebbbfb17198d8ef8e +

    +
  • +
  • +

    + Download size: 772 KB +

    +
  • +
  • +

    + Estimated disk space required: 299 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (with tests; with + parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ Gjs + Dependencies +

+
+ Required +
+

+ Cairo-1.18.4, dbus-1.16.2, GLib-2.84.4 (with GObject + Introspection), and SpiderMonkey from + Firefox-140.2.0 +

+
+ Recommended (required for GNOME) +
+ +
+ Optional +
+

+ Valgrind-3.25.1 (for tests), DTrace, + LCOV, + sysprof, and + Systemtap +

+
+
+

+ Installation of Gjs +

+

+ Apply a patch to allow building this package with + SpiderMonkey 140: +

+
patch -Np1 -i ../gjs-1.84.2-spidermonkey_140-1.patch
+

+ Install Gjs by running the + following commands: +

+
mkdir gjs-build &&
+cd    gjs-build &&
+
+meson setup --prefix=/usr          \
+            --buildtype=release    \
+            --wrap-mode=nofallback \
+            ..                     &&
+ninja
+

+ To test the results, issue: ninja test 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. +

+

+ --wrap-mode=nofallback: This + switch prevents meson from using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are not installed on the system. +

+

+ -D profiler=disabled: prevents + building the profiler backend even if sysprof is + installed. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-autoar-0.4.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ gnome-autoar Dependencies +

+
+ Required +
+

+ libarchive-3.8.1 and GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for building + documentation) +

+
+
+

+ Installation of gnome-autoar +

+

+ Install gnome-autoar by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D vapi=true        \
+            -D tests=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. +

+

+ -D gtk_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 +

+
+
+
+
+
+
+
+

+ gnome-desktop-44.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Desktop Dependencies +

+
+ Required +
+

+ gsettings-desktop-schemas-48.0, + GTK-3.24.50, GTK-4.18.6, ISO Codes-4.18.0, + itstool-2.0.7, libseccomp-2.6.0, + libxml2-2.14.5, and xkeyboard-config-2.45 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of GNOME Desktop +

+

+ Install GNOME Desktop by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            ..                  &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_doc=true: Use this + parameter if you wish to build the API documentation. +

+

+ -D installed_tests=true: Use this + parameter you wish to enable the installed tests. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libgnome-bg-4.so, + libgnome-desktop-3.so, libgnome-desktop-4.so, and + libgnome-rr-4.so +
+
+ Installed Directories: + /usr/include/gnome-desktop-3.0, + /usr/include/gnome-desktop-4.0, + /usr/libexec/gnome-desktop-debug, + /usr/share/gtk-doc/html/gnome-desktop3 (optional), and + /usr/share/help/*/{fdl,gpl,lgpl} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libgnome-desktop-3.so +

+
+

+ contains functions shared by several GNOME applications +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Menus Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-online-accounts-3.54.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Online Accounts Dependencies +

+
+ Required +
+

+ Gcr-4.4.0.1, JSON-GLib-1.10.6, + libadwaita-1.7.6, rest-0.9.1, and Vala-0.56.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, keyutils-1.6.3, + MIT Kerberos V5-1.22.1, and + Valgrind-3.25.1 +

+
+
+

+ 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 + https://www.chromium.org/developers/how-tos/api-keys. +

+
+

+ Install GNOME Online + Accounts by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup                                            \
+      --prefix=/usr                                    \
+      --buildtype=release                              \
+      -D documentation=false                           \
+      -D kerberos=false                                \
+      -D google_client_secret=5ntt6GbbkjnTVXx-MSxbmx5e \
+      -D google_client_id=595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com \
+      .. &&
+ninja
+

+ If you've installed Gi-DocGen-2025.4 and you wish to build + and install the API documentation of this package, issue: +

+
meson configure -D documentation=true &&
+sed "s/project_name()/& + '-' + meson.project_version()/" \
+    -i ../doc/meson.build &&
+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. +

+

+ -D google_*: These + switches set the BLFS OAuth ID and secret for Google + services. +

+

+ -D kerberos=true: Use this switch + if you have installed MIT Kerberos V5-1.22.1 and wish + to use it with GNOME Online + Accounts. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ 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/doc/gnome-online-accounts-3.54.5 + (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libgoa-1.0.so +

+
+

+ contains the GNOME Online + Accounts API functions +

+
+

+ libgoa-backend-1.0.so +

+
+

+ contains functions used by GNOME Online Accounts backends +

+
+
+
+
+
+
+
+

+ libgee-0.20.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libgee Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) and Vala-0.56.18 +

+
+ Optional +
+

+ LCOV +

+
+
+

+ Installation of libgee +

+

+ Install libgee by running + the following commands: +

+
./configure --prefix=/usr --enable-vala &&
+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 +

+
+
+
+
+
+
+
+

+ libgtop-2.41.3 +

+
+
+
+
+
+

+ Introduction to libgtop +

+

+ The libgtop package contains + the GNOME top libraries. +

+

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

+

+ Package Information +

+
+ +
+

+ libgtop Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection + recommended) and Xorg Libraries +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libgweather-4.4.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ libgweather Dependencies +

+
+ Required +
+

+ geocode-glib-3.26.4, GTK-3.24.50, + libsoup-3.6.5, and PyGObject-3.52.3 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4 (gi-docgen is also + provided as a meson subproject, which will be used if + -D gtk_doc=false is not passed to + meson), + LLVM-20.1.8 (for clang-format), and + pylint +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of libgweather +

+

+ Fix an issue in the shipped geolocation data: +

+
patch -Np1 -i ../libgweather-4.4.4-upstream_fix-1.patch
+

+ Install libgweather by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D gtk_doc=false    \
+            ..                  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "s/libgweather_full_version/'libgweather-4.4.4'/" \
+    -i ../doc/meson.build                             &&
+meson configure -D gtk_doc=true                       &&
+ninja
+

+ One test needs that the locale files be installed on the + system, so it is better to run the tests after installing the + package. +

+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: LC_ALL=C ninja test. +

+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_doc=false: + Allow building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libgweather-4.so +
+
+ Installed Directories: + /usr/lib/libgweather-4, + /usr/include/libgweather-4.0, + /usr/share/gtk-doc/html/libgweather-4.0 (optional), and + /usr/share/libgweather-4 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libgweather-4.so +

+
+

+ contains functions that allow for the retrieval of + weather information +

+
+
+
+
+
+
+
+

+ libpeas-1.36.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libpeas Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) + and GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, Glade, embed, LGI (for LUA + bindings, built with LUA-5.1), with either luajit-20250816 or + LUA-5.1 +

+
+
+

+ Installation of libpeas +

+

+ Install libpeas by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr          \
+            --buildtype=release    \
+            --wrap-mode=nofallback \
+            -D python3=false       \
+            ..                     &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir =/s@\$@/ 'libpeas-1.36.0'@" \
+    -i ../docs/reference/meson.build       &&
+meson configure -D gtk_doc=true            &&
+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. +

+

+ --wrap-mode=nofallback: This + switch prevents meson from using subproject + fallbacks for any dependency declarations in the build files, + preventing it from downloading any optional dependencies + which are not installed on the system. +

+

+ -D python3=false: + This switch disables the Python plugin loader because it is + incompatible with pygobject-3.52.x, and it will cause + applications which load Python plugins to hang indefinitely. +

+

+ -D vapi=true: Add this switch if + you wish to generate vapi (vala) data. +

+

+ -D demos=false: Add this switch + if you do not wish to build the demo programs. +

+
+
+

+ 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 (optional) +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libshumate-1.4.0 +

+
+
+
+
+
+

+ Introduction to libshumate +

+

+ The libshumate package + contains a GTK-4 widget to display maps. +

+

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

+

+ Package Information +

+
+ +
+

+ libshumate Dependencies +

+
+ Required +
+

+ GTK-4.18.6, libsoup-3.6.5, and Protobuf-c-1.5.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Gi-DocGen-2025.4, Valgrind-3.25.1, + and sysprof +

+
+
+

+ Installation of libshumate +

+

+ Install libshumate by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr          \
+            --buildtype=release    \
+            --wrap-mode=nodownload \
+            -D gtk_doc=false       \
+            ..                     &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed -e 's/lib_version/version/' \
+    -i ../docs/meson.build      &&
+meson configure -D gtk_doc=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. +

+

+ --wrap-mode=nodownload: This + switch prevents meson from downloading any + optional dependency which is not installed on the system. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libshumate-1.0.so +
+
+ Installed Directories: + /usr/include/shumate-1.0 and + /usr/share/doc/libshumate-1.4.0 (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libshumate-1.0.so +

+
+

+ contains functions that provide a GTK-4 widget to + display maps +

+
+
+
+
+
+
+
+

+ evolution-data-server-3.56.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Evolution Data Server Dependencies +

+
+ Required +
+

+ libical-3.0.20, libsecret-0.21.7, + nss-3.115, + and SQLite-3.50.4 +

+
+ Recommended +
+ +
+ Recommended (Runtime) +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0, MIT Kerberos + V5-1.22.1, a MTA (that + provides a sendmail command), + OpenLDAP-2.6.10, + Berkeley DB (deprecated), and libphonenumber +

+
+
+

+ Installation of Evolution Data Server +

+

+ Install Evolution Data + Server by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr  \
+      -D SYSCONF_INSTALL_DIR=/etc   \
+      -D ENABLE_VALA_BINDINGS=ON    \
+      -D ENABLE_INSTALLED_TESTS=ON  \
+      -D WITH_OPENLDAP=OFF          \
+      -D WITH_KRB5=OFF              \
+      -D ENABLE_INTROSPECTION=ON    \
+      -D ENABLE_GTK_DOC=OFF         \
+      -D WITH_LIBDB=OFF             \
+      -D WITH_SYSTEMDUSERUNITDIR=no \
+      -W no-dev -G Ninja ..         &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: ninja test. +

+
+
+

+ Command Explanations +

+

+ -D + ENABLE_VALA_BINDINGS=ON: This switch enables + building the Vala bindings. Remove it if you don't have + Vala-0.56.18 installed. +

+

+ -D + ENABLE_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. +

+

+ -D WITH_KRB5=OFF: + This switch allows building this package without MIT + Kerberos V5-1.22.1. If you need Kerberos support in this + package, for example to connect to a corporate network, + change this switch from OFF to ON. +

+

+ -D WITH_LIBDB=OFF: + This switch allows building this package without + Berkeley DB (deprecated). SQLite-3.50.4 is used for normal + operation. +

+

+ -D ENABLE_OAUTH2_WEBKITGTK4=OFF: + Use this switch if you did not build WebKitGTK-2.48.5 + with GTK-4. +

+

+ -D + WITH_SYSTEMDUSERUNITDIR=no: This switch disables + installing the systemd units, which are not used for a Sysv + build. +

+
+

+ 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, + libedataserverui4-1.0.so, and + libetestserverutils.so +
+
+ Installed Directories: + /usr/include/evolution-data-server, + /usr/lib{,exec}/evolution-data-server, + /usr/share/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 +

+
+

+ libedataserverui4-1.0.so +

+
+

+ is the GTK-4 based GUI utility library for + Evolution Data + Server +

+
+

+ libetestserverutils.so +

+
+

+ is the server test utility library for Evolution Data Server +

+
+
+
+
+
+
+
+

+ tinysparql-3.9.2 +

+
+
+
+
+
+

+ Introduction to Tinysparql +

+

+ Tinysparql is a + low-footprint RDF triple store with a SPARQL 1.1 interface. +

+

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

+

+ Package Information +

+
+ +
+

+ Tinysparql Dependencies +

+
+ Required +
+

+ JSON-GLib-1.10.6 and Vala-0.56.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1, Avahi-0.8, Graphviz-13.1.2, + bash-completion, + and libstemmer +

+
+
+

+ Installation of Tinysparql +

+

+ Fix the location to install the documentation into: +

+
sed -e "s/'generate'/&, '--no-namespace-dir'/"         \
+    -e "/--output-dir/s/@OUTPUT@/&\/tinysparql-3.9.2/" \
+    -i docs/reference/meson.build
+

+ Install Tinysparql by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr                  \
+            --buildtype=release            \
+            -D man=false                   \
+            -D systemd_user_services=false \
+            ..                            &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+

+ To test the results, issue: meson configure -D debug=true && + LC_ALL=C.UTF-8 ninja test. The test suite + should be run from a graphical session. One test is known to + fail due to the manual pages not being generated. +

+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D man=false: This + switch prevents the build process from generating man pages. + Omit this switch if you have asciidoc-10.2.1 installed and + wish to generate and install the man pages. +

+

+ -D + systemd_user_services=false: This switch prevents + the build process from installing systemd user services since + they are useless on SysV systems. +

+

+ meson configure -D + debug=true: This command enables some debug + checks necessary for the test suite. We don't want to enable + them for the installed tinysparql libraries and programs, so + we run the test suite after installation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + tinysparql +
+
+ Installed Library: + libtinysparql-3.0.so and + libtracker-sparql-3.0.so +
+
+ Installed Directories: + /usr/{include,lib}/tinysparql-3.0 + and /usr/share/doc/tinysparql-3.9.2 (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ tinysparql +

+
+

+ is a control program for TinySPARQL databases +

+
+

+ libtinysparql-3.0.so +

+
+

+ contains functions for administering TinySPARQL + databases +

+
+

+ libtracker-sparql-3.0.so +

+
+

+ contains resource management and database functions +

+
+
+
+
+
+
+
+

+ localsearch-3.9.0 +

+
+
+
+
+
+

+ Introduction to Localsearch +

+

+ The Localsearch package + contains a filesystem indexer as well as a metadata + extractor. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Localsearch Dependencies +

+
+ Required +
+

+ gexiv2-0.14.6, gst-plugins-base-1.26.5, and + tinysparql-3.9.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1, CMake-4.1.0, DConf-0.40.0, + libgsf-1.14.53, NetworkManager-1.54.0, taglib-2.1.1, + totem-pl-parser-3.26.6, + libcue, libitpcdata, + libosinfo, + and gupnp +

+
+
+

+ Kernel Configuration +

+

+ Enable the following options in the kernel configuration, + then recompile the kernel and reboot if necessary: +

+
Security options --->
+  [*]        Enable different security models                         [SECURITY]
+  [*]        Landlock support                                [SECURITY_LANDLOCK]
+  # List more Linux Security Modules here (separated with comma) if needed,
+  # for example 'landlock,lockdown,smack':
+  (landlock) Ordered list of enabled LSMs                                  [LSM]
+
+
+

+ Installation of Localsearch +

+
+

+ Warning +

+

+ If you are upgrading this package from a version where it + was known as tracker-miners, there are several + files which will cause conflicts. Before installing this + package, remove these files as the root user: +

+
+
rm -fv /etc/xdg/autostart/tracker-miner-fs-3.desktop                           &&
+rm -fv /usr/lib/systemd/user/tracker-miner-fs-3.service                        &&
+rm -fv /usr/lib/systemd/user/tracker-miner-fs-control-3.service                &&
+rm -fv /usr/share/dbus-1/services/org.freedesktop.Tracker3.Miner.Files.service &&
+rm -fv /usr/share/dbus-1/services/org.freedesktop.Tracker3.Writeback.service   &&
+rm -fv /usr/share/dbus-1/services/org.freedesktop.Tracker3.Miner.Files.Control.service
+
+

+ Note +

+

+ If you plan to run the tests, some timeouts are too short + when using spinning disks. There are two places where + timeouts are used: first, individual tests inside a group + of tests have a default timeout of 10s. This can be changed + by setting the environment variable TRACKER_TESTS_AWAIT_TIMEOUT to the desired + value when running the tests (see below). Second, a global + timeout for a group of tests is fixed at configuration + time. The default value in the functional-tests directory (other + directories have only short lived tests) may be increased + with the following command (replace 200 with a value + suitable for your machine): +

+
sed -i s/120/200/ tests/functional-tests/meson.build
+
+

+ First, apply a patch to make the HTML extractor compatible + with libxml2-2.14 and later: +

+
patch -Np1 -i ../localsearch-3.9.0-libxml2_2_14-1.patch
+

+ Install Localsearch by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr                  \
+            --buildtype=release            \
+            -D systemd_user_services=false \
+            -D man=false                   \
+            ..                             &&
+ninja
+

+ To test the results, issue (adjust the individual test + timeout to a value suitable for your machine, see the note + above): +

+
dbus-run-session env LC_ALL=C.UTF-8 TRACKER_TESTS_AWAIT_TIMEOUT=20 \
+                 ninja test &&
+rm -rf ~/tracker-tests
+

+ Now, as the root user: +

+
ninja install
+
+

+ Note +

+

+ The tests create files in the user directory (up to 24 MB), + so they have to be removed afterwards. +

+
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D man=false: This + switch prevents the build process from generating man pages. + Omit this switch if you have asciidoc-10.2.1 installed and + wish to generate and install the man pages. +

+

+ -D + systemd_user_services=false: This switch prevents + the build process from installing systemd units since they + are useless on SysV systems. +

+

+ -D seccomp=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. + Note that disabling seccomp may cause the system to be + compromised worse in the event that a security vulnerability + in localsearch or its dependencies is exploited. +

+

+ -D landlock=disabled: This switch + disables the Landlock file access sandbox. Use it if you + don't want to build the kernel with Landlock support. Note + that disabling Landlock may cause the system to be + compromised worse in the event that a security vulnerability + in localsearch or its dependencies is exploited. +

+

+ -D battery_detection=none: Use + this option if you have not installed the recommended + dependency upower. Do not use this option if your system has + a battery (laptop battery or UPS), or else localsearch may + waste battery life when A/C power is unavailable. +

+

+ -D libav=disabled: Use this + option if you have not installed the recommended dependency + ffmpeg. Note that using this will cause 7 test failures, and + will also significantly hamper the functionality of this + package. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + localsearch +
+
+ Installed Libraries: + Several modules under + /usr/lib/localsearch-3.0 +
+
+ Installed Directories: + /usr/lib/localsearch-3.0 and + /usr/share/localsearch3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ localsearch +

+
+

+ starts, stops, restarts, and lists daemons + responsible for indexing content +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ gsound Dependencies +

+
+ Required +
+

+ libcanberra-0.30 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for generating + documentation) +

+
+
+

+ Installation of GSound +

+

+ Install gsound by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xdg-desktop-portal-gnome-48.0 +

+
+
+
+
+
+

+ Introduction to xdg-desktop-portal-gnome +

+

+ xdg-desktop-portal-gnome is + a backend for xdg-desktop-portal, that is using GTK + and various pieces of GNOME infrastructure. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-desktop-portal-gnome + Dependencies +

+
+ Required +
+

+ gnome-desktop-44.3, GTK-4.18.6, libadwaita-1.7.6, xdg-desktop-portal-1.20.3, + and xdg-desktop-portal-gtk-1.15.3 + (at runtime) +

+
+
+

+ Installation of xdg-desktop-portal-gnome +

+

+ Install xdg-desktop-portal-gnome by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr              \
+            --buildtype=release        \
+            -D systemduserunitdir=/tmp \
+            ..                         &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ Remove systemd files that are useless (as the root user): +

+
rm -vf /tmp/*.service
+
+

+ 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
+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + one daemon in /usr/libexec +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/share/xdg-desktop-portal (if + no other xdg-desktop-portal backend is + installed) +
+
+
+
+
+
+
+
+

+ GNOME Desktop Components +

+
+
+
+
+
+
+
+

+ DConf-0.40.0 / + DConf-Editor-45.0.1 +

+
+
+
+
+
+

+ 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.84.4 + provides similar functionality on the commandline. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ DConf Dependencies +

+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4, GTK-3.24.50 (for the editor), + libhandy-1.8.3 (for the editor), and + libxml2-2.14.5 (for the editor) +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and bash-completion +

+
+
+

+ Installation of DConf +

+

+ First, prevent unnecessary systemd units from being + installed: +

+
sed -i 's/install_dir: systemd_userunitdir,//' service/meson.build
+

+ Install DConf by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr            \
+            --buildtype=release      \
+            -D bash_completion=false \
+            ..                      &&
+ninja
+

+ To test the results, issue: dbus-run-session ninja test +

+

+ As the root user: +

+
ninja install
+

+ Now, optionally install the editor: +

+
cd ..              &&
+tar -xf ../dconf-editor-45.0.1.tar.xz &&
+cd dconf-editor-45.0.1                &&
+
+mkdir build &&
+cd    build &&
+
+meson setup --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. +

+

+ -D gtk_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 +

+
+
+
+
+
+
+
+

+ gnome-backgrounds-48.2.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Backgrounds Dependencies +

+
+ Required at runtime +
+

+ libjxl-0.11.1 +

+
+
+

+ Installation of GNOME Backgrounds +

+

+ Install GNOME Backgrounds by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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/backgrounds/gnome and + /usr/share/gnome-background-properties +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ GNOME + Backgrounds +

+
+

+ are background images for the GNOME Desktop +

+
+
+
+
+
+
+
+

+ Gvfs-1.56.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gvfs + Dependencies +

+
+ Required +
+

+ dbus-1.16.2, GLib-2.84.4, Gcr-4.4.0.1, libusb-1.0.29, and + libsecret-0.21.7 +

+
+ Recommended +
+ +
+ Optional +
+

+ Apache-2.4.65, Avahi-0.8, BlueZ-5.83, Fuse-3.17.4, + gnome-online-accounts-3.54.5, + GTK-Doc-1.34.0, libarchive-3.8.1, + libgcrypt-1.11.2, libxml2-2.14.5, + libxslt-1.1.43, OpenSSH-10.0p1, + Samba-4.22.4, gnome-desktop-testing + (for tests), libbluray, + libgdata, + libgphoto2, libimobiledevice, + libmsgraph, + libmtp, libnfs, and + Twisted +

+
+
+

+ Installation of Gvfs +

+

+ Install Gvfs by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup               \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D onedrive=false   \
+      -D fuse=false       \
+      -D gphoto2=false    \
+      -D afc=false        \
+      -D bluray=false     \
+      -D nfs=false        \
+      -D mtp=false        \
+      -D smb=false        \
+      -D tmpfilesdir=no   \
+      -D dnssd=false      \
+      -D goa=false        \
+      -D google=false     \
+      -D systemduserunitdir=no .. &&
+ninja
+

+ The test suite requires gnome-desktop-testing, which is beyond + the scope of BLFS. +

+

+ 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 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 and google require GNOME Online Accounts. The + google option also requires the libgdata package, which has + been removed from BLFS. The onedrive support requires the + libmsgraph package. +

+

+ -D tmpfilesdir=no + -D + systemduserunitdir=no: These switches provide + systemd directory locations. Setting them to “no” disables the + dependency on systemd and logind. +

+

+ -D cdda=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 +

+
+
+
+
+
+
+
+

+ gexiv2-0.14.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ gexiv2 Dependencies +

+
+ Required +
+

+ Exiv2-0.28.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for documentation) +

+
+
+

+ Installation of gexiv2 +

+

+ Install gexiv2 by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, run: +

+
meson configure -D tests=true &&
+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 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libgexiv2.so +

+
+

+ provides a wrapper around the Exiv2 library +

+
+
+
+
+
+
+
+

+ Nautilus-48.3 +

+
+
+
+
+
+

+ Introduction to Nautilus +

+

+ The Nautilus package + contains the GNOME file + manager. +

+

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

+

+ Package Information +

+
+ +
+

+ Nautilus Dependencies +

+
+ Required +
+

+ bubblewrap-0.11.0, gexiv2-0.14.6, + gnome-autoar-0.4.5, gnome-desktop-44.3, libadwaita-1.7.6, libnotify-0.8.6, libportal-0.9.1, + libseccomp-2.6.0, and tinysparql-3.9.2 +

+
+ Recommended +
+ +
+ Optional (for generating + documentation) +
+

+ Gi-DocGen-2025.4 +

+
+ Recommended (Runtime) +
+ +
+
+

+ Installation of Nautilus +

+

+ Install Nautilus by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            ..                  &&
+
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and you + wish to generate and install the API documentation, issue the + following commands: +

+
sed "/docdir =/s@\$@ / 'nautilus-48.3'@" -i ../meson.build &&
+meson configure -D docs=true &&
+ninja
+

+ To test the results, issue: ninja test. The tests need + to be run in a graphical environment. One test is known to + fail if localsearch-3.9.0 is not installed. + One test is also known to timeout if the user running the + tests has a large home directory. +

+

+ 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 cloudproviders=false: Use this + switch if you do not have libcloudproviders-0.3.6 + installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + nautilus and + nautilus-autorun-software +
+
+ Installed Library: + libnautilus-extension.so +
+
+ Installed Directories: + /usr/{include,lib,share}/nautilus + and /usr/share/doc/nautilus-48.3 (optional) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ nautilus +

+
+

+ is the GNOME file + manager +

+
+

+ libnautilus-extension.so +

+
+

+ supplies the functions needed by the file manager + extensions +

+
+
+
+
+
+
+
+

+ gnome-bluetooth-47.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ GNOME Bluetooth Dependencies +

+
+ Required +
+

+ GTK-4.18.6, gsound-1.0.3, libnotify-0.8.6, and + UPower-1.90.9 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and dbusmock-0.36.0 +

+
+ Runtime Dependencies +
+

+ BlueZ-5.83 +

+
+
+

+ Installation of GNOME Bluetooth +

+

+ First, fix a build failure that happens with pygobject-3.52.0 + and later: +

+
patch -Np1 -i ../gnome-bluetooth-47.1-build_fix-1.patch
+

+ Install GNOME Bluetooth by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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-3.0.so and + libgnome-bluetooth-ui-3.0.so +
+
+ Installed Directories: + /usr/include/gnome-bluetooth-3.0 + and /usr/share/gnome-bluetooth-3.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ bluetooth-sendto +

+
+

+ is a GTK+ + application for transferring files over Bluetooth +

+
+

+ libgnome-bluetooth-3.0.so +

+
+

+ contains the GNOME + Bluetooth API functions +

+
+
+
+
+
+
+
+

+ gnome-keyring-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Keyring Dependencies +

+
+ Required +
+

+ dbus-1.16.2 and Gcr-3.41.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ libcap-ng +

+
+
+

+ Installation of GNOME Keyring +

+

+ Install GNOME Keyring by + running the following commands: +

+
sed -i 's:"/desktop:"/org:' schema/*.xml &&
+
+mkdir build-gkr &&
+cd    build-gkr &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D systemd=disabled \
+      -D ssh-agent=true   &&
+ninja
+

+ A session bus address is necessary to run the tests. To test + the results, issue: ninja + test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ sed ... + schema/*.xml: This command fixes a deprecated + entry in the schema template. +

+

+ -D systemd=disabled: + This switch prevents a failure due to the build system + requiring systemd by + default. +

+

+ -D ssh-agent=true: + This switch enables the SSH agent built into gnome-keyring + instead of the one in GCR. This is done due to bugs in gcr + which cause the agent to not work correctly. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-settings-daemon-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Settings Daemon Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14, Fontconfig-2.17.1, Gcr-4.4.0.1, GeoClue-2.7.2, geocode-glib-3.26.4, gnome-desktop-44.3, libcanberra-0.30, libgweather-4.4.4, libnotify-0.8.6, libwacom-2.16.1, + PulseAudio-17.0, and UPower-1.90.9 +

+
+ Recommended +
+ +
+

+ 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. +

+
+
+ Recommended (Runtime) +
+ +
+ Optional +
+

+ gnome-session-48.0, Mutter-48.4, dbusmock-0.36.0, umockdev-0.19.3, and + Xvfb (for + tests, from Xorg-Server-21.1.18 or Xwayland-24.1.8) +

+
+
+

+ Installation of GNOME Settings Daemon +

+

+ Next, fix libelogind detection for tests: +

+
sed -e 's/libsystemd/libelogind/' \
+    -i plugins/power/test.py
+

+ Next, fix backlight functionality in gnome-control-center: +

+
sed -e 's/(backlight->logind_proxy)/(0)/' \
+    -i plugins/power/gsd-backlight.c
+

+ Install GNOME Settings + Daemon by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D systemd=false    \
+            ..                  &&
+ninja
+

+ To check the results, execute: env -u GALLIUM_DRIVERS 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-48, + /usr/lib/gnome-settings-daemon-48, and + /usr/share/gnome-settings-daemon +
+
+
+
+
+
+
+
+

+ Tecla-48.0.2 +

+
+
+
+
+
+

+ Introduction to Tecla +

+

+ The Tecla package contains a + keyboard layout viewer. +

+

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

+

+ Package Information +

+
+ +
+

+ Tecla Dependencies +

+
+ Required +
+

+ libadwaita-1.7.6 and libxkbcommon-1.11.0 +

+
+
+

+ Installation of Tecla +

+

+ Install Tecla by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + tecla +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ tecla +

+
+

+ is a keyboard layout viewer +

+
+
+
+
+
+
+
+

+ gnome-control-center-48.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Control Center Dependencies +

+
+ Required +
+

+ AccountsService-23.13.9, + colord-gtk-0.3.1, Cups-2.4.12, gnome-bluetooth-47.1, gnome-online-accounts-3.54.5, + gnome-settings-daemon-48.1, + gsound-1.0.3, libadwaita-1.7.6, + libgtop-2.41.3, libnma-1.10.6, libpwquality-1.4.5, MIT Kerberos + V5-1.22.1, ModemManager-1.24.2, Samba-4.22.4, + shared-mime-info-2.4, Tecla-48.0.2, + and UDisks-2.10.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Xvfb (from + Xorg-Server-21.1.18 or Xwayland-24.1.8) and dbusmock-0.36.0 (both for tests) +

+
+ Recommended (Runtime) +
+ +
+ Optional Runtime Dependencies +
+

+ cups-pk-helper-0.2.7 (Printers + panel), gnome-color-manager-3.36.2 + (Color panel), gnome-shell-48.4 (Applications 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. +

+
+
+
+

+ Installation of GNOME Control Center +

+

+ Install GNOME Control Center + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: GTK_A11Y=none ninja test. + Note that you must have the 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. +

+

+ -D ibus=false: Use this switch if + you have not installed the recommended IBus dependency. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Mutter-48.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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gnome.org/sources/mutter/48/mutter-48.4.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: e03c4eb4d9df60ec46bcc74fd632cb1e +

    +
  • +
  • +

    + Download size: 8.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 103 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (Using parallelism=4; add + 1.4 SBU for tests) +

    +
  • +
+
+

+ Mutter Dependencies +

+
+ Required +
+

+ docutils-0.21.2, gnome-settings-daemon-48.1, + graphene-1.10.8, libei-1.4.1, libxcvt-0.1.3, + libxkbcommon-1.11.0, and pipewire-1.4.7 +

+
+ Recommended +
+ +
+ Recommended (Required to build the + Wayland compositor) +
+ +
+ Recommended (Runtime) +
+ +
+ Optional +
+

+ dbusmock-0.36.0 (required for tests), + Xorg-Server-21.1.18 (for X11 + sessions), bash-completion, + sysprof, + Xvfb (from + Xorg-Server-21.1.18 or Xwayland-24.1.8), + xvfb-run, and zenity (the X11 + tests would only run with all of the last three) +

+
+
+

+ Installation of Mutter +

+

+ Fix an issue with the tests that would otherwise require the + package to be built with debugging information: +

+
sed "/tests_c_args =/s/$/ + ['-U', 'G_DISABLE_ASSERT']/" -i src/tests/meson.build &&
+sed "/c_args:/a '-U', 'G_DISABLE_ASSERT'," -i src/tests/cogl/unit/meson.build
+

+ Install Mutter by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr            \
+            --buildtype=release      \
+            -D tests=disabled        \
+            -D profiler=false        \
+            -D bash_completion=false \
+            ..                       &&
+ninja
+

+ If you want to run the test suite, ensure dbusmock-0.36.0 is installed and issue: +

+
meson configure -D tests=enabled &&
+ninja test
+

+ The tests require an active X or wayland session. Some tests + are flaky (especially under a high system load) so if a test + fails you can try to re-run it alone with the meson test <test + name> command. A few tests may + fail depending on some system configuration. Don't make any + mouse or keyboard input while the test suite is running or + some tests may fail. You can also test basic functions of + Mutter following the + section called “Starting Mutter,” after installing it. +

+

+ 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. +

+

+ -D + bash_completion=false: Allows building the + package without the bash-completion + package installed. +

+

+ -D tests=disabled: + Allow building the package without dbusmock-0.36.0 installed. It'll be + overridden with meson + configure if running the test suite. +

+

+ -D profiler=false: + Allows building this package without Sysprof. Remove this option if you've + installed Sysprof and want + to analyze the rendering performance of Mutter. +

+
+
+

+ Starting + Mutter +

+

+ Mutter is normally used as a + component of gnome-shell, + but it can be used as a standalone Wayland compositor too. To + run Mutter as a Wayland + compositor, in a virtual console, issue: +

+
mutter --wayland -- vte-2.91
+

+ Replace vte-2.91 with the command + line for the first application you want in the Wayland + session. Note that once this application exits, the Wayland + session will be terminated. +

+

+ Mutter can also function as + a nested compositor in another Wayland session. In a terminal + emulator, issue: +

+
MUTTER_DEBUG_DUMMY_MODE_SPECS=1920x1080 mutter --wayland --nested -- vte-2.91
+

+ Replace 1920x1080 + with the size you want for the nested Wayland session. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gdctl and mutter +
+
+ Installed Libraries: + libmutter-16.so and + libmutter-test-16.so (optional) +
+
+ Installed Directories: + /usr/{lib,include,libexec/installed-tests,share/{,installed-tests}}/mutter-16 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ gdctl +

+
+

+ controls the current monitor configuration on + sessions that use Mutter as a window manager +

+
+

+ mutter +

+
+

+ is a Clutter based + compositing GTK+ + Window Manager +

+
+

+ libmutter-16.so +

+
+

+ contains the Mutter API functions +

+
+

+ libmutter-test-16.so +

+
+

+ contains the Mutter test suite API + functions; this library is only installed if the + test suite of this package is run and it is needed + by the gnome-shell + test suite +

+
+
+
+
+
+
+
+

+ gnome-shell-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Shell Dependencies +

+
+ Required +
+

+ evolution-data-server-3.56.2, + Gcr-4.4.0.1, Gjs-1.84.2, gnome-desktop-44.3, ibus-1.5.32, Mutter-48.4, + Polkit-126, and startup-notification-0.12 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and bash-completion +

+
+ Required Runtime Dependencies +
+

+ adwaita-icon-theme-48.1, + DConf-0.40.0, + elogind-255.17, GDM-48.0, gnome-control-center-48.4, + and libgweather-4.4.4 +

+
+ Recommended Runtime Dependencies +
+ +
+
+

+ Installation of GNOME Shell +

+

+ Install GNOME Shell by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D systemd=false    \
+            -D tests=false      \
+            ..                  &&
+ninja
+

+ To run the tests, ensure Mutter is installed after running its + test suite, and issue: meson + configure -D tests=true && ninja + test. You must be running an X session to run + the tests. Some will fail if GDM-48.0 is not installed. Several more tests may fail in the Sysv + environment. One test named CSS + styling support is known to fail with some + multi-monitor configurations. +

+

+ 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. +

+

+ -D systemd=false: + Prevents installing systemd files, which are not needed in + this version of BLFS. +

+

+ -D extensions_tool=false: This + switch allows building this package without gnome-autoar-0.4.5 installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gnome-extensions, + gnome-extensions-app, gnome-shell, + gnome-shell-extension-prefs, gnome-shell-extension-tool, + and gnome-shell-test-tool +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/gnome-shell, + /usr/share/gnome-shell, + /usr/share/gtk-doc/html/{shell,st} (optional), and + /usr/share/xdg-desktop-portal/ +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gnome-shell +

+
+

+ provides the core user interface functions for the + GNOME Desktop +

+
+
+
+
+
+
+
+

+ gnome-shell-extensions-48.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Shell Extensions Dependencies +

+
+ Required +
+

+ libgtop-2.41.3 +

+
+
+

+ Installation of GNOME Shell Extensions +

+

+ Install GNOME Shell + Extensions by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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 +
+
+
+
+
+
+
+
+

+ gnome-session-48.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Session Dependencies +

+
+ Required +
+

+ elogind-255.17, gnome-desktop-44.3, JSON-GLib-1.10.6, Mesa-25.1.8, and + UPower-1.90.9 +

+
+ Optional +
+

+ xmlto-0.0.29, and libxslt-1.1.43 with + docbook-xml-4.5 and docbook-xsl-nons-1.79.2 (to + build the documentation) +

+
+
+

+ Installation of GNOME Session +

+

+ When running GNOME under Wayland-1.24.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 setup --prefix=/usr              \
+            --buildtype=release        \
+            -D man=false               \
+            -D docbook=false           \
+            -D systemduserunitdir=/tmp \
+            ..                         &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ If you generated the documentation, move it to a versioned + directory: +

+
mv -v /usr/share/doc/gnome-session{,-48.0}
+

+ This package creates two Xorg based .desktop files in the /usr/share/xsessions/ directory, and two + Wayland based .desktop files in + the /usr/share/wayland-sessions/ directory. + Only one is needed in each directory on a BLFS system, so + prevent the extra files showing up as options in a display + manager. As the root user: +

+
rm -v /usr/share/xsessions/gnome.desktop &&
+rm -v /usr/share/wayland-sessions/gnome.desktop
+

+ Now, as the root user, remove + systemd units that are useless on SysV systems: +

+
rm -rv /tmp/{*.d,*.target,*.service}
+

+ The startup sequence of gnome-wayland needs to create a dbus + session. On SysV, this has to be added to the shipped + gnome-wayland.desktop file, + which is written for systemd. As the root user: +

+
sed -e 's@^Exec=@&/usr/bin/dbus-run-session @' \
+    -i /usr/share/wayland-sessions/gnome-wayland.desktop
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D man=false -D + docbook=false: These parameters disable building + documentation. Omit them if you have built the optional + dependencies. +

+
+
+

+ Starting GNOME +

+

+ The easiest way to start GNOME is to use a display manager. + GDM-48.0 is + the recommended display manager. +

+

+ It is also possible to start GNOME from the command line. However, + you must still have GDM-48.0 installed for the desktop to work. In + previous releases of GNOME, gnome-shell would start without + it installed, but this changed in 48.0. GDM does not need to + be enabled to start gnome-shell from the command line. +

+

+ To start GNOME using + xinit-1.4.4, run the following commands: +

+
cat > ~/.xinitrc << "EOF"
+dbus-run-session gnome-session
+EOF
+
+startx
+

+ Alternatively, to start GNOME with Wayland support, run the + following command: +

+
XDG_SESSION_TYPE=wayland dbus-run-session gnome-session
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gnome-session, + gnome-session-inhibit, and gnome-session-quit +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/doc/gnome-session-48.0 + 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 +

+
+
+
+
+
+
+
+

+ gnome-tweaks-46.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Tweaks Dependencies +

+
+ Required +
+

+ GTK-4.18.6, gsettings-desktop-schemas-48.0, + libadwaita-1.7.6, libgudev-238, + PyGObject-3.52.3, and sound-theme-freedesktop-0.8 +

+
+
+

+ Installation of GNOME Tweaks +

+

+ Install GNOME Tweaks by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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.13/site-packages/gtweak and + /usr/share/gnome-tweaks +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gnome-tweaks +

+
+

+ is used to tweak advanced GNOME settings +

+
+
+
+
+
+
+
+

+ gnome-user-docs-48.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME User Docs Dependencies +

+
+ Required +
+

+ itstool-2.0.7 and libxml2-2.14.5 +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ Yelp-42.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Yelp + Dependencies +

+
+ Required +
+

+ gsettings-desktop-schemas-48.0, + libhandy-1.8.3, WebKitGTK-2.48.5, + and yelp-xsl-42.4 +

+
+ Recommended +
+ +
+

+ 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. +

+
+
+
+

+ Installation of Yelp +

+

+ Install Yelp by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ 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
+
+
+

+ Contents +

+
+
+
+ Installed Program: + gnome-help (symlink) and + yelp +
+
+ Installed Library: + libyelp.so +
+
+ Installed Directories: + /usr/include/libyelp, + /usr/share/gtk-doc/html/libyelp (optional), and + /usr/{lib,share}/yelp +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ yelp +

+
+

+ is the GNOME Help + Browser +

+
+

+ libyelp.so +

+
+

+ contains the Yelp + API functions +

+
+
+
+
+
+
+
+
+

+ 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-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Baobab Dependencies +

+
+ Required +
+

+ adwaita-icon-theme-48.1, + GTK-4.18.6, itstool-2.0.7, libadwaita-1.7.6, and Vala-0.56.18 +

+
+
+

+ Installation of Baobab +

+

+ Install Baobab by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Brasero-3.12.3 +

+
+
+
+
+
+

+ Introduction to Brasero +

+

+ Brasero is an application + used to burn CDs and DVDs 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Brasero Dependencies +

+
+ Required +
+

+ gst-plugins-base-1.26.5, + itstool-2.0.7, libcanberra-0.30, + and libnotify-0.8.6 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+ Recommended (Runtime) +
+ +
+ Optional (Runtime) +
+

+ Cdrdao-1.2.5, libdvdcss-1.4.3, + Cdrtools-3.02a09, and VCDImager +

+
+
+

+ Installation of Brasero +

+

+ First, fix a build issue that occurs with GCC-14: +

+
patch -Np1 -i ../brasero-3.12.3-upstream_fixes-1.patch
+

+ Install Brasero by running + the following commands: +

+
./configure --prefix=/usr                \
+            --enable-compile-warnings=no \
+            --enable-cxx-warnings=no     \
+            --disable-nautilus           &&
+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. +

+

+ --disable-nautilus: + This switch disables building the Nautilus extension since it + is incompatible with the gtk4 version of Nautilus. +

+

+ --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 +
+
+ 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 +

+
+
+
+
+
+
+
+

+ EOG-47.0 +

+
+
+
+
+
+

+ Introduction to EOG +

+

+ EOG is an application used + for viewing and cataloging image files on the GNOME Desktop. It also has basic editing + capabilities. +

+

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

+

+ Package Information +

+
+ +
+

+ EOG + Dependencies +

+
+ Required +
+

+ adwaita-icon-theme-48.1, + Exempi-2.6.6, gnome-desktop-44.3, libhandy-1.8.3, + libjpeg-turbo-3.0.1, libpeas-1.36.0, and shared-mime-info-2.4 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 and libportal-0.9.1 +

+
+
+

+ Installation of EOG +

+

+ Install EOG by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D libportal=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-48.3 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. +

+

+ -D libportal=false: + This parameter disables building EOG with support for flatpak + portals. Remove this parameter if you have libportal-0.9.1 + installed and wish to have support for flatpak portals. +

+

+ -D gtk_doc=true: Use this option + if GTK-Doc-1.34.0 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, /usr/lib/eog, + /usr/share/eog, /usr/share/gtk-doc/html/eog (optional), + and /usr/share/help/*/eog +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ eog +

+
+

+ is a fast and functional image viewer as well as an + image cataloging program. It has basic editing + capabilities +

+
+
+
+
+
+
+
+

+ Evince-48.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Evince Dependencies +

+
+ Required +
+

+ adwaita-icon-theme-48.1, + gsettings-desktop-schemas-48.0, + GTK-3.24.50, itstool-2.0.7, libhandy-1.8.3, libxml2-2.14.5, and + OpenJPEG-2.5.3 +

+
+ Recommended +
+ +
+ Optional +
+

+ Cups-2.4.12 (to enable printing if support + is built into GTK+ 3), + gnome-desktop-44.3, gspell-1.14.0, + gst-plugins-base-1.26.5, + Gi-DocGen-2025.4, libgxps-0.3.2, + libtiff-4.7.0, texlive-20250308 (or install-tl-unx), DjVuLibre, libspectre, + and Synctex +

+
+
+

+ Installation of Evince +

+

+ Install Evince by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+CPPFLAGS+=" -I/opt/texlive/2025/include -DNO_DEBUG" \
+meson setup --prefix=/usr                \
+            --buildtype=release          \
+            -D gtk_doc=false             \
+            --wrap-mode=nodownload       \
+            -D systemduserunitdir=no ..  &&
+ninja
+

+ If you have Gi-DocGen-2025.4 installed and wish to + build the API documentation for this package, issue: +

+
sed "/docs_dir/s@\$@ / 'evince-48.1'@" -i ../help/meson.build &&
+meson configure -D gtk_doc=true                                 &&
+ninja
+

+ This package does not have a working 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. +

+

+ CPPFLAGS+=" + -I/opt/texlive/2025/include": Make sure that + meson can find libkpathsea headers from TeXLive if it is + installed. This has no effect on systems without TeXLive + installed. +

+

+ --wrap-mode=nodownload: This + switch disables fetching any dependency: the build system + tries to fetch gi-docgen even if -D gtk_doc=false is passed. +

+

+ -D gtk_doc=false: + Allow building this package without Gi-DocGen-2025.4 + installed. If you have Gi-DocGen-2025.4 installed and + you wish to rebuild and install the API documentation, a + meson configure + command will reset this option. +

+

+ -D gspell=false: This switch + turns off support for the spell checking plugin. +

+

+ -D introspection=false: Use this + option if you don't have built GLib-2.84.4 with GObject + Introspection and don't wish to have introspection support + built into Evince. +

+

+ -D nautilus=false: This switch + disables building the Nautilus Plugin. Use this switch if + Nautilus is not installed. +

+

+ -D keyring=false: This switch + disables the use of libsecret. Use this switch if + libsecret is not installed. +

+

+ -D ps=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 and + libevview3.so +
+
+ Installed Directories: + /usr/{include,lib,share}/evince, + /usr/share/gtk-doc/html/{evince,libevdocument-3.0,libevview-3.0} + (optional), and /usr/share/help/*/evince +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ evince +

+
+

+ is a multiple format document viewer +

+
+

+ evince-previewer +

+
+

+ is an application that implements the printing + previewer +

+
+

+ evince-thumbnailer +

+
+

+ is a simple program used to create thumbnail images + of supported documents +

+
+
+
+
+
+
+
+

+ Evolution-3.56.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Evolution Dependencies +

+
+ Required +
+

+ adwaita-icon-theme-48.1, + evolution-data-server-3.56.2, + Gcr-4.4.0.1, gnome-autoar-0.4.5, shared-mime-info-2.4, and + WebKitGTK-2.48.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ geocode-glib-3.26.4, and GTK-Doc-1.34.0, clutter-gtk + (Contact Maps plugin), cmark, Glade, libchamplain + (Contact Maps plugin), libpst, libunity, + libytnef +

+
+
+

+ Installation of Evolution +

+

+ Install Evolution by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D SYSCONF_INSTALL_DIR=/etc  \
+      -D ENABLE_INSTALLED_TESTS=ON \
+      -D ENABLE_PST_IMPORT=OFF     \
+      -D ENABLE_YTNEF=OFF          \
+      -D ENABLE_CONTACT_MAPS=OFF   \
+      -D ENABLE_MARKDOWN=OFF       \
+      -D ENABLE_WEATHER=ON         \
+      -G Ninja .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D ENABLE_YTNEF=OFF: + This switch is used to disable the yTNEF library usage + because libytnef is not part + of BLFS. +

+

+ -D + ENABLE_PST_IMPORT=OFF: This switch is used to + disable the pst-import plugin because libpst is not part of BLFS. +

+

+ -D + ENABLE_CONTACT_MAPS=OFF: This switch disables + building the Contact Maps plugin. Remove this switch if you + have installed the necessary dependencies and wish to build + the Contact Maps plugin. +

+

+ -D + ENABLE_MARKDOWN=OFF: This switch allows building + without cmark. Remove this + switch if you need markdown support and you have installed + the necessary dependency. +

+

+ -D ENABLE_WEATHER=ON: + This switch allows building against libgweather-4.4.4. +

+

+ -D WITH_HELP=OFF: This switch + disables building the manual of this package. Use this switch + if you have not installed itstool-2.0.7. +

+

+ -D WITH_OPENLDAP=OFF: Use this + switch if you have not installed OpenLDAP-2.6.10. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + evolution +
+
+ Installed Libraries: + None +
+
+ 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 +

+
+
+
+
+
+
+
+

+ File-Roller-44.5 +

+
+
+
+
+
+

+ Introduction to File Roller +

+

+ File Roller is an archive + manager for GNOME with + support for tar, bzip2, bzip3, gzip, zip, jar, compress, + lzop, zstd, dmg, and many other archive formats. +

+

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

+
+

+ Note +

+

+ File Roller is only a + graphical interface to archiving utilities such as + tar and zip. +

+
+

+ Package Information +

+
+ +
+

+ File + Roller Dependencies +

+
+ Required +
+

+ GTK-4.18.6 and itstool-2.0.7 +

+
+ Recommended +
+ +
+ Optional (for the API documentation) +
+

+ Gi-DocGen-2025.4 +

+
+ Optional (Runtime) +
+

+ UnRar-7.1.10, libarchive-3.8.1, + and Zip-3.0 +

+
+
+

+ Installation of File Roller +

+

+ Install File Roller by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D packagekit=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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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. +

+

+ -D packagekit=false: + This switch disables the use of PackageKit which isn't + suitable for BLFS. +

+

+ -D api_docs=enabled: Use this + switch if you have Gi-DocGen-2025.4 installed and wish to + generate the API documentation. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-calculator-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Calculator Dependencies +

+
+ Required +
+

+ gtksourceview5-5.16.0, itstool-2.0.7, libadwaita-1.7.6, + libgee-0.20.8, and libsoup-3.6.5 +

+
+ Recommended +
+ +
+
+

+ Installation of GNOME Calculator +

+

+ Install GNOME Calculator by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-color-manager-3.36.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Color Manager Dependencies +

+
+ Required +
+

+ colord-1.4.8, GTK-3.24.50, itstool-2.0.7, and + Little + CMS-2.17 +

+
+ Recommended +
+ +
+ Optional +
+

+ DocBook-utils-0.6.14 (currently + causes build to fail) +

+
+
+

+ 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 setup --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 +

+
+
+
+
+
+
+
+

+ gnome-connections-48.0 +

+
+
+
+
+
+

+ Introduction to gnome-connections +

+

+ gnome-connections is a VNC + and RDP client for the GNOME + Desktop. +

+

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

+

+ Package Information +

+
+ +
+

+ gnome-connections Dependencies +

+
+ Required +
+

+ AppStream-1.0.6, FreeRDP-3.17.0, + gtk-vnc-1.5.0, itstool-2.0.7, libhandy-1.8.3, libsecret-0.21.7, + and Vala-0.56.18 +

+
+
+

+ Installation of gnome-connections +

+

+ Install gnome-connections by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gnome-connections +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/include/gnome-connections, + /usr/lib/gnome-connections, /usr/share/gnome-connections, + and /usr/share/help/*/gnome-connections +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gnome-connections +

+
+

+ is a remote desktop viewer for the GNOME Desktop +

+
+
+
+
+
+
+
+

+ gnome-disk-utility-46.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Disk Utility Dependencies +

+
+ Required +
+

+ gnome-settings-daemon-48.1, + itstool-2.0.7, libdvdread-6.1.3, + libhandy-1.8.3, libpwquality-1.4.5, libsecret-0.21.7, and UDisks-2.10.2 +

+
+ Optional +
+

+ appstream-glib-0.8.3 +

+
+
+

+ Installation of GNOME Disk Utility +

+

+ Install GNOME Disk Utility + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -Dlogind=libelogind .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -Dlogind=libelogind: + Tells the build system that the library used for the + login service is + libelogind.so instead of + libsystemd.so. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-maps-48.6 +

+
+
+
+
+
+

+ Introduction to GNOME Maps +

+

+ GNOME Maps is a map + application for GNOME. +

+

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

+

+ Package Information +

+
+ +
+

+ GNOME Maps Dependencies +

+
+ Required +
+

+ desktop-file-utils-0.28, + GeoClue-2.7.2, geocode-glib-3.26.4, Gjs-1.84.2, + libadwaita-1.7.6, libportal-0.9.1, libshumate-1.4.0, + libgweather-4.4.4, and rest-0.9.1 +

+
+
+

+ Installation of GNOME Maps +

+

+ Install GNOME Maps by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gnome-maps (symlink) +
+
+ 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 +

+
+
+
+
+
+
+
+

+ gnome-nettool-42.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ GNOME Nettool Dependencies +

+
+ Required +
+

+ GTK-3.24.50, itstool-2.0.7, and + libgtop-2.41.3 +

+
+ Runtime Dependencies +
+

+ BIND Utilities-9.20.12, + Nmap-7.98, + Net-tools-2.10, Traceroute-2.1.6, + and Whois-5.6.4 +

+
+
+

+ Installation of GNOME Nettool +

+

+ First, adapt GNOME Nettool + to changes in the ping, + ping6, and netstat utilities: +

+
patch -Np1 -i ../gnome-nettool-42.0-ping_and_netstat_fixes-1.patch
+

+ Then add a fix for newer versions of meson: +

+
sed -i '/merge_file/s/(.*/(/' data/meson.build
+

+ Install GNOME Nettool by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-power-manager-43.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Power Manager Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and UPower-1.90.9 +

+
+ Optional +
+

+ appstream-glib-0.8.3 and DocBook-utils-0.6.14 +

+
+
+

+ Installation of GNOME Power Manager +

+

+ Install GNOME Power Manager + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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-power-statistics +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gnome-power-statistics +

+
+

+ is used to visualize the power consumption of + laptop hardware +

+
+
+
+
+
+
+
+

+ gnome-screenshot-41.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Screenshot Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libcanberra-0.30 + (Compiled with GTK+3 support), and libhandy-1.8.3 +

+
+
+

+ Installation of GNOME Screenshot +

+

+ First, fix building with newer versions of meson: +

+
sed -i '/merge_file/{n;d}' data/meson.build
+

+ Install GNOME Screenshot by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-system-monitor-48.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME System Monitor Dependencies +

+
+ Required +
+

+ adwaita-icon-theme-48.1, + Gtkmm-4.18.0, itstool-2.0.7, libgtop-2.41.3, libadwaita-1.7.6, + and librsvg-2.61.0 +

+
+ Optional +
+

+ appstream-glib-0.8.3, desktop-file-utils-0.28, + Catch2, and + uncrustify +

+
+
+

+ Installation of GNOME System Monitor +

+

+ First, remove a hard dependency on Catch2, which is only used + if you are running the unit tests: +

+
find . -name meson.build | xargs sed -i -e '/catch2/d' &&
+sed -i '152,162d' src/meson.build
+

+ Install GNOME System Monitor + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            -D systemd=false    \
+            --buildtype=release \
+            ..                  &&
+ninja
+

+ This package comes with a test suite, but it requires the + external Catch2 dependency. If you have Catch2 installed, you + can omit the seds above and then run the tests with + ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D systemd=false: + This switch ensures that gnome-system-monitor does NOT use + the systemd process monitoring framework. Use this option if + you are on a SysV system. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gnome-terminal-3.56.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Terminal Dependencies +

+
+ Required +
+

+ DConf-0.40.0, + gsettings-desktop-schemas-48.0, + itstool-2.0.7, libhandy-1.8.3, + pcre2-10.45, and VTE-0.80.3 +

+
+ Recommended +
+ +
+ Optional +
+

+ appstream-glib-0.8.3 and desktop-file-utils-0.28 +

+
+
+

+ Installation of GNOME Terminal +

+

+ First, fix some deprecated schema entries: +

+
sed -i -r 's:"(/system):"/org/gnome\1:g' src/external.gschema.xml
+

+ Install GNOME Terminal by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install &&
+rm -v /usr/lib/systemd/user/gnome-terminal-server.service
+
+

+ 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 +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D search_provider=false: This + switch disables the “search gnome-shell” provider. Use + this option if you do not have gnome-shell installed. +

+

+ -D nautilus_extension=false: This + switch disables a dependency on the nautilus file manager. Use this option + if you do not have Nautilus installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + gnome-terminal +
+
+ Installed Libraries: + /usr/lib/nautilus/extensions-4/libterminal-nautilus.so + (Nautilus Extension) +
+
+ Installed Directories: + /usr/{lib,share/help/*}/gnome-terminal and + /usr/share/xdg-terminals +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gnome-terminal +

+
+

+ is the GNOME + Terminal Emulator +

+
+
+
+
+
+
+
+

+ gnome-weather-48.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GNOME Weather Dependencies +

+
+ Required +
+

+ GeoClue-2.7.2, Gjs-1.84.2, libadwaita-1.7.6, and libgweather-4.4.4 +

+
+ Optional +
+

+ appstream-glib-0.8.3 +

+
+
+

+ Installation of GNOME Weather +

+

+ Install GNOME Weather by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Gucharmap-16.0.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ Gucharmap Dependencies +

+
+ Required +
+

+ desktop-file-utils-0.28, + gsettings-desktop-schemas-48.0, + GTK-3.24.50, itstool-2.0.7, libarchive-3.8.1, and pcre2-10.45 +

+
+ Recommended +
+ +
+ Optional +
+

+ appstream-glib-0.8.3 and GTK-Doc-1.34.0 +

+
+
+

+ Installation of Gucharmap +

+
+

+ Note +

+

+ This package uses two unversioned downloads. You may want + to rename these to a versioned name, e.g. UCD-16.zip to make upgrades easier. +

+
+

+ Install Gucharmap by running + the following commands: +

+
mkdir build                   &&
+cd    build                   &&
+mkdir ucd                     &&
+pushd ucd                     &&
+  unzip ../../../UCD.zip      &&
+  cp -v ../../../Unihan.zip . &&
+popd                          &&
+
+meson setup --prefix=/usr       \
+            --strip             \
+            --buildtype=release \
+            -D ucd_path=./ucd   \
+            -D docs=false       \
+            ..                  &&
+ninja
+

+ This package does not have a test suite. +

+

+ 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. +

+

+ -D ucd_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. +

+

+ -D docs=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. +

+

+ -D gir=false: Use this if you + have not installed GLib-2.84.4 (with GObject Introspection). +

+

+ -D vapi=false: Use this if you + have not installed Vala-0.56.18. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + gucharmap +
+
+ Installed Library: + libgucharmap_2_90.so +
+
+ Installed Directories: + /usr/include/gucharmap-2.90 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ gucharmap +

+
+

+ is a Unicode character map and font viewer +

+
+

+ libgucharmap_2_90.so +

+
+

+ contains the Gucharmap API functions +

+
+
+
+
+
+
+
+

+ Seahorse-47.0.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Seahorse Dependencies +

+
+ Required +
+

+ Gcr-3.41.2, GnuPG-2.4.8, gpgme-2.0.0, itstool-2.0.7, + libhandy-1.8.3, libpwquality-1.4.5, libsecret-0.21.7, and Vala-0.56.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ Avahi-0.8 +

+
+ Runtime Dependency +
+

+ gnome-keyring-48.0 +

+
+
+

+ Installation of Seahorse +

+

+ First, fix a build failure that occurs with gpgme-2.x: +

+
sed -i "/GPGME_EVENT_NEXT_TRUSTITEM/d" pgp/seahorse-gpgme.c
+

+ Install Seahorse by running + the following commands: +

+
sed -i -r 's:"(/apps):"/org/gnome\1:' data/*.xml &&
+
+mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Snapshot-48.0.1 +

+
+
+
+
+
+

+ Introduction to Snapshot +

+

+ The Snapshot package + contains a program that takes pictures and videos from a + Webcam. +

+

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

+

+ Package Information +

+
+ +
+

+ Snapshot Dependencies +

+
+ Required +
+

+ libadwaita-1.7.6, gst-plugins-bad-1.26.5, and + rustc-1.89.0 +

+
+ Required at runtime +
+

+ libgstgtk4 from + gst-plugins-rs-1.26.5, pipewire-1.4.7, xdg-desktop-portal-gnome-48.0, + and Xdg-user-dirs-0.18 +

+
+
+

+ Installation of Snapshot +

+
+

+ Note +

+

+ This package takes a long time to build because LTO is + enabled, and the LTO pass is not parallelized. +

+
+

+ Install Snapshot by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + snapshot +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/snapshot +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ snapshot +

+
+

+ is a program used to take pictures and videos from + a Webcam +

+
+
+
+
+
+
+
+
+
+

+ 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.20.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libxfce4util Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (with GObject Introspection) +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Xfconf-4.20.0 +

+
+
+
+
+
+

+ Introduction to Xfconf +

+

+ Xfconf is the configuration + storage system for Xfce. +

+

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

+

+ Package Information +

+
+ +
+

+ Xfconf Dependencies +

+
+ Required +
+

+ libxfce4util-4.20.1 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and Vala-0.56.18 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libxfce4ui-4.20.2 +

+
+
+
+
+
+

+ Introduction to libxfce4ui +

+

+ The libxfce4ui package + contains GTK+ 3 widgets that + are used by other Xfce + applications. +

+

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

+

+ Package Information +

+
+ +
+

+ libxfce4ui Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and Xfconf-4.20.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0, libgtop-2.41.3, + libgudev-238, and Glade +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Exo-4.20.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Exo + Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libxfce4ui-4.20.2, and libxfce4util-4.20.1 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ 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) +

+
+
+
+
+
+
+
+

+ Garcon-4.20.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Garcon Dependencies +

+
+ Required +
+

+ libxfce4ui-4.20.2 and GTK-3.24.50 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libwnck-43.2 +

+
+
+
+
+
+

+ Introduction to libwnck +

+

+ The libwnck package contains + the Window Navigator Construction Kit. +

+

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

+

+ Package Information +

+
+ +
+

+ libwnck Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of libwnck +

+

+ Install libwnck by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D gtk_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 +

+
+
+
+
+
+
+
+

+ xfce4-dev-tools-4.20.0 +

+
+
+
+
+
+

+ Introduction to the Xfce4 Development Tools +

+

+ The Xfce4 Development Tools + are a collection of tools and macros for building some Xfce + applications. +

+

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

+

+ Package Information +

+
+ +
+

+ The + Xfce4 Development Tools Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+
+

+ Installation of the Xfce4 Development Tools +

+

+ Install the Xfce4 Development + Tools 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: + xdt-autogen and xdt-csource +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ libxfce4windowing-4.20.4 +

+
+
+
+
+
+

+ Introduction to libxfce4windowing +

+

+ The libxfce4windowing + package contains a windowing concept abstraction library for + X11 and Wayland. +

+

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

+

+ Package Information +

+
+ +
+

+ libxfce4windowing Dependencies +

+
+ Required +
+

+ GTK-3.24.50, libdisplay-info-0.3.0, libwnck-43.2 + and xfce4-dev-tools-4.20.0 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of libxfce4windowing +

+

+ Install libxfce4windowing by + running the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --enable-x11      \
+            --disable-debug   &&
+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: + libxfce4windowingui-0 and + libxfce4windowing-0.so +
+
+ Installed Directories: + /usr/include/xfce4/libxfce4windowing, + /usr/include/xfce4/libxfce4windowingui, + /usr/share/gtk-doc/html/libxfce4windowing, and + /usr/share/gtk-doc/html/libxfce4windowingui +
+
+
+
+
+
+
+
+

+ xfce4-panel-4.20.5 +

+
+
+
+
+
+

+ Introduction to Xfce4 Panel +

+

+ The Xfce4 Panel package + contains the Xfce4 Panel. +

+

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

+

+ Package Information +

+
+ +
+

+ Xfce4 Panel Dependencies +

+
+ Required +
+

+ Cairo-1.18.4, Exo-4.20.0, Garcon-4.20.0, libwnck-43.2, + and libxfce4windowing-4.20.4 +

+
+ Optional +
+

+ GTK-Doc-1.34.0 and libdbusmenu +

+

+ Editor 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 +

+
+
+
+
+
+
+
+

+ thunar-4.20.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Thunar Dependencies +

+
+ Required +
+

+ Exo-4.20.0 +

+
+ Required (Runtime) +
+

+ hicolor-icon-theme-0.18 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 (for documentation), + Gvfs-1.56.1 (for remote browsing and + automounting), libexif-0.6.25 and tumbler-4.20.0 + (runtime) +

+
+
+

+ Installation of Thunar +

+

+ First prevent the installation of an unneeded systemd file: +

+
sed -i 's/\tinstall-systemd_userDATA/\t/' Makefile.in
+
+

+ Install Thunar by running + the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --docdir=/usr/share/doc/thunar-4.20.4 &&
+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 Library: + libthunarx-3.so +
+
+ Installed Directories: + /etc/xdg/Thunar, + /usr/include/thunarx-3, /usr/lib/Thunar, + /usr/lib/thunarx-3, /usr/share/Thunar, + /usr/share/doc/thunar-4.20.4, and + /usr/share/gtk-doc/html/thunarx +
+
+
+
+

+ 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 behavior of Thunar +

+
+

+ libthunarx-3.so +

+
+

+ contains the Thunar extension library which + permits adding new features to the Thunar file manager +

+
+
+
+
+
+
+
+

+ thunar-volman-4.20.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Thunar Volume Manager Dependencies +

+
+ Required +
+

+ Exo-4.20.0 + and libgudev-238 +

+
+ Recommended +
+ +
+ Recommended Runtime Dependencies +
+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ tumbler-4.20.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Tumbler Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+ Optional +
+

+ cURL-8.15.0, FreeType-2.13.3, + gdk-pixbuf-2.42.12, gst-plugins-base-1.26.5, + GTK-Doc-1.34.0, libjpeg-turbo-3.0.1, libgsf-1.14.53, libpng-1.6.50, Poppler-25.08.0, FFmpegThumbnailer, + libgepub, + and libopenraw +

+
+
+

+ 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
+

+ Finally, remove a systemd unit which is useless on a SysV + system: +

+
rm -fv /usr/lib/systemd/user/tumblerd.service
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfce4-appfinder-4.20.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Appfinder Dependencies +

+
+ Required +
+

+ Garcon-4.20.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfce4-power-manager-4.20.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 or monitor sleep). 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Power Manager Dependencies +

+
+ Required +
+

+ libnotify-0.8.6, UPower-1.90.9, and + xfce4-panel-4.20.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ NetworkManager-1.54.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfce4-settings-4.20.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Settings Dependencies +

+
+ Required +
+

+ Exo-4.20.0 + and Garcon-4.20.0 +

+
+ Required (Runtime) +
+

+ gnome-icon-theme-3.12.0 or + lxde-icon-theme-0.5.1 +

+
+ Recommended +
+ +
+ Optional +
+

+ colord-1.4.8, libinput-1.29.0, and + UPower-1.90.9 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Xfdesktop-4.20.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfdesktop Dependencies +

+
+ Required +
+

+ Exo-4.20.0, libxfce4windowing-4.20.4, and + libwnck-43.2 +

+
+ Recommended +
+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Xfwm4-4.20.0 +

+
+
+
+
+
+

+ Introduction to Xfwm4 +

+

+ Xfwm4 is the window manager + for Xfce. +

+

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

+

+ Package Information +

+
+ +
+

+ Xfwm4 Dependencies +

+
+ Required +
+

+ libwnck-43.2 and libxfce4ui-4.20.2 +

+
+ Recommended +
+ +

+ Editor 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 behavior +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfce4-session-4.20.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Session Dependencies +

+
+ Required +
+

+ libwnck-43.2, libxfce4windowing-4.20.4, and + libxfce4ui-4.20.2 +

+
+ Recommended +
+ +
+ Required Runtime +
+

+ Xfdesktop-4.20.1 +

+
+
+

+ 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.16.2, GnuPG-2.4.8, hicolor-icon-theme-0.18, + OpenSSH-10.0p1, and xinit-1.4.4 +

+

+ 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 + runlevel 3, using xinit-1.4.4, or from runlevel 5, using a + Display Manager, such as lightdm-1.32.0. +

+

+ To start Xfce4 using + xinit-1.4.4, run the following commands: +

+
cat > ~/.xinitrc << "EOF"
+dbus-launch --exit-with-x11 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
+
+

+ Note +

+

+ You may wish to drop dbus-launch, e.g., just using + startxfce4 in ~/.xinitrc. However some capabilities such as + mounting or umounting file systems from a file manager will + not be possible, or the reboot option will be absent or + inoperative, among other problems. +

+
+

+ 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 +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ startxfce4 +

+
+

+ is a script responsible for starting an + Xfce session. +

+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ Chapter 36. Xfce Applications +

+
+
+
+
+

+ This is a small collection of optional applications that add + extra capabilities to your Xfce + desktop. +

+
+
+
+

+ Parole-4.20.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 + 12.4 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 +

+
+ +
+

+ Parole Dependencies +

+
+ Required +
+

+ dbus-glib-0.114, gst-plugins-base-1.26.5, + gst-plugins-good-1.26.5, and + libxfce4ui-4.20.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ GTK-Doc-1.34.0 +

+
+
+

+ Installation of Parole +

+

+ Install Parole by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ xfce4-terminal-1.1.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Terminal Dependencies +

+
+ Required +
+

+ libxfce4ui-4.20.2 and VTE-0.80.3 +

+
+
+

+ Installation of Xfce4 Terminal +

+

+ Install Xfce4 Terminal by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..      \
+      --prefix=/usr \
+      --buildtype=release &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + xfce4-terminal +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/xfce4/terminal +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ xfce4-terminal +

+
+

+ is a GTK+ 3 + terminal emulator +

+
+
+
+
+
+
+
+

+ Xfburn-0.8.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfburn Dependencies +

+
+ Required +
+

+ libburn-1.5.6, libisofs-1.5.6, and + libxfce4ui-4.20.2 +

+
+ Optional +
+

+ gst-plugins-base-1.26.5 and + Cdrdao-1.2.5 (runtime) +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ ristretto-0.13.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Ristretto Dependencies +

+
+ Required +
+

+ libexif-0.6.25 and libxfce4ui-4.20.2 +

+
+ Optional +
+

+ tumbler-4.20.0 (runtime) +

+
+
+

+ Installation of Ristretto +

+

+ Install ristretto by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + ristretto +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ ristretto +

+
+

+ is a fast and lightweight image viewer +

+
+
+
+
+
+
+
+

+ xfce4-notifyd-0.9.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ The + Xfce4 Notification Daemon Dependencies +

+
+ Required +
+

+ libnotify-0.8.6, libxfce4ui-4.20.2, libcanberra-0.30, SQLite-3.50.4, + xfce4-dev-tools-4.20.0, and + xfce4-panel-4.20.5 +

+
+
+

+ Installation of the Xfce4 Notification Daemon +

+

+ Install the Xfce4 Notification + Daemon by running the following commands: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-systemd &&
+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, to + be run in a graphical environment: +

+
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 +

+
+
+
+
+
+
+
+

+ xfce4-pulseaudio-plugin-0.5.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Xfce4 Pulseaudio Plugin Dependencies +

+
+ Required +
+

+ libnotify-0.8.6, PulseAudio-17.0, + and xfce4-panel-4.20.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ mpris2 +

+
+
+

+ Installation of the Xfce4 Pulseaudio Plugin +

+

+ Install the Xfce4 Pulseaudio + Plugin by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup  --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Libraries: + libpulseaudio-plugin.so +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+
+
+

+ Part X. LXQt +

+
+
+
+
+
+
+
+

+ Chapter 37. LXQt Desktop +

+
+
+
+
+

+ LXQt is an extremely fast-performing and energy-saving desktop + environment. +

+

+ LXQt is a Qt based Desktop Environment. It is focused + on being a classic desktop with a modern look and feel. It can + customize appearance everywhere. The panel(s) have plugins and + settings. It is Window Manager agnostic, has multi-language + support and standard keyboard shortcuts. LXQt uses less CPU and less RAM than most + other environments. It is especially useful for cloud computers + with low hardware specifications, such as netbooks, mobile + devices (e.g. MIDs) or older computers, but can be used with + modern hardware. +

+

+ Build LXQt core packages in the order presented in the book for + the easiest resolution of dependencies. +

+
+
+
+

+ LXQt + Desktop Pre-Install Instructions +

+
+
+
+
+
+

+ Notes about building LXQt dependencies +

+

+ To build LXQt, the following steps are recommended: +

+
+
    +
  1. +

    + First, build the whole Xorg Chapter, including Wayland support + with required and recommended dependencies. Test that + the environment works with twm as the window manager. + With experience, some of the packages can be omitted, + but that is not recommended for first time users. +

    +
  2. +
  3. +

    + Second, build the required parts of Qt. The full + package, Qt-6.9.2 is quite long and has a lot of + dependencies. +

    +
  4. +
  5. +

    + Finally build the LXQt desktop using the pages below in + order. The packages in the applications section are + optional, but as a minimum, qterminal-2.2.1 is recommended. +

    +
  6. +
+
+
+
+
+
+
+

+ KF6, Plasma, and Misc Dependencies +

+
+
+
+
+
+
+
+

+ kwindowsystem-6.17.0 for lxqt +

+
+
+
+
+
+

+ Introduction to kwindowsystem +

+

+ The kwindowsystem provides + information about, and allows interaction with, the windowing + system. It provides a high level API that is windowing system + independent and has platform specific implementations. +

+

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

+
+

+ Important +

+

+ This package is extracted from the KF6 set of packages. If + KDE + Frameworks-6.17.0 is built, do NOT also build this package + as presented here. +

+
+

+ Package Information +

+
+ +
+

+ kwindowsystem Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0, + plasma-wayland-protocols-1.18.0, + Qt-6.9.2, + and Xorg Libraries +

+
+
+

+ Installation of kwindowsystem +

+

+ Install kwindowsystem by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_TESTING=OFF         \
+      -W no-dev ..                 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKF6WindowSystem.so +
+
+ Installed Directories: + /usr/include/KF6, + /usr/lib/cmake/KF6WindowSystem, /usr/lib/plugins/kf6, + /usr/lib/qml/org/kde, and + /usr/share/qlogging-categories6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libKF6WindowSystem.so +

+
+

+ contains the KF6 + Windowing API functions +

+
+
+
+
+
+
+
+

+ kconfig-6.17.0 + for lxqt +

+
+
+
+
+
+

+ Introduction to kconfig +

+

+ The kconfig package provides + access to configuration files. +

+

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

+
+

+ Important +

+

+ This package is extracted from the KF6 set of packages. If + KDE + Frameworks-6.17.0 is built, do NOT also build this package + as presented here. +

+
+

+ Package Information +

+
+ +
+

+ kconfig Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 + and Qt-6.9.2 +

+
+
+

+ Installation of kconfig +

+

+ Install kconfig by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+      -D KDE_INSTALL_USE_QT_SYS_PATHS=ON  \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + kreadconfig6 and + kwriteconfig6 +
+
+ Installed Library: + libKF6ConfigCore.so, + libKF6ConfigGui.so, and libKF6ConfigQml.so +
+
+ Installed Directories: + /usr/include/KF6/{KConfigCore,KConfig,KConfigQml,KConfigGui}, + /usr/lib/cmake/KF6Config, /usr/libexec/kf6, and + $QT6DIR/qml/org/kde/config +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ kreadconfig6 +

+
+

+ reads from a configuration file using the KConfig + interface +

+
+

+ kwriteconfig6 +

+
+

+ writes to a configuration file using the KConfig + interface +

+
+

+ libKF6ConfigCore.so +

+
+

+ contains the core configuration library for KF6 +

+
+

+ libKF6ConfigGui.so +

+
+

+ contains functions for a GUI to interface with + KConfig +

+
+

+ libKF6ConfigQml.so +

+
+

+ contains a QML interface to KConfig +

+
+
+
+
+
+
+
+

+ solid-6.17.0 for + lxqt +

+
+
+
+
+
+

+ Introduction to solid +

+

+ Solid is a device + integration framework. It provides a way of querying and + interacting with hardware independently of the underlying + operating system. +

+

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

+
+

+ Important +

+

+ This package is extracted from the KF6 set of packages. If + KDE + Frameworks-6.17.0 is built, do NOT also build this package + as presented here. +

+
+

+ Package Information +

+
+ +
+

+ solid Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 + and Qt-6.9.2 +

+
+ Optional (runtime) +
+

+ UDisks-2.10.2, UPower-1.90.9, libimobiledevice, and + media-player-info +

+
+
+

+ Installation of solid +

+

+ Install solid by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+      -D KDE_INSTALL_USE_QT_SYS_PATHS=ON  \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + solid-hardware6 +
+
+ Installed Library: + libKF6Solid.so +
+
+ Installed Directories: + /usr/include/KF6/Solid and + /usr/lib/cmake/KF6Solid +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ solid-hardware6 +

+
+

+ queries hardware information from the system +

+
+

+ libKF6Solid.so +

+
+

+ provides a way of querying and interacting with + hardware independently of the underlying operating + system +

+
+
+
+
+
+
+
+

+ kidletime-6.17.0 for lxqt +

+
+
+
+
+
+

+ Introduction to kidletime +

+

+ KIdleTime is used to report the idle time of users and the + system. It is useful not only for determining the current + idle time of the PC, but also for getting notified upon idle + time events, such as custom timeouts or user activity. +

+

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

+
+

+ Important +

+

+ This package is extracted from the KF6 set of packages. If + KDE + Frameworks-6.17.0 is built, do NOT also build this package + as presented here. +

+
+

+ Package Information +

+
+ +
+

+ kidletime Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0, + plasma-wayland-protocols-1.18.0, + and Qt-6.9.2 +

+
+
+

+ Installation of kidletime +

+

+ Install kidletime by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+      -D KDE_INSTALL_USE_QT_SYS_PATHS=ON  \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKF6IdleTime.so +
+
+ Installed Directories: + /usr/include/KF6/KIdleTime, + /usr/lib/cmake/KF6IdleTime, and + $QT6DIR/lib/plugins/kf6/org.kde.kidletime.platforms +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libKF6IdleTime.so +

+
+

+ contains the KDE API for idle time reports +

+
+
+
+
+
+
+
+

+ kwayland-6.4.4 for lxqt +

+
+
+
+
+
+

+ Introduction to kwayland +

+

+ kwayland is a Qt-style API + to interact with the wayland-client and wayland-server API. +

+

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

+
+

+ Important +

+

+ This package is extracted from the KF6 set of packages. If + KDE + Frameworks-6.17.0 is built, do NOT also build this package + as presented here. +

+
+

+ Package Information +

+
+ +
+

+ kwayland Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0, + Mesa-25.1.8 (built with Wayland-1.24.0 + support), plasma-wayland-protocols-1.18.0, + and Qt-6.9.2 +

+
+
+

+ Installation of kwayland +

+

+ Install kwayland by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+      -D KDE_INSTALL_USE_QT_SYS_PATHS=ON  \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libKWaylandClient.so +
+
+ Installed Directories: + /usr/include/KWayland and + /usr/lib/cmake/KWayland +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libKWaylandClient.so +

+
+

+ contains the wayland-client Qt-style + wrapper library +

+
+
+
+
+
+
+
+

+ libkscreen-6.4.4 for lxqt +

+
+
+
+
+
+

+ Introduction to libkscreen +

+

+ The libkscreen package + contains the KDE Screen Management library. +

+

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

+
+

+ Important +

+

+ This package is extracted from the plasma set of packages. + If Plasma-6.4.4 is built, do + NOT also build + this package as presented here. +

+
+

+ Package Information +

+
+ +
+

+ libkscreen Dependencies +

+
+ Required +
+

+ kwayland-6.4.4 for lxqt, + plasma-wayland-protocols-1.18.0, + and Qt-6.9.2 +

+
+
+

+ Installation of libkscreen +

+

+ Install libkscreen by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_INSTALL_LIBEXECDIR=libexec \
+      -D KDE_INSTALL_USE_QT_SYS_PATHS=ON  \
+      -D BUILD_TESTING=OFF                \
+      -W no-dev ..                        &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ Next, remove a systemd unit which serves no purpose on a SysV + system as the root user: +

+
rm -v /usr/lib/systemd/user/plasma-kscreen.service
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + kscreen-doctor +
+
+ Installed Library: + libKF6Screen.so and + libKF6ScreenDpms.so +
+
+ Installed Directories: + /usr/lib/cmake/KF6Screen, + /usr/include/KF6/KScreen, and + $QT6DIR/lib/plugins/kf6/kscreen +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ kscreen-doctor +

+
+

+ allows modifying the screen setup from the command + line +

+
+

+ libKF6Screen.so +

+
+

+ contains the KDE Screen Management library +

+
+

+ libKF6ScreenDpms.so +

+
+

+ contains API functions for handling DPMS +

+
+
+
+
+
+
+
+

+ layer-shell-qt-6.4.4 for lxqt +

+
+
+
+
+
+

+ Introduction to layer-shell-qt +

+

+ This component is meant for applications to be able to easily + use clients based on a "wlr-layer-shell" protocol. Clients + can use this interface to assign the surface_layer role to + wl_surfaces. Such surfaces are assigned to a "layer" of the + output and rendered with a defined z-depth respective to each + other. +

+

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

+
+

+ Important +

+

+ This package is extracted from the plasma set of packages. + If Plasma-6.4.4 is built, do + NOT also build + this package as presented here. +

+
+

+ Package Information +

+
+ +
+

+ layer-shell-qt Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0 + and Qt-6.9.2 +

+
+
+

+ Installation of layer-shell +

+

+ Install layer-shell-qt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -W no-dev ..                 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libLayerShellQtInterface.so +
+
+ Installed Directories: + /usr/lib/qml/org/kde/layershell and + /usr/include/LayerShellQt +
+
+
+
+
+
+
+
+

+ muparser-2.3.5 +

+
+
+
+
+
+

+ Introduction to muparser +

+

+ The muparser package is a + fast math parser library for C and C++. +

+

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

+

+ Package Information +

+
+ +
+

+ muparser Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of muparser +

+

+ Install muparser by running + the following commands: +

+
mkdir -v build &&
+cd       build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ To test the results, issue: make test. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libmuparser.so +
+
+ Installed Directories: + /usr/lib/cmake/muparser +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ muparser.so +

+
+

+ provides a fast math parser library for C and C++ +

+
+
+
+
+
+
+
+

+ LXQt Desktop Components +

+
+
+
+
+
+
+
+

+ lxqt-build-tools-2.2.1 +

+
+
+
+
+
+

+ Introduction to lxqt-build-tools +

+

+ The lxqt-build-tools package + provides several tools needed to build LXQt itself as well as + other components maintained by the LXQt project. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-build-tools Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and Qt-6.9.2 +

+
+
+

+ Installation of lxqt-build-tools +

+

+ Install lxqt-build-tools by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      .. &&
+
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install &&
+rm -f /usr/share/cmake/lxqt2-build-tools/find-modules/FindXCB.cmake
+
+
+

+ Command Explanations +

+

+ rm -f + /usr/share/cmake/lxqt2-build-tools/find-modules/FindXCB.cmake: + If it exists, remove a cmake file from a previous build that + is no longer used. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt2-transupdate +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/cmake/lxqt2-build-tools +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt2-transupdate +

+
+

+ updates translations for LXQt components +

+
+
+
+
+
+
+
+

+ libdbusmenu-lxqt-0.3.0 +

+
+
+
+
+
+

+ Introduction to libdbusmenu-lxqt +

+

+ The libdbusmenu-lxqt package + provides a Qt implementation of the DBusMenu protocol. +

+

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

+

+ Package Information +

+
+ +
+

+ libdbusmenu-lxqt Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Optional +
+

+ Doxygen-1.14.0 and qjson +

+
+
+

+ Installation of libdbusmenu-lxqt +

+

+ Install libdbusmenu-lxqt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -W no-dev ..                 &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D WITH_DOC=ON: Use + this switch if you ve installed Doxygen-1.14.0 and want + to build the optional documentation. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Library: + libdbusmenu-lxqt.so +
+
+ Installed Directory: + /usr/include/dbusmenu-lxqt and + /usr/lib/cmake/dbusmenu-lxqt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libdbusmen-lxqt.so +

+
+

+ contains a Qt implementation of the DBusMenu + protocol, customized for LXQt +

+
+
+
+
+
+
+
+

+ libqtxdg-4.2.0 +

+
+
+
+
+
+

+ Introduction to libqtxdg +

+

+ The libqtxdg package + contains a Qt implementation of the freedesktop.org XDG + specifications. +

+

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

+

+ Package Information +

+
+ +
+

+ libqtxdg Dependencies +

+
+ Required +
+

+ CMake-4.1.0, lxqt-build-tools-2.2.1. and + Qt-6.9.2 +

+
+ Optional (runtime) +
+

+ GTK-3.24.50 (for gtk-update-icon-cache) and + xterm-401 +

+
+
+

+ Installation of libqtxdg +

+

+ Install libqtxdg by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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 Library: + libQt6Xdg.so, + libQt6XdgIconLoader.so, and libQt6XdgIconPlugin.so (in + $QT6DIR/lib) +
+
+ Installed Directories: + /usr/include/{qt6xdg,qt6xdgiconloader} and + /usr/share/cmake/{qt6xdg,qt6xdgiconloader} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ libQt6Xdg.so +

+
+

+ contains an implementation of the XDG specification + for Qt +

+
+

+ libQt6XdgIconLoader.so +

+
+

+ contains the XDG Icon Loader for Qt +

+
+

+ libQt6XdgIconPlugin +

+
+

+ contains a plugin for loading icons using Qt +

+
+
+
+
+
+
+
+

+ lxqt-menu-data-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-menu-data +

+

+ The lxqt-menu-data package + contains compliant menu files for LXQt. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-menu-data Dependencies +

+
+ Required +
+

+ lxqt-build-tools-2.2.1 +

+
+
+

+ Installation of lxqt-menu-data +

+

+ Install lxqt-menu-data by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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 Library: + None +
+
+ Installed Directories: + /etc/xdg/menus, + /usr/share/desktop-directories, and + /usr/share/cmake/lxqt-menu-data +
+
+
+
+
+
+
+
+

+ liblxqt-2.2.0 +

+
+
+
+
+
+

+ Introduction to liblxqt +

+

+ The liblxqt is the core + utility library for all LXQt + components. +

+

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

+

+ Package Information +

+
+ +
+

+ liblxqt Dependencies +

+
+ Required +
+

+ libqtxdg-4.2.0, kwindowsystem-6.17.0 for + lxqt, and polkit-qt-0.200.0 +

+
+
+

+ Installation of liblxqt +

+

+ Install liblxqt by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-backlight_backend +
+
+ Installed Library: + liblxqt.so +
+
+ Installed Directories: + /usr/include/lxqt, + /usr/share/cmake/lxqt, and /usr/share/lxqt/liblxqt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lxqt-backlight_backend +

+
+

+ sets the backlight level for a display +

+
+

+ liblxqt.so +

+
+

+ contains a variety of utility functions for LXQt +

+
+
+
+
+
+
+
+

+ libsysstat-1.1.0 +

+
+
+
+
+
+

+ Introduction to libsysstat +

+

+ The libsysstat package + contains a library used to query system information and + statistics. +

+

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

+

+ Package Information +

+
+ +
+

+ libsysstat Dependencies +

+
+ Required +
+

+ lxqt-build-tools-2.2.1 +

+
+
+

+ Installation of libsysstat +

+

+ Install libsysstat by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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 Library: + libsysstat-qt6.so +
+
+ Installed Directories: + /usr/include/sysstat-qt6 and + /usr/share/cmake/sysstat-qt6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libsysstat-qt6.so +

+
+

+ contains functions to query system information and + statistics +

+
+
+
+
+
+
+
+

+ qtxdg-tools-4.2.0 +

+
+
+
+
+
+

+ Introduction to qtxdg-tools +

+

+ The qtxdg-tools contains a + CLI MIME tool for handling file associations and opening + files with their default applications. +

+

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

+

+ Package Information +

+
+ +
+

+ qtxdg-tools Dependencies +

+
+ Required +
+

+ libqtxdg-4.2.0 +

+
+
+

+ Installation of qtxdg-tools +

+

+ Install qtxdg-tools by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + qtxdg-mat +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/cmake/qtxdg-tools +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ qtxdg-mat +

+
+

+ queries and modifies defaults for applications, + such as the default terminal, web browser, email + client, and file manager +

+
+
+
+
+
+
+
+

+ libfm-extra-1.3.2 +

+
+
+
+
+
+

+ Introduction to libfm-extra +

+

+ The libfm-extra package + contains a library and other files required by the + menu-cache-gen + program in /usr/bin/libexec installed by menu-cache-1.1.1. +

+

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

+

+ Package Information +

+
+ +
+

+ libfm-extra Dependencies +

+
+ Required +
+

+ GLib-2.84.4 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ menu-cache-1.1.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Menu + Cache Dependencies +

+
+ Required +
+

+ GTK-Doc-1.34.0 and libfm-extra-1.3.2 +

+
+ Optional +
+

+ xdg-utils-1.2.1 +

+
+
+

+ Installation of Menu Cache +

+
sh autogen.sh                              &&
+./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 +

+
+
+
+
+
+
+
+

+ libfm-qt-2.2.0 +

+
+
+
+
+
+

+ Introduction to libfm-qt +

+

+ libfm-qt is the Qt port of + libfm, a library providing components to build desktop file + managers. In LXQt, libfm-qt also handles desktop icons and + backgrounds. +

+

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

+

+ Package Information +

+
+ +
+

+ libfm-qt Dependencies +

+
+ Required +
+

+ CMake-4.1.0, libexif-0.6.25, + menu-cache-1.1.1, and Qt-6.9.2 +

+
+
+

+ Installation of libfm-qt +

+

+ Install libfm-qt by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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 Library: + libfm-qt6.so +
+
+ Installed Directories: + /usr/include/libfm-qt6, + /usr/share/cmake/fm-qt6, and /usr/share/libfm-qt6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libfm-qt6.so +

+
+

+ contains functions to implement a graphical file + manager as well as set desktop icons and + backgrounds +

+
+
+
+
+
+
+
+

+ lxqt-globalkeys-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-globalkeys +

+

+ The lxqt-globalkeys package + contains a daemon used to register global keyboard shortcuts + as well as an editor for keyboard shortcuts. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-globalkeys Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of lxqt-globalkeys +

+

+ Install lxqt-globalkeys by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-config-globalkeyshortcuts and + lxqt-globalkeysd +
+
+ Installed Libraries: + liblxqt-globalkeys.so and + liblxqt-globalkeys-ui.so +
+
+ Installed Directories: + /usr/include/lxqt-globalkeys{,-ui} + and /usr/share/cmake/lxqt-globalkeys{,-ui} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ lxqt-config-globalkeyshortcuts +

+
+

+ is an editor for keyboard shortcuts +

+
+

+ lxqt-globalkeysd +

+
+

+ is the global keyboard shortcut daemon +

+
+

+ lxqt-globalkeys.so +

+
+

+ contains functions to register keyboard shortcuts +

+
+

+ liblxqt-globalkeys-ui.so +

+
+

+ contains functions that allow a UI to set keyboard + shortcuts +

+
+
+
+
+
+
+
+

+ lxqt-qtplugin-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-qtplugin +

+

+ The lxqt-qtplugin package + provides an LXQt + Qt platform integration + plugin. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-qtplugin Dependencies +

+
+ Required +
+

+ libfm-qt-2.2.0, liblxqt-2.2.0, and + libdbusmenu-lxqt-0.3.0 +

+
+
+

+ Installation of lxqt-qtplugin +

+

+ Install lxqt-qtplugin by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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 Library: + libqtlxqt.so (in + $QT6DIR/plugins/platformthemes) +
+
+ Installed Directory: + $QT6DIR/plugins/platformthemes +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libqtlxqt.so +

+
+

+ contains the LXQt QT plugin loader +

+
+
+
+
+
+
+
+

+ lxqt-panel-2.2.2 +

+
+
+
+
+
+

+ Introduction to lxqt-panel +

+

+ The lxqt-panel package + contains a lightweight X11 desktop panel. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-panel Dependencies +

+
+ Required +
+

+ layer-shell-qt-6.4.4 for + lxqt, libdbusmenu-lxqt-0.3.0, + liblxqt-2.2.0, lxqt-globalkeys-2.2.0, lxqt-menu-data-2.2.0, solid-6.17.0 for lxqt, and + menu-cache-1.1.1 +

+
+ Recommended +
+ +
+
+

+ Installation of lxqt-panel +

+

+ Install lxqt-panel by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt-panel +
+
+ Installed Libraries: + several plugins under + /usr/lib/lxqt-panel +
+
+ Installed Directories: + /usr/lib/lxqt-panel and + /usr/share/lxqt/panel +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-panel +

+
+

+ is a lightweight Qt6 based panel for the + LXQt Desktop +

+
+
+
+
+
+
+
+

+ pcmanfm-qt-2.2.0 +

+
+
+
+
+
+

+ Introduction to pcmanfm-qt +

+

+ The pcmanfm-qt is a file + manager and desktop icon manager (a Qt port of pcmanfm and libfm). +

+

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

+

+ Package Information +

+
+ +
+

+ pcmanfm-qt Dependencies +

+
+ Required +
+

+ layer-shell-qt-6.4.4 for + lxqt, liblxqt-2.2.0, libfm-qt-2.2.0, and + lxqt-menu-data-2.2.0 +

+
+ Recommended +
+ +
+
+

+ Installation of pcmanfm-qt +

+

+ If libLayerShellQtInterface.so is installed in /opt, help + this package find it. As the root user: +

+
if [   -e /opt/kf6/lib/libLayerShellQtInterface.so -a \
+     ! -e /usr/lib/libLayerShellQtInterface.so ]; then
+
+    ln -sv /opt/kf6/lib/libLayerShellQtInterface.so \
+           /usr/lib/libLayerShellQtInterface.so
+fi
+

+ Install pcmanfm-qt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ To make pcmanfm-qt easier to + find in menus, adjust the .desktop file. Again, as the + root user: +

+
sed -e '/Categories=/s/=/=System;FileTools;/' \
+    -e '/Name=/s/=.*/=File Manager PCManFM-Qt'/ \
+    -i /usr/share/applications/pcmanfm-qt.desktop
+
+
+

+ Contents +

+
+
+
+ Installed Program: + pcmanfm-qt +
+
+ Installed Library: + None +
+
+ Installed Directories: + /usr/share/pcmanfm-qt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ pcmanfm-qt +

+
+

+ is a file manager and desktop icon manager +

+
+
+
+
+
+
+
+

+ lxqt-powermanagement-2.2.1 +

+
+
+
+
+
+

+ Introduction to lxqt-powermanagement +

+

+ The lxqt-powermanagement + package provides the power management module for LXQt. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-powermanagement Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0, kidletime-6.17.0 for lxqt, + solid-6.17.0 for lxqt, and + UPower-1.90.9 +

+
+
+

+ Installation of lxqt-powermanagement +

+

+ Install lxqt-powermanagement + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-config-powermanagement and + lxqt-powermanagement +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lxqt-config-powermanagement +

+
+

+ is the lxqt-powermanagement + GUI configuration tool +

+
+

+ lxqt-powermanagement +

+
+

+ is the LXQt power + management module +

+
+
+
+
+
+
+
+

+ lxqt-runner-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-runner +

+

+ The lxqt-runner package + provides a tool used to launch programs quickly by typing + their names. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-runner Dependencies +

+
+ Required +
+

+ lxqt-globalkeys-2.2.0, kwindowsystem-6.17.0 for + lxqt, and muparser-2.3.5 +

+
+
+

+ Installation of lxqt-runner +

+

+ Install lxqt-runner by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Using lxqt-runner +

+

+ To use lxqt-runner, + simultaneously press the Alt-F2 keys. A dialog window appears + in the top center of the screen. When you start typing a + command, a list of possible matches appears and changes as + you keep typing. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt-runner +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-runner +

+
+

+ launches a graphical dialog box for quickly running + a program +

+
+
+
+
+
+
+
+

+ lxqt-themes-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-themes +

+

+ The lxqt-themes package + provides a number of graphics files and themes for the + LXQt desktop. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-themes Dependencies +

+
+ Required +
+

+ lxqt-build-tools-2.2.1 +

+
+
+

+ Installation of lxqt-themes +

+

+ Install lxqt-themes by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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: + None +
+
+ Installed Directories: + /usr/share/lxqt/{graphics,themes,palettes,wallpapers} +
+
+
+
+
+
+
+
+

+ lxqt-admin-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-admin +

+

+ The lxqt-admin package + provides two GUI tools to adjust settings of the operating + system LXQt is running on. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-admin Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 and Polkit-126 +

+
+
+

+ Installation of lxqt-admin +

+

+ Install lxqt-admin by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt-admin-time, lxqt-admin-user, + and lxqt-admin-user-helper +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lxqt-admin-time +

+
+

+ is a GUI to adjust the current time and date +

+
+

+ lxqt-admin-user +

+
+

+ is a GUI to manage users and groups +

+
+
+
+
+
+
+
+

+ lxqt-about-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-about +

+

+ The lxqt-about package + provides the standalone LXQt + “About” + dialog. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-about Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of lxqt-about +

+

+ Install lxqt-about by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt-about +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-about +

+
+

+ is the LXQt + “About” dialog +

+
+
+
+
+
+
+
+

+ lxqt-config-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-config +

+

+ The lxqt-config package + provides the LXQt + Configuration Center. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-config Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0, kconfig-6.17.0 for lxqt, + libkscreen-6.4.4 for lxqt, + and xorg-libinput-1.5.0 +

+
+
+

+ Installation of lxqt-config +

+

+ Install lxqt-config by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-config, + lxqt-config-appearance, lxqt-config-brightness, + lxqt-config-file-associations, lxqt-config-input, + lxqt-config-locale, and lxqt-config-monitor +
+
+ Installed Library: + liblxqt-config-cursor.so +
+
+ Installed Directories: + /usr/lib/lxqt-config +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ lxqt-config +

+
+

+ is the LXQt + Configuration Center +

+
+

+ lxqt-config-appearance +

+
+

+ is used to change system themes, icon themes, and + fonts used by applications in an LXQt session +

+
+

+ lxqt-config-brightness +

+
+

+ configures the brightness setting of a monitor +

+
+

+ lxqt-config-file-associations +

+
+

+ is used to associate filetypes with programs +

+
+

+ lxqt-config-input +

+
+

+ is used to configure input devices, setting options + such as the mouse speed, the cursor, the keyboard + speed, and the keyboard layout +

+
+

+ lxqt-config-locale +

+
+

+ configures the locale used in LXQt sessions +

+
+

+ lxqt-config-monitor +

+
+

+ is a graphical frontend to xrandr that configures + monitors on a system +

+
+

+ liblxqt-config-cursor.so +

+
+

+ contains the liblxqt-config-cursor API + functions +

+
+
+
+
+
+
+
+

+ lxqt-policykit-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-policykit +

+

+ The lxqt-policykit package + is the LXQt PolicyKit agent. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-policykit Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 and polkit-qt-0.200.0 +

+
+
+

+ Installation of lxqt-policykit +

+

+ Install lxqt-policykit by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + lxqt-policykit-agent +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/lxqt/translations/lxqt-policykit-agent +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-policykit-agent +

+
+

+ is the LXQt + PolicyKit agent +

+
+
+
+
+
+
+
+

+ lxqt-sudo-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-sudo +

+

+ The lxqt-sudo package is a + graphical front end to sudo + and su respectively. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-sudo Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of lxqt-sudo +

+

+ Install lxqt-sudo by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxdoas (symlinkk to lxqt-sudo), + lxqt-sudo, lxsu (symlinkk to lxqt-sudo), and lxsudo + (symlinkk to lxqt-sudo) +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/lxqt/translations/lxqt-sudo +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ lxdoas +

+
+

+ is a graphical frontend for doas +

+
+

+ lxqt-sudo +

+
+

+ is a graphical frontend for sudo +

+
+

+ lxsudo +

+
+

+ is a graphical frontend for sudo +

+
+

+ lxsu +

+
+

+ is a graphical frontend for su +

+
+
+
+
+
+
+
+

+ lxqt-openssh-askpass-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-openssh-askpass +

+

+ The lxqt-openssh-askpass + package is a GUI to query credentials on behalf of other + programs. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-openssh-askpass Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of lxqt-openssh-askpass +

+

+ Install lxqt-openssh-askpass + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-openssh-askpass +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/lxqt/translations/lxqt-openssh-askpass +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-config-openssh-askpass +

+
+

+ queries a user for credentials on behalf of another + program +

+
+
+
+
+
+
+
+

+ lxqt-session-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-session +

+

+ The lxqt-session package + contains the default session manager for LXQt. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-session Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0, qtxdg-tools-4.2.0, and Xdg-user-dirs-0.18 +

+
+
+

+ Installation of lxqt-session +

+

+ Install lxqt-session by + running the following commands: +

+
sed -e '/TryExec/s|=|=/usr/bin/|' \
+    -i xsession/lxqt.desktop.in &&
+
+mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ sed -e + '/TryExec/s|=|='/usr'/bin/|' -i + xsessions/lxqt.desktop.in: If you are using a + display manager, the full path of the “TryExec” directive + has to be given so that the LXQt desktop will appear in the sessions + list. +

+
+
+

+ Configuring lxqt-session +

+

+ Window Managers other than openbox-3.6.1 may be used, e.g. + Xfwm4-4.20.0. Please note that IceWM-3.8.2 is + not a good substitute. Fluxbox does work, although in this + context (with lxqt-config-2.2.0), openbox-3.6.1 is + better. The configuration file /usr/share/lxqt/windowmanagers.conf comes + with many examples of Window Managers and the ones which are + installed will appear in a drop down list of lxqt-config-session. For + the ones not included in /usr/share/lxqt/windowmanagers.conf, you + can use lxqt-config-session's + "search" button, e.g. for Fluxbox-1.3.7, navigating through + the file system until you can choose fluxbox. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-config-session, lxqt-leave, + lxqt-session, and startlxqt +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/lxqt/translations/lxqt-{leave,config-session,session} +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ lxqt-config-session +

+
+

+ is a GUI configuration tool for lxqt-session +

+
+

+ lxqt-leave +

+
+

+ is a graphical dialog to terminate the session +

+
+

+ lxqt-session +

+
+

+ is a lightweight X session manager +

+
+

+ startlxqt +

+
+

+ is used to start the desktop session for + LXQt +

+
+
+
+
+
+
+
+

+ xdg-desktop-portal-lxqt-1.2.0 +

+
+
+
+
+
+

+ Introduction to xdg-desktop-portal-lxqt +

+

+ xdg-desktop-portal-lxqt is a + backend for xdg-desktop-portal, that is using the Qt + library. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-desktop-portal-lxqt Dependencies +

+
+ Required +
+

+ libfm-qt-2.2.0, kwindowsystem-6.17.0 for + lxqt, and xdg-desktop-portal-1.20.3 (at + runtime) +

+
+
+

+ Installation of xdg-desktop-portal-lxqt +

+

+ Install xdg-desktop-portal-lxqt by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + xdg-desktop-portal-lxqt (in + /usr/libexec) +
+
+ Installed Library: + None +
+
+ Installed Directory: + /usr/share/xdg-desktop-portal (if + no other xdg-desktop-portal backend is + installed) +
+
+
+
+
+
+
+
+

+ obconf-qt-0.16.5 +

+
+
+
+
+
+

+ Introduction to obconf-qt +

+

+ The obconf-qt package is a + Qt-based configuration tool for Openbox. +

+

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

+

+ Package Information +

+
+ +
+

+ obconf-qt Dependencies +

+
+ Required +
+

+ hicolor-icon-theme-0.18, + lxqt-build-tools-2.2.1, + openbox-3.6.1, and Qt-6.9.2 +

+
+
+

+ Installation of obconf-qt +

+

+ Install obconf-qt by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + obconf-qt +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ obconf-qt +

+
+

+ is a Qt-based configuration tool for Openbox +

+
+
+
+
+
+
+
+

+ LXQt + Desktop Final Instructions +

+
+
+
+
+
+

+ Post-Install Instructions +

+

+ Please follow these instructions before starting LXQt for the first time. +

+

+ Dependencies to Start LXQt +

+
+ Required +
+

+ openbox-3.6.1, or another window manager, + such as Xfwm4-4.20.0, or kwin from Plasma-6.4.4. Note that IceWM-3.8.2 is not + suitable for LXQt. +

+
+ Recommended +
+ +
+ Optional +
+

+ lightdm-1.32.0 or another Display + Manager, e.g. sddm-0.21.0, or XScreenSaver-6.12 +

+
+
+

+ Final Configuration +

+
+
+
+
+

+ LXQt Final Database Updates +

+
+
+
+

+ The desktop databases need to be created or updated at this + point. Run the following commands as the root user: +

+
ldconfig                             &&
+update-mime-database /usr/share/mime &&
+xdg-icon-resource forceupdate        &&
+update-desktop-database -q
+
+
+
+

+ Starting LXQt +

+

+ You can start LXQt from + runlevel 3, using xinit-1.4.4, or from runlevel 5, using a + Display Manager, such as lightdm-1.32.0. +

+

+ To start LXQt using + xinit-1.4.4, run the following commands: +

+
cat > ~/.xinitrc << "EOF"
+exec startlxqt
+EOF
+
+startx
+

+ The X session starts on the first unused virtual terminal, + normally vt1. You can switch to another vtn by simultaneously pressing the + keys Ctrl-Alt-Fn + (n=2, 3, ...). To + switch back to the X session, normally started at vt1, use + Ctrl-Alt-F1. 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, but these are + hidden by the graphical interface. You may prefer to redirect + those messages to a log file, which can be used for debugging + purposes. This can be done starting X with: +

+
startx &> ~/.x-session-errors
+
+
+

+ Initial Configuration +

+

+ When LXQt first starts, it will ask you for the window + manager to use. To start, the BLFS editors recommend using + openbox. At this point both + the background and the panel will be black. Right clicking on + the background will bring up a menu and selecting "Desktop + Preferences" will allow you to change the background color or + set a background image. +

+

+ The panel will be at the bottom of the screen. Right clicking + on the panel will bring up a menu that will allow you to + customize the panel including adding widgets and setting the + background color. The BLFS editors recommend installing, at a + minimum, the Application Manager and Task Manager widgets. +

+

+ After LXQt has started for the first time, the BLFS editors + recommend going through the settings presented in the LXQt + Configuration Center, which can be found under LXQt Settings + in the Preferences menu of the application launcher. +

+
+

+ Note +

+

+ The user configuration files will be created in the + directory $HOME/.config/lxqt/. To get widget icons to + display properly, the lxqt.conf file may need to be + manually edited to include the line "icon_theme=oxygen". +

+
+
+
+
+
+
+
+

+ Chapter 38. LXQt Applications +

+
+
+
+
+

+ This is a small collection of optional applications that add + extra capabilities to the LXQt + desktop. +

+
+
+
+

+ lximage-qt-2.2.0 +

+
+
+
+
+
+

+ Introduction to lximage-qt +

+

+ The lximage-qt package + contains a lightweight image viewer and screenshot program. +

+

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

+

+ Package Information +

+
+ +
+

+ lximage-qt Dependencies +

+
+ Required +
+

+ libfm-qt-2.2.0 +

+
+
+

+ Installation of lximage-qt +

+

+ Install lximage-qt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you have xdg-utils-1.2.1 installed, as the + root user, run xdg-icon-resource forceupdate --theme + hicolor. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + lximage-qt +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/lximage-qt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lximage-qt +

+
+

+ is a lightweight image viewer and screenshot + program. There is a menu entry in Utilities for the + screenshot program. From the command line, you can + obtain a full screen or window shot by running + lximage-qt + --screenshot +

+
+
+
+
+
+
+
+

+ lxqt-archiver-1.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-archiver +

+

+ The lxqt-archiver package is + a simple and lightweight desktop-agnostic Qt file archiver. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-archiver Dependencies +

+
+ Required +
+

+ libfm-qt-2.2.0, liblxqt-2.2.0, and + JSON-GLib-1.10.6 +

+
+
+

+ Installation of lxqt-archiver +

+

+ Install lxqt-archiver by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-archiver +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/lxqt-archiver +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ lxqt-archiver +

+
+

+ is a Qt-based file archiver +

+
+
+
+
+
+
+
+

+ lxqt-notificationd-2.2.0 +

+
+
+
+
+
+

+ Introduction to lxqt-notificationd +

+

+ The lxqt-notificationd + package is the LXQt + notification daemon. +

+

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

+

+ Package Information +

+
+ +
+

+ lxqt-notificationd Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of lxqt-notificationd +

+

+ Install lxqt-notificationd + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + lxqt-config-notificationd and + lxqt-notificationd +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/lxqt/translations/lxqt-config-notificationd + and + /usr/share/lxqt/translations/lxqt-notificationd +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ lxqt-config-notificationd +

+
+

+ is the lxqt-notificationd + GUI configuration tool +

+
+

+ lxqt-notificationd +

+
+

+ is the LXQt + notification daemon +

+
+
+
+
+
+
+
+

+ pavucontrol-qt-2.2.0 +

+
+
+
+
+
+

+ Introduction to pavucontrol-qt +

+

+ pavucontrol-qt is the Qt + port of the volume control utility pavucontrol, which is used + to adjust audio levels in Pulseaudio. It is desktop + environment agnostic. +

+

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

+

+ Package Information +

+
+ +
+

+ pavucontrol-qt Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 and PulseAudio-17.0 + (built with GLib-2.84.4 support) +

+
+
+

+ Installation of pavucontrol-qt +

+

+ Install pavucontrol-qt by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + pavucontrol-qt +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/pavucontrol-qt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ pavucontrol-qt +

+
+

+ is a Qt based GUI configuration tool for sound + settings using pulseaudio +

+
+
+
+
+
+
+
+

+ qps-2.11.1 +

+
+
+
+
+
+

+ Introduction to qps +

+

+ The qps package contains a + Qt process manager. +

+

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

+

+ Package Information +

+
+ +
+

+ qps + Dependencies +

+
+ Required +
+

+ liblxqt-2.2.0 +

+
+
+

+ Installation of qps +

+

+ Install qps by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you have xdg-utils-1.2.1 installed, as the + root user, run xdg-icon-resource forceupdate --theme + hicolor. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + qps +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/qps +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ qps +

+
+

+ is a Qt-based process manager +

+
+
+
+
+
+
+
+

+ qtermwidget-2.2.0 +

+
+
+
+
+
+

+ Introduction to qtermwidget +

+

+ As the name suggests, the qtermwidget package is a terminal widget + for Qt. +

+

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

+

+ Package Information +

+
+ +
+

+ qtermwidget Dependencies +

+
+ Required +
+

+ Qt-6.9.2 +

+
+
+

+ Installation of qtermwidget +

+

+ Install qtermwidget by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_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: + libqtermwidget6.so +
+
+ Installed Directories: + /usr/include/qtermwidget6, + /usr/lib/cmake/qtermwidget6, and + /usr/share/qtermwidget6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libqtermwidget6.so +

+
+

+ provides a terminal widget for Qt6 +

+
+
+
+
+
+
+
+

+ qterminal-2.2.1 +

+
+
+
+
+
+

+ Introduction to qterminal +

+

+ The qterminal package + contains a Qt widget based terminal emulator for Qt with support for multiple tabs. +

+

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

+

+ Package Information +

+
+ +
+

+ qterminal Dependencies +

+
+ Required +
+

+ qtermwidget-2.2.0 +

+
+
+

+ Installation of qterminal +

+

+ Install qterminal by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Contents +

+
+
+
+ Installed Program: + qterminal +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/qterminal +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ qterminal +

+
+

+ is a Qt based + lightweight terminal emulator +

+
+
+
+
+
+
+
+

+ screengrab-3.0.0 +

+
+
+
+
+
+

+ Introduction to screengrab +

+

+ The screengrab package is a + cross-platform tool for making screenshots quickly. +

+

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

+

+ Package Information +

+
+ +
+

+ screengrab Dependencies +

+
+ Required +
+

+ lxqt-build-tools-2.2.1, + kwindowsystem-6.17.0 for + lxqt, and libqtxdg-4.2.0 +

+
+
+

+ Installation of screengrab +

+

+ Install screengrab by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      ..                           &&
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+

+ If you have xdg-utils-1.2.1 installed, as the + root user, run xdg-icon-resource forceupdate --theme + hicolor. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + screengrab +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/screengrab and + /usr/share/doc/screengrab +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ screengrab +

+
+

+ is a cross platform tool for creating screenshots + quickly +

+
+
+
+
+
+
+
+
+
+

+ 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. +

+
+
+
+

+ Gnumeric-1.12.59 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gnumeric Dependencies +

+
+ Required +
+

+ GOffice-0.10.59 and itstool-2.0.7 +

+
+ Recommended Runtime +
+ +
+ Optional +
+

+ DConf-0.40.0 (to + prevent some test failures), GLib-2.84.4 (with GObject + Introspection), PyGObject-3.52.3, Valgrind-3.25.1 + (for some tests), dblatex (for PDF + docs), libgda, Mono, pxlib, and + Psiconv +

+
+
+

+ 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. Two tests are known to + fail. Additional failures may occur if valgrind is installed. +

+
+
+

+ 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.59, 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.59 +

+
+

+ gnumeric-1.12.59 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ LibreOffice-25.8.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Core Download: + https://download.documentfoundation.org/libreoffice/src/25.8.1/libreoffice-25.8.1.1.tar.xz +

    +
  • +
  • +

    + Core Download MD5 sum: 0d823a106e573b69dfd7e3bfba7ea920 +

    +
  • +
  • +

    + Core Download size: 273 MB +

    +
  • +
  • +

    + Estimated disk space required: 11 GB including the + additional files if downloaded during the build (778 MB + installed). Installing the whole set of languages + requires more than 25 GB (around 3 GB installed) +

    +
  • +
  • +

    + Estimated build time: 23 SBU with parallelism=8 (will + vary due to 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 is about 3 minutes on a fiber connection and probably + not much more than 10 minutes on an ADSL connection. If you + have not installed one or more of the following + dependencies, they will also be downloaded during the + build. +

+
+
+ +
+

+ LibreOffice Dependencies +

+
+ Required +
+

+ Archive-Zip-1.68, libarchive-3.8.1, Wget-1.25.0, Which-2.23, and Zip-3.0 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+ 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 both build and installed disk space along with + increasing build time. +

+
+ +
+ Optional +
+

+ Abseil-cpp-20250814.0, Avahi-0.8, + BlueZ-5.83, DConf-0.40.0, + desktop-file-utils-0.28, + Doxygen-1.14.0 (not relevant if using + --disable-odk), evolution-data-server-3.56.2, + GDB-16.3, + GnuTLS-3.8.10, GTK-4.18.6, KDE + Frameworks-6.17.0, libpaper-2.2.6, MariaDB-11.8.3 or + MySQL, + MIT Kerberos V5-1.22.1, + NASM-2.16.03, Qt-6.9.2, SANE-1.4.0, Valgrind-3.25.1, + VLC-3.0.21, zxing-cpp-2.3.0, + BeanShell, box2d, + CoinMP, Cppunit, + Dragonbox, + Firebird, frozen, + hamcrest, + Hunspell, Hyphen, + Java-WebSocket, + jfreereport, + jq, junit4, + libabw, + libcdr, + libcmis, + libebook, + libeot, libepubgen, + + libetonyek, libexttextcat, + libfixmath, + + libfreehand, liblangtag, + libmspub, + libmwaw, + libnumbertext, + libodfgen, + + libpagemaker, libqxp, + librevenge + (WordPerfect Document importer), libstaroffice, + libvisio, + libwpd, libwpg, + libwps, + libzmf, + lp_solve, mdds, + MyThes, + odfvalidator, + officeotron, + Orcus, rhino, and + suitesparse + (colamd) +

+

+ There are many optional dependencies not listed here. They + can be found in the download.lst file in the sources directory. +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/libreoffice +

+
+
+

+ Installation of LibreOffice +

+

+ Next, fix a problem with detecting Boost::System, which was + changed from a library to a series of headers in + Boost-1.89.0: +

+
export boost_cv_lib_system=yes
+

+ Next, fix a bug with linking to zlib, fix a bug which would + cause an install failure, and prevent compression of man + pages: +

+
sed -i '/icuuc \\/a zlib\\'           writerperfect/Library_wpftdraw.mk &&
+sed -i "/distro-install-file-lists/d" Makefile.in                       &&
+sed -e "/gzip -f/d"   \
+    -e "s|.1.gz|.1|g" \
+    -i bin/distro-install-desktop-integration
+

+ 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-25.8.1.1.tar.xz external/tarballs/ &&
+ln -sv ../../../libreoffice-help-25.8.1.1.tar.xz         external/tarballs/ &&
+ln -sv ../../../libreoffice-translations-25.8.1.1.tar.xz external/tarballs/
+

+ The instructions in the package unpack some tarballs into a + location it cannot find later. Create some symlinks to help + the build system out: +

+
ln -sv src/libreoffice-help-25.8.1.1/helpcontent2/ &&
+ln -sv src/libreoffice-dictionaries-25.8.1.1/dictionaries/ &&
+ln -sv src/libreoffice-translations-25.8.1.1/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-25.8.1.1: +

+
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. +

+
+

+ If you are building on a 32 bit machine, CFLAGS is set to -Os, which breaks the + build. Prevent this by issuing: +

+
case $(uname -m) in
+   i?86) sed /-Os/d -i solenv/gbuild/platform/LINUX_INTEL_GCC.mk ;;
+esac
+

+ Prepare LibreOffice for + compilation by running the following commands: +

+
./autogen.sh --prefix=$LO_PREFIX         \
+             --sysconfdir=/etc           \
+             --with-vendor=BLFS          \
+             --with-lang='fr en-GB'      \
+             --with-help=html            \
+             --with-myspell-dicts        \
+             --without-junit             \
+             --without-system-dicts      \
+             --disable-dconf             \
+             --disable-odk               \
+             --disable-mariadb-sdbc      \
+             --enable-release-build=yes  \
+             --enable-python=system      \
+             --with-jdk-home=/opt/jdk    \
+             --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-libtiff       \
+             --with-system-libpng        \
+             --with-system-libxml        \
+             --with-system-libwebp       \
+             --with-system-nss           \
+             --with-system-odbc          \
+             --with-system-openldap      \
+             --with-system-openssl       \
+             --with-system-poppler       \
+             --with-system-postgresql    \
+             --with-system-redland       \
+             --with-system-zlib          \
+             --with-system-zstd
+

+ Build the package: +

+
make build
+

+ Now, as the root user: +

+
make distro-pack-install
+

+ If installed in /opt/libreoffice-25.8.1.1 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 $LO_PREFIX /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.28, 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 +

+

+ --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=html: + 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. +

+

+ --disable-mariadb-sdbc: This + switch disables the MariaDB SDBC connector for Libreoffice + Base. Leaving it enabled results in a build failure because + of a problem linking to MIT Kerberos V5-1.22.1. +

+

+ --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-icu: + This switch tells the build system to use the system + installed version of ICU. +

+

+ --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.26.5. +

+

+ --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.18.4 + for rendering instead of skia. +

+

+ --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 16 GB of memory, the + difference in compile times was minimal, but an extra 2 GB + 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. It is also + needed for some optional user interface components. +

+

+ --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-evolution2: Enables + support for Evolution address books through Evolution Data + Server. Note that Evolution Data Server must be installed for + this feature to function. +

+

+ --enable-qt6: This switch enables + support for integration with Qt6 and the Qt6 theming engine. + If Qt-6.9.2 + is not installed in /usr, the + include and library directories must be specified in the + QT6INC and QT6LIB environment variables. +

+

+ --enable-kf6: This switch enables + KDE/Plasma integration. If Qt-6.9.2 and/or KDE + Frameworks-6.17.0 are not installed in /usr, the include and library directories + must be specified in QT6INC, + QT6LIB, KF6INC, and KF6LIB, + respectively. This includes a style plugin and KIO + integration. +

+

+ --with-system-abseil: This switch + enables using a system version of the Abseil C++ libraries + instead of the bundled copy. Add this switch if Abseil-cpp-20250814.0 is + installed and you want to use it instead of the bundled copy. +

+

+ --with-system-zxing: This switch + enables using a system version of zxing-cpp instead of the + bundled copy. Add this switch if zxing-cpp-2.3.0 is + installed and you want to use it instead of the bundled copy. +

+

+ --enable-gtk4: This switch + enables integration with GTK-4, including the usage of a + GTK-4 file browsing dialog and themes. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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-48.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Epiphany Dependencies +

+
+ Required +
+

+ Gcr-4.4.0.1, gnome-desktop-44.3, ISO + Codes-4.18.0, JSON-GLib-1.10.6, libadwaita-1.7.6, libportal-0.9.1, Nettle-3.10.2, and + WebKitGTK-2.48.5 (built with GTK-4) +

+
+ Optional +
+

+ appstream-glib-0.8.3 and Granite +

+
+ Runtime Dependencies +
+

+ gnome-keyring-48.0 (for storing + passwords) and Seahorse-47.0.1 (for managing stored + passwords) +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/epiphany +

+
+
+

+ Installation of Epiphany +

+
+

+ Note +

+

+ If you are upgrading from a epiphany-46 or earlier, remove + some files that will cause a crash at runtime if they are + present as the root user: +

+
+
rm -rf /usr/lib/epiphany
+

+ Install Epiphany by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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 +

+
+
+
+
+
+
+
+

+ falkon-25.08.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). +

+

+ Falkon relies on QtWebEngine. Please read the warning on that + page. +

+

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

+

+ Package Information +

+
+ +
+

+ falkon Dependencies +

+
+ Required +
+

+ extra-cmake-modules-6.17.0, + KDE + Frameworks-6.17.0 (for karchive), and qtwebengine-6.9.2 +

+
+

+ Note +

+

+ Strictly speaking, only karchive and ki18n are required to + build falkon, but several other packages in KDE + Frameworks-6.17.0 can be used if they are present. To + build only karchive and ki18n, download those packages from + the directory specified in KDE + Frameworks-6.17.0 and use the build instructions on + that page, changing the $KF6_PREFIX to /usr. +

+
+
+ Optional +
+

+ gnome-keyring-48.0, PySide2, and + Shiboken2 +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/falkon +

+
+
+

+ Installation of falkon +

+

+ Install falkon by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      .. &&
+
+make
+

+ Tests should be run after installation. +

+

+ Now, as the root user: +

+
make install &&
+ldconfig
+

+ To test the results, issue: make test. All tests should + pass. If any fail, the full results will be in Testing/Temporary/LastTest.log. +

+
+

+ Note +

+

+ When upgrading this package, it is possible that the + contents of the application will remain empty even though + everything else appears to be working properly. In this + case try removing ~/.cache/falkon and restarting the + program. +

+
+

+ If you have installed Pyside2 you will want to examine + hellopython.py + which is in the scripts/ + directory, and perhaps copy it to your home directory. +

+
+

+ Note +

+

+ If you are on a non-x86_64 architecture and run into + problems with missing text, you may wish to export + QTWEBENGINE_CHROMIUM_FLAGS="--no-sandbox" + prior to running Falkon. +

+
+
+
+

+ Command Explanations +

+

+ -D BUILD_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: + /usr/share/falkon +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ falkon +

+
+

+ is a web browser which uses qtwebengine +

+
+

+ libFalkonPrivate.so.3 +

+
+

+ contains functions used by falkon +

+
+
+
+
+
+
+
+

+ Firefox-140.2.0esr +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+
+

+ Important +

+

+ This package has historically had frequent updates that + address security vulnerabilities. To determine the latest + status check the BLFS + Security Advisories. +

+
+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ The directory name is firefox-140.2.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 +
+

+ Cbindgen-0.29.0, GTK-3.24.50, libnotify-0.8.6, libarchive-3.8.1, + LLVM-20.1.8 (with clang, used for bindgen + even if using gcc), nodejs-22.18.0, PulseAudio-17.0 (or + alsa-lib-1.2.14 if you edit the + mozconfig; now deprecated by mozilla), in either case please + read the Configuration Information, Python-3.13.7 (after + installing SQLite-3.50.4), and startup-notification-0.12 +

+
+ Recommended +
+ +
+

+ 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-8.15.0, Doxygen-1.14.0, + FFmpeg-7.1.1 (runtime, to play mov, mp3 or + mp4 files), GeoClue-2.7.2 (runtime), liboauth-1.0.3, + libproxy-0.5.10, pciutils-3.14.0 + (runtime), Valgrind-3.25.1, Wget-1.25.0, Wireless + Tools-29, and yasm-1.3.0 +

+

+ Editor 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 -- --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
+
+# Comment out the following line if you wish not to use Google's Location
+# Service (GLS).  Note that if Geoclue is installed and configured to use
+# GLS (as the BLFS instruction does), Firefox can access GLS via Geoclue
+# anyway.  On the other hand if Geoclue is not installed (or not properly
+# configured) and this line is commented out, the website requiring a
+# location service will not function properly.
+ac_add_options --with-google-location-service-api-keyfile=$PWD/google-key
+
+# If you wish to use libproxy to determine proxy server information, you will
+# need to install the libproxy package and then uncomment the option below:
+#ac_add_options --enable-libproxy
+
+# Uncomment the following option if you have not installed PulseAudio and
+# want to use alsa instead
+#ac_add_options --enable-audio-backends=alsa
+
+# 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-libvpx
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+ac_add_options --with-system-webp
+
+# The libdav1d library (av1 decoder) requires nasm. Uncomment this
+# if nasm has not been installed. Do not uncomment this if you have
+# ffmpeg 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.
+ac_add_options --disable-debug-symbols
+
+# 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
+
+# This enables SIMD optimization in the shipped encoding_rs crate.
+ac_add_options --enable-rust-simd
+
+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
+
+# Sandboxing works well on x86_64 but might cause issues on other
+# platforms, e.g. i686.
+[ $(uname -m) != x86_64 ] && ac_add_options --disable-sandbox
+
+# Using sandboxed wasm libraries has been moved to all builds instead
+# of only mozilla automation builds. It requires extra llvm packages
+# and was reported to seriously slow the build. Disable it.
+ac_add_options --without-wasm-sandboxed-libraries
+
+# 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
+
+# By default firefox will attempt to use the window class firefox-default on
+# launch. This makes the icon not work properly because wayland does not
+# support the X11 property  class header. Change the remoting name to fix this.
+# This is also reflected in the .desktop file where StartupWMClass is set to
+# firefox.
+MOZ_APP_REMOTINGNAME=firefox
+EOF
+

+ Compile Firefox by issuing + the following commands: +

+

+ If the geolocation APIs are needed: +

+
+

+ Note +

+

+ The Google API Key below is 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 key following the + instructions located at https://www.chromium.org/developers/how-tos/api-keys. +

+
+
echo "AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ" > google-key
+
+

+ Note +

+

+ If you are compiling this package in chroot you must ensure + that /dev/shm is mounted. If + you do not do this, the Python configuration will fail with a + traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py. + As the root user, run: +

+
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
+
+

+ Now invoke the Python mach script to compile the + package. +

+
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none &&
+export MOZBUILD_STATE_PATH=${PWD}/mozbuild          &&
+./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: +

+
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none &&
+./mach install
+

+ Empty the environment variables which were set above: +

+
unset MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE
+unset MOZBUILD_STATE_PATH
+
+
+

+ Command Explanations +

+

+ export + MOZBUILD_STATE_PATH=${PWD}/mozbuild: The + build tells 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 directory within the build + directory and deleting it after the installation prevents it + being used. +

+

+ MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none: + Use the system python to create a virtual environment for + mach without + downloading any python wheels and without using the system + python modules. This prevents version mismatches between + system modules and bundled ones. +

+

+ ./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 since 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. +

+

+ CC=gcc + CXX=g++: BLFS used to prefer to use gcc and g++ + instead of upstream's defaults of the clang programs. With the release of + gcc-12 the build takes longer with gcc and g++, primarily + because of extra warnings, and is bigger. Set these + environment variables before you + run the configure script if you wish to continue + to use gcc, g++. Building with GCC on i?86 is currently + broken. +

+
+
+

+ Configuring Firefox +

+

+ If you use a desktop environment like Gnome or KDE you may want 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+="application/xhtml+xml;application/vnd.mozilla.xul+xml;" &&
+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
+StartupWMClass=firefox
+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 terminal + 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 terminal + 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-17.0) and restart firefox + to check it is working. If it now works, add the following + to your ~/.xinitrc: + pulseaudio + --verbose --log-target=syslog& + (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 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ firefox +

+
+

+ is a GTK+-3 + internet browser that uses the Mozilla Gecko + rendering engine +

+
+
+
+
+
+
+
+

+ Seamonkey-2.53.21 +

+
+
+
+
+
+

+ Introduction to Seamonkey +

+

+ Seamonkey is a browser + suite, a descendant of Netscape. It includes the browser, + composer, mail and news clients, and an IRC client. +

+

+ It is the community-driven follow-on to the Mozilla + Application Suite, created after Mozilla decided to focus on + separate applications for browsing and e-mail. Those + applications are Firefox-140.2.0 and Thunderbird-140.2.0esr. +

+

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

+
+

+ Important +

+

+ This package has historically had frequent updates that + address security vulnerabilities. To determine the latest + status check the BLFS + Security Advisories. +

+
+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+
+

+ Note +

+

+ The tarball seamonkey-2.53.21.source.tar.xz + will untar to seamonkey-2.53.21 directory. +

+
+

+ Seamonkey Dependencies +

+
+ Required +
+

+ Cbindgen-0.29.0, GTK-3.24.50, libarchive-3.8.1, Python-3.11.1, + yasm-1.3.0, and Zip-3.0 +

+
+ Recommended +
+ +
+

+ 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.14, dbus-glib-0.114, + libproxy-0.5.10, nodejs-22.18.0, + Valgrind-3.25.1, Wget-1.25.0, Wireless + Tools-29, Hunspell and + Watchman +

+
+
+

+ 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 python3 configure.py + --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
+
+# 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
+
+
+# If you wish to use libproxy to determine proxy server information, you will
+# need to install the libproxy package and then uncomment the option below:
+#ac_add_options --enable-libproxy
+
+# Uncomment these lines if you have installed optional dependencies:
+#ac_add_options --enable-system-hunspell
+
+# 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-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
+
+# Disabling debug symbols makes the build much smaller and a little
+# faster. Comment this if you need to run a debugger.
+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.  With recent Binutils releases the linker already
+# supports a much safer and generic way for this.
+ac_add_options --disable-elf-hack
+ac_add_options --enable-linker=bfd
+export LDFLAGS="$LDFLAGS -Wl,-z,pack-relative-relocs"
+
+# 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
+
+# The SIMD code relies on the unmaintained packed_simd crate which
+# fails to build with Rustc >= 1.78.0.  We may re-enable it once
+# Mozilla ports the code to use std::simd and std::simd is stabilized.
+ac_add_options --disable-rust-simd
+
+ac_add_options --enable-strip
+ac_add_options --enable-install-strip
+
+# You cannot distribute the binary if you do this.
+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
+
+export CC=clang CXX=clang++
+EOF
+
+

+ Note +

+

+ If you are compiling this package in chroot you must ensure + that /dev/shm is mounted. If + you do not do this, the Python configuration will fail with a + traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py. + As the root user, run: +

+
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
+
+

+ First, if you are building with system ICU, adapt the line + break mapping for ICU-74 or later, apply a patch to build + this package with the C++17 standard because the headers of + ICU-75 or later require some C++17 features, and adapt the + build system to use the correct library with ICU-76 or later: +

+
(for i in {43..47}; do
+   sed '/ZWJ/s/$/,CLASS_CHARACTER/' -i intl/lwbrk/LineBreaker.cpp || exit $?
+done) &&
+
+patch -Np1 -i ../seamonkey-2.53.21-cxx17-1.patch &&
+
+sed -i 's/icu-i18n/icu-uc &/' js/moz.configure
+

+ Next, remove a hunk of unused code violating the C++ + standard. Clang has started to reject it even though it's + unused since the 19.1.0 release: +

+
sed -e '/ExclusiveData(ExclusiveData&&/,/^ *}/d' \
+    -i js/src/threading/ExclusiveData.h
+

+ Next, fix a problem with the bundled 'distro' python module: +

+
sed -e '1012 s/stderr=devnull/stderr=subprocess.DEVNULL/' \
+    -e '1013 s/OSError/(OSError, subprocess.CalledProcessError)/' \
+    -i third_party/python/distro/distro.py
+

+ Compile Seamonkey by running + the following commands: +

+
export PATH_PY311=/opt/python3.11/bin:$PATH &&
+PATH=$PATH_PY311 AUTOCONF=true MACH_USE_SYSTEM_PYTHON=1 ./mach build
+

+ This package does not come with a test suite. +

+

+ Install Seamonkey by issuing + the following commands as the root user: +

+
+

+ Note +

+

+ If sudo or + su is invoked + for opening a shell running as the root user, ensure PATH_PY311 is correctly passed or the + following command will fail. For sudo, use the + --preserve-env=PATH_PY311 + option. For su, do not use the - or --login + options. +

+
+
PATH=$PATH_PY311 MACH_USE_SYSTEM_PYTHON=1 ./mach install &&
+chown -R 0:0 /usr/lib/seamonkey                          &&
+
+cp -v $(find -name seamonkey.1 | head -n1) /usr/share/man/man1
+

+ Finally, unset the PATH_PY311 + variable: +

+
unset PATH_PY311
+
+
+

+ Command Explanations +

+

+ export CC=clang + CXX=clang++: With the introduction of + gcc-12, many more warnings + are generated when compiling mozilla applications and that + results in a much slower, and larger, build. Furthermore, + building with GCC on i?86 is currently broken. Although + upstream mozilla code defaults to using llvm unless overridden, the older + configure code in Seamonkey + defaults to gcc. +

+

+ ./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 +
+
+ Installed Directory: + /usr/lib/seamonkey +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ seamonkey +

+
+

+ is the Mozilla browser/email/newsgroup/chat client + suite +

+
+
+
+
+
+
+
+
+

+ 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.5 +

+
+
+
+
+
+

+ Introduction to Balsa +

+

+ The Balsa package contains a + lightweight GTK+-based mail + client. +

+

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

+

+ Package Information +

+
+ +
+

+ Balsa Dependencies +

+
+ Required +
+

+ enchant-2.8.12, GMime-3.2.15, gpgme-2.0.0, + GTK-3.24.50, libical-3.0.20, + libnotify-0.8.6, and libsecret-0.21.7 +

+
+ Required (Runtime) +
+

+ MTA (that + provides a sendmail command) +

+
+ Optional +
+

+ Compface-1.5.2, gspell-1.14.0, gtksourceview-3.24.11, libcanberra-0.30, MIT Kerberos + V5-1.22.1, OpenLDAP-2.6.10, Procmail-3.24, + SQLite-3.50.4, WebKitGTK-2.48.5, + html2text, + libxapp, osmo, + and yelp-tools +

+
+
+

+ Installation of Balsa +

+

+ Install Balsa by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup .. --prefix=/usr       \
+               --buildtype=release \
+               -D html-widget=no   &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D html-widget=no: + This option disables building the HTML renderer. If you want + the HTML renderer to be built, verify that you have WebKitGTK-2.48.5 installed, and then + remove this option. +

+

+ -D canberra=true: This switch + enables support for event sounds via libcanberra-0.30. +

+

+ -D compface=true: This switch + enables support for using Compface-1.5.2 to compress + thumbnails for contacts. +

+

+ -D gcr=true: This switch enables + support for using libgcr for handling TLS certificates. This + requires that the Gcr-3.41.2 package is installed, which is + part of a runtime dependency for libsecret. +

+

+ -D gss=true: This switch enables + support for Kerberos authentication. This requires that the + MIT Kerberos V5-1.22.1 package + is installed. +

+

+ -D ldap=true: This switch enables + LDAP address book support. This requires that the OpenLDAP-2.6.10 package 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 GTK+-based mail client +

+
+

+ balsa-ab +

+
+

+ is the address book application used by + balsa +

+
+
+
+
+
+
+
+

+ feh-3.10.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://feh.finalrewind.org/feh-3.10.3.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: 4f9e2c6ecc120852ba86dc41df366aba +

    +
  • +
  • +

    + Download size: 2.0 MB +

    +
  • +
  • +

    + Estimated disk space required: 5.2 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with tests) +

    +
  • +
+
+

+ feh + Dependencies +

+
+ Required +
+

+ libpng-1.6.50 and imlib2-1.12.5 (built with + giflib-5.2.2 support, for the tests) +

+
+ Recommended +
+ +
+ Optional +
+

+ libexif-0.6.25 +

+
+ Optional (runtime) +
+

+ libjpeg-turbo-3.0.1 (for lossless + image rotation) and ImageMagick-7.1.2-1 (to load + unsupported formats) +

+
+ Optional (test suite) +
+

+ Test-Command-0.11 (required) and + mandoc + (optional) +

+
+
+

+ Installation of feh +

+

+ Install feh by running the + following commands: +

+
sed -i "s:doc/feh:&-3.10.3:" 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.10.3:" 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.10.3 and + /usr/share/feh +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ feh +

+
+

+ is an image viewer and cataloguer +

+
+
+
+
+
+
+
+

+ FontForge-20230101 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ FontForge Dependencies +

+
+ Required +
+

+ libspiro-20220722 and libxml2-2.14.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ giflib-5.2.2, git-2.50.1, libjpeg-turbo-3.0.1, libtiff-4.7.0, sphinx-8.2.3 (to build + html documentation), and WOFF2-1.0.2 +

+
+
+

+ Installation of FontForge +

+

+ First, fix two security vulnerabilities in the Splinefont + functionality: +

+
patch -Np1 -i ../fontforge-20230101-security_fixes-1.patch
+

+ Next, fix a problem with old translations exposed by + gettext-0.22: +

+
sed -i.orig 's/\(%[^%[:space:]]*\)hs/\1s/g' \
+ fontforgeexe/searchview.c po/de.po po/ca.po \
+ po/hr.po po/it.po po/pl.po po/uk.po po/en_GB.po \
+ po/fr.po po/vi.po po/ko.po po/ja.po
+

+ Install FontForge by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -W no-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-20230101
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + create an optimized release without debug information. +

+

+ -W no-dev: This + switch is used to suppress warnings intended for the + package's developers. +

+

+ -D ENABLE_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.13.7/site-packages/{fontforge,psMat}.so +
+
+ Installed Directories: + /usr/share/fontforge and optionally + /usr/share/doc/fontforge{,-20230101} +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ FreeRDP-3.17.0 +

+
+
+
+
+
+

+ Introduction to FreeRDP +

+

+ The FreeRDP package contains + libraries and utilities for utilizing the Remote Desktop + Protocol. This includes tools to run an RDP server as well as + to connect to a computer using RDP. This is primarily used + for connecting to Microsoft Windows computers, but can also + be used on Linux and macOS. +

+

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

+

+ Package Information +

+
+ +
+

+ FreeRDP Dependencies +

+
+ Required +
+

+ FFmpeg-7.1.1, ICU-77.1, and Xorg Libraries +

+
+ Recommended +
+ +
+ Optional +
+

+ Cups-2.4.12, faac-1.31.1, FAAD2-2.11.2, fdk-aac-2.0.3, LAME-3.100, Linux-PAM-1.7.1, PulseAudio-17.0, + cJSON, GSM, ocl-icd, mbedTLS, openh264, + pcsclite, SDL_ttf, + soxr, and uriparser +

+
+
+

+ Installation of FreeRDP +

+

+ Install FreeRDP by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr   \
+      -D CMAKE_SKIP_INSTALL_RPATH=ON \
+      -D CMAKE_BUILD_TYPE=Release    \
+      -D WITH_CAIRO=ON               \
+      -D WITH_CLIENT_SDL=OFF         \
+      -D WITH_DSP_FFMPEG=ON          \
+      -D WITH_FFMPEG=ON              \
+      -D WITH_PCSC=OFF               \
+      -D WITH_SERVER=ON              \
+      -D WITH_SERVER_CHANNELS=ON     \
+      -D DOCBOOKXSL_DIR=/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2 \
+      -W no-dev                      \
+      -G Ninja ..                    &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Command Explanations +

+

+ -D + CMAKE_SKIP_INSTALL_RPATH=ON: This switch makes + cmake remove + hardcoded library search paths (rpath) when installing a + binary executable file or a shared library. This package does + not need rpath once it's installed into the standard + location, and rpath may sometimes cause unwanted effects or + even security issues. +

+

+ -D + DOCBOOKXSL_DIR=/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2: + This parameter points CMake to the location of the Docbook + XSL stylesheets, and is needed because BLFS does not use + namespaced versions of the stylesheets. This is needed to + create man pages. If you do not want manpages, pass -D + WITH_MANPAGES=OFF to CMake instead. +

+

+ -D WITH_CAIRO=ON: + This parameter uses Cairo for HighDPI and window resizing + support. +

+

+ -D + WITH_CLIENT_SDL=OFF: This parameter disables + using SDL to draw the window when using the FreeRDP client. + This is disabled because it depends on SDL_ttf. Remove + this switch if you have the SDL_ttf package installed. +

+

+ -D WITH_FFMPEG=ON: + This parameter enables support for using ffmpeg for the H.264 + graphics rendering mode, which is required when connecting + via RDP to Windows Server 2012 (or Windows 8) or later hosts. +

+

+ -D + WITH_DSP_FFMPEG=ON: This parameter enables + support for using ffmpeg for sound and microphone + redirection. +

+

+ -D WITH_PCSC=OFF: + This parameter disables support for SmartCards since BLFS + does not have the required dependency for it. +

+

+ -D WITH_SERVER=ON: + This parameter enables building the FreeRDP server + components. Remove this parameter if you do not want to use + the FreeRDP server. +

+

+ -D + WITH_SERVER_CHANNELS=ON: This parameter builds + additional plugins for the FreeRDP server. +

+

+ -D WITH_LAME=ON: Use this option + if you wish to enable support for using LAME to provide MP3 + Audio Codec support. +

+

+ -D WITH_FAAC=ON: Use this option + if you wish to enable support for using FAAC to provide AAC + Audio Codec support. +

+

+ -D WITH_FAAD2=ON: Use this option + if you wish to enable support for using FAAD2 to provide AAC + Audio Codec support. +

+

+ -D WITH_FDK_AAC=ON: Use this + option if you wish to enable support for using fdk-aac to + provide AAC Audio Codec support. +

+

+ -D WITH_MBEDTLS=ON: Use this + option if you have the optional dependency mbedTLS + installed and wish to use it as an alternative to OpenSSL for + cryptography support. +

+

+ -D WITH_OPENCL=ON: Use this + option if you have the optional dependency ocl-icd + installed and wish to use OpenCL support. +

+

+ -D WITH_OPENH264=ON: Use this + option if you have the optional dependency openh264 installed and + wish to use it for H.264 support instead of ffmpeg. +

+

+ -D WITH_GSM=ON: Use this option + if you have the optional dependency GSM installed and wish to use + GSM as an audio codec. +

+

+ -D WITH_SOXR=ON: Use this option + if you have the optional dependency soxr installed and wish + to use it instead of ffmpeg for multimedia redirection. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + freerdp-proxy, freerdp-shadow-cli, + sfreerdp, sfreerdp-server, winpr-hash, winpr-makecert, + wlfreerdp, xfreerdp +
+
+ Installed Libraries: + libfreerdp3.so, + libfreerdp-client3.so, libfreerdp-server3.so, + libfreerdp-server-proxy3.so, libfreerdp-shadow3.so, + libfreerdp-shadow-subsystem3.so, librtdk0.so, + libuwac0.so, libwinpr3.so, and libwinpr-tools3.so +
+
+ Installed Directories: + /usr/include/{freerdp3,rdtk0,uwac0,winpr3}, + /usr/lib/cmake/{FreeRDP3,FreeRDP-Client3,FreeRDP-Proxy3,FreeRDP-Server3,rdtk0,uwac0,WinPR3,WinPR-tools3}, + /usr/lib/freerdp3, /usr/share/FreeRDP +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ freerdp-proxy +

+
+

+ configures FreeRDP to use a proxy server +

+
+

+ freerdp-shadow-cli +

+
+

+ interfaces with the shadow functionality in FreeRDP +

+
+

+ sfreerdp +

+
+

+ is a utility for sharing an X display over RDP +

+
+

+ sfreerdp-server +

+
+

+ is a utility for sharing an X display over RDP +

+
+

+ winpr-hash +

+
+

+ creates a NTLM hash from a username and password + pair +

+
+

+ winpr-makecert +

+
+

+ creates X.509 certificates for use with FreeRDP +

+
+

+ wlfreerdp +

+
+

+ is a RDP client for Wayland +

+
+

+ xfreerdp +

+
+

+ is a RDP client for X11 +

+
+

+ libfreerdp3.so +

+
+

+ contains functions that provide RDP client and + server functionality +

+
+
+
+
+
+
+
+

+ Gimp-3.0.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.gimp.org/gimp/v3.0/gimp-3.0.4.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: eaeb6f9973a474a6b8eb168ed25d1f2a +

    +
  • +
  • +

    + Download size: 26 MB +

    +
  • +
  • +

    + Estimated disk space required: 471 MB (183 MB + installed) +

    +
  • +
  • +

    + Estimated build time: 1.2 SBU (Using parallelism=4) +

    +
  • +
+
+

+ Additional Downloads +

+
+

+ Note +

+

+ The English version of the help files is complete, but some + parts of the text for other languages may not yet be + translated. +

+
+
+
    +
  • +

    + Download (HTTP): + https://download.gimp.org/pub/gimp/help/gimp-help-3.0.0.tar.bz2 +

    +
  • +
  • +

    + Download size: 126 MB +

    +
  • +
  • +

    + Download MD5 sum: 6a45a29097c69d5cf0d86e5c9b6e5f9e +

    +
  • +
  • +

    + Estimated disk space required: From 351 MB (74 MB + installed) for en only to 1.5 GB for all languages +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (en only), 5.1 SBU for + all languages; using parallelism=4 +

    +
  • +
+
+

+ Gimp + Dependencies +

+
+ Required +
+

+ appstream-glib-0.8.3, gegl-0.4.62, + gexiv2-0.14.6, glib-networking-2.80.1, + GTK-3.24.50, harfBuzz-11.4.1, + libmypaint-1.6.1, librsvg-2.61.0, + libtiff-4.7.0, libxml2-2.14.5 (to + build the translated help files), Little CMS-2.17, + mypaint-brushes-1.3.1, and + Poppler-25.08.0 (including + poppler-data) +

+
+ Recommended +
+ +
+ Optional +
+

+ AAlib-1.4rc5, alsa-lib-1.2.14, + AppStream-1.0.6 (for one test), + Gi-DocGen-2025.4, Gjs-1.84.2, libjxl-0.11.1, libmng-2.0.3, libunwind-1.8.2, libwebp-1.6.0, Lua-5.4.8, OpenJPEG-2.5.3, cfitsio, libbacktrace, + libiff, libilbm, + libheif with + libde265 (both + needed to read macOS heic images), libwmf, + OpenEXR, + and qoi +

+
+ 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 +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gimp +

+
+
+

+ Installation of Gimp +

+

+ If upgrading from a previous Gimp-3 installation, as the + root user, remove some files + and directories from the old installation or the build system + may mistakenly pick them up, causing a build failure: +

+
rm -rf /usr/{lib,share}/gimp/3.0 &&
+rm -f  /usr/share/gir-1.0/Gimp-3.0.gir &&
+rm -f  /usr/lib/girepository-1.0/Gimp-3.0.typelib &&
+rm -f  /usr/lib/libgimp*-3.0.so*
+

+ Install Gimp by running the + following commands: +

+
mkdir gimp-build &&
+cd    gimp-build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D headless-tests=disabled &&
+ninja
+

+ To test the results (requires a terminal in a graphical + environment) issue: ninja + test. +

+

+ Now, as the root user: +

+
ninja 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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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. If you 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. +

+
tar -xf ../../gimp-help-3.0.0.tar.bz2 &&
+cd gimp-help-3.0.0
+
+ALL_LINGUAS="ca cs da de en en_GB es fa fr hr ko lt nl nn pt pt_BR ro sl sv uk zh_CN" \
+./configure --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/3.0/help
+
+
+

+ Command Explanations +

+

+ -D + headless-tests=disabled: This switch disables + using xvfb-run + for running the tests. Without this switch, many tests fail + if xvfb-run has + been installed. +

+

+ ALL_LINGUAS="ca cs da de en en_GB es + fa...": 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. +

+
+
+

+ Configuring The Gimp +

+
+
+
+
+

+ Config + Files +

+
+
+
+

+ /etc/gimp/3.0/* +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gimp-3.0, gimp-console-3.0, + gimptool-3.0, gimp-test-clipboard-3.0, + gimp-script-fu-interpreter-3.0, and + gimp{,-console,tool,-test-clipboard,script-fu-interpreter}{,-3} + (symlinks) +
+
+ Installed Libraries: + libgimp-3.0.so, + libgimp-scriptfu-3.0, libgimpbase-3.0.so, + libgimpcolor-3.0.so, libgimpconfig-3.0.so, + libgimpmath-3.0.so, libgimpmodule-3.0.so, + libgimpthumb-3.0.so, libgimpui-3.0.so, and + libgimpwidgets-3.0.so +
+
+ Installed Directories: + /etc/gimp, /usr/include/gimp-3.0, + /usr/lib/gimp-3.0, /usr/lib/gimp/3.0, + /usr/share/gimp/3.0, and /usr/share/doc/gimp-3.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gimp-3.0 +

+
+

+ is the Gnu Image Manipulation Program. It works + with a variety of image formats and provides a + large selection of tools +

+
+

+ gimp-console-3.0 +

+
+

+ is a console program that behaves as if The + Gimp was called + with the --no-interface + command-line option +

+
+

+ gimptool-3.0 +

+
+

+ is a tool that can build plug-ins or scripts and + install them if they are distributed in one source + file. gimptool-3.0 can + also be used by programs that need to know what + libraries and include-paths The Gimp was compiled with +

+
+

+ libgimp-3.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-3.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-3.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-3.0.so +

+
+

+ contains C functions for reading and writing config + information +

+
+

+ libgimpmath-3.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-3.0.so +

+
+

+ provides the C functions which implement module + loading using GModule and supports keeping a list + of GimpModule's found in a given searchpath +

+
+

+ libgimpthumb-3.0.so +

+
+

+ provides the C functions for handling The + Gimp's thumbnail + objects +

+
+

+ libgimpui-3.0.so +

+
+

+ contains The Gimp's common user interface + functions +

+
+

+ libgimpwidgets-3.0.so +

+
+

+ contains The Gimp + and GTK's widget + creation and manipulation functions +

+
+
+
+
+
+
+
+

+ Gparted-1.7.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.sourceforge.net/gparted/gparted-1.7.0.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 97305db7509dd1bf2456a1331d2380f3 +

    +
  • +
  • +

    + Download size: 5.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 72 MB (add 70 MB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.3 SBU (using parallelism=4; add + 0.3 SBU for tests) +

    +
  • +
+
+

+ Gparted Dependencies +

+
+ Required +
+

+ Gtkmm-3.24.10 and parted-3.6 +

+
+ Optional +
+

+ btrfs-progs-6.16 (if using a btrfs + filesystem), exfatprogs, + and udftools +

+
+
+

+ 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.65 (required + for optionally displaying serial number device information), + btrfs-progs-6.16, dosfstools-4.2, + e2fsprogs (installed as part of LFS), jfsutils-1.1.15, + xfsprogs-6.15.0, mtools (required to + read and write FAT16/32 volume labels and UUIDs), hfsutils, + hfsprogs, + nilfs-utils, Reiser4progs, + and + reiserfsprogs. +

+

+ 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-10.0p1. +

+
+
+
+
+

+ ssh-askpass +

+
+
+
+

+ To optionally use ssh-askpass-10.0p1 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 +

+
+
+
+
+
+
+
+

+ Inkscape-1.4.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+

+ Note +

+

+ The tarball inkscape-1.4.2.tar.xz will extract to the + directory inkscape-1.4.2_2025-05-08_ebf0e940d0/. +

+
+

+ Inkscape Dependencies +

+
+ Required +
+

+ Boost-1.89.0, double-conversion-3.3.1, + GC-8.2.8, + gsl-2.8, + Gtkmm-3.24.10, libxslt-1.1.43, + Poppler-25.08.0, and popt-1.19 +

+
+ Recommended +
+ +
+ Optional +
+

+ Aspell-0.60.8.1, dbus-1.16.2 (to run inkscape + from scripts), Doxygen-1.14.0, gspell-1.14.0, GraphicsMagick, + libcdr, libvisio, + libwpg (or libwpd) +

+
+
+

+ Installation of Inkscape +

+

+ First, fix build failures with recent versions of poppler: +

+
patch -Np1 -i ../inkscape-1.4.2-poppler_fixes-3.patch
+

+ Install Inkscape by running + the following commands: +

+
mkdir build                       &&
+cd    build                       &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -W no-dev                           \
+      ..                                  &&
+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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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 +

+

+ -D + CMAKE_BUILD_TYPE=Release: This switch is used to + build the release library without any debug `assert` in the + code. +

+

+ -W no-dev: This + parameter silences several warnings only intended for project + developers. +

+

+ -D WITH_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 (in + /usr/lib/inkscape) +
+
+ 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 +

+
+
+
+
+
+
+
+

+ rxvt-unicode-9.31 +

+
+
+
+
+
+

+ 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 + 12.4 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 + test suites, tests in bash + which test raising this signal will fail. +

+
+

+ Package Information +

+
+ +
+

+ rxvt-unicode Dependencies +

+
+ Required +
+

+ libptytty-2.0 and a graphical + environment +

+
+ Optional +
+

+ gdk-pixbuf-2.42.12 (for background + images) and startup-notification-0.12 +

+
+
+

+ 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.28 + and at least one of gnome-icon-theme-3.12.0, + oxygen-icons-6.0.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 +

+
+
+
+
+
+
+
+

+ Thunderbird-140.2.0esr +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+
+

+ Important +

+

+ This package has historically had frequent updates that + address security vulnerabilities. To determine the latest + status check the BLFS + Security Advisories. +

+
+

+ Package Information +

+
+ +
+

+ Thunderbird Dependencies +

+
+ Required +
+

+ Cbindgen-0.29.0, GTK-3.24.50, libarchive-3.8.1, LLVM-20.1.8 including + clang, nodejs-22.18.0, PulseAudio-17.0 (or + alsa-lib-1.2.14 if you edit the + mozconfig; although it is now deprecated by mozilla), + Python-3.13.7 (rebuilt with the sqlite + module), and startup-notification-0.12 +

+
+ Recommended +
+ +
+

+ 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 +
+

+ libproxy-0.5.10, pciutils-3.14.0 + (runtime), Wget-1.25.0, Wireless + Tools-29, and watchman +

+
+
+

+ Installation of Thunderbird +

+
+

+ Note +

+

+ The build process for Thunderbird can use 8 GB or more 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 ./mach configure -- --help | + less. 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
+
+# If you wish to use libproxy to determine proxy server information, you will
+# need to install the libproxy package and then uncomment the option below:
+#ac_add_options --enable-libproxy
+
+# Uncomment the following option if you have not installed PulseAudio
+#ac_add_options --enable-audio-backends=alsa
+
+# Comment out following options if you have not installed
+# recommended dependencies:
+ac_add_options --with-system-libevent
+ac_add_options --with-system-libvpx
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+ac_add_options --with-system-webp
+
+# 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
+
+# This enables SIMD optimization in the shipped encoding_rs crate.
+ac_add_options --enable-rust-simd
+
+ac_add_options --enable-strip
+ac_add_options --enable-install-strip
+
+# You cannot distribute the binary if you do this.
+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
+
+# Using sandboxed wasm libraries has been moved to all builds instead
+# of only mozilla automation builds. It requires extra llvm packages
+# and was reported to seriously slow the build. Disable it.
+ac_add_options --without-wasm-sandboxed-libraries
+EOF
+

+ Change a Rust file to allow implicit autoref to prevent a + build failure. The trailing \r + ensures that the MS-DOS format is used for the inserted line + so that it will be consistent with all other lines in the + file: +

+
sed -e '1i\#![warn(dangerous_implicit_autorefs)]\r' \
+    -i third_party/rust/allocator-api2/src/stable/vec/mod.rs
+

+ Now invoke the Python mach script to compile + Thunderbird: +

+
+

+ Note +

+

+ If you are compiling this package in chroot you must ensure + that /dev/shm is mounted. If + you do not do this, the Python configuration will fail with a + traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py. + As the root user, run: +

+
mountpoint -q /dev/shm || mount -t tmpfs devshm /dev/shm
+
+
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none &&
+export MOZBUILD_STATE_PATH=$(pwd)/mozbuild          &&
+./mach build
+

+ This package does not come with a test suite. +

+

+ Install Thunderbird by + running the following commands as the root user: +

+
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none ./mach install
+

+ Empty the environment variables which were set above: +

+
unset MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE &&
+unset MOZBUILD_STATE_PATH
+
+
+

+ Command Explanations +

+

+ MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=none: + Use the system python to create a virtual environment for + mach without + downloading any python wheels nor using the system python + modules. This prevent version mismatches between system + modules and bundled ones. +

+

+ ./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. +

+

+ ./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. +

+

+ CC=gcc + CXX=g++: BLFS used to prefer to use gcc and g++ + instead of upstream's defaults of the clang programs. With the release of + gcc-12 the build takes longer with gcc and g++, primarily + because of extra warnings, and is bigger. Set these + environment variables before you + run the configure script if you wish to continue + to use gcc, g++. Building with GCC on i?86 is currently + broken. +

+
+
+

+ Configuring Thunderbird +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ If your Window Manager or Desktop Environment 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 + “Settings” 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. +

+

+ 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: + Numerous libraries and modules in + the /usr/lib/thunderbird directory +
+
+ Installed Directory: + /usr/lib/thunderbird +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ thunderbird +

+
+

+ is Mozilla's email + and newsgroup client +

+
+
+
+
+
+
+
+

+ Tigervnc-1.15.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+

+ Note +

+

+ The version of Xorg may + eventually be a few versions out of date, but is required + for the customizations needed for this package. +

+
+ +

+ Tigervnc Dependencies +

+
+ Required +
+

+ CMake-4.1.0, FLTK-1.4.4, GnuTLS-3.8.10, libgcrypt-1.11.2, libjpeg-turbo-3.0.1, Linux-PAM-1.7.1, Pixman-0.46.4, + Xorg Applications, xinit-1.4.4, and + Xorg + Legacy Fonts +

+
+ Recommended +
+ +
+
+

+ Installation of Tigervnc +

+

+ First, make adjustments to the configuration files to make + them compatible with LFS systems: +

+
patch -Np1 -i ../tigervnc-1.15.0-configuration_fixes-1.patch
+

+ Now, make the package consistent with fltk-1.4.1 and later: +

+
sed -i "s/maximize)/::&/"         vncviewer/DesktopWindow.cxx &&
+sed -i "/FL_MINOR_VERSION/s/3/4/" CMakeLists.txt
+

+ Install tigervnc by running + the following commands: +

+
# Put code in place
+mkdir -p unix/xserver &&
+tar -xf ../xorg-server-21.1.18.tar.xz \
+    --strip-components=1              \
+    -C unix/xserver                   &&
+( cd unix/xserver &&
+  patch -Np1 -i ../xserver21.patch ) &&
+
+# Build viewer
+cmake -G "Unix Makefiles"          \
+      -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D INSTALL_SYSTEMD_UNITS=OFF \
+      -W no-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 &&
+mv  /usr/share/doc/tigervnc /usr/share/doc/tigervnc-1.15.0
+
+#Install server
+( cd unix/xserver/hw/vnc && make install ) &&
+
+[ -e /usr/bin/Xvnc ] || ln -svf $XORG_PREFIX/bin/Xvnc /usr/bin/Xvnc
+

+ Finally, modify the PAM file to be compatible with elogind: +

+
sed -i 's/pam_systemd.so/pam_elogind.so/' /etc/pam.d/tigervnc
+
+
+

+ 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 +

+

+ The default installation of this package makes some changes + in the way it is used. The vncserver perl script is placed in + /usr/bin/libexec and the server is designed to be run via a + systemd style .service file or the vncsession script as the + root user. The man page for vncserver is placed in section 8 + of the man pages. The new procedures require a display + manager to be installed. +

+

+ To restore the previous behavior, install the additional + downloaded files as the root + user: +

+
install -m755 --owner=root ../vncserver /usr/bin &&
+cp ../vncserver.1 /usr/share/man/man1
+

+ Using the previous procedures, the user specific + configuration files of vncserver reside in the .vnc directory in the user's home + directory. The xstartup file in + that directory is a script specifying what commands to run + when a VNC desktop is started. If no xstartup file exists, vncserver will try to start + an xterm in a twm session. An example xstartup would be: +

+
#!/bin/sh
+[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
+[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
+startlxqt &
+

+ The xstartup file must be + executable for the commands in it to be executed, so run + chmod a+x + ~/.vnc/xstartup. +

+

+ Set up the vnc passwd with vncpasswd. The server can + then be started with the vncserver command. See the + man pages in section 1 for the vncserver for the server + system and vncviewer for the remote system. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + Xvnc, vncconfig, vncpasswd, + vncserver, vncviewer, and x0vncserver +
+
+ Installed Libraries: + libvnc.so +
+
+ Installed Directories: + /usr/share/doc/tigervnc-1.15.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 +

+
+
+
+
+
+
+
+

+ Transmission-4.0.6 +

+
+
+
+
+
+

+ 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. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Transmission Dependencies +

+
+ Required +
+

+ cURL-8.15.0 +

+
+ Recommended +
+ +
+ Recommended (to build a GUI) +
+ +
+ Optional +
+

+ nodejs-22.18.0 (for building the web + client, not needed at run time), + appindicator, dht, libb64, libdeflate, + libnatpmp, + libutp, and + miniupnp +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/transmission +

+
+
+

+ Installation of Transmission +

+

+ First, fix a build failure due to incorrect statements in + CMakeLists.txt: +

+
patch -Np1 -i ../transmission-4.0.6-build_fix-1.patch
+

+ Next, adapt two of the third-party modules to changes in + CMake 4.0: +

+
sed -e 's/2.8/4.0/' -i third-party/dht/CMakeLists.txt \
+                       third-party/libnatpmp/CMakeLists.txt
+

+ Install Transmission by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_INSTALL_DOCDIR=/usr/share/doc/transmission-4.0.6 \
+      .. &&
+
+make
+

+ Now, as the root user: +

+
make install
+

+ Next, if the Gtkmm-4.18.0 dependency was installed, + create transmission.png from the SVG file. As the + root user: +

+
rsvg-convert                                               \
+   /usr/share/icons/hicolor/scalable/apps/transmission.svg \
+   -o /usr/share/pixmaps/transmission.png
+
+
+

+ Command Explanations +

+

+ -D ENABLE_QT=OFF: This switch + disables building the Qt + interface. The default is to build it if Qt-6.9.2 is installed. +

+

+ -D ENABLE_GTK=OFF: This switch + disables building the GTK-4 interface. The default is to + build it if Gtkmm-4.18.0 is installed. +

+

+ -D ENABLE_WEB=OFF: This switch + disables building the web client. The default is to build it + if nodejs-22.18.0 is installed. +

+

+ -D REBUILD_WEB=ON: This switch + forces rebuilding the web client. This option needs nodejs-22.18.0 to be installed as well + as an internet connection. The default is to not rebuild the + client. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + transmission-create, + transmission-daemon, transmission-edit, transmission-gtk, + transmission-qt, transmission-remote, and + transmission-show +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/transmission (contains + the web client) and + /usr/share/doc/transmission-4.0.6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ 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 tool to modify .torrent files' + announce URLs +

+
+

+ transmission-gtk +

+
+

+ is a GTK+ bittorrent client +

+
+

+ transmission-qt +

+
+

+ is a Qt-based 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 +

+
+
+
+
+
+
+
+

+ xarchiver-0.5.4.25 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+
+

+ Note +

+

+ xarchiver is only a + command line or graphical interface to archiving utilities + such as tar and + zip. +

+
+

+ Package Information +

+
+ +
+

+ xarchiver Dependencies +

+
+ Required +
+

+ GTK-3.24.50 +

+
+ Optional (Runtime) +
+

+ 7zip-25.01, cpio-2.15, LZO-2.10, UnRar-7.1.10, Zip-3.0, and + unzip +

+
+
+

+ Installation of xarchiver +

+

+ BLFS provides unzip as a symlink to + bsdunzip from + libarchive-3.8.1, but it doesn't work + for xarchiver. Adapt xarchiver to use 7zip-25.01 for handling + .zip files by default instead: +

+
sed '/TOGGLE.*prefer_unzip/s/TRUE/FALSE/' -i src/pref_dialog.c
+
+

+ Note +

+

+ If you've already installed and run this package before + (maybe in another distro if your /home is a partition shared with that + distro), it's likely already configured to prefer + unzip. Unset + the “Prefer unzip + for zip files” checkbox in the “Action => + Preferences” dialog to change the + configuration. +

+
+

+ Install xarchiver by running + the following commands: +

+
./configure  --prefix=/usr               \
+             --libexecdir=/usr/lib/xfce4 \
+             --docdir=/usr/share/doc/xarchiver-0.5.4.25 &&
+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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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.20.4 is installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + xarchiver +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/xfce4/thunar-archive-plugin, + /usr/share/doc/xarchiver-0.5.4.25, and + /usr/share/pixmaps/xarchiver +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ xarchiver +

+
+

+ is a GTK+ archive + manager +

+
+
+
+
+
+
+
+

+ xdg-utils-1.2.1 +

+
+
+
+
+
+

+ Introduction to xdg-utils +

+

+ xdg-utils is 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. +

+

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

+

+ Package Information +

+
+ +
+

+ xdg-utils Dependencies +

+
+ Required +
+

+ xmlto-0.0.29 with one of Lynx-2.9.2, Links-2.30, or + W3m +

+
+ Required (runtime) +
+

+ Xorg Applications +

+
+ Optional (runtime) +
+

+ dbus-1.16.2 +

+
+
+

+ Installation of xdg-utils +

+

+ Compile xdg-utils with the + following commands: +

+
./configure --prefix=/usr &&
+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 +

+
+
+
+
+
+
+
+

+ XScreenSaver-6.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+
+

+ Note +

+

+ This tarball expands to xscreensaver-6.10 and not the + expected xscreensaver-6.10.1. +

+
+

+ Package Information +

+
+ +
+

+ XScreenSaver Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and Xorg Applications +

+
+ Recommended +
+ +
+ Optional +
+

+ GDM-48.0, + FFmpeg-7.1.1, Linux-PAM-1.7.1, + MIT Kerberos V5-1.22.1, and + GLE +

+
+
+

+ Installation of XScreenSaver +

+

+ Install XScreenSaver by + running the following commands: +

+
./configure --prefix=/usr --with-elogind &&
+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, and xscreensaver-settings +
+
+ 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-settings +

+
+

+ is a graphical front-end for setting the parameters + used by the background xscreensaver + daemon +

+
+
+
+
+
+
+
+
+
+

+ 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 +

+
+
+
+
+

+ 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, and the firmware. +

+
+
+
+
+

+ alsa-lib-1.2.14 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ ALSA + Library Dependencies +

+
+ Recommended (Runtime) +
+

+ elogind-255.17 +

+
+

+ Note +

+

+ If the recommended runtime dependency is not installed, you + may need to run any application requiring ALSA library as + the root user or a user in + the audio group. +

+
+
+ Optional +
+

+ Doxygen-1.14.0 and Python2 +

+
+
+

+ Kernel + Configuration +

+

+ If needed, enable the following options in the kernel + configuration and recompile the kernel: +

+
Device Drivers --->
+  <*/M> Sound card support --->                                          [SOUND]
+    # Select settings and drivers appropriate for your hardware
+    # in the submenu:
+    <*/M> Advanced Linux Sound Architecture --->                           [SND]
+

+ 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. If necessary, recompile and install your new + kernel. +

+
+
+

+ Installation of ALSA Library +

+

+ If running the test suite, remove a test that GCC-15 or later + fails to build: +

+
sed 's/playmidi1//' -i test/Makefile.am &&
+autoreconf -fi
+

+ 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, + install the package and recommended configuration files: +

+
make install &&
+tar -C /usr/share/alsa --strip-components=1 -xf ../alsa-ucm-conf-1.2.14.tar.bz2
+

+ To install the API documentation, run the following command + as the root user: +

+
install -v -d -m755 /usr/share/doc/alsa-lib-1.2.14/html/search &&
+install -v -m644 doc/doxygen/html/*.* \
+                /usr/share/doc/alsa-lib-1.2.14/html &&
+install -v -m644 doc/doxygen/html/search/* \
+                /usr/share/doc/alsa-lib-1.2.14/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.14 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ aserver +

+
+

+ is the ALSA server +

+
+

+ libasound.so +

+
+

+ contains the ALSA API functions +

+
+

+ libatopology.so +

+
+

+ contains API functions for the ALSA topologies +

+
+
+
+
+
+
+
+

+ alsa-plugins-1.2.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ALSA + Plugins Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14 +

+
+ Optional +
+

+ FFmpeg-7.1.1, libsamplerate-0.2.2, PulseAudio-17.0, Speex-1.2.1, JACK, libavtp, + and maemo +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ alsa-utils-1.2.14 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ALSA + Utilities Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14 +

+
+ Optional +
+

+ docutils-0.21.2, fftw-3.3.10, libsamplerate-0.2.2, xmlto-0.0.29, + and Dialog +

+
+
+

+ Installation of ALSA Utilities +

+

+ Install ALSA Utilities by + running the following commands: +

+
./configure --disable-alsaconf \
+            --disable-bat      \
+            --disable-xmlto    \
+            --with-curses=ncursesw &&
+make
+

+ To test the results, issue: make check. +

+

+ 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.29 and wish to + regenerate the man pages. +

+

+ --disable-bat: Omit + this switch if you have installed fftw-3.3.10 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 +

+
+
+
+

+ As the root user, apply the + default setting for the sound card. Note that this command + may return an exit code of 99 although the card is + correctly initialized: +

+
alsactl init
+

+ Note that all channels of your sound card may be 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). +

+

+ On systems which have multiple sound cards, you may need to + adjust the default audio device so that you can get output + from your speakers. To set the default device, first check + the /proc/asound/cards file + to determine which number you need to set. After you know + this information, set the default card with the following + command as the root user: +

+
cat > /etc/asound.conf << "EOF"
+# Begin /etc/asound.conf
+
+defaults.pcm.card 1
+defaults.ctl.card 1
+
+# End /etc/asound.conf
+EOF
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ To automatically store and restore volume settings (if the + udev rule doesn't work for you) when the system is + rebooted, install the /etc/rc.d/init.d/alsa boot script from + the blfs-bootscripts-20250225 package. +

+
make install-alsa
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + aconnect, alsactl, alsaloop, + alsamixer, alsatplg, alsaucm, alsa-info.sh, amidi, + amixer, aplay, aplaymidi, aplaymidi2, arecord (symlink), + arecordmidi, arecordmidi2, aseqdump, aseqnet, aseqsend, + axfer, iecset, nhlt-dmic-info, and speaker-test +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/alsa-topology, + /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 +

+
+

+ aplaymidi2 +

+
+

+ is a command-line utility that plays the specified + MIDI clip 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 +

+
+

+ arecordmidi2 +

+
+

+ is a command-line utility that records a MIDI Clip + 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 +

+
+

+ aseqsend +

+
+

+ is a command-line utility to send arbitrary + messages to ALSA MIDI sequencer ports +

+
+

+ 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 +

+
+

+ nhlt-dmic-info +

+
+

+ is a command-line utility that dumps microphone + array information from the ACPI NHLT table +

+
+

+ speaker-test +

+
+

+ is a command-line speaker test tone generator for + ALSA +

+
+
+
+
+
+
+
+

+ alsa-tools-1.2.14 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ALSA + Tools Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14 +

+
+ Optional +
+

+ GTK-3.24.50 (to build hdajackretask), FLTK-1.4.4 (to + build hdspconf + and hdspmixer), + and GTK+-2 + (to build echomixer, envy24control, and + rmedigicontrol) +

+
+
+

+ 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. +
  3. +

    + Use the sudo command from + the Sudo-1.9.17p2 package. +

    +
  4. +
  5. +

    + Use su -c "command + arguments" (quotes required) which + will ask for the root password for every iteration of + the loop. +

    +
  6. +
+
+

+ 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 some tools that need Qt2 or 3 or GTK+-2, + and also two unneeded files (for the BLFS instructions + below): +

+
rm -rf qlo10k1 echomixer envy24control rmedigicontrol 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, hda-verb, + hdajackretask, hdajacksensetest, hdspconf, hdsploader, + hdspmixer, hwmixvolume, init_audigy, init_audigy_eq10, + init_live, lo10k1, ld10k1, ld10k1d, mixartloader, + pcxhrloader, 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 +

+
+

+ hdajackretask +

+
+

+ is a GUI to make it easy to retask your jacks - e + g, turn your Mic jack into an extra Headphone, or + 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 + snd-mixart module requires this program. These + drivers don't work properly until the required + firmware files 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 snd-pcxhr module requires this + program. These drivers don't work properly until + certain firmware files are loaded, i.e. no PCM nor + mixer devices will appear +

+
+

+ 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 + snd-vx222, snd-vxpocket, and snd-vxp440 modules + require this program. These drivers don't work + properly until certain firmware files are loaded, + i.e. no PCM nor mixer devices will appear +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ ALSA + Firmware Dependencies +

+
+ Required +
+

+ alsa-tools-1.2.14 +

+
+ Optional +
+

+ AS31 (for rebuilding the + firmware from source) +

+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ AudioFile Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1 and Valgrind-3.25.1 +

+
+
+

+ Installation of AudioFile +

+

+ Install AudioFile by running + the following commands: +

+
patch -Np1 -i ../audiofile-0.3.6-consolidated_patches-1.patch &&
+autoreconf -fiv                             &&
+
+./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 +

+
+
+
+
+
+
+
+

+ faac-1.31.1 +

+
+
+
+
+
+

+ Introduction to faac +

+

+ The faac application 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 an iPod. Moreover, + the iPod does not understand other sound compression schemes + used in video files. +

+

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

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ On GitHub we've forked the upstream repository into our own + lfs-book namespace and + recreated a tag for the release. This is done to ensure the + downloaded tarball file name to be correct and consistent + (i.e. it shouldn't change when using the browser instead of + a tool like wget). Our tag and the + upstream release tag are on the same commit, so we've not + introduced any change to the tarball content except the + name of its top-level directory (that Git does not track). +

+
+
+
+

+ 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.14 + 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.11.2 package and play back the + decoded file (requires the aplay program from the + alsa-utils-1.2.14 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. One example of an + alternative program for producing AAC and HE-AAC streams is: +

+
+
    +
  • +

    + + 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 the iPod supports only the Low Complexity + AAC profile, which is the default in faac, but 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 +

+
+
+
+
+
+
+
+

+ FAAD2-2.11.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ FAAD2 Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+
+

+ Installation of FAAD2 +

+

+ Install FAAD2 by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_SHARED_LIBS=ON      \
+      .. &&
+make
+

+ This package does not come with a test suite. However, basic + functionality can be tested by decoding the sample AAC file: +

+
./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.14 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
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ fdk-aac-2.0.3 +

+
+
+
+
+
+

+ Introduction to fdk-aac +

+

+ The 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ FLAC-1.5.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/xiph/flac/releases/download/1.5.0/flac-1.5.0.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 0bb45bcf74338b00efeec121fff27367 +

    +
  • +
  • +

    + Download size: 1.1 MB +

    +
  • +
  • +

    + Estimated disk space required: 25 MB (additional 170 MB + to run the test suite) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (additional 0.2 SBU to + run the test suite) +

    +
  • +
+
+

+ FLAC + Dependencies +

+
+ Optional +
+

+ libogg-1.3.6, DocBook-utils-0.6.14, Doxygen-1.14.0, and Valgrind-3.25.1 +

+
+
+

+ Installation of FLAC +

+

+ Install FLAC by running the + following commands: +

+
./configure --prefix=/usr            \
+            --disable-thorough-tests \
+            --docdir=/usr/share/doc/flac-1.5.0 &&
+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.5.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ frei0r-2.3.3 +

+
+
+
+
+
+

+ Introduction to Frei0r +

+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Frei0r Dependencies +

+
+ Recommended +
+

+ gavl-1.4.0 +

+
+ Optional +
+

+ Doxygen-1.14.0 and opencv-4.12.0 +

+
+
+

+ Installation of frei0r +

+

+ Install Frei0r by running + the following commands: +

+
mkdir -vp build &&
+cd        build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -W no-dev .. &&
+
+make
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ -D WITHOUT_OPENCV=TRUE: This + option instructs the make procedure to disable building + plugins dependent upon opencv. +

+

+ -D WITHOUT_GAVL=TRUE: This option + instructs the make procedure to disable building plugins + dependent upon gavl. +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + None +
+
+ Installed Libraries: + Over 150 video effects + plugins +
+
+ Installed Directories: + /usr/lib/frei0r-1 +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Gavl + Dependencies +

+
+ Required +
+

+ libpng-1.6.50 +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of Gavl +

+

+ First, fix an issue with gcc-14 and later: +

+
sed -i "/stdio/a #include <string.h>" src/fill_test.c
+

+ Now, install Gavl by running + the following commands: +

+
LIBS=-lm                         \
+./configure --prefix=/usr        \
+            --without-doxygen    \
+            --with-cpuflags=none \
+            --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. +

+

+ --with-cpuflags=none: + This switch fixes a problem identifying capabilities of the + system architecture. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gstreamer-1.26.5 +

+
+
+
+
+
+

+ 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.26.5 and one + of Good, Bad, Ugly or Libav plugins. +

+

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

+

+ Package Information +

+
+ +
+

+ gstreamer Dependencies +

+
+ Required +
+

+ GLib-2.84.4 (GObject Introspection required + for GNOME) +

+
+ Optional +
+

+ GTK-3.24.50 (for examples), gsl-2.8 (used by one test if + installed), libnsl-2.0.1, libunwind-1.8.2, + rustc-1.89.0 (for IEEE 1588:2008 PTP clock + support), Valgrind-3.25.1, bash-completion, + hotdoc, and libdw +

+
+
+

+ Installation of gstreamer +

+

+ Install gstreamer by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gst_debug=false  &&
+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 utility 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 +

+
+
+
+
+
+
+
+

+ gst-plugins-base-1.26.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GStreamer Base Plug-ins Dependencies +

+
+ Required +
+

+ gstreamer-1.26.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ graphene-1.10.8, GTK-3.24.50 (for examples), + Opus-1.5.2, SDL2-2.32.8, Valgrind-3.25.1, + hotdoc, libtheora, libvisual, Orc, and + Tremor +

+
+
+

+ Installation of GStreamer Base Plug-ins +

+
+

+ Note +

+

+ If you need a plugin for a given dependency, that + dependency needs to be installed before this package. +

+
+

+ Install GStreamer Base + Plug-ins by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..               \
+      --prefix=/usr          \
+      --buildtype=release    \
+      --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. One test, + elements_appsrc, is known to + fail on some systems. +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ gst-plugins-good-1.26.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GStreamer Good Plug-ins Dependencies +

+
+ Required +
+

+ gst-plugins-base-1.26.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ AAlib-1.4rc5, GTK-3.24.50 (for examples), libdv-1.0.0, + Qt-6.9.2, + Speex-1.2.1, taglib-2.1.1, Valgrind-3.25.1, + v4l-utils-1.30.1, Wayland-1.24.0, + alsa-oss, + hotdoc, JACK, libcaca, libavc1394, + libiec61883, + libraw1394, + libshout, + libsoup2, + Orc, + TwoLame, + and WavPack +

+
+
+

+ Installation of GStreamer Good Plug-ins +

+
+

+ 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: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release &&
+ninja
+

+ To test the results, issue: ninja test. One test, + elements_flvmux, is known to + fail on some systems. +

+

+ 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 +
+
+
+
+
+
+
+
+

+ gst-plugins-bad-1.26.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GStreamer Bad Plug-ins Dependencies +

+
+ Required +
+

+ gst-plugins-base-1.26.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ BlueZ-5.83, cURL-8.15.0, faac-1.31.1, FAAD2-2.11.2, + fdk-aac-2.0.3, GTK-3.24.50 (for examples), + gst-plugins-good-1.26.5 (for + one test), JSON-GLib-1.10.6, Little CMS-2.17, + libaom-3.12.1, libass-0.17.4, libexif-0.6.25 (for one test), librsvg-2.61.0, libsndfile-1.2.2, + libssh2-1.11.1, libusb-1.0.29, libwebp-1.6.0, libxkbcommon-1.11.0, libxml2-2.14.5, neon-0.35.0, Nettle-3.10.2 or + libgcrypt-1.11.2 (for SSL support in + the hls plugin, if both are not installed OpenSSL will be + used instead), opencv-4.12.0 (with additional modules), + OpenJPEG-2.5.3, Opus-1.5.2, Pango-1.56.4, + libqrencode-4.1.1, SBC-2.1, sdl12-compat-1.2.68, Valgrind-3.25.1, both Vulkan-Loader-1.4.321 and + glslc from shaderc-2025.3 + (for Vulkan plugin), Wayland-1.24.0 (GTK-3.24.50 must have been + compiled with wayland support), x265-4.1, zxing-cpp-2.3.0, + bs2b, Chromaprint, + dssim, Flite, + FluidSynth, Game + Music Emu, GSM (currently broken), + hotdoc, LADSPA, ldacBT, + libajantv2, + libavtp, + libdc1394-2, libdca, + libde265, libkate, + libmfx, + libmms, + libmodplug, + libnice, libofa, + libopenmpt, + libopenni, libsoup2, + libsrtp, lilv, + LRDF, + ltc-tools, microdns, + MJPEG + Tools, mplex2, + musepack, onnxruntime, + OpenAL, + OpenEXR, + OpenH264, Orc, + rtmpdump, spandsp, + Srt, svthevcenc, + + VO AAC, + VO AMRWB, WildMidi, + WPE-WebKit, WPEBackend-fdo, + ZBAR, and ZVBI +

+
+
+

+ Installation of GStreamer Bad Plug-ins +

+
+

+ 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 setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gpl=enabled      &&
+ninja
+

+ To test the results, issue: ninja test. Several tests + need a terminal emulator in a graphical session. If gst-plugins-good-1.26.5 is not + installed, two tests, elements_rtpsrc and elements_rtpsink, 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. +

+

+ -D gpl=enabled: + Without this switch, plugins with dependencies on (A)GPL + licensed libraries are not built. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gst-transcoder-1.0 and + playout +
+
+ Installed Libraries: + libgstadaptivedemux-1.0.so, + libgstanalytics-1.0.so, libgstbadaudio-1.0.so, + libgstbasecamerabinsrc-1.0.so, libgstcuda-1.0.so, + libgstcodecparsers-1.0.so, libgstcodecs-1.0.so, + libgstdxva-1.0.so, libgstinsertbin-1.0.so, + libgstisoff-1.0.so, libgstmpegts-1.0.so, + libgstmse-1.0.so, libgstphotography-1.0.so, + libgstplay-1.0.so, libgstplayer-1.0.so, + libgstsctp-1.0.so, libgsttranscoder-1.0.so, + libgsturidownloader-1.0.so, libgstva-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,cuda}, + /usr/include/gstreamer-1.0/gst/{codecparsers,insertbin,interfaces}, + /usr/include/gstreamer-1.0/gst/{isoff,mpegts,play,player,sctp} + /usr/include/gstreamer-1.0/gst/{transcoder,uridownloader,va}, + and + /usr/include/gstreamer-1.0/gst/{wayland,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 +

+
+
+
+
+
+
+
+

+ gst-plugins-ugly-1.26.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GStreamer Ugly Plug-ins Dependencies +

+
+ Required +
+

+ gst-plugins-base-1.26.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ libmpeg2-0.5.1, libcdio-2.1.0 (for + CD-ROM drive access), Valgrind-3.25.1, hotdoc, libsidplay, + and Orc +

+
+
+

+ Installation of GStreamer Ugly Plug-ins +

+
+

+ 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 setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gpl=enabled      &&
+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. +

+

+ -D gpl=enabled: + Without this switch, plugins with dependencies on (A)GPL + licensed libraries are not built. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + Several plugins under + /usr/lib/gstreamer-1.0 +
+
+ Installed Directories: + None +
+
+
+
+
+
+
+
+

+ gst-libav-1.26.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ GStreamer Libav Dependencies +

+
+ Required +
+

+ FFmpeg-7.1.1 and gst-plugins-base-1.26.5 +

+
+ Recommended +
+ +
+ Optional +
+

+ hotdoc +

+
+
+

+ Installation of GStreamer Libav +

+

+ Install GStreamer Libav by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release &&
+ninja
+

+ To run the tests, 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: + libgstlibav.so in + /usr/lib/gstreamer-1.0 +
+
+ Installed Directory: + None +
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ intel-media-driver-25.2.6 +

+
+
+
+
+
+

+ Introduction to intel-media-driver +

+

+ The intel-media-driver + package provides a VA API driver for Intel GPUs that are + provided with Broadwell CPUs and higher. This includes + support for a variety of codecs. +

+

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

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ On GitHub we've forked the upstream repository into our own + lfs-book namespace and + recreated a tag for the release. This is done to ensure the + downloaded tarball file name to be correct and consistent + (i.e. it shouldn't change when using the browser instead of + a tool like wget). Our tag and the + upstream release tag are on the same commit, so we've not + introduced any change to the tarball content except the + name of its top-level directory (that Git does not track). +

+
+

+ intel-media-driver Dependencies +

+
+ Required +
+

+ CMake-4.1.0, gmmlib-22.8.1, libva-2.22.0, and + Xorg build + environment +

+
+
+

+ Kernel Configuration +

+

+ Enable the following options in the kernel configuration. + Recompile the kernel if necessary: +

+
Device Drivers --->
+  Graphics support --->
+    <*/M>   Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    < /*/M> Intel 8xx/9xx/G3x/G4x/HD Graphics                         [DRM_I915]
+    < /*/M> Intel Xe2 Graphics                                          [DRM_XE]
+    (*)       Force probe xe for selected Intel hardware IDs
+                                                       ...  [DRM_XE_FORCE_PROBE]
+

+ See Mesa Kernel Configuration for more + info about the i915 driver and the Xe driver. +

+
+
+

+ Installation of intel-media-driver +

+
+

+ Note +

+

+ This package takes a long time to build because it compiles + code specific to each individual generation of Intel GPUs + and for a variety of media codecs. +

+

+ If you know the model of your Intel GPU, you can pass the + -D{GEN{8,9,11,12},MTL,ARL,LNL,BMG,PTL}=OFF + option to the cmake command but leaving + the option for your GPU out. Note that the “GEN” number here + is the generation of the GPU, not the CPU. For example, + with an Intel Core i7-1065G7 CPU shipping a 11th-generation + Intel GPU, the -D{GEN{8,9,12},MTL,ARL,LNL,BMG,PTL}=OFF + option can be used so the code specific to the other + generations of Intel GPUs won't be built. +

+

+ To determine the model of the Intel GPU, install pciutils-3.14.0 and run lspci -nn | grep -Ei + 'VGA|DISPLAY' first. It will output some + information about the GPU, including the PCI vendor ID + (8086 for Intel) and the PCI + device ID. For example, with an Intel Core i5-11300H CPU, + the output is 8086:9a49. Now + searching for the registration of this device ID in the + intel-media-driver source tree: +

+
grep -ri 'RegisterDevice(0x9a49'
+

+ And determine the GPU model from the file name containing + the registration. For the example above, the file name is + media_sysinfo_g12.cpp, + indicating the model is GEN12. +

+
+

+ Install intel-media-driver + by running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$XORG_PREFIX \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5  \
+      -D INSTALL_DRIVER_SYSCONF=OFF        \
+      -D BUILD_TYPE=Release                \
+      -D MEDIA_BUILD_FATAL_WARNINGS=OFF    \
+      -G Ninja                             \
+      -W no-dev ..                         &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libigfxcmrt.so +
+
+ Installed Drivers: + iHD_drv_video.so +
+
+ Installed Directories: + /usr/include/igfxcmrt +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libigfxcmrt.so +

+
+

+ provides API functions which allow running GPU + kernels on the render engine +

+
+
+
+
+
+
+
+

+ intel-vaapi-driver-2.4.1 +

+
+
+
+
+
+

+ Introduction to intel-vaapi-driver +

+

+ The intel-vaapi-driver + package contains a VA API driver for Intel GPUs that are + provided with Haswell CPUs and earlier. +

+

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

+

+ Package Information +

+
+ +
+

+ intel-vaapi-driver Dependencies +

+
+ Required +
+

+ libva-2.22.0 and Xorg build + environment +

+
+
+

+ Kernel Configuration +

+

+ Enable the following options in the kernel configuration. + Recompile the kernel if necessary: +

+
Device Drivers --->
+  Graphics support --->
+    <*/M>   Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    < /*/M> Intel 8xx/9xx/G3x/G4x/HD Graphics                         [DRM_I915]
+    < /*/M> Intel Xe2 Graphics                                          [DRM_XE]
+    (*)       Force probe xe for selected Intel hardware IDs
+                                                       ...  [DRM_XE_FORCE_PROBE]
+
+
+

+ Installation of intel-vaapi-driver +

+

+ 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 Driver: + i965_drv_video.so +
+
+
+
+
+
+
+
+

+ Liba52-0.8.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+ Optional +
+

+ djbfft +

+

+ Editor 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 -O3} -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.8.0/liba52.txt
+
+
+

+ Command Explanations +

+

+ CFLAGS="${CFLAGS:--g -O3} + -fPIC": This appends -fPIC to CFLAGS + but use -g -O3 (the default of + this package) instead of an empty string when CFLAGS is not set. This is needed to compile + liba52 without runtime text + relocation. Runtime text relocation is prohibited on x86_64 + so -fPIC is strictly required. On + 32-bit x86 runtime text relocation is allowed but it's + insecure and it may waste physical RAM, so -fPIC is still better. +

+

+ --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.8.0 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Libao Dependencies +

+
+ Optional +
+

+ a graphical + environment, alsa-lib-1.2.14, and PulseAudio-17.0 +

+
+
+

+ Installation of Libao +

+

+ First, fix a gcc-14 issue: +

+
sed -i '/limits.h/a #include <time.h>' src/plugins/pulse/ao_pulse.c
+

+ 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 +

+
+
+
+
+
+
+
+

+ libaom-3.12.1 +

+
+
+
+
+
+

+ Introduction to libaom +

+

+ The libaom package contains + a reference version of the Alliance for Open Media video + codec. This codec is a patent free alternative to H.265, and + is starting to be used throughout the internet. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://storage.googleapis.com/aom-releases/libaom-3.12.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 51e4e369c41f66d2f8f1ed83e2206908 +

    +
  • +
  • +

    + Download size: 5.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 125 MB (add 1 GB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.8 SBU (with parallelism=4, add + 128 SBU for tests) +

    +
  • +
+
+

+ libaom Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of libaom +

+

+ Install libaom by running + the following commands: +

+
mkdir aom-build &&
+cd    aom-build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_SHARED_LIBS=1       \
+      -D ENABLE_DOCS=no            \
+      -G Ninja .. &&
+ninja
+

+ To test the results, issue: ninja testdata && ninja + runtests. Note that the tests take an + extremely long time to run. +

+

+ Now, as the root user: +

+
ninja install &&
+rm -v /usr/lib/libaom.a
+
+
+

+ Command Explanations +

+

+ -D + BUILD_SHARED_LIBS=1: This switch builds shared + versions of the libraries. +

+

+ -D ENABLE_DOCS=no: + This switch disables building the documentation because it + fails due to an incompatibility with the latest version of + Doxygen-1.14.0. +

+

+ -D ENABLE_NASM=yes: Use this + switch if you have both yasm-1.3.0 and NASM-2.16.03 installed and wish to + use nasm instead of yasm. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + aomdec and aomenc +
+
+ Installed Libraries: + libaom.so +
+
+ Installed Directories: + /usr/include/aom +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ aomdec +

+
+

+ offers various decoders supported by this package, + including one for AV1 +

+
+

+ aomenc +

+
+

+ offers various encoders supported by this package, + including one for AV1 +

+
+

+ libaom.so +

+
+

+ contains functions that provide a reference + implementation of the AV1 codec +

+
+
+
+
+
+
+
+

+ libass-0.17.4 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libass Dependencies +

+
+ Required +
+

+ FreeType-2.13.3 and FriBidi-1.0.16 +

+
+ Recommended +
+ +
+ Optional +
+

+ harfBuzz-11.4.1 and libunibreak +

+
+
+

+ Installation of libass +

+

+ Install libass 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. +

+

+ --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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ libcanberra Dependencies +

+
+ Required +
+

+ libvorbis-1.3.7 +

+
+ Recommended +
+ +
+ Optional +
+

+ PulseAudio-17.0, GTK+-2 + and tdb +

+
+ Recommended Sound Theme (Run Time) +
+ +
+
+

+ Installation of libcanberra +

+

+ First, apply a patch to fix an issue causing some + applications to crash in Wayland-based desktop environments: +

+
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: + disables optional deprecated OSS support +

+

+ --disable-gtk3: disables optional + support for GTK+-3 +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + canberra-boot and + canberra-gtk-play +
+
+ Installed Libraries: + 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-gtk3.so +

+
+

+ contains the libcanberra bindings for + GTK+ 3 +

+
+

+ libcanberra.so +

+
+

+ contains the libcanberra API functions +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of libcddb +

+

+ By default this package accesses freedb.org, which is already closed. + Modify the default to use gnudb.gnudb.org instead, and fix two + stale test data files: +

+
sed -e '/DEFAULT_SERVER/s/freedb.org/gnudb.gnudb.org/' \
+    -e '/DEFAULT_PORT/s/888/&0/'                       \
+    -i include/cddb/cddb_ni.h                          &&
+sed '/^Genre:/s/Trip-Hop/Electronic/' -i tests/testdata/920ef00b.txt &&
+sed '/DISCID/i# Revision: 42'         -i tests/testcache/misc/12340000
+

+ Fix a problem building with gcc-14 and later: +

+
sed -i 's/size_t l;/socklen_t l;/' lib/cddb_net.c
+

+ Install libcddb by running + the following commands: +

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

+ To test the results, issue: make check -k. The test + suite needs the Internet connection. One test fails due to + missing test server. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://ftp.gnu.org/gnu/libcdio/libcdio-2.1.0.tar.bz2 +

    +
  • +
  • +

    + Download MD5 sum: aa7629e8f73662a762f64c444b901055 +

    +
  • +
  • +

    + Download size: 1.7 MB +

    +
  • +
  • +

    + Estimated disk space required: 53 MB (both packages, + including checks) +

    +
  • +
  • +

    + Estimated build time: 0.2 SBU (using parallelism=4; + both packages, including checks) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ libcdio Dependencies +

+
+ Optional +
+

+ libcddb-1.3.2 +

+
+
+

+ Installation of libcdio +

+

+ If you are building on an i686 system, fix a build issue + caused by large file support: +

+
sed '/CDIO_LSEEK/s/lseek64/lseek/' -i lib/driver/_cdio_generic.c
+

+ Install libcdio by running + the following commands: +

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

+ To test the results, issue: make check -k. One test + named realpath is known to + fail. +

+

+ Now, as the root user: +

+
make install
+

+ Now install libcdio-paranoia: +

+
tar -xf ../libcdio-paranoia-10.2+2.0.2.tar.bz2 &&
+cd libcdio-paranoia-10.2+2.0.2 &&
+
+./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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libdvdcss Dependencies +

+
+ Optional (to Create Documentation) +
+

+ Doxygen-1.14.0 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Libdvdread-6.1.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of Libdvdread +

+

+ Install libdvdread by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libdvdread-6.1.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: + libdvdread.so +
+
+ Installed Directories: + /usr/include/dvdread and + /usr/share/doc/libdvdread-6.1.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libdvdread.so +

+
+

+ provides functionality required to access DVDs +

+
+
+
+
+
+
+
+

+ Libdvdnav-6.1.1 +

+
+
+
+
+
+

+ Introduction to Libdvdnav +

+

+ libdvdnav is a library that + allows easy usage of sophisticated DVD navigation features + including DVD menus, multiangle playback, and even + interactive DVD games. +

+

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

+

+ Package Information +

+
+ +
+

+ Libdvdnav Dependencies +

+
+ Required +
+

+ libdvdread-6.1.3 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Libdv Dependencies +

+
+ Optional +
+

+ popt-1.19, + sdl12-compat-1.2.68, and a graphical + environment +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libgstgtk4 from + gst-plugins-rs-1.26.5 +

+
+
+
+
+
+

+ Introduction to libgstgtk4 +

+

+ The libgstgtk4 package + contains a library that binds the gstreamer multimedia + framework to GTK-4. +

+

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

+

+ Package Information +

+
+ +
+

+ libgstgtk4 Dependencies +

+
+ Required +
+

+ git-2.50.1, gst-plugins-base-1.26.5, + GTK-4.18.6, and rustc-1.89.0 +

+
+

+ Note +

+

+ An Internet connection is needed for building this package. + The system certificate store may need to be set up with + make-ca-1.16.1 before building this + package. +

+
+
+
+

+ Installation of libgstgtk4 +

+

+ Install libgstgtk4 by + running the following commands: +

+
cd video/gtk4 &&
+cargo build --release
+

+ This package does not come with a test suite, but its basic + functionality can be tested after installation. +

+

+ Now, as the root user: +

+
install -vm755 ../../target/release/libgstgtk4.so /usr/lib/gstreamer-1.0
+

+ To test the basic functionality of the package, issue: + gst-launch-1.0 videotestsrc + num-buffers=60 ! gtk4paintablesink in a + graphical terminal emulator. It should play a test video in a + GTK-4 window for 2 seconds. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libgstgtk4.so +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libgstgtk4.so +

+
+

+ provides a binding between GTK-4 and the gstreamer + multimedia framework +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libmpeg2 Dependencies +

+
+ Optional +
+

+ a graphical + environment and sdl12-compat-1.2.68 +

+
+
+

+ 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/libmpeg2-0.5.1 &&
+install -v -m644 README doc/libmpeg2.txt \
+                    /usr/share/doc/libmpeg2-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/libmpeg2-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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ libmusicbrainz Dependencies +

+
+ Required +
+

+ CMake-4.1.0, libxml2-2.14.5 and + neon-0.35.0 +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of libmusicbrainz +

+

+ First, fix a problem caused by CMake-3.18.0 and later: +

+
patch -Np1 -i ../libmusicbrainz-5.1.0-cmake_fixes-1.patch
+

+ Fix also a problem caused by libxml-2.12.x: +

+
sed -e 's/xmlErrorPtr /const xmlError */'     \
+    -i src/xmlParser.cc
+

+ Install libmusicbrainz by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 .. &&
+make
+

+ If you have installed Doxygen-1.14.0, 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 +

+
+
+
+
+
+
+
+

+ libogg-1.3.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of libogg +

+

+ Install libogg by running + the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libogg-1.3.6 &&
+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.6 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libogg.so +

+
+

+ provides the functions required for programs to + read or write Ogg formatted bit streams +

+
+
+
+
+
+
+
+

+ libplacebo-7.351.0 +

+
+
+
+
+
+

+ Introduction to libplacebo +

+

+ The libplacebo package + contains a library for processing image and video primitives + and shaders. It also includes a high quality rendering + pipeline that supports OpenGL and Vulkan. +

+

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

+

+ Package Information +

+
+ +
+

+ libplacebo Dependencies +

+
+ Required +
+

+ Glad-2.0.8 +

+
+ Recommended +
+ +
+ Optional +
+

+ Little + CMS-2.17 libunwind-1.8.2, dovi_tool, + Nuklear, + and xxHash +

+
+
+

+ Installation of libplacebo +

+

+ First, fix an incompatibility with Python-3.13.6 and later: +

+
sed -e '204a\    tree = ET.parse(xmlfile)'                 \
+    -e 's/VkXML(ET.parse(xmlfile))/VkXML(tree.getroot())/' \
+    -i src/vulkan/utils_gen.py
+

+ Install libplacebo by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D tests=true       \
+      -D demos=false      &&
+ninja
+

+ To test the results, issue: ninja test. One test, + opengl_surfaceless.c, 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. +

+

+ -D demos=false: This + switch disables building the demo programs because building + plplay is currently broken. +

+

+ -D tests=true: This + switch enables building the code necessary to run the tests. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libplacebo.so +
+
+ Installed Directories: + /usr/include/libplacebo +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libplacebo.so +

+
+

+ processes image and video primitives and shaders + and provides a high quality rendering pipeline for + OpenGL and Vulkan +

+
+
+
+
+
+
+
+

+ libsamplerate-0.2.2 +

+
+
+
+
+
+

+ Introduction to libsamplerate +

+

+ libsamplerate is a sample + rate converter for audio. +

+

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

+

+ Package Information +

+
+ +
+

+ libsamplerate Dependencies +

+
+ Optional +
+

+ alsa-lib-1.2.14, libsndfile-1.2.2, + and fftw-3.3.10 (for tests) +

+
+
+

+ Installation of libsamplerate +

+

+ Install libsamplerate by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libsamplerate-0.2.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 Program: + None +
+
+ Installed Library: + libsamplerate.so +
+
+ Installed Directory: + /usr/share/doc/libsamplerate-0.2.2 +
+
+
+
+
+
+
+
+

+ libsndfile-1.2.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libsndfile Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ alsa-lib-1.2.14, LAME-3.100, mpg123-1.33.2, + Speex-1.2.1, and SQLite-3.50.4 +

+
+
+

+ Installation of libsndfile +

+

+ Fix building with GCC-15: +

+
sed '/typedef enum/,/bool ;/d' -i \
+  src/ALAC/alac_{en,de}coder.c
+

+ Install libsndfile by + running the following commands: +

+
./configure --prefix=/usr    \
+            --docdir=/usr/share/doc/libsndfile-1.2.2 &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ 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.2.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ sndfile-cmp +

+
+

+ compares two audio files +

+
+

+ sndfile-concat +

+
+

+ concatenates two or more audio files +

+
+

+ sndfile-convert +

+
+

+ converts a sound file 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 4 GB in size +

+
+

+ libsndfile.so +

+
+

+ contains the libsndfile API functions +

+
+
+
+
+
+
+
+

+ libva-2.22.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libva Dependencies +

+
+ Required +
+

+ Xorg build + environment and libdrm-2.4.125 +

+
+ Recommended +
+ +
+ Recommended (Runtime) +
+

+ The VA API driver suitable for the hardware in your system: + intel-vaapi-driver-2.4.1 (for + Intel GPUs provided with Haswell CPUs or earlier), intel-media-driver-25.2.6 + (for Intel GPUs provided with Broadwell CPUs or later), and + Mesa-25.1.8 (providing the r600, radeonsi, + and nouveau VA API drivers, for + the ATI/AMD Radeon HD 2xxx GPUs and later, and supported + NVIDIA GPUs; there is a circular dependency, read the + Mesa page for information on how to break it) +

+
+ Optional +
+

+ Doxygen-1.14.0, Wayland-1.24.0, and + intel-gpu-tools +

+
+
+

+ Installation of libva +

+

+ Install libva by running the + following commands: +

+
cd build &&
+
+meson setup --prefix=$XORG_PREFIX --buildtype=release &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libva-drm.so, libva-glx.so, + libva.so, libva-wayland.so, and libva-x11.so +
+
+ Installed Directory: + $XORG_PREFIX/include/va +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libva.so +

+
+

+ contains API functions which provide access to + hardware accelerated video processing +

+
+
+
+
+
+
+
+

+ libvdpau-1.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libvdpau Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended (Runtime) +
+

+ The VDPAU driver suitable for the hardware in your system: + libvdpau-va-gl-0.4.2 (for Intel + GPUs) and Mesa-25.1.8 (providing the r600, radeonsi, + and nouveau VDPAU drivers, for + the ATI/AMD Radeon HD 2xxx GPUs and later, and supported + NVIDIA GPUs; Mesa must be built after this package for + these drivers) +

+
+ Optional +
+

+ Doxygen-1.14.0, Graphviz-13.1.2, and + texlive-20250308 or install-tl-unx +

+
+
+

+ Installation of libvdpau +

+

+ Install libvdpau by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --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
+

+ If doxygen is present at + build time place the documentation in a versioned directory + as the root user: +

+
[ -e $XORG_PREFIX/share/doc/libvdpau ] && mv -v $XORG_PREFIX/share/doc/libvdpau{,1.5}
+
+
+

+ 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.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libvdpau-va-gl Dependencies +

+
+ Required +
+

+ CMake-4.1.0, libvdpau-1.5, libva-2.22.0, + and Mesa-25.1.8 +

+
+ Optional +
+

+ Doxygen-1.14.0, Graphviz-13.1.2, and + texlive-20250308 or install-tl-unx +

+
+
+

+ Installation of libvdpau-va-gl +

+

+ Install libvdpau-va-gl by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$XORG_PREFIX \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5  \
+      -D CMAKE_BUILD_TYPE=Release          \
+      -W no-dev ..                         &&
+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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libvorbis Dependencies +

+
+ Required +
+

+ libogg-1.3.6 +

+
+ Optional +
+

+ Doxygen-1.14.0 and texlive-20250308 (or install-tl-unx) (specifically, pdflatex + and htlatex) to build the PDF documentation +

+
+
+

+ Installation of libvorbis +

+

+ Install libvorbis by running + the following commands: +

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

+ To test the results, issue: make -j1 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 +

+
+
+
+
+
+
+
+

+ libvpx-1.15.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/webmproject/libvpx/archive/v1.15.2/libvpx-1.15.2.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 4c7a93808c12b359733430c8377b7fcf +

    +
  • +
  • +

    + Download size: 5.4 MB +

    +
  • +
  • +

    + Estimated disk space required: 68 MB (add 1.6 GB for + tests) +

    +
  • +
  • +

    + Estimated build time: 0.4 SBU (Using parallelism=4; add + approx 11 SBU for tests using parallelism=4, including + download time) +

    +
  • +
+
+

+ libvpx Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ cURL-8.15.0 (to download test files) and + Doxygen-1.14.0 (to build documentation) +

+
+

+ Note +

+

+ An Internet connection is needed for some tests of this + package. The system certificate store may need to be set up + with make-ca-1.16.1 before testing this + package. +

+
+
+
+

+ Installation of libvpx +

+

+ If upgrading from a previous version of libvpx, update the + timestamps of all the files to prevent the build system from + retaining the files from the old installation: +

+
find -type f | xargs touch
+

+ 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 many files as + part of its test process. A few parts of it will use all + available cores. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ sed ... : This + command corrects the ownership and permissions of installed + files. +

+

+ mkdir libvpx-build && + cd libvpx-build: The libvpx developers recommend building in + a dedicated build directory. +

+

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

+

+ --disable-vp8: This switch + prevents building support for the VP8 codec. +

+

+ --disable-vp9: This switch + prevents building support for the VP9 codec. +

+

+ --target=generic-gnu: This switch + disables optimizations specific to x86 and x86-64, allowing + to build this package without nasm and yasm installed. +

+

+ LD_LIBRARY_PATH=.: This is + needed for the test suite to use the library that was just + built. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ mlt-7.32.0 +

+
+
+
+
+
+

+ Introduction to mlt +

+

+ The 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ mlt + Dependencies +

+
+ Required +
+

+ frei0r-2.3.3 and Qt-6.9.2 +

+
+ Optional +
+

+ Doxygen-1.14.0, fftw-3.3.10, libexif-0.6.25, + SDL2-2.32.8, JACK, MOVEit, SoX, and + vid.stab +

+
+
+

+ Installation of mlt +

+

+ Install mlt by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D MOD_QT=OFF                \
+      -D MOD_QT6=ON                \
+      -W no-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 + ./out/bin/melt + <filename>.mp4. +

+
+

+ Note +

+

+ This application uses advanced graphical capabilities. 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/lib/mlt-7, + /usr/lib/cmake/Mlt7, and /usr/share/mlt-7 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ melt +

+
+

+ is a test tool for mlt +

+
+
+
+
+
+
+
+

+ Opus-1.5.2 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+ Optional +
+

+ Doxygen-1.14.0 and texlive-20250308 (or install-tl-unx) +

+
+
+

+ Installation of Opus +

+

+ Install Opus by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr        \
+            --buildtype=release  \
+            -D docdir=/usr/share/doc/opus-1.5.2 &&
+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: + libopus.so +
+
+ Installed Directory: + /usr/include/opus and + /usr/share/doc/opus-1.5.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libopus.so +

+
+

+ provides the functions used to read and write Opus + format +

+
+
+
+
+
+
+
+

+ Pipewire-1.4.7 +

+
+
+
+
+
+

+ Introduction to Pipewire +

+

+ The pipewire package + contains a server and userspace 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Pipewire Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ alsa-lib-1.2.14, Avahi-0.8, fdk-aac-2.0.3, + FFmpeg-7.1.1, libcanberra-0.30, + libdrm-2.4.125 (for one example and + libcamera support), libxcb-1.17.0, libsndfile-1.2.2, + libusb-1.0.29, Opus-1.5.2, SDL2-2.32.8 (for some + examples), Valgrind-3.25.1, Vulkan-Loader-1.4.321, Xorg + Libraries, Doxygen-1.14.0 and Graphviz-13.1.2 (for + documentation), ffado, JACK, LC3plus, ldacBT, + libcamera, + libmysofa, lilv, and + xmltoman +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/pipewire +

+
+
+

+ Installation of Pipewire +

+

+ Install pipewire by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..                 \
+      --prefix=/usr            \
+      --buildtype=release      \
+      -D session-managers="[]" &&
+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. +

+

+ -D + session-managers="[]": This switch allows + specifying the session managers to build as subprojects. We + specify an empty list to prevent meson from downloading any + external copy of the session managers. A Pipewire session + manager recommended by the PipeWire developers for general + use, Wireplumber-0.5.10, is available as + a separate BLFS package. Build it after installing Pipewire + if you need to run the Pipewire daemon (for example in order + to support Snapshot-48.0.1). +

+

+ -D docs=true: This switch enables + the generation of HTML documentation. The optional + dependencies for documentation need to be installed for this + to work. +

+

+ -D man=true: This switch enables + the generation of manual pages. The optional dependencies for + documentation need to be installed for this to work. +

+

+ -D ffmpeg=enabled: This switch + enables using ffmpeg for audio conversion as a SPA backend. +

+

+ -D vulkan=enabled: This switch + enables using Vulkan for video rendering as a SPA backend. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + pipewire, pw-cat, pw-cli, + pw-config, pw-dot, pw-dump, pw-jack, pw-link, + pw-loopback, pw-metadata, pw-mididump, pw-mon, + pw-profiler, pw-reserve, pw-top, pw-v4l2, spa-acp-tool, + spa-inspect, spa-json-dump, spa-monitor, spa-resample, + and pipewire-aes67, pipewire-avb, pipewire-pulse + (symlinks to pipewire), pw-dsdplay, pw-encplay, + pw-midiplay, pw-midirecord, pw-play, pw-record (symlinks + to pw-cat) +
+
+ Installed Libraries: + libpipewire-0.3.so and 60 modules + below /usr/lib/pipewire-0.3 and /usr/lib/spa-0.2 +
+
+ Installed Directories: + /usr/include/pipewire-0.3, + /usr/include/spa-0.2, /usr/lib/alsa-lib, + /usr/lib/pipewire-0.3, /usr/lib/spa-0.2, + /usr/share/alsa-card-profile, /usr/share/pipewire, and + /usr/share/spa-0.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ pipewire +

+
+

+ is a service that allows access to multimedia + devices and allows sharing of multimedia files + between applications +

+
+

+ 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-config +

+
+

+ allows you to interact with pipewire's + configuration system for debugging purposes or + syntax checking +

+
+

+ 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 +

+
+

+ pw-v4l2 +

+
+

+ runs v4l2 applications on a pipewire instance +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ PulseAudio-17.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. Operations such as 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ PulseAudio Dependencies +

+
+ Required +
+

+ libsndfile-1.2.2 +

+
+ Recommended +
+ +
+ Optional +
+

+ Avahi-0.8, BlueZ-5.83, Doxygen-1.14.0 (for + documentation), fftw-3.3.10, gst-plugins-base-1.26.5, + GTK-3.24.50, libsamplerate-0.2.2, SBC-2.1 (Bluetooth + support), Valgrind-3.25.1, check (for testing), + JACK, + libasyncns, + LIRC, + ORC, + soxr, TDB, and + WebRTC AudioProcessing +

+
+
+

+ Installation of PulseAudio +

+

+ Install PulseAudio by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D database=gdbm    \
+            -D doxygen=false    \
+            -D bluez5=disabled  \
+            -D tests=false      \
+            ..                  &&
+ninja
+

+ To test the results, issue: ninja test. Only the + shipped XML files are validated because other tests need + Check that we've removed + from LFS. +

+

+ 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 /usr/share/dbus-1/system.d/pulseaudio-system.conf
+
+

+ Note +

+

+ If you have installed Wireplumber-0.5.10, make + sure to follow the commands to disable the Pulseaudio + server to prevent conflicts with Pipewire. +

+
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D bluez5=disabled: + This switch prevents a runtime error if dbus-1.16.2 and SBC-2.1 are both + installed but BlueZ-5.83 is not installed. Remove this if + you have installed all three packages. +

+

+ -D doxygen=false: + This allows the package to compile if Doxygen-1.14.0 is not + installed. Remove this if you have installed this and wish to + build the documentation. +

+

+ -D tests=false: This + allows the package to compile if Check is not installed. We've removed + Check from LFS. +

+
+
+

+ 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-17.0.so, libpulsecore-17.0.so, and + libpulsedsp.so +
+
+ Installed Directories: + /etc/pulse, /usr/include/pulse, + /usr/lib/cmake/PulseAudio, + /usr/lib/{pulseaudio,pulse-17.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, which allows 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.10 at build time) +

+
+

+ start-pulseaudio-x11 +

+
+

+ starts PulseAudio + and registers it to the X11 session manager +

+
+
+
+
+
+
+
+

+ SBC-2.1 +

+
+
+
+
+
+

+ Introduction to SBC +

+

+ The SBC package 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ SBC + Dependencies +

+
+ Optional +
+

+ libsndfile-1.2.2 +

+
+
+

+ 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.2.2. +

+

+ --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 +

+
+
+
+
+
+
+
+

+ sdl12-compat-1.2.68 +

+
+
+
+
+
+

+ Introduction to sdl12-compat +

+

+ 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 code is a + compatibility layer; it provides a binary and source + compatible API for programs written against SDL 1.2, but it + uses SDL 2.0 behind the scenes. +

+

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

+

+ Package Information +

+
+ +
+

+ SDL + Dependencies +

+
+ Required +
+

+ CMake-4.1.0, GLU-9.0.3, and SDL2-2.32.8 +

+
+
+

+ Installation of sdl12-compat +

+

+ Install sdl12-compat by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=RELEASE  \
+      ..  &&
+make
+

+ Now, as the root user: +

+
make install &&
+rm -vf /usr/lib/libSDLmain.a
+
+
+

+ Testing SDL +

+

+ If you wish, test the sdlcompat package using the included + test programs. It is not required to install any of the + resulting binaries to validate the installation. +

+

+ 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. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + sdl-config +
+
+ Installed Libraries: + libSDL.so +
+
+ Installed Directories: + /usr/include/SDL +
+
+
+
+

+ 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 compatibility links + to SDL2 low level functions for audio, keyboard, + mouse, joystick, 3D hardware via OpenGL, and the 2D + frame buffer across multiple platforms +

+
+
+
+
+
+
+
+

+ SDL2-2.32.8 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://www.libsdl.org/release/SDL2-2.32.8.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 7df28be966308a4a51aac87f4e0cf16a +

    +
  • +
  • +

    + Download size: 7.3 MB +

    +
  • +
  • +

    + Estimated disk space required: 186 MB (with docs) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (using parallelism=4; + with docs) +

    +
  • +
+
+

+ SDL2 + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ alsa-lib-1.2.14, Doxygen-1.14.0 (to + create documentation), ibus-1.5.32, libsamplerate-0.2.2, libunwind-1.8.2, NASM-2.16.03, pipewire-1.4.7, PulseAudio-17.0, + a graphical + environment, DirectFB, + fcitx, + jack, and + sndio +

+
+
+

+ Installation of SDL2 +

+

+ Install SDL2 by running the + following commands: +

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

+ If you have Doxygen-1.14.0 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.32.8/html &&
+cp -Rv  docs/output/html/* /usr/share/doc/SDL2-2.32.8/html
+
+
+

+ Testing SDL2 +

+

+ If you wish to, test the installation of SDL2 using the included test programs. + None of the resulting binaries need to be installed. Issue + the following commands to build the test programs: +

+
cd test &&
+./configure &&
+make
+

+ Each of the test programs (they are listed in the + README file in this directory) + will need to be run individually. Many of them will need to + be manually killed. Additionally, speakers need to be on with + the volume at a suitable level. +

+
+
+

+ 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. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + sdl2-config +
+
+ Installed Libraries: + libSDL2.so +
+
+ Installed Directories: + /usr/include/SDL2, + /usr/lib/cmake/SDL2, and /usr/share/doc/SDL-2.32.8 +
+
+
+
+

+ 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 the 2D frame buffer across multiple + platforms +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ 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 +
+
+
+
+
+
+
+
+

+ SoundTouch-2.4.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+
+
+

+ Installation of SoundTouch +

+
+

+ Note +

+

+ The tarball expands to 'soundtouch' instead of the expected + 'soundtouch-2.4.0' +

+
+

+ 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.4.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.4.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 +

+
+
+
+
+
+
+
+

+ Speex-1.2.1 +

+
+
+
+
+
+

+ Introduction to Speex +

+

+ Speex is an audio + compression format designed specifically 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+ +
+

+ Speex Dependencies +

+
+ Required +
+

+ libogg-1.3.6 +

+
+ Optional +
+

+ Valgrind-3.25.1 +

+
+
+

+ 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.1 &&
+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.1.tar.gz &&
+cd speexdsp-1.2.1             &&
+
+./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/speexdsp-1.2.1 &&
+make
+

+ Again, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

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

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + speexenc and speexdec +
+
+ Installed Libraries: + libspeex.so and + libspeexdsp.so +
+
+ Installed Directories: + /usr/include/speex and + /usr/share/doc/speex-1.2.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ speexdec +

+
+

+ decodes a Speex + file and produces a WAV or raw file +

+
+

+ speexenc +

+
+

+ encodes a WAV or raw file 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 +

+
+
+
+
+
+
+
+

+ Taglib-2.1.1 +

+
+
+
+
+
+

+ Introduction to Taglib +

+

+ Taglib is a library used for + reading, writing and manipulating audio file tags and is used + by applications such as VLC. +

+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://taglib.org/releases/taglib-2.1.1.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 9feffe76b4643eb724185310879c3123 +

    +
  • +
  • +

    + Download size: 1.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 16 MB +

    +
  • +
  • +

    + Estimated build time: 0.1 SBU (Using parallelism=4) +

    +
  • +
+
+

+ Taglib Dependencies +

+
+ Required +
+

+ CMake-4.1.0 and utfcpp-4.0.6 +

+
+ Optional (for tests) +
+

+ Cppunit +

+
+
+

+ Installation of Taglib +

+

+ Install Taglib by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr \
+      -D CMAKE_BUILD_TYPE=Release  \
+      -D BUILD_SHARED_LIBS=ON \
+      .. &&
+make
+

+ The test suite requires Cppunit but it's not a BLFS package. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ v4l-utils-1.30.1 +

+
+
+
+
+
+

+ Introduction to v4l-utils +

+

+ v4l-utils provides a series + of utilities for media devices, allowing the ability to + handle the proprietary formats available from most webcams + (libv4l), and providing tools to test V4L devices. +

+

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

+

+ Package Information +

+
+ +
+

+ v4l-utils Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0, Qt-6.9.2 (for qv4l2 and qvidcap), + SDL2-2.32.8, both LLVM-20.1.8 (with Clang and + target BPF) and libbpf (for infrared + remote control decoders based on BPF), and SDL_image +

+
+
+

+ Installation of v4l-utils +

+
+

+ Note +

+

+ If you've installed both LLVM and libbpf (not in BLFS), + either enable the BPF target (via -D + LLVM_TARGETS_TO_BUILD=) when building LLVM, or + disable the infrared remote control decoders based on BPF: +

+
sed -i '/^ir_bpf_enabled/s/=.*/= false/' utils/keytable/meson.build
+
+

+ Install v4l-utils by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gconv=disabled   \
+      -D doxygen-doc=disabled &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+

+ If you also wish to install the contrib programs, add: +

+
for prog in v4l2gl v4l2grab
+do
+   cp -v contrib/test/$prog /usr/bin
+done
+
+
+

+ Command Explanations +

+

+ -D gconv=disabled: + This switch disables the erroneous installation of + gconv-modules that would break glibc. +

+
+
+

+ 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, v4l2gl, + v4l2grab, 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 +

+
+

+ v4l2gl +

+
+

+ captures images using libv4l and stores them as PPM + files +

+
+

+ v4l2grab +

+
+

+ captures images using libv4l and stores them as PPM + files, while also allowing for additional options + such as setting the amount of frames captured and + saving the file as a RAW file +

+
+

+ v4l2-sysfs-path +

+
+

+ checks the media devices installed on a machine and + the corresponding device nodes +

+
+
+
+
+
+
+
+

+ Wireplumber-0.5.10 +

+
+
+
+
+
+

+ Introduction to Wireplumber +

+

+ The Wireplumber package + contains a session and policy manager for Pipewire. +

+

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

+

+ Package Information +

+
+ +
+

+ Wireplumber Dependencies +

+
+ Required +
+

+ elogind-255.17, GLib-2.84.4, + and pipewire-1.4.7 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0, lxml-6.0.0, sphinx-8.2.3, + sphinx_rtd_theme-3.0.2, and + Breathe +

+
+
+

+ Installation of Wireplumber +

+

+ Install Wireplumber by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D system-lua=true .. &&
+ninja
+

+ To test the results, issue: ninja test. +

+

+ Now, as the root user: +

+
ninja install
+

+ Finally, rename the documentation directory to a versioned + directory as the root user: +

+
mv -v /usr/share/doc/wireplumber{,-0.5.10}
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ -D system-lua=true: + This switch enables using the system version of Lua. Omit + this switch if you have not installed Lua, but note that + meson will download and + install it's own version. +

+
+
+

+ Configuring Wireplumber +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ In order for Wireplumber to be used by Pipewire, + Wireplumber and Pipewire must be configured to start when a + desktop environment is started. +

+

+ Pipewire now provides it's own Pulseaudio server + implementation, which causes runtime conflicts with the + server provided by Pulseaudio itself. This generally + presents itself by applications hanging or malfunctioning + when trying to play or record audio and video. First, + prevent Pulseaudio from starting it's own server + implementation by running the following commands as the + root user: +

+
rm -vf /etc/xdg/autostart/pulseaudio.desktop         &&
+rm -vf /etc/xdg/Xwayland-session.d/00-pulseaudio-x11 &&
+sed -e '$a autospawn = no' -i /etc/pulse/client.conf
+

+ Next, create a shell script that will start Wireplumber and + Pipewire in the correct order as the root user: +

+
cat > /usr/bin/pipewire-launcher.sh << "EOF"
+#!/bin/sh
+# Begin /usr/bin/pipewire-launcher.sh
+
+# First, kill any previous instances of pipewire, wireplumber, or pipewire-pulse
+# that are running. Multiple instances of the daemon can not be run at the same
+# time, and this helps prevent possible errors if a user logs out or logs in
+# too fast, and restores audio if Pipewire hangs and needs to be reset.
+
+pkill -u ${USER} -fx /usr/bin/pipewire-pulse
+pkill -u ${USER} -fx /usr/bin/wireplumber
+pkill -u ${USER} -fx /usr/bin/pipewire
+
+# Start Pipewire first.
+exec /usr/bin/pipewire &
+
+# Next, we need to wait until pipewire is up before starting wireplumber.
+# This prevents a possible race condition where pipewire takes too long
+# to start, as some users have run into.
+while [ $(pgrep -f /usr/bin/pipewire) = "" ]; do
+   sleep 1
+done
+
+# Start Wireplumber now that Pipewire has been started.
+exec /usr/bin/wireplumber &
+
+# Start the Pulseaudio server included with Pipewire.
+exec /usr/bin/pipewire-pulse &
+
+# End /usr/bin/pipewire-launcher.sh
+EOF
+

+ Next, make this shell script executable as the root user: +

+
chmod +x /usr/bin/pipewire-launcher.sh
+

+ Finally, create an XDG Autostart file that will run + /usr/bin/pipewire-launcher.sh + when a desktop environment is started, as the root user: +

+
cat > /etc/xdg/autostart/pipewire.desktop << "EOF"
+[Desktop Entry]
+Version=1.0
+Name=Pipewire
+Comment=Starts the Pipewire and Wireplumber daemons
+Exec=/usr/bin/pipewire-launcher.sh
+Terminal=false
+Type=Application
+EOF
+

+ Now that Wireplumber is configured to start when a desktop + environment is started, it is recommended that you log out + of your session and log back in again. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + wireplumber, wpctl, and + wpexec +
+
+ Installed Libraries: + libwireplumber-0.5.so +
+
+ Installed Directories: + /usr/include/wireplumber-0.5, + /usr/lib/wireplumber-0.5, /usr/share/wireplumber, and + /usr/share/doc/wireplumber-0.5.10 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ wireplumber +

+
+

+ is a session and policy manager for Pipewire +

+
+

+ wpctl +

+
+

+ controls and queries information from Wireplumber +

+
+

+ wpexec +

+
+

+ executes Wireplumber scripts, which are often + written in Lua +

+
+

+ libwireplumber-0.5.so +

+
+

+ contains functions that allow other programs to + control Wireplumber +

+
+
+
+
+
+
+
+

+ x264-20250815 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ x264 + Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ ffms2, gpac or + liblsmash +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ x265-4.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ x265 + Dependencies +

+
+ Required +
+

+ CMake-4.1.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ numactl +

+
+
+

+ Installation of x265 +

+

+ First, remove some CMake policy settings that are no longer + compatible with CMake-4.0 and later: +

+
sed -r '/cmake_policy.*(0025|0054)/d' -i source/CMakeLists.txt
+

+ Install x265 by running the + following commands: +

+
mkdir bld &&
+cd    bld &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D GIT_ARCHETYPE=1                  \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      -W no-dev                           \
+      ../source                           &&
+make
+

+ This package does not come with a test suite. +

+

+ To install the package, first remove any old library + versions. After installation, remove a static library. As the + root user: +

+
make install &&
+rm -vf /usr/lib/libx265.a
+
+
+

+ Command Explanations +

+

+ -D GIT_ARCHETYPE=1: + This switch is needed because the build system will not + generate a pkg-config file or install a shared library unless + git-2.50.1 + is installed. Git isn't required for anything else in this + package, so this switch is used to work around it for users + who do not want to install Git as a build dependency. +

+

+ -D + CMAKE_POLICY_VERSION_MINIMUM=3.5: This switch + allows building this package with cmake-4.0 or newer. +

+

+ -W no-dev: This + switch is used to suppress warnings intended for the package + developers. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ xine-lib-1.2.13 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.sourceforge.net/xine/xine-lib-1.2.13.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 9e1be39857b7a3cd7cc0f2b96331ff22 +

    +
  • +
  • +

    + Download size: 4.8 MB +

    +
  • +
  • +

    + Estimated disk space required: 98 MB (with API + documentation) +

    +
  • +
  • +

    + Estimated build time: 0.5 SBU (Using parallelism=4; + with API documentation) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ Xine + Libraries Dependencies +

+
+ Required +
+

+ a graphical + environment, FFmpeg-7.1.1, and at least one of: + alsa-lib-1.2.14, PulseAudio-17.0, or + JACK +

+
+ Recommended +
+ +
+ Optional +
+

+ AAlib-1.4rc5, FAAD2-2.11.2, FLAC-1.5.0, + gdk-pixbuf-2.42.12, GLU-9.0.3, ImageMagick-7.1.2-1, liba52-0.8.0, + libdvdcss-1.4.3, libmad-0.15.1b, + libmng-2.0.3, libnsl-2.0.1, libva-2.22.0 + (requires GLU-9.0.3), libvdpau-1.5, libvorbis-1.3.7, + libvpx-1.15.2, Mesa-25.1.8, Samba-4.22.4, + sdl12-compat-1.2.68, Speex-1.2.1, + Doxygen-1.14.0 (to create the API + documentation), v4l-utils-1.30.1 DirectFB, + libbluray, + libcaca, libdca, + libFAME, libmodplug, + libtheora, + musepack, VCDImager, and + WavPack, +

+
+
+

+ Installation of Xine Libraries +

+

+ First, fix building this package with ffmpeg-7.0 and later: +

+
patch -Np1 -i ../xine-lib-1.2.13-upstream_fixes-1.patch
+

+ Next, fix building this package with gcc-15.x: +

+
patch -Np1 -i ../xine-lib-1.2.13-gcc15_fixes-1.patch
+

+ Install Xine Libraries by + running the following commands: +

+
./configure --prefix=/usr          \
+            --disable-vcd          \
+            --with-external-dvdnav \
+            --docdir=/usr/share/doc/xine-lib-1.2.13 &&
+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.13/api &&
+install -v -m644    doc/api/* \
+                    /usr/share/doc/xine-lib-1.2.13/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.13: + 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.22.0 is installed and GLU-9.0.3 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.13 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ xine-config +

+
+

+ provides information to programs trying to link + with the xine + libraries +

+
+

+ xine-list-1.2 +

+
+

+ is used to get supported file type information from + xine-lib +

+
+

+ libxine.so +

+
+

+ provides the API for processing audio/video files +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ XviD + Dependencies +

+
+ Optional +
+

+ yasm-1.3.0 or NASM-2.16.03 +

+
+
+

+ Installation of XviD +

+
+

+ Note +

+

+ This package tarball expands to xvidcore, not the expected xvidcore-1.3.7. +

+
+

+ First, fix a problem when building with gcc-15: +

+
sed -i '/typedef int bool;/d' src/encoder.h
+

+ 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 + reinstalling 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 +

+
+
+
+
+
+
+
+
+

+ 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.5 +

+
+
+
+
+
+

+ Introduction to Audacious +

+

+ Audacious is an audio + player. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+

+ Required Plugins +

+ +
+

+ Audacious Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and Qt-6.9.2 +

+
+ Recommended +
+

+ libarchive-3.8.1 +

+
+ Optional +
+

+ Valgrind-3.25.1 +

+
+ Recommended (for Plugins) +
+ +
+ Optional (for Plugins) +
+

+ alsa-lib-1.2.14, cURL-8.15.0, FAAD2-2.11.2, + FLAC-1.5.0, LAME-3.100, libxml2-2.14.5, + libcdio-2.1.0 (to identify and play CDs), + libnotify-0.8.6, libsndfile-1.2.2, + libvorbis-1.3.7, Opus-1.5.2, pipewire-1.4.7, + PulseAudio-17.0, SDL2-2.32.8, ampache-browser, + adplug, + The Bauer + stereophonic-to-binaural DSP (bs2b) library, FluidSynth, + JACK + (requires libsamplerate-0.2.2), libcue, + libmodplug, + libmms, + libopenmpt, + libsidplayfp, + LIRC, + sndio, + SoX, and + WavPack +

+
+
+

+ Installation of Audacious +

+
+
+
+
+

+ Installation of the Main + Audacious Program +

+
+
+
+

+ Install Audacious by + running the following commands (you may wish to change the + buildstamp to another string): +

+
mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gtk=true         \
+      -D qt=true          \
+      -D buildstamp=BLFS  \
+      -D libarchive=true  &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install
+
+
+
+
+
+

+ Installation of Audacious + Plugins +

+
+
+
+

+ Install the required plugins package by issuing the + following commands: +

+
tar -xf ../../audacious-plugins-4.5.tar.bz2 &&
+cd audacious-plugins-4.5                    &&
+
+mkdir build &&
+cd    build &&
+
+meson setup ..            \
+      --prefix=/usr       \
+      --buildtype=release \
+      -D gtk=true         \
+      -D qt=true          \
+      -D opus=false       \
+      -D wavpack=false    &&
+ninja
+

+ Now, as the root user: +

+
ninja install
+
+
+
+

+ Command Explanations +

+

+ -D buildstamp=BLFS: + This switch appends the given text to the version string. +

+

+ -D gtk=true: This + option enables GTK support for the graphical user interface. +

+

+ -D qt=true: This + option enables Qt support for the graphical user interface. +

+

+ -D libarchive=true: + This adds libarchive support, for reading compressed module + sets or skins. +

+

+ -D valgrind=true: The option + enables Valgrind analysis support. +

+
+
+

+ 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 an audio player and is a descendant of + XMMS +

+
+

+ audtool +

+
+

+ is a small tool to modify the behavior of a running + audacious + instance +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ Editor 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 &&
+rm -fv /usr/lib/libcdda_*.a
+
+
+

+ Contents +

+
+
+
+ Installed Program: + cdparanoia +
+
+ Installed Libraries: + libcdda_interface.so and + libcdda_paranoia.so +
+
+ 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 +

+
+

+ contains functions used by cdparanoia, as + well as other packages, which can automatically + identify if a CD device is CDDA compatible +

+
+

+ libcdda_paranoia +

+
+

+ contains functions used by cdparanoia, as + well as other packages, which provide data + verification, synchronization, error handling and + scratch reconstruction capability +

+
+
+
+
+
+
+
+

+ kwave-25.08.0 +

+
+
+
+
+
+

+ Introduction to KWave +

+

+ The KWave package contains a + KDE Frameworks based Sound Editor application. +

+

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

+

+ Package Information +

+
+ +
+

+ KWave Dependencies +

+
+ Required +
+

+ AudioFile-0.3.6, fftw-3.3.10, id3lib-3.8.3, and + KDE + Frameworks-6.17.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of KWave +

+

+ Install KWave by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=$KF6_PREFIX \
+      -D CMAKE_BUILD_TYPE=Release         \
+      -D BUILD_TESTING=OFF                \
+      -W no-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 30 + plugins +
+
+ Installed Directories: + $KF6_PREFIX/lib/plugins/kwave, + $KF6_PREFIX/share/kwave, + $KF6_PREFIX/share/doc/HTML/*/kwave +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ kwave +

+
+

+ is a sound editor built on the KDE Frameworks +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ LAME + Dependencies +

+
+ Optional +
+

+ Dmalloc, + + Electric Fence, libsndfile-1.2.2 and NASM-2.16.03 +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/lame +

+
+
+

+ Installation of LAME +

+

+ Prevent the source code directory from being mistakenly + hardcoded as a shared library search path in the installed + programs: +

+
sed -i -e 's/^\(\s*hardcode_libdir_flag_spec\s*=\).*/\1/' configure
+

+ Install LAME by running the + following commands: +

+
./configure --prefix=/usr --enable-mp3rtp --disable-static &&
+make
+

+ To test the results, issue: LD_LIBRARY_PATH=libmp3lame/.libs 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: This option + enables the use of NASM-2.16.03 to compile optimized assembly + routines for 32-bit x86. Note that this has no effect on + x86_64. +

+
+
+

+ 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 +

+
+

+ provides the functions necessary to convert raw PCM + and WAV files to MP3 files +

+
+
+
+
+
+
+
+

+ mpg123-1.33.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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ mpg123 Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ PulseAudio-17.0, SDL2-2.32.8, JACK, OpenAL and PortAudio +

+
+
+

+ 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, libout123.so, and + libsyn123.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 +

+
+

+ libsyn123.so +

+
+

+ contains some audio signal synthesis and format + conversion functions +

+
+
+
+
+
+
+
+

+ pavucontrol-6.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ pavucontrol Dependencies +

+
+ Required +
+

+ Gtkmm-4.18.0, JSON-GLib-1.10.6, + libsigc++-3.6.0, and PulseAudio-17.0 +

+

+ Optional +

+

+ libcanberra-0.30 and Lynx-2.9.2 +

+
+
+

+ Installation of pavucontrol +

+

+ Install pavucontrol by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release -D lynx=false .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install &&
+mv /usr/share/doc/pavucontrol /usr/share/doc/pavucontrol-6.1
+
+
+
+

+ Command Explanations +

+

+ -D lynx=false: This + switch disables generating the README file in text format. + Remove this switch if you want the README file in text format + and have Lynx-2.9.2 installed. +

+
+
+

+ Contents +

+
+
+
+ Installed Program: + pavucontrol +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/pavucontrol and + /usr/share/doc/pavucontrol-6.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ pavucontrol +

+
+

+ is a GUI configuration tool for sound settings + using pulsaudio +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Pnmixer Dependencies +

+
+ Required +
+

+ alsa-utils-1.2.14, GTK-3.24.50, and + libnotify-0.8.6 +

+
+
+

+ Installation of Pnmixer +

+

+ Install Pnmixer by running + the following commands: +

+
mkdir build &&
+cd    build &&
+
+cmake -D CMAKE_INSTALL_PREFIX=/usr        \
+      -D CMAKE_POLICY_VERSION_MINIMUM=3.5 \
+      ..  &&
+make
+

+ This package does not have a test suite. +

+

+ 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 +

+
+
+
+
+
+
+
+

+ vorbis-tools-1.4.3 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Vorbis Tools Dependencies +

+
+ Required +
+

+ libvorbis-1.3.7 +

+
+ Optional (required to build the + ogg123 program) +
+

+ libao-1.2.0 +

+
+ Optional +
+

+ cURL-8.15.0, FLAC-1.5.0, Speex-1.2.1, and libkate +

+
+
+

+ Installation of Vorbis Tools +

+

+ Install Vorbis Tools by + running the following commands: +

+
./configure --prefix=/usr --enable-vcut &&
+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. +

+
+
+

+ 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.3/ogg123rc-example. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ogg123, oggdec, oggenc, ogginfo, + vcut, and vorbiscomment +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/doc/vorbis-tools-1.4.3 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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-7.1.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: 26f2bd7d20c6c616f31d7130c88d7250 +

    +
  • +
  • +

    + Download size: 11 MB +

    +
  • +
  • +

    + Estimated disk space required: 205 MB (add 1.7 GB for + the FATE suite/tests, add 869 MB for documentation) +

    +
  • +
  • +

    + Estimated build time: 1.2 SBU (using parallelism=4; add + 3.2 SBU (with THREADS=4) to run the FATE suite after + sample files are downloaded; add 0.2 SBU for doxygen + docs) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ FFmpeg Dependencies +

+
+ Recommended +
+ +
+ Recommended for desktop use +
+ +
+ Recommended for systems with Intel + Video +
+ +
+ Optional +
+

+ Doxygen-1.14.0, Fontconfig-2.17.1, FriBidi-1.0.16, + frei0r-2.3.3, libcdio-2.1.0 (to + identify and play CDs), libdrm-2.4.125 (for “kmsgrab” input), + libjxl-0.11.1, libplacebo-7.351.0 (for hardware + accelerated color spaces and HDR tonemapping), libwebp-1.6.0, OpenJPEG-2.5.3, + GnuTLS-3.8.10, PulseAudio-17.0, + Samba-4.22.4, Speex-1.2.1, texlive-20250308 (or install-tl-unx) for PDF and PS + documentation, v4l-utils-1.30.1, Vulkan-Loader-1.4.321, XviD-1.3.7, + a graphical + environment, dav1d, + Flite, GSM, libaacplus, + libbluray, + libcaca, libcelt, + libdc1394, + libdca, + libiec61883, + libilbc, libmodplug, + libnut (Git + checkout), librtmp, libssh, libtheora, + OpenAL, + OpenCore + AMR, Srt, Schroedinger, + TwoLAME, + + vo-aaenc, + vo-amrwbenc, and ZVBI +

+
+
+

+ Installation of FFmpeg +

+

+ First, apply a patch that adds an API necessary for some + packages to build: +

+
patch -Np1 -i ../ffmpeg-7.1.1-chromium_method-1.patch
+

+ Install FFmpeg by running + the following commands: +

+
./configure --prefix=/usr        \
+            --enable-gpl         \
+            --enable-version3    \
+            --enable-nonfree     \
+            --disable-static     \
+            --enable-shared      \
+            --disable-debug      \
+            --enable-libaom      \
+            --enable-libass      \
+            --enable-libfdk-aac  \
+            --enable-libfreetype \
+            --enable-libmp3lame  \
+            --enable-libopus     \
+            --enable-libvorbis   \
+            --enable-libvpx      \
+            --enable-libx264     \
+            --enable-libx265     \
+            --enable-openssl     \
+            --ignore-tests=enhanced-flv-av1 \
+            --docdir=/usr/share/doc/ffmpeg-7.1.1 &&
+
+make &&
+
+gcc tools/qt-faststart.c -o tools/qt-faststart
+

+ HTML documentation was built in the previous step. If you + have texlive-20250308 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.14.0 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-7.1.1 &&
+install -v -m644    doc/*.txt /usr/share/doc/ffmpeg-7.1.1
+

+ 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-7.1.1 &&
+install -v -m644 doc/*.ps  /usr/share/doc/ffmpeg-7.1.1
+

+ 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-7.1.1/api                     &&
+cp -vr doc/doxy/html/* /usr/share/doc/ffmpeg-7.1.1/api                  &&
+find /usr/share/doc/ffmpeg-7.1.1/api -type f -exec chmod -c 0644 \{} \; &&
+find /usr/share/doc/ffmpeg-7.1.1/api -type d -exec chmod -c 0755 \{} \;
+

+ To properly test the installation you must have rsync-3.4.1 + 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, for testing in another system, or for when a new + version of ffmpeg is released. Then, unpack the sample files + in the source directory, and run the make fate-rsync ... command + above to sync with the upstream repository. The download size + and time are drastically reduced by doing this. Estimated + values in "Package Information" do not include the download + SBU. Some samples may have been removed in newer versions, 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, execute FATE with the following commands (there are + more than 3800 tests in the suite): +

+
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. +

+

+ A successful run should return no errors or warnings, just a + list of tests and total amount at the end. +

+
+
+

+ Command Explanations +

+

+ 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-libaom: + Enables AV1 audio and video decoding via libaom. +

+

+ --enable-libass: + Enables ASS/SSA subtitle format rendering via libass. +

+

+ --enable-libdrm: Use this switch + if libdrm-2.4.125 is installed to build the + “kmsgrab” input module which is useful + for screen capturing or streaming. +

+

+ --enable-libfdk-aac: + Enables AAC audio encoding via libfdk-aac. +

+

+ --enable-libmp3lame: + Enables MP3 audio encoding via libmp3lame. +

+

+ --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. +

+

+ --ignore-tests=...: + Disables tests that fail to run on BLFS without the optional + packages. Currently the AV1 test is disabled as it needs + dav1d to do AV1 decoding on the CPU. The test might work if + you have a GPU that can decode AV1, but this was not tested. +

+

+ --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.14.0 is + installed and you do not want to build the html + documentation. +

+

+ --enable-libpulse: Enables + support for Pulseaudio for + audio output. +

+

+ --enable-libplacebo: Enables + support for libpulse for + hardware accelerated color spaces. +

+

+ 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, + libpostproc.so, libswresample.so, and + libswscale.so +
+
+ Installed Directories: + /usr/include/libav{codec,device,filter,format,util}, + /usr/include/libpostproc, + /usr/include/libsw{resample,scale}, + /usr/share/doc/ffmpeg-7.1.1, 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 +

+
+
+
+
+
+
+
+

+ mpv-0.40.0 +

+
+
+
+
+
+

+ Introduction to mpv +

+

+ mpv is a free media player + for the command line. It supports a wide variety of media + file formats, audio and video codecs, and subtitle types. +

+

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

+

+ Package Information +

+
+ +
+

+ mpv + Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14, FFmpeg-7.1.1, libass-0.17.4, libplacebo-7.351.0, Mesa-25.1.8, and + PulseAudio-17.0 +

+
+ Recommended +
+ +
+ Optional Input Drivers and Libraries +
+

+ libdvdcss-1.4.3, libdvdread-6.1.3, + libdvdnav-6.1.1, and libbluray +

+
+ Optional Audio Output Drivers and + Libraries +
+

+ pipewire-1.4.7, SDL2-2.32.8, JACK, and OpenAL +

+
+ Optional Video Output Drivers and + Libraries +
+

+ libcaca and + SVGAlib +

+
+ Optional (for documentation) +
+

+ docutils-0.21.2 +

+
+
+

+ Installation of mpv +

+

+ Add a fix to build with FFMpeg > 7.0 +

+
sed -i 's/AV_OPT_TYPE_CHANNEL_LAYOUT/AV_OPT_TYPE_CHLAYOUT/' filters/f_lavfi.c
+

+ Install mpv by running the + following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr       \
+            --buildtype=release \
+            -D x11=enabled      \
+            ..                  &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja 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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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 +

+

+ -D x11=enabled: + allows linking to the X11 libraries. +

+

+ -D dvdnav=enabled: enables + support for DVD playback. +

+

+ -D cdda=enabled: enables support + for CD Audio. +

+

+ -D sdl2=enabled: enables the + usage of SDL2 for audio and video output. +

+
+
+

+ Configuring mpv +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/mpv/* and ~/.config/mpv/* +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + mpv +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /etc/mpv and + /usr/share/doc/mpv +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ mpv +

+
+

+ is the mpv video player +

+
+
+
+
+
+
+
+

+ VLC-3.0.21 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://download.videolan.org/vlc/3.0.21/vlc-3.0.21.tar.xz +

    +
  • +
  • +

    + Download MD5 sum: cde72f38943c685a1a39acc82da2339f +

    +
  • +
  • +

    + Download size: 24 MB +

    +
  • +
  • +

    + Estimated disk space required: 746 MB +

    +
  • +
  • +

    + Estimated build time: 1.9 SBU (using parallelism=4; + with tests) +

    +
  • +
+
+

+ Additional Downloads +

+ +

+ VLC + Dependencies +

+
+ Recommended +
+ +
+ Optional features and packages +
+

+ dbus-1.16.2, libidn-1.43, and libssh2-1.11.1 +

+
+ Optional input plugins +
+

+ libarchive-3.8.1, libcddb-1.3.2, + libdv-1.0.0, libdvdcss-1.4.3, + libdvdread-6.1.3, libdvdnav-6.1.1, libproxy-0.5.10, + opencv-4.12.0, Samba-4.22.4, v4l-utils-1.30.1, libbluray, + libdc1394, + libnfs, libraw1394, + Live555, + and VCDImager + (requires libcdio-2.1.0) +

+
+ Optional mux/demux plugins +
+

+ libogg-1.3.6, Game Music + Emu, libdvbpsi, + libshout, + libmatroska + (requires libebml), + libmodplug, + Musepack, and sidplay-libs +

+
+ Optional codec plugins +
+

+ FAAD2-2.11.2, FLAC-1.5.0, libaom-3.12.1, libass-0.17.4, libmpeg2-0.5.1, + libpng-1.6.50, libva-2.22.0, libvorbis-1.3.7, Opus-1.5.2, Speex-1.2.1, libvpx-1.15.2, x264-20250815, aribb24, dav1d, + Dirac, + FluidLite, + FluidSynth, + libdca, + libkate, + libtheora, + OpenMAX, Schroedinger, + Shine, SoX, + Tremor, Twolame, and Zapping VBI +

+
+ Optional video plugins +
+

+ AAlib-1.4rc5, Fontconfig-2.17.1, FreeType-2.13.3, FriBidi-1.0.16, + libplacebo-7.351.0 (currently + broken), librsvg-2.61.0, libvdpau-1.5, sdl12-compat-1.2.68, libcaca, and + libmfx +

+
+ Optional audio plugins +
+

+ PulseAudio-17.0, libsamplerate-0.2.2, spatialaudio, + and JACK +

+
+ Optional interface plugins +
+

+ FreeRDP-3.17.0, libtar, libvncclient, + and LIRC +

+
+ Optional visualisations and video + filter plugins +
+

+ Goom, libvsxu, and + projectM +

+
+ Optional service discovery plugins +
+

+ Avahi-0.8, libmtp and + libupnp +

+
+ Miscellaneous options +
+

+ GnuTLS-3.8.10, libnotify-0.8.6, + libxml2-2.14.5, Protobuf-32.0, + taglib-2.1.1, xdg-utils-1.2.1 + (runtime), + AtmoLight, libmicrodns, + and Srt +

+
+
+

+ Installation of VLC +

+

+ First, add corrections for problems of taglib-2.0 and + ffmpeg-7 and later: +

+
patch -Np1 -i ../vlc-3.0.21-taglib-1.patch         &&
+patch -Np1 -i ../vlc-3.0.21-fedora_ffmpeg7-1.patch
+

+ Install VLC by running the + following commands: +

+
BUILDCC=gcc ./configure --prefix=/usr --disable-libplacebo &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make docdir=/usr/share/doc/vlc-3.0.21 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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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-libplacebo: + This switch is required to disable support for using + libplacebo as a rendering pipeline because VLC is + incompatible with the latest version of libplacebo. +

+

+ --disable-vpx: Use this switch to + disable libvpx. +

+

+ --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.11.1 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, 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.21 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ cvlc +

+
+

+ is a script to run VLC with the dummy interface +

+
+

+ nvlc +

+
+

+ is a script to run VLC with the ncurses 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 +

+
+
+
+
+
+
+
+

+ xine-ui-0.99.14 +

+
+
+
+
+
+

+ 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 + 12.4 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 +

+
+ +
+

+ Xine + User Interface Dependencies +

+
+ Required +
+

+ xine-lib-1.2.13 and shared-mime-info-2.4 +

+
+ Optional +
+

+ cURL-8.15.0, AAlib-1.4rc5, LIRC, and libcaca +

+
+
+

+ Installation of Xine User Interface +

+

+ Install xine User Interface + by running the following commands: +

+
./configure --prefix=/usr &&
+make CC="gcc -std=gnu17"
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
make docsdir=/usr/share/doc/xine-ui-0.99.14 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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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.14: + This parameter causes the Xine + UI documentation to be installed in the versioned + directory /usr/share/doc/xine-ui-0.99.14, 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.14/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.14 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ Chapter 45. CD/DVD-Writing + Utilities +

+
+
+
+
+

+ This chapter contains information on CD/DVD-writing utilities in + Linux. +

+

+ Additional sources of information include: +

+ +
+
+
+

+ Cdrdao-1.2.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Cdrdao Dependencies +

+
+ Recommended +
+ +

+ Editor 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 CC="gcc -std=gnu17"
+

+ 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.5 &&
+install -v -m644 README /usr/share/doc/cdrdao-1.2.5
+
+
+

+ 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.5 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Cdrtools Dependencies +

+
+ Required +
+

+ alsa-lib-1.2.14 +

+

+ Editor 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: +

+
sed -i 's|/opt/schily|/usr|g'           DEFAULTS/Defaults.linux &&
+sed -i 's|DEFINSGRP=.*|DEFINSGRP=root|' DEFAULTS/Defaults.linux &&
+sed -i 's|INSDIR=\s*sbin|INSDIR=bin|'   rscsi/Makefile          &&
+
+export GMAKE_NOWARN=true &&
+export CFLAGS="$CFLAGS -std=gnu89 -fno-strict-aliasing" &&
+
+make -j1 INS_BASE=/usr  \
+         DEFINSUSR=root \
+         DEFINSGRP=root \
+         VERSION_OS="LinuxFromScratch"
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
GMAKE_NOWARN=true &&
+
+make INS_BASE=/usr    \
+     DEFINSUSR=root   \
+     DEFINSGRP=root   \
+     MANSUFF_LIB=3cdr \
+     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 + recorders. Please exercise care with this program +

+
+

+ cdda2wav +

+
+

+ converts Compact Disc audio into WAV sound files +

+
+

+ cdrecord +

+
+

+ records audio or data onto 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ dvd+rw-tools Dependencies +

+
+ Required +
+

+ Cdrtools-3.02a09 (runtime) +

+
+
+

+ Installation of dvd+rw-tools +

+

+ First, apply a patch that fixes several bugs and fixes + compiling with newer versions of glibc and the kernel + headers: +

+
patch -Np1 -i ../dvd+rw-tools-7.1-consolidated_fixes-1.patch
+

+ Install dvd+rw-tools by + running the following commands: +

+
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 +

+

+ 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 +

+
+
+
+
+
+
+
+

+ libburn-1.5.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libburn Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (to generate HTML + documentation) +

+
+
+

+ Installation of libburn +

+

+ First, fix a problem when building with gcc-15: +

+
sed -i 's/catch_int ()/catch_int (int signum)/' test/poll.c
+

+ 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.6 &&
+install -v -m644 doc/html/* /usr/share/doc/libburn-1.5.6
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libisoburn-1.5.6 +

+
+
+
+
+
+

+ Introduction to libisoburn +

+

+ libisoburn is a frontend for + the libburn and libisofs libraries, 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 the + media level, and even plain disk files or block devices. +

+

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

+

+ Package Information +

+
+ +
+

+ libisoburn Dependencies +

+
+ Required +
+

+ libburn-1.5.6 and libisofs-1.5.6 +

+
+ Optional +
+

+ Doxygen-1.14.0 (to generate HTML + documentation), Tk-8.6.16 (for xorriso-tcltk), and + libjte +

+
+
+

+ 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.6 &&
+install -v -m644 doc/html/* /usr/share/doc/libisoburn-1.5.6
+
+
+

+ Command Explanations +

+

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

+

+ --enable-pkg-check-modules: + This switch tells the configure script to use pkg-config to check for the libburn and libisofs libraries. +

+
+
+

+ 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.6 +
+
+
+
+

+ 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 + provides a mkisofs type user interface +

+
+

+ xorriso-tcltk +

+
+

+ is a frontend that operates xorriso in dialog mode +

+
+

+ libisoburn.so +

+
+

+ contains the libisoburn API functions +

+
+
+
+
+
+
+
+

+ libisofs-1.5.6 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ libisofs Dependencies +

+
+ Optional +
+

+ Doxygen-1.14.0 (to generate HTML + documentation) and libjte +

+
+
+

+ 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.6 &&
+install -v -m644 doc/html/* /usr/share/doc/libisofs-1.5.6
+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+
+

+ 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.4.12 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Cups + Dependencies +

+
+ Required +
+

+ GnuTLS-3.8.10 +

+
+ Recommended +
+ +
+ Optional +
+

+ Avahi-0.8, libpaper-2.2.6, PHP-8.4.11, and Python2 +

+
+ Required (Postinstall) +
+

+ cups-filters-2.0.1 +

+
+ Optional (Postinstall) +
+

+ Gutenprint-5.3.5 and hplip + (HP printers) +

+
+
+

+ 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.5) enable the following + options in your kernel configuration and recompile the + kernel: +

+
Device Drivers --->
+  [*] USB support --->                                             [USB_SUPPORT]
+    <*/M> USB Printer support                                      [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 --->                                     [PARPORT]
+    <*/M> PC-style hardware                                         [PARPORT_PC]
+  Character devices --->
+    <*/M> Parallel printer support                                     [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.2.1, 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. +

+

+ Build Cups by running the + following commands: +

+
./configure --libdir=/usr/lib            \
+            --with-rcdir=/tmp/cupsinit   \
+            --with-rundir=/run/cups      \
+            --with-system-groups=lpadmin \
+            --with-docdir=/usr/share/cups/doc-2.4.12 &&
+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 no 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.4.12 /usr/share/doc/cups-2.4.12
+

+ Remove the shipped bootscript, which is incompatible with + LFS: +

+
rm -rf /tmp/cupsinit
+

+ 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-3.24.50 installed and + issue the following command as the root user: +

+
gtk-update-icon-cache -qtf /usr/share/icons/hicolor
+
+
+
+

+ Command Explanations +

+

+ --with-rcdir=/tmp/cupsinit: + This switch tells the build process to install the shipped + bootscript into /tmp instead of + /etc/rc.d. +

+

+ --with-rundir=/run/cups: This + switch prevents the package from referring to the deprecated + /var/run directory. +

+

+ --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.29, 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 https://www.cups.org/documentation.html. +

+

+ For non-PostScript printers to print with Cups, you need to install ghostscript-10.05.1 to convert + PostScript to raster images and a driver (e.g. from + Gutenprint-5.3.5) to convert the + resulting raster images to a form that the printer + understands. + Foomatic drivers use ghostscript-10.05.1 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
+
+
+
+
+
+

+ Boot Script +

+
+
+
+

+ If you want the Cups print + service to start automatically when the system is booted, + install the init script included in the blfs-bootscripts-20250225 package: +

+
make install-cups
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cancel, cupsaccept, cups-config, + cupsctl, cupsd, cupsdisable, cupsenable, cupsfilter, + cupsreject, cupstestppd, ippeveprinter, ippfind, 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.4.12, /run/cups, and + /var/{cache,log,spool}/cups +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ cancel +

+
+

+ cancels existing print jobs from the print queues +

+
+

+ cupsaccept +

+
+

+ accepts 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 +

+
+

+ stops printers and classes +

+
+

+ cupsenable +

+
+

+ starts 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 +

+
+

+ rejects jobs sent to a destination +

+
+

+ cupstestppd +

+
+

+ tests the conformance of PPD files +

+
+

+ ippeveprinter +

+
+

+ is an IPP Everywhere printer for CUPS +

+
+

+ ippfind +

+
+

+ finds Internet Printing Protocol printers +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ cups-browsed-2.1.1 +

+
+
+
+
+
+

+ Introduction to cups-browsed +

+

+ The cups-browsed daemon is + used to browse the network for remote CUPS queues and IPP + network printers and automatically create local queues + pointing to them. +

+

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

+

+ Package Information +

+
+ +
+

+ cups-browsed Dependencies +

+
+ Required +
+

+ Avahi-0.8, libcupsfilters-2.1.1 and libppd-2.1.1 +

+
+ Optional +
+

+ OpenLDAP-2.6.10 +

+
+
+

+ Installation of cups-browsed +

+

+ Install cups-browsed by + running the following commands: +

+
./configure --prefix=/usr                \
+            --with-cups-rundir=/run/cups \
+            --without-rcdir              \
+            --disable-static             \
+            --docdir=/usr/share/doc/cups-browsed-2.1.1 &&
+make
+

+ This package does not come with a functional test suite. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

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

+

+ --with-cups-rundir=/run/cups: + Defines the directory containing transient printing data. The + default /var/run/cups is + obsolete. +

+

+ --without-rcdir: This + switch disables installation of the bundled bootscript which + is not compatible with BLFS. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cups-browsed +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + None +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ cups-browsed +

+
+

+ is a daemon for browsing the Bonjour and CUPS + broadcasts of shared, remote CUPS printers +

+
+
+
+
+
+
+
+

+ cups-filters-2.0.1 +

+
+
+
+
+
+

+ Introduction to CUPS Filters +

+

+ The CUPS Filters package is + only needed to adapt libcupsfilters-2.1.1 and + libppd-2.1.1 filter functions for + cups-2.x. It should not be needed for cups-3.x. +

+

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

+

+ Package Information +

+
+ +
+

+ CUPS + Filters Dependencies +

+
+ Required +
+

+ libcupsfilters-2.1.1 and libppd-2.1.1 +

+
+ Optional (runtime) +
+

+ cups-browsed-2.1.1 (if you need + Network Discovery capabilities) +

+
+
+

+ Installation of CUPS Filters +

+

+ First, fix a problem when building with gcc-15: +

+
sed -i '/proc_func)()/s/()/(FILE*, FILE*, void*)/' filter/foomatic-rip/process.h
+

+ Install CUPS Filters by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/cups-filters-2.0.1 &&
+make
+

+ This package does not come with a functional 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: + driverless, driverless-fax, and + foomatic-rip +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/lib/cups/{backend,driver,filter}, + /usr/share/doc/cups-filters-2.0.1, and + /usr/share/ppd/cupsfilters +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+
+
+
+
+
+
+

+ ghostscript-10.05.1 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ If you wish, you can download additional fonts. +

+
+

+ Standard Fonts +

+ +
+
+

+ Other Fonts +

+ +
+

+ Ghostscript Dependencies +

+
+ Recommended +
+ +
+ Optional +
+

+ Cairo-1.18.4, GTK-3.24.50, libidn-1.43, libpaper-2.2.6, libwebp-1.6.0, and + a graphical + environment +

+
+
+

+ 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 problem when building with gcc-15: +

+
patch -Np1 -i ../ghostscript-10.05.1-gcc15_fixes-1.patch
+

+ Compile Ghostscript: +

+
rm -rf zlib &&
+
+./configure --prefix=/usr           \
+            --disable-compile-inits \
+            --with-system-libtiff   &&
+make
+
+

+ Note +

+

+ The shared library depends on GTK-3.24.50. It is only used by + external programs like asymptote-3.05, dvisvgm-3.5, and + ImageMagick-7.1.2-1. +

+
+

+ 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 built the shared library, install it with: +

+
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/10.05.1 /usr/share/doc/ghostscript-10.05.1 &&
+rmdir /usr/share/doc/ghostscript                                            &&
+cp -r examples/ -T /usr/share/ghostscript/10.05.1/examples
+

+ 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/10.05.1/examples . + To do this, run the following command (in a X11 session): +

+
gs -q -dBATCH /usr/share/ghostscript/10.05.1/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.7.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/10.05.1 + /usr/share/doc/ghostscript-10.05.1: This + moves the documentation to 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.4.12 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 +
+
+ Installed Directories: + /usr/include/ghostscript, + /usr/share/ghostscript, and + /usr/share/doc/ghostscript-10.05.1 +
+
+
+
+

+ 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. +

+
+
+
+
+
+

+ Gutenprint-5.3.5 +

+
+
+
+
+
+

+ 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.4.12. See a list of supported + printers at + https://gutenprint.sourceforge.net/p_Supported_Printers.php. +

+

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

+

+ Package Information +

+
+ +
+

+ Gutenprint Dependencies +

+
+ Recommended +
+ +
+ Recommended (at runtime) +
+ + + +
+ Optional (to Regenerate + Documentation) +
+

+ ImageMagick-7.1.2-1, texlive-20250308 (or install-tl-unx), Doxygen-1.14.0, and + DocBook-utils-0.6.14 +

+
+
+

+ 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 --->                                             [USB_SUPPORT]
+    <*/M> USB Printer support                                      [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 \
+            --without-gimp2  \
+            --without-gimp2-as-gutenprint &&
+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.3.5 in March 2025) this needed 292 SBU and + 3.8 GB to complete 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.5/api/gutenprint{,ui2} &&
+install -v -m644    doc/gutenprint/html/* \
+                    /usr/share/doc/gutenprint-5.3.5/api/gutenprint &&
+install -v -m644    doc/gutenprintui2/html/* \
+                    /usr/share/doc/gutenprint-5.3.5/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. +

+

+ --without-gimp2: This + switch disables support for GIMP because it has not been + updated to support GIMP3 yet. +

+
+
+

+ Configuring Gutenprint +

+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ For CUPS to see newly + installed print drivers, it has to be restarted (as the + root user): +

+
/etc/rc.d/init.d/cups restart
+

+ Then point your web browser to http://localhost:631/ to add a + new printer to CUPS. +

+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + cups-calibrate, cups-genppd.5.3, + cups-genppdupdate, escputil, and testpattern +
+
+ Installed Libraries: + libgutenprint.so and optionally, + various CUPS filters and + backend drivers under + /usr/lib/gutenprint/5.3/modules/ +
+
+ Installed Directories: + /usr/{include,lib,share}/gutenprint + and /usr/share/doc/gutenprint-5.3.5 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ cups-calibrate +

+
+

+ calibrates the color output of printers using the + Gutenprint, + CUPS or + ESP Print Pro + drivers +

+
+

+ cups-genppd.5.3 +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ libcupsfilters-2.1.1 +

+
+
+
+
+
+

+ Introduction to libcupsfilters +

+

+ The libcupsfilters library + contains filter functions for the data format conversion + tasks needed in Printer Applications. It also contains + several API functions for developing printer drivers/Printer + Applications. +

+

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

+

+ Package Information +

+
+ +
+

+ libcupsfilters Dependencies +

+
+ Required +
+

+ Cups-2.4.12, GLib-2.84.4, ghostscript-10.05.1 or + mupdf-1.26.5, Little CMS-2.17, + Poppler-25.08.0, and Qpdf-12.2.0 +

+
+ Recommended +
+ +
+
+

+ Installation of libcupsfilters +

+

+ Install libcupsfilters by + running the following commands: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/libcupsfilters-2.1.1 &&
+make
+

+ To test the results, issue make + check. DejaVu fonts are needed for the tests. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --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 font + installed, use this switch to specify where DejaVuSans.ttf (or perhaps some other text + TTF font - though this is untested) is located. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + None +
+
+ Installed Libraries: + libcupsfilters.so +
+
+ Installed Directories: + /usr/include/cupsfilters, + /usr/share/cups/{banners,charsets,data}, and + /usr/share/doc/libcupsfilters-2.1.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libcupsfilters.so +

+
+

+ contains CUPS filters API functions +

+
+
+
+
+
+
+
+

+ libppd-2.1.1 +

+
+
+
+
+
+

+ Introduction to libppd +

+

+ The libppd library contains + functions for handling legacy printers using PPD description + files. +

+

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

+

+ Package Information +

+
+ +
+

+ libppd Dependencies +

+
+ Required +
+

+ libcupsfilters-2.1.1 +

+
+
+

+ Installation of libppd +

+

+ Install libppd by running + the following commands: +

+
./configure --prefix=/usr                \
+            --disable-static             \
+            --with-cups-rundir=/run/cups \
+            --enable-ppdc-utils          \
+            --docdir=/usr/share/doc/libppd-2.1.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. +

+

+ --with-cups-rundir=/run/cups: + Defines the directory containing transient printing data. The + default /var/run/cups is + obsolete. +

+

+ --enable-ppdc-utils: + Allows building utilities to manipulate .ppd files. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + ppdc, ppdhtml, ppdi, ppdmerge, and + ppdpo +
+
+ Installed Libraries: + libppd.so +
+
+ Installed Directories: + /usr/include/ppd, /usr/share/ppdc, + and /usr/share/doc/libppd-2.1.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ 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 +

+
+

+ libppd.so +

+
+

+ contains API functions for manipulating + .ppd files +

+
+
+
+
+
+
+
+
+

+ Chapter 47. Scanning +

+
+
+
+
+

+ This chapter contains scanning applications which allow you to + convert printed documents into formatted documents readable by + other applications. +

+
+
+
+

+ SANE-1.4.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Back + Ends Package Information +

+
+ +
+
+

+ Note +

+

+ The upstream location for this file is at https://gitlab.com/sane-project + but the file URL uses an embedded md5sum. For convenience, + the package has been copied to the location above. +

+
+

+ SANE + Dependencies +

+
+ Optional +
+

+ Avahi-0.8, Cups-2.4.12, libjpeg-turbo-3.0.1, libtiff-4.7.0, libusb-1.0.29, v4l-utils-1.30.1, Net-SNMP, libieee1284, + libgphoto2, and texlive-20250308 (or install-tl-unx) +

+
+
+

+ 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.29 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 + Backends +

+
+
+
+

+ The SANE daemon should run + with its own group. Create this group by issuing the + following command 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. As a result, the user + building the package needs to be added to the + scanner group. Add the + user to the scanner group + by issuing the following command 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.29, + include the configure switch --enable-libusb_1_0. Install + SANE Backends by running + the following commands: +

+
sg scanner -c "                                 \
+PYTHON=python3 ./configure --prefix=/usr        \
+                           --sysconfdir=/etc    \
+                           --localstatedir=/var \
+                           --with-lockdir=/run/lock \
+                           --docdir=/usr/share/doc/sane-backends-1.4.0" &&
+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 &&
+mkdir -p          /run/lock/sane &&
+chgrp -v scanner  /run/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. +

+
+
+
+

+ 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. +

+

+ PYTHON=python3: This + switch forces the build system to use Python 3 instead of + Python 2. +

+

+ --sysconfdir=/etc: + This switch installs the configuration files in /etc/sane.d instead of /usr/etc/sane.d. +

+
+
+

+ 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 users that will use a scanner to the scanner group. +

+

+ If you want to access a network scanner, include two + lines in net.conf, as the + root user (make sure to + replace <server_ip> by the actual value): +

+
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. +

+
+
+
+
+
+
+ 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 https://penguin-breeder.org/sane/saned/. +

+
+
+
+
+

+ Contents +

+
+
+
+ Installed Programs: + gamma4scanimage, sane-config, + saned, sane-find-scanner, scanimage, and umax_pp +
+
+ 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.4.0 +
+
+
+
+

+ 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 +

+
+

+ 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 +

+
+

+ umax_pp +

+
+

+ is a tool used to read information from UMAX + parallel port scanners. It can also be used for + performing diagnostics on these scanners +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ Simple-scan-46.0 +

+
+
+
+
+
+

+ Introduction to Simple-scan +

+

+ The Simple-scan package + contains a modern document scanning application. It captures + images using SANE, and supports the latest color management + and graphics standards. +

+

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

+

+ Package Information +

+
+ +
+

+ Simple-scan Dependencies +

+
+ Required +
+

+ colord-1.4.8, itstool-2.0.7, libgusb-0.4.9, libadwaita-1.7.6, + libwebp-1.6.0, and SANE-1.4.0 +

+
+
+

+ Installation of Simple-scan +

+

+ Install Simple-scan by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr --buildtype=release .. &&
+ninja
+

+ This package does not come with a test suite. +

+

+ Now, as the root user: +

+
ninja install &&
+gtk-update-icon-cache -qtf /usr/share/icons/hicolor
+
+
+

+ Command Explanations +

+

+ --buildtype=release: + Specify a buildtype suitable for stable releases of the + package, as the default may produce unoptimized binaries. +

+

+ gtk-update-icon-cache + [...]: This command updates the system-wide + GTK+ icon cache since Simple-scan's build system does not + update it to account for the icons that it installs. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + simple-scan +
+
+ Installed Libraries: + None +
+
+ Installed Directories: + /usr/share/help/*/simple-scan +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ simple-scan +

+
+

+ is a modern document scanning application +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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 +
+

+ libarchive-3.8.1 and sgml-common-0.6.3 +

+
+
+

+ Installation of DocBook-3.1 SGML DTD +

+
+

+ Note +

+

+ The package source is distributed in zip format and requires unzip (actually a symlink + to bsdunzip + from libarchive). 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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 +
+

+ libarchive-3.8.1 and sgml-common-0.6.3 +

+
+
+

+ Installation of DocBook-4.5 SGML DTD +

+
+

+ Note +

+

+ The package source is distributed in zip format and requires unzip (actually a symlink + to bsdunzip + from libarchive). 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ OpenSP Dependencies +

+
+ Required +
+

+ sgml-common-0.6.3 +

+
+ Optional +
+

+ libnsl-2.0.1 and xmlto-0.0.29 +

+
+
+

+ Installation of OpenSP +

+

+ Install OpenSP by running + the following commands: +

+
patch -Np1 -i ../OpenSP-1.5.2-gcc14-1.patch          &&
+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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Download +

+ +

+ OpenJade Dependencies +

+
+ Required +
+

+ OpenSP-1.5.2 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+

+ Documentation and test data +

+ +
+

+ 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 +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ DocBook-utils Dependencies +

+
+ Required +
+

+ OpenJade-1.3.2, docbook-dsssl-1.79, and docbook-3.1-dtd +

+
+ Recommended (Runtime Dependencies + Only) +
+ +
+
+

+ 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.23 + 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 it 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 +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 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 +
+

+ libarchive-3.8.1 and libxml2-2.14.5 +

+
+
+

+ Installation of DocBook-4.5 XML DTD +

+
+

+ Note +

+

+ The package source is distributed in zip format and requires unzip (actually a symlink + to bsdunzip + from libarchive). 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                                   &&
+cp -v -af --no-preserve=ownership 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 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 +
+

+ libarchive-3.8.1 and libxml2-2.14.5 +

+
+
+

+ 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
+

+ Still 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
+    install -v -d -m755 /etc/xml &&
+    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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +
+

+ Optional documentation +

+ +
+

+ DocBook XSL Stylesheets Dependencies +

+
+ Recommended (at runtime) +
+ +
+ Optional (all used at runtime) +
+

+ apache-ant-1.10.15 (to produce + “webhelp” documents), libxslt-1.1.43 (or + any other XSLT processor), to process Docbook documents, + Ruby-3.4.5 (to utilize the “epub” + stylesheets), Zip-3.0 (to produce “epub3” documents), + and Saxon6 + and Xerces2 Java (used + with apache-ant-1.10.15 to produce + “webhelp” documents) +

+
+
+

+ 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 +

+
+
+
+

+ Create (or append) and populate the XML catalog file using + the following commands as the root user (both http and https forms are used because + upstream have had both in their documentation): +

+
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"                        \
+           "http://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/1.79.2"    \
+           "/usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                           \
+           "http://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"                        \
+           "http://cdn.docbook.org/release/xsl-nons/current"    \
+           "/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"                           \
+           "http://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-nons-1.79.2/*/*.xsl +
+
+ Installed Directories: + /usr/share/xml/docbook/xsl-stylesheets-nons-1.79.2 + and /usr/share/doc/docbook-xsl-nons-1.79.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ XSL + Stylesheets +

+
+

+ are used for performing transformations on XML + files +

+
+
+
+
+
+
+
+

+ docbook-xsl-ns-1.79.2 +

+
+
+
+
+
+

+ Introduction to DocBook XSL Stylesheets (Namespaced) +

+

+ The DocBook XSL Stylesheets + (Namespaced) package contains XSL stylesheets. These + are useful for performing transformations on XML DocBook 5.0 + files. +

+

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

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+ +

+ DocBook XSL Stylesheets (Namespaced) + Dependencies +

+
+ Recommended (at runtime) +
+ +
+ Optional (all used at runtime) +
+

+ apache-ant-1.10.15 (to produce + “webhelp” documents), libxslt-1.1.43 (or + any other XSLT processor), to process Docbook documents, + Ruby-3.4.5 (to utilize the “epub” + stylesheets), Zip-3.0 (to produce “epub3” documents), + and Saxon6 + and Xerces2 Java (used + with apache-ant-1.10.15 to produce + “webhelp” documents) +

+
+
+

+ Installation of DocBook XSL Stylesheets (Namespaced) +

+

+ First, fix a problem that causes stack overflows when doing + recursion: +

+
patch -Np1 -i ../docbook-xsl-1.79.2-stack_fix-1.patch
+

+ 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-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-1.79.2 &&
+
+ln -s VERSION /usr/share/xml/docbook/xsl-stylesheets-1.79.2/VERSION.xsl
+

+ The documentation for this package is shared with its + non-namespaced counterpart, the docbook-xsl-nons-1.79.2 + package. Install the latter if you want the documentation. +

+
+
+

+ Configuring DocBook XSL Stylesheets +

+
+
+
+
+

+ Config Files +

+
+
+
+

+ /etc/xml/catalog +

+
+
+
+
+
+

+ Configuration Information +

+
+
+
+

+ Create (or append) and populate the XML catalog file using + the following commands as the root user (both http and https forms are used because + upstream have had both in their documentation): +

+
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"                   \
+           "http://cdn.docbook.org/release/xsl/1.79.2"     \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteSystem"                   \
+           "https://cdn.docbook.org/release/xsl/1.79.2"    \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                      \
+           "http://cdn.docbook.org/release/xsl/1.79.2"     \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                      \
+           "https://cdn.docbook.org/release/xsl/1.79.2"    \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteSystem"                   \
+           "http://cdn.docbook.org/release/xsl/current"    \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteSystem"                   \
+           "https://cdn.docbook.org/release/xsl/current"   \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                      \
+           "http://cdn.docbook.org/release/xsl/current"    \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                      \
+           "https://cdn.docbook.org/release/xsl/current"   \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2" \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteSystem"                           \
+           "http://docbook.sourceforge.net/release/xsl-ns/current" \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2"         \
+           /etc/xml/catalog &&
+
+xmlcatalog --noout --add "rewriteURI"                              \
+           "http://docbook.sourceforge.net/release/xsl-ns/current" \
+           "/usr/share/xml/docbook/xsl-stylesheets-1.79.2"         \
+           /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 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ XSL Stylesheets + (Namespaced) +

+
+

+ are used for performing transformations on XML + files +

+
+
+
+
+
+
+
+

+ itstool-2.0.7 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Itstool Dependencies +

+
+ Required +
+

+ docbook-xml-4.5 +

+
+
+

+ Installation of itstool +

+

+ First, fix some compatibility problems with Python-3.12 and + later: +

+
sed -i 's/re.sub(/re.sub(r/'         itstool.in &&
+sed -i 's/re.compile(/re.compile(r/' itstool.in
+

+ 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 +

+
+
+
+
+
+
+
+

+ xmlto-0.0.29 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://pagure.io/xmlto/archive/0.0.29/xmlto-0.0.29.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: 556f2642cdcd005749bd4c08bc621c37 +

    +
  • +
  • +

    + Download size: 64 KB +

    +
  • +
  • +

    + Estimated disk space required: 1.9 MB (with tests) +

    +
  • +
  • +

    + Estimated build time: less than 0.1 SBU (with tests) +

    +
  • +
+
+

+ xmlto Dependencies +

+
+ Required +
+

+ docbook-xml-4.5, docbook-xsl-nons-1.79.2, and + libxslt-1.1.43 +

+
+ Optional (for DVI, PDF, and + postscript backend post-processing) +
+

+ fop-2.11, + dblatex, + and + PassiveTeX +

+
+ Optional (for text backend + post-processing) +
+

+ One of Links-2.30, Lynx-2.9.2, W3m, or ELinks +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/xmlto +

+
+
+

+ Installation of xmlto +

+

+ Install xmlto by running the + following commands: +

+
autoreconf -fiv                                  &&
+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-2.30 is not installed, + unless you have ELinks installed, and you wish to + use it for text backend post-processing. If you do wish to + ELinks, you should remove this environment variable. +

+
+
+

+ 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 +

+
+
+
+
+
+
+
+
+

+ 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 + 12.4 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.8.0, instead of Enscript, for converting UTF-8 encoded + text to PostScript. +

+
+

+ Package Information +

+
+ +
+

+ Enscript Dependencies +

+
+ Optional +
+

+ texlive-20250308 (or install-tl-unx) +

+
+
+

+ Installation of Enscript +

+

+ Install Enscript by running + the following commands: +

+
./configure --prefix=/usr              \
+            --sysconfdir=/etc/enscript \
+            --localstatedir=/var       \
+            --with-media=Letter &&
+make CC="gcc -std=gnu17"        &&
+
+pushd docs &&
+  makeinfo --plaintext -o enscript.txt enscript.texi &&
+popd
+

+ If you have texlive-20250308 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 +

+
+
+
+
+
+
+
+

+ ePDFView-gtk3-20200814 +

+
+
+
+
+
+

+ Introduction to ePDFView-gtk3 +

+

+ ePDFView-gtk3 is a fork of + the old ePDFView program. + Although the github repository https://github.com/Flow-It/epdfview_old.git + names it as 'old', it is the gtk3 fork. It is a lightweight + replacement for Evince as it + does not rely upon GNOME + libraries and is more capable than MuPDF. +

+

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

+

+ Package Information +

+
+ +
+

+ ePDFView Dependencies +

+
+ Required +
+

+ GTK-3.24.50 and Poppler-25.08.0 +

+
+ Recommended +
+ +
+ Optional +
+

+ The home page of the project's repository mentions that there + are optional dependencies, which are enabled by switches. + These are for building the documentation and running the test + suite, Doxygen-1.14.0 and Cppunit. + Note that doxygen only + installs a skeletal page about itself, which contains no + package documentation, and the test code does not compile + with recent versions of C++. +

+
+
+

+ Installation of ePDFView-gtk3 +

+

+ Install ePDFView-gtk3 by + running the following commands: +

+
mkdir build &&
+cd    build &&
+
+meson setup --prefix=/usr           \
+            --buildtype=release     \
+            -D enable-printing=true \
+            ..                      &&
+ninja
+

+ This package does not come with a buildable test suite. +

+

+ Now, as the root user: +

+
ninja 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-3.24.50 installed (for + the icon cache) and desktop-file-utils-0.28 (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 +

+

+ -D + enable-printing=true: builds the code to link + to the cups print queue(s). + Omit this if you have not installed cups. +

+
+
+

+ Configuring ePDFView-gtk3 +

+

+ ePDFView-gtk3 has several keyboard hotkeys for optional + features. Most of them are 'off' by default, including the + toolbar, and if it has been closed with the menu disabled, + the program can start with all options not being visible + until the relevant function keys are pressed. +

+
+
    +
  • +

    + [F6] - toggle toolbar +

    +
  • +
  • +

    + [F7] - toggle menu +

    +
  • +
  • +

    + [F8] - toggle invert-colors +

    +
  • +
  • +

    + [F9] - toggle show-index +

    +
  • +
  • +

    + [F11] - toggle fullscreen +

    +
  • +
+
+
+
+

+ Contents +

+
+
+
+ Installed Program: + epdfview +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + /usr/share/epdfview +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ epdfview +

+
+

+ is a Gtk+-3 + program for viewing PDF documents +

+
+
+
+
+
+
+
+

+ fop-2.11 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Additional Downloads +

+
+

+ Required Additional Downloads: +

+ +
+
+

+ Recommended packages +

+ +
+

+ fop + Dependencies +

+
+ Required +
+

+ apache-ant-1.10.15 +

+
+ Recommended +
+ +
+ Optional +
+

+ a graphical + environment (to run tests), JAI Image I/O Tools, + and JEuclid +

+
+
+

+ 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.9.4-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
+

+ Compile fop by running the + following commands: +

+
cd fop &&
+
+LC_ALL=en_US.UTF-8                     \
+PATH=$PATH:/tmp/apache-maven-3.9.4/bin \
+ant package javadocs &&
+
+mv build/javadocs .
+

+ This package comes with a test suite, 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.11 &&
+cp -vR build conf examples fop* javadocs lib /opt/fop-2.11 &&
+chmod a+x /opt/fop-2.11/fop                                &&
+ln -v -sfn fop-2.11 /opt/fop
+

+ Finally, remove the temporary copy of Apache Maven: +

+
rm -rf /tmp/apache-maven-3.9.4
+
+
+
+

+ Command Explanations +

+

+ sed -i ... + build.xml: This adds three switches to the + javadoc + command, preventing some errors from occurring 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.11 + /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.11 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ MuPDF-1.26.5 +

+
+
+
+
+
+

+ Introduction to MuPDF +

+

+ MuPDF is a lightweight PDF + and XPS viewer. +

+

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

+

+ Package Information +

+
+ +
+

+ MuPDF Dependencies +

+
+ Required +
+

+ Xorg + Libraries +

+
+ Recommended +
+ +
+ Optional +
+

+ xdg-utils-1.2.1 (runtime), jbig2dec, and + MuJS +

+
+ Required (runtime) +
+

+ a graphical + environment +

+
+
+

+ Installation of MuPDF +

+

+ 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 # lcms2mt is strongly preferred
+USE_SYSTEM_LIBJPEG := yes
+USE_SYSTEM_MUJS := no # build needs source anyway
+USE_SYSTEM_OPENJPEG := yes
+USE_SYSTEM_ZLIB := yes
+USE_SYSTEM_GLUT := yes
+USE_SYSTEM_CURL := yes
+USE_SYSTEM_GUMBO := no
+EOF
+
+export XCFLAGS=-fPIC                      &&
+make build=release shared=yes verbose=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.26.5 \
+     install                            &&
+
+ln -sfv libmupdf.so.26.5 /usr/lib/libmupdf.so.26 &&
+ln -sfv libmupdf.so.26   /usr/lib/libmupdf.so    &&
+chmod 755 /usr/lib/libmupdf.so.26.5              &&
+
+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.26.5 +
+
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ paps-0.8.0 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ paps + Dependencies +

+
+ Required +
+

+ fmt-11.2.0 + and Pango-1.56.4 +

+
+ Optional +
+

+ Doxygen-1.14.0 +

+
+
+

+ Installation of paps +

+

+ First fix a problem with glib-2.81.0 or later: +

+
sed -i -r 's/g_utf8_(next|offset)/(char*) &/' src/paps.cc
+

+ Install paps by running the + following commands: +

+
./configure --prefix=/usr    \
+            --disable-Werror \
+            --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 +

+
+
+
+
+
+
+
+
+

+ 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-20250308 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-3.05, biber-2.21, dvisvgm-3.5, 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/2025. +

+

+ 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 +

+
+
+
+
+

+ Upstream prefers to install in /usr/local but the BLFS editors regard that + as inconvenient, and think using /opt/texlive is more appropriate. Originally + BLFS used a full binary install to bootstrap the source + install, so the same prefix is used for both. +

+

+ 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 creating the texlive.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 texlive.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). +

+
+

+ Now, create the texlive.sh script as the root user: +

+
TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/')
+TEXLIVE_PREFIX=/opt/texlive/2025
+
+cat > /etc/profile.d/texlive.sh << EOF
+# Begin texlive setup
+TEXLIVE_PREFIX=/opt/texlive/2025
+export TEXLIVE_PREFIX
+
+pathappend $TEXLIVE_PREFIX/texmf-dist/doc/info INFOPATH
+pathappend $TEXLIVE_PREFIX/bin/$TEXARCH
+
+TEXMFCNF=$TEXLIVE_PREFIX/texmf-dist/web2c
+export TEXMFCNF
+
+# End texlive setup
+EOF
+
+unset TEXARCH
+

+ 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-20250308 + to begin installing from source. +

+
+
+
+
+

+ 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, LuaLaTeX, 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 2025/ 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 LaTeX, ConTeXt, etc), or you wish + to use tlmgr to + get updates whilst this version is supported (typically, + until March 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. +

+
+

+ Note +

+

+ If you wish to use ConTeXt with luametatex (most of the + old MKII and MKIV code was removed from TeX Live 2023 by + the ConTeXt developer), using the binary is probably the + easiest option. The source no-longer ships with TeX Live + and is poorly adapted to building with systems except those + running Mac and Windows. See comments 1 to 5 of #17823. +

+
+

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

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: Varies frequently +

    +
  • +
  • +

    + Download size: 5.5 MB +

    +
  • +
  • +

    + Estimated disk space required: 90 MB for plain TeX, + typically 323 MB for latex and later engines, 9.0 GB if + everything is included +

    +
  • +
  • +

    + Estimated build time: varies, depending on network + speed and traffic +

    +
  • +
+
+
+ Recommended +
+ +
+ Recommended (at runtime) +
+ + + + + +
+

+ 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. +

+
+

+ Python2 + is used by the unmaintained ebong CTAN module (intended for + writing Bengali in Rapid Roman Format). /usr/bin/python is also in the shebang line + for the latex-papersize and lilyglyphs scripts, and + documentation at CTAN says both modules have been updated to + work with python3. In pythontex there are scripts to invoke + python3 or python2 according to the system's version of + python. + Ruby-3.4.5 is used by two scripts, one is + for pTex (Japanese vertical writing) and the other is + match_parens which might be generally useful. The perl module + + Tk, which needs to be run from an X11 session to run the + tests and requires Tk-8.6.16 is used by one of the scripts for + ptex and is needed for texdoctk (a GUI interface for finding + documentation files and opening them with the appropriate + viewer). ps2pdf, from ghostscript-10.05.1, is used by + some utilities and scripts. +

+
+
+

+ 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. The BLFS team recommends + /opt/texlive. +

+
+

+ Note +

+

+ If you have chosen to install the binary as a normal user, + the directory for the prefix needs to be writable by that + user. The root user can + chown /opt/texlive/2025 to + that user before the user starts the install. If any later + change in that directory is made by the root user, that will change the ownership, + which breaks usage by normal users. +

+
+

+ 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. For example, + 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 time to complete the download will depend on + your internet connection speed and the number of packages + selected. +

+

+ For a minimal install that will build documentation that is + referenced in BLFS, the only installation collections needed + are '[a] Essential programs and files' and '[D] LaTeX + fundamental packages'. This will download about 132 files and + use about 323 MB. Users can select other collections as + needed but a full installation will download several thousand + files and use over 8GB. +

+
+

+ Note +

+

+ After installation, the PATH environment variable will need + to be updated, and other variables will need to be set. + Please refer to Setting the PATH for TeX + Live to set these environment variables. +

+
+
+
+

+ Command Explanations +

+

+ ./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, for example, because you are in New Zealand but the + installer chooses to use an Australian mirror. The list of + mirrors is at https://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 + 2025/texmf-dist/. + Using texdoc + pdflatex ( replace pdflatex with the + command name ) may also be useful +

+
+
+
+
+
+
+
+

+ texlive-20250308-source +

+
+
+
+
+
+

+ Introduction to TeX Live from source +

+
+

+ Note +

+

+ According to https://www.tug.org/historic/ + the master site in France only supports ftp and rsync. Now + that ftp is generally deprecated, that page has links to + mirrors, some of which support https, e.g. in Utah and + Chemnitz as well as in China. If you prefer to use a + different mirror from the example links here, you will need + to navigate to systems/historic/texlive/2025 or + systems/texlive/2025 as the case may be. +

+
+

+ 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 test suite 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 + initialize the new installation will be found. +

+

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

+

+ Package Information +

+
+ +
+

+ 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, as 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. If you are unable to download the + files for this package, go to https://www.ctan.org/mirrors/ + to find a more-accessible mirror. +

+
+ +
+

+ The tlpdb database is shipped as a separate tarball. The + texdoc program + needs a cache file derived from this (and will create the + cache on its first run). +

+
+ +
+

+ TeX + Live from source Dependencies +

+
+ Recommended +
+ + + +
+ 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 +
+

+ Python2 + is used by the unmaintained ebong CTAN module (intended for + writing Bengali in Rapid Roman Format). /usr/bin/python is also in the shebang line + for the latex-papersize and lilyglyphs scripts, and + documentation at CTAN says both modules have been updated to + work with python3. In pythontex there are scripts to invoke + python3 or python2 according to the system's version of + python. + Ruby-3.4.5 is used by two scripts, one is + for pTex (Japanese vertical writing) and the other is + match_parens which might be generally useful. The perl module + + Tk, which needs to be run from an X11 session to run the + tests and requires Tk-8.6.16 is used by one of the scripts for + ptex and is needed for texdoctk (a GUI interface for finding + documentation files and opening them with the appropriate + viewer). ps2pdf, from ghostscript-10.05.1, is used by + some utilities and scripts. +

+
+
+

+ 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, + dvisvgm, or xindy) have been installed, you will + need to reinstall those as well as fixing up your + PATH for $TEXLIVE_PREFIX. +

+
+
+

+ 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-20250308-source-upstream_fixes-1.patch &&
+
+mkdir texlive-build &&
+cd    texlive-build &&
+
+../configure CC="gcc -std=gnu17" -C               \
+    --prefix=$TEXLIVE_PREFIX                      \
+    --bindir=$TEXLIVE_PREFIX/bin/$TEXARCH         \
+    --datarootdir=$TEXLIVE_PREFIX                 \
+    --includedir=$TEXLIVE_PREFIX/include          \
+    --infodir=$TEXLIVE_PREFIX/texmf-dist/doc/info \
+    --libdir=$TEXLIVE_PREFIX/lib                  \
+    --mandir=$TEXLIVE_PREFIX/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-libpaper                        \
+    --with-system-libpng                          \
+    --with-system-mpfr                            \
+    --with-system-pixman                          \
+    --with-system-zlib                            \
+    --with-banner-add=" - BLFS" &&
+
+make
+

+ To test the results, issue: make -k check. One test + psutils.test is known to fail + if using system libpaper because TeX Live includes old + versions of both psutils and + libpaper which result in a + difference in the final decimal places of the psresize test. + The libpaper developer does + not think this is significant. Another test, xdvipdfm-pdf.test, is known to fail due to + a missing binary file from the upstream fixes patch. This + does not affect the functionality of the program. +

+

+ Now, as the root user: +

+
make install-strip &&
+make texlinks      &&
+mkdir -pv                                $TEXLIVE_PREFIX/tlpkg/TeXLive/ &&
+install -v -m644 ../texk/tests/TeXLive/* $TEXLIVE_PREFIX/tlpkg/TeXLive/ &&
+tar -xf ../../texlive-20250308-extra.tar.xz -C $TEXLIVE_PREFIX/tlpkg --strip-components=2
+
+

+ 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-20250308-texmf.tar.xz -C $TEXLIVE_PREFIX --strip-components=1
+

+ Still as the root user, + initialize the new system (the command fmtutil-sys --all will + produce a lot of + output): +

+
mktexlsr &&
+fmtutil-sys --all
+

+ To allow Evince-48.1 or dvisvgm-3.5 to link to + libkpathsea.so, as the + root user (re)create a + symlink from /usr/lib: +

+
ln -svf $TEXLIVE_PREFIX/lib/libkpathsea.so{,.6} /usr/lib
+
+

+ Note +

+

+ TeX Live does not include the source for ConTeXt, only the + items that are at CTAN. Trying to build ConTeXt purely from + source on a BLFS TeX Live system is a niche usage and looks + as if it will be more trouble than it is worth. +

+

+ If you wish to use ConTeXt with luametatex (most of the + old MKII and MKIV code was removed from TeX Live 2023 by + the ConTeXt developer), starting with the binary (only + installing ConTeXt, 753 MB in March 2024) would probably be + the easiest way to bootstrap it. The source for + luametatex + can be pulled with git from github + luametatex, compiled with meson and ninja, and + installed by copying to the correct program directory. This + should avoid having to fix all the symlinks etc and also + avoid including the many unrelated parts of texmf-dist. See + comments 1 to 5 of #17823. +

+
+

+ You can now proceed to asymptote-3.05, biber-2.21, dvisvgm-3.5 + and / or xindy-2.5.1 if you wish to install them. +

+
+
+

+ Command Explanations +

+

+ -C: creates + config.cache, which saves significant time in a parallel + build. +

+

+ --prefix=, --bindir=, --datarootdir=, and other + “dir” + switches: 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. +

+

+ 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-20250308-texmf.tar.xz -C $TEXLIVE_PREFIX + --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/* + $TEXLIVE_PREFIX/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. +

+

+ --without-x: use this if you do + not have Xorg installed. +

+

+ There are many other '--disable' or '--without' options. Some + of them such as --without-texinfo + are accepted but no longer do anything, others will prevent a + program being built - but the far greater amount of space + used for the related items in texmf means there is no obvious + benefit from disabling a few of the programs. +

+
+
+

+ Contents +

+
+
+
+ Installed Programs: + Over 300 binaries and symlinks to + scripts +
+
+ Installed Libraries: + libkpathsea.so, libptexenc.so, + libsynctex.so, libtexlua53.so, libtexluajit.so +
+
+ Installed Directories: + $TEXLIVE_PREFIX/bin, + $TEXLIVE_PREFIX/include, $TEXLIVE_PREFIX/lib, + $TEXLIVE_PREFIX/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 + 2025/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 +

+
+

+ libtexlua53.so +

+
+

+ provides Lua 5.3, modified for use with LuaTeX +

+
+

+ libtexluajit.so +

+
+

+ provides LuaJIT, modified for use with LuaJITTeX +

+
+
+
+
+
+
+
+

+ asymptote-3.05 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://downloads.sourceforge.net/asymptote/asymptote-3.05.src.tgz +

    +
  • +
  • +

    + Download MD5 sum: 740eb38f419c870c6532dc1fbad074e1 +

    +
  • +
  • +

    + Download size: 30 MB +

    +
  • +
  • +

    + Estimated disk space required: 339 MB (56 MB installed + after overwriting files in $TEXLIVE_PREFIX/texmf-dist/, + with all the dependencies which are in BLFS) +

    +
  • +
  • +

    + Estimated build time: 0.8 SBU (using parallelism=4) +

    +
  • +
+
+

+ asymptote Dependencies +

+
+ Required +
+

+ ghostscript-10.05.1 and texlive-20250308 +

+
+ Recommended +
+ +
+ Recommended at runtime +
+ +
+ Optional +
+

+ fftw-3.3.10, gsl-2.8, libsigsegv-2.15, + both Boost-1.89.0 and rapidjson + to use + LSP which can be used with + emacs, click, and eigen +

+
+ Optional (at runtime) +
+

+ ImageMagick-7.1.2-1 to convert + output to other formats such as JPEG or to create animated + GIFs, PyQt5 (not tested, has + a build dependency of Qt5) to use xasy +

+

+ Editor Notes: https://wiki.linuxfromscratch.org/blfs/wiki/asymptote +

+
+
+

+ Installation of asymptote +

+
+

+ Note +

+

+ Certain 3D PDF scripts may not work when invoked from + pdflatex on some zen+ amdgpu APU machines. +

+
+

+ Install asymptote by running + the following commands: +

+
export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&
+
+./configure --prefix=$TEXLIVE_PREFIX                          \
+            --bindir=$TEXLIVE_PREFIX/bin/$TEXARCH             \
+            --datarootdir=$TEXLIVE_PREFIX/texmf-dist          \
+            --infodir=$TEXLIVE_PREFIX/texmf-dist/doc/info     \
+            --libdir=$TEXLIVE_PREFIX/texmf-dist               \
+            --mandir=$TEXLIVE_PREFIX/texmf-dist/doc/man       \
+            --disable-lsp                                     \
+            --enable-gc=system                                \
+            --with-latex=$TEXLIVE_PREFIX/texmf-dist/tex/latex \
+            --with-context=$TEXLIVE_PREFIX/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=, and other + “dir” + switches: 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=$TEXLIVE_PREFIX/texmf-dist: + This parameter ensures that the asymptote directory will similarly + overwrite any files installed by install-tl-unx. +

+

+ --disable-lsp: The + Language Server Protocol is enabled by default, with several + third-party sources included, but it does not build unless + boost and rapidjson have been installed. +

+

+ --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 and xasy +
+
+ Installed Libraries: + None +
+
+ Installed Directory: + $TEXLIVE_PREFIX/texmf-dist/asymptote, + $TEXLIVE_PREFIX/doc/asymptote, and + $TEXLIVE_PREFIX/info/asymptote +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ asy +

+
+

+ is a vector graphics program +

+
+

+ xasy +

+
+

+ is a Python3 script providing a Qt5 GUI for asy +

+
+
+
+
+
+
+
+

+ biber-2.21 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/plk/biber/archive/v2.21/biber-2.21.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: abdbdb2aa0479e490d0d75eb8e35ad50 +

    +
  • +
  • +

    + Download size: 1.6 MB +

    +
  • +
  • +

    + Estimated disk space required: 14 MB (installs 1.2MB of + perl modules) +

    +
  • +
  • +

    + Estimated build time: 0.4 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/2025 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. +

+
+

+ Biber Dependencies +

+
+ Required +
+

+ autovivification-0.18, Business-ISBN-3.012, Business-ISMN-1.205, Business-ISSN-1.008, Class-Accessor-0.51, Data-Compare-1.29, Data-Dump-1.25, Data-Uniqid-0.12, DateTime-Calendar-Julian-0.107, + DateTime-Format-Builder-0.83, + Encode-EUCJPASCII-0.03, + Encode-HanExtra-0.23, Encode-JIS2K-0.05, File-Slurper-0.014, IO-String-1.08, IPC-Run3-0.049, + Lingua-Translit-0.29, List-AllUtils-0.19, List-MoreUtils-0.430, Log-Log4perl-1.57, LWP-Protocol-https-6.14, + Module-Build-0.4234, Parse-RecDescent-1.967015, + PerlIO-utf8_strict-0.010, + Regexp-Common-2024080801, + Sort-Key-1.33, Text-BibTeX-0.91, Text-CSV-2.06, Text-Roman-3.5, Unicode-Collate-1.31, Unicode-LineBreak-2019.001, + XML-LibXML-Simple-1.01, + XML-LibXSLT-2.003000, and + XML-Writer-0.900 +

+
+ Recommended (required for the test + suite) +
+ +
+

+ Note +

+

+ It is possible to install all missing dependencies + automatically. You must first install Module-Build-0.4234 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. +

+
+
+
+

+ 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: +

+
./Build install
+
+
+

+ 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 +

+
+
+
+
+
+
+
+

+ dvisvgm-3.5 +

+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+
    +
  • +

    + Download (HTTP): + https://github.com/mgieseki/dvisvgm/releases/download/3.5/dvisvgm-3.5.tar.gz +

    +
  • +
  • +

    + Download MD5 sum: e5d256e866f307d6b63a95390fee2cd7 +

    +
  • +
  • +

    + Download size: 2.8 MB +

    +
  • +
  • +

    + Estimated disk space required: 268 MB (net 7 MB + installed after overwriting files in + $TEXLIVE_PREFIX/texmf-dist/, add 948 MB for the tests) +

    +
  • +
  • +

    + Estimated build time: 0.8 SBU (add 0.5 SBU for the + tests, both using parallelism=4) +

    +
  • +
+
+

+ dvisvgm Dependencies +

+
+ Required +
+

+ Brotli-1.1.0, ghostscript-10.05.1, + Potrace-1.16, and texlive-20250308 +

+
+ Recommended +
+ +
+ Optional +
+

+ asciidoc-10.2.1 with xmlto-0.0.29 and + libxslt-1.1.43, dblatex (with the + above) and xxHash + (the current version is included in the tarball) +

+
+
+

+ Installation of dvisvgm +

+

+ The test suite assumes that a modern version of Python has been installed as plain + python. + Changing this to use python3 requires a sed to + one Makefile.in file. +

+

+ Install dvisvgm by running + the following commands: +

+
TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&
+
+sed -i 's/python/&3/' tests/Makefile.in         &&
+./configure                                     \
+    --bindir=$TEXLIVE_PREFIX/bin/${TEXARCH}     \
+    --mandir=$TEXLIVE_PREFIX/texmf-dist/doc/man \
+    --with-kpathsea=$TEXLIVE_PREFIX             &&
+make
+

+ To test the results, issue: make check. +

+

+ Now, as the root user: +

+
make install
+
+
+

+ Command Explanations +

+

+ --with-kpathsea=$TEXLIVE_PREFIX: + 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 +

+
+
+
+
+
+
+
+

+ 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 + 12.4 platform. +

+

+ Package Information +

+
+ +
+

+ Required Additional Downloads +

+ +

+ Xindy Dependencies +

+
+ Required +
+

+ Clisp-2.49.95 and texlive-20250308 +

+
+
+

+ 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=$TEXLIVE_PREFIX              \
+            --bindir=$TEXLIVE_PREFIX/bin/$TEXARCH \
+            --datarootdir=$TEXLIVE_PREFIX         \
+            --includedir=/usr/include             \
+            --libdir=$TEXLIVE_PREFIX/texmf-dist   \
+            --mandir=$TEXLIVE_PREFIX/texmf-dist/doc/man &&
+
+make LC_ALL=POSIX
+

+ This package does not have a test suite. +

+

+ 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=, and other + “dir” + switches: 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-20250308 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: + $TEXLIVE_PREFIX/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 +

+
+
+
+
+
+
+
+
+
+

+ 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. +
    3. +

      + "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. +

      +
    4. +
    5. +

      + "Licensor" means the individual or entity that offers + the Work under the terms of this License. +

      +
    6. +
    7. +

      + "Original Author" means the individual or entity who + created the Work. +

      +
    8. +
    9. +

      + "Work" means the copyrightable work of authorship + offered under the terms of this License. +

      +
    10. +
    11. +

      + "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. +

      +
    12. +
    13. +

      + "License Elements" means the following high-level + license attributes as selected by Licensor and + indicated in the title of this License: Attribution, + Noncommercial, ShareAlike. +

      +
    14. +
    +
    +
  2. +
  3. +

    + 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. +

    +
  4. +
  5. +

    + 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. +
    3. +

      + to create and reproduce Derivative Works; +

      +
    4. +
    5. +

      + 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; +

      +
    6. +
    7. +

      + to distribute copies or phonorecords of, display + publicly, perform publicly, and perform publicly by + means of a digital audio transmission Derivative Works; +

      +
    8. +
    +
    +

    + 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). +

    +
  6. +
  7. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    5. +

      + 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. +

      +
    6. +
    7. +

      + 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. +

      +
    8. +
    9. +

      + 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. +
      3. +

        + 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. +

        +
      4. +
      +
      +
    10. +
    11. +

      + 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. +

      +
    12. +
    +
    +
  8. +
  9. +

    + 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. +

    +
  10. +
  11. +

    + 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. +

    +
  12. +
  13. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    +
    +
  14. +
  15. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    5. +

      + 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. +

      +
    6. +
    7. +

      + 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. +

      +
    8. +
    9. +

      + 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. +

      +
    10. +
    +
    +
  16. +
+
+
+

+ 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 © 1999-2025 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 +

+
+
+ AGESA +
+
+

+ AMD Generic Encapsulated Software Architecture +

+
+
+ 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 +

+
+
+ ASLR +
+
+

+ Address Space Layout Randomization +

+
+
+ 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 +

+
+
+ GOT +
+
+

+ Global Offset Table +

+
+
+ 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 +

+
+
+ PIE +
+
+

+ Position Independent Executable +

+
+
+ 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 +

+
+
+ SSP +
+
+

+ Stack Smash Protection +

+
+
+ 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 +

+
+
+ VCS +
+
+

+ Version Control System +

+
+
+ 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 +

+ +

+ Programs +

+ +

+ Libraries +

+ +

+ Kernel + Configuration +

+ +

+ Configuration Files +

+ +

+ Bootscripts +

+ +

+ Others +

+ +
+
+
+ + diff --git a/docs/LFS-BOOK-12.4-NOCHUNKS.html b/docs/LFS-BOOK-12.4-NOCHUNKS.html new file mode 100644 index 0000000..919a094 --- /dev/null +++ b/docs/LFS-BOOK-12.4-NOCHUNKS.html @@ -0,0 +1,59245 @@ + + + + + + Linux From Scratch + + + + + +
+
+
+
+

+ Linux + From Scratch +

+
+
+

+ Version 12.4 +

+
+
+

+ Published September 1st, 2025 +

+
+
+
+
+

+ Created by Gerard + Beekmans +

+
+
+

+ Managing Editor: Bruce + Dubbs +

+
+
+
+
+ +
+
+
+ +

+ Copyright © 1999-2025, Gerard Beekmans +

+

+ 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. +

+
+
+
+
+
+
+

+ Table of Contents +

+ +
+
+
+
+

+ Preface +

+
+
+
+
+
+
+
+

+ Foreword +

+
+
+
+
+

+ My journey to learn and better understand Linux began back in + 1998. I had just installed my first Linux distribution and had + quickly become intrigued with the whole concept and philosophy + behind Linux. +

+

+ There are always many ways to accomplish a single task. The same + can be said about Linux distributions. A great many have existed + over the years. Some still exist, some have morphed into + something else, yet others have been relegated to our memories. + They all do things differently to suit the needs of their target + audience. Because so many different ways to accomplish the same + end goal exist, I began to realize I no longer had to be limited + by any one implementation. Prior to discovering Linux, we simply + put up with issues in other Operating Systems as you had no + choice. It was what it was, whether you liked it or not. With + Linux, the concept of choice began to emerge. If you didn't like + something, you were free, even encouraged, to change it. +

+

+ I tried a number of distributions and could not decide on any + one. They were great systems in their own right. It wasn't a + matter of right and wrong anymore. It had become a matter of + personal taste. With all that choice available, it became + apparent that there would not be a single system that would be + perfect for me. So I set out to create my own Linux system that + would fully conform to my personal preferences. +

+

+ To truly make it my own system, I resolved to compile everything + from source code instead of using pre-compiled binary packages. + This “perfect” Linux system would have the + strengths of various systems without their perceived weaknesses. + At first, the idea was rather daunting. I remained committed to + the idea that such a system could be built. +

+

+ After sorting through issues such as circular dependencies and + compile-time errors, I finally built a custom-built Linux system. + It was fully operational and perfectly usable like any of the + other Linux systems out there at the time. But it was my own + creation. It was very satisfying to have put together such a + system myself. The only thing better would have been to create + each piece of software myself. This was the next best thing. +

+

+ As I shared my goals and experiences with other members of the + Linux community, it became apparent that there was a sustained + interest in these ideas. It quickly became plain that such + custom-built Linux systems serve not only to meet user specific + requirements, but also serve as an ideal learning opportunity for + programmers and system administrators to enhance their (existing) + Linux skills. Out of this broadened interest, the Linux From Scratch Project was born. +

+

+ This Linux From Scratch book is the central core around that + project. It provides the background and instructions necessary + for you to design and build your own system. While this book + provides a template that will result in a correctly working + system, you are free to alter the instructions to suit yourself, + which is, in part, an important part of this project. You remain + in control; we just lend a helping hand to get you started on + your own journey. +

+

+ I sincerely hope you will have a great time working on your own + Linux From Scratch system and enjoy the numerous benefits of + having a system that is truly your own. +

+
+

+ --
+ Gerard Beekmans
+ gerard AT linuxfromscratch D0T org +

+
+
+
+
+
+

+ Audience +

+
+
+
+
+

+ There are many reasons why you would want to read this book. One + of the questions many people raise is, “why go through all the hassle of + manually building a Linux system from scratch when you can just + download and install an existing one?” +

+

+ One important reason for this project's existence is to help you + learn how a Linux system works from the inside out. Building an + LFS system helps demonstrate what makes Linux tick, and how + things work together and depend on each other. One of the best + things this learning experience can provide is the ability to + customize a Linux system to suit your own unique needs. +

+

+ Another key benefit of LFS is that it gives you control of the + system without relying on someone else's Linux implementation. + With LFS, you are in the driver's seat. You dictate every aspect of your + system. +

+

+ LFS allows you to create very compact Linux systems. With other + distributions you are often forced to install a great many + programs you neither use nor understand. These programs waste + resources. You may argue that with today's hard drives and CPUs, + wasted resources are no longer a consideration. Sometimes, + however, you are still constrained by the system's size, if + nothing else. Think about bootable CDs, USB sticks, and embedded + systems. Those are areas where LFS can be beneficial. +

+

+ Another advantage of a custom built Linux system is security. By + compiling the entire system from source code, you are empowered + to audit everything and apply all the security patches you want. + You don't have to wait for somebody else to compile binary + packages that fix a security hole. Unless you examine the patch + and implement it yourself, you have no guarantee that the new + binary package was built correctly and adequately fixes the + problem. +

+

+ The goal of Linux From Scratch is to build a complete and usable + foundation-level system. If you do not wish to build your own + Linux system from scratch, you may nevertheless benefit from the + information in this book. +

+

+ There are too many good reasons to build your own LFS system to + list them all here. In the end, education is by far the most + important reason. As you continue your LFS experience, you will + discover the power that information and knowledge can bring. +

+
+
+
+
+

+ LFS + Target Architectures +

+
+
+
+
+

+ The primary target architectures of LFS are the AMD/Intel x86 + (32-bit) and x86_64 (64-bit) CPUs. On the other hand, the + instructions in this book are also known to work, with some + modifications, with the Power PC and ARM CPUs. To build a system + that utilizes one of these alternative CPUs, the main + prerequisite, in addition to those on the next page, is an + existing Linux system such as an earlier LFS installation, + Ubuntu, Red Hat/Fedora, SuSE, or some other distribution that + targets that architecture. (Note that a 32-bit distribution can + be installed and used as a host system on a 64-bit AMD/Intel + computer.) +

+

+ The gain from building on a 64-bit system, as compared to a + 32-bit system, is minimal. For example, in a test build of + LFS-9.1 on a Core i7-4790 CPU based system, using 4 cores, the + following statistics were measured: +

+
Architecture Build Time     Build Size
+32-bit       239.9 minutes  3.6 GB
+64-bit       233.2 minutes  4.4 GB
+

+ As you can see, on the same hardware, the 64-bit build is only 3% + faster (and 22% larger) than the 32-bit build. If you plan to use + LFS as a LAMP server, or a firewall, a 32-bit CPU may be good + enough. On the other hand, several packages in BLFS now need more + than 4 GB of RAM to be built and/or to run; if you plan to use + LFS as a desktop, the LFS authors recommend building a 64-bit + system. +

+

+ The default 64-bit build that results from LFS is a “pure” 64-bit system. + That is, it supports 64-bit executables only. Building a + “multi-lib” + system requires compiling many applications twice, once for a + 32-bit system and once for a 64-bit system. This is not directly + supported in LFS because it would interfere with the educational + objective of providing the minimal instructions needed for a + basic Linux system. Some of the LFS/BLFS editors maintain a + multilib fork of LFS, accessible at https://www.linuxfromscratch.org/~thomas/multilib/index.html. + But that's an advanced topic. +

+
+
+
+
+

+ Prerequisites +

+
+
+
+
+

+ Building an LFS system is not a simple task. It requires a + certain level of existing knowledge of Unix system administration + in order to resolve problems and correctly execute the commands + listed. In particular, as an absolute minimum, you should already + know how to use the command line (shell) to copy or move files + and directories, list directory and file contents, and change the + current directory. It is also expected that you know how to use + and install Linux software. +

+

+ Because the LFS book assumes at + least this basic level of skill, the various LFS + support forums are unlikely to provide you with much assistance + in these areas. You will find that your questions regarding such + basic knowledge will likely go unanswered (or you will simply be + referred to the LFS essential pre-reading list). +

+

+ Before building an LFS system, we urge you to read these + articles: +

+
+
    +
  • +

    + Software-Building-HOWTO https://tldp.org/HOWTO/Software-Building-HOWTO.html +

    +

    + This is a comprehensive guide to building and installing + “generic” Unix software packages under + Linux. Although it was written some time ago, it still + provides a good summary of the basic techniques used to + build and install software. +

    +
  • +
  • +

    + Beginner's Guide to Installing from Source + https://moi.vonos.net/linux/beginners-installing-from-source/ +

    +

    + This guide provides a good summary of the basic skills and + techniques needed to build software from source code. +

    +
  • +
+
+
+
+
+
+

+ LFS and + Standards +

+
+
+
+
+

+ The structure of LFS follows Linux standards as closely as + possible. The primary standards are: +

+
+
    +
  • +

    + POSIX.1-2008. +

    +
  • +
  • +

    + + Filesystem Hierarchy Standard (FHS) Version 3.0 +

    +
  • +
  • +

    + Linux + Standard Base (LSB) Version 5.0 (2015) +

    +

    + The LSB has four separate specifications: Core, Desktop, + Languages, and Imaging. Some parts of Core and Desktop + specifications are architecture specific. There are also + two trial specifications: Gtk3 and Graphics. LFS attempts + to conform to the LSB specifications for the IA32 (32-bit + x86) or AMD64 (x86_64) architectures discussed in the + previous section. +

    +
    +

    + Note +

    +

    + Many people do not agree with these requirements. The + main purpose of the LSB is to ensure that proprietary + software can be installed and run on a compliant system. + Since LFS is source based, the user has complete control + over what packages are desired; you may choose not to + install some packages that are specified by the LSB. +

    +
    +
  • +
+
+

+ While it is possible to create a complete system that will pass + the LSB certification tests “from scratch,” this can't be done without + many additional packages that are beyond the scope of the LFS + book. Installation instructions for some of these additional + packages can be found in BLFS. +

+
+

+ Packages supplied by LFS needed to + satisfy the LSB Requirements +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ LSB + Core: +

+
+

+ Bash, Bc, Binutils, Coreutils, Diffutils, File, + Findutils, Gawk, GCC, Gettext, Glibc, Grep, Gzip, M4, + Man-DB, Procps, Psmisc, Sed, Shadow, SysVinit, Tar, Util-linux, Zlib +

+
+

+ LSB + Desktop: +

+
+

+ None +

+
+

+ LSB + Languages: +

+
+

+ Perl +

+
+

+ LSB + Imaging: +

+
+

+ None +

+
+

+ LSB Gtk3 + and LSB Graphics (Trial Use): +

+
+

+ None +

+
+
+
+

+ Packages supplied by BLFS needed to + satisfy the LSB Requirements +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ LSB + Core: +

+
+

+ At, Batch (a part of At), BLFS Bash Startup Files, + Cpio, Ed, Fcrontab, LSB-Tools, NSPR, NSS, Linux-PAM, + Pax, Sendmail (or Postfix or Exim), Time +

+
+

+ LSB + Desktop: +

+
+

+ Alsa, ATK, Cairo, Desktop-file-utils, Freetype, + Fontconfig, Gdk-pixbuf, Glib2, GLU, Icon-naming-utils, + Libjpeg-turbo, Libxml2, Mesa, Pango, Xdg-utils, Xorg +

+
+

+ LSB + Languages: +

+
+

+ Libxml2, Libxslt +

+
+

+ LSB + Imaging: +

+
+

+ CUPS, Cups-filters, Ghostscript, SANE +

+
+

+ LSB Gtk3 + and LSB Graphics (Trial Use): +

+
+

+ GTK+3 +

+
+
+
+

+ Components not supplied or optionally + supplied by LFS or BLFS needed to satisfy the LSB Requirements +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ LSB + Core: +

+
+

+ install_initd, + libcrypt.so.1 (can be + provided with optional instructions for the LFS + Libxcrypt package), libncurses.so.5 (can be provided with + optional instructions for the LFS Ncurses package), + libncursesw.so.5 (but + libncursesw.so.6 is + provided by the LFS Ncurses package) +

+
+

+ LSB + Desktop: +

+
+

+ libgdk-x11-2.0.so (but + libgdk-3.so is provided + by the BLFS GTK+-3 package), libgtk-x11-2.0.so (but libgtk-3.so and libgtk-4.so are provided by the BLFS + GTK+-3 and GTK-4 packages), libpng12.so (but libpng16.so is provided by the BLFS + Libpng package), libQt*.so.4 (but libQt6*.so.6 are provided by the BLFS + Qt6 package), libtiff.so.4 (but libtiff.so.6 is provided by the BLFS + Libtiff package) +

+
+

+ LSB + Languages: +

+
+

+ /usr/bin/python (LSB + requires Python2 but LFS and BLFS only provide Python3) +

+
+

+ LSB + Imaging: +

+
+

+ None +

+
+

+ LSB Gtk3 + and LSB Graphics (Trial Use): +

+
+

+ libpng15.so (but + libpng16.so is provided + by the BLFS Libpng package) +

+
+
+
+
+
+
+

+ Rationale for Packages in + the Book +

+
+
+
+
+

+ The goal of LFS is to build a complete and usable + foundation-level system—including all the packages needed to + replicate itself—and providing a relatively minimal base from + which to customize a more complete system based on the user's + choices. This does not mean that LFS is the smallest system + possible. Several important packages are included that are not, + strictly speaking, required. The list below documents the reasons + each package in the book has been included. +

+
+
    +
  • +

    + Acl +

    +

    + This package contains utilities to administer Access + Control Lists, which are used to define fine-grained + discretionary access rights for files and directories. +

    +
  • +
  • +

    + Attr +

    +

    + This package contains programs for managing extended + attributes on file system objects. +

    +
  • +
  • +

    + Autoconf +

    +

    + This package supplies programs for producing shell scripts + that can automatically configure source code from a + developer's template. It is often needed to rebuild a + package after the build procedure has been updated. +

    +
  • +
  • +

    + Automake +

    +

    + This package contains programs for generating Make files + from a template. It is often needed to rebuild a package + after the build procedure has been updated. +

    +
  • +
  • +

    + Bash +

    +

    + This package satisfies an LSB core requirement to provide a + Bourne Shell interface to the system. It was chosen over + other shell packages because of its common usage and + extensive capabilities. +

    +
  • +
  • +

    + Bc +

    +

    + This package provides an arbitrary precision numeric + processing language. It satisfies a requirement for + building the Linux kernel. +

    +
  • +
  • +

    + Binutils +

    +

    + This package supplies a linker, an assembler, and other + tools for handling object files. The programs in this + package are needed to compile most of the packages in an + LFS system. +

    +
  • +
  • +

    + Bison +

    +

    + This package contains the GNU version of yacc (Yet Another + Compiler Compiler) needed to build several of the LFS + programs. +

    +
  • +
  • +

    + Bzip2 +

    +

    + This package contains programs for compressing and + decompressing files. It is required to decompress many LFS + packages. +

    +
  • +
  • +

    + Check +

    +

    + This package provides a test harness for other programs. +

    +
  • +
  • +

    + Coreutils +

    +

    + This package contains a number of essential programs for + viewing and manipulating files and directories. These + programs are needed for command line file management, and + are necessary for the installation procedures of every + package in LFS. +

    +
  • +
  • +

    + DejaGNU +

    +

    + This package supplies a framework for testing other + programs. +

    +
  • +
  • +

    + Diffutils +

    +

    + This package contains programs that show the differences + between files or directories. These programs can be used to + create patches, and are also used in many packages' build + procedures. +

    +
  • +
  • +

    + E2fsprogs +

    +

    + This package supplies utilities for handling the ext2, ext3 + and ext4 file systems. These are the most common and + thoroughly tested file systems that Linux supports. +

    +
  • +
  • +

    + Expat +

    +

    + This package yields a relatively small XML parsing library. + It is required by the XML::Parser Perl module. +

    +
  • +
  • +

    + Expect +

    +

    + This package contains a program for carrying out scripted + dialogues with other interactive programs. It is commonly + used for testing other packages. +

    +
  • +
  • +

    + File +

    +

    + This package contains a utility for determining the type of + a given file or files. A few packages need it in their + build scripts. +

    +
  • +
  • +

    + Findutils +

    +

    + This package provides programs to find files in a file + system. It is used in many packages' build scripts. +

    +
  • +
  • +

    + Flex +

    +

    + This package contains a utility for generating programs + that recognize patterns in text. It is the GNU version of + the lex (lexical analyzer) program. It is required to build + several LFS packages. +

    +
  • +
  • +

    + Gawk +

    +

    + This package supplies programs for manipulating text files. + It is the GNU version of awk (Aho-Weinberg-Kernighan). It + is used in many other packages' build scripts. +

    +
  • +
  • +

    + GCC +

    +

    + This is the Gnu Compiler Collection. It contains the C and + C++ compilers as well as several others not built by LFS. +

    +
  • +
  • +

    + GDBM +

    +

    + This package contains the GNU Database Manager library. It + is used by one other LFS package, Man-DB. +

    +
  • +
  • +

    + Gettext +

    +

    + This package provides utilities and libraries for the + internationalization and localization of many packages. +

    +
  • +
  • +

    + Glibc +

    +

    + This package contains the main C library. Linux programs + will not run without it. +

    +
  • +
  • +

    + GMP +

    +

    + This package supplies math libraries that provide useful + functions for arbitrary precision arithmetic. It is needed + to build GCC. +

    +
  • +
  • +

    + Gperf +

    +

    + This package produces a program that generates a perfect + hash function from a set of keys. It is required by + Udev . +

    +
  • +
  • +

    + Grep +

    +

    + This package contains programs for searching through files. + These programs are used by most packages' build scripts. +

    +
  • +
  • +

    + Groff +

    +

    + This package contributes programs for processing and + formatting text. One important function of these programs + is to format man pages. +

    +
  • +
  • +

    + GRUB +

    +

    + This is the Grand Unified Boot Loader. It is the most + flexible of several boot loaders available. +

    +
  • +
  • +

    + Gzip +

    +

    + This package contains programs for compressing and + decompressing files. It is needed to decompress many + packages in LFS. +

    +
  • +
  • +

    + Iana-etc +

    +

    + This package provides data for network services and + protocols. It is needed to enable proper networking + capabilities. +

    +
  • +
  • +

    + Inetutils +

    +

    + This package supplies programs for basic network + administration. +

    +
  • +
  • +

    + Intltool +

    +

    + This package contributes tools for extracting translatable + strings from source files. +

    +
  • +
  • +

    + IProute2 +

    +

    + This package contains programs for basic and advanced IPv4 + and IPv6 networking. It was chosen over the other common + network tools package (net-tools) for its IPv6 + capabilities. +

    +
  • +
  • +

    + Kbd +

    +

    + This package produces key-table files, keyboard utilities + for non-US keyboards, and a number of console fonts. +

    +
  • +
  • +

    + Kmod +

    +

    + This package supplies programs needed to administer Linux + kernel modules. +

    +
  • +
  • +

    + Less +

    +

    + This package contains a very nice text file viewer that + allows scrolling up or down when viewing a file. Many + packages use it for paging the output. +

    +
  • +
  • +

    + Libcap +

    +

    + This package implements the userspace interfaces to the + POSIX 1003.1e capabilities available in Linux kernels. +

    +
  • +
  • +

    + Libelf +

    +

    + The elfutils project provides libraries and tools for ELF + files and DWARF data. Most utilities in this package are + available in other packages, but the library is needed to + build the Linux kernel using the default (and most + efficient) configuration. +

    +
  • +
  • +

    + Libffi +

    +

    + This package implements a portable, high level programming + interface to various calling conventions. Some programs may + not know at the time of compilation what arguments are to + be passed to a function. For instance, an interpreter may + be told at run-time about the number and types of arguments + used to call a given function. Libffi can be used in such + programs to provide a bridge from the interpreter program + to compiled code. +

    +
  • +
  • +

    + Libpipeline +

    +

    + The Libpipeline package supplies a library for manipulating + pipelines of subprocesses in a flexible and convenient way. + It is required by the Man-DB package. +

    +
  • +
  • +

    + Libtool +

    +

    + This package contains the GNU generic library support + script. It wraps the complexity of using shared libraries + into a consistent, portable interface. It is needed by the + test suites in other LFS packages. +

    +
  • +
  • +

    + Libxcrypt +

    +

    + This package provides the libcrypt library needed by various + packages (notably, Shadow) for hashing passwords. It + replaces the obsolete libcrypt implementation in Glibc. +

    +
  • +
  • +

    + Linux Kernel +

    +

    + This package is the Operating System. It is the Linux in + the GNU/Linux environment. +

    +
  • +
  • +

    + M4 +

    +

    + This package provides a general text macro processor useful + as a build tool for other programs. +

    +
  • +
  • +

    + Make +

    +

    + This package contains a program for directing the building + of packages. It is required by almost every package in LFS. +

    +
  • +
  • +

    + Man-DB +

    +

    + This package contains programs for finding and viewing man + pages. It was chosen instead of the man package because of its superior + internationalization capabilities. It supplies the man + program. +

    +
  • +
  • +

    + Man-pages +

    +

    + This package provides the actual contents of the basic + Linux man pages. +

    +
  • +
  • +

    + Meson +

    +

    + This package provides a software tool for automating the + building of software. The main goal of Meson is to minimize + the amount of time that software developers need to spend + configuring a build system. It's required to build Systemd, + as well as many BLFS packages. +

    +
  • +
  • +

    + MPC +

    +

    + This package supplies arithmetic functions for complex + numbers. It is required by GCC. +

    +
  • +
  • +

    + MPFR +

    +

    + This package contains functions for multiple precision + arithmetic. It is required by GCC. +

    +
  • +
  • +

    + Ninja +

    +

    + This package furnishes a small build system with a focus on + speed. It is designed to have its input files generated by + a higher-level build system, and to run builds as fast as + possible. This package is required by Meson. +

    +
  • +
  • +

    + Ncurses +

    +

    + This package contains libraries for terminal-independent + handling of character screens. It is often used to provide + cursor control for a menuing system. It is needed by a + number of the packages in LFS. +

    +
  • +
  • +

    + Openssl +

    +

    + This package provides management tools and libraries + relating to cryptography. These supply cryptographic + functions to other packages, including the Linux kernel. +

    +
  • +
  • +

    + Patch +

    +

    + This package contains a program for modifying or creating + files by applying a patch file typically created by + the diff program. It is + needed by the build procedure for several LFS packages. +

    +
  • +
  • +

    + Perl +

    +

    + This package is an interpreter for the runtime language + PERL. It is needed for the installation and test suites of + several LFS packages. +

    +
  • +
  • +

    + Pkgconf +

    +

    + This package contains a program which helps to configure + compiler and linker flags for development libraries. The + program can be used as a drop-in replacement of + pkg-config, + which is needed by the building system of many packages. + It's maintained more actively and slightly faster than the + original Pkg-config package. +

    +
  • +
  • +

    + Procps-NG +

    +

    + This package contains programs for monitoring processes. + These programs are useful for system administration, and + are also used by the LFS Bootscripts. +

    +
  • +
  • +

    + Psmisc +

    +

    + This package produces programs for displaying information + about running processes. These programs are useful for + system administration. +

    +
  • +
  • +

    + Python 3 +

    +

    + This package provides an interpreted language that has a + design philosophy emphasizing code readability. +

    +
  • +
  • +

    + Readline +

    +

    + This package is a set of libraries that offer command-line + editing and history capabilities. It is used by Bash. +

    +
  • +
  • +

    + Sed +

    +

    + This package allows editing of text without opening it in a + text editor. It is also needed by many LFS packages' + configure scripts. +

    +
  • +
  • +

    + Shadow +

    +

    + This package contains programs for handling passwords + securely. +

    +
  • +
  • +

    + Sysklogd +

    +

    + This package supplies programs for logging system messages, + such as those emitted by the kernel or daemon processes + when unusual events occur. +

    +
  • +
  • +

    + SysVinit +

    +

    + This package provides the init program, the parent of all the + other processes on a running Linux system. +

    +
  • +
  • +

    + Udev +

    +

    + This package is a device manager. It dynamically controls + the ownership, permissions, names, and symbolic links of + device nodes in the /dev directory when devices are added + to or removed from the system. +

    +
  • +
  • +

    + Tar +

    +

    + This package provides archiving and extraction capabilities + of virtually all the packages used in LFS. +

    +
  • +
  • +

    + Tcl +

    +

    + This package contains the Tool Command Language used in + many test suites. +

    +
  • +
  • +

    + Texinfo +

    +

    + This package supplies programs for reading, writing, and + converting info pages. It is used in the installation + procedures of many LFS packages. +

    +
  • +
  • +

    + Util-linux +

    +

    + This package contains miscellaneous utility programs. Among + them are utilities for handling file systems, consoles, + partitions, and messages. +

    +
  • +
  • +

    + Vim +

    +

    + This package provides an editor. It was chosen because of + its compatibility with the classic vi editor and its huge + number of powerful capabilities. An editor is a very + personal choice for many users. Any other editor can be + substituted, if you wish. +

    +
  • +
  • +

    + Wheel +

    +

    + This package supplies a Python module that is the reference + implementation of the Python wheel packaging standard. +

    +
  • +
  • +

    + XML::Parser +

    +

    + This package is a Perl module that interfaces with Expat. +

    +
  • +
  • +

    + XZ Utils +

    +

    + This package contains programs for compressing and + decompressing files. It provides the highest compression + generally available and is useful for decompressing + packages in XZ or LZMA format. +

    +
  • +
  • +

    + Zlib +

    +

    + This package contains compression and decompression + routines used by some programs. +

    +
  • +
  • +

    + Zstd +

    +

    + This package supplies compression and decompression + routines used by some programs. It provides high + compression ratios and a very wide range of compression / + speed trade-offs. +

    +
  • +
+
+
+
+
+
+

+ Typography +

+
+
+
+
+

+ To make things easier to follow, there are a few typographical + conventions used throughout this book. This section contains some + examples of the typographical format found throughout Linux From + Scratch. +

+
./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 in the + explanation sections to identify which of the commands is being + referenced. +

+

+ In some cases, a logical line is extended to two or more physical + lines with a backslash at the end of the line. +

+
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \
+  --prefix=/tools --disable-nls --disable-werror
+

+ Note that the backslash must be followed by an immediate return. + Other whitespace characters like spaces or tab characters will + create incorrect results. +

+
install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'
+

+ This form of text (fixed-width text) shows screen output, usually + as the result of commands issued. If you are reading the book in + the HTML format (instead of PDF), the text should be blue. +

+

+ The fixed-width text is also used to show filenames, such as + /etc/ld.so.conf. +

+
+

+ Note +

+

+ Please configure your browser to display fixed-width text with + a good monospaced font, with which you can distinguish the + glyphs of Il1 or O0 clearly. +

+
+

+ Emphasis +

+

+ This form of text is used for several purposes in the book. Its + main purpose is to emphasize important points or items. +

+

+ https://www.linuxfromscratch.org/ +

+

+ This format is used for hyperlinks both within the LFS community + and to external pages. It includes HOWTOs, download locations, + and websites. +

+
cat > $LFS/etc/group << "EOF"
+root:x:0:
+bin:x:1:
+......
+EOF
+

+ This format is used when creating configuration files. The first + command tells the system to create the file $LFS/etc/group from whatever is typed on the + following lines until the sequence End Of File (EOF) is + encountered. Therefore, this entire section is generally typed as + seen. +

+

+ <REPLACED TEXT> +

+

+ This format is used to encapsulate text that is not to be typed + as seen or for copy-and-paste operations. +

+

+ [OPTIONAL TEXT] +

+

+ This format is used to encapsulate text that is optional. +

+

+ passwd(5) +

+

+ This format is used to refer to a specific manual (man) page. The + number inside parentheses indicates a specific section inside the + manuals. For example, passwd has two man pages. Per + LFS installation instructions, those two man pages will be + located at /usr/share/man/man1/passwd.1 and /usr/share/man/man5/passwd.5. When the book + uses passwd(5) it is + specifically referring to /usr/share/man/man5/passwd.5. man passwd will print the first + man page it finds that matches “passwd,” which will be /usr/share/man/man1/passwd.1. For this example, + you will need to run man 5 + passwd in order to read the page being specified. + Note that most man pages do not have duplicate page names in + different sections. Therefore, man + <program + name> is generally sufficient. In + the LFS book these references to man pages are also hyperlinks, + so clicking on such a reference will open the man page rendered + in HTML from Arch Linux manual pages. +

+
+
+
+
+

+ Structure +

+
+
+
+
+

+ This book is divided into the following parts. +

+
+

+ Part I - Introduction +

+

+ Part I explains a few important notes on how to proceed with + the LFS installation. This section also provides + meta-information about the book. +

+
+
+

+ Part II - Preparing for the Build +

+

+ Part II describes how to prepare for the building + process—making a partition, downloading the packages, and + compiling temporary tools. +

+
+
+

+ Part III - Building the LFS Cross Toolchain and Temporary Tools +

+

+ Part III provides instructions for building the tools needed + for constructing the final LFS system. +

+
+
+

+ Part IV - Building the LFS System +

+

+ Part IV guides the reader through the building of the LFS + system—compiling and installing all the packages one by one, + setting up the boot scripts, and installing the kernel. The + resulting Linux system is the foundation on which other + software can be built to expand the system as desired. At the + end of this book, there is an easy to use reference listing all + of the programs, libraries, and important files that have been + installed. +

+
+
+

+ Part V - Appendices +

+

+ Part V provides information about the book itself including + acronyms and terms, acknowledgments, package dependencies, a + listing of LFS boot scripts, licenses for the distribution of + the book, and a comprehensive index of packages, programs, + libraries, and scripts. +

+
+
+
+
+
+

+ Errata and Security + Advisories +

+
+
+
+
+

+ The software used to create an LFS system is constantly being + updated and enhanced. Security warnings and bug fixes may become + available after the LFS book has been released. To check whether + the package versions or instructions in this release of LFS need + any modifications—to repair security vulnerabilities or to fix + other bugs—please visit https://www.linuxfromscratch.org/lfs/errata/12.4/ + before proceeding with your build. You should note any changes + shown and apply them to the relevant sections of the book as you + build the LFS system. +

+

+ In addition, the Linux From Scratch editors maintain a list of + security vulnerabilities discovered after a book has been released. To + read the list, please visit https://www.linuxfromscratch.org/lfs/advisories/ + before proceeding with your build. You should apply the changes + suggested by the advisories to the relevant sections of the book + as you build the LFS system. And, if you will use the LFS system + as a real desktop or server system, you should continue to + consult the advisories and fix any security vulnerabilities, even + when the LFS system has been completely constructed. +

+
+
+
+
+
+

+ Part I. Introduction +

+
+
+
+
+
+
+
+

+ Chapter 1. Introduction +

+
+
+
+
+
+
+
+

+ 1.1. How + to Build an LFS System +

+
+
+
+
+

+ The LFS system will be built by using an already installed + Linux distribution (such as Debian, OpenMandriva, Fedora, or + openSUSE). This existing Linux system (the host) will be used + as a starting point to provide necessary programs, including a + compiler, linker, and shell, to build the new system. Select + the “development” option during the + distribution installation to include these tools. +

+
+

+ Note +

+

+ There are many ways to install a Linux distribution and the + defaults are usually not optimal for building an LFS system. + For suggestions on setting up a commercial distribution see: + + https://www.linuxfromscratch.org/hints/downloads/files/partitioning-for-lfs.txt. +

+
+

+ As an alternative to installing a separate distribution on your + machine, you may wish to use a LiveCD from a commercial + distribution. +

+

+ Chapter 2 + of this book describes how to create a new Linux native + partition and file system, where the new LFS system will be + compiled and installed. Chapter 3 + explains which packages and patches must be downloaded to build + an LFS system, and how to store them on the new file system. + Chapter 4 + discusses the setup of an appropriate working environment. + Please read Chapter 4 + carefully as it explains several important issues you should be + aware of before you begin to work your way through Chapter 5 + and beyond. +

+

+ Chapter 5 + explains the installation of the initial tool chain, (binutils, + gcc, and glibc) using cross-compilation techniques to isolate + the new tools from the host system. +

+

+ Chapter 6 + shows you how to cross-compile basic utilities using the just + built cross-toolchain. +

+

+ + Chapter 7 then enters a "chroot" environment, where we + use the new tools to build all the rest of the tools needed to + create the LFS system. +

+

+ This effort to isolate the new system from the host + distribution may seem excessive. A full technical explanation + as to why this is done is provided in Toolchain Technical Notes. +

+

+ In Chapter 8 + the full-blown LFS system is built. Another advantage provided + by the chroot environment is that it allows you to continue + using the host system while LFS is being built. While waiting + for package compilations to complete, you can continue using + your computer as usual. +

+

+ To finish the installation, the basic system configuration is + set up in Chapter 9, + and the kernel and boot loader are created in Chapter 10. + Chapter 11 contains + information on continuing the LFS experience beyond this book. + After the steps in this chapter have been implemented, the + computer is ready to boot into the new LFS system. +

+

+ This is the process in a nutshell. Detailed information on each + step is presented in the following chapters. Items that seem + complicated now will be clarified, and everything will fall + into place as you commence your LFS adventure. +

+
+
+
+
+

+ 1.2. What's new since the last + release +

+
+
+
+
+

+ Here is a list of the packages updated since the previous + release of LFS. +

+
+

+ Upgraded to: +

+
    +
  • +

    + Automake-1.18.1 +

    +
  • +
  • +

    + Bash-5.3 +

    +
  • +
  • +

    + Binutils-2.45 +

    +
  • +
  • +

    + Coreutils-9.7 +

    +
  • +
  • +

    + Diffutils-3.12 +

    +
  • +
  • +

    + E2fsprogs-1.47.3 +

    +
  • +
  • +

    + Expat-2.7.1 +

    +
  • +
  • +

    + Flit-Core-3.12.0 +

    +
  • +
  • +

    + Gawk-5.3.2 +

    +
  • +
  • +

    + GCC-15.2.0 +

    +
  • +
  • +

    + GDBM-1.26 +

    +
  • +
  • +

    + Gettext-0.26 +

    +
  • +
  • +

    + Glibc-2.42 +

    +
  • +
  • +

    + Gperf-3.3 +

    +
  • +
  • +

    + Grep-3.12 +

    +
  • +
  • +

    + Gzip-1.14 +

    +
  • +
  • +

    + Iana-Etc-20250807 +

    +
  • +
  • +

    + IPRoute2-6.16.0 +

    +
  • +
  • +

    + Jinja2-3.1.6 +

    +
  • +
  • +

    + Kbd-2.8.0 +

    +
  • +
  • +

    + Kmod-34.2 +

    +
  • +
  • +

    + Less-679 +

    +
  • +
  • +

    + LFS-Bootscripts-20250827 +

    +
  • +
  • +

    + Libcap-2.76 +

    +
  • +
  • +

    + Libelf from Elfutils-0.193 +

    +
  • +
  • +

    + Libffi-3.5.2 +

    +
  • +
  • +

    + Linux-6.16.1 +

    +
  • +
  • +

    + M4-1.4.20 +

    +
  • +
  • +

    + Man-DB-2.13.1 +

    +
  • +
  • +

    + Man-pages-6.15 +

    +
  • +
  • +

    + Meson-1.8.3 +

    +
  • +
  • +

    + MPFR-4.2.2 +

    +
  • +
  • +

    + Ncurses-6.5-20250809 +

    +
  • +
  • +

    + Ninja-1.13.1 +

    +
  • +
  • +

    + OpenSSL-3.5.2 +

    +
  • +
  • +

    + Patch-2.8 +

    +
  • +
  • +

    + Perl-5.42.0 +

    +
  • +
  • +

    + Pkgconf-2.5.1 +

    +
  • +
  • +

    + Python-3.13.7 +

    +
  • +
  • +

    + Readline-8.3 +

    +
  • +
  • +

    + Setuptools-80.9.0 +

    +
  • +
  • +

    + Shadow-4.18.0 +

    +
  • +
  • +

    + Sysklogd-2.7.2 +

    +
  • +
  • +

    + Systemd-257.8 +

    +
  • +
  • +

    + Tzdata-2025b +

    +
  • +
  • +

    + Util-linux-2.41.1 +

    +
  • +
  • +

    + Vim-9.1.1629 +

    +
  • +
  • +

    + Wheel-0.46.1 +

    +
  • +
  • +

    + Xz-5.8.1 +

    +
  • +
+
+
+

+ Added: +

+
    +
  • +

    + Packaging-25.0 +

    +
  • +
  • +

    + coreutils-9.7-upstream_fix-1.patch +

    +
  • +
+
+
+

+ Removed: +

+
    +
  • +

    + Check-0.15.2 +

    +
  • +
+
+
+
+
+
+

+ 1.3. Changelog +

+
+
+
+
+

+ This is version 12.4 of the Linux From Scratch book, dated + September 1st, 2025. If this book is more than six months old, + a newer and better version is probably already available. To + find out, please check one of the mirrors via https://www.linuxfromscratch.org/mirrors.html. +

+

+ Below is a list of changes made since the previous release of + the book. +

+
+

+ Changelog Entries: +

+
    +
  • +

    + 2025-09-01 +

    +
    +
      +
    • +

      + [bdubbs] - LFS-12.4 released. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-08-27 +

    +
    +
      +
    • +

      + [bdubbs] - Update network boot script corner case. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-08-15 +

    +
    +
      +
    • +

      + [bdubbs] - Add a modification to glibc from + upstream to solve an incompatibility with valgrind. + Fixes + #5778. +

      +
    • +
    • +

      + [bdubbs] - Update to iana-etc-20250807. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to vim-9.1.1829. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to ncurses-6.5-20250809. Fixes + + #5780. +

      +
    • +
    • +

      + [bdubbs] - Update to Python-3.13.7 (Security + Update). Fixes + #5779. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.16.1. Fixes + #5758. +

      +
    • +
    • +

      + [bdubbs] - Update to iproute2-6.16.0. Fixes + + #5773. +

      +
    • +
    • +

      + [bdubbs] - Update to systemd-257.8. Fixes + #5751. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-08-08 +

    +
    +
      +
    • +

      + [bdubbs] - Update to Python-3.13.6 (Security + Update). Fixes + #5776. +

      +
    • +
    • +

      + [bdubbs] - Update to openssl-3.5.2. Fixes + #5775. +

      +
    • +
    • +

      + [bdubbs] - Update to libffi-3.5.2. Fixes + #5772. +

      +
    • +
    • +

      + [bdubbs] - Update to gcc-15.2.0. Fixes + #5777. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-08-05 +

    +
    +
      +
    • +

      + [renodr] - Fixed CVE-2025-8194 in Python. Fixes + + #5774. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-08-01 +

    +
    +
      +
    • +

      + [bdubbs] - Update to meson-1.8.3. Fixes + #5771. +

      +
    • +
    • +

      + [bdubbs] - Update to gdbm-1.26. Fixes + #5770. +

      +
    • +
    • +

      + [bdubbs] - Update to binutils-2.45. Fixes + #5766. +

      +
    • +
    • +

      + [bdubbs] - Update to gettext-0.26. Fixes + #5762. +

      +
    • +
    • +

      + [bdubbs] - Update to glibc-2.42. Fixes + #5765. +

      +
    • +
    • +

      + [bdubbs] - Update to man-pages-6.15. Fixes + + #5763. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-07-15 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1552 (Security + update). Fixes + #5760. +

      +
    • +
    • +

      + [bdubbs] - Update to readline-8.3. Fixes + #5755. +

      +
    • +
    • +

      + [bdubbs] - Update to perl-5.42.0. Fixes + #5756. +

      +
    • +
    • +

      + [bdubbs] - Update to openssl-3.5.1. Fixes + #5723. +

      +
    • +
    • +

      + [bdubbs] - Update to ninja-1.13.1. Fixes + #5759. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.15.6. Fixes + #5757. +

      +
    • +
    • +

      + [bdubbs] - Update to gettext-0.25.1. Fixes + + #5753. +

      +
    • +
    • +

      + [bdubbs] - Update to e2fsprogs-1.47.3. Fixes + + #5758. +

      +
    • +
    • +

      + [bdubbs] - Update to bash-5.3. Fixes + #5754. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-07-01 +

    +
    +
      +
    • +

      + [bdubbs] - Update to iana-etc-20250618. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to vim-9.1.1497. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to util-linux-2.41.1. Fixes + + #5749. +

      +
    • +
    • +

      + [bdubbs] - Update to shadow-4.18.0. Fixes + #5750. +

      +
    • +
    • +

      + [bdubbs] - Update to pkgconf-2.5.1. Fixes + #5746. +

      +
    • +
    • +

      + [bdubbs] - Update to ninja-1.13.0. Fixes + #5745. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.15.4. Fixes + #5748. +

      +
    • +
    • +

      + [bdubbs] - Update to less-679. Fixes + #5747. +

      +
    • +
    • +

      + [bdubbs] - Update to automake-1.18.1. Fixes + + #5752. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-06-15 +

    +
    +
      +
    • +

      + [bdubbs] - Update to meson-1.8.2. Fixes + #5742. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.15.2. Fixes + #5725. +

      +
    • +
    • +

      + [bdubbs] - Update to libffi-3.5.1. Fixes + #5741. +

      +
    • +
    • +

      + [bdubbs] - Update to iproute2-6.15.0. Fixes + + #5732. +

      +
    • +
    • +

      + [bdubbs] - Update to Python-3.13.5. Fixes + #5743. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-06-04 +

    +
    +
      +
    • +

      + [bdubbs] - Update to ncurses-6.5-20250531. Fixes + + #5737. +

      +
    • +
    • +

      + [bdubbs] - Update to readline-8.3-rc2. Fixes + + #5738. +

      +
    • +
    • +

      + [bdubbs] - Update to bash-5.3-rc2. Fixes + #5738. +

      +
    • +
    • +

      + [bdubbs] - Update to Python-3.13.4. Fixes + #6739. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-06-01 +

    +
    +
      +
    • +

      + [bdubbs] - Update to iana-etc-20250519. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to vim-9.1.1418. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to kbd-2.8.0. Fixes + #5736. +

      +
    • +
    • +

      + [bdubbs] - Update to systemd-257.6. Fixes + #5674. +

      +
    • +
    • +

      + [bdubbs] - Update to setuptools-80.9.0. Fixes + + #5728. +

      +
    • +
    • +

      + [bdubbs] - Update to meson-1.8.1. Fixes + #5731. +

      +
    • +
    • +

      + [bdubbs] - Update to automake-1.18. Fixes + #5734. +

      +
    • +
    • +

      + [bdubbs] - Update build instructions to accommodate + gcc-15 for bc, expect, ncurses, and gmp. +

      +
    • +
    • +

      + [bdubbs] - Update to gcc-15.1.0. Fixes + #5707. +

      +
    • +
    • +

      + [bdubbs] - Update to less-678. Fixes + #5724. +

      +
    • +
    • +

      + [bdubbs] - Update to readline-8.3-rc1. Fixes + + #5726. +

      +
    • +
    • +

      + [bdubbs] - Update to bash-5.3-rc1. Fixes + #5714. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-05-15 +

    +
    +
      +
    • +

      + [bdubbs] - Update to setuptools-80.7.1. Fixes + + #5715. +

      +
    • +
    • +

      + [bdubbs] - Update to man-pages-6.14. Fixes + + #5720. +

      +
    • +
    • +

      + [bdubbs] - Update to man-db-2.13.1. Fixes + #5719. +

      +
    • +
    • +

      + [bdubbs] - Update to m4-1.4.20. Fixes + #5722. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.14.6. Fixes + #5717. +

      +
    • +
    • +

      + [bdubbs] - Update to gettext-0.25. Fixes + #5718. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-05-01 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1353. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to setuptools-80.0.1. Fixes + + #5710. +

      +
    • +
    • +

      + [bdubbs] - Update to packaging-25.0. Fixes + + #5706. +

      +
    • +
    • +

      + [bdubbs] - Update to meson-1.8.0. Fixes + #5713. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.14.4. Fixes + #5709. +

      +
    • +
    • +

      + [bdubbs] - Update to iana-etc-20250407. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to gperf-3.3. Fixes + #5708. +

      +
    • +
    • +

      + [bdubbs] - Update to elfutils-0.193. Fixes + + #5711. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-04-15 +

    +
    +
      +
    • +

      + [bdubbs] - Update to libcap-2.76. Fixes + #5704. +

      +
    • +
    • +

      + [bdubbs] - Update to perl-5.40.2 (Security update). + Fixes + #5703. +

      +
    • +
    • +

      + [bdubbs] - Add packaging-24.2 (Python module). + Needed for wheel. +

      +
    • +
    • +

      + [bdubbs] - Update to xz-5.8.1. Fixes + #5694. +

      +
    • +
    • +

      + [bdubbs] - Update to wheel-0.46.1 (Python Module). + Fixes + #5693. +

      +
    • +
    • +

      + [bdubbs] - Update to sysklogd-2.7.2. Fixes + + #5690. +

      +
    • +
    • +

      + [bdubbs] - Update to Python3-3.13.3. Fixes + + #5697. +

      +
    • +
    • +

      + [bdubbs] - Update to openssl-3.5.0. Fixes + #5701. +

      +
    • +
    • +

      + [bdubbs] - Update to meson-1.7.2. Fixes + #5691. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.14.2. Fixes + #5680. +

      +
    • +
    • +

      + [bdubbs] - Update to libffi-3.4.8. Fixes + #5700. +

      +
    • +
    • +

      + [bdubbs] - Update to iproute2-6.14.0. Fixes + + #5682. +

      +
    • +
    • +

      + [bdubbs] - Update to gzip-1.14. Fixes + #5699. +

      +
    • +
    • +

      + [bdubbs] - Update to grep-3.12. Fixes + #5702. +

      +
    • +
    • +

      + [bdubbs] - Update to gperf-3.2.1. Fixes + #5695. +

      +
    • +
    • +

      + [bdubbs] - Update to gawk-5.3.2. Fixes + #5692. +

      +
    • +
    • +

      + [bdubbs] - Update to diffutils-3.12. Fixes + + #5696. +

      +
    • +
    • +

      + [bdubbs] - Update to coreutils-9.7. Fixes + #5698. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-04-01 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1263. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to iana-etc-20250328. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to xz-5.8.0. Fixes + #5684. +

      +
    • +
    • +

      + [bdubbs] - Update to util-linux-2.41. Fixes + + #5648. +

      +
    • +
    • +

      + [bdubbs] - Update to tzdata-2025b. Fixes + #5681. +

      +
    • +
    • +

      + [bdubbs] - Update to shadow-4.17.4. Fixes + #5678. +

      +
    • +
    • +

      + [bdubbs] - Update to setuptools-78.1.0. Fixes + + #5676. +

      +
    • +
    • +

      + [bdubbs] - Update to patch-2.8. Fixes + #5689. +

      +
    • +
    • +

      + [bdubbs] - Update to mpfr-4.2.2. Fixes + #5677. +

      +
    • +
    • +

      + [bdubbs] - Update to kmod-34.2. Fixes + #5688. +

      +
    • +
    • +

      + [bdubbs] - Update to gdbm-1.25. Fixes + #5679. +

      +
    • +
    • +

      + [bdubbs] - Update to flit_core-3.12.0. Fixes + + #5683. +

      +
    • +
    • +

      + [bdubbs] - Update to expat-2.7.1. Fixes + #5685. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-03-15 +

    +
    +
      +
    • +

      + [bdubbs] - Update to vim-9.1.1202. Addresses + + #4500. +

      +
    • +
    • +

      + [bdubbs] - Update to iana-etc-20250304. Addresses + + #5006. +

      +
    • +
    • +

      + [bdubbs] - Update to sysklogd-2.7.1. Fixes + + #5668. +

      +
    • +
    • +

      + [bdubbs] - Update to setuptools-76.0.0. Fixes + + #5665. +

      +
    • +
    • +

      + [bdubbs] - Update to pkgconf-2.4.3. Fixes + #5672. +

      +
    • +
    • +

      + [bdubbs] - Update to man-pages-6.13. Fixes + + #5673. +

      +
    • +
    • +

      + [bdubbs] - Update to linux-6.13.7. Fixes + #5664. +

      +
    • +
    • +

      + [bdubbs] - Update to libcap-2.75. Fixes + #5667. +

      +
    • +
    • +

      + [bdubbs] - Update to kmod-34.1. Fixes + #5671. +

      +
    • +
    • +

      + [bdubbs] - Update to jinja2-3.1.6. Fixes + #5670. +

      +
    • +
    • +

      + [bdubbs] - Update to expat-2.7.0. Fixes + #5675. +

      +
    • +
    +
    +
  • +
  • +

    + 2025-03-05 +

    +
    +
      +
    • +

      + [bdubbs] - LFS-12.3 released. +

      +
    • +
    +
    +
  • +
+
+
+
+
+
+

+ 1.4. Resources +

+
+
+
+
+
+

+ 1.4.1. FAQ +

+

+ If during the building of the LFS system you encounter any + errors, have any questions, or think there is a typo in the + book, please start by consulting the list of Frequently Asked + Questions (FAQ), located at https://www.linuxfromscratch.org/faq/. +

+
+
+

+ 1.4.2. Mailing Lists +

+

+ The linuxfromscratch.org + server hosts a number of mailing lists used for the + development of the LFS project. These lists include the main + development and support lists, among others. If you cannot + find an answer to your problem on the FAQ page, the next step + would be to search the mailing lists at https://www.linuxfromscratch.org/search.html. +

+

+ For information on the different lists, how to subscribe, + archive locations, and additional information, visit + https://www.linuxfromscratch.org/mail.html. +

+
+
+

+ 1.4.3. IRC +

+

+ Several members of the LFS community offer assistance via + Internet Relay Chat (IRC). Before using this support, please + make sure your question is not already answered in the LFS + FAQ or the mailing list archives. You can find the IRC + network at irc.libera.chat. + The support channel is named #lfs-support. +

+
+
+

+ 1.4.4. + Mirror Sites +

+

+ The LFS project has a number of world-wide mirrors to make + accessing the website and downloading the required packages + more convenient. Please visit the LFS website at https://www.linuxfromscratch.org/mirrors.html + for a list of current mirrors. +

+
+
+

+ 1.4.5. Contact Information +

+

+ Please direct all your questions and comments to one of the + LFS mailing lists (see above). +

+
+
+
+
+
+

+ 1.5. Help +

+
+
+
+
+
+

+ Note +

+

+ In case you've hit an issue building one package with the LFS + instruction, we strongly discourage posting the issue + directly onto the upstream support channel before discussing + via a LFS support channel listed in Section 1.4, “Resources.” + Doing so is often quite inefficient because the upstream + maintainers are rarely familiar with LFS building procedure. + Even if you've really hit an upstream issue, the LFS + community can still help to isolate the information wanted by + the upstream maintainers and make a proper report. +

+

+ If you must ask a question directly via an upstream support + channel, you shall at least note that many upstream projects + have the support channels separated from the bug tracker. The + “bug” + reports for asking questions are considered invalid and may + annoy upstream developers for these projects. +

+
+

+ If an issue or a question is encountered while working through + this book, please check the FAQ page at https://www.linuxfromscratch.org/faq/#generalfaq. + Questions are often already answered there. If your question is + not answered on that page, try to find the source of the + problem. The following hint will give you some guidance for + troubleshooting: + https://www.linuxfromscratch.org/hints/downloads/files/errors.txt. +

+

+ If you cannot find your problem listed in the FAQ, search the + mailing lists at https://www.linuxfromscratch.org/search.html. +

+

+ We also have a wonderful LFS community that is willing to offer + assistance through the mailing lists and IRC (see the Section 1.4, “Resources” section + of this book). However, we get several support questions every + day, and many of them could have been easily answered by going + to the FAQ or by searching the mailing lists first. So, for us + to offer the best assistance possible, you should first do some + research on your own. That allows us to focus on the more + unusual support needs. If your searches do not produce a + solution, please include all the relevant information + (mentioned below) in your request for help. +

+
+

+ 1.5.1. Things to Mention +

+

+ Apart from a brief explanation of the problem being + experienced, any request for help should include these + essential things: +

+
+
    +
  • +

    + The version of the book being used (in this case 12.4) +

    +
  • +
  • +

    + The host distribution and version being used to create + LFS +

    +
  • +
  • +

    + The output from the Host System Requirements script +

    +
  • +
  • +

    + The package or section the problem was encountered in +

    +
  • +
  • +

    + The exact error message, or a clear description of the + problem +

    +
  • +
  • +

    + Note whether you have deviated from the book at all +

    +
  • +
+
+
+

+ Note +

+

+ Deviating from this book does not mean that we will not help + you. After all, LFS is about personal preference. Being + up-front about any changes to the established procedure + helps us evaluate and determine possible causes of your + problem. +

+
+
+
+

+ 1.5.2. Configure Script Problems +

+

+ If something goes wrong while running the configure script, review + the config.log file. This file + may contain errors encountered during configure which were not + printed to the screen. Include the relevant lines if you need to ask + for help. +

+
+
+

+ 1.5.3. Compilation Problems +

+

+ Both the screen output and the contents of various files are + useful in determining the cause of compilation problems. The + screen output from the configure script and the + make run can be + helpful. It is not necessary to include the entire output, + but do include all of the relevant information. Here is an + example of the type of information to include from the + make screen + output. +

+
gcc -D ALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
+-D LOCALEDIR=\"/mnt/lfs/usr/share/locale\"
+-D LIBDIR=\"/mnt/lfs/usr/lib\"
+-D INCLUDEDIR=\"/mnt/lfs/usr/include\" -D HAVE_CONFIG_H -I. -I.
+-g -O2 -c getopt1.c
+gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o
+expand.o file.o function.o getopt.o implicit.o job.o main.o
+misc.o read.o remake.o rule.o signame.o variable.o vpath.o
+default.o remote-stub.o version.o opt1.o
+-lutil job.o: In function `load_too_high':
+/lfs/tmp/make-3.79.1/job.c:1565: undefined reference
+to `getloadavg'
+collect2: ld returned 1 exit status
+make[2]: *** [make] Error 1
+make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
+make[1]: *** [all-recursive] Error 1
+make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
+make: *** [all-recursive-am] Error 2
+

+ In this case, many people would just include the bottom + section: +

+
make [2]: *** [make] Error 1
+

+ This is not enough information to diagnose the problem, + because it only notes that something went wrong, not + what went wrong. The + entire section, as in the example above, is what should be + saved because it includes the command that was executed and + all the associated error messages. +

+

+ An excellent article about asking for help on the Internet is + available online at http://catb.org/~esr/faqs/smart-questions.html. + Read this document, and follow the hints. Doing so will + increase the likelihood of getting the help you need. +

+
+
+
+
+
+
+
+

+ Part II. Preparing for + the Build +

+
+
+
+
+
+
+
+

+ Chapter 2. Preparing the + Host System +

+
+
+
+
+
+
+
+

+ 2.1. Introduction +

+
+
+
+
+

+ In this chapter, the host tools needed for building LFS are + checked and, if necessary, installed. Then a partition which + will host the LFS system is prepared. We will create the + partition itself, create a file system on it, and mount it. +

+
+
+
+
+

+ 2.2. Host System + Requirements +

+
+
+
+
+
+

+ 2.2.1. Hardware +

+

+ The LFS editors recommend that the system CPU have at least + four cores and that the system have at least 8 GB of memory. + Older systems that do not meet these requirements will still + work, but the time to build packages will be significantly + longer than documented. +

+
+
+

+ 2.2.2. Software +

+

+ Your host system should have the following software with the + minimum versions indicated. This should not be an issue for + most modern Linux distributions. Also note that many + distributions will place software headers into separate + packages, often in the form of <package-name>-devel + or <package-name>-dev. + Be sure to install those if your distribution provides them. +

+

+ Earlier versions of the listed software packages may work, + but have not been tested. +

+
+
    +
  • +

    + Bash-3.2 + (/bin/sh should be a symbolic or hard link to bash) +

    +
  • +
  • +

    + Binutils-2.13.1 + (Versions greater than 2.45 are not recommended as they + have not been tested) +

    +
  • +
  • +

    + Bison-2.7 + (/usr/bin/yacc should be a link to bison or a small + script that executes bison) +

    +
  • +
  • +

    + Coreutils-8.1 +

    +
  • +
  • +

    + Diffutils-2.8.1 +

    +
  • +
  • +

    + Findutils-4.2.31 +

    +
  • +
  • +

    + Gawk-4.0.1 + (/usr/bin/awk should be a link to gawk) +

    +
  • +
  • +

    + GCC-5.4 + including the C++ compiler, g++ (Versions greater + than 15.2.0 are not recommended as they have not been + tested). C and C++ standard libraries (with headers) + must also be present so the C++ compiler can build + hosted programs +

    +
  • +
  • +

    + Grep-2.5.1a +

    +
  • +
  • +

    + Gzip-1.3.12 +

    +
  • +
  • +

    + Linux + Kernel-5.4 +

    +

    + The reason for the kernel version requirement is that + we specify that version when building glibc in Chapter 5 + and + Chapter 8, so the workarounds for older + kernels are not enabled and the compiled glibc is slightly faster and + smaller. As at Dec 2024, 5.4 is the oldest kernel + release still supported by the kernel developers. Some + kernel releases older than 5.4 may be still supported + by third-party teams, but they are not considered + official upstream kernel releases; read https://kernel.org/category/releases.html + for the details. +

    +

    + If the host kernel is earlier than 5.4 you will need to + replace the kernel with a more up-to-date version. + There are two ways you can go about this. First, see if + your Linux vendor provides a 5.4 or later kernel + package. If so, you may wish to install it. If your + vendor doesn't offer an acceptable kernel package, or + you would prefer not to install it, you can compile a + kernel yourself. Instructions for compiling the kernel + and configuring the boot loader (assuming the host uses + GRUB) are located in Chapter 10. +

    +

    + We require the host kernel to support UNIX 98 pseudo + terminal (PTY). It should be enabled on all desktop or + server distros shipping Linux 5.4 or a newer kernel. If + you are building a custom host kernel, ensure + CONFIG_UNIX98_PTYS is set + to y in the kernel + configuration. +

    +
  • +
  • +

    + M4-1.4.10 +

    +
  • +
  • +

    + Make-4.0 +

    +
  • +
  • +

    + Patch-2.5.4 +

    +
  • +
  • +

    + Perl-5.8.8 +

    +
  • +
  • +

    + Python-3.4 +

    +
  • +
  • +

    + Sed-4.1.5 +

    +
  • +
  • +

    + Tar-1.22 +

    +
  • +
  • +

    + Texinfo-5.0 +

    +
  • +
  • +

    + Xz-5.0.0 +

    +
  • +
+
+
+

+ Important +

+

+ Note that the symlinks mentioned above are required to + build an LFS system using the instructions contained within + this book. Symlinks that point to other software (such as + dash, mawk, etc.) may work, but are not tested or supported + by the LFS development team, and may require either + deviation from the instructions or additional patches to + some packages. +

+
+

+ +

+

+ To see whether your host system has all the appropriate + versions, and the ability to compile programs, run the + following commands: +

+
cat > version-check.sh << "EOF"
+#!/bin/bash
+# A script to list version numbers of critical development tools
+
+# If you have tools installed in other directories, adjust PATH here AND
+# in ~lfs/.bashrc (section 4.4) as well.
+
+LC_ALL=C 
+PATH=/usr/bin:/bin
+
+bail() { echo "FATAL: $1"; exit 1; }
+grep --version > /dev/null 2> /dev/null || bail "grep does not work"
+sed '' /dev/null || bail "sed does not work"
+sort   /dev/null || bail "sort does not work"
+
+ver_check()
+{
+   if ! type -p $2 &>/dev/null
+   then 
+     echo "ERROR: Cannot find $2 ($1)"; return 1; 
+   fi
+   v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
+   if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null
+   then 
+     printf "OK:    %-9s %-6s >= $3\n" "$1" "$v"; return 0;
+   else 
+     printf "ERROR: %-9s is TOO OLD ($3 or later required)\n" "$1"; 
+     return 1; 
+   fi
+}
+
+ver_kernel()
+{
+   kver=$(uname -r | grep -E -o '^[0-9\.]+')
+   if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null
+   then 
+     printf "OK:    Linux Kernel $kver >= $1\n"; return 0;
+   else 
+     printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver"; 
+     return 1; 
+   fi
+}
+
+# Coreutils first because --version-sort needs Coreutils >= 7.0
+ver_check Coreutils      sort     8.1 || bail "Coreutils too old, stop"
+ver_check Bash           bash     3.2
+ver_check Binutils       ld       2.13.1
+ver_check Bison          bison    2.7
+ver_check Diffutils      diff     2.8.1
+ver_check Findutils      find     4.2.31
+ver_check Gawk           gawk     4.0.1
+ver_check GCC            gcc      5.4
+ver_check "GCC (C++)"    g++      5.4
+ver_check Grep           grep     2.5.1a
+ver_check Gzip           gzip     1.3.12
+ver_check M4             m4       1.4.10
+ver_check Make           make     4.0
+ver_check Patch          patch    2.5.4
+ver_check Perl           perl     5.8.8
+ver_check Python         python3  3.4
+ver_check Sed            sed      4.1.5
+ver_check Tar            tar      1.22
+ver_check Texinfo        texi2any 5.0
+ver_check Xz             xz       5.0.0
+ver_kernel 5.4
+
+if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
+then echo "OK:    Linux Kernel supports UNIX 98 PTY";
+else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi
+
+alias_check() {
+   if $1 --version 2>&1 | grep -qi $2
+   then printf "OK:    %-4s is $2\n" "$1";
+   else printf "ERROR: %-4s is NOT $2\n" "$1"; fi
+}
+echo "Aliases:"
+alias_check awk GNU
+alias_check yacc Bison
+alias_check sh Bash
+
+echo "Compiler check:"
+if printf "int main(){}" | g++ -x c++ -
+then echo "OK:    g++ works";
+else echo "ERROR: g++ does NOT work"; fi
+rm -f a.out
+
+if [ "$(nproc)" = "" ]; then
+   echo "ERROR: nproc is not available or it produces empty output"
+else
+   echo "OK: nproc reports $(nproc) logical cores are available"
+fi
+EOF
+
+bash version-check.sh
+
+
+
+
+
+

+ 2.3. Building LFS in + Stages +

+
+
+
+
+

+ LFS is designed to be built in one session. That is, the + instructions assume that the system will not be shut down + during the process. This does not mean that the system has to + be built in one sitting. The issue is that certain procedures + must be repeated after a reboot when resuming LFS at different + points. +

+
+

+ 2.3.1. Chapters 1–4 +

+

+ These chapters run commands on the host system. When + restarting, be certain of one thing: +

+
+
    +
  • +

    + Procedures performed as the root user after Section 2.4 must + have the LFS environment variable set FOR THE ROOT USER. +

    +
  • +
+
+
+
+

+ 2.3.2. Chapters 5–6 +

+
+
    +
  • +

    + The /mnt/lfs partition must be mounted. +

    +
  • +
  • +

    + These two chapters must be done as user + lfs. A su - lfs command must + be issued before performing any task in these chapters. + If you don't do that, you are at risk of installing + packages to the host, and potentially rendering it + unusable. +

    +
  • +
  • +

    + The procedures in General Compilation + Instructions are critical. If there is any doubt a + package has been installed correctly, ensure the + previously expanded tarball has been removed, then + re-extract the package, and complete all the + instructions in that section. +

    +
  • +
+
+
+
+

+ 2.3.3. Chapters 7–10 +

+
+
    +
  • +

    + The /mnt/lfs partition must be mounted. +

    +
  • +
  • +

    + A few operations, from “Preparing Virtual Kernel + File Systems” to “Entering the Chroot + Environment,” must be done as the + root user, with the LFS + environment variable set for the root user. +

    +
  • +
  • +

    + When entering chroot, the LFS environment variable must + be set for root. The + LFS variable is not used after the chroot environment + has been entered. +

    +
  • +
  • +

    + The virtual file systems must be mounted. This can be + done before or after entering chroot by changing to a + host virtual terminal and, as root, running the commands in + Section 7.3.1, + “Mounting and Populating /dev” and Section 7.3.2, + “Mounting Virtual Kernel File Systems.” +

    +
  • +
+
+
+
+
+
+
+

+ 2.4. Creating + a New Partition +

+
+
+
+
+

+ Like most other operating systems, LFS is usually installed on + a dedicated partition. The recommended approach to building an + LFS system is to use an available empty partition or, if you + have enough unpartitioned space, to create one. +

+

+ A minimal system requires a partition of around 10 gigabytes + (GB). This is enough to store all the source tarballs and + compile the packages. However, if the LFS system is intended to + be the primary Linux system, additional software will probably + be installed which will require additional space. A 30 GB + partition is a reasonable size to provide for growth. The LFS + system itself will not take up this much room. A large portion + of this requirement is to provide sufficient free temporary + storage as well as for adding additional capabilities after LFS + is complete. Additionally, compiling packages can require a lot + of disk space which will be reclaimed after the package is + installed. +

+

+ Because there is not always enough Random Access Memory (RAM) + available for compilation processes, it is a good idea to use a + small disk partition as swap + space. This is used by the kernel to store seldom-used data and + leave more memory available for active processes. The + swap partition for an LFS + system can be the same as the one used by the host system, in + which case it is not necessary to create another one. +

+

+ Start a disk partitioning program such as cfdisk or fdisk with a command line + option naming the hard disk on which the new partition will be + created—for example /dev/sda for + the primary disk drive. Create a Linux native partition and a + swap partition, if needed. + Please refer to cfdisk(8) or + fdisk(8) if you do + not yet know how to use the programs. +

+
+

+ Note +

+

+ For experienced users, other partitioning schemes are + possible. The new LFS system can be on a software + RAID array or an + LVM logical volume. However, some of these options + require an + initramfs, which is an advanced topic. These partitioning + methodologies are not recommended for first time LFS users. +

+
+

+ Remember the designation of the new partition (e.g., + sda5). This book will refer to + this as the LFS partition. Also remember the designation of the + swap partition. These names + will be needed later for the /etc/fstab file. +

+
+

+ 2.4.1. Other Partition Issues +

+

+ Requests for advice on system partitioning are often posted + on the LFS mailing lists. This is a highly subjective topic. + The default for most distributions is to use the entire drive + with the exception of one small swap partition. This is not + optimal for LFS for several reasons. It reduces flexibility, + makes sharing of data across multiple distributions or LFS + builds more difficult, makes backups more time consuming, and + can waste disk space through inefficient allocation of file + system structures. +

+
+
+
+
+

+ 2.4.1.1. The Root + Partition +

+
+
+
+

+ A root LFS partition (not to be confused with the + /root directory) of twenty + gigabytes is a good compromise for most systems. It + provides enough space to build LFS and most of BLFS, but is + small enough so that multiple partitions can be easily + created for experimentation. +

+
+
+
+
+
+

+ 2.4.1.2. The Swap + Partition +

+
+
+
+

+ Most distributions automatically create a swap partition. + Generally the recommended size of the swap partition is + about twice the amount of physical RAM, however this is + rarely needed. If disk space is limited, hold the swap + partition to two gigabytes and monitor the amount of disk + swapping. +

+

+ If you want to use the hibernation feature + (suspend-to-disk) of Linux, it writes out the contents of + RAM to the swap partition before turning off the machine. + In this case the size of the swap partition should be at + least as large as the system's installed RAM. +

+

+ Swapping is never good. For mechanical hard drives you can + generally tell if a system is swapping by just listening to + disk activity and observing how the system reacts to + commands. With an SSD you will not be able to hear + swapping, but you can tell how much swap space is being + used by running the top or free programs. Use of an + SSD for a swap partition should be avoided if possible. The + first reaction to swapping should be to check for an + unreasonable command such as trying to edit a five gigabyte + file. If swapping becomes a normal occurrence, the best + solution is to purchase more RAM for your system. +

+
+
+
+
+
+

+ 2.4.1.3. The Grub Bios + Partition +

+
+
+
+

+ If the boot disk has + been partitioned with a GUID Partition Table (GPT), then a + small, typically 1 MB, partition must be created if it does + not already exist. This partition is not formatted, but + must be available for GRUB to use during installation of + the boot loader. This partition will normally be labeled + 'BIOS Boot' if using fdisk or have a code of + EF02 if using the + gdisk + command. +

+
+

+ Note +

+

+ The Grub Bios partition must be on the drive that the + BIOS uses to boot the system. This is not necessarily the + drive that holds the LFS root partition. The disks on a + system may use different partition table types. The + necessity of the Grub Bios partition depends only on the + partition table type of the boot disk. +

+
+
+
+
+
+
+

+ 2.4.1.4. Convenience + Partitions +

+
+
+
+

+ There are several other partitions that are not required, + but should be considered when designing a disk layout. The + following list is not comprehensive, but is meant as a + guide. +

+
+
    +
  • +

    + /boot – Highly recommended. Use this partition to + store kernels and other booting information. To + minimize potential boot problems with larger disks, + make this the first physical partition on your first + disk drive. A partition size of 200 megabytes is + adequate. +

    +
  • +
  • +

    + /boot/efi – The EFI System Partition, which is needed + for booting the system with UEFI. Read + the BLFS page for details. +

    +
  • +
  • +

    + /home – Highly recommended. Share your home directory + and user customization across multiple distributions + or LFS builds. The size is generally fairly large and + depends on available disk space. +

    +
  • +
  • +

    + /usr – In LFS, /bin, + /lib, and /sbin are symlinks to their + counterparts in /usr. + So /usr contains all + the binaries needed for the system to run. For LFS a + separate partition for /usr is normally not needed. If you + create it anyway, you should make a partition large + enough to fit all the programs and libraries in the + system. The root partition can be very small (maybe + just one gigabyte) in this configuration, so it's + suitable for a thin client or diskless workstation + (where /usr is mounted + from a remote server). However, you should be aware + that an initramfs (not covered by LFS) will be needed + to boot a system with a separate /usr partition. +

    +
  • +
  • +

    + /opt – This directory is most useful for BLFS, where + multiple large packages like KDE or Texlive can be + installed without embedding the files in the /usr + hierarchy. If used, 5 to 10 gigabytes is generally + adequate. +

    +
  • +
  • +

    + /tmp – A separate /tmp partition is rare, but useful + if configuring a thin client. This partition, if + used, will usually not need to exceed a couple of + gigabytes. If you have enough RAM, you can mount a + tmpfs on /tmp to make + access to temporary files faster. +

    +
  • +
  • +

    + /usr/src – This partition is very useful for + providing a location to store BLFS source files and + share them across LFS builds. It can also be used as + a location for building BLFS packages. A reasonably + large partition of 30-50 gigabytes provides plenty of + room. +

    +
  • +
+
+

+ Any separate partition that you want automatically mounted + when the system starts must be specified in the + /etc/fstab file. Details + about how to specify partitions will be discussed in + Section 10.2, + “Creating the /etc/fstab File”. +

+
+
+
+
+
+
+

+ 2.5. Creating + a File System on the Partition +

+
+
+
+
+

+ A partition is just a range of sectors on a disk drive, + delimited by boundaries set in a partition table. Before the + operating system can use a partition to store any files, the + partition must be formatted to contain a file system, typically + consisting of a label, directory blocks, data blocks, and an + indexing scheme to locate a particular file on demand. The file + system also helps the OS keep track of free space on the + partition, reserve the needed sectors when a new file is + created or an existing file is extended, and recycle the free + data segments created when files are deleted. It may also + provide support for data redundancy, and for error recovery. +

+

+ LFS can use any file system recognized by the Linux kernel, but + the most common types are ext3 and ext4. The choice of the + right file system can be complex; it depends on the + characteristics of the files and the size of the partition. For + example: +

+
+
+
+ ext2 +
+
+

+ is suitable for small partitions that are updated + infrequently such as /boot. +

+
+
+ ext3 +
+
+

+ is an upgrade to ext2 that includes a journal to help + recover the partition's status in the case of an unclean + shutdown. It is commonly used as a general purpose file + system. +

+
+
+ ext4 +
+
+

+ is the latest version of the ext family of file systems. + It provides several new capabilities including + nano-second timestamps, creation and use of very large + files (up to 16 TB), and speed improvements. +

+
+
+
+

+ Other file systems, including FAT32, NTFS, JFS, and XFS are + useful for specialized purposes. More information about these + file systems, and many others, can be found at https://en.wikipedia.org/wiki/Comparison_of_file_systems. +

+

+ LFS assumes that the root file system (/) is of type ext4. To + create an ext4 file system on + the LFS partition, issue the following command: +

+
mkfs -v -t ext4 /dev/<xxx>
+

+ Replace <xxx> + with the name of the LFS partition. +

+

+ If you are using an existing swap partition, there is no need to format + it. If a new swap partition was + created, it will need to be initialized with this command: +

+
mkswap /dev/<yyy>
+

+ Replace <yyy> + with the name of the swap + partition. +

+
+
+
+
+

+ 2.6. Setting the $LFS + Variable and the Umask +

+
+
+
+
+

+ Throughout this book, the environment variable LFS will be used several times. You should + ensure that this variable is always defined throughout the LFS + build process. It should be set to the name of the directory + where you will be building your LFS system - we will use + /mnt/lfs as an example, but you + may choose any directory name you want. If you are building LFS + on a separate partition, this directory will be the mount point + for the partition. Choose a directory location and set the + variable with the following command: +

+
export LFS=/mnt/lfs
+

+ Having this variable set is beneficial in that commands such as + mkdir -v + $LFS/tools can be typed literally. The shell + will automatically replace “$LFS” with “/mnt/lfs” (or + whatever value the variable was set to) when it processes the + command line. +

+

+ Now set the file mode creation mask (umask) to 022 in case the host distro uses a different + default: +

+
umask 022
+

+ Setting the umask to 022 ensures that newly created files and + directories are only writable by their owner, but are readable + and searchable (only for directories) by anyone (assuming + default modes are used by the open(2) system call, + new files will end up with permission mode 644 and directories + with mode 755). An overly-permissive default can leave security + holes in the LFS system, and an overly-restrictive default can + cause strange issues building or using the LFS system. +

+
+

+ Caution +

+

+ Do not forget to check that LFS is + set and the umask is set to 022 + whenever you leave and reenter the current working + environment (such as when doing a su to root or another user). Check that the + LFS variable is set up properly + with: +

+
echo $LFS
+

+ Make sure the output shows the path to your LFS system's + build location, which is /mnt/lfs if the provided example was + followed. +

+

+ Check that the umask is set up properly with: +

+
umask
+

+ The output may be 0022 or + 022 (the number of + leading zeros depends on the host distro). +

+

+ If any output of these two commands is incorrect, use the + command given earlier on this page to set $LFS to the correct directory name and set + umask to 022. +

+
+
+

+ Note +

+

+ One way to ensure that the LFS + variable and the umask are always set properly is to edit the + .bash_profile file in both your + personal home directory and in /root/.bash_profile and enter the + export and + umask commands + above. In addition, the shell specified in the /etc/passwd file for all users that need + the LFS variable must be bash to + ensure that the .bash_profile + file is incorporated as a part of the login process. +

+

+ Another consideration is the method that is used to log into + the host system. If logging in through a graphical display + manager, the user's .bash_profile is not normally used when a + virtual terminal is started. In this case, add the commands + to the .bashrc file for the + user and root. In addition, + some distributions use an "if" test, and do not run the + remaining .bashrc instructions + for a non-interactive bash invocation. Be sure to place the + commands ahead of the test for non-interactive use. +

+
+
+
+
+
+

+ 2.7. Mounting the New + Partition +

+
+
+
+
+

+ Now that a file system has been created, the partition must be + mounted so the host system can access it. This book assumes + that the file system is mounted at the directory specified by + the LFS environment variable + described in the previous section. +

+

+ Strictly speaking, one cannot “mount a partition.” One mounts the + file system embedded in + that partition. But since a single partition can't contain more + than one file system, people often speak of the partition and + the associated file system as if they were one and the same. +

+

+ Create the mount point and mount the LFS file system with these + commands: +

+
mkdir -pv $LFS
+mount -v -t ext4 /dev/<xxx> $LFS
+

+ Replace <xxx> + with the name of the LFS partition. +

+

+ If you are using multiple partitions for LFS (e.g., one for + / and another for /home), mount them like this: +

+
mkdir -pv $LFS
+mount -v -t ext4 /dev/<xxx> $LFS
+mkdir -v $LFS/home
+mount -v -t ext4 /dev/<yyy> $LFS/home
+

+ Replace <xxx> + and <yyy> with + the appropriate partition names. +

+

+ Set the owner and permission mode of the $LFS directory (i.e. the root directory in + the newly created file system for the LFS system) to + root and 755 in case the host distro has been + configured to use a different default for mkfs: +

+
chown root:root $LFS
+chmod 755 $LFS
+

+ Ensure that this new partition is not mounted with permissions + that are too restrictive (such as the nosuid or nodev + options). Run the mount command without any + parameters to see what options are set for the mounted LFS + partition. If nosuid and/or + nodev are set, the partition must + be remounted. +

+
+

+ Warning +

+

+ The above instructions assume that you will not restart your + computer throughout the LFS process. If you shut down your + system, you will either need to remount the LFS partition + each time you restart the build process, or modify the host + system's /etc/fstab file to + automatically remount it when you reboot. For example, you + might add this line to your /etc/fstab file: +

+
/dev/<xxx>  /mnt/lfs ext4   defaults      1     1
+

+ If you use additional optional partitions, be sure to add + them also. +

+
+

+ If you are using a swap + partition, ensure that it is enabled using the swapon command: +

+
/sbin/swapon -v /dev/<zzz>
+

+ Replace <zzz> + with the name of the swap + partition. +

+

+ Now that the new LFS partition is open for business, it's time + to download the packages. +

+
+
+
+
+
+

+ Chapter 3. Packages + and Patches +

+
+
+
+
+
+
+
+

+ 3.1. Introduction +

+
+
+
+
+

+ This chapter includes a list of packages that need to be + downloaded in order to build a basic Linux system. The listed + version numbers correspond to versions of the software that are + known to work, and this book is based on their use. We highly + recommend against using different versions, because the build + commands for one version may not work with a different version, + unless the different version is specified by an LFS erratum or + security advisory. The newest package versions may also have + problems that require work-arounds. These work-arounds will be + developed and stabilized in the development version of the + book. +

+

+ For some packages, the release tarball and the (Git or SVN) + repository snapshot tarball for that release may be published + with similar or even identical file names. But the release + tarball may contain some files which are essential despite not + stored in the repository (for example, a configure script generated by + autoconf), in + addition to the contents of the corresponding repository + snapshot. The book uses release tarballs whenever possible. + Using a repository snapshot instead of a release tarball + specified by the book will cause problems. +

+

+ Download locations may not always be accessible. If a download + location has changed since this book was published, Google + (https://www.google.com/) provides + a useful search engine for most packages. If this search is + unsuccessful, try one of the alternative means of downloading + at https://www.linuxfromscratch.org/lfs/mirrors.html#files. +

+

+ Downloaded packages and patches will need to be stored + somewhere that is conveniently available throughout the entire + build. A working directory is also required to unpack the + sources and build them. $LFS/sources can be used both as the place to + store the tarballs and patches and as a working directory. By + using this directory, the required elements will be located on + the LFS partition and will be available during all stages of + the building process. +

+

+ To create this directory, execute the following command, as + user root, before starting the + download session: +

+
mkdir -v $LFS/sources
+

+ Make this directory writable and sticky. “Sticky” means that + even if multiple users have write permission on a directory, + only the owner of a file can delete the file within a sticky + directory. The following command will enable the write and + sticky modes: +

+
chmod -v a+wt $LFS/sources
+

+ There are several ways to obtain all the necessary packages and + patches to build LFS: +

+
+
    +
  • +

    + The files can be downloaded individually as described in + the next two sections. +

    +
  • +
  • +

    + For stable versions of the book, a tarball of all the + needed files can be downloaded from one of the mirror + sites listed at https://www.linuxfromscratch.org/mirrors.html#files. +

    +
  • +
  • +

    + The files can be downloaded using wget and a wget-list as + described below. +

    +
  • +
+
+

+ To download all of the packages and patches by using wget-list-sysv as an input + to the wget + command, use: +

+
wget --input-file=wget-list-sysv --continue --directory-prefix=$LFS/sources
+

+ Additionally, starting with LFS-7.0, there is a separate file, + md5sums, which can be + used to verify that all the correct packages are available + before proceeding. Place that file in $LFS/sources and run: +

+
pushd $LFS/sources
+  md5sum -c md5sums
+popd
+

+ This check can be used after retrieving the needed files with + any of the methods listed above. +

+

+ If the packages and patches are downloaded as a + non-root user, these files will + be owned by the user. The file system records the owner by its + UID, and the UID of a normal user in the host distro is not + assigned in LFS. So the files will be left owned by an unnamed + UID in the final LFS system. If you won't assign the same UID + for your user in the LFS system, change the owners of these + files to root now to avoid this + issue: +

+
chown root:root $LFS/sources/*
+
+
+
+
+

+ 3.2. All Packages +

+
+
+
+
+
+

+ Note +

+

+ Read the security + advisories before downloading packages to figure out if a + newer version of any package should be used to avoid security + vulnerabilities. +

+

+ The upstream sources may remove old releases, especially when + those releases contain a security vulnerability. If one URL + below is not reachable, you should read the security + advisories first to figure out if a newer version (with the + vulnerability fixed) should be used. If not, try to download + the removed package from a mirror. Although it's possible to + download an old release from a mirror even if this release + has been removed because of a vulnerability, it's not a good + idea to use a release known to be vulnerable when building + your system. +

+
+

+ Download or otherwise obtain the following packages: +

+
+
+
+
+ Acl (2.3.2) - 363 + KB: +
+
+

+ Home page: https://savannah.nongnu.org/projects/acl +

+

+ Download: + https://download.savannah.gnu.org/releases/acl/acl-2.3.2.tar.xz +

+

+ MD5 sum: 590765dee95907dbc3c856f7255bd669 +

+
+
+ Attr (2.5.2) - 484 + KB: +
+
+

+ Home page: https://savannah.nongnu.org/projects/attr +

+

+ Download: + https://download.savannah.gnu.org/releases/attr/attr-2.5.2.tar.gz +

+

+ MD5 sum: 227043ec2f6ca03c0948df5517f9c927 +

+
+
+ Autoconf (2.72) - 1,360 KB: +
+
+

+ Home page: https://www.gnu.org/software/autoconf/ +

+

+ Download: + https://ftp.gnu.org/gnu/autoconf/autoconf-2.72.tar.xz +

+

+ MD5 sum: 1be79f7106ab6767f18391c5e22be701 +

+
+
+ Automake (1.18.1) - 1,614 KB: +
+
+

+ Home page: https://www.gnu.org/software/automake/ +

+

+ Download: + https://ftp.gnu.org/gnu/automake/automake-1.18.1.tar.xz +

+

+ MD5 sum: cea31dbf1120f890cbf2a3032cfb9a68 +

+
+
+ Bash (5.3) - 11,089 KB: +
+
+

+ Home page: https://www.gnu.org/software/bash/ +

+

+ Download: https://ftp.gnu.org/gnu/bash/bash-5.3.tar.gz +

+

+ MD5 sum: 977c8c0c5ae6309191e7768e28ebc951 +

+
+
+ Bc (7.0.3) - 464 + KB: +
+
+

+ Home page: https://github.com/gavinhoward +

+

+ Download: + https://github.com/gavinhoward/bc/releases/download/7.0.3/bc-7.0.3.tar.xz +

+

+ MD5 sum: ad4db5a0eb4fdbb3f6813be4b6b3da74 +

+
+
+ Binutils (2.45) - 27,216 KB: +
+
+

+ Home page: https://www.gnu.org/software/binutils/ +

+

+ Download: + https://sourceware.org/pub/binutils/releases/binutils-2.45.tar.xz +

+

+ MD5 sum: dee5b4267e0305a99a3c9d6131f45759 +

+
+
+ Bison (3.8.2) - 2,752 KB: +
+
+

+ Home page: https://www.gnu.org/software/bison/ +

+

+ Download: https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz +

+

+ MD5 sum: c28f119f405a2304ff0a7ccdcc629713 +

+
+
+ Bzip2 (1.0.8) - 792 KB: +
+
+

+ Download: + https://www.sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz +

+

+ MD5 sum: 67e051268d0c475ea773822f7500d0e5 +

+
+
+ Coreutils (9.7) - 6,015 KB: +
+
+

+ Home page: https://www.gnu.org/software/coreutils/ +

+

+ Download: + https://ftp.gnu.org/gnu/coreutils/coreutils-9.7.tar.xz +

+

+ MD5 sum: 6b7285faf7d5eb91592bdd689270d3f1 +

+
+
+ DejaGNU (1.6.3) - 608 KB: +
+
+

+ Home page: https://www.gnu.org/software/dejagnu/ +

+

+ Download: https://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.3.tar.gz +

+

+ MD5 sum: 68c5208c58236eba447d7d6d1326b821 +

+
+
+ Diffutils (3.12) - 1,894 KB: +
+
+

+ Home page: https://www.gnu.org/software/diffutils/ +

+

+ Download: + https://ftp.gnu.org/gnu/diffutils/diffutils-3.12.tar.xz +

+

+ MD5 sum: d1b18b20868fb561f77861cd90b05de4 +

+
+
+ E2fsprogs (1.47.3) - 9,851 KB: +
+
+

+ Home page: https://e2fsprogs.sourceforge.net/ +

+

+ Download: + https://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.47.3/e2fsprogs-1.47.3.tar.gz +

+

+ MD5 sum: 113d7a7ee0710d2a670a44692a35fd2e +

+
+
+ Elfutils (0.193) - 11,695 KB: +
+
+

+ Home page: https://sourceware.org/elfutils/ +

+

+ Download: + https://sourceware.org/ftp/elfutils/0.193/elfutils-0.193.tar.bz2 +

+

+ MD5 sum: ceefa052ded950a4c523688799193a44 +

+
+
+ Expat (2.7.1) - 485 KB: +
+
+

+ Home page: https://libexpat.github.io/ +

+

+ Download: + https://github.com/libexpat/libexpat/releases/download/R_2_7_1/expat-2.7.1.tar.xz +

+

+ MD5 sum: 9f0c266ff4b9720beae0c6bd53ae4469 +

+
+
+ Expect (5.45.4) - 618 KB: +
+
+

+ Home page: https://core.tcl.tk/expect/ +

+

+ Download: + https://prdownloads.sourceforge.net/expect/expect5.45.4.tar.gz +

+

+ MD5 sum: 00fce8de158422f5ccd2666512329bd2 +

+
+
+ File (5.46) - 1,283 KB: +
+
+

+ Home page: https://www.darwinsys.com/file/ +

+

+ Download: https://astron.com/pub/file/file-5.46.tar.gz +

+

+ MD5 sum: 459da2d4b534801e2e2861611d823864 +

+
+
+ Findutils (4.10.0) - 2,189 KB: +
+
+

+ Home page: https://www.gnu.org/software/findutils/ +

+

+ Download: + https://ftp.gnu.org/gnu/findutils/findutils-4.10.0.tar.xz +

+

+ MD5 sum: 870cfd71c07d37ebe56f9f4aaf4ad872 +

+
+
+ Flex (2.6.4) - 1,386 KB: +
+
+

+ Home page: https://github.com/westes/flex +

+

+ Download: + https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz +

+

+ MD5 sum: 2882e3179748cc9f9c23ec593d6adc8d +

+
+
+ Flit-core (3.12.0) - 53 KB: +
+
+

+ Home page: https://pypi.org/project/flit-core/ +

+

+ Download: + https://pypi.org/packages/source/f/flit-core/flit_core-3.12.0.tar.gz +

+

+ MD5 sum: c538415c1f27bd69cbbbf3cdd5135d39 +

+
+
+ Gawk (5.3.2) - 3,662 KB: +
+
+

+ Home page: https://www.gnu.org/software/gawk/ +

+

+ Download: https://ftp.gnu.org/gnu/gawk/gawk-5.3.2.tar.xz +

+

+ MD5 sum: b7014650c5f45e5d4837c31209dc0037 +

+
+
+ GCC (15.2.0) - 98,688 KB: +
+
+

+ Home page: https://gcc.gnu.org/ +

+

+ Download: + https://ftp.gnu.org/gnu/gcc/gcc-15.2.0/gcc-15.2.0.tar.xz +

+

+ MD5 sum: b861b092bf1af683c46a8aa2e689a6fd +

+
+
+ GDBM (1.26) - 1,198 KB: +
+
+

+ Home page: https://www.gnu.org/software/gdbm/ +

+

+ Download: https://ftp.gnu.org/gnu/gdbm/gdbm-1.26.tar.gz +

+

+ MD5 sum: aaa600665bc89e2febb3c7bd90679115 +

+
+
+ Gettext (0.26) - 9,926 KB: +
+
+

+ Home page: https://www.gnu.org/software/gettext/ +

+

+ Download: https://ftp.gnu.org/gnu/gettext/gettext-0.26.tar.xz +

+

+ MD5 sum: 8e14e926f088e292f5f2bce95b81d10e +

+
+
+ Glibc (2.42) - 19,464 KB: +
+
+

+ Home page: https://www.gnu.org/software/libc/ +

+

+ Download: https://ftp.gnu.org/gnu/glibc/glibc-2.42.tar.xz +

+

+ MD5 sum: 23c6f5a27932b435cae94e087cb8b1f5 +

+
+

+ Note +

+

+ The Glibc developers maintain a + Git branch containing patches considered worthy + for Glibc-2.42 but unfortunately developed after + Glibc-2.42 release. The LFS editors will issue a + security advisory if any security fix is added into + the branch, but no actions will be taken for other + newly added patches. You may review the patches + yourself and incorporate some patches if you consider + them important. +

+
+
+
+ GMP (6.3.0) - 2,046 KB: +
+
+

+ Home page: https://www.gnu.org/software/gmp/ +

+

+ Download: https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz +

+

+ MD5 sum: 956dc04e864001a9c22429f761f2c283 +

+
+
+ Gperf (3.3) - 1,789 KB: +
+
+

+ Home page: https://www.gnu.org/software/gperf/ +

+

+ Download: https://ftp.gnu.org/gnu/gperf/gperf-3.3.tar.gz +

+

+ MD5 sum: 31753b021ea78a21f154bf9eecb8b079 +

+
+
+ Grep (3.12) - 1,874 KB: +
+
+

+ Home page: https://www.gnu.org/software/grep/ +

+

+ Download: https://ftp.gnu.org/gnu/grep/grep-3.12.tar.xz +

+

+ MD5 sum: 5d9301ed9d209c4a88c8d3a6fd08b9ac +

+
+
+ Groff (1.23.0) - 7,259 KB: +
+
+

+ Home page: https://www.gnu.org/software/groff/ +

+

+ Download: https://ftp.gnu.org/gnu/groff/groff-1.23.0.tar.gz +

+

+ MD5 sum: 5e4f40315a22bb8a158748e7d5094c7d +

+
+
+ GRUB (2.12) - 6,524 KB: +
+
+

+ Home page: https://www.gnu.org/software/grub/ +

+

+ Download: https://ftp.gnu.org/gnu/grub/grub-2.12.tar.xz +

+

+ MD5 sum: 60c564b1bdc39d8e43b3aab4bc0fb140 +

+
+
+ Gzip (1.14) - 865 + KB: +
+
+

+ Home page: https://www.gnu.org/software/gzip/ +

+

+ Download: https://ftp.gnu.org/gnu/gzip/gzip-1.14.tar.xz +

+

+ MD5 sum: 4bf5a10f287501ee8e8ebe00ef62b2c2 +

+
+
+ Iana-Etc (20250807) - 592 KB: +
+
+

+ Home page: https://www.iana.org/protocols +

+

+ Download: + https://github.com/Mic92/iana-etc/releases/download/20250807/iana-etc-20250807.tar.gz +

+

+ MD5 sum: de0a909103d4ff59d1424c5ec7ac9e4a +

+
+
+ Inetutils (2.6) - 1,724 KB: +
+
+

+ Home page: https://www.gnu.org/software/inetutils/ +

+

+ Download: + https://ftp.gnu.org/gnu/inetutils/inetutils-2.6.tar.xz +

+

+ MD5 sum: 401d7d07682a193960bcdecafd03de94 +

+
+
+ Intltool (0.51.0) - 159 KB: +
+
+

+ Home page: https://freedesktop.org/wiki/Software/intltool +

+

+ Download: + https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz +

+

+ MD5 sum: 12e517cac2b57a0121cda351570f1e63 +

+
+
+ IPRoute2 (6.16.0) - 910 KB: +
+
+

+ Home page: https://www.kernel.org/pub/linux/utils/net/iproute2/ +

+

+ Download: + https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-6.16.0.tar.xz +

+

+ MD5 sum: 80e1f91bf59d572acc15d5c6eb4f3e7c +

+
+
+ Jinja2 (3.1.6) - 240 KB: +
+
+

+ Home page: https://jinja.palletsprojects.com/en/3.1.x/ +

+

+ Download: + https://pypi.org/packages/source/J/Jinja2/jinja2-3.1.6.tar.gz +

+

+ MD5 sum: 66d4c25ff43d1deaf9637ccda523dec8 +

+
+
+ Kbd (2.8.0) - 1,448 KB: +
+
+

+ Home page: https://kbd-project.org/ +

+

+ Download: + https://www.kernel.org/pub/linux/utils/kbd/kbd-2.8.0.tar.xz +

+

+ MD5 sum: 24b5d24f7483726b88f214dc6c77aa41 +

+
+
+ Kmod (34.2) - 434 + KB: +
+
+

+ Home page: https://github.com/kmod-project/kmod +

+

+ Download: + https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-34.2.tar.xz +

+

+ MD5 sum: 36f2cc483745e81ede3406fa55e1065a +

+
+
+ Less (679) - 857 + KB: +
+
+

+ Home page: https://www.greenwoodsoftware.com/less/ +

+

+ Download: + https://www.greenwoodsoftware.com/less/less-679.tar.gz +

+

+ MD5 sum: 0386dc14f6a081a94dfb4c2413864eed +

+
+
+ LFS-Bootscripts (20250827) - + 34 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/lfs/downloads/12.4/lfs-bootscripts-20250827.tar.xz +

+

+ MD5 sum: 3f661c64c2dfb55025767ed56074d059 +

+
+
+ Libcap (2.76) - 195 KB: +
+
+

+ Home page: https://sites.google.com/site/fullycapable/ +

+

+ Download: + https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.76.tar.xz +

+

+ MD5 sum: 449ade7d620b5c4eeb15a632fbaa4f74 +

+
+
+ Libffi (3.5.2) - 1,390 KB: +
+
+

+ Home page: https://sourceware.org/libffi/ +

+

+ Download: + https://github.com/libffi/libffi/releases/download/v3.5.2/libffi-3.5.2.tar.gz +

+

+ MD5 sum: 92af9efad4ba398995abf44835c5d9e9 +

+
+
+ Libpipeline (1.5.8) - 1046 KB: +
+
+

+ Home page: https://libpipeline.nongnu.org/ +

+

+ Download: + https://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.5.8.tar.gz +

+

+ MD5 sum: 17ac6969b2015386bcb5d278a08a40b5 +

+
+
+ Libtool (2.5.4) - 1,033 KB: +
+
+

+ Home page: https://www.gnu.org/software/libtool/ +

+

+ Download: https://ftp.gnu.org/gnu/libtool/libtool-2.5.4.tar.xz +

+

+ MD5 sum: 22e0a29df8af5fdde276ea3a7d351d30 +

+
+
+ Libxcrypt (4.4.38) - 612 KB: +
+
+

+ Home page: https://github.com/besser82/libxcrypt/ +

+

+ Download: + https://github.com/besser82/libxcrypt/releases/download/v4.4.38/libxcrypt-4.4.38.tar.xz +

+

+ MD5 sum: 1796a5d20098e9dd9e3f576803c83000 +

+
+
+ Linux (6.16.1) - 149,042 KB: +
+
+

+ Home page: https://www.kernel.org/ +

+

+ Download: + https://www.kernel.org/pub/linux/kernel/v6.x/linux-6.16.1.tar.xz +

+

+ MD5 sum: 32d45755e4b39d06e9be58f6817445ee +

+
+

+ Note +

+

+ The Linux kernel is updated quite frequently, many + times due to discoveries of security vulnerabilities. + The latest available stable kernel version may be + used, unless the errata page says otherwise. +

+

+ For users with limited speed or expensive bandwidth + who wish to update the Linux kernel, a baseline + version of the package and patches can be downloaded + separately. This may save some time or cost for a + subsequent patch level upgrade within a minor + release. +

+
+
+
+ Lz4 (1.10.0) - 379 + KB: +
+
+

+ Home page: https://lz4.org/ +

+

+ Download: + https://github.com/lz4/lz4/releases/download/v1.10.0/lz4-1.10.0.tar.gz +

+

+ MD5 sum: dead9f5f1966d9ae56e1e32761e4e675 +

+
+
+ M4 (1.4.20) - 1,997 KB: +
+
+

+ Home page: https://www.gnu.org/software/m4/ +

+

+ Download: https://ftp.gnu.org/gnu/m4/m4-1.4.20.tar.xz +

+

+ MD5 sum: 6eb2ebed5b24e74b6e890919331d2132 +

+
+
+ Make (4.4.1) - 2,300 KB: +
+
+

+ Home page: https://www.gnu.org/software/make/ +

+

+ Download: https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz +

+

+ MD5 sum: c8469a3713cbbe04d955d4ae4be23eeb +

+
+
+ Man-DB (2.13.1) - 2,061 KB: +
+
+

+ Home page: https://www.nongnu.org/man-db/ +

+

+ Download: + https://download.savannah.gnu.org/releases/man-db/man-db-2.13.1.tar.xz +

+

+ MD5 sum: b6335533cbeac3b24cd7be31fdee8c83 +

+
+
+ Man-pages (6.15) - 1,817 KB: +
+
+

+ Home page: https://www.kernel.org/doc/man-pages/ +

+

+ Download: + https://www.kernel.org/pub/linux/docs/man-pages/man-pages-6.15.tar.xz +

+

+ MD5 sum: 16f68d70139dd2bbcae4102be4705753 +

+
+
+ MarkupSafe (3.0.2) - 21 KB: +
+
+

+ Home page: https://palletsprojects.com/p/markupsafe/ +

+

+ Download: + https://pypi.org/packages/source/M/MarkupSafe/markupsafe-3.0.2.tar.gz +

+

+ MD5 sum: cb0071711b573b155cc8f86e1de72167 +

+
+
+ Meson (1.8.3) - 2,282: +
+
+

+ Home page: https://mesonbuild.com +

+

+ Download: + https://github.com/mesonbuild/meson/releases/download/1.8.3/meson-1.8.3.tar.gz +

+

+ MD5 sum: 08221d2f515e759686f666ff6409a903 +

+
+
+ MPC (1.3.1) - 756 + KB: +
+
+

+ Home page: https://www.multiprecision.org/ +

+

+ Download: https://ftp.gnu.org/gnu/mpc/mpc-1.3.1.tar.gz +

+

+ MD5 sum: 5c9bc658c9fd0f940e8e3e0f09530c62 +

+
+
+ MPFR (4.2.2) - 1,471 KB: +
+
+

+ Home page: https://www.mpfr.org/ +

+

+ Download: https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.2.tar.xz +

+

+ MD5 sum: 7c32c39b8b6e3ae85f25156228156061 +

+
+
+ Ncurses (6.5-20250809) - 3,703 KB: +
+
+

+ Home page: https://www.gnu.org/software/ncurses/ +

+

+ Download: + https://invisible-mirror.net/archives/ncurses/current/ncurses-6.5-20250809.tgz +

+

+ MD5 sum: 679987405412f970561cc85e1e6428a2 +

+
+
+ Ninja (1.13.1) - 286 KB: +
+
+

+ Home page: https://ninja-build.org/ +

+

+ Download: + https://github.com/ninja-build/ninja/archive/v1.13.1/ninja-1.13.1.tar.gz +

+

+ MD5 sum: c35f8f55f4cf60f1a916068d8f45a0f8 +

+
+
+ OpenSSL (3.5.2) - 51,934 KB: +
+
+

+ Home page: https://www.openssl-library.org/ +

+

+ Download: + https://github.com/openssl/openssl/releases/download/openssl-3.5.2/openssl-3.5.2.tar.gz +

+

+ MD5 sum: 890fc59f86fc21b5e4d1c031a698dbde +

+
+
+ Packaging (25.0) - 162 KB: +
+
+

+ Home page: https://pypi.org/project/packaging/ +

+

+ Download: + https://files.pythonhosted.org/packages/source/p/packaging/packaging-25.0.tar.gz +

+

+ MD5 sum: ab0ef21ddebe09d1803575120d3f99f8 +

+
+
+ Patch (2.8) - 886 + KB: +
+
+

+ Home page: https://savannah.gnu.org/projects/patch/ +

+

+ Download: https://ftp.gnu.org/gnu/patch/patch-2.8.tar.xz +

+

+ MD5 sum: 149327a021d41c8f88d034eab41c039f +

+
+
+ Perl (5.42.0) - 14,084 KB: +
+
+

+ Home page: https://www.perl.org/ +

+

+ Download: https://www.cpan.org/src/5.0/perl-5.42.0.tar.xz +

+

+ MD5 sum: 7a6950a9f12d01eb96a9d2ed2f4e0072 +

+
+
+ Pkgconf (2.5.1) - 321 KB: +
+
+

+ Home page: https://github.com/pkgconf/pkgconf +

+

+ Download: + https://distfiles.ariadne.space/pkgconf/pkgconf-2.5.1.tar.xz +

+

+ MD5 sum: 3291128c917fdb8fccd8c9e7784b643b +

+
+
+ Procps (4.0.5) - 1,483 KB: +
+
+

+ Home page: https://gitlab.com/procps-ng/procps/ +

+

+ Download: + https://sourceforge.net/projects/procps-ng/files/Production/procps-ng-4.0.5.tar.xz +

+

+ MD5 sum: 90803e64f51f192f3325d25c3335d057 +

+
+
+ Psmisc (23.7) - 423 KB: +
+
+

+ Home page: https://gitlab.com/psmisc/psmisc +

+

+ Download: + https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-23.7.tar.xz +

+

+ MD5 sum: 53eae841735189a896d614cba440eb10 +

+
+
+ Python (3.13.7) - 22,236 KB: +
+
+

+ Home page: https://www.python.org/ +

+

+ Download: + https://www.python.org/ftp/python/3.13.7/Python-3.13.7.tar.xz +

+

+ MD5 sum: 256cdb3bbf45cdce7499e52ba6c36ea3 +

+
+
+ Python Documentation (3.13.7) - + 10,183 KB: +
+
+

+ Download: + https://www.python.org/ftp/python/doc/3.13.7/python-3.13.7-docs-html.tar.bz2 +

+

+ MD5 sum: b84c0d81b2758398bb7f5b7411d3d908 +

+
+
+ Readline (8.3) - 3,340 KB: +
+
+

+ Home page: https://tiswww.case.edu/php/chet/readline/rltop.html +

+

+ Download: https://ftp.gnu.org/gnu/readline/readline-8.3.tar.gz +

+

+ MD5 sum: 25a73bfb2a3ad7146c5e9d4408d9f6cd +

+
+
+ Sed (4.9) - 1,365 + KB: +
+
+

+ Home page: https://www.gnu.org/software/sed/ +

+

+ Download: https://ftp.gnu.org/gnu/sed/sed-4.9.tar.xz +

+

+ MD5 sum: 6aac9b2dbafcd5b7a67a8a9bcb8036c3 +

+
+
+ Setuptools (80.9.0) - 1,290 KB: +
+
+

+ Home page: https://pypi.org/project/setuptools/ +

+

+ Download: + https://pypi.org/packages/source/s/setuptools/setuptools-80.9.0.tar.gz +

+

+ MD5 sum: 82e1d67883b713f9493659b50d13b436 +

+
+
+ Shadow (4.18.0) - 2,293 KB: +
+
+

+ Home page: https://github.com/shadow-maint/shadow/ +

+

+ Download: + https://github.com/shadow-maint/shadow/releases/download/4.18.0/shadow-4.18.0.tar.xz +

+

+ MD5 sum: 30ef46f54363db1d624587be68794ef2 +

+
+
+ Sysklogd (2.7.2) - 474 KB: +
+
+

+ Home page: https://www.infodrom.org/projects/sysklogd/ +

+

+ Download: + https://github.com/troglobit/sysklogd/releases/download/v2.7.2/sysklogd-2.7.2.tar.gz +

+

+ MD5 sum: af60786956a2dc84054fbf46652e515e +

+
+
+ Systemd (257.8) - 16,002 KB: +
+
+

+ Home page: https://www.freedesktop.org/wiki/Software/systemd/ +

+

+ Download: + https://github.com/systemd/systemd/archive/v257.8/systemd-257.8.tar.gz +

+

+ MD5 sum: 25fe5d328e22641254761f1baa74cee0 +

+
+
+ Systemd Man Pages (257.8) - + 736 KB: +
+
+

+ Home page: https://www.freedesktop.org/wiki/Software/systemd/ +

+

+ Download: + https://anduin.linuxfromscratch.org/LFS/systemd-man-pages-257.8.tar.xz +

+

+ MD5 sum: a44063e2ec0cf4adfd2ed5c9e9e095c5 +

+
+

+ Note +

+

+ The Linux From Scratch team generates its own tarball + of the man pages using the systemd source. This is + done in order to avoid unnecessary dependencies. +

+
+
+
+ SysVinit (3.14) - 236 KB: +
+
+

+ Home page: https://savannah.nongnu.org/projects/sysvinit +

+

+ Download: + https://github.com/slicer69/sysvinit/releases/download/3.14/sysvinit-3.14.tar.xz +

+

+ MD5 sum: bc6890b975d19dc9db42d0c7364dd092 +

+
+
+ Tar (1.35) - 2,263 + KB: +
+
+

+ Home page: https://www.gnu.org/software/tar/ +

+

+ Download: https://ftp.gnu.org/gnu/tar/tar-1.35.tar.xz +

+

+ MD5 sum: a2d8042658cfd8ea939e6d911eaf4152 +

+
+
+ Tcl (8.6.16) - 11,406 KB: +
+
+

+ Home page: https://tcl.sourceforge.net/ +

+

+ Download: + https://downloads.sourceforge.net/tcl/tcl8.6.16-src.tar.gz +

+

+ MD5 sum: eaef5d0a27239fb840f04af8ec608242 +

+
+
+ Tcl Documentation (8.6.16) - + 1,169 KB: +
+
+

+ Download: + https://downloads.sourceforge.net/tcl/tcl8.6.16-html.tar.gz +

+

+ MD5 sum: 750c221bcb6f8737a6791c1fbe98b684 +

+
+
+ Texinfo (7.2) - 6,259 KB: +
+
+

+ Home page: https://www.gnu.org/software/texinfo/ +

+

+ Download: https://ftp.gnu.org/gnu/texinfo/texinfo-7.2.tar.xz +

+

+ MD5 sum: 11939a7624572814912a18e76c8d8972 +

+
+
+ Time Zone Data (2025b) - 454 KB: +
+
+

+ Home page: https://www.iana.org/time-zones +

+

+ Download: + https://www.iana.org/time-zones/repository/releases/tzdata2025b.tar.gz +

+

+ MD5 sum: ad65154c48c74a9b311fe84778c5434f +

+
+
+ Udev-lfs Tarball (udev-lfs-20230818) - + 10 KB: +
+
+

+ Download: + https://anduin.linuxfromscratch.org/LFS/udev-lfs-20230818.tar.xz +

+

+ MD5 sum: acd4360d8a5c3ef320b9db88d275dae6 +

+
+
+ Util-linux (2.41.1) - 9,382 KB: +
+
+

+ Home page: + https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/ +

+

+ Download: + https://www.kernel.org/pub/linux/utils/util-linux/v2.41/util-linux-2.41.1.tar.xz +

+

+ MD5 sum: 7e5e68845e2f347cf96f5448165f1764 +

+
+
+ Vim (9.1.1629) - 18,317 KB: +
+
+

+ Home page: https://www.vim.org +

+

+ Download: + https://github.com/vim/vim/archive/v9.1.1629/vim-9.1.1629.tar.gz +

+

+ MD5 sum: 4f856c3233c1c4570bc17572e4f9e8e4 +

+
+

+ Note +

+

+ The version of vim changes daily. To get the latest + version, go to https://github.com/vim/vim/tags. +

+
+
+
+ Wheel (0.46.1) - 54 KB: +
+
+

+ Home page: https://pypi.org/project/wheel/ +

+

+ Download: + https://pypi.org/packages/source/w/wheel/wheel-0.46.1.tar.gz +

+

+ MD5 sum: 65e09ee84af36821e3b1e9564aa91bd5 +

+
+
+ XML::Parser (2.47) - 276 KB: +
+
+

+ Home page: https://github.com/chorny/XML-Parser +

+

+ Download: + https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.47.tar.gz +

+

+ MD5 sum: 89a8e82cfd2ad948b349c0a69c494463 +

+
+
+ Xz Utils (5.8.1) - 1,428 KB: +
+
+

+ Home page: https://tukaani.org/xz +

+

+ Download: + https://github.com//tukaani-project/xz/releases/download/v5.8.1/xz-5.8.1.tar.xz +

+

+ MD5 sum: cf5e1feb023d22c6bdaa30e84ef3abe3 +

+
+
+ Zlib (1.3.1) - 1,478 KB: +
+
+

+ Home page: https://zlib.net/ +

+

+ Download: https://zlib.net/fossils/zlib-1.3.1.tar.gz +

+

+ MD5 sum: 9855b6d802d7fe5b7bd5b196a2271655 +

+
+
+ Zstd (1.5.7) - 2,378 KB: +
+
+

+ Home page: https://facebook.github.io/zstd/ +

+

+ Download: + https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz +

+

+ MD5 sum: 780fc1896922b1bc52a4e90980cdda48 +

+
+
+
+
+

+ Total size of these packages: about NaN MB +

+
+
+
+
+

+ 3.3. Needed Patches +

+
+
+
+
+

+ In addition to the packages, several patches are also required. + These patches correct any mistakes in the packages that should + be fixed by the maintainer. The patches also make small + modifications to make the packages easier to work with. The + following patches will be needed to build an LFS system: +

+
+
+
+
+ Bzip2 Documentation Patch - + 1.6 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/bzip2-1.0.8-install_docs-1.patch +

+

+ MD5 sum: 6a5ac7e89b791aae556de0f745916f7f +

+
+
+ Coreutils Upstream Fix Patch - + 4.1 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/coreutils-9.7-upstream_fix-1.patch +

+

+ MD5 sum: 96382a5aa85d6651a74f94ffb61785d9 +

+
+
+ Coreutils Internationalization Fixes + Patch - 159 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/coreutils-9.7-i18n-1.patch +

+

+ MD5 sum: 33ebfad32b2dfb8417c3335c08671206 +

+
+
+ Expect GCC15 Patch - 12 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/expect-5.45.4-gcc15-1.patch +

+

+ MD5 sum: 0ca4d6bb8d572fbcdb13cb36cd34833e +

+
+
+ Glibc FHS Patch - 2.8 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/glibc-2.42-fhs-1.patch +

+

+ MD5 sum: 9a5997c3452909b1769918c759eff8a2 +

+
+
+ Kbd Backspace/Delete Fix Patch - + 12 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/kbd-2.8.0-backspace-1.patch +

+

+ MD5 sum: f75cca16a38da6caa7d52151f7136895 +

+
+
+ SysVinit Consolidated Patch - + 2.5 KB: +
+
+

+ Download: + https://www.linuxfromscratch.org/patches/lfs/12.4/sysvinit-3.14-consolidated-1.patch +

+

+ MD5 sum: 3af8fd8e13cad481eeeaa48be4247445 +

+
+
+
+
+

+ Total size of these patches: about 194 KB +

+

+ In addition to the above required patches, there exist a number + of optional patches created by the LFS community. These + optional patches solve minor problems or enable functionality + that is not enabled by default. Feel free to peruse the patches + database located at https://www.linuxfromscratch.org/patches/downloads/ + and acquire any additional patches to suit your system needs. +

+
+
+
+
+
+

+ Chapter 4. Final + Preparations +

+
+
+
+
+
+
+
+

+ 4.1. Introduction +

+
+
+
+
+

+ In this chapter, we will perform a few additional tasks to + prepare for building the temporary system. We will create a set + of directories in $LFS (in which + we will install the temporary tools), add an unprivileged user, + and create an appropriate build environment for that user. We + will also explain the units of time (“SBUs”) we use to + measure how long it takes to build LFS packages, and provide + some information about package test suites. +

+
+
+
+
+

+ 4.2. Creating a + Limited Directory Layout in the LFS Filesystem +

+
+
+
+
+

+ In this section, we begin populating the LFS filesystem with + the pieces that will constitute the final Linux system. The + first step is to create a limited directory hierarchy, so that + the programs compiled in Chapter 6 + (as well as glibc and libstdc++ in Chapter 5) + can be installed in their final location. We do this so those + temporary programs will be overwritten when the final versions + are built in Chapter 8. +

+

+ Create the required directory layout by issuing the following + commands as root: +

+
mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
+
+for i in bin lib sbin; do
+  ln -sv usr/$i $LFS/$i
+done
+
+case $(uname -m) in
+  x86_64) mkdir -pv $LFS/lib64 ;;
+esac
+

+ Programs in Chapter 6 + will be compiled with a cross-compiler (more details can be + found in section Toolchain Technical Notes). + This cross-compiler will be installed in a special directory, + to separate it from the other programs. Still acting as + root, create that directory + with this command: +

+
mkdir -pv $LFS/tools
+
+

+ Note +

+

+ The LFS editors have deliberately decided not to use a + /usr/lib64 directory. Several + steps are taken to be sure the toolchain will not use it. If + for any reason this directory appears (either because you + made an error in following the instructions, or because you + installed a binary package that created it after finishing + LFS), it may break your system. You should always be sure + this directory does not exist. +

+
+
+
+
+
+

+ 4.3. Adding the LFS User +

+
+
+
+
+

+ When logged in as user root, + making a single mistake can damage or destroy a system. + Therefore, the packages in the next two chapters are built as + an unprivileged user. You could use your own user name, but to + make it easier to set up a clean working environment, we will + create a new user called lfs as + a member of a new group (also named lfs) and run commands as lfs during the installation process. As + root, issue the following + commands to add the new user: +

+
groupadd lfs
+useradd -s /bin/bash -g lfs -m -k /dev/null lfs
+
+

+ This is what the command line options mean: +

+
+
+ -s + /bin/bash +
+
+

+ This makes bash the default shell + for user lfs. +

+
+
+ -g + lfs +
+
+

+ This option adds user lfs + to group lfs. +

+
+
+ -m +
+
+

+ This creates a home directory for lfs. +

+
+
+ -k + /dev/null +
+
+

+ This parameter prevents possible copying of files from a + skeleton directory (the default is /etc/skel) by changing the input + location to the special null device. +

+
+
+ lfs +
+
+

+ This is the name of the new user. +

+
+
+
+

+ If you want to log in as lfs or + switch to lfs from a + non-root user (as opposed to + switching to user lfs when + logged in as root, which does + not require the lfs user to + have a password), you need to set a password for lfs. Issue the following command as the + root user to set the password: +

+
passwd lfs
+

+ Grant lfs full access to all + the directories under $LFS by + making lfs the owner: +

+
chown -v lfs $LFS/{usr{,/*},var,etc,tools}
+case $(uname -m) in
+  x86_64) chown -v lfs $LFS/lib64 ;;
+esac
+
+

+ Note +

+

+ In some host systems, the following su command does not + complete properly and suspends the login for the lfs user to the background. If the prompt + "lfs:~$" does not appear immediately, entering the + fg command will + fix the issue. +

+
+

+ Next, start a shell running as user lfs. This can be done by logging in as + lfs on a virtual console, or + with the following substitute/switch user command: +

+
su - lfs
+

+ The “-” instructs + su to start a + login shell as opposed to a non-login shell. The difference + between these two types of shells is described in detail in + bash(1) and + info bash. +

+
+
+
+
+

+ 4.4. Setting Up the + Environment +

+
+
+
+
+

+ Set up a good working environment by creating two new startup + files for the bash shell. While logged in + as user lfs, issue the + following command to create a new .bash_profile: +

+
cat > ~/.bash_profile << "EOF"
+exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
+EOF
+

+ When logged on as user lfs, or + when switched to the lfs user + using an su + command with the “-” option, the + initial shell is a login + shell which reads the /etc/profile of the host (probably containing + some settings and environment variables) and then .bash_profile. The exec env -i.../bin/bash + command in the .bash_profile file + replaces the running shell with a new one with a completely + empty environment, except for the HOME, TERM, and + PS1 variables. This ensures that no + unwanted and potentially hazardous environment variables from + the host system leak into the build environment. +

+

+ The new instance of the shell is a non-login shell, which does not + read, and execute, the contents of the /etc/profile or .bash_profile files, but rather reads, and + executes, the .bashrc file + instead. Create the .bashrc file + now: +

+
cat > ~/.bashrc << "EOF"
+set +h
+umask 022
+LFS=/mnt/lfs
+LC_ALL=POSIX
+LFS_TGT=$(uname -m)-lfs-linux-gnu
+PATH=/usr/bin
+if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
+PATH=$LFS/tools/bin:$PATH
+CONFIG_SITE=$LFS/usr/share/config.site
+export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
+EOF
+
+

+ The meaning of the settings in .bashrc +

+
+
+ set + +h +
+
+

+ The set +h + command turns off bash's hash function. + Hashing is ordinarily a useful feature—bash uses a hash table + to remember the full path to executable files to avoid + searching the PATH time and + again to find the same executable. However, the new tools + should be used as soon as they are installed. Switching + off the hash function forces the shell to search the + PATH whenever a program is to + be run. As such, the shell will find the newly compiled + tools in $LFS/tools/bin as + soon as they are available without remembering a previous + version of the same program provided by the host distro, + in /usr/bin or /bin. +

+
+
+ umask + 022 +
+
+

+ Setting the umask as we've already explained in Section 2.6, + “Setting the $LFS Variable and the Umask.” +

+
+
+ LFS=/mnt/lfs +
+
+

+ The LFS variable should be set + to the chosen mount point. +

+
+
+ LC_ALL=POSIX +
+
+

+ The LC_ALL variable controls + the localization of certain programs, making their + messages follow the conventions of a specified country. + Setting LC_ALL to “POSIX” or + “C” + (the two are equivalent) ensures that everything will + work as expected in the cross-compilation environment. +

+
+
+ LFS_TGT=$(uname + -m)-lfs-linux-gnu +
+
+

+ The LFS_TGT variable sets a + non-default, but compatible machine description for use + when building our cross-compiler and linker and when + cross-compiling our temporary toolchain. More information + is provided by Toolchain Technical + Notes. +

+
+
+ PATH=/usr/bin +
+
+

+ Many modern Linux distributions have merged /bin and /usr/bin. When this is the case, the + standard PATH variable should + be set to /usr/bin/ for the + Chapter 6 + environment. When this is not the case, the following + line adds /bin to the path. +

+
+
+ if [ ! -L + /bin ]; then PATH=/bin:$PATH; fi +
+
+

+ If /bin is not a symbolic + link, it must be added to the PATH variable. +

+
+
+ PATH=$LFS/tools/bin:$PATH +
+
+

+ By putting $LFS/tools/bin + ahead of the standard PATH, + the cross-compiler installed at the beginning of + Chapter 5 + is picked up by the shell immediately after its + installation. This, combined with turning off hashing, + limits the risk that the compiler from the host is used + instead of the cross-compiler. +

+
+
+ CONFIG_SITE=$LFS/usr/share/config.site +
+
+

+ In Chapter 5 + and + Chapter 6, if this variable is not set, + configure + scripts may attempt to load configuration items specific + to some distributions from /usr/share/config.site on the host + system. Override it to prevent potential contamination + from the host. +

+
+
+ export + ... +
+
+

+ While the preceding commands have set some variables, in + order to make them visible within any sub-shells, we + export them. +

+
+
+
+
+

+ Important +

+

+ Several commercial distributions add an undocumented + instantiation of /etc/bash.bashrc to the initialization of + bash. This file + has the potential to modify the lfs user's environment in ways that can + affect the building of critical LFS packages. To make sure + the lfs user's environment is + clean, check for the presence of /etc/bash.bashrc and, if present, move it + out of the way. As the root + user, run: +

+
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
+

+ When the lfs user is no + longer needed (at the beginning of + Chapter 7), you may safely restore /etc/bash.bashrc (if desired). +

+

+ Note that the LFS Bash package we will build in Section 8.36, “Bash-5.3” is + not configured to load or execute /etc/bash.bashrc, so this file is useless + on a completed LFS system. +

+
+

+ For many modern systems with multiple processors (or cores) the + compilation time for a package can be reduced by performing a + "parallel make" by telling the make program how many processors + are available via a command line option or an environment + variable. For instance, an Intel Core i9-13900K processor has 8 + P (performance) cores and 16 E (efficiency) cores, and a P core + can simultaneously run two threads so each P core are modeled + as two logical cores by the Linux kernel. As the result there + are 32 logical cores in total. One obvious way to use all these + logical cores is allowing make to spawn up to 32 build + jobs. This can be done by passing the -j32 option to make: +

+
make -j32
+

+ Or set the MAKEFLAGS environment + variable and its content will be automatically used by + make as command + line options: +

+
export MAKEFLAGS=-j32
+
+

+ Important +

+

+ Never pass a -j + option without a number to make or set such an option + in MAKEFLAGS. Doing so will allow + make to spawn + infinite build jobs and cause system stability problems. +

+
+

+ To use all logical cores available for building packages in + Chapter 5 + and Chapter 6, + set MAKEFLAGS now in .bashrc: +

+
cat >> ~/.bashrc << "EOF"
+export MAKEFLAGS=-j$(nproc)
+EOF
+

+ Replace $(nproc) with + the number of logical cores you want to use if you don't want + to use all the logical cores. +

+

+ Finally, to ensure the environment is fully prepared for + building the temporary tools, force the bash shell to read the new + user profile: +

+
source ~/.bash_profile
+
+
+
+
+

+ 4.5. About SBUs +

+
+
+
+
+

+ Many people would like to know beforehand approximately how + long it takes to compile and install each package. Because + Linux From Scratch can be built on many different systems, it + is impossible to provide absolute time estimates. The biggest + package (gcc) will take approximately 5 minutes on the fastest + systems, but could take days on slower systems! Instead of + providing actual times, the Standard Build Unit (SBU) measure + will be used instead. +

+

+ The SBU measure works as follows. The first package to be + compiled is binutils in Chapter 5. + The time it takes to compile using one core is what we will + refer to as the Standard Build Unit or SBU. All other compile + times will be expressed in terms of this unit of time. +

+

+ For example, consider a package whose compilation time is 4.5 + SBUs. This means that if your system took 4 minutes to compile + and install the first pass of binutils, it will take + approximately 18 minutes + to build the example package. Fortunately, most build times are + shorter than one SBU. +

+

+ SBUs are not entirely accurate because they depend on many + factors, including the host system's version of GCC. They are + provided here to give an estimate of how long it might take to + install a package, but the numbers can vary by as much as + dozens of minutes in some cases. +

+

+ On some newer systems, the motherboard is capable of + controlling the system clock speed. This can be controlled with + a command such as powerprofilesctl. This is not + available in LFS, but may be available on the host distro. + After LFS is complete, it can be added to a system with the + procedures at the + BLFS power-profiles-daemon page. Before measuring the build + time of any package it is advisable to use a system power + profile set for maximum performance (and maximum power + consumption). Otherwise the measured SBU value may be + inaccurate because the system may react differently when + building binutils-pass1 or other + packages. Be aware that a significant inaccuracy can still show + up even if the same profile is used for both packages because + the system may respond slower if the system is idle when + starting the build procedure. Setting the power profile to + “performance” will minimize this problem. + And obviously doing so will also make the system build LFS + faster. +

+

+ If powerprofilesctl is + available, issue the powerprofilesctl set + performance command to select the performance profile. Some distros provides the + tuned-adm command + for managing the profiles instead of powerprofilesctl, on these + distros issue the tuned-adm + profile throughput-performance command to + select the throughput-performance + profile. +

+
+

+ Note +

+

+ When multiple processors are used in this way, the SBU units + in the book will vary even more than they normally would. In + some cases, the make step will simply fail. Analyzing the + output of the build process will also be more difficult + because the lines from different processes will be + interleaved. If you run into a problem with a build step, + revert to a single processor build to properly analyze the + error messages. +

+

+ The times presented here for all packages (except binutils-pass1 which + is based on one core) are based upon using four cores (-j4). + The times in Chapter 8 also include the time to run the + regression tests for the package unless specified otherwise. +

+
+
+
+
+
+

+ 4.6. About the Test + Suites +

+
+
+
+
+

+ Most packages provide a test suite. Running the test suite for + a newly built package is a good idea because it can provide a + “sanity + check” indicating that everything compiled + correctly. A test suite that passes its set of checks usually + proves that the package is functioning as the developer + intended. It does not, however, guarantee that the package is + totally bug free. +

+

+ Some test suites are more important than others. For example, + the test suites for the core toolchain packages—GCC, binutils, + and glibc—are of the utmost importance due to their central + role in a properly functioning system. The test suites for GCC + and glibc can take a very long time to complete, especially on + slower hardware, but are strongly recommended. +

+
+

+ Note +

+

+ Running the test suites in Chapter 5 + and Chapter 6 + is pointless; since the test programs are compiled with a + cross-compiler, they probably can't run on the build host. +

+
+

+ A common issue with running the test suites for binutils and + GCC is running out of pseudo terminals (PTYs). This can result + in a large number of failing tests. This may happen for several + reasons, but the most likely cause is that the host system does + not have the devpts file system + set up correctly. This issue is discussed in greater detail at + https://www.linuxfromscratch.org/lfs/faq.html#no-ptys. +

+

+ Sometimes package test suites will fail for reasons which the + developers are aware of and have deemed non-critical. Consult + the logs located at https://www.linuxfromscratch.org/lfs/build-logs/12.4/ + to verify whether or not these failures are expected. This site + is valid for all test suites throughout this book. +

+
+
+
+
+
+
+

+ Part III. Building the + LFS Cross Toolchain and Temporary Tools +

+
+
+
+
+
+
+
+

+ Important Preliminary Material +

+
+
+
+
+
+
+
+

+ Introduction +

+
+
+
+
+

+ This part is divided into three stages: first, building a cross + compiler and its associated libraries; second, using this cross + toolchain to build several utilities in a way that isolates + them from the host distribution; and third, entering the chroot + environment (which further improves host isolation) and + constructing the remaining tools needed to build the final + system. +

+
+

+ Important +

+

+ This is where the real work of building a new system begins. + Be very careful to follow the instructions exactly as the + book shows them. You should try to understand what each + command does, and no matter how eager you are to finish your + build, you should refrain from blindly typing the commands as + shown. Read the documentation when there is something you do + not understand. Also, keep track of your typing and of the + output of commands, by using the tee utility to send the + terminal output to a file. This makes debugging easier if + something goes wrong. +

+
+

+ The next section is a technical introduction to the build + process, while the following one presents very important general + instructions. +

+
+
+
+
+

+ Toolchain Technical Notes +

+
+
+
+
+

+ This section explains some of the rationale and technical + details behind the overall build method. Don't try to + immediately understand everything in this section. Most of this + information will be clearer after performing an actual build. + Come back and re-read this chapter at any time during the build + process. +

+

+ The overall goal of Chapter 5 + and Chapter 6 + is to produce a temporary area containing a set of tools that + are known to be good, and that are isolated from the host + system. By using the chroot command, the + compilations in the remaining chapters will be isolated within + that environment, ensuring a clean, trouble-free build of the + target LFS system. The build process has been designed to + minimize the risks for new readers, and to provide the most + educational value at the same time. +

+

+ This build process is based on cross-compilation. Cross-compilation + is normally used to build a compiler and its associated + toolchain for a machine different from the one that is used for + the build. This is not strictly necessary for LFS, since the + machine where the new system will run is the same as the one + used for the build. But cross-compilation has one great + advantage: anything that is cross-compiled cannot depend on the + host environment. +

+
+

+ About + Cross-Compilation +

+
+

+ Note +

+

+ The LFS book is not (and does not contain) a general + tutorial to build a cross- (or native) toolchain. Don't use + the commands in the book for a cross-toolchain for some + purpose other than building LFS, unless you really + understand what you are doing. +

+

+ It's known installing GCC pass 2 will break the + cross-toolchain. We don't consider it a bug because GCC + pass 2 is the last package to be cross-compiled in the + book, and we won't “fix” it until we really need to + cross-compile some package after GCC pass 2 in the future. +

+
+

+ Cross-compilation involves some concepts that deserve a + section of their own. Although this section may be omitted on + a first reading, coming back to it later will help you gain a + fuller understanding of the process. +

+

+ Let us first define some terms used in this context. +

+
+
+
+ The build +
+
+

+ is the machine where we build programs. Note that this + machine is also referred to as the “host.” +

+
+
+ The host +
+
+

+ is the machine/system where the built programs will + run. Note that this use of “host” is not + the same as in other sections. +

+
+
+ The target +
+
+

+ is only used for compilers. It is the machine the + compiler produces code for. It may be different from + both the build and the host. +

+
+
+
+

+ As an example, let us imagine the following scenario + (sometimes referred to as “Canadian Cross”). We have a compiler on + a slow machine only, let's call it machine A, and the + compiler ccA. We also have a fast machine (B), but no + compiler for (B), and we want to produce code for a third, + slow machine (C). We will build a compiler for machine C in + three stages. +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Stage + + Build + + Host + + Target + + Action +
+ 1 + + A + + A + + B + + Build cross-compiler cc1 using ccA on machine A. +
+ 2 + + A + + B + + C + + Build cross-compiler cc2 using cc1 on machine A. +
+ 3 + + B + + C + + C + + Build compiler ccC using cc2 on machine B. +
+
+

+ Then, all the programs needed by machine C can be compiled + using cc2 on the fast machine B. Note that unless B can run + programs produced for C, there is no way to test the newly + built programs until machine C itself is running. For + example, to run a test suite on ccC, we may want to add a + fourth stage: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Stage + + Build + + Host + + Target + + Action +
+ 4 + + C + + C + + C + + Rebuild and test ccC using ccC on machine C. +
+
+

+ In the example above, only cc1 and cc2 are cross-compilers, + that is, they produce code for a machine different from the + one they are run on. The other compilers ccA and ccC produce + code for the machine they are run on. Such compilers are + called native + compilers. +

+
+
+

+ Implementation of + Cross-Compilation for LFS +

+
+

+ Note +

+

+ All the cross-compiled packages in this book use an + autoconf-based building system. The autoconf-based building + system accepts system types in the form + cpu-vendor-kernel-os, referred to as the system triplet. + Since the vendor field is often irrelevant, autoconf lets + you omit it. +

+

+ An astute reader may wonder why a “triplet” refers + to a four component name. The kernel field and the os field + began as a single “system” field. Such a three-field + form is still valid today for some systems, for example, + x86_64-unknown-freebsd. But + two systems can share the same kernel and still be too + different to use the same triplet to describe them. For + example, Android running on a mobile phone is completely + different from Ubuntu running on an ARM64 server, even + though they are both running on the same type of CPU + (ARM64) and using the same kernel (Linux). +

+

+ Without an emulation layer, you cannot run an executable + for a server on a mobile phone or vice versa. So the + “system” field has been divided into + kernel and os fields, to designate these systems + unambiguously. In our example, the Android system is + designated aarch64-unknown-linux-android, and the + Ubuntu system is designated aarch64-unknown-linux-gnu. +

+

+ The word “triplet” remains embedded in the + lexicon. A simple way to determine your system triplet is + to run the config.guess script that + comes with the source for many packages. Unpack the + binutils sources, run the script ./config.guess, and note + the output. For example, for a 32-bit Intel processor the + output will be i686-pc-linux-gnu. On a 64-bit + system it will be x86_64-pc-linux-gnu. On most + Linux systems the even simpler gcc -dumpmachine command + will give you similar information. +

+

+ You should also be aware of the name of the platform's + dynamic linker, often referred to as the dynamic loader + (not to be confused with the standard linker ld that is part of + binutils). The dynamic linker provided by package glibc + finds and loads the shared libraries needed by a program, + prepares the program to run, and then runs it. The name of + the dynamic linker for a 32-bit Intel machine is + ld-linux.so.2; it's + ld-linux-x86-64.so.2 on + 64-bit systems. A sure-fire way to determine the name of + the dynamic linker is to inspect a random binary from the + host system by running: readelf -l <name of binary> | grep + interpreter and noting the output. The + authoritative reference covering all platforms is in + a Glibc wiki + page. +

+
+

+ There are two key points for a cross-compilation: +

+
+
    +
  • +

    + When producing and processing the machine code supposed + to be executed on “the host,” the cross-toolchain + must be used. Note that the native toolchain from + “the + build” may be still invoked to generate + machine code supposed to be executed on “the build.” + For example, the build system may compile a generator + with the native toolchain, then generate a C source + file with the generator, and finally compile the C + source file with the cross-toolchain so the generated + code will be able to run on “the host.” +

    +

    + With an autoconf-based build system, this requirement + is ensured by using the --host switch to specify + “the + host” triplet. With this switch the build + system will use the toolchain components prefixed with + <the host + triplet> for generating and + processing the machine code for “the host”; + e.g. the compiler will be <the + host triplet>-gcc and + the readelf tool will be + <the host + triplet>-readelf. +

    +
  • +
  • +

    + The build system should not attempt to run any + generated machine code supposed to be executed on + “the + host.” For example, when building a + utility natively, its man page can be generated by + running the utility with the --help switch and + processing the output, but generally it's not possible + to do so for a cross-compilation as the utility may + fail to run on “the build”: it's obviously + impossible to run ARM64 machine code on a x86 CPU + (without an emulator). +

    +

    + With an autoconf-based build system, this requirement + is satisfied in “the cross-compilation mode” where + the optional features requiring to run machine code for + “the + host” during the build time are disabled. + When “the + host” triplet is explicitly specified, + “the + cross-compilation mode” is enabled if and + only if either the configure script + fails to run a dummy program compiled into “the host” + machine code, or “the build” triplet is explicitly + specified via the --build switch and it's + different from “the host” triplet. +

    +
  • +
+
+

+ In order to cross-compile a package for the LFS temporary + system, the name of the system triplet is slightly adjusted + by changing the "vendor" field in the LFS_TGT variable so it says "lfs" and + LFS_TGT is then specified as + “the + host” triplet via --host, so the cross-toolchain + will be used for generating and processing the machine code + running as a part of the LFS temporary system. And, we also + need to enable “the + cross-compilation mode”: despite “the host” machine + code, i.e. the machine code for the LFS temporary system, is + able to execute on the current CPU, it may refer to a library + not available on the “the build” (the host distro), or some + code or data non-exist or defined differently in the library + even if it happens to be available. When cross-compiling a + package for the LFS temporary system, we cannot rely on the + configure + script to detect this issue with the dummy program: the dummy + only uses a few components in libc that the host distro libc likely provides (unless, maybe the + host distro uses a different libc implementation like Musl), so it + won't fail like how the really useful programs would likely. + Thus we must explicitly specify “the build” triplet + to enable “the + cross-compilation mode.” The value we use is + just the default, i.e. the original system triplet from + config.guess + output, but “the + cross-compilation mode” depends on an explicit + specification as we've discussed. +

+

+ We use the --with-sysroot option when + building the cross-linker and cross-compiler, to tell them + where to find the needed files for “the host.” This + nearly ensures that none of the other programs built in + Chapter 6 + can link to libraries on “the build.” The word “nearly” is used + because libtool, a “compatibility” + wrapper of the compiler and the linker for autoconf-based + build systems, can try to be too clever and mistakenly pass + options allowing the linker to find libraries of “the build.” To + prevent this fallout, we need to delete the libtool archive + (.la) files and fix up an + outdated libtool copy shipped with the Binutils code. +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Stage + + Build + + Host + + Target + + Action +
+ 1 + + pc + + pc + + lfs + + Build cross-compiler cc1 using cc-pc on pc. +
+ 2 + + pc + + lfs + + lfs + + Build compiler cc-lfs using cc1 on pc. +
+ 3 + + lfs + + lfs + + lfs + + Rebuild (and maybe test) cc-lfs using cc-lfs on lfs. +
+
+

+ In the preceding table, “on pc” means the commands are run on a + machine using the already installed distribution. + “On + lfs” means the commands are run in a chrooted + environment. +

+

+ This is not yet the end of the story. The C language is not + merely a compiler; it also defines a standard library. In + this book, the GNU C library, named glibc, is used (there is + an alternative, "musl"). This library must be compiled for + the LFS machine; that is, using the cross-compiler cc1. But + the compiler itself uses an internal library providing + complex subroutines for functions not available in the + assembler instruction set. This internal library is named + libgcc, and it must be linked to the glibc library to be + fully functional. Furthermore, the standard library for C++ + (libstdc++) must also be linked with glibc. The solution to + this chicken and egg problem is first to build a degraded + cc1-based libgcc, lacking some functionalities such as + threads and exception handling, and then to build glibc using + this degraded compiler (glibc itself is not degraded), and + also to build libstdc++. This last library will lack some of + the functionality of libgcc. +

+

+ The upshot of the preceding paragraph is that cc1 is unable + to build a fully functional libstdc++ with the degraded + libgcc, but cc1 is the only compiler available for building + the C/C++ libraries during stage 2. As we've discussed, we + cannot run cc-lfs on pc (the host distro) because it may + require some library, code, or data not available on + “the + build” (the host distro). So when we build gcc + stage 2, we override the library search path to link + libstdc++ against the newly rebuilt libgcc instead of the + old, degraded build. This makes the rebuilt libstdc++ fully + functional. +

+

+ In Chapter 8 + (or “stage + 3”), all the packages needed for the LFS system + are built. Even if a package has already been installed into + the LFS system in a previous chapter, we still rebuild the + package. The main reason for rebuilding these packages is to + make them stable: if we reinstall an LFS package on a + completed LFS system, the reinstalled content of the package + should be the same as the content of the same package when + first installed in Chapter 8. + The temporary packages installed in Chapter 6 + or + Chapter 7 cannot satisfy this requirement, because + some optional features of them are disabled because of either + the missing dependencies or the “cross-compilation + mode.” Additionally, a minor reason for + rebuilding the packages is to run the test suites. +

+
+
+

+ Other + Procedural Details +

+

+ The cross-compiler will be installed in a separate + $LFS/tools directory, since it + will not be part of the final system. +

+

+ Binutils is installed first because the configure runs of both gcc + and glibc perform various feature tests on the assembler and + linker to determine which software features to enable or + disable. This is more important than one might realize at + first. An incorrectly configured gcc or glibc can result in a + subtly broken toolchain, where the impact of such breakage + might not show up until near the end of the build of an + entire distribution. A test suite failure will usually + highlight this error before too much additional work is + performed. +

+

+ Binutils installs its assembler and linker in two locations, + $LFS/tools/bin and $LFS/tools/$LFS_TGT/bin. The tools in one + location are hard linked to the other. An important facet of + the linker is its library search order. Detailed information + can be obtained from ld by passing it the + --verbose flag. For + example, $LFS_TGT-ld --verbose + | grep SEARCH will illustrate the current + search paths and their order. (Note that this example can be + run as shown only while logged in as user lfs. If you come back to this page later, + replace $LFS_TGT-ld with + ld). +

+

+ The next package installed is gcc. An example of what can be + seen during its run of configure is: +

+
checking what assembler to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/as
+checking what linker to use... /mnt/lfs/tools/i686-lfs-linux-gnu/bin/ld
+

+ This is important for the reasons mentioned above. It also + demonstrates that gcc's configure script does not search the + PATH directories to find which tools to use. However, during + the actual operation of gcc itself, the same search + paths are not necessarily used. To find out which standard + linker gcc will + use, run: $LFS_TGT-gcc + -print-prog-name=ld. (Again, remove the + $LFS_TGT- + prefix if coming back to this later.) +

+

+ Detailed information can be obtained from gcc by passing it the + -v command line + option while compiling a program. For example, $LFS_TGT-gcc -v example.c (or + without $LFS_TGT- if coming back + later) will show detailed information about the preprocessor, + compilation, and assembly stages, including gcc's search paths for + included headers and their order. +

+

+ Next up: sanitized Linux API headers. These allow the + standard C library (glibc) to interface with features that + the Linux kernel will provide. +

+

+ Next comes glibc. This is the first package that we + cross-compile. We use the --host=$LFS_TGT option to make + the build system to use those tools prefixed with + $LFS_TGT-, and the --build=$(../scripts/config.guess) + option to enable “the + cross-compilation mode” as we've discussed. The + DESTDIR variable is used to force + installation into the LFS file system. +

+

+ As mentioned above, the standard C++ library is compiled + next, followed in Chapter 6 + by other programs that must be cross-compiled to break + circular dependencies at build time. The steps for those + packages are similar to the steps for glibc. +

+

+ At the end of Chapter 6 + the native LFS compiler is installed. First binutils-pass2 is + built, in the same DESTDIR + directory as the other programs, then the second pass of gcc + is constructed, omitting some non-critical libraries. +

+

+ Upon entering the chroot environment in + Chapter 7, the temporary installations of programs + needed for the proper operation of the toolchain are + performed. From this point onwards, the core toolchain is + self-contained and self-hosted. In Chapter 8, + final versions of all the packages needed for a fully + functional system are built, tested, and installed. +

+
+
+
+
+
+

+ General Compilation + Instructions +

+
+
+
+
+
+

+ Caution +

+

+ During a development cycle of LFS, the instructions in the + book are often modified to adapt for a package update or take + the advantage of new features from updated packages. Mixing + up the instructions of different versions of the LFS book can + cause subtle breakages. This kind of issue is generally a + result from reusing some script created for a prior LFS + release. Such a reuse is strongly discouraged. If you are + reusing scripts for a prior LFS release for any reason, + you'll need to be very careful to update the scripts to match + current version of the LFS book. +

+
+

+ Here are some things you should know about building each + package: +

+
+
    +
  • +

    + Several packages are patched before compilation, but only + when the patch is needed to circumvent a problem. A patch + is often needed in both the current and the following + chapters, but sometimes, when the same package is built + more than once, the patch is not needed right away. + Therefore, do not be concerned if instructions for a + downloaded patch seem to be missing. Warning messages + about offset or + fuzz may also be + encountered when applying a patch. Do not worry about + these warnings; the patch was still successfully applied. +

    +
  • +
  • +

    + During the compilation of most packages, some warnings + will scroll by on the screen. These are normal and can + safely be ignored. These warnings are usually about + deprecated, but not invalid, use of the C or C++ syntax. + C standards change fairly often, and some packages have + not yet been updated. This is not a serious problem, but + it does cause the warnings to appear. +

    +
  • +
  • +

    + Check one last time that the LFS environment variable is set up + properly: +

    +
    echo $LFS
    +

    + Make sure the output shows the path to the LFS + partition's mount point, which is /mnt/lfs, using our example. +

    +
  • +
  • +

    + Finally, two important items must be emphasized: +

    +
    +

    + Important +

    +

    + The build instructions assume that the Host System + Requirements, including symbolic links, have been + set properly: +

    +
    +
      +
    • +

      + bash is the + shell in use. +

      +
    • +
    • +

      + sh + is a symbolic link to bash. +

      +
    • +
    • +

      + /usr/bin/awk is + a symbolic link to gawk. +

      +
    • +
    • +

      + /usr/bin/yacc + is a symbolic link to bison, or to a + small script that executes bison. +

      +
    • +
    +
    +
    +
    +

    + Important +

    +

    + Here is a synopsis of the build process. +

    +
    +
      +
    1. +

      + Place all the sources and patches in a directory + that will be accessible from the chroot + environment, such as /mnt/lfs/sources/. +

      +
    2. +
    3. +

      + Change to the /mnt/lfs/sources/ directory. +

      +
    4. +
    5. +

      + For each + package: +

      +
      +
        +
      1. +

        + Using the tar + program, extract the package to be built. + In + Chapter 5 and + Chapter 6, ensure you are the + lfs + user when extracting the package. +

        +

        + Do not use any method except the + tar + command to extract the source code. + Notably, using the cp -R + command to copy the source code tree + somewhere else can destroy timestamps in + the source tree, and cause the build to + fail. +

        +
      2. +
      3. +

        + Change to the directory created when the + package was extracted. +

        +
      4. +
      5. +

        + Follow the instructions for building the + package. +

        +
      6. +
      7. +

        + Change back to the sources directory when + the build is complete. +

        +
      8. +
      9. +

        + Delete the extracted source directory + unless instructed otherwise. +

        +
      10. +
      +
      +
    6. +
    +
    +
    +
  • +
+
+
+
+
+
+
+

+ Chapter 5. Compiling a + Cross-Toolchain +

+
+
+
+
+
+
+
+

+ 5.1. Introduction +

+
+
+
+
+

+ This chapter shows how to build a cross-compiler and its + associated tools. Although here cross-compilation is faked, the + principles are the same as for a real cross-toolchain. +

+

+ The programs compiled in this chapter will be installed under + the $LFS/tools directory to keep + them separate from the files installed in the following + chapters. The libraries, on the other hand, are installed into + their final place, since they pertain to the system we want to + build. +

+
+
+
+
+

+ 5.2. Binutils-2.45 - + Pass 1 +

+
+
+
+
+
+

+ The Binutils package contains a linker, an assembler, and + other tools for handling object files. +

+
+
+
+ Approximate build time: + 1 SBU +
+
+ Required disk space: + 678 MB +
+
+
+
+
+

+ 5.2.1. Installation of Cross Binutils +

+
+

+ Note +

+

+ Go back and re-read the notes in the section titled + General Compilation + Instructions. Understanding the notes labeled important + can save you a lot of problems later. +

+
+

+ It is important that Binutils be the first package compiled + because both Glibc and GCC perform various tests on the + available linker and assembler to determine which of their + own features to enable. +

+

+ The Binutils documentation recommends building Binutils in a + dedicated build directory: +

+
mkdir -v build
+cd       build
+
+

+ Note +

+

+ In order for the SBU values listed in the rest of the book + to be of any use, measure the time it takes to build this + package from the configuration, up to and including the + first install. To achieve this easily, wrap the commands in + a time + command like this: time { + ../configure ... && make && make install; + }. +

+
+

+ Now prepare Binutils for compilation: +

+
../configure --prefix=$LFS/tools \
+             --with-sysroot=$LFS \
+             --target=$LFS_TGT   \
+             --disable-nls       \
+             --enable-gprofng=no \
+             --disable-werror    \
+             --enable-new-dtags  \
+             --enable-default-hash-style=gnu
+
+

+ The meaning of the configure options: +

+
+

+ Note +

+

+ Contrary to other packages, not all the options listed + below appear when running ./configure --help. For + example, to find the --with-sysroot option, you have to run + ld/configure + --help. All the options can be listed at + once with ./configure + --help=recursive. +

+
+
+
+ --prefix=$LFS/tools +
+
+

+ This tells the configure script to prepare to install + the Binutils programs in the $LFS/tools directory. +

+
+
+ --with-sysroot=$LFS +
+
+

+ For cross compilation, this tells the build system to + look in $LFS for the target system libraries as needed. +

+
+
+ --target=$LFS_TGT +
+
+

+ Because the machine description in the LFS_TGT variable is slightly different + than the value returned by the config.guess script, + this switch will tell the configure script to + adjust binutil's build system for building a cross + linker. +

+
+
+ --disable-nls +
+
+

+ This disables internationalization as i18n is not + needed for the temporary tools. +

+
+
+ --enable-gprofng=no +
+
+

+ This disables building gprofng which is not needed for + the temporary tools. +

+
+
+ --disable-werror +
+
+

+ This prevents the build from stopping in the event that + there are warnings from the host's compiler. +

+
+
+ --enable-new-dtags +
+
+

+ This makes the linker use the “runpath” tag + for embedding library search paths into executables and + shared libraries, instead of the traditional + “rpath” tag. It makes debugging + dynamically linked executables easier and works around + potential issues in the test suite of some packages. +

+
+
+ --enable-default-hash-style=gnu +
+
+

+ By default, the linker would generate both the + GNU-style hash table and the classic ELF hash table for + shared libraries and dynamically linked executables. + The hash tables are only intended for a dynamic linker + to perform symbol lookup. On LFS the dynamic linker + (provided by the Glibc package) will always use the + GNU-style hash table which is faster to query. So the + classic ELF hash table is completely useless. This + makes the linker only generate the GNU-style hash table + by default, so we can avoid wasting time to generate + the classic ELF hash table when we build the packages, + or wasting disk space to store it. +

+
+
+
+

+ Continue with compiling the package: +

+
make
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.20.2, + “Contents of Binutils.” +

+
+
+
+
+
+

+ 5.3. GCC-15.2.0 - Pass 1 +

+
+
+
+
+
+

+ The GCC package contains the GNU compiler collection, which + includes the C and C++ compilers. +

+
+
+
+ Approximate build time: + 3.8 SBU +
+
+ Required disk space: + 5.4 GB +
+
+
+
+
+

+ 5.3.1. Installation of Cross GCC +

+

+ GCC requires the GMP, MPFR and MPC packages. As these + packages may not be included in your host distribution, they + will be built with GCC. Unpack each package into the GCC + source directory and rename the resulting directories so the + GCC build procedures will automatically use them: +

+
+

+ Note +

+

+ There are frequent misunderstandings about this chapter. + The procedures are the same as every other chapter, as + explained earlier (Package build instructions). First, + extract the gcc-15.2.0 tarball from the sources directory, + and then change to the directory created. Only then should + you proceed with the instructions below. +

+
+
tar -xf ../mpfr-4.2.2.tar.xz
+mv -v mpfr-4.2.2 mpfr
+tar -xf ../gmp-6.3.0.tar.xz
+mv -v gmp-6.3.0 gmp
+tar -xf ../mpc-1.3.1.tar.gz
+mv -v mpc-1.3.1 mpc
+

+ On x86_64 hosts, set the default directory name for 64-bit + libraries to “lib”: +

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

+ Note +

+

+ This example demonstrates the use of the -i.orig switch. It makes the + sed copy the + t-linux64 file to + t-linux64.orig, and then edit + the original t-linux64 file + inplace. So you may run diff + -u gcc/config/i386/t-linux64{.orig,} to + visualize the change done by the sed command afterwards. + We'll simply use -i + (which just edits the original file inplace without copying + it) for all other packages in the book, but you can change + it to -i.orig in + any case you want to keep a copy of the original file. +

+
+

+ The GCC documentation recommends building GCC in a dedicated + build directory: +

+
mkdir -v build
+cd       build
+

+ Prepare GCC for compilation: +

+
../configure                  \
+    --target=$LFS_TGT         \
+    --prefix=$LFS/tools       \
+    --with-glibc-version=2.42 \
+    --with-sysroot=$LFS       \
+    --with-newlib             \
+    --without-headers         \
+    --enable-default-pie      \
+    --enable-default-ssp      \
+    --disable-nls             \
+    --disable-shared          \
+    --disable-multilib        \
+    --disable-threads         \
+    --disable-libatomic       \
+    --disable-libgomp         \
+    --disable-libquadmath     \
+    --disable-libssp          \
+    --disable-libvtv          \
+    --disable-libstdcxx       \
+    --enable-languages=c,c++
+
+

+ The meaning of the configure options: +

+
+
+ --with-glibc-version=2.42 +
+
+

+ This option specifies the version of Glibc which will + be used on the target. It is not relevant to the libc + of the host distro because everything compiled by pass1 + GCC will run in the chroot environment, which is + isolated from libc of the host distro. +

+
+
+ --with-newlib +
+
+

+ Since a working C library is not yet available, this + ensures that the inhibit_libc constant is defined when + building libgcc. This prevents the compiling of any + code that requires libc support. +

+
+
+ --without-headers +
+
+

+ When creating a complete cross-compiler, GCC requires + standard headers compatible with the target system. For + our purposes these headers will not be needed. This + switch prevents GCC from looking for them. +

+
+
+ --enable-default-pie and + --enable-default-ssp +
+
+

+ Those switches allow GCC to compile programs with some + hardening security features (more information on those + in the note on PIE + and SSP in chapter 8) by default. They are not + strictly needed at this stage, since the compiler will + only produce temporary executables. But it is cleaner + to have the temporary packages be as close as possible + to the final ones. +

+
+
+ --disable-shared +
+
+

+ This switch forces GCC to link its internal libraries + statically. We need this because the shared libraries + require Glibc, which is not yet installed on the target + system. +

+
+
+ --disable-multilib +
+
+

+ On x86_64, LFS does not support a multilib + configuration. This switch is harmless for x86. +

+
+
+ --disable-threads, --disable-libatomic, + --disable-libgomp, --disable-libquadmath, + --disable-libssp, --disable-libvtv, + --disable-libstdcxx +
+
+

+ These switches disable support for threading, + libatomic, libgomp, libquadmath, libssp, libvtv, and + the C++ standard library respectively. These features + may fail to compile when building a cross-compiler and + are not necessary for the task of cross-compiling the + temporary libc. +

+
+
+ --enable-languages=c,c++ +
+
+

+ This option ensures that only the C and C++ compilers + are built. These are the only languages needed now. +

+
+
+
+

+ Compile GCC by running: +

+
make
+

+ Install the package: +

+
make install
+

+ This build of GCC has installed a couple of internal system + headers. Normally one of them, limits.h, would in turn include the + corresponding system limits.h + header, in this case, $LFS/usr/include/limits.h. However, at the + time of this build of GCC $LFS/usr/include/limits.h does not exist, + so the internal header that has just been installed is a + partial, self-contained file and does not include the + extended features of the system header. This is adequate for + building Glibc, but the full internal header will be needed + later. Create a full version of the internal header using a + command that is identical to what the GCC build system does + in normal circumstances: +

+
+

+ Note +

+

+ The command below shows an example of nested command + substitution using two methods: backquotes and a + $() construct. It could be + rewritten using the same method for both substitutions, but + is shown this way to demonstrate how they can be mixed. + Generally the $() method is + preferred. +

+
+
cd ..
+cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
+  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h
+
+
+

+ Details on this package are located in Section 8.29.2, “Contents + of GCC.” +

+
+
+
+
+
+

+ 5.4. Linux-6.16.1 API + Headers +

+
+
+
+
+
+

+ The Linux API Headers (in linux-6.16.1.tar.xz) expose the + kernel's API for use by Glibc. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 1.7 GB +
+
+
+
+
+

+ 5.4.1. Installation of Linux API Headers +

+

+ The Linux kernel needs to expose an Application Programming + Interface (API) for the system's C library (Glibc in LFS) to + use. This is done by way of sanitizing various C header files + that are shipped in the Linux kernel source tarball. +

+

+ Make sure there are no stale files embedded in the package: +

+
make mrproper
+

+ Now extract the user-visible kernel headers from the source. + The recommended make target “headers_install” cannot be used, + because it requires rsync, + which may not be available. The headers are first placed in + ./usr, then copied to the + needed location. +

+
make headers
+find usr/include -type f ! -name '*.h' -delete
+cp -rv usr/include $LFS/usr
+
+
+

+ 5.4.2. Contents of Linux API + Headers +

+
+
+
+ Installed headers: + /usr/include/asm/*.h, + /usr/include/asm-generic/*.h, /usr/include/drm/*.h, + /usr/include/linux/*.h, /usr/include/misc/*.h, + /usr/include/mtd/*.h, /usr/include/rdma/*.h, + /usr/include/scsi/*.h, /usr/include/sound/*.h, + /usr/include/video/*.h, and /usr/include/xen/*.h +
+
+ Installed directories: + /usr/include/asm, + /usr/include/asm-generic, /usr/include/drm, + /usr/include/linux, /usr/include/misc, /usr/include/mtd, + /usr/include/rdma, /usr/include/scsi, /usr/include/sound, + /usr/include/video, and /usr/include/xen +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ /usr/include/asm/*.h +

+
+

+ The Linux API ASM Headers +

+
+

+ /usr/include/asm-generic/*.h +

+
+

+ The Linux API ASM Generic Headers +

+
+

+ /usr/include/drm/*.h +

+
+

+ The Linux API DRM Headers +

+
+

+ /usr/include/linux/*.h +

+
+

+ The Linux API Linux Headers +

+
+

+ /usr/include/misc/*.h +

+
+

+ The Linux API Miscellaneous Headers +

+
+

+ /usr/include/mtd/*.h +

+
+

+ The Linux API MTD Headers +

+
+

+ /usr/include/rdma/*.h +

+
+

+ The Linux API RDMA Headers +

+
+

+ /usr/include/scsi/*.h +

+
+

+ The Linux API SCSI Headers +

+
+

+ /usr/include/sound/*.h +

+
+

+ The Linux API Sound Headers +

+
+

+ /usr/include/video/*.h +

+
+

+ The Linux API Video Headers +

+
+

+ /usr/include/xen/*.h +

+
+

+ The Linux API Xen Headers +

+
+
+
+
+
+
+
+

+ 5.5. Glibc-2.42 +

+
+
+
+
+
+

+ The Glibc package contains the main C library. This library + provides the basic routines for allocating memory, searching + directories, opening and closing files, reading and writing + files, string handling, pattern matching, arithmetic, and so + on. +

+
+
+
+ Approximate build time: + 1.4 SBU +
+
+ Required disk space: + 870 MB +
+
+
+
+
+

+ 5.5.1. Installation of Glibc +

+

+ First, create a symbolic link for LSB compliance. + Additionally, for x86_64, create a compatibility symbolic + link required for proper operation of the dynamic library + loader: +

+
case $(uname -m) in
+    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
+    ;;
+    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
+            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
+    ;;
+esac
+
+

+ Note +

+

+ The above command is correct. The ln command has several + syntactic versions, so be sure to check info coreutils ln and + ln(1) before + reporting what may appear to be an error. +

+
+

+ Some of the Glibc programs use the non-FHS-compliant + /var/db directory to store + their runtime data. Apply the following patch to make such + programs store their runtime data in the FHS-compliant + locations: +

+
patch -Np1 -i ../glibc-2.42-fhs-1.patch
+

+ The Glibc documentation recommends building Glibc in a + dedicated build directory: +

+
mkdir -v build
+cd       build
+

+ Ensure that the ldconfig and sln utilities are installed + into /usr/sbin: +

+
echo "rootsbindir=/usr/sbin" > configparms
+

+ Next, prepare Glibc for compilation: +

+
../configure                             \
+      --prefix=/usr                      \
+      --host=$LFS_TGT                    \
+      --build=$(../scripts/config.guess) \
+      --disable-nscd                     \
+      libc_cv_slibdir=/usr/lib           \
+      --enable-kernel=5.4
+
+

+ The meaning of the configure options: +

+
+
+ --host=$LFS_TGT, + --build=$(../scripts/config.guess) +
+
+

+ The combined effect of these switches is that Glibc's + build system configures itself to be cross-compiled, + using the cross-linker and cross-compiler in + $LFS/tools. +

+
+
+ --enable-kernel=5.4 +
+
+

+ This tells Glibc to compile the library with support + for 5.4 and later Linux kernels. Workarounds for older + kernels are not enabled. +

+
+
+ libc_cv_slibdir=/usr/lib +
+
+

+ This ensures that the library is installed in /usr/lib + instead of the default /lib64 on 64-bit machines. +

+
+
+ --disable-nscd +
+
+

+ Do not build the name service cache daemon which is no + longer used. +

+
+
+
+

+ During this stage the following warning might appear: +

+
+
+
configure: WARNING:
+*** These auxiliary programs are missing or
+*** incompatible versions: msgfmt
+*** some features will be disabled.
+*** Check the INSTALL file for required versions.
+
+
+

+ The missing or incompatible msgfmt program is generally + harmless. This msgfmt program is part of + the Gettext package, which the host distribution should + provide. +

+
+

+ Note +

+

+ There have been reports that this package may fail when + building as a “parallel make.” If that occurs, rerun + the make command with the -j1 + option. +

+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
+

+ Warning +

+

+ If LFS is not properly set, and + despite the recommendations, you are building as + root, the next command will + install the newly built Glibc to your host system, which + will almost certainly render it unusable. So double-check + that the environment is correctly set, and that you are not + root, before running the + following command. +

+
+
make DESTDIR=$LFS install
+
+

+ The meaning of the make install + option: +

+
+
+ DESTDIR=$LFS +
+
+

+ The DESTDIR make variable is + used by almost all packages to define the location + where the package should be installed. If it is not + set, it defaults to the root (/) directory. Here we specify that + the package is installed in $LFS, which will become the root + directory in Section 7.4, + “Entering the Chroot Environment.” +

+
+
+
+

+ Fix a hard coded path to the executable loader in the + ldd script: +

+
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
+

+ Now that our cross toolchain is in place, it is important to + ensure that compiling and linking will work as expected. We + do this by performing some sanity checks: +

+
echo 'int main(){}' | $LFS_TGT-gcc -x c - -v -Wl,--verbose &> dummy.log
+readelf -l a.out | grep ': /lib'
+

+ There should be no errors, and the output of the last command + will be (allowing for platform-specific differences in the + dynamic linker name): +

+
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
+

+ Note that this path should not contain /mnt/lfs (or the value of the LFS variable if you used a different one). The + path is resolved when the compiled program is executed, and + that should only happen after we enter the chroot environment + where the kernel would consider $LFS as the root directory (/). +

+

+ Now make sure that we're set up to use the correct start + files: +

+
grep -E -o "$LFS/lib.*/S?crt[1in].*succeeded" dummy.log
+

+ The output of the last command should be: +

+
/mnt/lfs/lib/../lib/Scrt1.o succeeded
+/mnt/lfs/lib/../lib/crti.o succeeded
+/mnt/lfs/lib/../lib/crtn.o succeeded
+

+ Verify that the compiler is searching for the correct header + files: +

+
grep -B3 "^ $LFS/usr/include" dummy.log
+

+ This command should return the following output: +

+
#include <...> search starts here:
+ /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/15.2.0/include
+ /mnt/lfs/tools/lib/gcc/x86_64-lfs-linux-gnu/15.2.0/include-fixed
+ /mnt/lfs/usr/include
+

+ Again, the directory named after your target triplet may be + different than the above, depending on your system + architecture. +

+

+ Next, verify that the new linker is being used with the + correct search paths: +

+
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
+

+ References to paths that have components with '-linux-gnu' + should be ignored, but otherwise the output of the last + command should be: +

+
SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib64")
+SEARCH_DIR("=/usr/local/lib64")
+SEARCH_DIR("=/lib64")
+SEARCH_DIR("=/usr/lib64")
+SEARCH_DIR("=/mnt/lfs/tools/x86_64-lfs-linux-gnu/lib")
+SEARCH_DIR("=/usr/local/lib")
+SEARCH_DIR("=/lib")
+SEARCH_DIR("=/usr/lib");
+

+ A 32-bit system may use a few other directories, but anyway + the important facet here is all the paths should begin with + an equal sign (=), which would + be replaced with the sysroot directory that we've configured + for the linker. +

+

+ Next make sure that we're using the correct libc: +

+
grep "/lib.*/libc.so.6 " dummy.log
+

+ The output of the last command should be: +

+
attempt to open /mnt/lfs/usr/lib/libc.so.6 succeeded
+

+ Make sure GCC is using the correct dynamic linker: +

+
grep found dummy.log
+

+ The output of the last command should be (allowing for + platform-specific differences in dynamic linker name): +

+
found ld-linux-x86-64.so.2 at /mnt/lfs/usr/lib/ld-linux-x86-64.so.2
+

+ If the output does not appear as shown above or is not + received at all, then something is seriously wrong. + Investigate and retrace the steps to find out where the + problem is and correct it. Any issues should be resolved + before continuing with the process. +

+

+ Once everything is working correctly, clean up the test + files: +

+
rm -v a.out dummy.log
+
+

+ Note +

+

+ Building the packages in the next chapter will serve as an + additional check that the toolchain has been built + properly. If some package, especially Binutils-pass2 or + GCC-pass2, fails to build, it is an indication that + something has gone wrong with the preceding Binutils, GCC, + or Glibc installations. +

+
+
+
+

+ Details on this package are located in Section 8.5.3, “Contents + of Glibc.” +

+
+
+
+
+
+

+ 5.6. Libstdc++ from + GCC-15.2.0 +

+
+
+
+
+
+

+ Libstdc++ is the standard C++ library. It is needed to + compile C++ code (part of GCC is written in C++), but we had + to defer its installation when we built gcc-pass1 because + Libstdc++ depends on Glibc, which was not yet available in + the target directory. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 1.3 GB +
+
+
+
+
+

+ 5.6.1. Installation of Target Libstdc++ +

+
+

+ Note +

+

+ Libstdc++ is part of the + GCC sources. You should first unpack the GCC tarball and + change to the gcc-15.2.0 + directory. +

+
+

+ Create a separate build directory for Libstdc++ and enter it: +

+
mkdir -v build
+cd       build
+

+ Prepare Libstdc++ for compilation: +

+
../libstdc++-v3/configure      \
+    --host=$LFS_TGT            \
+    --build=$(../config.guess) \
+    --prefix=/usr              \
+    --disable-multilib         \
+    --disable-nls              \
+    --disable-libstdcxx-pch    \
+    --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/15.2.0
+
+

+ The meaning of the configure options: +

+
+
+ --host=... +
+
+

+ Specifies that the cross-compiler we have just built + should be used instead of the one in /usr/bin. +

+
+
+ --disable-libstdcxx-pch +
+
+

+ This switch prevents the installation of precompiled + include files, which are not needed at this stage. +

+
+
+ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/15.2.0 +
+
+

+ This specifies the installation directory for include + files. Because Libstdc++ is the standard C++ library + for LFS, this directory should match the location where + the C++ compiler ($LFS_TGT-g++) would + search for the standard C++ include files. In a normal + build, this information is automatically passed to the + Libstdc++ configure options + from the top level directory. In our case, this + information must be explicitly given. The C++ compiler + will prepend the sysroot path $LFS (specified when building + GCC-pass1) to the include file search path, so it will + actually search in $LFS/tools/$LFS_TGT/include/c++/15.2.0. + The combination of the DESTDIR variable (in the + make + install command below) and this switch + causes the headers to be installed there. +

+
+
+
+

+ Compile Libstdc++ by running: +

+
make
+

+ Install the library: +

+
make DESTDIR=$LFS install
+

+ Remove the libtool archive files because they are harmful for + cross-compilation: +

+
rm -v $LFS/usr/lib/lib{stdc++{,exp,fs},supc++}.la
+
+
+

+ Details on this package are located in Section 8.29.2, “Contents + of GCC.” +

+
+
+
+
+
+
+

+ Chapter 6. Cross + Compiling Temporary Tools +

+
+
+
+
+
+
+
+

+ 6.1. Introduction +

+
+
+
+
+

+ This chapter shows how to cross-compile basic utilities using + the just built cross-toolchain. Those utilities are installed + into their final location, but cannot be used yet. Basic tasks + still rely on the host's tools. Nevertheless, the installed + libraries are used when linking. +

+

+ Using the utilities will be possible in the next chapter after + entering the “chroot” environment. But all the packages + built in the present chapter need to be built before we do + that. Therefore we cannot be independent of the host system + yet. +

+

+ Once again, let us recall that improper setting of LFS together with building as root, may render your computer unusable. + This whole chapter must be done as user lfs, with the environment as described in + Section 4.4, + “Setting Up the Environment.” +

+
+
+
+
+

+ 6.2. M4-1.4.20 +

+
+
+
+
+
+

+ The M4 package contains a macro processor. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 38 MB +
+
+
+
+
+

+ 6.2.1. Installation of M4 +

+

+ Prepare M4 for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.13.2, “Contents + of M4.” +

+
+
+
+
+
+

+ 6.3. Ncurses-6.5-20250809 +

+
+
+
+
+
+

+ The Ncurses package contains libraries for + terminal-independent handling of character screens. +

+
+
+
+ Approximate build time: + 0.4 SBU +
+
+ Required disk space: + 54 MB +
+
+
+
+
+

+ 6.3.1. Installation of Ncurses +

+

+ First, run the following commands to build the tic program on the build + host. We install it in $LFS/tools, so that it is found in the + PATH when needed: +

+
mkdir build
+pushd build
+  ../configure --prefix=$LFS/tools AWK=gawk
+  make -C include
+  make -C progs tic
+  install progs/tic $LFS/tools/bin
+popd
+

+ Prepare Ncurses for compilation: +

+
./configure --prefix=/usr                \
+            --host=$LFS_TGT              \
+            --build=$(./config.guess)    \
+            --mandir=/usr/share/man      \
+            --with-manpage-format=normal \
+            --with-shared                \
+            --without-normal             \
+            --with-cxx-shared            \
+            --without-debug              \
+            --without-ada                \
+            --disable-stripping          \
+            AWK=gawk
+
+

+ The meaning of the new configure options: +

+
+
+ --with-manpage-format=normal +
+
+

+ This prevents Ncurses from installing compressed manual + pages, which may happen if the host distribution itself + has compressed manual pages. +

+
+
+ --with-shared +
+
+

+ This makes Ncurses build and install shared C + libraries. +

+
+
+ --without-normal +
+
+

+ This prevents Ncurses from building and installing + static C libraries. +

+
+
+ --without-debug +
+
+

+ This prevents Ncurses from building and installing + debug libraries. +

+
+
+ --with-cxx-shared +
+
+

+ This makes Ncurses build and install shared C++ + bindings. It also prevents it building and installing + static C++ bindings. +

+
+
+ --without-ada +
+
+

+ This ensures that Ncurses does not build support for + the Ada compiler, which may be present on the host but + will not be available once we enter the chroot environment. +

+
+
+ --disable-stripping +
+
+

+ This switch prevents the building system from using the + strip + program from the host. Using host tools on + cross-compiled programs can cause failure. +

+
+
+ AWK=gawk +
+
+

+ This switch prevents the building system from using the + mawk + program from the host. Some versions of mawk can cause this + package to fail to build. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+ln -sv libncursesw.so $LFS/usr/lib/libncurses.so
+sed -e 's/^#if.*XOPEN.*$/#if 1/' \
+    -i $LFS/usr/include/curses.h
+
+

+ The meaning of the install options: +

+
+
+ ln -sv + libncursesw.so + $LFS/usr/lib/libncurses.so +
+
+

+ The libncurses.so library + is needed by a few packages we will build soon. We + create this symlink to use libncursesw.so as a replacement. +

+
+
+ sed -e + 's/^#if.*XOPEN.*$/#if 1/' ... +
+
+

+ The header file curses.h + contains the definition of various Ncurses data + structures. With different preprocessor macro + definitions two different sets of the data structure + definition may be used: the 8-bit definition is + compatible with libncurses.so and the wide-character + definition is compatible with libncursesw.so. Since we are using + libncursesw.so as a + replacement of libncurses.so, edit the header file + so it will always use the wide-character data structure + definition compatible with libncursesw.so. +

+
+
+
+
+
+

+ Details on this package are located in Section 8.30.2, + “Contents of Ncurses.” +

+
+
+
+
+
+

+ 6.4. Bash-5.3 +

+
+
+
+
+
+

+ The Bash package contains the Bourne-Again Shell. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 72 MB +
+
+
+
+
+

+ 6.4.1. Installation of Bash +

+

+ Prepare Bash for compilation: +

+
./configure --prefix=/usr                      \
+            --build=$(sh support/config.guess) \
+            --host=$LFS_TGT                    \
+            --without-bash-malloc
+
+

+ The meaning of the configure options: +

+
+
+ --without-bash-malloc +
+
+

+ This option turns off the use of Bash's memory + allocation (malloc) + function which is known to cause segmentation faults. + By turning this option off, Bash will use the + malloc functions from + Glibc which are more stable. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ Make a link for the programs that use sh for a shell: +

+
ln -sv bash $LFS/bin/sh
+
+
+

+ Details on this package are located in Section 8.36.2, + “Contents of Bash.” +

+
+
+
+
+
+

+ 6.5. Coreutils-9.7 +

+
+
+
+
+
+

+ The Coreutils package contains the basic utility programs + needed by every operating system. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 181 MB +
+
+
+
+
+

+ 6.5.1. Installation of Coreutils +

+

+ Prepare Coreutils for compilation: +

+
./configure --prefix=/usr                     \
+            --host=$LFS_TGT                   \
+            --build=$(build-aux/config.guess) \
+            --enable-install-program=hostname \
+            --enable-no-install-program=kill,uptime
+
+

+ The meaning of the configure options: +

+
+
+ --enable-install-program=hostname +
+
+

+ This enables the hostname binary to be + built and installed – it is disabled by default but is + required by the Perl test suite. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ Move programs to their final expected locations. Although + this is not necessary in this temporary environment, we must + do so because some programs hardcode executable locations: +

+
mv -v $LFS/usr/bin/chroot              $LFS/usr/sbin
+mkdir -pv $LFS/usr/share/man/man8
+mv -v $LFS/usr/share/man/man1/chroot.1 $LFS/usr/share/man/man8/chroot.8
+sed -i 's/"1"/"8"/'                    $LFS/usr/share/man/man8/chroot.8
+
+
+

+ Details on this package are located in Section 8.59.2, + “Contents of Coreutils.” +

+
+
+
+
+
+

+ 6.6. Diffutils-3.12 +

+
+
+
+
+
+

+ The Diffutils package contains programs that show the + differences between files or directories. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 35 MB +
+
+
+
+
+

+ 6.6.1. Installation of Diffutils +

+

+ Prepare Diffutils for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            gl_cv_func_strcasecmp_works=y \
+            --build=$(./build-aux/config.guess)
+
+

+ The meaning of the configure options: +

+
+
+ gl_cv_func_strcasecmp_works=y +
+
+

+ This option specify the result of a check for the + strcasecmp. The check + requires running a compiled C program, and this is + impossible during cross-compilation because in general + a cross-compiled program cannot run on the host distro. + Normally for such a check the configure script + would use a fall-back value for cross-compilation, but + the fall-back value for this check is absent and the + configure + script would have no value to use and error out. The + upstream has already fixed the issue, but to apply the + fix we'd need to run autoconf that the + host distro may lack. So we just specify the check + result (y as we know the + strcasecmp function in + Glibc-2.42 works fine) instead, then configure will just + use the specified value and skip the check. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.60.2, + “Contents of Diffutils.” +

+
+
+
+
+
+

+ 6.7. File-5.46 +

+
+
+
+
+
+

+ The File package contains a utility for determining the type + of a given file or files. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 42 MB +
+
+
+
+
+

+ 6.7.1. Installation of File +

+

+ The file + command on the build host needs to be the same version as the + one we are building in order to create the signature file. + Run the following commands to make a temporary copy of the + file command: +

+
mkdir build
+pushd build
+  ../configure --disable-bzlib      \
+               --disable-libseccomp \
+               --disable-xzlib      \
+               --disable-zlib
+  make
+popd
+
+

+ The meaning of the new configure option: +

+
+
+ --disable-* +
+
+

+ The configuration script attempts to use some packages + from the host distribution if the corresponding library + files exist. It may cause compilation failure if a + library file exists, but the corresponding header files + do not. These options prevent using these unneeded + capabilities from the host. +

+
+
+
+

+ Prepare File for compilation: +

+
./configure --prefix=/usr --host=$LFS_TGT --build=$(./config.guess)
+

+ Compile the package: +

+
make FILE_COMPILE=$(pwd)/build/src/file
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ Remove the libtool archive file because it is harmful for + cross compilation: +

+
rm -v $LFS/usr/lib/libmagic.la
+
+
+

+ Details on this package are located in Section 8.11.2, + “Contents of File.” +

+
+
+
+
+
+

+ 6.8. Findutils-4.10.0 +

+
+
+
+
+
+

+ The Findutils package contains programs to find files. + Programs are provided to search through all the files in a + directory tree and to create, maintain, and search a database + (often faster than the recursive find, but unreliable unless + the database has been updated recently). Findutils also + supplies the xargs program, which can be + used to run a specified command on each file selected by a + search. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 48 MB +
+
+
+
+
+

+ 6.8.1. Installation of Findutils +

+

+ Prepare Findutils for compilation: +

+
./configure --prefix=/usr                   \
+            --localstatedir=/var/lib/locate \
+            --host=$LFS_TGT                 \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.62.2, + “Contents of Findutils.” +

+
+
+
+
+
+

+ 6.9. Gawk-5.3.2 +

+
+
+
+
+
+

+ The Gawk package contains programs for manipulating text + files. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 49 MB +
+
+
+
+
+

+ 6.9.1. Installation of Gawk +

+

+ First, ensure some unneeded files are not installed: +

+
sed -i 's/extras//' Makefile.in
+

+ Prepare Gawk for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.61.2, + “Contents of Gawk.” +

+
+
+
+
+
+

+ 6.10. Grep-3.12 +

+
+
+
+
+
+

+ The Grep package contains programs for searching through the + contents of files. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 32 MB +
+
+
+
+
+

+ 6.10.1. Installation of Grep +

+

+ Prepare Grep for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(./build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.35.2, + “Contents of Grep.” +

+
+
+
+
+
+

+ 6.11. Gzip-1.14 +

+
+
+
+
+
+

+ The Gzip package contains programs for compressing and + decompressing files. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 12 MB +
+
+
+
+
+

+ 6.11.1. Installation of Gzip +

+

+ Prepare Gzip for compilation: +

+
./configure --prefix=/usr --host=$LFS_TGT
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.65.2, + “Contents of Gzip.” +

+
+
+
+
+
+

+ 6.12. Make-4.4.1 +

+
+
+
+
+
+

+ The Make package contains a program for controlling the + generation of executables and other non-source files of a + package from source files. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 15 MB +
+
+
+
+
+

+ 6.12.1. Installation of Make +

+

+ Prepare Make for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.69.2, + “Contents of Make.” +

+
+
+
+
+
+

+ 6.13. Patch-2.8 +

+
+
+
+
+
+

+ The Patch package contains a program for modifying or + creating files by applying a “patch” file + typically created by the diff program. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 14 MB +
+
+
+
+
+

+ 6.13.1. Installation of Patch +

+

+ Prepare Patch for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.70.2, + “Contents of Patch.” +

+
+
+
+
+
+

+ 6.14. Sed-4.9 +

+
+
+
+
+
+

+ The Sed package contains a stream editor. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 21 MB +
+
+
+
+
+

+ 6.14.1. Installation of Sed +

+

+ Prepare Sed for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(./build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.31.2, “Contents + of Sed.” +

+
+
+
+
+
+

+ 6.15. Tar-1.35 +

+
+
+
+
+
+

+ The Tar package provides the ability to create tar archives + as well as perform various other kinds of archive + manipulation. Tar can be used on previously created archives + to extract files, to store additional files, or to update or + list files which were already stored. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 42 MB +
+
+
+
+
+

+ 6.15.1. Installation of Tar +

+

+ Prepare Tar for compilation: +

+
./configure --prefix=/usr   \
+            --host=$LFS_TGT \
+            --build=$(build-aux/config.guess)
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+
+
+

+ Details on this package are located in Section 8.71.2, “Contents + of Tar.” +

+
+
+
+
+
+

+ 6.16. Xz-5.8.1 +

+
+
+
+
+
+

+ The Xz package contains programs for compressing and + decompressing files. It provides capabilities for the lzma + and the newer xz compression formats. Compressing text files + with xz yields + a better compression percentage than with the traditional + gzip or + bzip2 commands. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 23 MB +
+
+
+
+
+

+ 6.16.1. Installation of Xz +

+

+ Prepare Xz for compilation: +

+
./configure --prefix=/usr                     \
+            --host=$LFS_TGT                   \
+            --build=$(build-aux/config.guess) \
+            --disable-static                  \
+            --docdir=/usr/share/doc/xz-5.8.1
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ Remove the libtool archive file because it is harmful for + cross compilation: +

+
rm -v $LFS/usr/lib/liblzma.la
+
+
+

+ Details on this package are located in Section 8.8.2, “Contents of + Xz.” +

+
+
+
+
+
+

+ 6.17. Binutils-2.45 - + Pass 2 +

+
+
+
+
+
+

+ The Binutils package contains a linker, an assembler, and + other tools for handling object files. +

+
+
+
+ Approximate build time: + 0.4 SBU +
+
+ Required disk space: + 548 MB +
+
+
+
+
+

+ 6.17.1. Installation of Binutils +

+

+ Binutils building system relies on an shipped libtool copy to + link against internal static libraries, but the libiberty and + zlib copies shipped in the package do not use libtool. This + inconsistency may cause produced binaries mistakenly linked + against libraries from the host distro. Work around this + issue: +

+
sed '6031s/$add_dir//' -i ltmain.sh
+

+ Create a separate build directory again: +

+
mkdir -v build
+cd       build
+

+ Prepare Binutils for compilation: +

+
../configure                   \
+    --prefix=/usr              \
+    --build=$(../config.guess) \
+    --host=$LFS_TGT            \
+    --disable-nls              \
+    --enable-shared            \
+    --enable-gprofng=no        \
+    --disable-werror           \
+    --enable-64-bit-bfd        \
+    --enable-new-dtags         \
+    --enable-default-hash-style=gnu
+
+

+ The meaning of the new configure options: +

+
+
+ --enable-shared +
+
+

+ Builds libbfd as a shared + library. +

+
+
+ --enable-64-bit-bfd +
+
+

+ Enables 64-bit support (on hosts with smaller word + sizes). This may not be needed on 64-bit systems, but + it does no harm. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ Remove the libtool archive files because they are harmful for + cross compilation, and remove unnecessary static libraries: +

+
rm -v $LFS/usr/lib/lib{bfd,ctf,ctf-nobfd,opcodes,sframe}.{a,la}
+
+
+

+ Details on this package are located in Section 8.20.2, + “Contents of Binutils.” +

+
+
+
+
+
+

+ 6.18. GCC-15.2.0 - Pass 2 +

+
+
+
+
+
+

+ The GCC package contains the GNU compiler collection, which + includes the C and C++ compilers. +

+
+
+
+ Approximate build time: + 4.5 SBU +
+
+ Required disk space: + 6.0 GB +
+
+
+
+
+

+ 6.18.1. Installation of GCC +

+

+ As in the first build of GCC, the GMP, MPFR, and MPC packages + are required. Unpack the tarballs and move them into the + required directories: +

+
tar -xf ../mpfr-4.2.2.tar.xz
+mv -v mpfr-4.2.2 mpfr
+tar -xf ../gmp-6.3.0.tar.xz
+mv -v gmp-6.3.0 gmp
+tar -xf ../mpc-1.3.1.tar.gz
+mv -v mpc-1.3.1 mpc
+

+ If you are building on x86_64, change the default directory + name for 64-bit libraries to “lib”: +

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

+ Override the build rules of the libgcc and libstdc++ headers + to allow building these libraries with POSIX threads support: +

+
sed '/thread_header =/s/@.*@/gthr-posix.h/' \
+    -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in
+

+ Create a separate build directory again: +

+
mkdir -v build
+cd       build
+

+ Before starting to build GCC, remember to unset any + environment variables that override the default optimization + flags. +

+

+ Now prepare GCC for compilation: +

+
../configure                   \
+    --build=$(../config.guess) \
+    --host=$LFS_TGT            \
+    --target=$LFS_TGT          \
+    --prefix=/usr              \
+    --with-build-sysroot=$LFS  \
+    --enable-default-pie       \
+    --enable-default-ssp       \
+    --disable-nls              \
+    --disable-multilib         \
+    --disable-libatomic        \
+    --disable-libgomp          \
+    --disable-libquadmath      \
+    --disable-libsanitizer     \
+    --disable-libssp           \
+    --disable-libvtv           \
+    --enable-languages=c,c++   \
+    LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc
+
+

+ The meaning of the new configure options: +

+
+
+ --with-build-sysroot=$LFS +
+
+

+ Normally, using --host ensures that a + cross-compiler is used for building GCC, and that + compiler knows that it has to look for headers and + libraries in $LFS. + However, the build system for GCC uses additional tools + which are not aware of this location. This switch is + needed so those tools will find the needed files in + $LFS, and not on the + host. +

+
+
+ --target=$LFS_TGT +
+
+

+ We are cross-compiling GCC, so it's impossible to build + target libraries (libgcc + and libstdc++) with the + GCC binaries compiled in this pass—those binaries won't + run on the host. The GCC build system will attempt to + use the host's C and C++ compilers as a workaround by + default. Building the GCC target libraries with a + different version of GCC is not supported, so using the + host's compilers may cause the build to fail. This + parameter ensures the libraries are built by GCC pass + 1. +

+
+
+ LDFLAGS_FOR_TARGET=... +
+
+

+ Allow libstdc++ to use + the libgcc being built in + this pass, instead of the previous version built in + gcc-pass1. The + previous version cannot properly support C++ exception + handling because it was built without libc support. +

+
+
+ --disable-libsanitizer +
+
+

+ Disable GCC sanitizer runtime libraries. They are not + needed for the temporary installation. In gcc-pass1 it was + implied by --disable-libstdcxx, and + now we can explicitly pass it. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make DESTDIR=$LFS install
+

+ As a finishing touch, create a utility symlink. Many programs + and scripts run cc instead of gcc, which is used to keep + programs generic and therefore usable on all kinds of UNIX + systems where the GNU C compiler is not always installed. + Running cc + leaves the system administrator free to decide which C + compiler to install: +

+
ln -sv gcc $LFS/usr/bin/cc
+
+
+

+ Details on this package are located in Section 8.29.2, “Contents + of GCC.” +

+
+
+
+
+
+
+

+ Chapter 7. Entering + Chroot and Building Additional Temporary Tools +

+
+
+
+
+
+
+
+

+ 7.1. Introduction +

+
+
+
+
+

+ This chapter shows how to build the last missing bits of the + temporary system: the tools needed to build the various + packages. Now that all circular dependencies have been + resolved, a “chroot” environment, completely isolated + from the host operating system (except for the running kernel), + can be used for the build. +

+

+ For proper operation of the isolated environment, some + communication with the running kernel must be established. This + is done via the so-called Virtual + Kernel File Systems, which will be mounted before + entering the chroot environment. You may want to verify that + they are mounted by issuing the findmnt command. +

+

+ Until Section 7.4, + “Entering the Chroot Environment”, the commands must be run + as root, with the LFS variable set. After entering chroot, all + commands are run as root, + fortunately without access to the OS of the computer you built + LFS on. Be careful anyway, as it is easy to destroy the whole + LFS system with bad commands. +

+
+
+
+
+

+ 7.2. Changing Ownership +

+
+
+
+
+
+

+ Note +

+

+ The commands in the remainder of this book must be performed + while logged in as user root + and no longer as user lfs. + Also, double check that $LFS is + set in root's environment. +

+
+

+ Currently, the whole directory hierarchy in $LFS is owned by the user lfs, a user that exists only on the host + system. If the directories and files under $LFS are kept as they are, they will be owned + by a user ID without a corresponding account. This is dangerous + because a user account created later could get this same user + ID and would own all the files under $LFS, thus exposing these files to possible + malicious manipulation. +

+

+ To address this issue, change the ownership of the $LFS/* directories to user root by running the following command: +

+
chown --from lfs -R root:root $LFS/{usr,var,etc,tools}
+case $(uname -m) in
+  x86_64) chown --from lfs -R root:root $LFS/lib64 ;;
+esac
+
+
+
+
+

+ 7.3. Preparing Virtual Kernel + File Systems +

+
+
+
+
+

+ Applications running in userspace utilize various file systems + created by the kernel to communicate with the kernel itself. + These file systems are virtual: no disk space is used for them. + The content of these file systems resides in memory. These file + systems must be mounted in the $LFS directory tree so the + applications can find them in the chroot environment. +

+

+ Begin by creating the directories on which these virtual file + systems will be mounted: +

+
mkdir -pv $LFS/{dev,proc,sys,run}
+
+

+ 7.3.1. Mounting and Populating /dev +

+

+ During a normal boot of an LFS system, the kernel + automatically mounts the devtmpfs file system on the /dev directory; the kernel creates device + nodes on that virtual file system during the boot process, or + when a device is first detected or accessed. The udev daemon + may change the ownership or permissions of the device nodes + created by the kernel, and create new device nodes or + symlinks, to ease the work of distro maintainers and system + administrators. (See Section 9.3.2.2, + “Device Node Creation” for details.) If the host kernel + supports devtmpfs, we can + simply mount a devtmpfs at + $LFS/dev and rely on the kernel + to populate it. +

+

+ But some host kernels lack devtmpfs support; these host distros use + different methods to create the content of /dev. So the only host-agnostic way to + populate the $LFS/dev directory + is by bind mounting the host system's /dev directory. A bind mount is a special + type of mount that makes a directory subtree or a file + visible at some other location. Use the following command to + do this. +

+
mount -v --bind /dev $LFS/dev
+
+
+

+ 7.3.2. Mounting Virtual Kernel + File Systems +

+

+ Now mount the remaining virtual kernel file systems: +

+
mount -vt devpts devpts -o gid=5,mode=0620 $LFS/dev/pts
+mount -vt proc proc $LFS/proc
+mount -vt sysfs sysfs $LFS/sys
+mount -vt tmpfs tmpfs $LFS/run
+
+

+ The meaning of the mount options for + devpts: +

+
+
+ gid=5 +
+
+

+ This ensures that all devpts-created device nodes are + owned by group ID 5. This is the ID we will use later + on for the tty group. + We use the group ID instead of a name, since the host + system might use a different ID for its tty group. +

+
+
+ mode=0620 +
+
+

+ This ensures that all devpts-created device nodes have + mode 0620 (user readable and writable, group writable). + Together with the option above, this ensures that + devpts will create device nodes that meet the + requirements of grantpt(), meaning the Glibc + pt_chown + helper binary (which is not installed by default) is + not necessary. +

+
+
+
+

+ In some host systems, /dev/shm + is a symbolic link to a directory, typically /run/shm. The /run tmpfs was mounted above + so in this case only a directory needs to be created with the + correct permissions. +

+

+ In other host systems /dev/shm + is a mount point for a tmpfs. In that case the mount of /dev + above will only create /dev/shm as a directory in the chroot + environment. In this situation we must explicitly mount a + tmpfs: +

+
if [ -h $LFS/dev/shm ]; then
+  install -v -d -m 1777 $LFS$(realpath /dev/shm)
+else
+  mount -vt tmpfs -o nosuid,nodev tmpfs $LFS/dev/shm
+fi
+
+
+
+
+
+

+ 7.4. Entering the Chroot + Environment +

+
+
+
+
+

+ Now that all the packages which are required to build the rest + of the needed tools are on the system, it is time to enter the + chroot environment and finish installing the temporary tools. + This environment will also be used to install the final system. + As user root, run the following + command to enter the environment that is, at the moment, + populated with nothing but temporary tools: +

+
chroot "$LFS" /usr/bin/env -i   \
+    HOME=/root                  \
+    TERM="$TERM"                \
+    PS1='(lfs chroot) \u:\w\$ ' \
+    PATH=/usr/bin:/usr/sbin     \
+    MAKEFLAGS="-j$(nproc)"      \
+    TESTSUITEFLAGS="-j$(nproc)" \
+    /bin/bash --login
+

+ If you don't want to use all available logical cores, replace + $(nproc) with the + number of logical cores you want to use for building packages + in this chapter and the following chapters. The test suites of + some packages (notably Autoconf, Libtool, and Tar) in Chapter 8 + are not affected by MAKEFLAGS, they + use a TESTSUITEFLAGS environment + variable instead. We set that here as well for running these + test suites with multiple cores. +

+

+ The -i option given to + the env command + will clear all the variables in the chroot environment. After + that, only the HOME, TERM, PS1, and + PATH variables are set again. The + TERM=$TERM construct + sets the TERM variable inside chroot + to the same value as outside chroot. This variable is needed so + programs like vim + and less can + operate properly. If other variables are desired, such as + CFLAGS or CXXFLAGS, this is a good place to set them. +

+

+ From this point on, there is no need to use the LFS variable any more because all work will be + restricted to the LFS file system; the chroot command runs the Bash + shell with the root (/) directory + set to $LFS. +

+

+ Notice that /tools/bin is not in + the PATH. This means that the cross + toolchain will no longer be used. +

+

+ Also note that the bash prompt will say + I have no name! This is + normal because the /etc/passwd + file has not been created yet. +

+
+

+ Note +

+

+ It is important that all the commands throughout the + remainder of this chapter and the following chapters are run + from within the chroot environment. If you leave this + environment for any reason (rebooting for example), ensure + that the virtual kernel filesystems are mounted as explained + in Section 7.3.1, + “Mounting and Populating /dev” and Section 7.3.2, + “Mounting Virtual Kernel File Systems” and enter chroot + again before continuing with the installation. +

+
+
+
+
+
+

+ 7.5. Creating Directories +

+
+
+
+
+

+ It is time to create the full directory structure in the LFS + file system. +

+
+

+ Note +

+

+ Some of the directories mentioned in this section may have + already been created earlier with explicit instructions, or + when installing some packages. They are repeated below for + completeness. +

+
+

+ Create some root-level directories that are not in the limited + set required in the previous chapters by issuing the following + command: +

+
mkdir -pv /{boot,home,mnt,opt,srv}
+

+ Create the required set of subdirectories below the root-level + by issuing the following commands: +

+
mkdir -pv /etc/{opt,sysconfig}
+mkdir -pv /lib/firmware
+mkdir -pv /media/{floppy,cdrom}
+mkdir -pv /usr/{,local/}{include,src}
+mkdir -pv /usr/lib/locale
+mkdir -pv /usr/local/{bin,lib,sbin}
+mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
+mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}
+mkdir -pv /usr/{,local/}share/man/man{1..8}
+mkdir -pv /var/{cache,local,log,mail,opt,spool}
+mkdir -pv /var/lib/{color,misc,locate}
+
+ln -sfv /run /var/run
+ln -sfv /run/lock /var/lock
+
+install -dv -m 0750 /root
+install -dv -m 1777 /tmp /var/tmp
+

+ Directories are, by default, created with permission mode 755, + but this is not desirable everywhere. In the commands above, + two changes are made—one to the home directory of user + root, and another to the + directories for temporary files. +

+

+ The first mode change ensures that not just anybody can enter + the /root directory—just like a + normal user would do with his or her own home directory. The + second mode change makes sure that any user can write to the + /tmp and /var/tmp directories, but cannot remove + another user's files from them. The latter is prohibited by the + so-called “sticky + bit,” the highest bit (1) in the 1777 bit mask. +

+
+

+ 7.5.1. FHS Compliance Note +

+

+ This directory tree is based on the Filesystem Hierarchy + Standard (FHS) (available at https://refspecs.linuxfoundation.org/fhs.shtml). + The FHS also specifies the optional existence of additional + directories such as /usr/local/games and /usr/share/games. In LFS, we create only + the directories that are really necessary. However, feel free + to create more directories, if you wish. +

+
+

+ Warning +

+

+ The FHS does not mandate the existence of the directory + /usr/lib64, and the LFS + editors have decided not to use it. For the instructions in + LFS and BLFS to work correctly, it is imperative that this + directory be non-existent. From time to time you should + verify that it does not exist, because it is easy to create + it inadvertently, and this will probably break your system. +

+
+
+
+
+
+
+

+ 7.6. Creating Essential + Files and Symlinks +

+
+
+
+
+

+ Historically, Linux maintained a list of the mounted file + systems in the file /etc/mtab. + Modern kernels maintain this list internally and expose it to + the user via the /proc + filesystem. To satisfy utilities that expect to find + /etc/mtab, create the following + symbolic link: +

+
ln -sv /proc/self/mounts /etc/mtab
+

+ Create a basic /etc/hosts file to + be referenced in some test suites, and in one of Perl's + configuration files as well: +

+
cat > /etc/hosts << EOF
+127.0.0.1  localhost $(hostname)
+::1        localhost
+EOF
+

+ In order for user root to be + able to login and for the name “root” to be + recognized, there must be relevant entries in the /etc/passwd and /etc/group files. +

+

+ Create the /etc/passwd file by + running the following command: +

+
cat > /etc/passwd << "EOF"
+root:x:0:0:root:/root:/bin/bash
+bin:x:1:1:bin:/dev/null:/usr/bin/false
+daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
+messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
+uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
+nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/false
+EOF
+

+ The actual password for root + will be set later. +

+

+ Create the /etc/group file by + running the following command: +

+
cat > /etc/group << "EOF"
+root:x:0:
+bin:x:1:daemon
+sys:x:2:
+kmem:x:3:
+tape:x:4:
+tty:x:5:
+daemon:x:6:
+floppy:x:7:
+disk:x:8:
+lp:x:9:
+dialout:x:10:
+audio:x:11:
+video:x:12:
+utmp:x:13:
+cdrom:x:15:
+adm:x:16:
+messagebus:x:18:
+input:x:24:
+mail:x:34:
+kvm:x:61:
+uuidd:x:80:
+wheel:x:97:
+users:x:999:
+nogroup:x:65534:
+EOF
+

+ The created groups are not part of any standard—they are groups + decided on in part by the requirements of the Udev + configuration in Chapter 9, and in part by common conventions + employed by a number of existing Linux distributions. In + addition, some test suites rely on specific users or groups. + The Linux Standard Base (LSB, available at https://refspecs.linuxfoundation.org/lsb.shtml) + only recommends that, besides the group root with a Group ID (GID) of 0, a group + bin with a GID of 1 be present. + The GID of 5 is widely used for the tty group, and the number 5 is also used in + /etc/fstab for the devpts filesystem. All other group names + and GIDs can be chosen freely by the system administrator since + well-written programs do not depend on GID numbers, but rather + use the group's name. +

+

+ The ID 65534 is used by the kernel for NFS and separate user + namespaces for unmapped users and groups (those exist on the + NFS server or the parent user namespace, but “do not exist” on the + local machine or in the separate namespace). We assign + nobody and nogroup to avoid an unnamed ID. But other + distros may treat this ID differently, so any portable program + should not depend on this assignment. +

+

+ Some tests in Chapter 8 + need a regular user. We add this user here and delete this + account at the end of that chapter. +

+
echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
+echo "tester:x:101:" >> /etc/group
+install -o tester -d /home/tester
+

+ To remove the “I have + no name!” prompt, start a new shell. Since the + /etc/passwd and /etc/group files have been created, user name + and group name resolution will now work: +

+
exec /usr/bin/bash --login
+

+ The login, + agetty, and + init programs + (and others) use a number of log files to record information + such as who was logged into the system and when. However, these + programs will not write to the log files if they do not already + exist. Initialize the log files and give them proper + permissions: +

+
touch /var/log/{btmp,lastlog,faillog,wtmp}
+chgrp -v utmp /var/log/lastlog
+chmod -v 664  /var/log/lastlog
+chmod -v 600  /var/log/btmp
+

+ The /var/log/wtmp file records + all logins and logouts. The /var/log/lastlog file records when each user + last logged in. The /var/log/faillog file records failed login + attempts. The /var/log/btmp file + records the bad login attempts. +

+
+

+ Note +

+

+ The /run/utmp file records the + users that are currently logged in. This file is created + dynamically in the boot scripts. +

+
+
+

+ Note +

+

+ The utmp, wtmp, btmp, + and lastlog files use 32-bit + integers for timestamps and they'll be fundamentally broken + after year 2038. Many packages have stopped using them and + other packages are going to stop using them. It is probably + best to consider them deprecated. +

+
+
+
+
+
+

+ 7.7. Gettext-0.26 +

+
+
+
+
+
+

+ The Gettext package contains utilities for + internationalization and localization. These allow programs + to be compiled with NLS (Native Language Support), enabling + them to output messages in the user's native language. +

+
+
+
+ Approximate build time: + 1.5 SBU +
+
+ Required disk space: + 463 MB +
+
+
+
+
+

+ 7.7.1. Installation of Gettext +

+

+ For our temporary set of tools, we only need to install three + programs from Gettext. +

+

+ Prepare Gettext for compilation: +

+
./configure --disable-shared
+
+

+ The meaning of the configure option: +

+
+
+ --disable-shared +
+
+

+ We do not need to install any of the shared Gettext + libraries at this time, therefore there is no need to + build them. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the msgfmt, msgmerge, and xgettext programs: +

+
cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin
+
+
+

+ Details on this package are located in Section 8.33.2, + “Contents of Gettext.” +

+
+
+
+
+
+

+ 7.8. Bison-3.8.2 +

+
+
+
+
+
+

+ The Bison package contains a parser generator. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 58 MB +
+
+
+
+
+

+ 7.8.1. Installation of Bison +

+

+ Prepare Bison for compilation: +

+
./configure --prefix=/usr \
+            --docdir=/usr/share/doc/bison-3.8.2
+
+

+ The meaning of the new configure option: +

+
+
+ --docdir=/usr/share/doc/bison-3.8.2 +
+
+

+ This tells the build system to install bison + documentation into a versioned directory. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.34.2, + “Contents of Bison.” +

+
+
+
+
+
+

+ 7.9. Perl-5.42.0 +

+
+
+
+
+
+

+ The Perl package contains the Practical Extraction and Report + Language. +

+
+
+
+ Approximate build time: + 0.6 SBU +
+
+ Required disk space: + 295 MB +
+
+
+
+
+

+ 7.9.1. Installation of Perl +

+

+ Prepare Perl for compilation: +

+
sh Configure -des                                         \
+             -D prefix=/usr                               \
+             -D vendorprefix=/usr                         \
+             -D useshrplib                                \
+             -D privlib=/usr/lib/perl5/5.42/core_perl     \
+             -D archlib=/usr/lib/perl5/5.42/core_perl     \
+             -D sitelib=/usr/lib/perl5/5.42/site_perl     \
+             -D sitearch=/usr/lib/perl5/5.42/site_perl    \
+             -D vendorlib=/usr/lib/perl5/5.42/vendor_perl \
+             -D vendorarch=/usr/lib/perl5/5.42/vendor_perl
+
+

+ The meaning of the Configure options: +

+
+
+ -des +
+
+

+ This is a combination of three options: -d uses + defaults for all items; -e ensures completion of all + tasks; -s silences non-essential output. +

+
+
+ -D + vendorprefix=/usr +
+
+

+ This ensures perl knows how to + tell packages where they should install their Perl + modules. +

+
+
+ -D + useshrplib +
+
+

+ Build libperl needed by + some Perl modules as a shared library, instead of a + static library. +

+
+
+ -D + privlib,-D archlib,-D sitelib,... +
+
+

+ These settings define where Perl looks for installed + modules. The LFS editors chose to put them in a + directory structure based on the MAJOR.MINOR version of + Perl (5.42) which allows upgrading Perl to newer patch + levels (the patch level is the last dot separated part + in the full version string like 5.42.0) without + reinstalling all of the modules. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.43.2, + “Contents of Perl.” +

+
+
+
+
+
+

+ 7.10. Python-3.13.7 +

+
+
+
+
+
+

+ The Python 3 package contains the Python development + environment. It is useful for object-oriented programming, + writing scripts, prototyping large programs, and developing + entire applications. Python is an interpreted computer + language. +

+
+
+
+ Approximate build time: + 0.5 SBU +
+
+ Required disk space: + 546 MB +
+
+
+
+
+

+ 7.10.1. Installation of Python +

+
+

+ Note +

+

+ There are two package files whose name starts with the + “python” prefix. The one to extract + from is Python-3.13.7.tar.xz + (notice the uppercase first letter). +

+
+

+ Prepare Python for compilation: +

+
./configure --prefix=/usr       \
+            --enable-shared     \
+            --without-ensurepip \
+            --without-static-libpython
+
+

+ The meaning of the configure option: +

+
+
+ --enable-shared +
+
+

+ This switch prevents installation of static libraries. +

+
+
+ --without-ensurepip +
+
+

+ This switch disables the Python package installer, + which is not needed at this stage. +

+
+
+ --without-static-libpython +
+
+

+ This switch prevents building a large, but unneeded, + static library. +

+
+
+
+

+ Compile the package: +

+
make
+
+

+ Note +

+

+ Some Python 3 modules can't be built now because the + dependencies are not installed yet. For the ssl module, a message Python requires a OpenSSL 1.1.1 or + newer is outputted. The message should be ignored. + Just make sure the toplevel make command has not + failed. The optional modules are not needed now and they + will be built in Chapter 8. +

+
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.51.2, + “Contents of Python 3.” +

+
+
+
+
+
+

+ 7.11. Texinfo-7.2 +

+
+
+
+
+
+

+ The Texinfo package contains programs for reading, writing, + and converting info pages. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 152 MB +
+
+
+
+
+

+ 7.11.1. Installation of Texinfo +

+

+ Prepare Texinfo for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.72.2, + “Contents of Texinfo.” +

+
+
+
+
+
+

+ 7.12. Util-linux-2.41.1 +

+
+
+
+
+
+

+ The Util-linux package contains miscellaneous utility + programs. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 192 MB +
+
+
+
+
+

+ 7.12.1. Installation of Util-linux +

+

+ The FHS recommends using the /var/lib/hwclock directory instead of the + usual /etc directory as the + location for the adjtime file. + Create this directory with: +

+
mkdir -pv /var/lib/hwclock
+

+ Prepare Util-linux for compilation: +

+
./configure --libdir=/usr/lib     \
+            --runstatedir=/run    \
+            --disable-chfn-chsh   \
+            --disable-login       \
+            --disable-nologin     \
+            --disable-su          \
+            --disable-setpriv     \
+            --disable-runuser     \
+            --disable-pylibmount  \
+            --disable-static      \
+            --disable-liblastlog2 \
+            --without-python      \
+            ADJTIME_PATH=/var/lib/hwclock/adjtime \
+            --docdir=/usr/share/doc/util-linux-2.41.1
+
+

+ The meaning of the configure options: +

+
+
+ ADJTIME_PATH=/var/lib/hwclock/adjtime +
+
+

+ This sets the location of the file recording + information about the hardware clock in accordance to + the FHS. This is not strictly needed for this temporary + tool, but it prevents creating a file at another + location, which would not be overwritten or removed + when building the final util-linux package. +

+
+
+ --libdir=/usr/lib +
+
+

+ This switch ensures the .so symlinks targeting the shared + library file in the same directory (/usr/lib) directly. +

+
+
+ --disable-* +
+
+

+ These switches prevent warnings about building + components that require packages not in LFS or not + installed yet. +

+
+
+ --without-python +
+
+

+ This switch disables using Python. It avoids trying to build + unneeded bindings. +

+
+
+ runstatedir=/run +
+
+

+ This switch sets the location of the socket used by + uuidd and + libuuid correctly. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make install
+
+
+

+ Details on this package are located in Section 8.79.2, + “Contents of Util-linux.” +

+
+
+
+
+
+

+ 7.13. Cleaning up and Saving + the Temporary System +

+
+
+
+
+
+

+ 7.13.1. Cleaning +

+

+ First, remove the currently installed documentation files to + prevent them from ending up in the final system, and to save + about 35 MB: +

+
rm -rf /usr/share/{info,man,doc}/*
+

+ Second, on a modern Linux system, the libtool .la files are + only useful for libltdl. No libraries in LFS are loaded by + libltdl, and it's known that some .la files can cause BLFS + package failures. Remove those files now: +

+
find /usr/{lib,libexec} -name \*.la -delete
+

+ The current system size is now about 3 GB, however the /tools + directory is no longer needed. It uses about 1 GB of disk + space. Delete it now: +

+
rm -rf /tools
+
+
+

+ 7.13.2. Backup +

+

+ At this point the essential programs and libraries have been + created and your current LFS system is in a good state. Your + system can now be backed up for later reuse. In case of fatal + failures in the subsequent chapters, it often turns out that + removing everything and starting over (more carefully) is the + best way to recover. Unfortunately, all the temporary files + will be removed, too. To avoid spending extra time to redo + something which has been done successfully, creating a backup + of the current LFS system may prove useful. +

+
+

+ Note +

+

+ All the remaining steps in this section are optional. + Nevertheless, as soon as you begin installing packages in + Chapter 8, + the temporary files will be overwritten. So it may be a + good idea to do a backup of the current system as described + below. +

+
+

+ The following steps are performed from outside the chroot + environment. That means you have to leave the chroot + environment first before continuing. The reason for that is + to get access to file system locations outside of the chroot + environment to store/read the backup archive, which ought not + be placed within the $LFS + hierarchy. +

+

+ If you have decided to make a backup, leave the chroot + environment: +

+
exit
+
+

+ Important +

+

+ All of the following instructions are executed by + root on your host system. + Take extra care about the commands you're going to run as + mistakes made here can modify your host system. Be aware + that the environment variable LFS is set for user lfs by default but may not be set for root. +

+

+ Whenever commands are to be executed by root, make sure you have set + LFS. +

+

+ This has been discussed in Section 2.6, + “Setting the $LFS Variable and the Umask.” +

+
+

+ Before making a backup, unmount the virtual file systems: +

+
mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
+umount $LFS/dev/pts
+umount $LFS/{sys,proc,run,dev}
+

+ Make sure you have at least 1 GB free disk space (the source + tarballs will be included in the backup archive) on the file + system containing the directory where you create the backup + archive. +

+

+ Note that the instructions below specify the home directory + of the host system's root + user, which is typically found on the root file system. + Replace $HOME by a directory of + your choice if you do not want to have the backup stored in + root's home directory. +

+

+ Create the backup archive by running the following command: +

+
+

+ Note +

+

+ Because the backup archive is compressed, it takes a + relatively long time (over 10 minutes) even on a reasonably + fast system. +

+
+
cd $LFS
+tar -cJpf $HOME/lfs-temp-tools-12.4.tar.xz .
+
+

+ Note +

+

+ If continuing to chapter 8, don't forget to reenter the + chroot environment as explained in the “Important” box + below. +

+
+
+
+

+ 7.13.3. Restore +

+

+ In case some mistakes have been made and you need to start + over, you can use this backup to restore the system and save + some recovery time. Since the sources are located under + $LFS, they are included in the + backup archive as well, so they do not need to be downloaded + again. After checking that $LFS is + set properly, you can restore the backup by executing the + following commands: +

+
+

+ Warning +

+

+ The following commands are extremely dangerous. If you run + rm -rf ./* as + the root user and you do + not change to the $LFS directory or the LFS environment variable is not set for the + root user, it will destroy + your entire host system. YOU ARE WARNED. +

+
+
cd $LFS
+rm -rf ./*
+tar -xpf $HOME/lfs-temp-tools-12.4.tar.xz
+

+ Again, double check that the environment has been set up + properly and continue building the rest of the system. +

+
+

+ Important +

+

+ If you left the chroot environment to create a backup or + restart building using a restore, remember to check that + the virtual file systems are still mounted (findmnt | grep $LFS). If + they are not mounted, remount them now as described in + Section 7.3, + “Preparing Virtual Kernel File Systems” and re-enter + the chroot environment (see Section 7.4, + “Entering the Chroot Environment”) before continuing. +

+
+
+
+
+
+
+
+
+

+ Part IV. Building the + LFS System +

+
+
+
+
+
+
+
+

+ Chapter 8. Installing + Basic System Software +

+
+
+
+
+
+
+
+

+ 8.1. Introduction +

+
+
+
+
+

+ In this chapter, we start constructing the LFS system in + earnest. +

+

+ The installation of this software is straightforward. Although + in many cases the installation instructions could be made + shorter and more generic, we have opted to provide the full + instructions for every package to minimize the possibilities + for mistakes. The key to learning what makes a Linux system + work is to know what each package is used for and why you (or + the system) may need it. +

+

+ We do not recommend using customized optimizations. They can + make a program run slightly faster, but they may also cause + compilation difficulties, and problems when running the + program. If a package refuses to compile with a customized + optimization, try to compile it without optimization and see if + that fixes the problem. Even if the package does compile when + using a customized optimization, there is the risk it may have + been compiled incorrectly because of the complex interactions + between the code and the build tools. Also note that the + -march and -mtune options using values not specified in + the book have not been tested. This may cause problems with the + toolchain packages (Binutils, GCC and Glibc). The small + potential gains achieved by customizing compiler optimizations + are often outweighed by the risks. First-time builders of LFS + are encouraged to build without custom optimizations. +

+

+ On the other hand, we keep the optimizations enabled by the + default configuration of the packages. In addition, we + sometimes explicitly enable an optimized configuration provided + by a package but not enabled by default. The package + maintainers have already tested these configurations and + consider them safe, so it's not likely they would break the + build. Generally the default configuration already enables + -O2 or -O3, so the resulting system will still run + very fast without any customized optimization, and be stable at + the same time. +

+

+ Before the installation instructions, each installation page + provides information about the package, including a concise + description of what it contains, approximately how long it will + take to build, and how much disk space is required during this + building process. Following the installation instructions, + there is a list of programs and libraries (along with brief + descriptions) that the package installs. +

+
+

+ Note +

+

+ The SBU values and required disk space include test suite + data for all applicable packages in Chapter 8. + SBU values have been calculated using four CPU cores (-j4) + for all operations unless specified otherwise. +

+
+
+

+ 8.1.1. About Libraries +

+

+ In general, the LFS editors discourage building and + installing static libraries. Most static libraries have been + made obsolete in a modern Linux system. In addition, linking + a static library into a program can be detrimental. If an + update to the library is needed to remove a security problem, + every program that uses the static library will need to be + relinked with the new library. Since the use of static + libraries is not always obvious, the relevant programs (and + the procedures needed to do the linking) may not even be + known. +

+

+ The procedures in this chapter remove or disable installation + of most static libraries. Usually this is done by passing a + --disable-static option to + configure. In + other cases, alternate means are needed. In a few cases, + especially Glibc and GCC, the use of static libraries remains + an essential feature of the package building process. +

+

+ For a more complete discussion of libraries, see + Libraries: Static or shared? in the BLFS book. +

+
+
+
+
+
+

+ 8.2. Package Management +

+
+
+
+
+

+ Package Management is an often requested addition to the LFS + Book. A Package Manager tracks the installation of files, + making it easier to remove and upgrade packages. A good package + manager will also handle the configuration files specially to + keep the user configuration when the package is reinstalled or + upgraded. Before you begin to wonder, NO—this section will not + talk about nor recommend any particular package manager. What + it does provide is a roundup of the more popular techniques and + how they work. The perfect package manager for you may be among + these techniques, or it may be a combination of two or more of + these techniques. This section briefly mentions issues that may + arise when upgrading packages. +

+

+ Some reasons why no package manager is mentioned in LFS or BLFS + include: +

+
+
    +
  • +

    + Dealing with package management takes the focus away from + the goals of these books—teaching how a Linux system is + built. +

    +
  • +
  • +

    + There are multiple solutions for package management, each + having its strengths and drawbacks. Finding one solution + that satisfies all audiences is difficult. +

    +
  • +
+
+

+ There are some hints written on the topic of package + management. Visit the Hints + Project and see if one of them fits your needs. +

+
+

+ 8.2.1. Upgrade Issues +

+

+ A Package Manager makes it easy to upgrade to newer versions + when they are released. Generally the instructions in the LFS + and BLFS books can be used to upgrade to the newer versions. + Here are some points that you should be aware of when + upgrading packages, especially on a running system. +

+
+
    +
  • +

    + If the Linux kernel needs to be upgraded (for example, + from 5.10.17 to 5.10.18 or 5.11.1), nothing else needs + to be rebuilt. The system will keep working fine thanks + to the well-defined interface between the kernel and + userspace. Specifically, Linux API headers need not be + upgraded along with the kernel. You will merely need to + reboot your system to use the upgraded kernel. +

    +
  • +
  • +

    + If Glibc needs to be upgraded to a newer version, + (e.g., from Glibc-2.36 to Glibc-2.42), some extra steps + are needed to avoid breaking the system. Read Section 8.5, + “Glibc-2.42” for details. +

    +
  • +
  • +

    + If a package containing a shared library is updated, + and if the name of the library[1] changes, then any packages + dynamically linked to the library must be recompiled, + to link against the newer library. For example, + consider a package foo-1.2.3 that installs a shared + library with the name libfoo.so.1. Suppose you upgrade the + package to a newer version foo-1.2.4 that installs a + shared library with the name libfoo.so.2. In this case, any + packages that are dynamically linked to libfoo.so.1 need to be recompiled to + link against libfoo.so.2 + in order to use the new library version. You should not + remove the old libraries until all the dependent + packages have been recompiled. +

    +
  • +
  • +

    + If a package is (directly or indirectly) linked to both + the old and new names of a shared library (for example, + the package links to both libfoo.so.2 and libbar.so.1, while the latter links + to libfoo.so.3), the + package may malfunction because the different revisions + of the shared library present incompatible definitions + for some symbol names. This can be caused by + recompiling some, but not all, of the packages linked + to the old shared library after the package providing + the shared library is upgraded. To avoid the issue, + users will need to rebuild every package linked to a + shared library with an updated revision (e.g. + libfoo.so.2 to libfoo.so.3) as soon as possible. +

    +
  • +
  • +

    + If a package containing a shared library is updated, + and the name of the library doesn't change, but the + version number of the library file decreases (for + example, the library is still named libfoo.so.1, but the name of the + library file is changed from libfoo.so.1.25 to libfoo.so.1.24), you should remove + the library file from the previously installed version + (libfoo.so.1.25 in this + case). Otherwise, a ldconfig command + (invoked by yourself from the command line, or by the + installation of some package) will reset the symlink + libfoo.so.1 to point to + the old library file because it seems to be a + “newer” version; its version + number is larger. This situation may arise if you have + to downgrade a package, or if the authors change the + versioning scheme for library files. +

    +
  • +
  • +

    + If a package containing a shared library is updated, + and the name of the library doesn't change, but a + severe issue (especially, a security vulnerability) is + fixed, all running programs linked to the shared + library should be restarted. The following command, run + as root after the + update is complete, will list which processes are using + the old versions of those libraries (replace libfoo with the name of + the library): +

    +
    grep -l 'libfoo.*deleted' /proc/*/maps | tr -cd 0-9\\n | xargs -r ps u
    +

    + If OpenSSH is being + used to access the system and it is linked to the + updated library, you must restart the sshd service, then + logout, login again, and run the preceding command + again to confirm that nothing is still using the + deleted libraries. +

    +
  • +
  • +

    + If an executable program or a shared library is + overwritten, the processes using the code or data in + that program or library may crash. The correct way to + update a program or a shared library without causing + the process to crash is to remove it first, then + install the new version. The install command + provided by coreutils + has already implemented this, and most packages use + that command to install binary files and libraries. + This means that you won't be troubled by this issue + most of the time. However, the install process of some + packages (notably SpiderMonkey in BLFS) just overwrites + the file if it exists; this causes a crash. So it's + safer to save your work and close unneeded running + processes before updating a package. +

    +
  • +
+
+
+
+

+ 8.2.2. Package Management Techniques +

+

+ The following are some common package management techniques. + Before making a decision on a package manager, do some + research on the various techniques, particularly the + drawbacks of each particular scheme. +

+
+
+
+
+

+ 8.2.2.1. It is All in + My Head! +

+
+
+
+

+ Yes, this is a package management technique. Some folks do + not need a package manager because they know the packages + intimately and know which files are installed by each + package. Some users also do not need any package management + because they plan on rebuilding the entire system whenever + a package is changed. +

+
+
+
+
+
+

+ 8.2.2.2. Install in + Separate Directories +

+
+
+
+

+ This is a simplistic package management technique that does + not need a special program to manage the packages. Each + package is installed in a separate directory. For example, + package foo-1.1 is installed in /opt/foo-1.1 and a symlink is made from + /opt/foo to /opt/foo-1.1. When a new version foo-1.2 + comes along, it is installed in /opt/foo-1.2 and the previous symlink is + replaced by a symlink to the new version. +

+

+ Environment variables such as PATH, MANPATH, + INFOPATH, PKG_CONFIG_PATH, CPPFLAGS, LDFLAGS, and the configuration file + /etc/ld.so.conf may need to + be expanded to include the corresponding subdirectories in + /opt/foo-x.y. +

+

+ This scheme is used by the BLFS book to install some very + large packages to make it easier to upgrade them. If you + install more than a few packages, this scheme becomes + unmanageable. And some packages (for example Linux API + headers and Glibc) may not work well with this scheme. + Never use this scheme + system-wide. +

+
+
+
+
+
+

+ 8.2.2.3. Symlink Style + Package Management +

+
+
+
+

+ This is a variation of the previous package management + technique. Each package is installed as in the previous + scheme. But instead of making the symlink via a generic + package name, each file is symlinked into the /usr hierarchy. This removes the need to + expand the environment variables. Though the symlinks can + be created by the user, many package managers use this + approach, and automate the creation of the symlinks. A few + of the popular ones include Stow, Epkg, Graft, and Depot. +

+

+ The installation script needs to be fooled, so the package + thinks it is installed in /usr though in reality it is installed in + the /usr/pkg hierarchy. + Installing in this manner is not usually a trivial task. + For example, suppose you are installing a package + libfoo-1.1. The following instructions may not install the + package properly: +

+
./configure --prefix=/usr/pkg/libfoo/1.1
+make
+make install
+

+ The installation will work, but the dependent packages may + not link to libfoo as you would expect. If you compile a + package that links against libfoo, you may notice that it + is linked to /usr/pkg/libfoo/1.1/lib/libfoo.so.1 + instead of /usr/lib/libfoo.so.1 as you would expect. + The correct approach is to use the DESTDIR variable to direct the installation. + This approach works as follows: +

+
./configure --prefix=/usr
+make
+make DESTDIR=/usr/pkg/libfoo/1.1 install
+

+ Most packages support this approach, but there are some + which do not. For the non-compliant packages, you may + either need to install the package manually, or you may + find that it is easier to install some problematic packages + into /opt. +

+
+
+
+
+
+

+ 8.2.2.4. Timestamp + Based +

+
+
+
+

+ In this technique, a file is timestamped before the + installation of the package. After the installation, a + simple use of the find command with the + appropriate options can generate a log of all the files + installed after the timestamp file was created. A package + manager that uses this approach is install-log. +

+

+ Though this scheme has the advantage of being simple, it + has two drawbacks. If, during installation, the files are + installed with any timestamp other than the current time, + those files will not be tracked by the package manager. + Also, this scheme can only be used when packages are + installed one at a time. The logs are not reliable if two + packages are installed simultaneously from two different + consoles. +

+
+
+
+
+
+

+ 8.2.2.5. Tracing + Installation Scripts +

+
+
+
+

+ In this approach, the commands that the installation + scripts perform are recorded. There are two techniques that + one can use: +

+

+ The LD_PRELOAD environment + variable can be set to point to a library to be preloaded + before installation. During installation, this library + tracks the packages that are being installed by attaching + itself to various executables such as cp, install, mv and tracking the + system calls that modify the filesystem. For this approach + to work, all the executables need to be dynamically linked + without the suid or sgid bit. Preloading the library may + cause some unwanted side-effects during installation. + Therefore, it's a good idea to perform some tests to ensure + that the package manager does not break anything, and that + it logs all the appropriate files. +

+

+ Another technique is to use strace, which logs all + the system calls made during the execution of the + installation scripts. +

+
+
+
+
+
+

+ 8.2.2.6. Creating + Package Archives +

+
+
+
+

+ In this scheme, the package installation is faked into a + separate tree as previously described in the symlink style + package management section. After the installation, a + package archive is created using the installed files. This + archive is then used to install the package on the local + machine or even on other machines. +

+

+ This approach is used by most of the package managers found + in the commercial distributions. Examples of package + managers that follow this approach are RPM (which, + incidentally, is required by the Linux + Standard Base Specification), pkg-utils, Debian's apt, + and Gentoo's Portage system. A hint describing how to adopt + this style of package management for LFS systems is located + at + https://www.linuxfromscratch.org/hints/downloads/files/fakeroot.txt. +

+

+ The creation of package files that include dependency + information is complex, and beyond the scope of LFS. +

+

+ Slackware uses a tar-based system for + package archives. This system purposely does not handle + package dependencies as more complex package managers do. + For details of Slackware package management, see https://www.slackbook.org/html/package-management.html. +

+
+
+
+
+
+

+ 8.2.2.7. User Based + Management +

+
+
+
+

+ This scheme, unique to LFS, was devised by Matthias + Benkmann, and is available from the Hints + Project. In this scheme, each package is installed as a + separate user into the standard locations. Files belonging + to a package are easily identified by checking the user ID. + The features and shortcomings of this approach are too + complex to describe in this section. For the details please + see the hint at + https://www.linuxfromscratch.org/hints/downloads/files/more_control_and_pkg_man.txt. +

+
+
+
+

+ 8.2.3. Deploying LFS on Multiple Systems +

+

+ One of the advantages of an LFS system is that there are no + files that depend on the position of files on a disk system. + Cloning an LFS build to another computer with the same + architecture as the base system is as simple as using + tar on the LFS + partition that contains the root directory (about 900MB + uncompressed for a basic LFS build), copying that file via + network transfer or CD-ROM / USB stick to the new system, and + expanding it. After that, a few configuration files will have + to be changed. Configuration files that may need to be + updated include: /etc/hosts, + /etc/fstab, /etc/passwd, /etc/group, /etc/shadow, + /etc/ld.so.conf, /etc/sysconfig/rc.site, /etc/sysconfig/network, and /etc/sysconfig/ifconfig.eth0. +

+

+ A custom kernel may be needed for the new system, depending + on differences in system hardware and the original kernel + configuration. +

+
+

+ Important +

+

+ If you want to deploy the LFS system onto a system with a + different CPU, when you build Section 8.21, “GMP-6.3.0” + and Section 8.50, + “Libffi-3.5.2” you must follow the notes about + overriding the architecture-specific optimization to + produce libraries suitable for both the host system and the + system(s) where you'll deploy the LFS system. Otherwise + you'll get Illegal + Instruction errors running LFS. +

+
+

+ Finally, the new system has to be made bootable via Section 10.4, + “Using GRUB to Set Up the Boot Process”. +

+
+
+
+
+
+

+ [1] The name of a shared library is the + string coded in the DT_SONAME + entry of its ELF dynamic section. You can get it with the + readelf -d <library file> | grep + SONAME command. In most cases it's suffixed + with .so.<a version + number>, but there are some cases + where it contains multiple numbers for versioning (like + libbz2.so.1.0), contains the + version number before the .so + suffix (like libbfd-2.45), or + does not contain any version number at all (for example + libmemusage.so). Generally + there is no correlation between the package version and the + version number(s) in the library name. +

+
+
+
+
+
+
+

+ 8.3. Man-pages-6.15 +

+
+
+
+
+
+

+ The Man-pages package contains over 2,400 man pages. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 52 MB +
+
+
+
+
+

+ 8.3.1. Installation of Man-pages +

+

+ Remove two man pages for password hashing functions. + Libxcrypt will provide a + better version of these man pages: +

+
rm -v man3/crypt*
+

+ Install Man-pages by running: +

+
make -R GIT=false prefix=/usr install
+
+

+ The meaning of the options: +

+
+
+ -R +
+
+

+ This prevents make from setting any + built-in variables. The building system of man-pages + does not work well with built-in variables, but + currently there is no way to disable them except + passing -R + explicitly via the command line. +

+
+
+ GIT=false +
+
+

+ This prevents the building system from emitting many + git: command not + found warnings lines. +

+
+
+
+
+
+

+ 8.3.2. + Contents of Man-pages +

+
+
+
+ Installed files: + various man pages +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ man + pages +

+
+

+ Describe C programming language functions, + important device files, and significant + configuration files +

+
+
+
+
+
+
+
+

+ 8.4. Iana-Etc-20250807 +

+
+
+
+
+
+

+ The Iana-Etc package provides data for network services and + protocols. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 4.8 MB +
+
+
+
+
+

+ 8.4.1. Installation of Iana-Etc +

+

+ For this package, we only need to copy the files into place: +

+
cp services protocols /etc
+
+
+

+ 8.4.2. + Contents of Iana-Etc +

+
+
+
+ Installed files: + /etc/protocols and + /etc/services +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ /etc/protocols +

+
+

+ Describes the various DARPA Internet protocols that + are available from the TCP/IP subsystem +

+
+

+ /etc/services +

+
+

+ Provides a mapping between friendly textual names + for internet services, and their underlying + assigned port numbers and protocol types +

+
+
+
+
+
+
+
+

+ 8.5. Glibc-2.42 +

+
+
+
+
+
+

+ The Glibc package contains the main C library. This library + provides the basic routines for allocating memory, searching + directories, opening and closing files, reading and writing + files, string handling, pattern matching, arithmetic, and so + on. +

+
+
+
+ Approximate build time: + 12 SBU +
+
+ Required disk space: + 3.3 GB +
+
+
+
+
+

+ 8.5.1. Installation of Glibc +

+

+ Some of the Glibc programs use the non-FHS compliant + /var/db directory to store + their runtime data. Apply the following patch to make such + programs store their runtime data in the FHS-compliant + locations: +

+
patch -Np1 -i ../glibc-2.42-fhs-1.patch
+

+ Now fix an issue which may break Valgrind in BLFS: +

+
sed -e '/unistd.h/i #include <string.h>' \
+    -e '/libc_rwlock_init/c\
+  __libc_rwlock_define_initialized (, reset_lock);\
+  memcpy (&lock, &reset_lock, sizeof (lock));' \
+    -i stdlib/abort.c 
+

+ The Glibc documentation recommends building Glibc in a + dedicated build directory: +

+
mkdir -v build
+cd       build
+

+ Ensure that the ldconfig and sln utilities will be + installed into /usr/sbin: +

+
echo "rootsbindir=/usr/sbin" > configparms
+

+ Prepare Glibc for compilation: +

+
../configure --prefix=/usr                   \
+             --disable-werror                \
+             --disable-nscd                  \
+             libc_cv_slibdir=/usr/lib        \
+             --enable-stack-protector=strong \
+             --enable-kernel=5.4
+
+

+ The meaning of the configure options: +

+
+
+ --disable-werror +
+
+

+ This option disables the -Werror option passed to GCC. + This is necessary for running the test suite. +

+
+
+ --enable-kernel=5.4 +
+
+

+ This option tells the build system that this Glibc may + be used with kernels as old as 5.4. This means + generating workarounds in case a system call introduced + in a later version cannot be used. +

+
+
+ --enable-stack-protector=strong +
+
+

+ This option increases system security by adding extra + code to check for buffer overflows, such as stack + smashing attacks. Note that Glibc always explicitly + overrides the default of GCC, so this option is still + needed even though we've already specified --enable-default-ssp for GCC. +

+
+
+ --disable-nscd +
+
+

+ Do not build the name service cache daemon which is no + longer used. +

+
+
+ libc_cv_slibdir=/usr/lib +
+
+

+ This variable sets the correct library for all systems. + We do not want lib64 to be used. +

+
+
+
+

+ Compile the package: +

+
make
+
+

+ Important +

+

+ In this section, the test suite for Glibc is considered + critical. Do not skip it under any circumstance. +

+
+

+ Generally a few tests do not pass. The test failures listed + below are usually safe to ignore. +

+
make check
+

+ You may see some test failures. The Glibc test suite is + somewhat dependent on the host system. A few failures out of + over 6000 tests can generally be ignored. This is a list of + the most common issues seen for recent versions of LFS: +

+
+
    +
  • +

    + io/tst-lchmod is + known to fail in the LFS chroot environment. +

    +
  • +
  • +

    + misc/tst-preadvwritev2 and + misc/tst-preadvwritev64v2 + are known to fail if the host kernel is Linux-6.14 or + later. +

    +
  • +
  • +

    + Some tests, for example nss/tst-nss-files-hosts-multi + and nptl/tst-thread-affinity* + are known to fail due to a timeout (especially when the + system is relatively slow and/or running the test suite + with multiple parallel make jobs). These tests can be + identified with: +

    +
    grep "Timed out" $(find -name \*.out)
    +

    + It's possible to re-run a single test with enlarged + timeout with TIMEOUTFACTOR=<factor> make + test t=<test + name>. For example, + TIMEOUTFACTOR=10 make + test t=nss/tst-nss-files-hosts-multi + will re-run nss/tst-nss-files-hosts-multi + with ten times the original timeout. +

    +
  • +
  • +

    + Additionally, some tests may fail with a relatively old + CPU model (for example elf/tst-cpu-features-cpuinfo) + or host kernel version (for example stdlib/tst-arc4random-thread). +

    +
  • +
+
+

+ Though it is a harmless message, the install stage of Glibc + will complain about the absence of /etc/ld.so.conf. Prevent this warning with: +

+
touch /etc/ld.so.conf
+

+ Fix the Makefile to skip an outdated sanity check that fails + with a modern Glibc configuration: +

+
sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
+
+

+ Important +

+

+ If upgrading Glibc to a new minor version (for example, + from Glibc-2.36 to Glibc-2.42) on a running LFS system, you + need to take some extra precautions to avoid breaking the + system: +

+
+
    +
  • +

    + Upgrading Glibc on a LFS system prior to 11.0 + (exclusive) is not supported. Rebuild LFS if you are + running such an old LFS system but you need a newer + Glibc. +

    +
  • +
  • +

    + If upgrading on a LFS system prior to 12.0 + (exclusive), install Libxcrypt following Section 8.27, + “Libxcrypt-4.4.38.” In addition to a normal + Libxcrypt + installation, you MUST + follow the note in Libxcrypt section to install + libcrypt.so.1* + (replacing libcrypt.so.1 from the prior Glibc + installation). +

    +
  • +
  • +

    + If upgrading on a LFS system prior to 12.1 + (exclusive), remove the nscd program: +

    +
    rm -f /usr/sbin/nscd
    +
  • +
  • +

    + Upgrade the kernel and reboot if it's older than 5.4 + (check the current version with uname -r) or if you + want to upgrade it anyway, following Section 10.3, + “Linux-6.16.1.” +

    +
  • +
  • +

    + Upgrade the kernel API headers if it's older than 5.4 + (check the current version with cat + /usr/include/linux/version.h) or if + you want to upgrade it anyway, following Section 5.4, + “Linux-6.16.1 API Headers” (but removing + $LFS from the cp command). +

    +
  • +
  • +

    + Perform a DESTDIR + installation and upgrade the Glibc shared libraries + on the system using one single install command: +

    +
    make DESTDIR=$PWD/dest install
    +install -vm755 dest/usr/lib/*.so.* /usr/lib
    +
  • +
+
+

+ It's imperative to strictly follow these steps above unless + you completely understand what you are doing. Any unexpected deviation may render the + system completely unusable. YOU ARE WARNED. +

+

+ Then continue to run the make + install command, the sed command against + /usr/bin/ldd, and the + commands to install the locales. Once they are finished, + reboot the system immediately. +

+

+ When the system has successfully rebooted, if you are + running a LFS system prior to 12.0 (exclusive) where GCC + was not built with the --disable-fixincludes option, + move two GCC headers into a better location and remove the + stale “fixed” copies of the Glibc headers: +

+
DIR=$(dirname $(gcc -print-libgcc-file-name))
+[ -e $DIR/include/limits.h ]    || mv $DIR/include{-fixed,}/limits.h
+[ -e $DIR/include/syslimits.h ] || mv $DIR/include{-fixed,}/syslimits.h
+rm -rfv $DIR/include-fixed/*
+unset DIR
+
+

+ Install the package: +

+
make install
+

+ Fix a hardcoded path to the executable loader in the + ldd script: +

+
sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
+

+ Next, install the locales that can make the system respond in + a different language. None of these locales are required, but + if some of them are missing, the test suites of some packages + will skip important test cases. +

+

+ Individual locales can be installed using the localedef program. E.g., + the second localedef command below + combines the /usr/share/i18n/locales/cs_CZ + charset-independent locale definition with the /usr/share/i18n/charmaps/UTF-8.gz charmap + definition and appends the result to the /usr/lib/locale/locale-archive file. The + following instructions will install the minimum set of + locales necessary for the optimal coverage of tests: +

+
localedef -i C -f UTF-8 C.UTF-8
+localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
+localedef -i de_DE -f ISO-8859-1 de_DE
+localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
+localedef -i de_DE -f UTF-8 de_DE.UTF-8
+localedef -i el_GR -f ISO-8859-7 el_GR
+localedef -i en_GB -f ISO-8859-1 en_GB
+localedef -i en_GB -f UTF-8 en_GB.UTF-8
+localedef -i en_HK -f ISO-8859-1 en_HK
+localedef -i en_PH -f ISO-8859-1 en_PH
+localedef -i en_US -f ISO-8859-1 en_US
+localedef -i en_US -f UTF-8 en_US.UTF-8
+localedef -i es_ES -f ISO-8859-15 es_ES@euro
+localedef -i es_MX -f ISO-8859-1 es_MX
+localedef -i fa_IR -f UTF-8 fa_IR
+localedef -i fr_FR -f ISO-8859-1 fr_FR
+localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
+localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
+localedef -i is_IS -f ISO-8859-1 is_IS
+localedef -i is_IS -f UTF-8 is_IS.UTF-8
+localedef -i it_IT -f ISO-8859-1 it_IT
+localedef -i it_IT -f ISO-8859-15 it_IT@euro
+localedef -i it_IT -f UTF-8 it_IT.UTF-8
+localedef -i ja_JP -f EUC-JP ja_JP
+localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
+localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro
+localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
+localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
+localedef -i se_NO -f UTF-8 se_NO.UTF-8
+localedef -i ta_IN -f UTF-8 ta_IN.UTF-8
+localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
+localedef -i zh_CN -f GB18030 zh_CN.GB18030
+localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
+localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
+

+ In addition, install the locale for your own country, + language and character set. +

+

+ Alternatively, install all the locales listed in the + glibc-2.42/localedata/SUPPORTED + file (it includes every locale listed above and many more) at + once with the following time-consuming command: +

+
make localedata/install-locales
+
+

+ Note +

+

+ Glibc now uses libidn2 when resolving internationalized + domain names. This is a run time dependency. If this + capability is needed, the instructions for installing + libidn2 are in the + BLFS libidn2 page. +

+
+
+
+

+ 8.5.2. Configuring + Glibc +

+
+
+
+
+

+ 8.5.2.1. Adding + nsswitch.conf +

+
+
+
+

+ The /etc/nsswitch.conf file + needs to be created because the Glibc defaults do not work + well in a networked environment. +

+

+ Create a new file /etc/nsswitch.conf by running the + following: +

+
cat > /etc/nsswitch.conf << "EOF"
+# Begin /etc/nsswitch.conf
+
+passwd: files
+group: files
+shadow: files
+
+hosts: files dns
+networks: files
+
+protocols: files
+services: files
+ethers: files
+rpc: files
+
+# End /etc/nsswitch.conf
+EOF
+
+
+
+
+
+

+ 8.5.2.2. Adding Time + Zone Data +

+
+
+
+

+ Install and set up the time zone data with the following: +

+
tar -xf ../../tzdata2025b.tar.gz
+
+ZONEINFO=/usr/share/zoneinfo
+mkdir -pv $ZONEINFO/{posix,right}
+
+for tz in etcetera southamerica northamerica europe africa antarctica  \
+          asia australasia backward; do
+    zic -L /dev/null   -d $ZONEINFO       ${tz}
+    zic -L /dev/null   -d $ZONEINFO/posix ${tz}
+    zic -L leapseconds -d $ZONEINFO/right ${tz}
+done
+
+cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
+zic -d $ZONEINFO -p America/New_York
+unset ZONEINFO tz
+
+

+ The meaning of the zic commands: +

+
+
+ zic -L + /dev/null ... +
+
+

+ This creates posix time zones without any leap + seconds. It is conventional to put these in both + zoneinfo and + zoneinfo/posix. It is + necessary to put the POSIX time zones in zoneinfo, otherwise various test + suites will report errors. On an embedded system, + where space is tight and you do not intend to ever + update the time zones, you could save 1.9 MB by not + using the posix + directory, but some applications or test suites might + produce some failures. +

+
+
+ zic -L + leapseconds ... +
+
+

+ This creates right time zones, including leap + seconds. On an embedded system, where space is tight + and you do not intend to ever update the time zones, + or care about the correct time, you could save 1.9MB + by omitting the right + directory. +

+
+
+ zic ... + -p ... +
+
+

+ This creates the posixrules file. We use New York + because POSIX requires the daylight saving time rules + to be in accordance with US rules. +

+
+
+
+

+ One way to determine the local time zone is to run the + following script: +

+
tzselect
+

+ After answering a few questions about the location, the + script will output the name of the time zone (e.g., + America/Edmonton). + There are also some other possible time zones listed in + /usr/share/zoneinfo such as + Canada/Eastern or + EST5EDT that are not + identified by the script but can be used. +

+

+ Then create the /etc/localtime file by running: +

+
ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime
+

+ Replace <xxx> with the name + of the time zone selected (e.g., Canada/Eastern). +

+
+
+
+
+
+

+ 8.5.2.3. Configuring the Dynamic + Loader +

+
+
+
+

+ By default, the dynamic loader (/lib/ld-linux.so.2) searches through + /usr/lib for dynamic + libraries that are needed by programs as they are run. + However, if there are libraries in directories other than + /usr/lib, these need to be + added to the /etc/ld.so.conf + file in order for the dynamic loader to find them. Two + directories that are commonly known to contain additional + libraries are /usr/local/lib + and /opt/lib, so add those + directories to the dynamic loader's search path. +

+

+ Create a new file /etc/ld.so.conf by running the following: +

+
cat > /etc/ld.so.conf << "EOF"
+# Begin /etc/ld.so.conf
+/usr/local/lib
+/opt/lib
+
+EOF
+

+ If desired, the dynamic loader can also search a directory + and include the contents of files found there. Generally + the files in this include directory are one line specifying + the desired library path. To add this capability run the + following commands: +

+
cat >> /etc/ld.so.conf << "EOF"
+# Add an include directory
+include /etc/ld.so.conf.d/*.conf
+
+EOF
+mkdir -pv /etc/ld.so.conf.d
+
+
+
+

+ 8.5.3. + Contents of Glibc +

+
+
+
+ Installed programs: + gencat, getconf, getent, iconv, + iconvconfig, ldconfig, ldd, lddlibc4, ld.so (symlink to + ld-linux-x86-64.so.2 or ld-linux.so.2), locale, + localedef, makedb, mtrace, pcprofiledump, pldd, sln, + sotruss, sprof, tzselect, xtrace, zdump, and zic +
+
+ Installed libraries: + ld-linux-x86-64.so.2, + ld-linux.so.2, libBrokenLocale.{a,so}, libanl.{a,so}, + libc.{a,so}, libc_nonshared.a, libc_malloc_debug.so, + libdl.{a,so.2}, libg.a, libm.{a,so}, libmcheck.a, + libmemusage.so, libmvec.{a,so}, libnsl.so.1, + libnss_compat.so, libnss_dns.so, libnss_files.so, + libnss_hesiod.so, libpcprofile.so, libpthread.{a,so.0}, + libresolv.{a,so}, librt.{a,so.1}, libthread_db.so, and + libutil.{a,so.1} +
+
+ Installed directories: + /usr/include/arpa, + /usr/include/bits, /usr/include/gnu, /usr/include/net, + /usr/include/netash, /usr/include/netatalk, + /usr/include/netax25, /usr/include/neteconet, + /usr/include/netinet, /usr/include/netipx, + /usr/include/netiucv, /usr/include/netpacket, + /usr/include/netrom, /usr/include/netrose, + /usr/include/nfs, /usr/include/protocols, + /usr/include/rpc, /usr/include/sys, /usr/lib/audit, + /usr/lib/gconv, /usr/lib/locale, /usr/libexec/getconf, + /usr/share/i18n, /usr/share/zoneinfo, and + /var/lib/nss_db +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gencat +

+
+

+ Generates message catalogues +

+
+

+ getconf +

+
+

+ Displays the system configuration values for file + system specific variables +

+
+

+ getent +

+
+

+ Gets entries from an administrative database +

+
+

+ iconv +

+
+

+ Performs character set conversion +

+
+

+ iconvconfig +

+
+

+ Creates fastloading iconv module + configuration files +

+
+

+ ldconfig +

+
+

+ Configures the dynamic linker runtime bindings +

+
+

+ ldd +

+
+

+ Reports which shared libraries are required by each + given program or shared library +

+
+

+ lddlibc4 +

+
+

+ Assists ldd with object + files. It does not exist on newer architectures + like x86_64 +

+
+

+ locale +

+
+

+ Prints various information about the current locale +

+
+

+ localedef +

+
+

+ Compiles locale specifications +

+
+

+ makedb +

+
+

+ Creates a simple database from textual input +

+
+

+ mtrace +

+
+

+ Reads and interprets a memory trace file and + displays a summary in human-readable format +

+
+

+ pcprofiledump +

+
+

+ Dump information generated by PC profiling +

+
+

+ pldd +

+
+

+ Lists dynamic shared objects used by running + processes +

+
+

+ sln +

+
+

+ A statically linked ln program +

+
+

+ sotruss +

+
+

+ Traces shared library procedure calls of a + specified command +

+
+

+ sprof +

+
+

+ Reads and displays shared object profiling data +

+
+

+ tzselect +

+
+

+ Asks the user about the location of the system and + reports the corresponding time zone description +

+
+

+ xtrace +

+
+

+ Traces the execution of a program by printing the + currently executed function +

+
+

+ zdump +

+
+

+ The time zone dumper +

+
+

+ zic +

+
+

+ The time zone compiler +

+
+

+ ld-*.so +

+
+

+ The helper program for shared library executables +

+
+

+ libBrokenLocale +

+
+

+ Used internally by Glibc as a gross hack to get + broken programs (e.g., some Motif applications) + running. See comments in glibc-2.42/locale/broken_cur_max.c + for more information +

+
+

+ libanl +

+
+

+ Dummy library containing no functions. Previously + was the asynchronous name lookup library, whose + functions are now in libc +

+
+

+ libc +

+
+

+ The main C library +

+
+

+ libc_malloc_debug +

+
+

+ Turns on memory allocation checking when preloaded +

+
+

+ libdl +

+
+

+ Dummy library containing no functions. Previously + was the dynamic linking interface library, whose + functions are now in libc +

+
+

+ libg +

+
+

+ Dummy library containing no functions. Previously + was a runtime library for g++ +

+
+

+ libm +

+
+

+ The mathematical library +

+
+

+ libmvec +

+
+

+ The vector math library, linked in as needed when + libm is used +

+
+

+ libmcheck +

+
+

+ Turns on memory allocation checking when linked to +

+
+

+ libmemusage +

+
+

+ Used by memusage to help + collect information about the memory usage of a + program +

+
+

+ libnsl +

+
+

+ The network services library, now deprecated +

+
+

+ libnss_* +

+
+

+ The Name Service Switch modules, containing + functions for resolving host names, user names, + group names, aliases, services, protocols, etc. + Loaded by libc + according to the configuration in /etc/nsswitch.conf +

+
+

+ libpcprofile +

+
+

+ Can be preloaded to PC profile an executable +

+
+

+ libpthread +

+
+

+ Dummy library containing no functions. Previously + contained functions providing most of the + interfaces specified by the POSIX.1c Threads + Extensions and the semaphore interfaces specified + by the POSIX.1b Real-time Extensions, now the + functions are in libc +

+
+

+ libresolv +

+
+

+ Contains functions for creating, sending, and + interpreting packets to the Internet domain name + servers +

+
+

+ librt +

+
+

+ Contains functions providing most of the interfaces + specified by the POSIX.1b Real-time Extensions +

+
+

+ libthread_db +

+
+

+ Contains functions useful for building debuggers + for multi-threaded programs +

+
+

+ libutil +

+
+

+ Dummy library containing no functions. Previously + contained code for “standard” + functions used in many different Unix utilities. + These functions are now in libc +

+
+
+
+
+
+
+
+

+ 8.6. Zlib-1.3.1 +

+
+
+
+
+
+

+ The Zlib package contains compression and decompression + routines used by some programs. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 6.4 MB +
+
+
+
+
+

+ 8.6.1. Installation of Zlib +

+

+ Prepare Zlib for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+

+ Remove a useless static library: +

+
rm -fv /usr/lib/libz.a
+
+
+

+ 8.6.2. + Contents of Zlib +

+
+
+
+ Installed libraries: + libz.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libz +

+
+

+ Contains compression and decompression functions + used by some programs +

+
+
+
+
+
+
+
+

+ 8.7. Bzip2-1.0.8 +

+
+
+
+
+
+

+ The Bzip2 package contains programs for compressing and + decompressing files. Compressing text files with bzip2 yields a much better + compression percentage than with the traditional gzip. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 7.3 MB +
+
+
+
+
+

+ 8.7.1. Installation of Bzip2 +

+

+ Apply a patch that will install the documentation for this + package: +

+
patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch
+

+ The following command ensures installation of symbolic links + are relative: +

+
sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile
+

+ Ensure the man pages are installed into the correct location: +

+
sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile
+

+ Prepare Bzip2 for compilation with: +

+
make -f Makefile-libbz2_so
+make clean
+
+

+ The meaning of the make parameter: +

+
+
+ -f + Makefile-libbz2_so +
+
+

+ This will cause Bzip2 to be built using a different + Makefile file, in this + case the Makefile-libbz2_so file, which + creates a dynamic libbz2.so library and links the Bzip2 + utilities against it. +

+
+
+
+

+ Compile and test the package: +

+
make
+

+ Install the programs: +

+
make PREFIX=/usr install
+

+ Install the shared library: +

+
cp -av libbz2.so.* /usr/lib
+ln -sv libbz2.so.1.0.8 /usr/lib/libbz2.so
+

+ Install the shared bzip2 binary into the + /usr/bin directory, and replace + two copies of bzip2 with symlinks: +

+
cp -v bzip2-shared /usr/bin/bzip2
+for i in /usr/bin/{bzcat,bunzip2}; do
+  ln -sfv bzip2 $i
+done
+

+ Remove a useless static library: +

+
rm -fv /usr/lib/libbz2.a
+
+
+

+ 8.7.2. + Contents of Bzip2 +

+
+
+
+ Installed programs: + bunzip2 (link to bzip2), bzcat + (link to bzip2), bzcmp (link to bzdiff), bzdiff, bzegrep + (link to bzgrep), bzfgrep (link to bzgrep), bzgrep, + bzip2, bzip2recover, bzless (link to bzmore), and + bzmore +
+
+ Installed libraries: + libbz2.so +
+
+ Installed directory: + /usr/share/doc/bzip2-1.0.8 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ bunzip2 +

+
+

+ Decompresses bzipped files +

+
+

+ bzcat +

+
+

+ Decompresses to standard output +

+
+

+ bzcmp +

+
+

+ Runs cmp on bzipped + files +

+
+

+ bzdiff +

+
+

+ Runs diff on bzipped + files +

+
+

+ bzegrep +

+
+

+ Runs egrep on bzipped + files +

+
+

+ bzfgrep +

+
+

+ Runs fgrep on bzipped + files +

+
+

+ bzgrep +

+
+

+ Runs grep on bzipped + files +

+
+

+ bzip2 +

+
+

+ Compresses files using the Burrows-Wheeler block + sorting text compression algorithm with Huffman + coding; the compression rate is better than that + achieved by more conventional compressors using + “Lempel-Ziv” algorithms, like + gzip +

+
+

+ bzip2recover +

+
+

+ Tries to recover data from damaged bzipped files +

+
+

+ bzless +

+
+

+ Runs less on bzipped + files +

+
+

+ bzmore +

+
+

+ Runs more on bzipped + files +

+
+

+ libbz2 +

+
+

+ The library implementing lossless, block-sorting + data compression, using the Burrows-Wheeler + algorithm +

+
+
+
+
+
+
+
+

+ 8.8. Xz-5.8.1 +

+
+
+
+
+
+

+ The Xz package contains programs for compressing and + decompressing files. It provides capabilities for the lzma + and the newer xz compression formats. Compressing text files + with xz yields + a better compression percentage than with the traditional + gzip or + bzip2 commands. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 24 MB +
+
+
+
+
+

+ 8.8.1. Installation of Xz +

+

+ Prepare Xz for compilation with: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/xz-5.8.1
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.8.2. Contents of + Xz +

+
+
+
+ Installed programs: + lzcat (link to xz), lzcmp (link to + xzdiff), lzdiff (link to xzdiff), lzegrep (link to + xzgrep), lzfgrep (link to xzgrep), lzgrep (link to + xzgrep), lzless (link to xzless), lzma (link to xz), + lzmadec, lzmainfo, lzmore (link to xzmore), unlzma (link + to xz), unxz (link to xz), xz, xzcat (link to xz), xzcmp + (link to xzdiff), xzdec, xzdiff, xzegrep (link to + xzgrep), xzfgrep (link to xzgrep), xzgrep, xzless, and + xzmore +
+
+ Installed libraries: + liblzma.so +
+
+ Installed directories: + /usr/include/lzma and + /usr/share/doc/xz-5.8.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ lzcat +

+
+

+ Decompresses to standard output +

+
+

+ lzcmp +

+
+

+ Runs cmp on LZMA + compressed files +

+
+

+ lzdiff +

+
+

+ Runs diff on LZMA + compressed files +

+
+

+ lzegrep +

+
+

+ Runs egrep on LZMA + compressed files +

+
+

+ lzfgrep +

+
+

+ Runs fgrep on LZMA + compressed files +

+
+

+ lzgrep +

+
+

+ Runs grep on LZMA + compressed files +

+
+

+ lzless +

+
+

+ Runs less on LZMA + compressed files +

+
+

+ lzma +

+
+

+ Compresses or decompresses files using the LZMA + format +

+
+

+ lzmadec +

+
+

+ A small and fast decoder for LZMA compressed files +

+
+

+ lzmainfo +

+
+

+ Shows information stored in the LZMA compressed + file header +

+
+

+ lzmore +

+
+

+ Runs more on LZMA + compressed files +

+
+

+ unlzma +

+
+

+ Decompresses files using the LZMA format +

+
+

+ unxz +

+
+

+ Decompresses files using the XZ format +

+
+

+ xz +

+
+

+ Compresses or decompresses files using the XZ + format +

+
+

+ xzcat +

+
+

+ Decompresses to standard output +

+
+

+ xzcmp +

+
+

+ Runs cmp on XZ + compressed files +

+
+

+ xzdec +

+
+

+ A small and fast decoder for XZ compressed files +

+
+

+ xzdiff +

+
+

+ Runs diff on XZ + compressed files +

+
+

+ xzegrep +

+
+

+ Runs egrep on XZ + compressed files +

+
+

+ xzfgrep +

+
+

+ Runs fgrep on XZ + compressed files +

+
+

+ xzgrep +

+
+

+ Runs grep on XZ + compressed files +

+
+

+ xzless +

+
+

+ Runs less on XZ + compressed files +

+
+

+ xzmore +

+
+

+ Runs more on XZ + compressed files +

+
+

+ liblzma +

+
+

+ The library implementing lossless, block-sorting + data compression, using the Lempel-Ziv-Markov chain + algorithm +

+
+
+
+
+
+
+
+

+ 8.9. Lz4-1.10.0 +

+
+
+
+
+
+

+ Lz4 is a lossless compression algorithm, providing + compression speed greater than 500 MB/s per core. It features + an extremely fast decoder, with speed in multiple GB/s per + core. Lz4 can work with Zstandard to allow both algorithms to + compress data faster. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 4.2 MB +
+
+
+
+
+

+ 8.9.1. Installation of Lz4 +

+

+ Compile the package: +

+
make BUILD_STATIC=no PREFIX=/usr
+

+ To test the results, issue: +

+
make -j1 check
+

+ Install the package: +

+
make BUILD_STATIC=no PREFIX=/usr install
+
+
+

+ 8.9.2. Contents + of Lz4 +

+
+
+
+ Installed programs: + lz4, lz4c (link to lz4), lz4cat + (link to lz4), and unlz4 (link to lz4) +
+
+ Installed library: + liblz4.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ lz4 +

+
+

+ Compresses or decompresses files using the LZ4 + format +

+
+

+ lz4c +

+
+

+ Compresses files using the LZ4 format +

+
+

+ lz4cat +

+
+

+ Lists the contents of a file compressed using the + LZ4 format +

+
+

+ unlz4 +

+
+

+ Decompresses files using the LZ4 format +

+
+

+ liblz4 +

+
+

+ The library implementing lossless data compression, + using the LZ4 algorithm +

+
+
+
+
+
+
+
+

+ 8.10. Zstd-1.5.7 +

+
+
+
+
+
+

+ Zstandard is a real-time compression algorithm, providing + high compression ratios. It offers a very wide range of + compression / speed trade-offs, while being backed by a very + fast decoder. +

+
+
+
+ Approximate build time: + 0.4 SBU +
+
+ Required disk space: + 86 MB +
+
+
+
+
+

+ 8.10.1. Installation of Zstd +

+

+ Compile the package: +

+
make prefix=/usr
+
+

+ Note +

+

+ In the test output there are several places that indicate + 'failed'. These are expected and only 'FAIL' is an actual + test failure. There should be no test failures. +

+
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make prefix=/usr install
+

+ Remove the static library: +

+
rm -v /usr/lib/libzstd.a
+
+
+

+ 8.10.2. + Contents of Zstd +

+
+
+
+ Installed programs: + zstd, zstdcat (link to zstd), + zstdgrep, zstdless, zstdmt (link to zstd), and unzstd + (link to zstd) +
+
+ Installed library: + libzstd.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ zstd +

+
+

+ Compresses or decompresses files using the ZSTD + format +

+
+

+ zstdgrep +

+
+

+ Runs grep on ZSTD + compressed files +

+
+

+ zstdless +

+
+

+ Runs less on ZSTD + compressed files +

+
+

+ libzstd +

+
+

+ The library implementing lossless data compression, + using the ZSTD algorithm +

+
+
+
+
+
+
+
+

+ 8.11. File-5.46 +

+
+
+
+
+
+

+ The File package contains a utility for determining the type + of a given file or files. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 19 MB +
+
+
+
+
+

+ 8.11.1. Installation of File +

+

+ Prepare File for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.11.2. + Contents of File +

+
+
+
+ Installed programs: + file +
+
+ Installed library: + libmagic.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ file +

+
+

+ Tries to classify each given file; it does this by + performing several tests—file system tests, magic + number tests, and language tests +

+
+

+ libmagic +

+
+

+ Contains routines for magic number recognition, + used by the file program +

+
+
+
+
+
+
+
+

+ 8.12. Readline-8.3 +

+
+
+
+
+
+

+ The Readline package is a set of libraries that offer + command-line editing and history capabilities. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 17 MB +
+
+
+
+
+

+ 8.12.1. Installation of Readline +

+

+ Reinstalling Readline will cause the old libraries to be + moved to <libraryname>.old. While this is normally not + a problem, in some cases it can trigger a linking bug in + ldconfig. This + can be avoided by issuing the following two seds: +

+
sed -i '/MV.*old/d' Makefile.in
+sed -i '/{OLDSUFF}/c:' support/shlib-install
+

+ Prevent hard coding library search paths (rpath) into the + shared libraries. This package does not need rpath for an + installation into the standard location, and rpath may + sometimes cause unwanted effects or even security issues: +

+
sed -i 's/-Wl,-rpath,[^ ]*//' support/shobj-conf
+

+ Prepare Readline for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --with-curses    \
+            --docdir=/usr/share/doc/readline-8.3
+
+

+ The meaning of the new configure option: +

+
+
+ --with-curses +
+
+

+ This option tells Readline that it can find the termcap + library functions in the curses library, not a separate + termcap library. This will generate the correct + readline.pc file. +

+
+
+
+

+ Compile the package: +

+
make SHLIB_LIBS="-lncursesw"
+
+

+ The meaning of the make option: +

+
+
+ SHLIB_LIBS="-lncursesw" +
+
+

+ This option forces Readline to link against the + libncursesw library. For + details see the “Shared Libraries” section in the + package's README file. +

+
+
+
+

+ This package does not come with a test suite. +

+

+ Install the package: +

+
make install
+

+ If desired, install the documentation: +

+
install -v -m644 doc/*.{ps,pdf,html,dvi} /usr/share/doc/readline-8.3
+
+
+

+ 8.12.2. Contents of Readline +

+
+
+
+ Installed libraries: + libhistory.so and + libreadline.so +
+
+ Installed directories: + /usr/include/readline and + /usr/share/doc/readline-8.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libhistory +

+
+

+ Provides a consistent user interface for recalling + lines of history +

+
+

+ libreadline +

+
+

+ Provides a set of commands for manipulating text + entered in an interactive session of a program +

+
+
+
+
+
+
+
+

+ 8.13. M4-1.4.20 +

+
+
+
+
+
+

+ The M4 package contains a macro processor. +

+
+
+
+ Approximate build time: + 0.4 SBU +
+
+ Required disk space: + 60 MB +
+
+
+
+
+

+ 8.13.1. Installation of M4 +

+

+ Prepare M4 for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.13.2. Contents + of M4 +

+
+
+
+ Installed program: + m4 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ m4 +

+
+

+ Copies the given files while expanding the macros + that they contain. These macros are either built-in + or user-defined and can take any number of + arguments. Besides performing macro expansion, + m4 + has built-in functions for including named files, + running Unix commands, performing integer + arithmetic, manipulating text, recursion, etc. The + m4 + program can be used either as a front end to a + compiler or as a macro processor in its own right +

+
+
+
+
+
+
+
+

+ 8.14. Bc-7.0.3 +

+
+
+
+
+
+

+ The Bc package contains an arbitrary precision numeric + processing language. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 7.8 MB +
+
+
+
+
+

+ 8.14.1. Installation of Bc +

+

+ Prepare Bc for compilation: +

+
CC='gcc -std=c99' ./configure --prefix=/usr -G -O3 -r
+
+

+ The meaning of the configure options: +

+
+
+ CC='gcc + -std=c99' +
+
+

+ This parameter specifies the compiler and C standard to + use. +

+
+
+ -G +
+
+

+ Omit parts of the test suite that won't work until the + bc program has been installed. +

+
+
+ -O3 +
+
+

+ Specify the optimization to use. +

+
+
+ -r +
+
+

+ Enable the use of Readline to improve the line + editing feature of bc. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test bc, run: +

+
make test
+

+ Install the package: +

+
make install
+
+
+

+ 8.14.2. Contents + of Bc +

+
+
+
+ Installed programs: + bc and dc +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ bc +

+
+

+ A command line calculator +

+
+

+ dc +

+
+

+ A reverse-polish command line calculator +

+
+
+
+
+
+
+
+

+ 8.15. Flex-2.6.4 +

+
+
+
+
+
+

+ The Flex package contains a utility for generating programs + that recognize patterns in text. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 33 MB +
+
+
+
+
+

+ 8.15.1. Installation of Flex +

+

+ Prepare Flex for compilation: +

+
./configure --prefix=/usr \
+            --docdir=/usr/share/doc/flex-2.6.4 \
+            --disable-static
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+

+ A few programs do not know about flex yet and try to run its + predecessor, lex. To support those + programs, create a symbolic link named lex that runs flex in lex emulation mode, and + also create the man page of lex as a symlink: +

+
ln -sv flex   /usr/bin/lex
+ln -sv flex.1 /usr/share/man/man1/lex.1
+
+
+

+ 8.15.2. + Contents of Flex +

+
+
+
+ Installed programs: + flex, flex++ (link to flex), and + lex (link to flex) +
+
+ Installed libraries: + libfl.so +
+
+ Installed directory: + /usr/share/doc/flex-2.6.4 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ flex +

+
+

+ A tool for generating programs that recognize + patterns in text; it allows for the versatility to + specify the rules for pattern-finding, eradicating + the need to develop a specialized program +

+
+

+ flex++ +

+
+

+ An extension of flex, is used for generating C++ + code and classes. It is a symbolic link to + flex +

+
+

+ lex +

+
+

+ A symbolic link that runs flex in + lex + emulation mode +

+
+

+ libfl +

+
+

+ The flex library +

+
+
+
+
+
+
+
+

+ 8.16. Tcl-8.6.16 +

+
+
+
+
+
+

+ The Tcl package contains the + Tool Command Language, a robust general-purpose scripting + language. The Expect package + is written in Tcl + (pronounced "tickle"). +

+
+
+
+ Approximate build time: + 3.0 SBU +
+
+ Required disk space: + 91 MB +
+
+
+
+
+

+ 8.16.1. Installation of Tcl +

+

+ This package and the next two (Expect and DejaGNU) are + installed to support running the test suites for Binutils, + GCC and other packages. Installing three packages for testing + purposes may seem excessive, but it is very reassuring, if + not essential, to know that the most important tools are + working properly. +

+

+ Prepare Tcl for compilation: +

+
SRCDIR=$(pwd)
+cd unix
+./configure --prefix=/usr           \
+            --mandir=/usr/share/man \
+            --disable-rpath
+
+

+ The meaning of the new configure + parameters: +

+
+
+ --disable-rpath +
+
+

+ This parameter prevents hard coding library search + paths (rpath) into the binary executable files and + shared libraries. This package does not need rpath for + an installation into the standard location, and rpath + may sometimes cause unwanted effects or even security + issues. +

+
+
+
+

+ Build the package: +

+
make
+
+sed -e "s|$SRCDIR/unix|/usr/lib|" \
+    -e "s|$SRCDIR|/usr/include|"  \
+    -i tclConfig.sh
+
+sed -e "s|$SRCDIR/unix/pkgs/tdbc1.1.10|/usr/lib/tdbc1.1.10|" \
+    -e "s|$SRCDIR/pkgs/tdbc1.1.10/generic|/usr/include|"     \
+    -e "s|$SRCDIR/pkgs/tdbc1.1.10/library|/usr/lib/tcl8.6|"  \
+    -e "s|$SRCDIR/pkgs/tdbc1.1.10|/usr/include|"             \
+    -i pkgs/tdbc1.1.10/tdbcConfig.sh
+
+sed -e "s|$SRCDIR/unix/pkgs/itcl4.3.2|/usr/lib/itcl4.3.2|" \
+    -e "s|$SRCDIR/pkgs/itcl4.3.2/generic|/usr/include|"    \
+    -e "s|$SRCDIR/pkgs/itcl4.3.2|/usr/include|"            \
+    -i pkgs/itcl4.3.2/itclConfig.sh
+
+unset SRCDIR
+

+ The various “sed” instructions after the + “make” + command remove references to the build directory from the + configuration files and replace them with the install + directory. This is not mandatory for the remainder of LFS, + but may be needed if a package built later uses Tcl. +

+

+ To test the results, issue: +

+
make test
+

+ Install the package: +

+
make install 
+chmod 644 /usr/lib/libtclstub8.6.a
+

+ Make the installed library writable so debugging symbols can + be removed later: +

+
chmod -v u+w /usr/lib/libtcl8.6.so
+

+ Install Tcl's headers. The next package, Expect, requires + them. +

+
make install-private-headers
+

+ Now make a necessary symbolic link: +

+
ln -sfv tclsh8.6 /usr/bin/tclsh
+

+ Rename a man page that conflicts with a Perl man page: +

+
mv /usr/share/man/man3/{Thread,Tcl_Thread}.3
+

+ Optionally, install the documentation by issuing the + following commands: +

+
cd ..
+tar -xf ../tcl8.6.16-html.tar.gz --strip-components=1
+mkdir -v -p /usr/share/doc/tcl-8.6.16
+cp -v -r  ./html/* /usr/share/doc/tcl-8.6.16
+
+
+

+ 8.16.2. Contents + of Tcl +

+
+
+
+ Installed programs: + tclsh (link to tclsh8.6) and + tclsh8.6 +
+
+ Installed library: + libtcl8.6.so and + libtclstub8.6.a +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ tclsh8.6 +

+
+

+ The Tcl command shell +

+
+

+ tclsh +

+
+

+ A link to tclsh8.6 +

+
+

+ libtcl8.6.so +

+
+

+ The Tcl library +

+
+

+ libtclstub8.6.a +

+
+

+ The Tcl Stub library +

+
+
+
+
+
+
+
+

+ 8.17. Expect-5.45.4 +

+
+
+
+
+
+

+ The Expect package contains + tools for automating, via scripted dialogues, interactive + applications such as telnet, ftp, passwd, fsck, rlogin, and tip. Expect is also useful for testing these + same applications as well as easing all sorts of tasks that + are prohibitively difficult with anything else. The + DejaGnu framework is written + in Expect. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 3.9 MB +
+
+
+
+
+

+ 8.17.1. Installation of Expect +

+

+ Expect needs PTYs to work. Verify that the PTYs are working + properly inside the chroot environment by performing a simple + test: +

+
python3 -c 'from pty import spawn; spawn(["echo", "ok"])'
+

+ This command should output ok. If, instead, the output includes + OSError: out of pty + devices, then the environment is not set up for proper + PTY operation. You need to exit from the chroot environment, + read Section 7.3, + “Preparing Virtual Kernel File Systems” again, and ensure + the devpts file system (and + other virtual kernel file systems) mounted correctly. Then + reenter the chroot environment following Section 7.4, + “Entering the Chroot Environment”. This issue needs to be + resolved before continuing, or the test suites requiring + Expect (for example the test suites of Bash, Binutils, GCC, + GDBM, and of course Expect itself) will fail + catastrophically, and other subtle breakages may also happen. +

+

+ Now, make some changes to allow the package with gcc-15.1 or + later: +

+
patch -Np1 -i ../expect-5.45.4-gcc15-1.patch
+

+ Prepare Expect for compilation: +

+
./configure --prefix=/usr           \
+            --with-tcl=/usr/lib     \
+            --enable-shared         \
+            --disable-rpath         \
+            --mandir=/usr/share/man \
+            --with-tclinclude=/usr/include
+
+

+ The meaning of the configure options: +

+
+
+ --with-tcl=/usr/lib +
+
+

+ This parameter is needed to tell configure where the + tclConfig.sh script + is located. +

+
+
+ --with-tclinclude=/usr/include +
+
+

+ This explicitly tells Expect where to find Tcl's + internal headers. +

+
+
+
+

+ Build the package: +

+
make
+

+ To test the results, issue: +

+
make test
+

+ Install the package: +

+
make install
+ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib
+
+
+

+ 8.17.2. + Contents of Expect +

+
+
+
+ Installed program: + expect +
+
+ Installed library: + libexpect5.45.4.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ expect +

+
+

+ Communicates with other interactive programs + according to a script +

+
+

+ libexpect-5.45.4.so +

+
+

+ Contains functions that allow Expect to be used as + a Tcl extension or to be used directly from C or + C++ (without Tcl) +

+
+
+
+
+
+
+
+

+ 8.18. DejaGNU-1.6.3 +

+
+
+
+
+
+

+ The DejaGnu package contains + a framework for running test suites on GNU tools. It is + written in expect, which itself uses + Tcl (Tool Command Language). +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 6.9 MB +
+
+
+
+
+

+ 8.18.1. Installation of DejaGNU +

+

+ The upstream recommends building DejaGNU in a dedicated build + directory: +

+
mkdir -v build
+cd       build
+

+ Prepare DejaGNU for compilation: +

+
../configure --prefix=/usr
+makeinfo --html --no-split -o doc/dejagnu.html ../doc/dejagnu.texi
+makeinfo --plaintext       -o doc/dejagnu.txt  ../doc/dejagnu.texi
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+install -v -dm755  /usr/share/doc/dejagnu-1.6.3
+install -v -m644   doc/dejagnu.{html,txt} /usr/share/doc/dejagnu-1.6.3
+
+
+

+ 8.18.2. + Contents of DejaGNU +

+
+
+
+ Installed program: + dejagnu and runtest +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ dejagnu +

+
+

+ DejaGNU auxiliary command launcher +

+
+

+ runtest +

+
+

+ A wrapper script that locates the proper + expect shell and + then runs DejaGNU +

+
+
+
+
+
+
+
+

+ 8.19. Pkgconf-2.5.1 +

+
+
+
+
+
+

+ The pkgconf package is a successor to pkg-config and contains + a tool for passing the include path and/or library paths to + build tools during the configure and make phases of package + installations. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 5.0 MB +
+
+
+
+
+

+ 8.19.1. Installation of Pkgconf +

+

+ Prepare Pkgconf for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/pkgconf-2.5.1
+

+ Compile the package: +

+
make
+

+ Install the package: +

+
make install
+

+ To maintain compatibility with the original Pkg-config create + two symlinks: +

+
ln -sv pkgconf   /usr/bin/pkg-config
+ln -sv pkgconf.1 /usr/share/man/man1/pkg-config.1
+
+
+

+ 8.19.2. + Contents of Pkgconf +

+
+
+
+ Installed programs: + pkgconf, pkg-config (link to + pkgconf), and bomtool +
+
+ Installed library: + libpkgconf.so +
+
+ Installed directory: + /usr/share/doc/pkgconf-2.5.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ pkgconf +

+
+

+ Returns meta information for the specified library + or package +

+
+

+ bomtool +

+
+

+ Generates a Software Bill Of Materials from + pkg-config .pc files +

+
+

+ libpkgconf +

+
+

+ Contains most of pkgconf's functionality, while + allowing other tools like IDEs and compilers to use + its frameworks +

+
+
+
+
+
+
+
+

+ 8.20. Binutils-2.45 +

+
+
+
+
+
+

+ The Binutils package contains a linker, an assembler, and + other tools for handling object files. +

+
+
+
+ Approximate build time: + 1.6 SBU +
+
+ Required disk space: + 832 MB +
+
+
+
+
+

+ 8.20.1. Installation of Binutils +

+

+ The Binutils documentation recommends building Binutils in a + dedicated build directory: +

+
mkdir -v build
+cd       build
+

+ Prepare Binutils for compilation: +

+
../configure --prefix=/usr       \
+             --sysconfdir=/etc   \
+             --enable-ld=default \
+             --enable-plugins    \
+             --enable-shared     \
+             --disable-werror    \
+             --enable-64-bit-bfd \
+             --enable-new-dtags  \
+             --with-system-zlib  \
+             --enable-default-hash-style=gnu
+
+

+ The meaning of the new configure + parameters: +

+
+
+ --enable-ld=default +
+
+

+ Build the original bfd linker and install it as both ld + (the default linker) and ld.bfd. +

+
+
+ --enable-plugins +
+
+

+ Enables plugin support for the linker. +

+
+
+ --with-system-zlib +
+
+

+ Use the installed zlib library instead of building the + included version. +

+
+
+
+

+ Compile the package: +

+
make tooldir=/usr
+
+

+ The meaning of the make parameter: +

+
+
+ tooldir=/usr +
+
+

+ Normally, the tooldir (the directory where the + executables will ultimately be located) is set to + $(exec_prefix)/$(target_alias). For + example, x86_64 machines would expand that to + /usr/x86_64-pc-linux-gnu. + Because this is a custom system, this target-specific + directory in /usr is not + required. $(exec_prefix)/$(target_alias) would + be used if the system were used to cross-compile (for + example, compiling a package on an Intel machine that + generates code that can be executed on PowerPC + machines). +

+
+
+
+
+

+ Important +

+

+ The test suite for Binutils in this section is considered + critical. Do not skip it under any circumstances. +

+
+

+ Test the results: +

+
make -k check
+

+ For a list of failed tests, run: +

+
grep '^FAIL:' $(find -name '*.log')
+

+ Install the package: +

+
make tooldir=/usr install
+

+ Remove useless static libraries and other files: +

+
rm -rfv /usr/lib/lib{bfd,ctf,ctf-nobfd,gprofng,opcodes,sframe}.a \
+        /usr/share/doc/gprofng/
+
+
+

+ 8.20.2. Contents of Binutils +

+
+
+
+ Installed programs: + addr2line, ar, as, c++filt, dwp, + elfedit, gprof, gprofng, ld, ld.bfd, nm, objcopy, + objdump, ranlib, readelf, size, strings, and strip +
+
+ Installed libraries: + libbfd.so, libctf.so, + libctf-nobfd.so, libgprofng.so, libopcodes.so, and + libsframe.so +
+
+ Installed directory: + /usr/lib/ldscripts +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ addr2line +

+
+

+ Translates program addresses to file names and line + numbers; given an address and the name of an + executable, it uses the debugging information in + the executable to determine which source file and + line number are associated with the address +

+
+

+ ar +

+
+

+ Creates, modifies, and extracts from archives +

+
+

+ as +

+
+

+ An assembler that assembles the output of + gcc + into object files +

+
+

+ c++filt +

+
+

+ Used by the linker to de-mangle C++ and Java + symbols and to keep overloaded functions from + clashing +

+
+

+ dwp +

+
+

+ The DWARF packaging utility +

+
+

+ elfedit +

+
+

+ Updates the ELF headers of ELF files +

+
+

+ gprof +

+
+

+ Displays call graph profile data +

+
+

+ gprofng +

+
+

+ Gathers and analyzes performance data +

+
+

+ ld +

+
+

+ A linker that combines a number of object and + archive files into a single file, relocating their + data and tying up symbol references +

+
+

+ ld.bfd +

+
+

+ A hard link to ld +

+
+

+ nm +

+
+

+ Lists the symbols occurring in a given object file +

+
+

+ objcopy +

+
+

+ Translates one type of object file into another +

+
+

+ objdump +

+
+

+ Displays information about the given object file, + with options controlling the particular information + to display; the information shown is useful to + programmers who are working on the compilation + tools +

+
+

+ ranlib +

+
+

+ Generates an index of the contents of an archive + and stores it in the archive; the index lists all + of the symbols defined by archive members that are + relocatable object files +

+
+

+ readelf +

+
+

+ Displays information about ELF type binaries +

+
+

+ size +

+
+

+ Lists the section sizes and the total size for the + given object files +

+
+

+ strings +

+
+

+ Outputs, for each given file, the sequences of + printable characters that are of at least the + specified length (defaulting to four); for object + files, it prints, by default, only the strings from + the initializing and loading sections while for + other types of files, it scans the entire file +

+
+

+ strip +

+
+

+ Discards symbols from object files +

+
+

+ libbfd +

+
+

+ The Binary File Descriptor library +

+
+

+ libctf +

+
+

+ The Compat ANSI-C Type Format debugging support + library +

+
+

+ libctf-nobfd +

+
+

+ A libctf variant which does not use libbfd + functionality +

+
+

+ libgprofng +

+
+

+ A library containing most routines used by + gprofng +

+
+

+ libopcodes +

+
+

+ A library for dealing with opcodes—the “readable + text” versions of instructions for + the processor; it is used for building utilities + like objdump +

+
+

+ libsframe +

+
+

+ A library to support online backtracing using a + simple unwinder +

+
+
+
+
+
+
+
+

+ 8.21. GMP-6.3.0 +

+
+
+
+
+
+

+ The GMP package contains math libraries. These have useful + functions for arbitrary precision arithmetic. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 54 MB +
+
+
+
+
+

+ 8.21.1. Installation of GMP +

+
+

+ Note +

+

+ If you are building for 32-bit x86, but you have a CPU + which is capable of running 64-bit code and you have specified + CFLAGS in the environment, the + configure script will attempt to configure for 64-bits and + fail. Avoid this by invoking the configure command below + with +

+
ABI=32 ./configure ...
+
+
+

+ Note +

+

+ The default settings of GMP produce libraries optimized for + the host processor. If libraries suitable for processors + less capable than the host's CPU are desired, generic + libraries can be created by appending the --host=none-linux-gnu option to the + configure + command. +

+
+

+ First, make an adjustment for compatibility with gcc-15 and + later: +

+
sed -i '/long long t1;/,+1s/()/(...)/' configure
+

+ Prepare GMP for compilation: +

+
./configure --prefix=/usr    \
+            --enable-cxx     \
+            --disable-static \
+            --docdir=/usr/share/doc/gmp-6.3.0
+
+

+ The meaning of the new configure options: +

+
+
+ --enable-cxx +
+
+

+ This parameter enables C++ support +

+
+
+ --docdir=/usr/share/doc/gmp-6.3.0 +
+
+

+ This variable specifies the correct place for the + documentation. +

+
+
+
+

+ Compile the package and generate the HTML documentation: +

+
make
+make html
+
+

+ Important +

+

+ The test suite for GMP in this section is considered + critical. Do not skip it under any circumstances. +

+
+

+ Test the results: +

+
make check 2>&1 | tee gmp-check-log
+
+

+ Caution +

+

+ The code in gmp is highly optimized for the processor where + it is built. Occasionally, the code that detects the + processor misidentifies the system capabilities and there + will be errors in the tests or other applications using the + gmp libraries with the message Illegal instruction. In this case, + gmp should be reconfigured with the option --host=none-linux-gnu and rebuilt. +

+
+

+ Ensure that at least 199 tests in the test suite passed. + Check the results by issuing the following command: +

+
awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log
+

+ Install the package and its documentation: +

+
make install
+make install-html
+
+
+

+ 8.21.2. Contents + of GMP +

+
+
+
+ Installed libraries: + libgmp.so and libgmpxx.so +
+
+ Installed directory: + /usr/share/doc/gmp-6.3.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ libgmp +

+
+

+ Contains precision math functions +

+
+

+ libgmpxx +

+
+

+ Contains C++ precision math functions +

+
+
+
+
+
+
+
+

+ 8.22. MPFR-4.2.2 +

+
+
+
+
+
+

+ The MPFR package contains functions for multiple precision + math. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 43 MB +
+
+
+
+
+

+ 8.22.1. Installation of MPFR +

+

+ Prepare MPFR for compilation: +

+
./configure --prefix=/usr        \
+            --disable-static     \
+            --enable-thread-safe \
+            --docdir=/usr/share/doc/mpfr-4.2.2
+

+ Compile the package and generate the HTML documentation: +

+
make
+make html
+
+

+ Important +

+

+ The test suite for MPFR in this section is considered + critical. Do not skip it under any circumstances. +

+
+

+ Test the results and ensure that all 198 tests passed: +

+
make check
+

+ Install the package and its documentation: +

+
make install
+make install-html
+
+
+

+ 8.22.2. + Contents of MPFR +

+
+
+
+ Installed libraries: + libmpfr.so +
+
+ Installed directory: + /usr/share/doc/mpfr-4.2.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libmpfr +

+
+

+ Contains multiple-precision math functions +

+
+
+
+
+
+
+
+

+ 8.23. MPC-1.3.1 +

+
+
+
+
+
+

+ The MPC package contains a library for the arithmetic of + complex numbers with arbitrarily high precision and correct + rounding of the result. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 22 MB +
+
+
+
+
+

+ 8.23.1. Installation of MPC +

+

+ Prepare MPC for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/mpc-1.3.1
+

+ Compile the package and generate the HTML documentation: +

+
make
+make html
+

+ To test the results, issue: +

+
make check
+

+ Install the package and its documentation: +

+
make install
+make install-html
+
+
+

+ 8.23.2. Contents + of MPC +

+
+
+
+ Installed libraries: + libmpc.so +
+
+ Installed directory: + /usr/share/doc/mpc-1.3.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libmpc +

+
+

+ Contains complex math functions +

+
+
+
+
+
+
+
+

+ 8.24. Attr-2.5.2 +

+
+
+
+
+
+

+ The Attr package contains utilities to administer the + extended attributes of filesystem objects. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 4.1 MB +
+
+
+
+
+

+ 8.24.1. Installation of Attr +

+

+ Prepare Attr for compilation: +

+
./configure --prefix=/usr     \
+            --disable-static  \
+            --sysconfdir=/etc \
+            --docdir=/usr/share/doc/attr-2.5.2
+

+ Compile the package: +

+
make
+

+ The tests must be run on a filesystem that supports extended + attributes such as the ext2, ext3, or ext4 filesystems. To + test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.24.2. + Contents of Attr +

+
+
+
+ Installed programs: + attr, getfattr, and setfattr +
+
+ Installed library: + libattr.so +
+
+ Installed directories: + /usr/include/attr and + /usr/share/doc/attr-2.5.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ attr +

+
+

+ Extends attributes on filesystem objects +

+
+

+ getfattr +

+
+

+ Gets the extended attributes of filesystem objects +

+
+

+ setfattr +

+
+

+ Sets the extended attributes of filesystem objects +

+
+

+ libattr +

+
+

+ Contains the library functions for manipulating + extended attributes +

+
+
+
+
+
+
+
+

+ 8.25. Acl-2.3.2 +

+
+
+
+
+
+

+ The Acl package contains utilities to administer Access + Control Lists, which are used to define fine-grained + discretionary access rights for files and directories. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 6.5 MB +
+
+
+
+
+

+ 8.25.1. Installation of Acl +

+

+ Prepare Acl for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/acl-2.3.2
+

+ Compile the package: +

+
make
+

+ The Acl tests must be run on a filesystem that supports + access controls. To test the results, issue: +

+
make check
+

+ One test named test/cp.test is + known to fail because Coreutils is not built with the + Acl support yet. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.25.2. Contents + of Acl +

+
+
+
+ Installed programs: + chacl, getfacl, and setfacl +
+
+ Installed library: + libacl.so +
+
+ Installed directories: + /usr/include/acl and + /usr/share/doc/acl-2.3.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ chacl +

+
+

+ Changes the access control list of a file or + directory +

+
+

+ getfacl +

+
+

+ Gets file access control lists +

+
+

+ setfacl +

+
+

+ Sets file access control lists +

+
+

+ libacl +

+
+

+ Contains the library functions for manipulating + Access Control Lists +

+
+
+
+
+
+
+
+

+ 8.26. Libcap-2.76 +

+
+
+
+
+
+

+ The Libcap package implements the userspace interface to the + POSIX 1003.1e capabilities available in Linux kernels. These + capabilities partition the all-powerful root privilege into a + set of distinct privileges. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 3.1 MB +
+
+
+
+
+

+ 8.26.1. Installation of Libcap +

+

+ Prevent static libraries from being installed: +

+
sed -i '/install -m.*STA/d' libcap/Makefile
+

+ Compile the package: +

+
make prefix=/usr lib=lib
+
+

+ The meaning of the make option: +

+
+
+ lib=lib +
+
+

+ This parameter sets the library directory to + /usr/lib rather than + /usr/lib64 on x86_64. It + has no effect on x86. +

+
+
+
+

+ To test the results, issue: +

+
make test
+

+ Install the package: +

+
make prefix=/usr lib=lib install
+
+
+

+ 8.26.2. + Contents of Libcap +

+
+
+
+ Installed programs: + capsh, getcap, getpcaps, and + setcap +
+
+ Installed library: + libcap.so and libpsx.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ capsh +

+
+

+ A shell wrapper to explore and constrain capability + support +

+
+

+ getcap +

+
+

+ Examines file capabilities +

+
+

+ getpcaps +

+
+

+ Displays the capabilities of the queried + process(es) +

+
+

+ setcap +

+
+

+ Sets file capabilities +

+
+

+ libcap +

+
+

+ Contains the library functions for manipulating + POSIX 1003.1e capabilities +

+
+

+ libpsx +

+
+

+ Contains functions to support POSIX semantics for + syscalls associated with the pthread library +

+
+
+
+
+
+
+
+

+ 8.27. Libxcrypt-4.4.38 +

+
+
+
+
+
+

+ The Libxcrypt package contains a modern library for one-way + hashing of passwords. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 12 MB +
+
+
+
+
+

+ 8.27.1. Installation of Libxcrypt +

+

+ Prepare Libxcrypt for compilation: +

+
./configure --prefix=/usr                \
+            --enable-hashes=strong,glibc \
+            --enable-obsolete-api=no     \
+            --disable-static             \
+            --disable-failure-tokens
+
+

+ The meaning of the new configure options: +

+
+
+ --enable-hashes=strong,glibc +
+
+

+ Build strong hash algorithms recommended for security + use cases, and the hash algorithms provided by + traditional Glibc libcrypt for compatibility. +

+
+
+ --enable-obsolete-api=no +
+
+

+ Disable obsolete API functions. They are not needed for + a modern Linux system built from source. +

+
+
+ --disable-failure-tokens +
+
+

+ Disable failure token feature. It's needed for + compatibility with the traditional hash libraries of + some platforms, but a Linux system based on Glibc does + not need it. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+

+ Note +

+

+ The instructions above disabled obsolete API functions + since no package installed by compiling from sources would + link against them at runtime. However, the only known + binary-only applications that link against these functions + require ABI version 1. If you must have such functions + because of some binary-only application or to be compliant + with LSB, build the package again with the following + commands: +

+
make distclean
+./configure --prefix=/usr                \
+            --enable-hashes=strong,glibc \
+            --enable-obsolete-api=glibc  \
+            --disable-static             \
+            --disable-failure-tokens
+make
+cp -av --remove-destination .libs/libcrypt.so.1* /usr/lib
+
+
+
+

+ 8.27.2. Contents of Libxcrypt +

+
+
+
+ Installed libraries: + libcrypt.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libcrypt +

+
+

+ Contains functions to hash passwords +

+
+
+
+
+
+
+
+

+ 8.28. Shadow-4.18.0 +

+
+
+
+
+
+

+ The Shadow package contains programs for handling passwords + in a secure way. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 115 MB +
+
+
+
+
+

+ 8.28.1. Installation of Shadow +

+
+

+ Important +

+

+ If you've installed Linux-PAM, you should follow + the BLFS instruction instead of this page to build (or, + rebuild or upgrade) shadow. +

+
+
+

+ Note +

+

+ If you would like to enforce the use of strong passwords, + + install and configure Linux-PAM first. Then + install and configure shadow with the PAM support. + Finally + install libpwquality and configure PAM to use it. +

+
+

+ Disable the installation of the groups program and its man + pages, as Coreutils provides a better version. Also, prevent + the installation of manual pages that were already installed + in Section 8.3, + “Man-pages-6.15”: +

+
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 / /'   {} \;
+

+ Instead of using the default + crypt method, use the + much more secure YESCRYPT method of password + encryption, which also allows passwords longer than 8 + characters. It is also necessary to change the obsolete + /var/spool/mail location for + user mailboxes that Shadow uses by default to the + /var/mail location used + currently. And, remove /bin and + /sbin from the PATH, since they are simply symlinks to their + counterparts in /usr. +

+
+

+ Warning +

+

+ Including /bin and/or + /sbin in the PATH variable may cause some BLFS packages + fail to build, so don't do that in the .bashrc file or anywhere else. +

+
+
sed -e 's:#ENCRYPT_METHOD DES:ENCRYPT_METHOD YESCRYPT:' \
+    -e 's:/var/spool/mail:/var/mail:'                   \
+    -e '/PATH=/{s@/sbin:@@;s@/bin:@@}'                  \
+    -i etc/login.defs
+

+ Prepare Shadow for compilation: +

+
touch /usr/bin/passwd
+./configure --sysconfdir=/etc   \
+            --disable-static    \
+            --with-{b,yes}crypt \
+            --without-libbsd    \
+            --with-group-name-max-length=32
+
+

+ The meaning of the new configuration + options: +

+
+
+ touch + /usr/bin/passwd +
+
+

+ The file /usr/bin/passwd + needs to exist because its location is hardcoded in + some programs; if it does not already exist, the + installation script will create it in the wrong place. +

+
+
+ --with-{b,yes}crypt +
+
+

+ The shell expands this to two switches, --with-bcrypt and + --with-yescrypt. They + allow shadow to use the Bcrypt and Yescrypt algorithms + implemented by Libxcrypt for hashing passwords. + These algorithms are more secure (in particular, much + more resistant to GPU-based attacks) than the + traditional SHA algorithms. +

+
+
+ --with-group-name-max-length=32 +
+
+

+ The longest permissible user name is 32 characters. + Make the maximum length of a group name the same. +

+
+
+ --without-libbsd +
+
+

+ Do not use the readpassphrase function from libbsd + which is not in LFS. Use the internal copy instead. +

+
+
+
+

+ Compile the package: +

+
make
+

+ This package does not come with a test suite. +

+

+ Install the package: +

+
make exec_prefix=/usr install
+make -C man install-man
+
+
+

+ 8.28.2. + Configuring Shadow +

+

+ This package contains utilities to add, modify, and delete + users and groups; set and change their passwords; and perform + other administrative tasks. For a full explanation of what + password shadowing + means, see the doc/HOWTO file + within the unpacked source tree. If you use Shadow support, + keep in mind that programs which need to verify passwords + (display managers, FTP programs, pop3 daemons, etc.) must be + Shadow-compliant. That is, they must be able to work with + shadowed passwords. +

+

+ To enable shadowed passwords, run the following command: +

+
pwconv
+

+ To enable shadowed group passwords, run: +

+
grpconv
+

+ Shadow's default configuration for the useradd utility needs some + explanation. First, the default action for the useradd utility is to + create the user and a group with the same name as the user. + By default the user ID (UID) and group ID (GID) numbers will + begin at 1000. This means if you don't pass extra parameters + to useradd, + each user will be a member of a unique group on the system. + If this behavior is undesirable, you'll need to pass either + the -g or -N parameter to useradd, or else change the + setting of USERGROUPS_ENAB in /etc/login.defs. See useradd(8) for + more information. +

+

+ Second, to change the default parameters, the file + /etc/default/useradd must be + created and tailored to suit your particular needs. Create it + with: +

+
mkdir -p /etc/default
+useradd -D --gid 999
+
+

+ /etc/default/useradd + parameter explanations +

+
+
+ GROUP=999 +
+
+

+ This parameter sets the beginning of the group numbers + used in the /etc/group + file. The particular value 999 comes from the + --gid parameter + above. You may set it to any desired value. Note that + useradd + will never reuse a UID or GID. If the number identified + in this parameter is used, it will use the next + available number. Note also that if you don't have a + group with an ID equal to this number on your system, + then the first time you use useradd without the + -g parameter, + an error message will be generated—useradd: unknown GID 999, even + though the account has been created correctly. That is + why we created the group users with this group ID in + Section 7.6, + “Creating Essential Files and Symlinks.” +

+
+
+ CREATE_MAIL_SPOOL=yes +
+
+

+ This parameter causes useradd to create a + mailbox file for each new user. useradd will assign + the group ownership of this file to the mail group with 0660 permissions. + If you would rather not create these files, issue the + following command: +

+
sed -i '/MAIL/s/yes/no/' /etc/default/useradd
+
+
+
+
+
+

+ 8.28.3. Setting the Root Password +

+

+ Choose a password for user root and set it by running: +

+
passwd root
+
+
+

+ 8.28.4. + Contents of Shadow +

+
+
+
+ Installed programs: + chage, chfn, chgpasswd, chpasswd, + chsh, expiry, faillog, getsubids, gpasswd, groupadd, + groupdel, groupmems, groupmod, grpck, grpconv, grpunconv, + login, logoutd, newgidmap, newgrp, newuidmap, newusers, + nologin, passwd, pwck, pwconv, pwunconv, sg (link to + newgrp), su, useradd, userdel, usermod, vigr (link to + vipw), and vipw +
+
+ Installed directories: + /etc/default and + /usr/include/shadow +
+
+ Installed libraries: + libsubid.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ chage +

+
+

+ Used to change the maximum number of days between + obligatory password changes +

+
+

+ chfn +

+
+

+ Used to change a user's full name and other + information +

+
+

+ chgpasswd +

+
+

+ Used to update group passwords in batch mode +

+
+

+ chpasswd +

+
+

+ Used to update user passwords in batch mode +

+
+

+ chsh +

+
+

+ Used to change a user's default login shell +

+
+

+ expiry +

+
+

+ Checks and enforces the current password expiration + policy +

+
+

+ faillog +

+
+

+ Is used to examine the log of login failures, to + set a maximum number of failures before an account + is blocked, and to reset the failure count +

+
+

+ getsubids +

+
+

+ Is used to list the subordinate id ranges for a + user +

+
+

+ gpasswd +

+
+

+ Is used to add and delete members and + administrators to groups +

+
+

+ groupadd +

+
+

+ Creates a group with the given name +

+
+

+ groupdel +

+
+

+ Deletes the group with the given name +

+
+

+ groupmems +

+
+

+ Allows a user to administer his/her own group + membership list without the requirement of super + user privileges. +

+
+

+ groupmod +

+
+

+ Is used to modify the given group's name or GID +

+
+

+ grpck +

+
+

+ Verifies the integrity of the group files + /etc/group and + /etc/gshadow +

+
+

+ grpconv +

+
+

+ Creates or updates the shadow group file from the + normal group file +

+
+

+ grpunconv +

+
+

+ Updates /etc/group + from /etc/gshadow and + then deletes the latter +

+
+

+ login +

+
+

+ Is used by the system to let users sign on +

+
+

+ logoutd +

+
+

+ Is a daemon used to enforce restrictions on log-on + time and ports +

+
+

+ newgidmap +

+
+

+ Is used to set the gid mapping of a user namespace +

+
+

+ newgrp +

+
+

+ Is used to change the current GID during a login + session +

+
+

+ newuidmap +

+
+

+ Is used to set the uid mapping of a user namespace +

+
+

+ newusers +

+
+

+ Is used to create or update an entire series of + user accounts +

+
+

+ nologin +

+
+

+ Displays a message saying an account is not + available; it is designed to be used as the default + shell for disabled accounts +

+
+

+ passwd +

+
+

+ Is used to change the password for a user or group + account +

+
+

+ pwck +

+
+

+ Verifies the integrity of the password files + /etc/passwd and + /etc/shadow +

+
+

+ pwconv +

+
+

+ Creates or updates the shadow password file from + the normal password file +

+
+

+ pwunconv +

+
+

+ Updates /etc/passwd + from /etc/shadow and + then deletes the latter +

+
+

+ sg +

+
+

+ Executes a given command while the user's GID is + set to that of the given group +

+
+

+ su +

+
+

+ Runs a shell with substitute user and group IDs +

+
+

+ useradd +

+
+

+ Creates a new user with the given name, or updates + the default new-user information +

+
+

+ userdel +

+
+

+ Deletes the specified user account +

+
+

+ usermod +

+
+

+ Is used to modify the given user's login name, user + identification (UID), shell, initial group, home + directory, etc. +

+
+

+ vigr +

+
+

+ Edits the /etc/group + or /etc/gshadow files +

+
+

+ vipw +

+
+

+ Edits the /etc/passwd + or /etc/shadow files +

+
+

+ libsubid +

+
+

+ library to handle subordinate id ranges for users + and groups +

+
+
+
+
+
+
+
+

+ 8.29. GCC-15.2.0 +

+
+
+
+
+
+

+ The GCC package contains the GNU compiler collection, which + includes the C and C++ compilers. +

+
+
+
+ Approximate build time: + 46 SBU (with tests) +
+
+ Required disk space: + 6.6 GB +
+
+
+
+
+

+ 8.29.1. Installation of GCC +

+

+ If building on x86_64, change the default directory name for + 64-bit libraries to “lib”: +

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

+ The GCC documentation recommends building GCC in a dedicated + build directory: +

+
mkdir -v build
+cd       build
+

+ Prepare GCC for compilation: +

+
../configure --prefix=/usr            \
+             LD=ld                    \
+             --enable-languages=c,c++ \
+             --enable-default-pie     \
+             --enable-default-ssp     \
+             --enable-host-pie        \
+             --disable-multilib       \
+             --disable-bootstrap      \
+             --disable-fixincludes    \
+             --with-system-zlib
+

+ GCC supports seven different computer languages, but the + prerequisites for most of them have not yet been installed. + See the + BLFS Book GCC page for instructions on how to build all + of GCC's supported languages. +

+
+

+ The meaning of the new configure + parameters: +

+
+
+ LD=ld +
+
+

+ This parameter makes the configure script use the ld + program installed by the Binutils package built earlier + in this chapter, rather than the cross-built version + which would otherwise be used. +

+
+
+ --disable-fixincludes +
+
+

+ By default, during the installation of GCC some system + headers would be “fixed” to be used with GCC. This + is not necessary for a modern Linux system, and + potentially harmful if a package is reinstalled after + installing GCC. This switch prevents GCC from + “fixing” the headers. +

+
+
+ --with-system-zlib +
+
+

+ This switch tells GCC to link to the system installed + copy of the Zlib library, rather than its own internal + copy. +

+
+
+
+
+

+ Note +

+

+ PIE (position-independent executables) are binary programs + that can be loaded anywhere in memory. Without PIE, the + security feature named ASLR (Address Space Layout + Randomization) can be applied for the shared libraries, but + not for the executables themselves. Enabling PIE allows + ASLR for the executables in addition to the shared + libraries, and mitigates some attacks based on fixed + addresses of sensitive code or data in the executables. +

+

+ SSP (Stack Smashing Protection) is a technique to ensure + that the parameter stack is not corrupted. Stack corruption + can, for example, alter the return address of a subroutine, + thus transferring control to some dangerous code (existing + in the program or shared libraries, or injected by the + attacker somehow). +

+
+

+ Compile the package: +

+
make
+
+

+ Important +

+

+ In this section, the test suite for GCC is considered + important, but it takes a long time. First-time builders + are encouraged to run the test suite. The time to run the + tests can be reduced significantly by adding -jx to the + make -k check + command below, where x is the number of CPU cores on your + system. +

+
+

+ GCC may need more stack space compiling some extremely + complex code patterns. As a precaution for the host distros + with a tight stack limit, explicitly set the stack size hard + limit to infinite. On most host distros (and the final LFS + system) the hard limit is infinite by default, but there is + no harm done by setting it explicitly. It's not necessary to + change the stack size soft limit because GCC will + automatically set it to an appropriate value, as long as the + value does not exceed the hard limit: +

+
ulimit -s -H unlimited
+

+ Now remove several known test failures: +

+
sed -e '/cpython/d' -i ../gcc/testsuite/gcc.dg/plugin/plugin.exp
+

+ Test the results as a non-privileged user, but do not stop at + errors: +

+
chown -R tester .
+su tester -c "PATH=$PATH make -k check"
+

+ To extract a summary of the test suite results, run: +

+
../contrib/test_summary
+

+ To filter out only the summaries, pipe the output through + grep -A7 + Summ. +

+

+ Results can be compared with those located at https://www.linuxfromscratch.org/lfs/build-logs/12.4/ + and https://gcc.gnu.org/ml/gcc-testresults/. +

+

+ The tests related to pr90579.c + are known to fail. +

+

+ A few unexpected failures cannot always be avoided. In some + cases test failures depend on the specific hardware of the + system. Unless the test results are vastly different from + those at the above URL, it is safe to continue. +

+

+ Install the package: +

+
make install
+

+ The GCC build directory is owned by tester now, and the ownership of the + installed header directory (and its content) is incorrect. + Change the ownership to the root user and group: +

+
chown -v -R root:root \
+    /usr/lib/gcc/$(gcc -dumpmachine)/15.2.0/include{,-fixed}
+

+ Create a symlink required by the + FHS for "historical" reasons. +

+
ln -svr /usr/bin/cpp /usr/lib
+

+ Many packages use the name cc to call the C compiler. + We've already created cc as a symlink in + gcc-pass2, create its + man page as a symlink as well: +

+
ln -sv gcc.1 /usr/share/man/man1/cc.1
+

+ Add a compatibility symlink to enable building programs with + Link Time Optimization (LTO): +

+
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/15.2.0/liblto_plugin.so \
+        /usr/lib/bfd-plugins/
+

+ Now that our final toolchain is in place, it is important to + again ensure that compiling and linking will work as + expected. We do this by performing some sanity checks: +

+
echo 'int main(){}' | cc -x c - -v -Wl,--verbose &> dummy.log
+readelf -l a.out | grep ': /lib'
+

+ There should be no errors, and the output of the last command + will be (allowing for platform-specific differences in the + dynamic linker name): +

+
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
+

+ Now make sure that we're set up to use the correct start + files: +

+
grep -E -o '/usr/lib.*/S?crt[1in].*succeeded' dummy.log
+

+ The output of the last command should be: +

+
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.0/../../../../lib/Scrt1.o succeeded
+/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.0/../../../../lib/crti.o succeeded
+/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.0/../../../../lib/crtn.o succeeded
+

+ Depending on your machine architecture, the above may differ + slightly. The difference will be the name of the directory + after /usr/lib/gcc. The + important thing to look for here is that gcc has found all three + crt*.o files under the + /usr/lib directory. +

+

+ Verify that the compiler is searching for the correct header + files: +

+
grep -B4 '^ /usr/include' dummy.log
+

+ This command should return the following output: +

+
#include <...> search starts here:
+ /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.0/include
+ /usr/local/include
+ /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.0/include-fixed
+ /usr/include
+

+ Again, the directory named after your target triplet may be + different than the above, depending on your system + architecture. +

+

+ Next, verify that the new linker is being used with the + correct search paths: +

+
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
+

+ References to paths that have components with '-linux-gnu' + should be ignored, but otherwise the output of the last + command should be: +

+
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
+SEARCH_DIR("/usr/local/lib64")
+SEARCH_DIR("/lib64")
+SEARCH_DIR("/usr/lib64")
+SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
+SEARCH_DIR("/usr/local/lib")
+SEARCH_DIR("/lib")
+SEARCH_DIR("/usr/lib");
+

+ A 32-bit system may use a few other directories. For example, + here is the output from an i686 machine: +

+
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
+SEARCH_DIR("/usr/local/lib32")
+SEARCH_DIR("/lib32")
+SEARCH_DIR("/usr/lib32")
+SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
+SEARCH_DIR("/usr/local/lib")
+SEARCH_DIR("/lib")
+SEARCH_DIR("/usr/lib");
+

+ Next make sure that we're using the correct libc: +

+
grep "/lib.*/libc.so.6 " dummy.log
+

+ The output of the last command should be: +

+
attempt to open /usr/lib/libc.so.6 succeeded
+

+ Make sure GCC is using the correct dynamic linker: +

+
grep found dummy.log
+

+ The output of the last command should be (allowing for + platform-specific differences in dynamic linker name): +

+
found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2
+

+ If the output does not appear as shown above or is not + received at all, then something is seriously wrong. + Investigate and retrace the steps to find out where the + problem is and correct it. Any issues should be resolved + before continuing with the process. +

+

+ Once everything is working correctly, clean up the test + files: +

+
rm -v a.out dummy.log
+

+ Finally, move a misplaced file: +

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

+ 8.29.2. Contents + of GCC +

+
+
+
+ Installed programs: + c++, cc (link to gcc), cpp, g++, + gcc, gcc-ar, gcc-nm, gcc-ranlib, gcov, gcov-dump, + gcov-tool, and lto-dump +
+
+ Installed libraries: + libasan.{a,so}, libatomic.{a,so}, + libcc1.so, libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, + libgomp.{a,so}, libhwasan.{a,so}, libitm.{a,so}, + liblsan.{a,so}, liblto_plugin.so, libquadmath.{a,so}, + libssp.{a,so}, libssp_nonshared.a, libstdc++.{a,so}, + libstdc++exp.a, libstdc++fs.a, libsupc++.a, + libtsan.{a,so}, and libubsan.{a,so} +
+
+ Installed directories: + /usr/include/c++, /usr/lib/gcc, + /usr/libexec/gcc, and /usr/share/gcc-15.2.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ c++ +

+
+

+ The C++ compiler +

+
+

+ cc +

+
+

+ The C compiler +

+
+

+ cpp +

+
+

+ The C preprocessor; it is used by the compiler to + expand the #include, #define, and similar + directives in the source files +

+
+

+ g++ +

+
+

+ The C++ compiler +

+
+

+ gcc +

+
+

+ The C compiler +

+
+

+ gcc-ar +

+
+

+ A wrapper around ar that adds a + plugin to the command line. This program is only + used to add "link time optimization" and is not + useful with the default build options. +

+
+

+ gcc-nm +

+
+

+ A wrapper around nm that adds a + plugin to the command line. This program is only + used to add "link time optimization" and is not + useful with the default build options. +

+
+

+ gcc-ranlib +

+
+

+ A wrapper around ranlib that adds + a plugin to the command line. This program is only + used to add "link time optimization" and is not + useful with the default build options. +

+
+

+ gcov +

+
+

+ A coverage testing tool; it is used to analyze + programs to determine where optimizations will have + the greatest effect +

+
+

+ gcov-dump +

+
+

+ Offline gcda and gcno profile dump tool +

+
+

+ gcov-tool +

+
+

+ Offline gcda profile processing tool +

+
+

+ lto-dump +

+
+

+ Tool for dumping object files produced by GCC with + LTO enabled +

+
+

+ libasan +

+
+

+ The Address Sanitizer runtime library +

+
+

+ libatomic +

+
+

+ GCC atomic built-in runtime library +

+
+

+ libcc1 +

+
+

+ A library that allows GDB to make use of GCC +

+
+

+ libgcc +

+
+

+ Contains run-time support for gcc +

+
+

+ libgcov +

+
+

+ This library is linked into a program when GCC is + instructed to enable profiling +

+
+

+ libgomp +

+
+

+ GNU implementation of the OpenMP API for + multi-platform shared-memory parallel programming + in C/C++ and Fortran +

+
+

+ libhwasan +

+
+

+ The Hardware-assisted Address Sanitizer runtime + library +

+
+

+ libitm +

+
+

+ The GNU transactional memory library +

+
+

+ liblsan +

+
+

+ The Leak Sanitizer runtime library +

+
+

+ liblto_plugin +

+
+

+ GCC's LTO plugin allows Binutils to process object + files produced by GCC with LTO enabled +

+
+

+ libquadmath +

+
+

+ GCC Quad Precision Math Library API +

+
+

+ libssp +

+
+

+ Contains routines supporting GCC's stack-smashing + protection functionality. Normally it is not used, + because Glibc also provides those routines. +

+
+

+ libstdc++ +

+
+

+ The standard C++ library +

+
+

+ libstdc++exp +

+
+

+ Experimental C++ Contracts library +

+
+

+ libstdc++fs +

+
+

+ ISO/IEC TS 18822:2015 Filesystem library +

+
+

+ libsupc++ +

+
+

+ Provides supporting routines for the C++ + programming language +

+
+

+ libtsan +

+
+

+ The Thread Sanitizer runtime library +

+
+

+ libubsan +

+
+

+ The Undefined Behavior Sanitizer runtime library +

+
+
+
+
+
+
+
+

+ 8.30. Ncurses-6.5-20250809 +

+
+
+
+
+
+

+ The Ncurses package contains libraries for + terminal-independent handling of character screens. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 46 MB +
+
+
+
+
+

+ 8.30.1. Installation of Ncurses +

+

+ Prepare Ncurses for compilation: +

+
./configure --prefix=/usr           \
+            --mandir=/usr/share/man \
+            --with-shared           \
+            --without-debug         \
+            --without-normal        \
+            --with-cxx-shared       \
+            --enable-pc-files       \
+            --with-pkg-config-libdir=/usr/lib/pkgconfig
+
+

+ The meaning of the new configure options: +

+
+
+ --with-shared +
+
+

+ This makes Ncurses build and install shared C + libraries. +

+
+
+ --without-normal +
+
+

+ This prevents Ncurses building and installing static C + libraries. +

+
+
+ --without-debug +
+
+

+ This prevents Ncurses building and installing debug + libraries. +

+
+
+ --with-cxx-shared +
+
+

+ This makes Ncurses build and install shared C++ + bindings. It also prevents it building and installing + static C++ bindings. +

+
+
+ --enable-pc-files +
+
+

+ This switch generates and installs .pc files for + pkg-config. +

+
+
+
+

+ Compile the package: +

+
make
+

+ This package has a test suite, but it can only be run after + the package has been installed. The tests reside in the + test/ directory. See the + README file in that directory + for further details. +

+

+ The installation of this package will overwrite libncursesw.so.6.5 in-place. It may crash + the shell process which is using code and data from the + library file. Install the package with DESTDIR, and replace the library file + correctly using install command (the header + curses.h is also edited to + ensure the wide-character ABI to be used as what we've done + in Section 6.3, + “Ncurses-6.5-20250809”): +

+
make DESTDIR=$PWD/dest install
+install -vm755 dest/usr/lib/libncursesw.so.6.5 /usr/lib
+rm -v  dest/usr/lib/libncursesw.so.6.5
+sed -e 's/^#if.*XOPEN.*$/#if 1/' \
+    -i dest/usr/include/curses.h
+cp -av dest/* /
+

+ Many applications still expect the linker to be able to find + non-wide-character Ncurses libraries. Trick such applications + into linking with wide-character libraries by means of + symlinks (note that the .so + links are only safe with curses.h edited to always use the + wide-character ABI): +

+
for lib in ncurses form panel menu ; do
+    ln -sfv lib${lib}w.so /usr/lib/lib${lib}.so
+    ln -sfv ${lib}w.pc    /usr/lib/pkgconfig/${lib}.pc
+done
+

+ Finally, make sure that old applications that look for + -lcurses at build time are + still buildable: +

+
ln -sfv libncursesw.so /usr/lib/libcurses.so
+

+ If desired, install the Ncurses documentation: +

+
cp -v -R doc -T /usr/share/doc/ncurses-6.5-20250809
+
+

+ Note +

+

+ The instructions above don't create non-wide-character + Ncurses libraries since no package installed by compiling + from sources would link against them at runtime. However, + the only known binary-only applications that link against + non-wide-character Ncurses libraries require version 5. If + you must have such libraries because of some binary-only + application or to be compliant with LSB, build the package + again with the following commands: +

+
make distclean
+./configure --prefix=/usr    \
+            --with-shared    \
+            --without-normal \
+            --without-debug  \
+            --without-cxx-binding \
+            --with-abi-version=5
+make sources libs
+cp -av lib/lib*.so.5* /usr/lib
+
+
+
+

+ 8.30.2. + Contents of Ncurses +

+
+
+
+ Installed programs: + captoinfo (link to tic), clear, + infocmp, infotocap (link to tic), ncursesw6-config, reset + (link to tset), tabs, tic, toe, tput, and tset +
+
+ Installed libraries: + libcurses.so (symlink), libform.so + (symlink), libformw.so, libmenu.so (symlink), + libmenuw.so, libncurses.so (symlink), libncursesw.so, + libncurses++w.so, libpanel.so (symlink), and + libpanelw.so, +
+
+ Installed directories: + /usr/share/tabset, + /usr/share/terminfo, and + /usr/share/doc/ncurses-6.5-20250809 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ captoinfo +

+
+

+ Converts a termcap description into a terminfo + description +

+
+

+ clear +

+
+

+ Clears the screen, if possible +

+
+

+ infocmp +

+
+

+ Compares or prints out terminfo descriptions +

+
+

+ infotocap +

+
+

+ Converts a terminfo description into a termcap + description +

+
+

+ ncursesw6-config +

+
+

+ Provides configuration information for ncurses +

+
+

+ reset +

+
+

+ Reinitializes a terminal to its default values +

+
+

+ tabs +

+
+

+ Clears and sets tab stops on a terminal +

+
+

+ tic +

+
+

+ The terminfo entry-description compiler that + translates a terminfo file from source format into + the binary format needed for the ncurses library + routines [A terminfo file contains information on + the capabilities of a certain terminal.] +

+
+

+ toe +

+
+

+ Lists all available terminal types, giving the + primary name and description for each +

+
+

+ tput +

+
+

+ Makes the values of terminal-dependent capabilities + available to the shell; it can also be used to + reset or initialize a terminal or report its long + name +

+
+

+ tset +

+
+

+ Can be used to initialize terminals +

+
+

+ libncursesw +

+
+

+ Contains functions to display text in many complex + ways on a terminal screen; a good example of the + use of these functions is the menu displayed during + the kernel's make + menuconfig +

+
+

+ libncurses++w +

+
+

+ Contains C++ binding for other libraries in this + package +

+
+

+ libformw +

+
+

+ Contains functions to implement forms +

+
+

+ libmenuw +

+
+

+ Contains functions to implement menus +

+
+

+ libpanelw +

+
+

+ Contains functions to implement panels +

+
+
+
+
+
+
+
+

+ 8.31. Sed-4.9 +

+
+
+
+
+
+

+ The Sed package contains a stream editor. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 30 MB +
+
+
+
+
+

+ 8.31.1. Installation of Sed +

+

+ Prepare Sed for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package and generate the HTML documentation: +

+
make
+make html
+

+ To test the results, issue: +

+
chown -R tester .
+su tester -c "PATH=$PATH make check"
+

+ Install the package and its documentation: +

+
make install
+install -d -m755           /usr/share/doc/sed-4.9
+install -m644 doc/sed.html /usr/share/doc/sed-4.9
+
+
+

+ 8.31.2. Contents + of Sed +

+
+
+
+ Installed program: + sed +
+
+ Installed directory: + /usr/share/doc/sed-4.9 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ sed +

+
+

+ Filters and transforms text files in a single pass +

+
+
+
+
+
+
+
+

+ 8.32. Psmisc-23.7 +

+
+
+
+
+
+

+ The Psmisc package contains programs for displaying + information about running processes. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 6.7 MB +
+
+
+
+
+

+ 8.32.1. Installation of Psmisc +

+

+ Prepare Psmisc for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To run the test suite, run: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.32.2. + Contents of Psmisc +

+
+
+
+ Installed programs: + fuser, killall, peekfd, prtstat, + pslog, pstree, and pstree.x11 (link to pstree) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ fuser +

+
+

+ Reports the Process IDs (PIDs) of processes that + use the given files or file systems +

+
+

+ killall +

+
+

+ Kills processes by name; it sends a signal to all + processes running any of the given commands +

+
+

+ peekfd +

+
+

+ Peek at file descriptors of a running process, + given its PID +

+
+

+ prtstat +

+
+

+ Prints information about a process +

+
+

+ pslog +

+
+

+ Reports current logs path of a process +

+
+

+ pstree +

+
+

+ Displays running processes as a tree +

+
+

+ pstree.x11 +

+
+

+ Same as pstree, except + that it waits for confirmation before exiting +

+
+
+
+
+
+
+
+

+ 8.33. Gettext-0.26 +

+
+
+
+
+
+

+ The Gettext package contains utilities for + internationalization and localization. These allow programs + to be compiled with NLS (Native Language Support), enabling + them to output messages in the user's native language. +

+
+
+
+ Approximate build time: + 2.1 SBU +
+
+ Required disk space: + 395 MB +
+
+
+
+
+

+ 8.33.1. Installation of Gettext +

+

+ Prepare Gettext for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/gettext-0.26
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+chmod -v 0755 /usr/lib/preloadable_libintl.so
+
+
+

+ 8.33.2. + Contents of Gettext +

+
+
+
+ Installed programs: + autopoint, envsubst, gettext, + gettext.sh, gettextize, msgattrib, msgcat, msgcmp, + msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, + msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, + recode-sr-latin, and xgettext +
+
+ Installed libraries: + libasprintf.so, libgettextlib.so, + libgettextpo.so, libgettextsrc.so, libtextstyle.so, and + preloadable_libintl.so +
+
+ Installed directories: + /usr/lib/gettext, + /usr/share/doc/gettext-0.26, /usr/share/gettext, and + /usr/share/gettext-0.26 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ autopoint +

+
+

+ Copies standard Gettext infrastructure files into a + source package +

+
+

+ envsubst +

+
+

+ Substitutes environment variables in shell format + strings +

+
+

+ gettext +

+
+

+ Translates a natural language message into the + user's language by looking up the translation in a + message catalog +

+
+

+ gettext.sh +

+
+

+ Primarily serves as a shell function library for + gettext +

+
+

+ gettextize +

+
+

+ Copies all standard Gettext files into the given + top-level directory of a package to begin + internationalizing it +

+
+

+ msgattrib +

+
+

+ Filters the messages of a translation catalog + according to their attributes and manipulates the + attributes +

+
+

+ msgcat +

+
+

+ Concatenates and merges the given .po files +

+
+

+ msgcmp +

+
+

+ Compares two .po + files to check that both contain the same set of + msgid strings +

+
+

+ msgcomm +

+
+

+ Finds the messages that are common to the given + .po files +

+
+

+ msgconv +

+
+

+ Converts a translation catalog to a different + character encoding +

+
+

+ msgen +

+
+

+ Creates an English translation catalog +

+
+

+ msgexec +

+
+

+ Applies a command to all translations of a + translation catalog +

+
+

+ msgfilter +

+
+

+ Applies a filter to all translations of a + translation catalog +

+
+

+ msgfmt +

+
+

+ Generates a binary message catalog from a + translation catalog +

+
+

+ msggrep +

+
+

+ Extracts all messages of a translation catalog that + match a given pattern or belong to some given + source files +

+
+

+ msginit +

+
+

+ Creates a new .po + file, initializing the meta information with values + from the user's environment +

+
+

+ msgmerge +

+
+

+ Combines two raw translations into a single file +

+
+

+ msgunfmt +

+
+

+ Decompiles a binary message catalog into raw + translation text +

+
+

+ msguniq +

+
+

+ Unifies duplicate translations in a translation + catalog +

+
+

+ ngettext +

+
+

+ Displays native language translations of a textual + message whose grammatical form depends on a number +

+
+

+ recode-sr-latin +

+
+

+ Recodes Serbian text from Cyrillic to Latin script +

+
+

+ xgettext +

+
+

+ Extracts the translatable message lines from the + given source files to make the first translation + template +

+
+

+ libasprintf +

+
+

+ Defines the autosprintf class, which + makes C formatted output routines usable in C++ + programs, for use with the <string> strings + and the <iostream> streams +

+
+

+ libgettextlib +

+
+

+ Contains common routines used by the various + Gettext programs; these are not intended for + general use +

+
+

+ libgettextpo +

+
+

+ Used to write specialized programs that process + .po files; this + library is used when the standard applications + shipped with Gettext (such as msgcomm, + msgcmp, + msgattrib, and + msgen) will not + suffice +

+
+

+ libgettextsrc +

+
+

+ Provides common routines used by the various + Gettext programs; these are not intended for + general use +

+
+

+ libtextstyle +

+
+

+ Text styling library +

+
+

+ preloadable_libintl +

+
+

+ A library, intended to be used by LD_PRELOAD, that + helps libintl log + untranslated messages +

+
+
+
+
+
+
+
+

+ 8.34. Bison-3.8.2 +

+
+
+
+
+
+

+ The Bison package contains a parser generator. +

+
+
+
+ Approximate build time: + 2.1 SBU +
+
+ Required disk space: + 63 MB +
+
+
+
+
+

+ 8.34.1. Installation of Bison +

+

+ Prepare Bison for compilation: +

+
./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.8.2
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.34.2. + Contents of Bison +

+
+
+
+ Installed programs: + bison and yacc +
+
+ Installed library: + liby.a +
+
+ Installed directory: + /usr/share/bison +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ bison +

+
+

+ Generates, from a series of rules, a program for + analyzing the structure of text files; Bison is a + replacement for Yacc (Yet Another Compiler + Compiler) +

+
+

+ yacc +

+
+

+ A wrapper for bison, meant for + programs that still call yacc instead of + bison; it calls + bison + with the -y + option +

+
+

+ liby +

+
+

+ The Yacc library containing implementations of + Yacc-compatible yyerror and main functions; this library is + normally not very useful, but POSIX requires it +

+
+
+
+
+
+
+
+

+ 8.35. Grep-3.12 +

+
+
+
+
+
+

+ The Grep package contains programs for searching through the + contents of files. +

+
+
+
+ Approximate build time: + 0.6 SBU +
+
+ Required disk space: + 48 MB +
+
+
+
+
+

+ 8.35.1. Installation of Grep +

+

+ First, remove a warning about using egrep and fgrep that + makes tests on some packages fail: +

+
sed -i "s/echo/#echo/" src/egrep.sh
+

+ Prepare Grep for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.35.2. + Contents of Grep +

+
+
+
+ Installed programs: + egrep, fgrep, and grep +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ egrep +

+
+

+ Prints lines matching an extended regular + expression. It is obsolete, use grep -E instead +

+
+

+ fgrep +

+
+

+ Prints lines matching a list of fixed strings. It + is obsolete, use grep + -F instead +

+
+

+ grep +

+
+

+ Prints lines matching a basic regular expression +

+
+
+
+
+
+
+
+

+ 8.36. Bash-5.3 +

+
+
+
+
+
+

+ The Bash package contains the Bourne-Again Shell. +

+
+
+
+ Approximate build time: + 1.5 SBU +
+
+ Required disk space: + 56 MB +
+
+
+
+
+

+ 8.36.1. Installation of Bash +

+

+ Prepare Bash for compilation: +

+
./configure --prefix=/usr             \
+            --without-bash-malloc     \
+            --with-installed-readline \
+            --docdir=/usr/share/doc/bash-5.3
+
+

+ The meaning of the new configure option: +

+
+
+ --with-installed-readline +
+
+

+ This option tells Bash to use the readline library that is already + installed on the system rather than using its own + readline version. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Skip down to “Install + the package” if not running the test suite. +

+

+ To prepare the tests, ensure that the tester user can write to the sources + tree: +

+
chown -R tester .
+

+ The test suite of this package is designed to be run as a + non-root user who owns the + terminal connected to standard input. To satisfy the + requirement, spawn a new pseudo terminal using Expect and run the tests as the + tester user: +

+
LC_ALL=C.UTF-8 su -s /usr/bin/expect tester << "EOF"
+set timeout -1
+spawn make tests
+expect eof
+lassign [wait] _ _ _ value
+exit $value
+EOF
+

+ The test suite uses diff to detect the + difference between test script output and the expected + output. Any output from diff (prefixed with + < and >) indicates a test failure, + unless there is a message saying the difference can be + ignored. The test named run-builtins is known to fail on some host + distros with a difference on the 479 and 480 lines of the + output. Some other tests need the zh_TW.BIG5 and ja_JP.SJIS locales, they are known to fail + unless those locales are installed. +

+

+ Install the package: +

+
make install
+

+ Run the newly compiled bash program (replacing the + one that is currently being executed): +

+
exec /usr/bin/bash --login
+
+
+

+ 8.36.2. + Contents of Bash +

+
+
+
+ Installed programs: + bash, bashbug, and sh (link to + bash) +
+
+ Installed directory: + /usr/include/bash, /usr/lib/bash, + and /usr/share/doc/bash-5.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ bash +

+
+

+ A widely-used command interpreter; it performs many + types of expansions and substitutions on a given + command line before executing it, thus making this + interpreter a powerful tool +

+
+

+ bashbug +

+
+

+ A shell script to help the user compose and mail + standard formatted bug reports concerning + bash +

+
+

+ sh +

+
+

+ A symlink to the bash program; + when invoked as sh, bash tries to + mimic the startup behavior of historical versions + of sh + as closely as possible, while conforming to the + POSIX standard as well +

+
+
+
+
+
+
+
+

+ 8.37. Libtool-2.5.4 +

+
+
+
+
+
+

+ The Libtool package contains the GNU generic library support + script. It makes the use of shared libraries simpler with a + consistent, portable interface. +

+
+
+
+ Approximate build time: + 0.6 SBU +
+
+ Required disk space: + 44 MB +
+
+
+
+
+

+ 8.37.1. Installation of Libtool +

+

+ Prepare Libtool for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+

+ Remove a static library only useful for the test suite: +

+
rm -fv /usr/lib/libltdl.a
+
+
+

+ 8.37.2. + Contents of Libtool +

+
+
+
+ Installed programs: + libtool and libtoolize +
+
+ Installed libraries: + libltdl.so +
+
+ Installed directories: + /usr/include/libltdl and + /usr/share/libtool +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ libtool +

+
+

+ Provides generalized library-building support + services +

+
+

+ libtoolize +

+
+

+ Provides a standard way to add libtool support + to a package +

+
+

+ libltdl +

+
+

+ Hides the various difficulties of opening + dynamically loaded libraries +

+
+
+
+
+
+
+
+

+ 8.38. GDBM-1.26 +

+
+
+
+
+
+

+ The GDBM package contains the GNU Database Manager. It is a + library of database functions that uses extensible hashing + and works like the standard UNIX dbm. The library provides + primitives for storing key/data pairs, searching and + retrieving the data by its key and deleting a key along with + its data. +

+
+
+
+ Approximate build time: + less than 0.2 SBU +
+
+ Required disk space: + 13 MB +
+
+
+
+
+

+ 8.38.1. Installation of GDBM +

+

+ Prepare GDBM for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --enable-libgdbm-compat
+
+

+ The meaning of the configure option: +

+
+
+ --enable-libgdbm-compat +
+
+

+ This switch enables building the libgdbm compatibility + library. Some packages outside of LFS may require the + older DBM routines it provides. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.38.2. + Contents of GDBM +

+
+
+
+ Installed programs: + gdbm_dump, gdbm_load, and + gdbmtool +
+
+ Installed libraries: + libgdbm.so and + libgdbm_compat.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gdbm_dump +

+
+

+ Dumps a GDBM database to a file +

+
+

+ gdbm_load +

+
+

+ Recreates a GDBM database from a dump file +

+
+

+ gdbmtool +

+
+

+ Tests and modifies a GDBM database +

+
+

+ libgdbm +

+
+

+ Contains functions to manipulate a hashed database +

+
+

+ libgdbm_compat +

+
+

+ Compatibility library containing older DBM + functions +

+
+
+
+
+
+
+
+

+ 8.39. Gperf-3.3 +

+
+
+
+
+
+

+ Gperf generates a perfect hash function from a key set. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 12 MB +
+
+
+
+
+

+ 8.39.1. Installation of Gperf +

+

+ Prepare Gperf for compilation: +

+
./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.3
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.39.2. + Contents of Gperf +

+
+
+
+ Installed program: + gperf +
+
+ Installed directory: + /usr/share/doc/gperf-3.3 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ gperf +

+
+

+ Generates a perfect hash from a key set +

+
+
+
+
+
+
+
+

+ 8.40. Expat-2.7.1 +

+
+
+
+
+
+

+ The Expat package contains a stream oriented C library for + parsing XML. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 14 MB +
+
+
+
+
+

+ 8.40.1. Installation of Expat +

+

+ Prepare Expat for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --docdir=/usr/share/doc/expat-2.7.1
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+

+ If desired, install the documentation: +

+
install -v -m644 doc/*.{html,css} /usr/share/doc/expat-2.7.1
+
+
+

+ 8.40.2. + Contents of Expat +

+
+
+
+ Installed program: + xmlwf +
+
+ Installed libraries: + libexpat.so +
+
+ Installed directory: + /usr/share/doc/expat-2.7.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + +
+

+ xmlwf +

+
+

+ Is a non-validating utility to check whether or not + XML documents are well formed +

+
+

+ libexpat +

+
+

+ Contains API functions for parsing XML +

+
+
+
+
+
+
+
+

+ 8.41. Inetutils-2.6 +

+
+
+
+
+
+

+ The Inetutils package contains programs for basic networking. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 36 MB +
+
+
+
+
+

+ 8.41.1. Installation of Inetutils +

+

+ First, make the package build with gcc-14.1 or later: +

+
sed -i 's/def HAVE_TERMCAP_TGETENT/ 1/' telnet/telnet.c
+

+ Prepare Inetutils for compilation: +

+
./configure --prefix=/usr        \
+            --bindir=/usr/bin    \
+            --localstatedir=/var \
+            --disable-logger     \
+            --disable-whois      \
+            --disable-rcp        \
+            --disable-rexec      \
+            --disable-rlogin     \
+            --disable-rsh        \
+            --disable-servers
+
+

+ The meaning of the configure options: +

+
+
+ --disable-logger +
+
+

+ This option prevents Inetutils from installing the + logger + program, which is used by scripts to pass messages to + the System Log Daemon. Do not install it because + Util-linux installs a more recent version. +

+
+
+ --disable-whois +
+
+

+ This option disables the building of the Inetutils + whois + client, which is out of date. Instructions for a better + whois + client are in the BLFS book. +

+
+
+ --disable-r* +
+
+

+ These parameters disable building obsolete programs + that should not be used due to security issues. The + functions provided by these programs can be provided by + the openssh package in + the BLFS book. +

+
+
+ --disable-servers +
+
+

+ This disables the installation of the various network + servers included as part of the Inetutils package. + These servers are deemed not appropriate in a basic LFS + system. Some are insecure by nature and are only + considered safe on trusted networks. Note that better + replacements are available for many of these servers. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ One test named libls.sh is + known to fail sometimes. +

+

+ Install the package: +

+
make install
+

+ Move a program to the proper location: +

+
mv -v /usr/{,s}bin/ifconfig
+
+
+

+ 8.41.2. Contents of Inetutils +

+
+
+
+ Installed programs: + dnsdomainname, ftp, ifconfig, + hostname, ping, ping6, talk, telnet, tftp, and + traceroute +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ dnsdomainname +

+
+

+ Show the system's DNS domain name +

+
+

+ ftp +

+
+

+ Is the file transfer protocol program +

+
+

+ hostname +

+
+

+ Reports or sets the name of the host +

+
+

+ ifconfig +

+
+

+ Manages network interfaces +

+
+

+ ping +

+
+

+ Sends echo-request packets and reports how long the + replies take +

+
+

+ ping6 +

+
+

+ A version of ping for IPv6 + networks +

+
+

+ talk +

+
+

+ Is used to chat with another user +

+
+

+ telnet +

+
+

+ An interface to the TELNET protocol +

+
+

+ tftp +

+
+

+ A trivial file transfer program +

+
+

+ traceroute +

+
+

+ 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 +

+
+
+
+
+
+
+
+

+ 8.42. Less-679 +

+
+
+
+
+
+

+ The Less package contains a text file viewer. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 16 MB +
+
+
+
+
+

+ 8.42.1. Installation of Less +

+

+ Prepare Less for compilation: +

+
./configure --prefix=/usr --sysconfdir=/etc
+
+

+ The meaning of the configure options: +

+
+
+ --sysconfdir=/etc +
+
+

+ This option tells the programs created by the package + to look in /etc for the + configuration files. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.42.2. + Contents of Less +

+
+
+
+ Installed programs: + less, lessecho, and lesskey +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ less +

+
+

+ A file viewer or pager; it displays the contents of + the given file, letting the user scroll, find + strings, and jump to marks +

+
+

+ lessecho +

+
+

+ Needed to expand meta-characters, such as + * and + ?, in + filenames on Unix systems +

+
+

+ lesskey +

+
+

+ Used to specify the key bindings for less +

+
+
+
+
+
+
+
+

+ 8.43. Perl-5.42.0 +

+
+
+
+
+
+

+ The Perl package contains the Practical Extraction and Report + Language. +

+
+
+
+ Approximate build time: + 1.3 SBU +
+
+ Required disk space: + 257 MB +
+
+
+
+
+

+ 8.43.1. Installation of Perl +

+

+ This version of Perl builds the Compress::Raw::Zlib and + Compress::Raw::BZip2 modules. By default Perl will use an + internal copy of the sources for the build. Issue the + following command so that Perl will use the libraries + installed on the system: +

+
export BUILD_ZLIB=False
+export BUILD_BZIP2=0
+

+ To have full control over the way Perl is set up, you can + remove the “-des” options from the following + command and hand-pick the way this package is built. + Alternatively, use the command exactly as shown below to use + the defaults that Perl auto-detects: +

+
sh Configure -des                                          \
+             -D prefix=/usr                                \
+             -D vendorprefix=/usr                          \
+             -D privlib=/usr/lib/perl5/5.42/core_perl      \
+             -D archlib=/usr/lib/perl5/5.42/core_perl      \
+             -D sitelib=/usr/lib/perl5/5.42/site_perl      \
+             -D sitearch=/usr/lib/perl5/5.42/site_perl     \
+             -D vendorlib=/usr/lib/perl5/5.42/vendor_perl  \
+             -D vendorarch=/usr/lib/perl5/5.42/vendor_perl \
+             -D man1dir=/usr/share/man/man1                \
+             -D man3dir=/usr/share/man/man3                \
+             -D pager="/usr/bin/less -isR"                 \
+             -D useshrplib                                 \
+             -D usethreads
+
+

+ The meaning of the new Configure options: +

+
+
+ -D + pager="/usr/bin/less -isR" +
+
+

+ This ensures that less is used instead + of more. +

+
+
+ -D + man1dir=/usr/share/man/man1 -D + man3dir=/usr/share/man/man3 +
+
+

+ Since Groff is not installed yet, Configure will not + create man pages for Perl. These parameters override + this behavior. +

+
+
+ -D + usethreads +
+
+

+ Build Perl with support for threads. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
TEST_JOBS=$(nproc) make test_harness
+

+ Install the package and clean up: +

+
make install
+unset BUILD_ZLIB BUILD_BZIP2
+
+
+

+ 8.43.2. + Contents of Perl +

+
+
+
+ Installed programs: + corelist, cpan, enc2xs, encguess, + h2ph, h2xs, instmodsh, json_pp, libnetcfg, perl, + perl5.42.0 (hard link to perl), perlbug, perldoc, + perlivp, perlthanks (hard link to perlbug), piconv, + pl2pm, pod2html, pod2man, pod2text, pod2usage, + podchecker, podselect, prove, ptar, ptardiff, ptargrep, + shasum, splain, xsubpp, and zipdetails +
+
+ Installed libraries: + Many which cannot all be listed + here +
+
+ Installed directory: + /usr/lib/perl5 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ corelist +

+
+

+ A command line front end to Module::CoreList +

+
+

+ cpan +

+
+

+ Interact with the Comprehensive Perl Archive + Network (CPAN) from the command line +

+
+

+ enc2xs +

+
+

+ Builds a Perl extension for the Encode module from + either Unicode Character Mappings or Tcl Encoding + Files +

+
+

+ encguess +

+
+

+ Guess the encoding type of one or several files +

+
+

+ h2ph +

+
+

+ Converts .h C header + files to .ph Perl + header files +

+
+

+ h2xs +

+
+

+ Converts .h C header + files to Perl extensions +

+
+

+ instmodsh +

+
+

+ Shell script for examining installed Perl modules; + it can create a tarball from an installed module +

+
+

+ json_pp +

+
+

+ Converts data between certain input and output + formats +

+
+

+ libnetcfg +

+
+

+ Can be used to configure the libnet Perl module +

+
+

+ perl +

+
+

+ Combines some of the best features of C, + sed, + awk + and sh into a single + Swiss Army language +

+
+

+ perl5.42.0 +

+
+

+ A hard link to perl +

+
+

+ perlbug +

+
+

+ Used to generate bug reports about Perl, or the + modules that come with it, and mail them +

+
+

+ perldoc +

+
+

+ Displays a piece of documentation in pod format + that is embedded in the Perl installation tree or + in a Perl script +

+
+

+ perlivp +

+
+

+ The Perl Installation Verification Procedure; it + can be used to verify that Perl and its libraries + have been installed correctly +

+
+

+ perlthanks +

+
+

+ Used to generate thank you messages to mail to the + Perl developers +

+
+

+ piconv +

+
+

+ A Perl version of the character encoding converter + iconv +

+
+

+ pl2pm +

+
+

+ A rough tool for converting Perl4 .pl files to Perl5 .pm modules +

+
+

+ pod2html +

+
+

+ Converts files from pod format to HTML format +

+
+

+ pod2man +

+
+

+ Converts pod data to formatted *roff input +

+
+

+ pod2text +

+
+

+ Converts pod data to formatted ASCII text +

+
+

+ pod2usage +

+
+

+ Prints usage messages from embedded pod docs in + files +

+
+

+ podchecker +

+
+

+ Checks the syntax of pod format documentation files +

+
+

+ podselect +

+
+

+ Displays selected sections of pod documentation +

+
+

+ prove +

+
+

+ Command line tool for running tests against the + Test::Harness module +

+
+

+ ptar +

+
+

+ A tar-like program + written in Perl +

+
+

+ ptardiff +

+
+

+ A Perl program that compares an extracted archive + with an unextracted one +

+
+

+ ptargrep +

+
+

+ A Perl program that applies pattern matching to the + contents of files in a tar archive +

+
+

+ shasum +

+
+

+ Prints or checks SHA checksums +

+
+

+ splain +

+
+

+ Is used to force verbose warning diagnostics in + Perl +

+
+

+ xsubpp +

+
+

+ Converts Perl XS code into C code +

+
+

+ zipdetails +

+
+

+ Displays details about the internal structure of a + Zip file +

+
+
+
+
+
+
+
+

+ 8.44. XML::Parser-2.47 +

+
+
+
+
+
+

+ The XML::Parser module is a Perl interface to James Clark's + XML parser, Expat. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 2.4 MB +
+
+
+
+
+

+ 8.44.1. Installation of XML::Parser +

+

+ Prepare XML::Parser for compilation: +

+
perl Makefile.PL
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make test
+

+ Install the package: +

+
make install
+
+
+

+ 8.44.2. Contents of XML::Parser +

+
+
+
+ Installed module: + Expat.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ Expat +

+
+

+ provides the Perl Expat interface +

+
+
+
+
+
+
+
+

+ 8.45. Intltool-0.51.0 +

+
+
+
+
+
+

+ The Intltool is an internationalization tool used for + extracting translatable strings from source files. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 1.5 MB +
+
+
+
+
+

+ 8.45.1. Installation of Intltool +

+

+ First fix a warning that is caused by perl-5.22 and later: +

+
sed -i 's:\\\${:\\\$\\{:' intltool-update.in
+
+

+ Note +

+

+ The above regular expression looks unusual because of all + the backslashes. What it does is add a backslash before the + right brace character in the sequence '\${' resulting in + '\$\{'. +

+
+

+ Prepare Intltool for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO
+
+
+

+ 8.45.2. Contents of Intltool +

+
+
+
+ Installed programs: + intltool-extract, intltool-merge, + intltool-prepare, intltool-update, and intltoolize +
+
+ Installed directories: + /usr/share/doc/intltool-0.51.0 and + /usr/share/intltool +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ intltoolize +

+
+

+ Prepares a package to use intltool +

+
+

+ intltool-extract +

+
+

+ Generates header files that can be read by + gettext +

+
+

+ intltool-merge +

+
+

+ Merges translated strings into various file types +

+
+

+ intltool-prepare +

+
+

+ Updates pot files and merges them with translation + files +

+
+

+ intltool-update +

+
+

+ Updates the po template files and merges them with + the translations +

+
+
+
+
+
+
+
+

+ 8.46. Autoconf-2.72 +

+
+
+
+
+
+

+ The Autoconf package contains programs for producing shell + scripts that can automatically configure source code. +

+
+
+
+ Approximate build time: + less than 0.1 SBU (about 0.4 SBU + with tests) +
+
+ Required disk space: + 25 MB +
+
+
+
+
+

+ 8.46.1. Installation of Autoconf +

+

+ Prepare Autoconf for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.46.2. Contents of Autoconf +

+
+
+
+ Installed programs: + autoconf, autoheader, autom4te, + autoreconf, autoscan, autoupdate, and ifnames +
+
+ Installed directory: + /usr/share/autoconf +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ autoconf +

+
+

+ Produces shell scripts that automatically configure + software source code packages to adapt to many + kinds of Unix-like systems; the configuration + scripts it produces are independent—running them + does not require the autoconf program +

+
+

+ autoheader +

+
+

+ A tool for creating template files of C + #define + statements for configure to use +

+
+

+ autom4te +

+
+

+ A wrapper for the M4 macro processor +

+
+

+ autoreconf +

+
+

+ Automatically runs autoconf, + autoheader, + aclocal, + automake, + gettextize, and + libtoolize in the + correct order to save time when changes are made to + autoconf and + automake template + files +

+
+

+ autoscan +

+
+

+ Helps to create a configure.in file for a software + package; it examines the source files in a + directory tree, searching them for common + portability issues, and creates a configure.scan file that serves + as a preliminary configure.in file for the package +

+
+

+ autoupdate +

+
+

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

+
+

+ ifnames +

+
+

+ Helps when writing configure.in files for a software + package; it 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.] +

+
+
+
+
+
+
+
+

+ 8.47. Automake-1.18.1 +

+
+
+
+
+
+

+ The Automake package contains programs for generating + Makefiles for use with Autoconf. +

+
+
+
+ Approximate build time: + less than 0.1 SBU (about 1.1 SBU + with tests) +
+
+ Required disk space: + 123 MB +
+
+
+
+
+

+ 8.47.1. Installation of Automake +

+

+ Prepare Automake for compilation: +

+
./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.18.1
+

+ Compile the package: +

+
make
+

+ Using four parallel jobs speeds up the tests, even on systems + with less logical cores, due to internal delays in individual + tests. To test the results, issue: +

+
make -j$(($(nproc)>4?$(nproc):4)) check
+

+ Replace $((...)) + with the number of logical cores you want to use if you don't + want to use all. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.47.2. Contents of Automake +

+
+
+
+ Installed programs: + aclocal, aclocal-1.18 (hard linked + with aclocal), automake, and automake-1.18 (hard linked + with automake) +
+
+ Installed directories: + /usr/share/aclocal-1.18, + /usr/share/automake-1.18, and + /usr/share/doc/automake-1.18.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ aclocal +

+
+

+ Generates aclocal.m4 + files based on the contents of configure.in files +

+
+

+ aclocal-1.18 +

+
+

+ A hard link to aclocal +

+
+

+ automake +

+
+

+ A tool for automatically generating Makefile.in files from + Makefile.am files [To + create all the Makefile.in files for a package, + run this program in the top-level directory. By + scanning the configure.in file, it + automatically finds each appropriate Makefile.am file and generates + the corresponding Makefile.in file.] +

+
+

+ automake-1.18 +

+
+

+ A hard link to automake +

+
+
+
+
+
+
+
+

+ 8.48. OpenSSL-3.5.2 +

+
+
+
+
+
+

+ The OpenSSL package contains management tools and libraries + relating to cryptography. These are useful for providing + cryptographic functions to other packages, such as OpenSSH, + email applications, and web browsers (for accessing HTTPS + sites). +

+
+
+
+ Approximate build time: + 1.9 SBU +
+
+ Required disk space: + 1.1 GB +
+
+
+
+
+

+ 8.48.1. Installation of OpenSSL +

+

+ Prepare OpenSSL for compilation: +

+
./config --prefix=/usr         \
+         --openssldir=/etc/ssl \
+         --libdir=lib          \
+         shared                \
+         zlib-dynamic
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
HARNESS_JOBS=$(nproc) make test
+

+ One test, 30-test_afalg.t, is known to fail if the host + kernel does not have CONFIG_CRYPTO_USER_API_SKCIPHER enabled, or + does not have any options providing an AES with CBC + implementation (for example, the combination of CONFIG_CRYPTO_AES and CONFIG_CRYPTO_CBC, or CONFIG_CRYPTO_AES_NI_INTEL if the CPU + supports AES-NI) enabled. If it fails, it can safely be + ignored. +

+

+ Install the package: +

+
sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile
+make MANSUFFIX=ssl install
+

+ Add the version to the documentation directory name, to be + consistent with other packages: +

+
mv -v /usr/share/doc/openssl /usr/share/doc/openssl-3.5.2
+

+ If desired, install some additional documentation: +

+
cp -vfr doc/* /usr/share/doc/openssl-3.5.2
+
+

+ Note +

+

+ You should update OpenSSL when a new version which fixes + vulnerabilities is announced. Since OpenSSL 3.0.0, the + OpenSSL versioning scheme follows the MAJOR.MINOR.PATCH + format. API/ABI compatibility is guaranteed for the same + MAJOR version number. Because LFS installs only the shared + libraries, there is no need to recompile packages which + link to libcrypto.so or + libssl.so when upgrading to a version with the same + MAJOR version number. +

+

+ However, any running programs linked to those libraries + need to be stopped and restarted. Read the related entries + in Section 8.2.1, “Upgrade + Issues” for details. +

+
+
+
+

+ 8.48.2. + Contents of OpenSSL +

+
+
+
+ Installed programs: + c_rehash and openssl +
+
+ Installed libraries: + libcrypto.so and libssl.so +
+
+ Installed directories: + /etc/ssl, /usr/include/openssl, + /usr/lib/engines and /usr/share/doc/openssl-3.5.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ c_rehash +

+
+

+ is a Perl script + that scans all files in a directory and adds + symbolic links to their hash values. Use of + c_rehash is + considered obsolete and should be replaced by + openssl + rehash command +

+
+

+ openssl +

+
+

+ is a command-line tool for using the various + cryptography functions of OpenSSL's crypto library from + the shell. It can be used for various functions + which are documented in openssl(1) +

+
+

+ libcrypto.so +

+
+

+ implements a wide range of cryptographic algorithms + used in various Internet standards. The services + provided by this library are used by the + OpenSSL + implementations of SSL, TLS and S/MIME, and they + have also been used to implement OpenSSH, OpenPGP, and other + cryptographic standards +

+
+

+ libssl.so +

+
+

+ implements the Transport Layer Security (TLS v1) + protocol. It provides a rich API, documentation on + which can be found in ssl(7) +

+
+
+
+
+
+
+
+

+ 8.49. Libelf from + Elfutils-0.193 +

+
+
+
+
+
+

+ Libelf is a library for handling ELF (Executable and Linkable + Format) files. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 156 MB +
+
+
+
+
+

+ 8.49.1. Installation of Libelf +

+

+ Libelf is part of the elfutils-0.193 package. Use the + elfutils-0.193.tar.bz2 file as the source tarball. +

+

+ Prepare Libelf for compilation: +

+
./configure --prefix=/usr        \
+            --disable-debuginfod \
+            --enable-libdebuginfod=dummy
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Two tests are known to fail, dwarf_srclang_check and + run-backtrace-native-core.sh. +

+

+ Install only Libelf: +

+
make -C libelf install
+install -vm644 config/libelf.pc /usr/lib/pkgconfig
+rm /usr/lib/libelf.a
+
+
+

+ 8.49.2. Contents of Libelf +

+
+
+
+ Installed library: + libelf.so +
+
+ Installed directory: + /usr/include/elfutils +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libelf.so +

+
+

+ Contains API functions to handle ELF object files +

+
+
+
+
+
+
+
+

+ 8.50. Libffi-3.5.2 +

+
+
+
+
+
+

+ The Libffi library provides a portable, high level + programming interface to various calling conventions. This + allows a programmer to call any function specified by a call + interface description at run time. +

+

+ FFI stands for Foreign Function Interface. An FFI allows a + program written in one language to call a program written in + another language. Specifically, Libffi can provide a bridge + between an interpreter like Perl, or Python, and shared + library subroutines written in C, or C++. +

+
+
+
+ Approximate build time: + 1.7 SBU +
+
+ Required disk space: + 10 MB +
+
+
+
+
+

+ 8.50.1. Installation of Libffi +

+
+

+ Note +

+

+ Like GMP, Libffi builds with optimizations specific to the + processor in use. If building for another system, change + the value of the --with-gcc-arch= parameter in + the following command to an architecture name fully + implemented by both the host CPU and the + CPU on that system. If this is not done, all applications + that link to libffi will + trigger Illegal Operation Errors. If you cannot figure out + a value safe for both the CPUs, replace the parameter with + --without-gcc-arch to produce a + generic library. +

+
+

+ Prepare Libffi for compilation: +

+
./configure --prefix=/usr    \
+            --disable-static \
+            --with-gcc-arch=native
+
+

+ The meaning of the configure option: +

+
+
+ --with-gcc-arch=native +
+
+

+ Ensure GCC optimizes for the current system. If this is + not specified, the system is guessed and the code + generated may not be correct. If the generated code + will be copied from the native system to a less capable + system, use the less capable system as a parameter. For + details about alternative system types, see + the x86 options in the GCC manual. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.50.2. + Contents of Libffi +

+
+
+
+ Installed library: + libffi.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libffi +

+
+

+ Contains the foreign function interface API + functions +

+
+
+
+
+
+
+
+

+ 8.51. Python-3.13.7 +

+
+
+
+
+
+

+ The Python 3 package contains the Python development + environment. It is useful for object-oriented programming, + writing scripts, prototyping large programs, and developing + entire applications. Python is an interpreted computer + language. +

+
+
+
+ Approximate build time: + 2.0 SBU +
+
+ Required disk space: + 453 MB +
+
+
+
+
+

+ 8.51.1. Installation of Python 3 +

+

+ Prepare Python for compilation: +

+
./configure --prefix=/usr          \
+            --enable-shared        \
+            --with-system-expat    \
+            --enable-optimizations \
+            --without-static-libpython
+
+

+ The meaning of the configure options: +

+
+
+ --with-system-expat +
+
+

+ This switch enables linking against the system version + of Expat. +

+
+
+ --enable-optimizations +
+
+

+ This switch enables extensive, but time-consuming, + optimization steps. The interpreter is built twice; + tests performed on the first build are used to improve + the optimized final version. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Some tests are known to occasionally hang indefinitely. So to + test the results, run the test suite but set a 2-minute time + limit for each test case: +

+
make test TESTOPTS="--timeout 120"
+

+ For a relatively slow system you may need to increase the + time limit and 1 SBU (measured when building Binutils pass 1 + with one CPU core) should be enough. Some tests are flaky, so + the test suite will automatically re-run failed tests. If a + test failed but then passed when re-run, it should be + considered as passed. One test, test_ssl, is known to fail in + the chroot environment. +

+

+ Install the package: +

+
make install
+

+ We use the pip3 + command to install Python 3 programs and modules for all + users as root in several + places in this book. This conflicts with the Python + developers' recommendation: to install packages into a + virtual environment, or into the home directory of a regular + user (by running pip3 as this user). A + multi-line warning is triggered whenever pip3 is issued by the + root user. +

+

+ The main reason for the recommendation is to avoid conflicts + with the system's package manager (dpkg, for example). LFS + does not have a system-wide package manager, so this is not a + problem. Also, pip3 will check for a new + version of itself whenever it's run. Since domain name + resolution is not yet configured in the LFS chroot + environment, pip3 cannot check for a new + version of itself, and will produce a warning. +

+

+ After we boot the LFS system and set up a network connection, + a different warning will be issued, telling the user to + update pip3 + from a pre-built wheel on PyPI (whenever a new version is + available). But LFS considers pip3 to be a part of Python + 3, so it should not be updated separately. Also, an update + from a pre-built wheel would deviate from our objective: to + build a Linux system from source code. So the warning about a + new version of pip3 should be ignored as + well. If you wish, you can suppress all these warnings by + running the following command, which creates a configuration + file: +

+
cat > /etc/pip.conf << EOF
+[global]
+root-user-action = ignore
+disable-pip-version-check = true
+EOF
+
+
+

+ Important +

+

+ In LFS and BLFS we normally build and install Python + modules with the pip3 command. Please be + sure that the pip3 + install commands in both books are run as + the root user (unless it's + for a Python virtual environment). Running pip3 install as a + non-root user may seem to + work, but it will cause the installed module to be + inaccessible by other users. +

+

+ pip3 install + will not reinstall an already installed module + automatically. When using the pip3 install command to + upgrade a module (for example, from meson-0.61.3 to + meson-0.62.0), insert the option --upgrade into the command + line. If it's really necessary to downgrade a module, or + reinstall the same version for some reason, insert + --force-reinstall + --no-deps into the command line. +

+
+

+ If desired, install the preformatted documentation: +

+
install -v -dm755 /usr/share/doc/python-3.13.7/html
+
+tar --strip-components=1  \
+    --no-same-owner       \
+    --no-same-permissions \
+    -C /usr/share/doc/python-3.13.7/html \
+    -xvf ../python-3.13.7-docs-html.tar.bz2
+
+

+ The meaning of the documentation install + commands: +

+
+
+ --no-same-owner and --no-same-permissions +
+
+

+ Ensure the installed files have the correct ownership + and permissions. Without these options, tar will install the package files + with the upstream creator's values. +

+
+
+
+
+
+

+ 8.51.2. + Contents of Python 3 +

+
+
+
+ Installed programs: + 2to3, idle3, pip3, pydoc3, python3, + and python3-config +
+
+ Installed library: + libpython3.13.so and + libpython3.so +
+
+ Installed directories: + /usr/include/python3.13, + /usr/lib/python3, and /usr/share/doc/python-3.13.7 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ 2to3 +

+
+

+ is a Python + program that reads Python + 2.x source code and applies a series of + fixes to transform it into valid Python 3.x code +

+
+

+ 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. +

+
+

+ pip3 +

+
+

+ The package installer for Python. You can use pip + to install packages from Python Package Index and + other indexes. +

+
+

+ pydoc3 +

+
+

+ is the Python + documentation tool +

+
+

+ python3 +

+
+

+ is the interpreter for Python, an interpreted, + interactive, object-oriented programming language +

+
+
+
+
+
+
+
+

+ 8.52. Flit-Core-3.12.0 +

+
+
+
+
+
+

+ Flit-core is the distribution-building parts of Flit (a + packaging tool for simple Python modules). +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 1.3 MB +
+
+
+
+
+

+ 8.52.1. Installation of Flit-Core +

+

+ Build the package: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ Install the package: +

+
pip3 install --no-index --find-links dist flit_core
+
+

+ The meaning of the pip3 configuration options and + commands: +

+
+
+ wheel +
+
+

+ This command builds the wheel archive for this package. +

+
+
+ -w + dist +
+
+

+ Instructs pip to put the created wheel into the + dist directory. +

+
+
+ --no-cache-dir +
+
+

+ Prevents pip from copying the created wheel into the + /root/.cache/pip + directory. +

+
+
+ install +
+
+

+ This command installs the package. +

+
+
+ --no-build-isolation, + --no-deps, and + --no-index +
+
+

+ These options prevent fetching files from the online + package repository (PyPI). If packages are installed in + the correct order, pip won't need to fetch any files in + the first place; these options add some safety in case + of user error. +

+
+
+ --find-links dist +
+
+

+ Instructs pip to search for wheel archives in the + dist directory. +

+
+
+
+
+
+

+ 8.52.2. Contents of Flit-Core +

+
+
+
+ Installed directory: + /usr/lib/python3.13/site-packages/flit_core and + /usr/lib/python3.13/site-packages/flit_core-3.12.0.dist-info +
+
+
+
+
+
+
+
+

+ 8.53. Packaging-25.0 +

+
+
+
+
+
+

+ The packaging module is a Python library that provides + utilities that implement the interoperability specifications + which have clearly one correct behaviour (PEP440) or benefit + greatly from having a single shared implementation (PEP425). + This includes utilities for version handling, specifiers, + markers, tags, and requirements. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 3.3 MB +
+
+
+
+
+

+ 8.53.1. Installation of Packaging +

+

+ Compile packaging with the following command: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ Install packaging with the following command: +

+
pip3 install --no-index --find-links dist packaging
+
+
+

+ 8.53.2. Contents of Packaging +

+
+
+
+ Installed directories: + /usr/lib/python3.13/site-packages/packaging and + /usr/lib/python3.13/site-packages/packaging-25.0.dist-info +
+
+
+
+
+
+
+
+

+ 8.54. Wheel-0.46.1 +

+
+
+
+
+
+

+ Wheel is a Python library that is the reference + implementation of the Python wheel packaging standard. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 608 KB +
+
+
+
+
+

+ 8.54.1. Installation of Wheel +

+

+ Compile Wheel with the following command: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ Install Wheel with the following command: +

+
pip3 install --no-index --find-links dist wheel
+
+
+

+ 8.54.2. + Contents of Wheel +

+
+
+
+ Installed program: + wheel +
+
+ Installed directories: + /usr/lib/python3.13/site-packages/wheel and + /usr/lib/python3.13/site-packages/wheel-0.46.1.dist-info +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ wheel +

+
+

+ is a utility to unpack, pack, or convert wheel + archives +

+
+
+
+
+
+
+
+

+ 8.55. Setuptools-80.9.0 +

+
+
+
+
+
+

+ Setuptools is a tool used to download, build, install, + upgrade, and uninstall Python packages. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 25 MB +
+
+
+
+
+

+ 8.55.1. Installation of Setuptools +

+

+ Build the package: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ Install the package: +

+
pip3 install --no-index --find-links dist setuptools
+
+
+

+ 8.55.2. Contents of Setuptools +

+
+
+
+ Installed directory: + /usr/lib/python3.13/site-packages/_distutils_hack, + /usr/lib/python3.13/site-packages/pkg_resources, + /usr/lib/python3.13/site-packages/setuptools, and + /usr/lib/python3.13/site-packages/setuptools-80.9.0.dist-info +
+
+
+
+
+
+
+
+

+ 8.56. Ninja-1.13.1 +

+
+
+
+
+
+

+ Ninja is a small build system with a focus on speed. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 43 MB +
+
+
+
+
+

+ 8.56.1. Installation of Ninja +

+

+ When run, ninja + normally utilizes the greatest possible number of processes + in parallel. By default this is the number of cores on the + system, plus two. This may overheat the CPU, or make the + system run out of memory. When ninja is invoked from the + command line, passing the -jN parameter will limit the number + of parallel processes. Some packages embed the execution of + ninja, and do + not pass the -j parameter on to it. +

+

+ Using the optional + procedure below allows a user to limit the number of parallel + processes via an environment variable, NINJAJOBS. + For example, + setting: +

+
export NINJAJOBS=4
+

+ will limit ninja to four parallel + processes. +

+

+ If desired, make ninja recognize the + environment variable NINJAJOBS by running the stream editor: +

+
sed -i '/int Guess/a \
+  int   j = 0;\
+  char* jobs = getenv( "NINJAJOBS" );\
+  if ( jobs != NULL ) j = atoi( jobs );\
+  if ( j > 0 ) return j;\
+' src/ninja.cc
+

+ Build Ninja with: +

+
python3 configure.py --bootstrap --verbose
+
+

+ The meaning of the build option: +

+
+
+ --bootstrap +
+
+

+ This parameter forces Ninja to rebuild itself for the + current system. +

+
+
+ --verbose +
+
+

+ This parameter makes configure.py show the + progress building Ninja. +

+
+
+
+

+ The package tests cannot run in the chroot environment. They + require + cmake. But the basic function of this package is already + tested by rebuilding itself (with the --bootstrap option) anyway. +

+

+ Install the package: +

+
install -vm755 ninja /usr/bin/
+install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja
+install -vDm644 misc/zsh-completion  /usr/share/zsh/site-functions/_ninja
+
+
+

+ 8.56.2. + Contents of Ninja +

+
+
+
+ Installed programs: + ninja +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ ninja +

+
+

+ is the Ninja build system +

+
+
+
+
+
+
+
+

+ 8.57. Meson-1.8.3 +

+
+
+
+
+
+

+ Meson is an open source build system designed to be both + extremely fast and as user friendly as possible. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 45 MB +
+
+
+
+
+

+ 8.57.1. Installation of Meson +

+

+ Compile Meson with the following command: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ The test suite requires some packages outside the scope of + LFS. +

+

+ Install the package: +

+
pip3 install --no-index --find-links dist meson
+install -vDm644 data/shell-completions/bash/meson /usr/share/bash-completion/completions/meson
+install -vDm644 data/shell-completions/zsh/_meson /usr/share/zsh/site-functions/_meson
+
+

+ The meaning of the install parameters: +

+
+
+ -w + dist +
+
+

+ Puts the created wheels into the dist directory. +

+
+
+ --find-links dist +
+
+

+ Installs wheels from the dist directory. +

+
+
+
+
+
+

+ 8.57.2. + Contents of Meson +

+
+
+
+ Installed programs: + meson +
+
+ Installed directory: + /usr/lib/python3.13/site-packages/meson-1.8.3.dist-info + and /usr/lib/python3.13/site-packages/mesonbuild +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ meson +

+
+

+ A high productivity build system +

+
+
+
+
+
+
+
+

+ 8.58. Kmod-34.2 +

+
+
+
+
+
+

+ The Kmod package contains libraries and utilities for loading + kernel modules +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 6.7 MB +
+
+
+
+
+

+ 8.58.1. Installation of Kmod +

+

+ Prepare Kmod for compilation: +

+
mkdir -p build
+cd       build
+
+meson setup --prefix=/usr ..    \
+            --buildtype=release \
+            -D manpages=false
+
+

+ The meaning of the configure options: +

+
+
+ -D + manpages=false +
+
+

+ This option disables generating the man pages which + requires an external program. +

+
+
+
+

+ Compile the package: +

+
ninja
+

+ The test suite of this package requires raw kernel headers + (not the “sanitized” kernel headers installed + earlier), which are beyond the scope of LFS. +

+

+ Now install the package: +

+
ninja install
+
+
+

+ 8.58.2. + Contents of Kmod +

+
+
+
+ Installed programs: + depmod (link to kmod), insmod (link + to kmod), kmod, lsmod (link to kmod), modinfo (link to + kmod), modprobe (link to kmod), and rmmod (link to + kmod) +
+
+ Installed library: + libkmod.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ depmod +

+
+

+ Creates a dependency file based on the symbols it + finds in the existing set of modules; this + dependency file is used by modprobe to + automatically load the required modules +

+
+

+ insmod +

+
+

+ Installs a loadable module in the running kernel +

+
+

+ kmod +

+
+

+ Loads and unloads kernel modules +

+
+

+ lsmod +

+
+

+ Lists currently loaded modules +

+
+

+ modinfo +

+
+

+ Examines an object file associated with a kernel + module and displays any information that it can + glean +

+
+

+ modprobe +

+
+

+ Uses a dependency file, created by depmod, to + automatically load relevant modules +

+
+

+ rmmod +

+
+

+ Unloads modules from the running kernel +

+
+

+ libkmod +

+
+

+ This library is used by other programs to load and + unload kernel modules +

+
+
+
+
+
+
+
+

+ 8.59. Coreutils-9.7 +

+
+
+
+
+
+

+ The Coreutils package contains the basic utility programs + needed by every operating system. +

+
+
+
+ Approximate build time: + 1.2 SBU +
+
+ Required disk space: + 180 MB +
+
+
+
+
+

+ 8.59.1. Installation of Coreutils +

+

+ First, apply a patch for a security problem identified + upstream: +

+
patch -Np1 -i ../coreutils-9.7-upstream_fix-1.patch
+

+ POSIX requires that programs from Coreutils recognize + character boundaries correctly even in multibyte locales. The + following patch fixes this non-compliance and other + internationalization-related bugs. +

+
patch -Np1 -i ../coreutils-9.7-i18n-1.patch
+
+

+ Note +

+

+ Many bugs have been found in this patch. When reporting new + bugs to the Coreutils maintainers, please check first to + see if those bugs are reproducible without this patch. +

+
+

+ Now prepare Coreutils for compilation: +

+
autoreconf -fv
+automake -af
+FORCE_UNSAFE_CONFIGURE=1 ./configure \
+            --prefix=/usr            \
+            --enable-no-install-program=kill,uptime
+
+

+ The meaning of the commands and configure + options: +

+
+
+ autoreconf -fv +
+
+

+ The patch for internationalization has modified the + build system, so the configuration files must be + regenerated. Normally we would use the -i option to update the + standard auxiliary files, but for this package it does + not work because configure.ac specified an old gettext + version. +

+
+
+ automake + -af +
+
+

+ The automake auxiliary files were not updated by + autoreconf due to the + missing -i + option. This command updates them to prevent a build + failure. +

+
+
+ FORCE_UNSAFE_CONFIGURE=1 +
+
+

+ This environment variable allows the package to be + built by the root user. +

+
+
+ --enable-no-install-program=kill,uptime +
+
+

+ The purpose of this switch is to prevent Coreutils from + installing programs that will be installed by other + packages. +

+
+
+
+

+ Compile the package: +

+
make
+

+ Skip down to “Install + the package” if not running the test suite. +

+

+ Now the test suite is ready to be run. First, run the tests + that are meant to be run as user root: +

+
make NON_ROOT_USERNAME=tester check-root
+

+ We're going to run the remainder of the tests as the + tester user. Certain tests + require that the user be a member of more than one group. So + that these tests are not skipped, add a temporary group and + make the user tester a part + of it: +

+
groupadd -g 102 dummy -U tester
+

+ Fix some of the permissions so that the non-root user can compile and run the tests: +

+
chown -R tester . 
+

+ Now run the tests (using /dev/null for the standard input, or two + tests may be broken if building LFS in a graphical terminal + or a session in SSH or GNU Screen because the standard input + is connected to a PTY from host distro, and the device node + for such a PTY cannot be accessed from the LFS chroot + environment): +

+
su tester -c "PATH=$PATH make -k RUN_EXPENSIVE_TESTS=yes check" \
+   < /dev/null
+

+ Remove the temporary group: +

+
groupdel dummy
+

+ Install the package: +

+
make install
+

+ Move programs to the locations specified by the FHS: +

+
mv -v /usr/bin/chroot /usr/sbin
+mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
+sed -i 's/"1"/"8"/' /usr/share/man/man8/chroot.8
+
+
+

+ 8.59.2. Contents of Coreutils +

+
+
+
+ Installed programs: + [, b2sum, base32, base64, basename, + basenc, cat, chcon, chgrp, chmod, chown, chroot, cksum, + comm, cp, csplit, cut, date, dd, df, dir, dircolors, + dirname, du, echo, env, expand, expr, factor, false, fmt, + fold, groups, head, hostid, id, install, join, link, ln, + logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, + nice, nl, nohup, nproc, numfmt, od, paste, pathchk, + pinky, pr, printenv, printf, ptx, pwd, readlink, + realpath, rm, rmdir, runcon, seq, sha1sum, sha224sum, + sha256sum, sha384sum, sha512sum, shred, shuf, sleep, + sort, split, stat, stdbuf, stty, sum, sync, tac, tail, + tee, test, timeout, touch, tr, true, truncate, tsort, + tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, + whoami, and yes +
+
+ Installed library: + libstdbuf.so (in + /usr/libexec/coreutils) +
+
+ Installed directory: + /usr/libexec/coreutils +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ [ +

+
+

+ Is an actual command, /usr/bin/[; it is a synonym + for the test command +

+
+

+ base32 +

+
+

+ Encodes and decodes data according to the base32 + specification (RFC 4648) +

+
+

+ base64 +

+
+

+ Encodes and decodes data according to the base64 + specification (RFC 4648) +

+
+

+ b2sum +

+
+

+ Prints or checks BLAKE2 (512-bit) checksums +

+
+

+ basename +

+
+

+ Strips any path and a given suffix from a file name +

+
+

+ basenc +

+
+

+ Encodes or decodes data using various algorithms +

+
+

+ cat +

+
+

+ Concatenates files to standard output +

+
+

+ chcon +

+
+

+ Changes security context for files and directories +

+
+

+ chgrp +

+
+

+ Changes the group ownership of files and + directories +

+
+

+ chmod +

+
+

+ Changes the permissions of each file to the given + mode; the mode can be either a symbolic + representation of the changes to be made, or an + octal number representing the new permissions +

+
+

+ chown +

+
+

+ Changes the user and/or group ownership of files + and directories +

+
+

+ chroot +

+
+

+ Runs a command with the specified directory as the + / directory +

+
+

+ cksum +

+
+

+ Prints the Cyclic Redundancy Check (CRC) checksum + and the byte counts of each specified file +

+
+

+ comm +

+
+

+ Compares two sorted files, outputting in three + columns the lines that are unique and the lines + that are common +

+
+

+ cp +

+
+

+ Copies files +

+
+

+ csplit +

+
+

+ Splits a given file into several new files, + separating them according to given patterns or line + numbers, and outputting the byte count of each new + file +

+
+

+ cut +

+
+

+ Prints sections of lines, selecting the parts + according to given fields or positions +

+
+

+ date +

+
+

+ Displays the current date and time in the given + format, or sets the system date and time +

+
+

+ dd +

+
+

+ Copies a file using the given block size and count, + while optionally performing conversions on it +

+
+

+ df +

+
+

+ Reports the amount of disk space available (and + used) on all mounted file systems, or only on the + file systems holding the selected files +

+
+

+ dir +

+
+

+ Lists the contents of each given directory (the + same as the ls command) +

+
+

+ dircolors +

+
+

+ Outputs commands to set the LS_COLOR environment variable to + change the color scheme used by ls +

+
+

+ dirname +

+
+

+ Extracts the directory portion(s) of the given + name(s) +

+
+

+ du +

+
+

+ Reports the amount of disk space used by the + current directory, by each of the given directories + (including all subdirectories) or by each of the + given files +

+
+

+ echo +

+
+

+ Displays the given strings +

+
+

+ env +

+
+

+ Runs a command in a modified environment +

+
+

+ expand +

+
+

+ Converts tabs to spaces +

+
+

+ expr +

+
+

+ Evaluates expressions +

+
+

+ factor +

+
+

+ Prints the prime factors of the specified integers +

+
+

+ false +

+
+

+ Does nothing, unsuccessfully; it always exits with + a status code indicating failure +

+
+

+ fmt +

+
+

+ Reformats the paragraphs in the given files +

+
+

+ fold +

+
+

+ Wraps the lines in the given files +

+
+

+ groups +

+
+

+ Reports a user's group memberships +

+
+

+ head +

+
+

+ Prints the first ten lines (or the given number of + lines) of each given file +

+
+

+ hostid +

+
+

+ Reports the numeric identifier (in hexadecimal) of + the host +

+
+

+ id +

+
+

+ Reports the effective user ID, group ID, and group + memberships of the current user or specified user +

+
+

+ install +

+
+

+ Copies files while setting their permission modes + and, if possible, their owner and group +

+
+

+ join +

+
+

+ Joins the lines that have identical join fields + from two separate files +

+
+

+ link +

+
+

+ Creates a hard link (with the given name) to a file +

+
+

+ ln +

+
+

+ Makes hard links or soft (symbolic) links between + files +

+
+

+ logname +

+
+

+ Reports the current user's login name +

+
+

+ ls +

+
+

+ Lists the contents of each given directory +

+
+

+ md5sum +

+
+

+ Reports or checks Message Digest 5 (MD5) checksums +

+
+

+ mkdir +

+
+

+ Creates directories with the given names +

+
+

+ mkfifo +

+
+

+ Creates First-In, First-Outs (FIFOs), "named pipes" + in UNIX parlance, with the given names +

+
+

+ mknod +

+
+

+ Creates device nodes with the given names; a device + node is a character special file, a block special + file, or a FIFO +

+
+

+ mktemp +

+
+

+ Creates temporary files in a secure manner; it is + used in scripts +

+
+

+ mv +

+
+

+ Moves or renames files or directories +

+
+

+ nice +

+
+

+ Runs a program with modified scheduling priority +

+
+

+ nl +

+
+

+ Numbers the lines from the given files +

+
+

+ nohup +

+
+

+ Runs a command immune to hangups, with its output + redirected to a log file +

+
+

+ nproc +

+
+

+ Prints the number of processing units available to + a process +

+
+

+ numfmt +

+
+

+ Converts numbers to or from human-readable strings +

+
+

+ od +

+
+

+ Dumps files in octal and other formats +

+
+

+ paste +

+
+

+ Merges the given files, joining sequentially + corresponding lines side by side, separated by tab + characters +

+
+

+ pathchk +

+
+

+ Checks if file names are valid or portable +

+
+

+ pinky +

+
+

+ Is a lightweight finger client; it reports some + information about the given users +

+
+

+ pr +

+
+

+ Paginates and columnates files for printing +

+
+

+ printenv +

+
+

+ Prints the environment +

+
+

+ printf +

+
+

+ Prints the given arguments according to the given + format, much like the C printf function +

+
+

+ ptx +

+
+

+ Produces a permuted index from the contents of the + given files, with each keyword in its context +

+
+

+ pwd +

+
+

+ Reports the name of the current working directory +

+
+

+ readlink +

+
+

+ Reports the value of the given symbolic link +

+
+

+ realpath +

+
+

+ Prints the resolved path +

+
+

+ rm +

+
+

+ Removes files or directories +

+
+

+ rmdir +

+
+

+ Removes directories if they are empty +

+
+

+ runcon +

+
+

+ Runs a command with specified security context +

+
+

+ seq +

+
+

+ Prints a sequence of numbers within a given range + and with a given increment +

+
+

+ sha1sum +

+
+

+ Prints or checks 160-bit Secure Hash Algorithm 1 + (SHA1) checksums +

+
+

+ sha224sum +

+
+

+ Prints or checks 224-bit Secure Hash Algorithm + checksums +

+
+

+ sha256sum +

+
+

+ Prints or checks 256-bit Secure Hash Algorithm + checksums +

+
+

+ sha384sum +

+
+

+ Prints or checks 384-bit Secure Hash Algorithm + checksums +

+
+

+ sha512sum +

+
+

+ Prints or checks 512-bit Secure Hash Algorithm + checksums +

+
+

+ shred +

+
+

+ Overwrites the given files repeatedly with complex + patterns, making it difficult to recover the data +

+
+

+ shuf +

+
+

+ Shuffles lines of text +

+
+

+ sleep +

+
+

+ Pauses for the given amount of time +

+
+

+ sort +

+
+

+ Sorts the lines from the given files +

+
+

+ split +

+
+

+ Splits the given file into pieces, by size or by + number of lines +

+
+

+ stat +

+
+

+ Displays file or filesystem status +

+
+

+ stdbuf +

+
+

+ Runs commands with altered buffering operations for + its standard streams +

+
+

+ stty +

+
+

+ Sets or reports terminal line settings +

+
+

+ sum +

+
+

+ Prints checksum and block counts for each given + file +

+
+

+ sync +

+
+

+ Flushes file system buffers; it forces changed + blocks to disk and updates the super block +

+
+

+ tac +

+
+

+ Concatenates the given files in reverse +

+
+

+ tail +

+
+

+ Prints the last ten lines (or the given number of + lines) of each given file +

+
+

+ tee +

+
+

+ Reads from standard input while writing both to + standard output and to the given files +

+
+

+ test +

+
+

+ Compares values and checks file types +

+
+

+ timeout +

+
+

+ Runs a command with a time limit +

+
+

+ touch +

+
+

+ Changes file timestamps, setting the access and + modification times of the given files to the + current time; files that do not exist are created + with zero length +

+
+

+ tr +

+
+

+ Translates, squeezes, and deletes the given + characters from standard input +

+
+

+ true +

+
+

+ Does nothing, successfully; it always exits with a + status code indicating success +

+
+

+ truncate +

+
+

+ Shrinks or expands a file to the specified size +

+
+

+ tsort +

+
+

+ Performs a topological sort; it writes a completely + ordered list according to the partial ordering in a + given file +

+
+

+ tty +

+
+

+ Reports the file name of the terminal connected to + standard input +

+
+

+ uname +

+
+

+ Reports system information +

+
+

+ unexpand +

+
+

+ Converts spaces to tabs +

+
+

+ uniq +

+
+

+ Discards all but one of successive identical lines +

+
+

+ unlink +

+
+

+ Removes the given file +

+
+

+ users +

+
+

+ Reports the names of the users currently logged on +

+
+

+ vdir +

+
+

+ Is the same as ls + -l +

+
+

+ wc +

+
+

+ Reports the number of lines, words, and bytes for + each given file, as well as grand totals when more + than one file is given +

+
+

+ who +

+
+

+ Reports who is logged on +

+
+

+ whoami +

+
+

+ Reports the user name associated with the current + effective user ID +

+
+

+ yes +

+
+

+ Repeatedly outputs y + or a given string, until killed +

+
+

+ libstdbuf +

+
+

+ Library used by stdbuf +

+
+
+
+
+
+
+
+

+ 8.60. Diffutils-3.12 +

+
+
+
+
+
+

+ The Diffutils package contains programs that show the + differences between files or directories. +

+
+
+
+ Approximate build time: + 0.5 SBU +
+
+ Required disk space: + 51 MB +
+
+
+
+
+

+ 8.60.1. Installation of Diffutils +

+

+ Prepare Diffutils for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.60.2. Contents of Diffutils +

+
+
+
+ Installed programs: + cmp, diff, diff3, and sdiff +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ cmp +

+
+

+ Compares two files and reports any differences byte + by byte +

+
+

+ diff +

+
+

+ Compares two files or directories and reports which + lines in the files differ +

+
+

+ diff3 +

+
+

+ Compares three files line by line +

+
+

+ sdiff +

+
+

+ Merges two files and interactively outputs the + results +

+
+
+
+
+
+
+
+

+ 8.61. Gawk-5.3.2 +

+
+
+
+
+
+

+ The Gawk package contains programs for manipulating text + files. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 45 MB +
+
+
+
+
+

+ 8.61.1. Installation of Gawk +

+

+ First, ensure some unneeded files are not installed: +

+
sed -i 's/extras//' Makefile.in
+

+ Prepare Gawk for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
chown -R tester .
+su tester -c "PATH=$PATH make check"
+

+ Install the package: +

+
rm -f /usr/bin/gawk-5.3.2
+make install
+
+

+ The meaning of the command: +

+
+
+ rm -f + /usr/bin/gawk-5.3.2 +
+
+

+ The building system will not recreate the hard link + gawk-5.3.2 if it already + exists. Remove it to ensure that the previous hard link + installed in Section 6.9, + “Gawk-5.3.2” is updated here. +

+
+
+
+

+ The installation process already created awk as a symlink to + gawk, create + its man page as a symlink as well: +

+
ln -sv gawk.1 /usr/share/man/man1/awk.1
+

+ If desired, install the documentation: +

+
install -vDm644 doc/{awkforai.txt,*.{eps,pdf,jpg}} -t /usr/share/doc/gawk-5.3.2
+
+
+

+ 8.61.2. + Contents of Gawk +

+
+
+
+ Installed programs: + awk (link to gawk), gawk, and + gawk-5.3.2 +
+
+ Installed libraries: + filefuncs.so, fnmatch.so, fork.so, + inplace.so, intdiv.so, ordchr.so, readdir.so, + readfile.so, revoutput.so, revtwoway.so, rwarray.so, and + time.so (all in /usr/lib/gawk) +
+
+ Installed directories: + /usr/lib/gawk, /usr/libexec/awk, + /usr/share/awk, and /usr/share/doc/gawk-5.3.2 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ awk +

+
+

+ A link to gawk +

+
+

+ gawk +

+
+

+ A program for manipulating text files; it is the + GNU implementation of awk +

+
+

+ gawk-5.3.2 +

+
+

+ A hard link to gawk +

+
+
+
+
+
+
+
+

+ 8.62. Findutils-4.10.0 +

+
+
+
+
+
+

+ The Findutils package contains programs to find files. + Programs are provided to search through all the files in a + directory tree and to create, maintain, and search a database + (often faster than the recursive find, but unreliable unless + the database has been updated recently). Findutils also + supplies the xargs program, which can be + used to run a specified command on each file selected by a + search. +

+
+
+
+ Approximate build time: + 0.7 SBU +
+
+ Required disk space: + 61 MB +
+
+
+
+
+

+ 8.62.1. Installation of Findutils +

+

+ Prepare Findutils for compilation: +

+
./configure --prefix=/usr --localstatedir=/var/lib/locate
+
+

+ The meaning of the configure options: +

+
+
+ --localstatedir +
+
+

+ This option moves the locate database to + /var/lib/locate, which is + the FHS-compliant location. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
chown -R tester .
+su tester -c "PATH=$PATH make check"
+

+ Install the package: +

+
make install
+
+
+

+ 8.62.2. Contents of Findutils +

+
+
+
+ Installed programs: + find, locate, updatedb, and + xargs +
+
+ Installed directory: + /var/lib/locate +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + +
+

+ find +

+
+

+ Searches given directory trees for files matching + the specified criteria +

+
+

+ locate +

+
+

+ Searches through a database of file names and + reports the names that contain a given string or + match a given pattern +

+
+

+ updatedb +

+
+

+ Updates the locate database; + it scans the entire file system (including other + file systems that are currently mounted, unless + told not to) and puts every file name it finds into + the database +

+
+

+ xargs +

+
+

+ Can be used to apply a given command to a list of + files +

+
+
+
+
+
+
+
+

+ 8.63. Groff-1.23.0 +

+
+
+
+
+
+

+ The Groff package contains programs for processing and + formatting text and images. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 108 MB +
+
+
+
+
+

+ 8.63.1. Installation of Groff +

+

+ Groff expects the environment variable PAGE to contain the default paper size. For + users in the United States, PAGE=letter is appropriate. + Elsewhere, PAGE=A4 + may be more suitable. While the default paper size is + configured during compilation, it can be overridden later by + echoing either “A4” or “letter” to the + /etc/papersize file. +

+

+ Prepare Groff for compilation: +

+
PAGE=<paper_size> ./configure --prefix=/usr
+

+ Build the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.63.2. + Contents of Groff +

+
+
+
+ Installed programs: + addftinfo, afmtodit, chem, eqn, + eqn2graph, gdiffmk, glilypond, gperl, gpinyin, + grap2graph, grn, grodvi, groff, groffer, grog, grolbp, + grolj4, gropdf, grops, grotty, hpftodit, indxbib, lkbib, + lookbib, mmroff, neqn, nroff, pdfmom, pdfroff, pfbtops, + pic, pic2graph, post-grohtml, preconv, pre-grohtml, + refer, roff2dvi, roff2html, roff2pdf, roff2ps, roff2text, + roff2x, soelim, tbl, tfmtodit, and troff +
+
+ Installed directories: + /usr/lib/groff and + /usr/share/doc/groff-1.23.0, /usr/share/groff +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ addftinfo +

+
+

+ Reads a troff font file and adds some additional + font-metric information that is used by the + groff + system +

+
+

+ afmtodit +

+
+

+ Creates a font file for use with groff and + grops +

+
+

+ chem +

+
+

+ Groff preprocessor for producing chemical structure + diagrams +

+
+

+ eqn +

+
+

+ Compiles descriptions of equations embedded within + troff input files into commands that are understood + by troff +

+
+

+ eqn2graph +

+
+

+ Converts a troff EQN (equation) into a cropped + image +

+
+

+ gdiffmk +

+
+

+ Marks differences between groff/nroff/troff files +

+
+

+ glilypond +

+
+

+ Transforms sheet music written in the lilypond + language into the groff language +

+
+

+ gperl +

+
+

+ Preprocessor for groff, allowing the insertion of + perl code into groff files +

+
+

+ gpinyin +

+
+

+ Preprocessor for groff, allowing the insertion of + Pinyin (Mandarin Chinese spelled with the Roman + alphabet) into groff files. +

+
+

+ grap2graph +

+
+

+ Converts a grap program file into a cropped bitmap + image (grap is an old Unix programming language for + creating diagrams) +

+
+

+ grn +

+
+

+ A groff + preprocessor for gremlin files +

+
+

+ grodvi +

+
+

+ A driver for groff that + produces TeX dvi format output files +

+
+

+ groff +

+
+

+ A front end to the groff document formatting + system; normally, it runs the troff program and + a post-processor appropriate for the selected + device +

+
+

+ groffer +

+
+

+ Displays groff files and man pages on X and tty + terminals +

+
+

+ grog +

+
+

+ Reads files and guesses which of the groff options + -e, -man, -me, -mm, -ms, -p, -s, + and -t are required for + printing files, and reports the groff command + including those options +

+
+

+ grolbp +

+
+

+ Is a groff driver for + Canon CAPSL printers (LBP-4 and LBP-8 series laser + printers) +

+
+

+ grolj4 +

+
+

+ Is a driver for groff that + produces output in PCL5 format suitable for an HP + LaserJet 4 printer +

+
+

+ gropdf +

+
+

+ Translates the output of GNU troff to PDF +

+
+

+ grops +

+
+

+ Translates the output of GNU troff to + PostScript +

+
+

+ grotty +

+
+

+ Translates the output of GNU troff into a form + suitable for typewriter-like devices +

+
+

+ hpftodit +

+
+

+ Creates a font file for use with groff -Tlj4 from + an HP-tagged font metric file +

+
+

+ indxbib +

+
+

+ Creates an inverted index for the bibliographic + databases with a specified file for use with + refer, + lookbib, and + lkbib +

+
+

+ lkbib +

+
+

+ Searches bibliographic databases for references + that contain specified keys and reports any + references found +

+
+

+ lookbib +

+
+

+ Prints a prompt on the standard error (unless the + standard input is not a terminal), reads a line + containing a set of keywords from the standard + input, searches the bibliographic databases in a + specified file for references containing those + keywords, prints any references found on the + standard output, and repeats this process until the + end of input +

+
+

+ mmroff +

+
+

+ A simple preprocessor for groff +

+
+

+ neqn +

+
+

+ Formats equations for American Standard Code for + Information Interchange (ASCII) output +

+
+

+ nroff +

+
+

+ A script that emulates the nroff command + using groff +

+
+

+ pdfmom +

+
+

+ Is a wrapper around groff that facilitates the + production of PDF documents from files formatted + with the mom macros. +

+
+

+ pdfroff +

+
+

+ Creates pdf documents using groff +

+
+

+ pfbtops +

+
+

+ Translates a PostScript font in .pfb format to ASCII +

+
+

+ pic +

+
+

+ Compiles descriptions of pictures embedded within + troff or TeX input files into commands understood + by TeX or troff +

+
+

+ pic2graph +

+
+

+ Converts a PIC diagram into a cropped image +

+
+

+ post-grohtml +

+
+

+ Translates the output of GNU troff to HTML +

+
+

+ preconv +

+
+

+ Converts encoding of input files to something GNU + troff + understands +

+
+

+ pre-grohtml +

+
+

+ Translates the output of GNU troff to HTML +

+
+

+ refer +

+
+

+ Copies the contents of a file to the standard + output, except that lines between .[ and .] are interpreted as + citations, and lines between .R1 and .R2 are interpreted as + commands for how citations are to be processed +

+
+

+ roff2dvi +

+
+

+ Transforms roff files into DVI format +

+
+

+ roff2html +

+
+

+ Transforms roff files into HTML format +

+
+

+ roff2pdf +

+
+

+ Transforms roff files into PDFs +

+
+

+ roff2ps +

+
+

+ Transforms roff files into ps files +

+
+

+ roff2text +

+
+

+ Transforms roff files into text files +

+
+

+ roff2x +

+
+

+ Transforms roff files into other formats +

+
+

+ soelim +

+
+

+ Reads files and replaces lines of the form + .so file by + the contents of the mentioned file +

+
+

+ tbl +

+
+

+ Compiles descriptions of tables embedded within + troff input files into commands that are understood + by troff +

+
+

+ tfmtodit +

+
+

+ Creates a font file for use with groff -Tdvi +

+
+

+ troff +

+
+

+ Is highly compatible with Unix troff; it should + usually be invoked using the groff command, + which will also run preprocessors and + post-processors in the appropriate order and with + the appropriate options +

+
+
+
+
+
+
+
+

+ 8.64. GRUB-2.12 +

+
+
+
+
+
+

+ The GRUB package contains the GRand Unified Bootloader. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 166 MB +
+
+
+
+
+

+ 8.64.1. Installation of GRUB +

+
+

+ Note +

+

+ If your system has UEFI support and you wish to boot LFS + with UEFI, you need to install GRUB with UEFI support (and + its dependencies) by following the instructions on + + the BLFS page. You may skip this package, or install + this package and the BLFS GRUB for UEFI package without + conflict (the BLFS page provides instructions for both + cases). +

+
+
+

+ 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. The + low-level operations in the source code may be broken by + aggressive optimization. +

+
+

+ Add a file missing from the release tarball: +

+
echo depends bli part_gpt > grub-core/extra_deps.lst
+

+ Prepare GRUB for compilation: +

+
./configure --prefix=/usr     \
+            --sysconfdir=/etc \
+            --disable-efiemu  \
+            --disable-werror
+
+

+ The meaning of the new configure options: +

+
+
+ --disable-werror +
+
+

+ This allows the build to complete with warnings + introduced by more recent versions of Flex. +

+
+
+ --disable-efiemu +
+
+

+ This option minimizes what is built by disabling a + feature and eliminating some test programs not needed + for LFS. +

+
+
+
+

+ Compile the package: +

+
make
+

+ The test suite for this packages is not recommended. Most of + the tests depend on packages that are not available in the + limited LFS environment. To run the tests anyway, run + make check. +

+

+ Install the package, and move the Bash completion support + file to the location recommended by the Bash completion + maintainers: +

+
make install
+mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions
+

+ Making your LFS system bootable with GRUB will be discussed + in Section 10.4, + “Using GRUB to Set Up the Boot Process.” +

+
+
+

+ 8.64.2. + Contents of GRUB +

+
+
+
+ Installed programs: + grub-bios-setup, grub-editenv, + grub-file, grub-fstest, grub-glue-efi, grub-install, + grub-kbdcomp, grub-macbless, grub-menulst2cfg, + grub-mkconfig, grub-mkimage, grub-mklayout, + grub-mknetdir, grub-mkpasswd-pbkdf2, grub-mkrelpath, + grub-mkrescue, grub-mkstandalone, grub-ofpathname, + grub-probe, grub-reboot, grub-render-label, + grub-script-check, grub-set-default, grub-sparc64-setup, + and grub-syslinux2cfg +
+
+ Installed directories: + /usr/lib/grub, /etc/grub.d, + /usr/share/grub, and /boot/grub (when grub-install is + first run) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ grub-bios-setup +

+
+

+ Is a helper program for grub-install +

+
+

+ grub-editenv +

+
+

+ Is a tool to edit the environment block +

+
+

+ grub-file +

+
+

+ Checks to see if the given file is of the specified + type +

+
+

+ grub-fstest +

+
+

+ Is a tool to debug the file system driver +

+
+

+ grub-glue-efi +

+
+

+ Glues 32-bit and 64-bit binaries into a single file + (for Apple machines) +

+
+

+ grub-install +

+
+

+ Installs GRUB on your drive +

+
+

+ grub-kbdcomp +

+
+

+ Is a script that converts an xkb layout into one + recognized by GRUB +

+
+

+ grub-macbless +

+
+

+ Is the Mac-style bless for HFS or HFS+ file systems + (bless is peculiar + to Apple machines; it makes a device bootable) +

+
+

+ grub-menulst2cfg +

+
+

+ Converts a GRUB Legacy menu.lst into a grub.cfg for use with GRUB 2 +

+
+

+ grub-mkconfig +

+
+

+ Generates a grub.cfg + file +

+
+

+ grub-mkimage +

+
+

+ Makes a bootable image of GRUB +

+
+

+ grub-mklayout +

+
+

+ Generates a GRUB keyboard layout file +

+
+

+ grub-mknetdir +

+
+

+ Prepares a GRUB netboot directory +

+
+

+ grub-mkpasswd-pbkdf2 +

+
+

+ Generates an encrypted PBKDF2 password for use in + the boot menu +

+
+

+ grub-mkrelpath +

+
+

+ Makes a system pathname relative to its root +

+
+

+ grub-mkrescue +

+
+

+ Makes a bootable image of GRUB suitable for a + floppy disk, CDROM/DVD, or a USB drive +

+
+

+ grub-mkstandalone +

+
+

+ Generates a standalone image +

+
+

+ grub-ofpathname +

+
+

+ Is a helper program that prints the path to a GRUB + device +

+
+

+ grub-probe +

+
+

+ Probes device information for a given path or + device +

+
+

+ grub-reboot +

+
+

+ Sets the default boot entry for GRUB for the next + boot only +

+
+

+ grub-render-label +

+
+

+ Renders Apple .disk_label for Apple Macs +

+
+

+ grub-script-check +

+
+

+ Checks the GRUB configuration script for syntax + errors +

+
+

+ grub-set-default +

+
+

+ Sets the default boot entry for GRUB +

+
+

+ grub-sparc64-setup +

+
+

+ Is a helper program for grub-setup +

+
+

+ grub-syslinux2cfg +

+
+

+ Transforms a syslinux config file into grub.cfg + format +

+
+
+
+
+
+
+
+

+ 8.65. Gzip-1.14 +

+
+
+
+
+
+

+ The Gzip package contains programs for compressing and + decompressing files. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 21 MB +
+
+
+
+
+

+ 8.65.1. Installation of Gzip +

+

+ Prepare Gzip for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.65.2. + Contents of Gzip +

+
+
+
+ Installed programs: + gunzip, gzexe, gzip, uncompress + (hard link with gunzip), zcat, zcmp, zdiff, zegrep, + zfgrep, zforce, zgrep, zless, zmore, and znew +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ gunzip +

+
+

+ Decompresses gzipped files +

+
+

+ gzexe +

+
+

+ Creates self-decompressing executable files +

+
+

+ gzip +

+
+

+ Compresses the given files using Lempel-Ziv (LZ77) + coding +

+
+

+ uncompress +

+
+

+ Decompresses compressed files +

+
+

+ zcat +

+
+

+ Decompresses the given gzipped files to standard + output +

+
+

+ zcmp +

+
+

+ Runs cmp on gzipped + files +

+
+

+ zdiff +

+
+

+ Runs diff on gzipped + files +

+
+

+ zegrep +

+
+

+ Runs egrep on gzipped + files +

+
+

+ zfgrep +

+
+

+ Runs fgrep on gzipped + files +

+
+

+ zforce +

+
+

+ Forces a .gz + extension on all given files that are gzipped + files, so that gzip will not + compress them again; this can be useful when file + names were truncated during a file transfer +

+
+

+ zgrep +

+
+

+ Runs grep on gzipped + files +

+
+

+ zless +

+
+

+ Runs less on gzipped + files +

+
+

+ zmore +

+
+

+ Runs more on gzipped + files +

+
+

+ znew +

+
+

+ Re-compresses files from compress format + to gzip + format—.Z to + .gz +

+
+
+
+
+
+
+
+

+ 8.66. IPRoute2-6.16.0 +

+
+
+
+
+
+

+ The IPRoute2 package contains programs for basic and advanced + IPV4-based networking. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 17 MB +
+
+
+
+
+

+ 8.66.1. Installation of IPRoute2 +

+

+ The arpd + program included in this package will not be built since it + depends on Berkeley DB, which is not installed in LFS. + However, a directory and a man page for arpd will still be + installed. Prevent this by running the commands shown below. +

+
sed -i /ARPD/d Makefile
+rm -fv man/man8/arpd.8
+

+ Compile the package: +

+
make NETNS_RUN_DIR=/run/netns
+

+ This package does not have a working test suite. +

+

+ Install the package: +

+
make SBINDIR=/usr/sbin install
+

+ If desired, install the documentation: +

+
install -vDm644 COPYING README* -t /usr/share/doc/iproute2-6.16.0
+
+
+

+ 8.66.2. Contents of IPRoute2 +

+
+
+
+ Installed programs: + bridge, ctstat (link to lnstat), + genl, ifstat, ip, lnstat, nstat, routel, rtacct, rtmon, + rtpr, rtstat (link to lnstat), ss, and tc +
+
+ Installed directories: + /etc/iproute2, /usr/lib/tc, and + /usr/share/doc/iproute2-6.16.0 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ bridge +

+
+

+ Configures network bridges +

+
+

+ ctstat +

+
+

+ Connection status utility +

+
+

+ genl +

+
+

+ Generic netlink utility front end +

+
+

+ ifstat +

+
+

+ Shows interface statistics, including the number of + packets transmitted and received, by interface +

+
+

+ ip +

+
+

+ The main executable. It has several different + functions, including these: +

+

+ ip link <device> + allows users to look at the state of devices and to + make changes +

+

+ ip + addr allows users to look at + addresses and their properties, add new addresses, + and delete old ones +

+

+ ip + neighbor allows users to look at + neighbor bindings and their properties, add new + neighbor entries, and delete old ones +

+

+ ip + rule allows users to look at the + routing policies and change them +

+

+ ip + route allows users to look at the + routing table and change routing table rules +

+

+ ip + tunnel allows users to look at the + IP tunnels and their properties, and change them +

+

+ ip + maddr allows users to look at the + multicast addresses and their properties, and + change them +

+

+ ip + mroute allows users to set, change, + or delete the multicast routing +

+

+ ip + monitor allows users to + continuously monitor the state of devices, + addresses and routes +

+
+

+ lnstat +

+
+

+ Provides Linux network statistics; it is a + generalized and more feature-complete replacement + for the old rtstat program +

+
+

+ nstat +

+
+

+ Displays network statistics +

+
+

+ routel +

+
+

+ A component of ip + route, for listing the routing + tables +

+
+

+ rtacct +

+
+

+ Displays the contents of /proc/net/rt_acct +

+
+

+ rtmon +

+
+

+ Route monitoring utility +

+
+

+ rtpr +

+
+

+ Converts the output of ip -o into a + readable form +

+
+

+ rtstat +

+
+

+ Route status utility +

+
+

+ ss +

+
+

+ Similar to the netstat command; + shows active connections +

+
+

+ tc +

+
+

+ Traffic control for Quality of Service (QoS) and + Class of Service (CoS) implementations +

+

+ tc + qdisc allows users to set up the + queueing discipline +

+

+ tc + class allows users to set up + classes based on the queueing discipline scheduling +

+

+ tc + filter allows users to set up the + QoS/CoS packet filtering +

+

+ tc + monitor can be used to view changes + made to Traffic Control in the kernel. +

+
+
+
+
+
+
+
+

+ 8.67. Kbd-2.8.0 +

+
+
+
+
+
+

+ The Kbd package contains key-table files, console fonts, and + keyboard utilities. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 43 MB +
+
+
+
+
+

+ 8.67.1. Installation of Kbd +

+

+ The behavior of the backspace and delete keys is not + consistent across the keymaps in the Kbd package. The + following patch fixes this issue for i386 keymaps: +

+
patch -Np1 -i ../kbd-2.8.0-backspace-1.patch
+

+ After patching, the backspace key generates the character + with code 127, and the delete key generates a well-known + escape sequence. +

+

+ Remove the redundant resizecons program (it + requires the defunct svgalib to provide the video mode files + - for normal use setfont sizes the console + appropriately) together with its manpage. +

+
sed -i '/RESIZECONS_PROGS=/s/yes/no/' configure
+sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in
+

+ Prepare Kbd for compilation: +

+
./configure --prefix=/usr --disable-vlock
+
+

+ The meaning of the configure option: +

+
+
+ --disable-vlock +
+
+

+ This option prevents the vlock utility from being built + because it requires the PAM library, which isn't + available in the chroot environment. +

+
+
+
+

+ Compile the package: +

+
make
+

+ The tests for this package will all fail in the chroot + environment because they require valgrind. In addition on a full system + with valgrind, several tests + still fail in a graphical environment. The tests pass in a + non-graphical environment. +

+

+ Install the package: +

+
make install
+
+

+ Note +

+

+ For some languages (e.g., Belarusian) the Kbd package + doesn't provide a useful keymap where the stock + “by” + keymap assumes the ISO-8859-5 encoding, and the CP1251 + keymap is normally used. Users of such languages have to + download working keymaps separately. +

+
+

+ If desired, install the documentation: +

+
cp -R -v docs/doc -T /usr/share/doc/kbd-2.8.0
+
+
+

+ 8.67.2. Contents + of Kbd +

+
+
+
+ Installed programs: + chvt, deallocvt, dumpkeys, + fgconsole, getkeycodes, kbdinfo, kbd_mode, kbdrate, + loadkeys, loadunimap, mapscrn, openvt, psfaddtable (link + to psfxtable), psfgettable (link to psfxtable), + psfstriptable (link to psfxtable), psfxtable, setfont, + setkeycodes, setleds, setmetamode, setvtrgb, + showconsolefont, showkey, unicode_start, and + unicode_stop +
+
+ Installed directories: + /usr/share/consolefonts, + /usr/share/consoletrans, /usr/share/keymaps, + /usr/share/doc/kbd-2.8.0, and /usr/share/unimaps +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ chvt +

+
+

+ Changes the foreground virtual terminal +

+
+

+ deallocvt +

+
+

+ Deallocates unused virtual terminals +

+
+

+ dumpkeys +

+
+

+ Dumps the keyboard translation tables +

+
+

+ fgconsole +

+
+

+ Prints the number of the active virtual terminal +

+
+

+ getkeycodes +

+
+

+ Prints the kernel scancode-to-keycode mapping table +

+
+

+ kbdinfo +

+
+

+ Obtains information about the status of a console +

+
+

+ kbd_mode +

+
+

+ Reports or sets the keyboard mode +

+
+

+ kbdrate +

+
+

+ Sets the keyboard repeat and delay rates +

+
+

+ loadkeys +

+
+

+ Loads the keyboard translation tables +

+
+

+ loadunimap +

+
+

+ Loads the kernel unicode-to-font mapping table +

+
+

+ mapscrn +

+
+

+ An obsolete program that used to load a + user-defined output character mapping table into + the console driver; this is now done by + setfont +

+
+

+ openvt +

+
+

+ Starts a program on a new virtual terminal (VT) +

+
+

+ psfaddtable +

+
+

+ Adds a Unicode character table to a console font +

+
+

+ psfgettable +

+
+

+ Extracts the embedded Unicode character table from + a console font +

+
+

+ psfstriptable +

+
+

+ Removes the embedded Unicode character table from a + console font +

+
+

+ psfxtable +

+
+

+ Handles Unicode character tables for console fonts +

+
+

+ setfont +

+
+

+ Changes the Enhanced Graphic Adapter (EGA) and + Video Graphics Array (VGA) fonts on the console +

+
+

+ setkeycodes +

+
+

+ Loads kernel scancode-to-keycode mapping table + entries; this is useful if there are unusual keys + on the keyboard +

+
+

+ setleds +

+
+

+ Sets the keyboard flags and Light Emitting Diodes + (LEDs) +

+
+

+ setmetamode +

+
+

+ Defines the keyboard meta-key handling +

+
+

+ setvtrgb +

+
+

+ Sets the console color map in all virtual terminals +

+
+

+ showconsolefont +

+
+

+ Shows the current EGA/VGA console screen font +

+
+

+ showkey +

+
+

+ Reports the scancodes, keycodes, and ASCII codes of + the keys pressed on the keyboard +

+
+

+ unicode_start +

+
+

+ Puts the keyboard and console in UNICODE mode + [Don't use this program unless your keymap file is + in the ISO-8859-1 encoding. For other encodings, + this utility produces incorrect results.] +

+
+

+ unicode_stop +

+
+

+ Reverts keyboard and console from UNICODE mode +

+
+
+
+
+
+
+
+

+ 8.68. Libpipeline-1.5.8 +

+
+
+
+
+
+

+ The Libpipeline package contains a library for manipulating + pipelines of subprocesses in a flexible and convenient way. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 10 MB +
+
+
+
+
+

+ 8.68.1. Installation of Libpipeline +

+

+ Prepare Libpipeline for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ The tests require the Check + library that we've removed from LFS. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.68.2. Contents of Libpipeline +

+
+
+
+ Installed library: + libpipeline.so +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ libpipeline +

+
+

+ This library is used to safely construct pipelines + between subprocesses +

+
+
+
+
+
+
+
+

+ 8.69. Make-4.4.1 +

+
+
+
+
+
+

+ The Make package contains a program for controlling the + generation of executables and other non-source files of a + package from source files. +

+
+
+
+ Approximate build time: + 0.7 SBU +
+
+ Required disk space: + 13 MB +
+
+
+
+
+

+ 8.69.1. Installation of Make +

+

+ Prepare Make for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
chown -R tester .
+su tester -c "PATH=$PATH make check"
+

+ Install the package: +

+
make install
+
+
+

+ 8.69.2. + Contents of Make +

+
+
+
+ Installed program: + make +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ make +

+
+

+ Automatically determines which pieces of a package + need to be (re)compiled and then issues the + relevant commands +

+
+
+
+
+
+
+
+

+ 8.70. Patch-2.8 +

+
+
+
+
+
+

+ The Patch package contains a program for modifying or + creating files by applying a “patch” file + typically created by the diff program. +

+
+
+
+ Approximate build time: + 0.2 SBU +
+
+ Required disk space: + 13 MB +
+
+
+
+
+

+ 8.70.1. Installation of Patch +

+

+ Prepare Patch for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.70.2. + Contents of Patch +

+
+
+
+ Installed program: + patch +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ patch +

+
+

+ Modifies files according to a patch file (A patch + file is normally a difference listing created with + the diff program. By + applying these differences to the original files, + patch + creates the patched versions.) +

+
+
+
+
+
+
+
+

+ 8.71. Tar-1.35 +

+
+
+
+
+
+

+ The Tar package provides the ability to create tar archives + as well as perform various other kinds of archive + manipulation. Tar can be used on previously created archives + to extract files, to store additional files, or to update or + list files which were already stored. +

+
+
+
+ Approximate build time: + 0.6 SBU +
+
+ Required disk space: + 43 MB +
+
+
+
+
+

+ 8.71.1. Installation of Tar +

+

+ Prepare Tar for compilation: +

+
FORCE_UNSAFE_CONFIGURE=1  \
+./configure --prefix=/usr
+
+

+ The meaning of the configure option: +

+
+
+ FORCE_UNSAFE_CONFIGURE=1 +
+
+

+ This forces the test for mknod to be run as root. It is generally considered + dangerous to run this test as the root user, but as it is being run + on a system that has only been partially built, + overriding it is OK. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ One test, capabilities: binary store/restore, is known to + fail if it is run because LFS lacks selinux, but will be + skipped if the host kernel does not support extended + attributes or security labels on the filesystem used for + building LFS. +

+

+ Install the package: +

+
make install
+make -C doc install-html docdir=/usr/share/doc/tar-1.35
+
+
+

+ 8.71.2. Contents + of Tar +

+
+
+
+ Installed programs: + tar +
+
+ Installed directory: + /usr/share/doc/tar-1.35 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ tar +

+
+

+ Creates, extracts files from, and lists the + contents of archives, also known as tarballs +

+
+
+
+
+
+
+
+

+ 8.72. Texinfo-7.2 +

+
+
+
+
+
+

+ The Texinfo package contains programs for reading, writing, + and converting info pages. +

+
+
+
+ Approximate build time: + 0.4 SBU +
+
+ Required disk space: + 160 MB +
+
+
+
+
+

+ 8.72.1. Installation of Texinfo +

+

+ Fix a code pattern that causes Perl-5.42 or later to display + a warning: +

+
sed 's/! $output_file eq/$output_file ne/' -i tp/Texinfo/Convert/*.pm
+

+ Prepare Texinfo for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+

+ Optionally, install the components belonging in a TeX + installation: +

+
make TEXMF=/usr/share/texmf install-tex
+
+

+ The meaning of the make parameter: +

+
+
+ TEXMF=/usr/share/texmf +
+
+

+ The TEXMF makefile variable + holds the location of the root of the TeX tree if, for + example, a TeX package will be installed later. +

+
+
+
+

+ The Info documentation system uses a plain text file to hold + its list of menu entries. The file is located at /usr/share/info/dir. Unfortunately, due to + occasional problems in the Makefiles of various packages, it + can sometimes get out of sync with the info pages installed + on the system. If the /usr/share/info/dir file ever needs to be + recreated, the following optional commands will accomplish + the task: +

+
pushd /usr/share/info
+  rm -v dir
+  for f in *
+    do install-info $f dir 2>/dev/null
+  done
+popd
+
+
+

+ 8.72.2. + Contents of Texinfo +

+
+
+
+ Installed programs: + info, install-info, makeinfo (link + to texi2any), pdftexi2dvi, pod2texi, texi2any, texi2dvi, + texi2pdf, and texindex +
+
+ Installed library: + MiscXS.so, Parsetexi.so, and + XSParagraph.so (all in /usr/lib/texinfo) +
+
+ Installed directories: + /usr/share/texinfo and + /usr/lib/texinfo +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ info +

+
+

+ Used to read info pages which are similar to man + pages, but often go much deeper than just + explaining all the available command line options + [For example, compare man bison and + info + bison.] +

+
+

+ install-info +

+
+

+ Used to install info pages; it updates entries in + the info index file +

+
+

+ makeinfo +

+
+

+ Translates the given Texinfo source documents into + info pages, plain text, or HTML +

+
+

+ pdftexi2dvi +

+
+

+ Used to format the given Texinfo document into a + Portable Document Format (PDF) file +

+
+

+ pod2texi +

+
+

+ Converts Pod to Texinfo format +

+
+

+ texi2any +

+
+

+ Translate Texinfo source documentation to various + other formats +

+
+

+ texi2dvi +

+
+

+ Used to format the given Texinfo document into a + device-independent file that can be printed +

+
+

+ texi2pdf +

+
+

+ Used to format the given Texinfo document into a + Portable Document Format (PDF) file +

+
+

+ texindex +

+
+

+ Used to sort Texinfo index files +

+
+
+
+
+
+
+
+

+ 8.73. Vim-9.1.1629 +

+
+
+
+
+
+

+ The Vim package contains a powerful text editor. +

+
+
+
+ Approximate build time: + 3.7 SBU +
+
+ Required disk space: + 259 MB +
+
+
+
+

+ Alternatives to Vim +

+

+ If you prefer another editor—such as Emacs, Joe, or + Nano—please refer to + https://www.linuxfromscratch.org/blfs/view/12.4/postlfs/editors.html + for suggested installation instructions. +

+
+
+
+

+ 8.73.1. Installation of Vim +

+

+ First, change the default location of the vimrc configuration file to /etc: +

+
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
+

+ Prepare Vim for compilation: +

+
./configure --prefix=/usr
+

+ Compile the package: +

+
make
+

+ To prepare the tests, ensure that user tester can write to the source tree and + exclude one file containing tests requiring curl or wget: +

+
chown -R tester .
+sed '/test_plugin_glvs/d' -i src/testdir/Make_all.mak
+

+ Now run the tests as user tester: +

+
su tester -c "TERM=xterm-256color LANG=en_US.UTF-8 make -j1 test" \
+   &> vim-test.log
+

+ The test suite outputs a lot of binary data to the screen. + This can cause issues with the settings of the current + terminal (especially while we are overriding the TERM variable to satisfy some assumptions of + the test suite). The problem can be avoided by redirecting + the output to a log file as shown above. A successful test + will result in the words ALL + DONE in the log file at completion. +

+

+ Install the package: +

+
make install
+

+ Many users reflexively type vi instead of vim. To allow execution of + vim when users + habitually enter vi, create a symlink for + both the binary and the man page in the provided languages: +

+
ln -sv vim /usr/bin/vi
+for L in  /usr/share/man/{,*/}man1/vim.1; do
+    ln -sv vim.1 $(dirname $L)/vi.1
+done
+

+ By default, Vim's documentation is installed in /usr/share/vim. The following symlink + allows the documentation to be accessed via /usr/share/doc/vim-9.1.1629, making it + consistent with the location of documentation for other + packages: +

+
ln -sv ../vim/vim91/doc /usr/share/doc/vim-9.1.1629
+

+ If an X Window System is going to be installed on the LFS + system, it may be necessary to recompile Vim after installing + X. Vim comes with a GUI version of the editor that requires X + and some additional libraries to be installed. For more + information on this process, refer to the Vim documentation + and the Vim installation page in the BLFS book at + https://www.linuxfromscratch.org/blfs/view/12.4/postlfs/vim.html. +

+
+
+

+ 8.73.2. Configuring Vim +

+

+ By default, vim + runs in vi-incompatible mode. This may be new to users who + have used other editors in the past. The “nocompatible” + setting is included below to highlight the fact that a new + behavior is being used. It also reminds those who would + change to “compatible” mode that it should be the + first setting in the configuration file. This is necessary + because it changes other settings, and overrides must come + after this setting. Create a default vim configuration file by + running the following: +

+
cat > /etc/vimrc << "EOF"
+" Begin /etc/vimrc
+
+" Ensure defaults are set before customizing settings, not after
+source $VIMRUNTIME/defaults.vim
+let skip_defaults_vim=1
+
+set nocompatible
+set backspace=2
+set mouse=
+syntax on
+if (&term == "xterm") || (&term == "putty")
+  set background=dark
+endif
+
+" End /etc/vimrc
+EOF
+

+ The set nocompatible + setting makes vim behave in a more useful + way (the default) than the vi-compatible manner. Remove the + “no” to + keep the old vi + behavior. The set + backspace=2 setting allows backspacing over line + breaks, autoindents, and the start of an insert. The + syntax on parameter + enables vim's syntax highlighting. The set mouse= setting enables + proper pasting of text with the mouse when working in chroot + or over a remote connection. Finally, the if statement with the set background=dark setting + corrects vim's + guess about the background color of some terminal emulators. + This gives the highlighting a better color scheme for use on + the black background of these programs. +

+

+ Documentation for other available options can be obtained by + running the following command: +

+
vim -c ':options'
+
+

+ Note +

+

+ By default, vim only installs spell-checking files for the + English language. To install spell-checking files for your + preferred language, copy the .spl and optionally, the .sug files for your language and + character encoding from runtime/spell into /usr/share/vim/vim91/spell/. +

+

+ To use these spell-checking files, some configuration in + /etc/vimrc is needed, e.g.: +

+
set spelllang=en,ru
+set spell
+

+ For more information, see runtime/spell/README.txt. +

+
+
+
+

+ 8.73.3. Contents + of Vim +

+
+
+
+ Installed programs: + ex (link to vim), rview (link to + vim), rvim (link to vim), vi (link to vim), view (link to + vim), vim, vimdiff (link to vim), vimtutor, and + xxd +
+
+ Installed directory: + /usr/share/vim +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ ex +

+
+

+ Starts vim in ex mode +

+
+

+ rview +

+
+

+ Is a restricted version of view; no shell + commands can be started and view cannot be + suspended +

+
+

+ rvim +

+
+

+ Is a restricted version of vim; no shell + commands can be started and vim cannot be + suspended +

+
+

+ vi +

+
+

+ Link to vim +

+
+

+ view +

+
+

+ Starts vim in read-only + mode +

+
+

+ vim +

+
+

+ Is the editor +

+
+

+ vimdiff +

+
+

+ Edits two or three versions of a file with + vim + and shows differences +

+
+

+ vimtutor +

+
+

+ Teaches the basic keys and commands of vim +

+
+

+ xxd +

+
+

+ Creates a hex dump of the given file; it can also + perform the inverse operation, so it can be used + for binary patching +

+
+
+
+
+
+
+
+

+ 8.74. MarkupSafe-3.0.2 +

+
+
+
+
+
+

+ MarkupSafe is a Python module that implements an + XML/HTML/XHTML Markup safe string. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 500 KB +
+
+
+
+
+

+ 8.74.1. Installation of MarkupSafe +

+

+ Compile MarkupSafe with the following command: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ This package does not come with a test suite. +

+

+ Install the package: +

+
pip3 install --no-index --find-links dist Markupsafe
+
+
+

+ 8.74.2. Contents of MarkupSafe +

+
+
+
+ Installed directory: + /usr/lib/python3.13/site-packages/MarkupSafe-3.0.2.dist-info +
+
+
+
+
+
+
+
+

+ 8.75. Jinja2-3.1.6 +

+
+
+
+
+
+

+ Jinja2 is a Python module that implements a simple pythonic + template language. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 2.6 MB +
+
+
+
+
+

+ 8.75.1. Installation of Jinja2 +

+

+ Build the package: +

+
pip3 wheel -w dist --no-cache-dir --no-build-isolation --no-deps $PWD
+

+ Install the package: +

+
pip3 install --no-index --find-links dist Jinja2
+
+
+

+ 8.75.2. + Contents of Jinja2 +

+
+
+
+ Installed directory: + /usr/lib/python3.13/site-packages/Jinja2-3.1.6.dist-info +
+
+
+
+
+
+
+
+

+ 8.76. Udev from Systemd-257.8 +

+
+
+
+
+
+

+ The Udev package contains programs for dynamic creation of + device nodes. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 162 MB +
+
+
+
+
+

+ 8.76.1. Installation of Udev +

+

+ Udev is part of the systemd-257.8 package. Use the + systemd-257.8.tar.xz file as the source tarball. +

+

+ Remove two unneeded groups, render and sgx, from the default udev rules: +

+
sed -e 's/GROUP="render"/GROUP="video"/' \
+    -e 's/GROUP="sgx", //'               \
+    -i rules.d/50-udev-default.rules.in
+

+ Remove one udev rule requiring a full Systemd installation: +

+
sed -i '/systemd-sysctl/s/^/#/' rules.d/99-systemd.rules.in
+

+ Adjust the hardcoded paths to network configuration files for + the standalone udev installation: +

+
sed -e '/NETWORK_DIRS/s/systemd/udev/' \
+    -i src/libsystemd/sd-network/network-util.h
+

+ Prepare Udev for compilation: +

+
mkdir -p build
+cd       build
+
+meson setup ..                  \
+      --prefix=/usr             \
+      --buildtype=release       \
+      -D mode=release           \
+      -D dev-kvm-mode=0660      \
+      -D link-udev-shared=false \
+      -D logind=false           \
+      -D vconsole=false
+
+

+ The meaning of the meson options: +

+
+
+ --buildtype=release +
+
+

+ This switch overrides the default buildtype + (“debug”), which produces + unoptimized binaries. +

+
+
+ -D + mode=release +
+
+

+ Disable some features considered experimental by + upstream. +

+
+
+ -D + dev-kvm-mode=0660 +
+
+

+ The default udev rule would allow all users to access + /dev/kvm. The editors + consider it dangerous. This option overrides it. +

+
+
+ -D + link-udev-shared=false +
+
+

+ This option prevents udev from linking to the internal + systemd shared library, libsystemd-shared. This library is + designed to be shared by many Systemd components and + it's too overkill for a udev-only installation. +

+
+
+ -D + logind=false -D vconsole=false +
+
+

+ These options prevent the generation of several udev + rule files belonging to the other Systemd components + that we won't install. +

+
+
+
+

+ Get the list of the shipped udev helpers and save it into an + environment variable (exporting it is not strictly necessary, + but it makes building as a regular user or using a package + manager easier): +

+
export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
+                      awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')
+

+ Only build the components needed for udev: +

+
ninja udevadm systemd-hwdb                                           \
+      $(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
+      $(realpath libudev.so --relative-to .)                         \
+      $udev_helpers
+

+ Install the package: +

+
install -vm755 -d {/usr/lib,/etc}/udev/{hwdb.d,rules.d,network}
+install -vm755 -d /usr/{lib,share}/pkgconfig
+install -vm755 udevadm                             /usr/bin/
+install -vm755 systemd-hwdb                        /usr/bin/udev-hwdb
+ln      -svfn  ../bin/udevadm                      /usr/sbin/udevd
+cp      -av    libudev.so{,*[0-9]}                 /usr/lib/
+install -vm644 ../src/libudev/libudev.h            /usr/include/
+install -vm644 src/libudev/*.pc                    /usr/lib/pkgconfig/
+install -vm644 src/udev/*.pc                       /usr/share/pkgconfig/
+install -vm644 ../src/udev/udev.conf               /etc/udev/
+install -vm644 rules.d/* ../rules.d/README         /usr/lib/udev/rules.d/
+install -vm644 $(find ../rules.d/*.rules \
+                      -not -name '*power-switch*') /usr/lib/udev/rules.d/
+install -vm644 hwdb.d/*  ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/
+install -vm755 $udev_helpers                       /usr/lib/udev
+install -vm644 ../network/99-default.link          /usr/lib/udev/network
+

+ Install some custom rules and support files useful in an LFS + environment: +

+
tar -xvf ../../udev-lfs-20230818.tar.xz
+make -f udev-lfs-20230818/Makefile.lfs install
+

+ Install the man pages: +

+
tar -xf ../../systemd-man-pages-257.8.tar.xz                            \
+    --no-same-owner --strip-components=1                              \
+    -C /usr/share/man --wildcards '*/udev*' '*/libudev*'              \
+                                  '*/systemd.link.5'                  \
+                                  '*/systemd-'{hwdb,udevd.service}.8
+
+sed 's|systemd/network|udev/network|'                                 \
+    /usr/share/man/man5/systemd.link.5                                \
+  > /usr/share/man/man5/udev.link.5
+
+sed 's/systemd\(\\\?-\)/udev\1/' /usr/share/man/man8/systemd-hwdb.8   \
+                               > /usr/share/man/man8/udev-hwdb.8
+
+sed 's|lib.*udevd|sbin/udevd|'                                        \
+    /usr/share/man/man8/systemd-udevd.service.8                       \
+  > /usr/share/man/man8/udevd.8
+
+rm /usr/share/man/man*/systemd*
+

+ Finally, unset the udev_helpers + variable: +

+
unset udev_helpers
+
+
+

+ 8.76.2. Configuring + Udev +

+

+ Information about hardware devices is maintained in the + /etc/udev/hwdb.d and + /usr/lib/udev/hwdb.d + directories. Udev needs that + information to be compiled into a binary database + /etc/udev/hwdb.bin. Create the + initial database: +

+
udev-hwdb update
+

+ This command needs to be run each time the hardware + information is updated. +

+
+
+

+ 8.76.3. + Contents of Udev +

+
+
+
+ Installed programs: + udevadm, udevd (symlink to + udevadm), and udev-hwdb +
+
+ Installed libraries: + libudev.so +
+
+ Installed directories: + /etc/udev and /usr/lib/udev +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ udevadm +

+
+

+ Generic udev administration tool: controls the + udevd daemon, provides info from the Udev database, + monitors uevents, waits for uevents to finish, + tests Udev configuration, and triggers uevents for + a given device +

+
+

+ udevd +

+
+

+ A daemon that listens for uevents on the netlink + socket, creates devices and runs the configured + external programs in response to these uevents +

+
+

+ udev-hwdb +

+
+

+ Updates or queries the hardware database. +

+
+

+ libudev +

+
+

+ A library interface to udev device information +

+
+

+ /etc/udev +

+
+

+ Contains Udev configuration files, device + permissions, and rules for device naming +

+
+
+
+
+
+
+
+

+ 8.77. Man-DB-2.13.1 +

+
+
+
+
+
+

+ The Man-DB package contains programs for finding and viewing + man pages. +

+
+
+
+ Approximate build time: + 0.3 SBU +
+
+ Required disk space: + 44 MB +
+
+
+
+
+

+ 8.77.1. Installation of Man-DB +

+

+ Prepare Man-DB for compilation: +

+
./configure --prefix=/usr                         \
+            --docdir=/usr/share/doc/man-db-2.13.1 \
+            --sysconfdir=/etc                     \
+            --disable-setuid                      \
+            --enable-cache-owner=bin              \
+            --with-browser=/usr/bin/lynx          \
+            --with-vgrind=/usr/bin/vgrind         \
+            --with-grap=/usr/bin/grap             \
+            --with-systemdtmpfilesdir=            \
+            --with-systemdsystemunitdir=
+
+

+ The meaning of the configure options: +

+
+
+ --disable-setuid +
+
+

+ This disables making the man program setuid to + user man. +

+
+
+ --enable-cache-owner=bin +
+
+

+ This changes ownership of the system-wide cache files + to user bin. +

+
+
+ --with-... +
+
+

+ These three parameters are used to set some default + programs. lynx is a text-based + web browser (see BLFS for installation instructions), + vgrind + converts program sources to Groff input, and + grap is + useful for typesetting graphs in Groff documents. The + vgrind + and grap + programs are not normally needed for viewing manual + pages. They are not part of LFS or BLFS, but you should + be able to install them yourself after finishing LFS if + you wish to do so. +

+
+
+ --with-systemd... +
+
+

+ These parameters prevent installing unneeded systemd + directories and files. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To test the results, issue: +

+
make check
+

+ Install the package: +

+
make install
+
+
+

+ 8.77.2. Non-English Manual Pages in LFS +

+

+ The following table shows the character set that Man-DB + assumes manual pages installed under /usr/share/man/<ll> will be encoded + with. In addition to this, Man-DB correctly determines if + manual pages installed in that directory are UTF-8 encoded. +

+
+ +

+ Table 8.1. Expected character encoding of + legacy 8-bit manual pages +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Language (code) + + Encoding + + Language (code) + + Encoding +
+ Danish (da) + + ISO-8859-1 + + Croatian (hr) + + ISO-8859-2 +
+ German (de) + + ISO-8859-1 + + Hungarian (hu) + + ISO-8859-2 +
+ English (en) + + ISO-8859-1 + + Japanese (ja) + + EUC-JP +
+ Spanish (es) + + ISO-8859-1 + + Korean (ko) + + EUC-KR +
+ Estonian (et) + + ISO-8859-1 + + Lithuanian (lt) + + ISO-8859-13 +
+ Finnish (fi) + + ISO-8859-1 + + Latvian (lv) + + ISO-8859-13 +
+ French (fr) + + ISO-8859-1 + + Macedonian (mk) + + ISO-8859-5 +
+ Irish (ga) + + ISO-8859-1 + + Polish (pl) + + ISO-8859-2 +
+ Galician (gl) + + ISO-8859-1 + + Romanian (ro) + + ISO-8859-2 +
+ Indonesian (id) + + ISO-8859-1 + + Greek (el) + + ISO-8859-7 +
+ Icelandic (is) + + ISO-8859-1 + + Slovak (sk) + + ISO-8859-2 +
+ Italian (it) + + ISO-8859-1 + + Slovenian (sl) + + ISO-8859-2 +
+ Norwegian Bokmal (nb) + + ISO-8859-1 + + Serbian Latin (sr@latin) + + ISO-8859-2 +
+ Dutch (nl) + + ISO-8859-1 + + Serbian (sr) + + ISO-8859-5 +
+ Norwegian Nynorsk (nn) + + ISO-8859-1 + + Turkish (tr) + + ISO-8859-9 +
+ Norwegian (no) + + ISO-8859-1 + + Ukrainian (uk) + + KOI8-U +
+ Portuguese (pt) + + ISO-8859-1 + + Vietnamese (vi) + + TCVN5712-1 +
+ Swedish (sv) + + ISO-8859-1 + + Simplified Chinese (zh_CN) + + GBK +
+ Belarusian (be) + + CP1251 + + Simplified Chinese, Singapore (zh_SG) + + GBK +
+ Bulgarian (bg) + + CP1251 + + Traditional Chinese, Hong Kong (zh_HK) + + BIG5HKSCS +
+ Czech (cs) + + ISO-8859-2 + + Traditional Chinese (zh_TW) + + BIG5 +
+
+

+
+

+ Note +

+

+ Manual pages in languages not in the list are not + supported. +

+
+
+
+

+ 8.77.3. + Contents of Man-DB +

+
+
+
+ Installed programs: + accessdb, apropos (link to whatis), + catman, lexgrog, man, man-recode, mandb, manpath, and + whatis +
+
+ Installed libraries: + libman.so and libmandb.so (both in + /usr/lib/man-db) +
+
+ Installed directories: + /usr/lib/man-db, + /usr/libexec/man-db, and + /usr/share/doc/man-db-2.13.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ accessdb +

+
+

+ Dumps the whatis database + contents in human-readable form +

+
+

+ apropos +

+
+

+ Searches the whatis database + and displays the short descriptions of system + commands that contain a given string +

+
+

+ catman +

+
+

+ Creates or updates the pre-formatted manual pages +

+
+

+ lexgrog +

+
+

+ Displays one-line summary information about a given + manual page +

+
+

+ man +

+
+

+ Formats and displays the requested manual page +

+
+

+ man-recode +

+
+

+ Converts manual pages to another encoding +

+
+

+ mandb +

+
+

+ Creates or updates the whatis database +

+
+

+ manpath +

+
+

+ Displays the contents of $MANPATH or (if $MANPATH + is not set) a suitable search path based on the + settings in man.conf and the user's environment +

+
+

+ whatis +

+
+

+ Searches the whatis database + and displays the short descriptions of system + commands that contain the given keyword as a + separate word +

+
+

+ libman +

+
+

+ Contains run-time support for man +

+
+

+ libmandb +

+
+

+ Contains run-time support for man +

+
+
+
+
+
+
+
+

+ 8.78. Procps-ng-4.0.5 +

+
+
+
+
+
+

+ The Procps-ng package contains programs for monitoring + processes. +

+
+
+
+ Approximate build time: + 0.1 SBU +
+
+ Required disk space: + 28 MB +
+
+
+
+
+

+ 8.78.1. Installation of Procps-ng +

+

+ Prepare Procps-ng for compilation: +

+
./configure --prefix=/usr                           \
+            --docdir=/usr/share/doc/procps-ng-4.0.5 \
+            --disable-static                        \
+            --disable-kill                          \
+            --enable-watch8bit
+
+

+ The meaning of the configure option: +

+
+
+ --disable-kill +
+
+

+ This switch disables building the kill command; it will + be installed from the Util-linux package. +

+
+
+ --enable-watch8bit +
+
+

+ This switch enables the ncursesw support for the + watch + command, so it can handle 8-bit characters. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To run the test suite, run: +

+
chown -R tester .
+su tester -c "PATH=$PATH make check"
+

+ One test named ps with output flag + bsdtime,cputime,etime,etimes is known to fail if the + host kernel is not built with CONFIG_BSD_PROCESS_ACCT enabled. In + addition, one pgrep test may fail in the chroot environment. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.78.2. + Contents of Procps-ng +

+
+
+
+ Installed programs: + free, pgrep, pidof, pkill, pmap, + ps, pwdx, slabtop, sysctl, tload, top, uptime, vmstat, w, + and watch +
+
+ Installed library: + libproc-2.so +
+
+ Installed directories: + /usr/include/procps and + /usr/share/doc/procps-ng-4.0.5 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ free +

+
+

+ Reports the amount of free and used memory (both + physical and swap memory) in the system +

+
+

+ pgrep +

+
+

+ Looks up processes based on their name and other + attributes +

+
+

+ pidof +

+
+

+ Reports the PIDs of the given programs +

+
+

+ pkill +

+
+

+ Signals processes based on their name and other + attributes +

+
+

+ pmap +

+
+

+ Reports the memory map of the given process +

+
+

+ ps +

+
+

+ Lists the current running processes +

+
+

+ pwdx +

+
+

+ Reports the current working directory of a process +

+
+

+ slabtop +

+
+

+ Displays detailed kernel slab cache information in + real time +

+
+

+ sysctl +

+
+

+ Modifies kernel parameters at run time +

+
+

+ tload +

+
+

+ Prints a graph of the current system load average +

+
+

+ top +

+
+

+ Displays a list of the most CPU intensive + processes; it provides an ongoing look at processor + activity in real time +

+
+

+ uptime +

+
+

+ Reports how long the system has been running, how + many users are logged on, and the system load + averages +

+
+

+ vmstat +

+
+

+ Reports virtual memory statistics, giving + information about processes, memory, paging, block + Input/Output (IO), traps, and CPU activity +

+
+

+ w +

+
+

+ Shows which users are currently logged on, where, + and since when +

+
+

+ watch +

+
+

+ Runs a given command repeatedly, displaying the + first screen-full of its output; this allows a user + to watch the output change over time +

+
+

+ libproc-2 +

+
+

+ Contains the functions used by most programs in + this package +

+
+
+
+
+
+
+
+

+ 8.79. Util-linux-2.41.1 +

+
+
+
+
+
+

+ The Util-linux package contains miscellaneous utility + programs. Among them are utilities for handling file systems, + consoles, partitions, and messages. +

+
+
+
+ Approximate build time: + 0.5 SBU +
+
+ Required disk space: + 346 MB +
+
+
+
+
+

+ 8.79.1. Installation of Util-linux +

+

+ Prepare Util-linux for compilation: +

+
./configure --bindir=/usr/bin     \
+            --libdir=/usr/lib     \
+            --runstatedir=/run    \
+            --sbindir=/usr/sbin   \
+            --disable-chfn-chsh   \
+            --disable-login       \
+            --disable-nologin     \
+            --disable-su          \
+            --disable-setpriv     \
+            --disable-runuser     \
+            --disable-pylibmount  \
+            --disable-liblastlog2 \
+            --disable-static      \
+            --without-python      \
+            --without-systemd     \
+            --without-systemdsystemunitdir        \
+            ADJTIME_PATH=/var/lib/hwclock/adjtime \
+            --docdir=/usr/share/doc/util-linux-2.41.1
+

+ The --disable and --without options prevent warnings about + building components that either require packages not in LFS, + or are inconsistent with programs installed by other + packages. +

+

+ Compile the package: +

+
make
+

+ If desired, create a dummy /etc/fstab file to satisfy two tests and + run the test suite as a non-root user: +

+
+

+ Warning +

+

+ Running the test suite as the root user can be harmful to your + system. To run it, the CONFIG_SCSI_DEBUG option for the + kernel must be available in the currently running system + and must be built as a module. Building it into the kernel + will prevent booting. For complete coverage, other BLFS + packages must be installed. If desired, this test can be + run by booting into the completed LFS system and running: +

+
bash tests/run.sh --srcdir=$PWD --builddir=$PWD
+
+
touch /etc/fstab
+chown -R tester .
+su tester -c "make -k check"
+

+ The hardlink tests + will fail if the host's kernel does not have the option + CONFIG_CRYPTO_USER_API_HASH + enabled or does not have any options providing a SHA256 + implementation (for example, CONFIG_CRYPTO_SHA256, or CONFIG_CRYPTO_SHA256_SSSE3 if the CPU + supports Supplemental SSE3) enabled. In addition, the lsfd: + inotify test will fail if the kernel option CONFIG_NETLINK_DIAG is not enabled. +

+

+ One test, kill: decode + functions, is known to fail with bash-5.3-rc1 or + newer. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.79.2. Contents of Util-linux +

+
+
+
+ Installed programs: + addpart, agetty, blkdiscard, blkid, + blkzone, blockdev, cal, cfdisk, chcpu, chmem, choom, + chrt, col, colcrt, colrm, column, ctrlaltdel, delpart, + dmesg, eject, fallocate, fdisk, fincore, findfs, findmnt, + flock, fsck, fsck.cramfs, fsck.minix, fsfreeze, fstrim, + getopt, hardlink, hexdump, hwclock, i386 (link to + setarch), ionice, ipcmk, ipcrm, ipcs, irqtop, isosize, + kill, last, lastb (link to last), ldattach, linux32 (link + to setarch), linux64 (link to setarch), logger, look, + losetup, lsblk, lscpu, lsipc, lsirq, lsfd, lslocks, + lslogins, lsmem, lsns, mcookie, mesg, mkfs, mkfs.bfs, + mkfs.cramfs, mkfs.minix, mkswap, more, mount, mountpoint, + namei, nsenter, partx, pivot_root, prlimit, readprofile, + rename, renice, resizepart, rev, rfkill, rtcwake, script, + scriptlive, scriptreplay, setarch, setsid, setterm, + sfdisk, sulogin, swaplabel, swapoff, swapon, switch_root, + taskset, uclampset, ul, umount, uname26 (link to + setarch), unshare, utmpdump, uuidd, uuidgen, uuidparse, + wall, wdctl, whereis, wipefs, x86_64 (link to setarch), + and zramctl +
+
+ Installed libraries: + libblkid.so, libfdisk.so, + libmount.so, libsmartcols.so, and libuuid.so +
+
+ Installed directories: + /usr/include/blkid, + /usr/include/libfdisk, /usr/include/libmount, + /usr/include/libsmartcols, /usr/include/uuid, + /usr/share/doc/util-linux-2.41.1, and + /var/lib/hwclock +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ addpart +

+
+

+ Informs the Linux kernel of new partitions +

+
+

+ agetty +

+
+

+ Opens a tty port, prompts for a login name, and + then invokes the login program +

+
+

+ blkdiscard +

+
+

+ Discards sectors on a device +

+
+

+ blkid +

+
+

+ A command line utility to locate and print block + device attributes +

+
+

+ blkzone +

+
+

+ Is used to manage zoned storage block devices +

+
+

+ blockdev +

+
+

+ Allows users to call block device ioctls from the + command line +

+
+

+ cal +

+
+

+ Displays a simple calendar +

+
+

+ cfdisk +

+
+

+ Manipulates the partition table of the given device +

+
+

+ chcpu +

+
+

+ Modifies the state of CPUs +

+
+

+ chmem +

+
+

+ Configures memory +

+
+

+ choom +

+
+

+ Displays and adjusts OOM-killer scores, used to + determine which process to kill first when Linux is + Out Of Memory +

+
+

+ chrt +

+
+

+ Manipulates real-time attributes of a process +

+
+

+ col +

+
+

+ Filters out reverse line feeds +

+
+

+ colcrt +

+
+

+ Filters nroff output for + terminals that lack some capabilities, such as + overstriking and half-lines +

+
+

+ colrm +

+
+

+ Filters out the given columns +

+
+

+ column +

+
+

+ Formats a given file into multiple columns +

+
+

+ ctrlaltdel +

+
+

+ Sets the function of the Ctrl+Alt+Del key + combination to a hard or a soft reset +

+
+

+ delpart +

+
+

+ Asks the Linux kernel to remove a partition +

+
+

+ dmesg +

+
+

+ Dumps the kernel boot messages +

+
+

+ eject +

+
+

+ Ejects removable media +

+
+

+ fallocate +

+
+

+ Preallocates space to a file +

+
+

+ fdisk +

+
+

+ Manipulates the partition table of the given device +

+
+

+ fincore +

+
+

+ Counts pages of file contents in core +

+
+

+ findfs +

+
+

+ Finds a file system, either by label or Universally + Unique Identifier (UUID) +

+
+

+ findmnt +

+
+

+ Is a command line interface to the libmount library + for working with mountinfo, fstab and mtab files +

+
+

+ flock +

+
+

+ Acquires a file lock and then executes a command + with the lock held +

+
+

+ fsck +

+
+

+ Is used to check, and optionally repair, file + systems +

+
+

+ fsck.cramfs +

+
+

+ Performs a consistency check on the Cramfs file + system on the given device +

+
+

+ fsck.minix +

+
+

+ Performs a consistency check on the Minix file + system on the given device +

+
+

+ fsfreeze +

+
+

+ Is a very simple wrapper around FIFREEZE/FITHAW + ioctl kernel driver operations +

+
+

+ fstrim +

+
+

+ Discards unused blocks on a mounted filesystem +

+
+

+ getopt +

+
+

+ Parses options in the given command line +

+
+

+ hardlink +

+
+

+ Consolidates duplicate files by creating hard links +

+
+

+ hexdump +

+
+

+ Dumps the given file in hexadecimal, decimal, + octal, or ascii +

+
+

+ hwclock +

+
+

+ Reads or sets the system's hardware clock, also + called the Real-Time Clock (RTC) or Basic + Input-Output System (BIOS) clock +

+
+

+ i386 +

+
+

+ A symbolic link to setarch +

+
+

+ ionice +

+
+

+ Gets or sets the io scheduling class and priority + for a program +

+
+

+ ipcmk +

+
+

+ Creates various IPC resources +

+
+

+ ipcrm +

+
+

+ Removes the given Inter-Process Communication (IPC) + resource +

+
+

+ ipcs +

+
+

+ Provides IPC status information +

+
+

+ irqtop +

+
+

+ Displays kernel interrupt counter information in + top(1) + style view +

+
+

+ isosize +

+
+

+ Reports the size of an iso9660 file system +

+
+

+ kill +

+
+

+ Sends signals to processes +

+
+

+ last +

+
+

+ Shows which users last logged in (and out), + searching back through the /var/log/wtmp file; it also shows + system boots, shutdowns, and run-level changes +

+
+

+ lastb +

+
+

+ Shows the failed login attempts, as logged in + /var/log/btmp +

+
+

+ ldattach +

+
+

+ Attaches a line discipline to a serial line +

+
+

+ linux32 +

+
+

+ A symbolic link to setarch +

+
+

+ linux64 +

+
+

+ A symbolic link to setarch +

+
+

+ logger +

+
+

+ Enters the given message into the system log +

+
+

+ look +

+
+

+ Displays lines that begin with the given string +

+
+

+ losetup +

+
+

+ Sets up and controls loop devices +

+
+

+ lsblk +

+
+

+ Lists information about all or selected block + devices in a tree-like format +

+
+

+ lscpu +

+
+

+ Prints CPU architecture information +

+
+

+ lsfd +

+
+

+ Displays information about open files; replaces + lsof +

+
+

+ lsipc +

+
+

+ Prints information on IPC facilities currently + employed in the system +

+
+

+ lsirq +

+
+

+ Displays kernel interrupt counter information +

+
+

+ lslocks +

+
+

+ Lists local system locks +

+
+

+ lslogins +

+
+

+ Lists information about users, groups and system + accounts +

+
+

+ lsmem +

+
+

+ Lists the ranges of available memory with their + online status +

+
+

+ lsns +

+
+

+ Lists namespaces +

+
+

+ mcookie +

+
+

+ Generates magic cookies (128-bit random hexadecimal + numbers) for xauth +

+
+

+ mesg +

+
+

+ Controls whether other users can send messages to + the current user's terminal +

+
+

+ mkfs +

+
+

+ Builds a file system on a device (usually a hard + disk partition) +

+
+

+ mkfs.bfs +

+
+

+ Creates a Santa Cruz Operations (SCO) bfs file + system +

+
+

+ mkfs.cramfs +

+
+

+ Creates a cramfs file system +

+
+

+ mkfs.minix +

+
+

+ Creates a Minix file system +

+
+

+ mkswap +

+
+

+ Initializes the given device or file to be used as + a swap area +

+
+

+ more +

+
+

+ A filter for paging through text one screen at a + time +

+
+

+ mount +

+
+

+ Attaches the file system on the given device to a + specified directory in the file-system tree +

+
+

+ mountpoint +

+
+

+ Checks if the directory is a mountpoint +

+
+

+ namei +

+
+

+ Shows the symbolic links in the given paths +

+
+

+ nsenter +

+
+

+ Runs a program with namespaces of other processes +

+
+

+ partx +

+
+

+ Tells the kernel about the presence and numbering + of on-disk partitions +

+
+

+ pivot_root +

+
+

+ Makes the given file system the new root file + system of the current process +

+
+

+ prlimit +

+
+

+ Gets and sets a process's resource limits +

+
+

+ readprofile +

+
+

+ Reads kernel profiling information +

+
+

+ rename +

+
+

+ Renames the given files, replacing a given string + with another +

+
+

+ renice +

+
+

+ Alters the priority of running processes +

+
+

+ resizepart +

+
+

+ Asks the Linux kernel to resize a partition +

+
+

+ rev +

+
+

+ Reverses the lines of a given file +

+
+

+ rfkill +

+
+

+ Tool for enabling and disabling wireless devices +

+
+

+ rtcwake +

+
+

+ Used to enter a system sleep state until the + specified wakeup time +

+
+

+ script +

+
+

+ Makes a typescript of a terminal session +

+
+

+ scriptlive +

+
+

+ Re-runs session typescripts using timing + information +

+
+

+ scriptreplay +

+
+

+ Plays back typescripts using timing information +

+
+

+ setarch +

+
+

+ Changes reported architecture in a new program + environment, and sets personality flags +

+
+

+ setsid +

+
+

+ Runs the given program in a new session +

+
+

+ setterm +

+
+

+ Sets terminal attributes +

+
+

+ sfdisk +

+
+

+ A disk partition table manipulator +

+
+

+ sulogin +

+
+

+ Allows root to log + in; it is normally invoked by init when the + system goes into single user mode +

+
+

+ swaplabel +

+
+

+ Makes changes to the swap area's UUID and label +

+
+

+ swapoff +

+
+

+ Disables devices and files for paging and swapping +

+
+

+ swapon +

+
+

+ Enables devices and files for paging and swapping, + and lists the devices and files currently in use +

+
+

+ switch_root +

+
+

+ Switches to another filesystem as the root of the + mount tree +

+
+

+ taskset +

+
+

+ Retrieves or sets a process's CPU affinity +

+
+

+ uclampset +

+
+

+ Manipulates the utilization clamping attributes of + the system or a process +

+
+

+ ul +

+
+

+ A filter for translating underscores into escape + sequences indicating underlining for the terminal + in use +

+
+

+ umount +

+
+

+ Disconnects a file system from the system's file + tree +

+
+

+ uname26 +

+
+

+ A symbolic link to setarch +

+
+

+ unshare +

+
+

+ Runs a program with some namespaces unshared from + parent +

+
+

+ utmpdump +

+
+

+ Displays the content of the given login file in a + user-friendly format +

+
+

+ uuidd +

+
+

+ A daemon used by the UUID library to generate + time-based UUIDs in a secure and guaranteed-unique + fashion +

+
+

+ uuidgen +

+
+

+ Creates new UUIDs. Each new UUID is a random number + likely to be unique among all UUIDs created, on the + local system and on other systems, in the past and + in the future, with extremely high probability + (2128 UUIDs are possible) +

+
+

+ uuidparse +

+
+

+ A utility to parse unique identifiers +

+
+

+ wall +

+
+

+ Displays the contents of a file or, by default, its + standard input, on the terminals of all currently + logged in users +

+
+

+ wdctl +

+
+

+ Shows hardware watchdog status +

+
+

+ whereis +

+
+

+ Reports the location of the binary, source, and man + page files for the given command +

+
+

+ wipefs +

+
+

+ Wipes a filesystem signature from a device +

+
+

+ x86_64 +

+
+

+ A symbolic link to setarch +

+
+

+ zramctl +

+
+

+ A program to set up and control zram (compressed + ram disk) devices +

+
+

+ libblkid +

+
+

+ Contains routines for device identification and + token extraction +

+
+

+ libfdisk +

+
+

+ Contains routines for manipulating partition tables +

+
+

+ libmount +

+
+

+ Contains routines for block device mounting and + unmounting +

+
+

+ libsmartcols +

+
+

+ Contains routines for aiding screen output in + tabular form +

+
+

+ libuuid +

+
+

+ Contains routines for generating unique identifiers + for objects that may be accessible beyond the local + system +

+
+
+
+
+
+
+
+

+ 8.80. E2fsprogs-1.47.3 +

+
+
+
+
+
+

+ The E2fsprogs package contains the utilities for handling the + ext2 file system. It also + supports the ext3 and + ext4 journaling file systems. +

+
+
+
+ Approximate build time: + 2.4 SBU on a spinning disk, 0.5 SBU + on an SSD +
+
+ Required disk space: + 100 MB +
+
+
+
+
+

+ 8.80.1. Installation of E2fsprogs +

+

+ The E2fsprogs documentation recommends that the package be + built in a subdirectory of the source tree: +

+
mkdir -v build
+cd       build
+

+ Prepare E2fsprogs for compilation: +

+
../configure --prefix=/usr       \
+             --sysconfdir=/etc   \
+             --enable-elf-shlibs \
+             --disable-libblkid  \
+             --disable-libuuid   \
+             --disable-uuidd     \
+             --disable-fsck
+
+

+ The meaning of the configure options: +

+
+
+ --enable-elf-shlibs +
+
+

+ This creates the shared libraries which some programs + in this package use. +

+
+
+ --disable-* +
+
+

+ These prevent building and installing the libuuid and libblkid libraries, the + uuidd daemon, and the + fsck + wrapper; util-linux installs more recent versions. +

+
+
+
+

+ Compile the package: +

+
make
+

+ To run the tests, issue: +

+
make check
+

+ One test named m_assume_storage_prezeroed is known to + fail. Another test named m_rootdir_acl is known to fail if the file + system used for the LFS system is not ext4. +

+

+ Install the package: +

+
make install
+

+ Remove useless static libraries: +

+
rm -fv /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
+

+ This package installs a gzipped .info file but doesn't update the + system-wide dir file. Unzip + this file and then update the system dir file using the following commands: +

+
gunzip -v /usr/share/info/libext2fs.info.gz
+install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info
+

+ If desired, create and install some additional documentation + by issuing the following commands: +

+
makeinfo -o      doc/com_err.info ../lib/et/com_err.texinfo
+install -v -m644 doc/com_err.info /usr/share/info
+install-info --dir-file=/usr/share/info/dir /usr/share/info/com_err.info
+
+
+

+ 8.80.2. + Configuring E2fsprogs +

+

+ /etc/mke2fs.conf contains the + default value of various command line options of mke2fs. You may edit the + file to make the default values suitable for your needs. For + example, some utilities (not in LFS or BLFS) cannot recognize + a ext4 file system with + metadata_csum_seed feature + enabled. If you + need such a utility, you may remove the feature from the + default ext4 feature list + with the command: +

+
sed 's/metadata_csum_seed,//' -i /etc/mke2fs.conf
+

+ Read the man page mke2fs.conf(5) + for details. +

+
+
+

+ 8.80.3. Contents of E2fsprogs +

+
+
+
+ Installed programs: + badblocks, chattr, compile_et, + debugfs, dumpe2fs, e2freefrag, e2fsck, e2image, e2label, + e2mmpstatus, e2scrub, e2scrub_all, e2undo, e4crypt, + e4defrag, filefrag, fsck.ext2, fsck.ext3, fsck.ext4, + logsave, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, + mkfs.ext4, mklost+found, resize2fs, and tune2fs +
+
+ Installed libraries: + libcom_err.so, libe2p.so, + libext2fs.so, and libss.so +
+
+ Installed directories: + /usr/include/e2p, /usr/include/et, + /usr/include/ext2fs, /usr/include/ss, /usr/lib/e2fsprogs, + /usr/share/et, and /usr/share/ss +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ badblocks +

+
+

+ Searches a device (usually a disk partition) for + bad blocks +

+
+

+ chattr +

+
+

+ Changes the attributes of files on ext{234} file systems +

+
+

+ compile_et +

+
+

+ An error table compiler; it converts a table of + error-code names and messages into a C source file + suitable for use with the com_err library +

+
+

+ debugfs +

+
+

+ A file system debugger; it can be used to examine + and change the state of ext{234} file systems +

+
+

+ dumpe2fs +

+
+

+ Prints the super block and blocks group information + for the file system present on a given device +

+
+

+ e2freefrag +

+
+

+ Reports free space fragmentation information +

+
+

+ e2fsck +

+
+

+ Is used to check and optionally repair ext{234} file systems +

+
+

+ e2image +

+
+

+ Is used to save critical ext{234} file system data to a + file +

+
+

+ e2label +

+
+

+ Displays or changes the file system label on the + ext{234} file + system on a given device +

+
+

+ e2mmpstatus +

+
+

+ Checks MMP (Multiple Mount Protection) status of an + ext4 file system +

+
+

+ e2scrub +

+
+

+ Checks the contents of a mounted ext{234} file system +

+
+

+ e2scrub_all +

+
+

+ Checks all mounted ext{234} file systems for + errors +

+
+

+ e2undo +

+
+

+ Replays the undo log for an ext{234} file system found on a + device. [This can be used to undo a failed + operation by an E2fsprogs program.] +

+
+

+ e4crypt +

+
+

+ Ext4 file system + encryption utility +

+
+

+ e4defrag +

+
+

+ Online defragmenter for ext4 file systems +

+
+

+ filefrag +

+
+

+ Reports on how badly fragmented a particular file + might be +

+
+

+ fsck.ext2 +

+
+

+ By default checks ext2 file systems and is a hard + link to e2fsck +

+
+

+ fsck.ext3 +

+
+

+ By default checks ext3 file systems and is a hard + link to e2fsck +

+
+

+ fsck.ext4 +

+
+

+ By default checks ext4 file systems and is a hard + link to e2fsck +

+
+

+ logsave +

+
+

+ Saves the output of a command in a log file +

+
+

+ lsattr +

+
+

+ Lists the attributes of files on a second extended + file system +

+
+

+ mk_cmds +

+
+

+ Converts a table of command names and help messages + into a C source file suitable for use with the + libss subsystem + library +

+
+

+ mke2fs +

+
+

+ Creates an ext{234} + file system on the given device +

+
+

+ mkfs.ext2 +

+
+

+ By default creates ext2 file systems and is a hard + link to mke2fs +

+
+

+ mkfs.ext3 +

+
+

+ By default creates ext3 file systems and is a hard + link to mke2fs +

+
+

+ mkfs.ext4 +

+
+

+ By default creates ext4 file systems and is a hard + link to mke2fs +

+
+

+ mklost+found +

+
+

+ Creates a lost+found + directory on an ext{234} file system; it + pre-allocates disk blocks to this directory to + lighten the task of e2fsck +

+
+

+ resize2fs +

+
+

+ Can be used to enlarge or shrink ext{234} file systems +

+
+

+ tune2fs +

+
+

+ Adjusts tunable file system parameters on + ext{234} file + systems +

+
+

+ libcom_err +

+
+

+ The common error display routine +

+
+

+ libe2p +

+
+

+ Used by dumpe2fs, + chattr, and + lsattr +

+
+

+ libext2fs +

+
+

+ Contains routines to enable user-level programs to + manipulate ext{234} + file systems +

+
+

+ libss +

+
+

+ Used by debugfs +

+
+
+
+
+
+
+
+

+ 8.81. Sysklogd-2.7.2 +

+
+
+
+
+
+

+ The Sysklogd package contains programs for logging system + messages, such as those emitted by the kernel when unusual + things happen. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 3.9 MB +
+
+
+
+
+

+ 8.81.1. Installation of Sysklogd +

+

+ Prepare the package for compilation: +

+
./configure --prefix=/usr      \
+            --sysconfdir=/etc  \
+            --runstatedir=/run \
+            --without-logger   \
+            --disable-static   \
+            --docdir=/usr/share/doc/sysklogd-2.7.2
+

+ Compile the package: +

+
make
+

+ This package does not come with a test suite. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.81.2. + Configuring Sysklogd +

+

+ Create a new /etc/syslog.conf + file by running the following: +

+
cat > /etc/syslog.conf << "EOF"
+# Begin /etc/syslog.conf
+
+auth,authpriv.* -/var/log/auth.log
+*.*;auth,authpriv.none -/var/log/sys.log
+daemon.* -/var/log/daemon.log
+kern.* -/var/log/kern.log
+mail.* -/var/log/mail.log
+user.* -/var/log/user.log
+*.emerg *
+
+# Do not open any internet ports.
+secure_mode 2
+
+# End /etc/syslog.conf
+EOF
+
+
+

+ 8.81.3. Contents of Sysklogd +

+
+
+
+ Installed program: + syslogd +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + +
+

+ syslogd +

+
+

+ Logs the messages that system programs offer for + logging [Every logged message contains at least a + date stamp and a hostname, and normally the + program's name too, but that depends on how + trusting the logging daemon is told to be.] +

+
+
+
+
+
+
+
+

+ 8.82. SysVinit-3.14 +

+
+
+
+
+
+

+ The SysVinit package contains programs for controlling the + startup, running, and shutdown of the system. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 3.9 MB +
+
+
+
+
+

+ 8.82.1. Installation of SysVinit +

+

+ First, apply a patch that removes several programs installed + by other packages, clarifies a message, and fixes a compiler + warning: +

+
patch -Np1 -i ../sysvinit-3.14-consolidated-1.patch
+

+ Compile the package: +

+
make
+

+ This package does not come with a test suite. +

+

+ Install the package: +

+
make install
+
+
+

+ 8.82.2. Contents of SysVinit +

+
+
+
+ Installed programs: + bootlogd, fstab-decode, halt, init, + killall5, poweroff (link to halt), reboot (link to halt), + runlevel, shutdown, and telinit (link to init) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ bootlogd +

+
+

+ Logs boot messages to a log file +

+
+

+ fstab-decode +

+
+

+ Runs a command with fstab-encoded arguments +

+
+

+ halt +

+
+

+ Normally invokes shutdown with the + -h option, + but when already in run-level 0, it tells the + kernel to halt the system; it notes in the file + /var/log/wtmp that + the system is going down +

+
+

+ init +

+
+

+ The first process to be started when the kernel has + initialized the hardware; it takes over the boot + process and starts all the processes specified in + its configuration file +

+
+

+ killall5 +

+
+

+ Sends a signal to all processes, except the + processes in its own session; it will not kill its + parent shell +

+
+

+ poweroff +

+
+

+ Tells the kernel to halt the system and switch off + the computer (see halt) +

+
+

+ reboot +

+
+

+ Tells the kernel to reboot the system (see + halt) +

+
+

+ runlevel +

+
+

+ Reports the previous and the current run-level, as + noted in the last run-level record in /run/utmp +

+
+

+ shutdown +

+
+

+ Brings the system down in a secure way, signaling + all processes and notifying all logged-in users +

+
+

+ telinit +

+
+

+ Tells init which + run-level to change to +

+
+
+
+
+
+
+
+

+ 8.83. About Debugging + Symbols +

+
+
+
+
+

+ Most programs and libraries are, by default, compiled with + debugging symbols included (with gcc's -g option). This means that when + debugging a program or library that was compiled with debugging + information, the debugger can provide not only memory + addresses, but also the names of the routines and variables. +

+

+ The inclusion of these debugging symbols enlarges a program or + library significantly. Here are two examples of the amount of + space these symbols occupy: +

+
+
    +
  • +

    + A bash + binary with debugging symbols: 1200 KB +

    +
  • +
  • +

    + A bash + binary without debugging symbols: 480 KB (60% smaller) +

    +
  • +
  • +

    + Glibc and GCC files (/lib + and /usr/lib) with + debugging symbols: 87 MB +

    +
  • +
  • +

    + Glibc and GCC files without debugging symbols: 16 MB (82% + smaller) +

    +
  • +
+
+

+ Sizes will vary depending on which compiler and C library were + used, but a program that has been stripped of debugging symbols + is usually some 50% to 80% smaller than its unstripped + counterpart. Because most users will never use a debugger on + their system software, a lot of disk space can be regained by + removing these symbols. The next section shows how to strip all + debugging symbols from the programs and libraries. +

+
+
+
+
+

+ 8.84. Stripping +

+
+
+
+
+

+ This section is optional. If the intended user is not a + programmer and does not plan to do any debugging of the system + software, the system's size can be decreased by some 2 GB by + removing the debugging symbols, and some unnecessary symbol + table entries, from binaries and libraries. This causes no real + inconvenience for a typical Linux user. +

+

+ Most people who use the commands mentioned below do not + experience any difficulties. However, it is easy to make a + mistake and render the new system unusable. So before running + the strip + commands, it is a good idea to make a backup of the LFS system + in its current state. +

+

+ A strip command + with the --strip-unneeded option removes + all debug symbols from a binary or library. It also removes all + symbol table entries not normally needed by the linker (for + static libraries) or dynamic linker (for dynamically linked + binaries and shared libraries). Using --strip-debug does not remove + symbol table entries that may be needed by some applications. + The difference between unneeded + and debug is very small. For + example, an unstripped libc.a is + 22.4 MB. After stripping with --strip-debug it is 5.9 MB. Using + --strip-unneeded only + reduces the size further to 5.8 MB. +

+

+ The debugging symbols from selected libraries are compressed + with Zstd and preserved in + separate files. That debugging information is needed to run + regression tests with + valgrind or + gdb later, in BLFS. +

+

+ Note that strip + will overwrite the binary or library file it is processing. + This can crash the processes using code or data from the file. + If the process running strip is affected, the binary + or library being stripped can be destroyed; this can make the + system completely unusable. To avoid this problem we copy some + libraries and binaries into /tmp, + strip them there, then reinstall them with the install command. (The related + entry in Section 8.2.1, “Upgrade + Issues” gives the rationale for using the install command here.) +

+
+

+ Note +

+

+ The ELF loader's name is ld-linux-x86-64.so.2 on 64-bit + systems and ld-linux.so.2 on 32-bit systems. The construct + below selects the correct name for the current architecture, + excluding anything ending with g, in case the commands below have already + been run. +

+
+
+

+ Important +

+

+ If there is any package whose version is different from the + version specified by the book (either following a security + advisory or satisfying personal preference), it may be + necessary to update the library file name in save_usrlib or online_usrlib. Failing to do so may render the system + completely unusable. +

+
+
save_usrlib="$(cd /usr/lib; ls ld-linux*[^g])
+             libc.so.6
+             libthread_db.so.1
+             libquadmath.so.0.0.0
+             libstdc++.so.6.0.34
+             libitm.so.1.0.0
+             libatomic.so.1.2.0"
+
+cd /usr/lib
+
+for LIB in $save_usrlib; do
+    objcopy --only-keep-debug --compress-debug-sections=zstd $LIB $LIB.dbg
+    cp $LIB /tmp/$LIB
+    strip --strip-debug /tmp/$LIB
+    objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB
+    install -vm755 /tmp/$LIB /usr/lib
+    rm /tmp/$LIB
+done
+
+online_usrbin="bash find strip"
+online_usrlib="libbfd-2.45.so
+               libsframe.so.2.0.0
+               libhistory.so.8.3
+               libncursesw.so.6.5
+               libm.so.6
+               libreadline.so.8.3
+               libz.so.1.3.1
+               libzstd.so.1.5.7
+               $(cd /usr/lib; find libnss*.so* -type f)"
+
+for BIN in $online_usrbin; do
+    cp /usr/bin/$BIN /tmp/$BIN
+    strip --strip-debug /tmp/$BIN
+    install -vm755 /tmp/$BIN /usr/bin
+    rm /tmp/$BIN
+done
+
+for LIB in $online_usrlib; do
+    cp /usr/lib/$LIB /tmp/$LIB
+    strip --strip-debug /tmp/$LIB
+    install -vm755 /tmp/$LIB /usr/lib
+    rm /tmp/$LIB
+done
+
+for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \
+         $(find /usr/lib -type f -name \*.a)                 \
+         $(find /usr/{bin,sbin,libexec} -type f); do
+    case "$online_usrbin $online_usrlib $save_usrlib" in
+        *$(basename $i)* )
+            ;;
+        * ) strip --strip-debug $i
+            ;;
+    esac
+done
+
+unset BIN LIB save_usrlib online_usrbin online_usrlib
+
+

+ A large number of files will be flagged as errors because their + file format is not recognized. These warnings can be safely + ignored. They indicate that those files are scripts, not + binaries. +

+
+
+
+
+

+ 8.85. Cleaning Up +

+
+
+
+
+

+ Finally, clean up some extra files left over from running + tests: +

+
rm -rf /tmp/{*,.*}
+

+ There are also several files in the /usr/lib and /usr/libexec + directories with a file name extension of .la. These are + "libtool archive" files. On a modern Linux system the libtool + .la files are only useful for libltdl. No libraries in LFS are + expected to be loaded by libltdl, and it's known that some .la + files can break BLFS package builds. Remove those files now: +

+
find /usr/lib /usr/libexec -name \*.la -delete
+

+ For more information about libtool archive files, see the + + BLFS section "About Libtool Archive (.la) files". +

+

+ The compiler built in Chapter 6 + and + Chapter 7 is still partially installed and not needed + anymore. Remove it with: +

+
find /usr -depth -name $(uname -m)-lfs-linux-gnu\* | xargs rm -rf
+

+ Finally, remove the temporary 'tester' user account created at + the beginning of the previous chapter. +

+
userdel -r tester
+
+
+
+
+
+

+ [1] The name of a shared library is the + string coded in the DT_SONAME + entry of its ELF dynamic section. You can get it with the + readelf -d <library file> | grep + SONAME command. In most cases it's suffixed + with .so.<a version + number>, but there are some cases where + it contains multiple numbers for versioning (like + libbz2.so.1.0), contains the + version number before the .so + suffix (like libbfd-2.45), or + does not contain any version number at all (for example + libmemusage.so). Generally + there is no correlation between the package version and the + version number(s) in the library name. +

+
+
+
+
+
+
+

+ Chapter 9. System + Configuration +

+
+
+
+
+
+
+
+

+ 9.1. Introduction +

+
+
+
+
+

+ Booting a Linux system involves several tasks. The process must + mount both virtual and real file systems, initialize devices, + check file systems for integrity, mount and activate any swap + partitions or files, set the system clock, bring up networking, + start any daemons required by the system, and accomplish any + other custom tasks specified by the user. This process must be + organized to ensure the tasks are performed in the correct + order and executed as quickly as possible. +

+
+

+ 9.1.1. System V +

+

+ System V is the classic boot process that has been used in + Unix and Unix-like systems such as Linux since about 1983. It + consists of a small program, init, that sets up basic + processes such as login (via getty) and runs + a script. This script, usually named rc, controls the execution + of a set of additional scripts that perform the tasks + required to initialize the system. +

+

+ The init + program is controlled by the /etc/inittab file and is organized into run + levels that can be chosen by the user. In LFS, they are used + as follows: +

+
+

+ 0 — halt
+ 1 — Single user mode
+ 2 — User definable
+ 3 — Full multiuser mode
+ 4 — User definable
+ 5 — Full multiuser mode with display manager
+ + 6 — reboot +

+
+

+ The usual default run level is 3 or 5. +

+

+ Advantages +

+
+
    +
  • +

    + Established, well understood system. +

    +
  • +
  • +

    + Easy to customize. +

    +
  • +
+
+

+ Disadvantages +

+
+
    +
  • +

    + May be slower to boot. A medium speed base LFS system + takes 8-12 seconds where the boot time is measured from + the first kernel message to the login prompt. Network + connectivity is typically established about 2 seconds + after the login prompt. +

    +
  • +
  • +

    + Serial processing of boot tasks. This is related to the + previous point. A delay in any process, such as a file + system check, will delay the entire boot process. +

    +
  • +
  • +

    + Does not directly support advanced features like + control groups (cgroups) and per-user fair share + scheduling. +

    +
  • +
  • +

    + Adding scripts requires manual, static sequencing + decisions. +

    +
  • +
+
+
+
+
+
+
+

+ 9.2. LFS-Bootscripts-20250827 +

+
+
+
+
+
+

+ The LFS-Bootscripts package contains a set of scripts to + start/stop the LFS system at bootup/shutdown. The + configuration files and procedures needed to customize the + boot process are described in the following sections. +

+
+
+
+ Approximate build time: + less than 0.1 SBU +
+
+ Required disk space: + 238 KB +
+
+
+
+
+

+ 9.2.1. Installation of LFS-Bootscripts +

+

+ Install the package: +

+
make install
+
+
+

+ 9.2.2. Contents of LFS-Bootscripts +

+
+
+
+ Installed scripts: + checkfs, cleanfs, console, + functions, halt, ifdown, ifup, localnet, modules, + mountfs, mountvirtfs, network, rc, reboot, sendsignals, + setclock, ipv4-static, swap, sysctl, sysklogd, template, + udev, and udev_retry +
+
+ Installed directories: + /etc/rc.d, /etc/init.d (symbolic + link), /etc/sysconfig, /lib/services, /lib/lsb (symbolic + link) +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ checkfs +

+
+

+ Checks the integrity of the file systems before + they are mounted (with the exception of journaling + and network-based file systems) +

+
+

+ cleanfs +

+
+

+ Removes files that should not be preserved between + reboots, such as those in /run/ and /var/lock/; it re-creates + /run/utmp and removes + the possibly present /etc/nologin, /fastboot, and /forcefsck files +

+
+

+ console +

+
+

+ Loads the correct keymap table for the desired + keyboard layout; it also sets the screen font +

+
+

+ functions +

+
+

+ Contains common functions, such as error and status + checking, that are used by several bootscripts +

+
+

+ halt +

+
+

+ Halts the system +

+
+

+ ifdown +

+
+

+ Stops a network device +

+
+

+ ifup +

+
+

+ Initializes a network device +

+
+

+ localnet +

+
+

+ Sets up the system's hostname and local loopback + device +

+
+

+ modules +

+
+

+ Loads kernel modules listed in /etc/sysconfig/modules, using + arguments that are also given there +

+
+

+ mountfs +

+
+

+ Mounts all file systems, except those that are + marked noauto, or are network + based +

+
+

+ mountvirtfs +

+
+

+ Mounts virtual kernel file systems, such as + proc +

+
+

+ network +

+
+

+ Sets up network interfaces, such as network cards, + and sets up the default gateway (where applicable) +

+
+

+ rc +

+
+

+ The master run-level control script; it is + responsible for running all the other bootscripts + one-by-one, in a sequence determined by the names + of the symbolic links to those other bootscripts +

+
+

+ reboot +

+
+

+ Reboots the system +

+
+

+ sendsignals +

+
+

+ Makes sure every process is terminated before the + system reboots or halts +

+
+

+ setclock +

+
+

+ Resets the system clock to local time if the + hardware clock is not set to UTC +

+
+

+ ipv4-static +

+
+

+ Provides the functionality needed to assign a + static Internet Protocol (IP) address to a network + interface +

+
+

+ swap +

+
+

+ Enables and disables swap files and partitions +

+
+

+ sysctl +

+
+

+ Loads system configuration values from /etc/sysctl.conf, if that file + exists, into the running kernel +

+
+

+ sysklogd +

+
+

+ Starts and stops the system and kernel log daemons +

+
+

+ template +

+
+

+ A template to create custom bootscripts for other + daemons +

+
+

+ udev +

+
+

+ Prepares the /dev + directory and starts the udev daemon +

+
+

+ udev_retry +

+
+

+ Retries failed udev uevents, and copies generated + rules files from /run/udev to /etc/udev/rules.d if required +

+
+
+
+
+
+
+
+

+ 9.3. Overview of Device and + Module Handling +

+
+
+
+
+

+ In Chapter 8, + we installed the udev daemon when udev was built. Before we go into the details + regarding how udev works, a brief history of previous methods + of handling devices is in order. +

+

+ Linux systems in general traditionally used a static device + creation method, whereby a great many device nodes were created + under /dev (sometimes literally + thousands of nodes), regardless of whether the corresponding + hardware devices actually existed. This was typically done via + a MAKEDEV script, + which contained a number of calls to the mknod program with the + relevant major and minor device numbers for every possible + device that might exist in the world. +

+

+ Using the udev method, device nodes are only created for those + devices which are detected by the kernel. These device nodes + are created each time the system boots; they are stored in a + devtmpfs file system (a virtual + file system that resides entirely in system memory). Device + nodes do not require much space, so the memory that is used is + negligible. +

+
+

+ 9.3.1. History +

+

+ In February 2000, a new filesystem called devfs was merged into the 2.3.46 kernel + and was made available during the 2.4 series of stable + kernels. Although it was present in the kernel source itself, + this method of creating devices dynamically never received + overwhelming support from the core kernel developers. +

+

+ The main problem with the approach adopted by devfs was the way it handled device + detection, creation, and naming. The latter issue, that of + device node naming, was perhaps the most critical. It is + generally accepted that if device names are configurable, the + device naming policy should be chosen by system + administrators, and not imposed on them by the developer(s). + The devfs file system also + suffered from race conditions that were inherent in its + design; these could not be fixed without a substantial + revision of the kernel. devfs + was marked as deprecated for a long time, and was finally + removed from the kernel in June, 2006. +

+

+ With the development of the unstable 2.5 kernel tree, later + released as the 2.6 series of stable kernels, a new virtual + filesystem called sysfs came + to be. The job of sysfs is to + provide information about the system's hardware configuration + to userspace processes. With this userspace-visible + representation, it became possible to develop a userspace + replacement for devfs. +

+
+
+

+ 9.3.2. Udev Implementation +

+
+
+
+
+

+ 9.3.2.1. Sysfs +

+
+
+
+

+ The sysfs filesystem was + mentioned briefly above. One may wonder how sysfs knows about the devices present + on a system and what device numbers should be used for + them. Drivers that have been compiled into the kernel + register their objects in sysfs (devtmpfs internally) as they are + detected by the kernel. For drivers compiled as modules, + registration happens when the module is loaded. Once the + sysfs filesystem is mounted + (on /sys), data which the + drivers have registered with sysfs are available to userspace + processes and to udevd for processing (including + modifications to device nodes). +

+
+
+
+
+
+

+ 9.3.2.2. Device + Node Creation +

+
+
+
+

+ Device files are created by the kernel in the devtmpfs file system. Any driver that + wishes to register a device node will use the devtmpfs (via the driver core) to do + it. When a devtmpfs + instance is mounted on /dev, + the device node will initially be exposed to userspace with + a fixed name, permissions, and owner. +

+

+ A short time later, the kernel will send a uevent to + udevd. Based + on the rules specified in the files within the /etc/udev/rules.d, /usr/lib/udev/rules.d, and /run/udev/rules.d directories, + udevd will + create additional symlinks to the device node, or change + its permissions, owner, or group, or modify the internal + udevd + database entry (name) for that object. +

+

+ The rules in these three directories are numbered and all + three directories are merged together. If udevd can't find a rule + for the device it is creating, it will leave the + permissions and ownership at whatever devtmpfs used initially. +

+
+
+
+
+
+

+ 9.3.2.3. Module Loading +

+
+
+
+

+ Device drivers compiled as modules may have aliases built + into them. Aliases are visible in the output of the + modinfo + program and are usually related to the bus-specific + identifiers of devices supported by a module. For example, + the snd-fm801 driver + supports PCI devices with vendor ID 0x1319 and device ID + 0x0801, and has an alias of pci:v00001319d00000801sv*sd*bc04sc01i*. + For most devices, the bus driver exports the alias of the + driver that would handle the device via sysfs. E.g., the /sys/bus/pci/devices/0000:00:0d.0/modalias + file might contain the string pci:v00001319d00000801sv00001319sd00001319bc04sc01i00. + The default rules provided with udev will cause + udevd to call + out to /sbin/modprobe with the + contents of the MODALIAS uevent + environment variable (which should be the same as the + contents of the modalias file + in sysfs), thus loading all modules whose aliases match + this string after wildcard expansion. +

+

+ In this example, this means that, in addition to + snd-fm801, the + obsolete (and unwanted) forte driver will be loaded if + it is available. See below for ways in which the loading of + unwanted drivers can be prevented. +

+

+ The kernel itself is also able to load modules for network + protocols, filesystems, and NLS support on demand. +

+
+
+
+
+
+

+ 9.3.2.4. Handling + Hotpluggable/Dynamic Devices +

+
+
+
+

+ When you plug in a device, such as a Universal Serial Bus + (USB) MP3 player, the kernel recognizes that the device is + now connected and generates a uevent. This uevent is then + handled by udevd as described above. +

+
+
+
+

+ 9.3.3. Problems with Loading Modules and Creating Devices +

+

+ There are a few possible problems when it comes to + automatically creating device nodes. +

+
+
+
+
+

+ 9.3.3.1. A Kernel + Module Is Not Loaded Automatically +

+
+
+
+

+ Udev will only load a module if it has a bus-specific alias + and the bus driver properly exports the necessary aliases + to sysfs. In other cases, + one should arrange module loading by other means. With + Linux-6.16.1, udev is known to load properly-written + drivers for INPUT, IDE, PCI, USB, SCSI, SERIO, and FireWire + devices. +

+

+ To determine if the device driver you require has the + necessary support for udev, run modinfo with the module + name as the argument. Now try locating the device directory + under /sys/bus and check + whether there is a modalias + file there. +

+

+ If the modalias file exists + in sysfs, the driver + supports the device and can talk to it directly, but + doesn't have the alias, it is a bug in the driver. Load the + driver without the help from udev and expect the issue to + be fixed later. +

+

+ If there is no modalias file + in the relevant directory under /sys/bus, this means that the kernel + developers have not yet added modalias support to this bus + type. With Linux-6.16.1, this is the case with ISA busses. + Expect this issue to be fixed in later kernel versions. +

+

+ Udev is not intended to load “wrapper” drivers + such as snd-pcm-oss + and non-hardware drivers such as loop at all. +

+
+
+
+
+
+

+ 9.3.3.2. A Kernel + Module Is Not Loaded Automatically, and Udev Is Not + Intended to Load It +

+
+
+
+

+ If the “wrapper” module only enhances the + functionality provided by some other module (e.g., + snd-pcm-oss enhances + the functionality of snd-pcm by making the sound + cards available to OSS applications), configure + modprobe to + load the wrapper after udev loads the wrapped module. To do + this, add a “softdep” line to the corresponding + /etc/modprobe.d/<filename>.conf + file. For example: +

+
softdep snd-pcm post: snd-pcm-oss
+

+ Note that the “softdep” command also allows + pre: dependencies, or a + mixture of both pre: and + post: dependencies. See the + modprobe.d(5) + manual page for more information on “softdep” syntax + and capabilities. +

+

+ If the module in question is not a wrapper and is useful by + itself, configure the modules bootscript to + load this module on system boot. To do this, add the module + name to the /etc/sysconfig/modules file on a separate + line. This works for wrapper modules too, but is suboptimal + in that case. +

+
+
+
+
+
+

+ 9.3.3.3. Udev Loads + Some Unwanted Module +

+
+
+
+

+ Either don't build the module, or blacklist it in a + /etc/modprobe.d/blacklist.conf file as + done with the forte + module in the example below: +

+
blacklist forte
+

+ Blacklisted modules can still be loaded manually with the + explicit modprobe command. +

+
+
+
+
+
+

+ 9.3.3.4. Udev Creates a + Device Incorrectly, or Makes the Wrong Symlink +

+
+
+
+

+ This usually happens if a rule unexpectedly matches a + device. For example, a poorly-written rule can match both a + SCSI disk (as desired) and the corresponding SCSI generic + device (incorrectly) by vendor. Find the offending rule and + make it more specific, with the help of the udevadm info command. +

+
+
+
+
+
+

+ 9.3.3.5. Udev Rule + Works Unreliably +

+
+
+
+

+ This may be another manifestation of the previous problem. + If not, and your rule uses sysfs attributes, it may be a kernel + timing issue, to be fixed in later kernels. For now, you + can work around it by creating a rule that waits for the + used sysfs attribute and + appending it to the /etc/udev/rules.d/10-wait_for_sysfs.rules + file (create this file if it does not exist). Please notify + the LFS Development list if you do so and it helps. +

+
+
+
+
+
+

+ 9.3.3.6. Udev Does Not + Create a Device +

+
+
+
+

+ First, be certain that the driver is built into the kernel + or already loaded as a module, and that udev isn't creating + a misnamed device. +

+

+ If a kernel driver does not export its data to sysfs, udev lacks the information + needed to create a device node. This is most likely to + happen with third party drivers from outside the kernel + tree. Create a static device node in /usr/lib/udev/devices with the + appropriate major/minor numbers (see the file devices.txt inside the kernel + documentation or the documentation provided by the third + party driver vendor). The static device node will be copied + to /dev by udev. +

+
+
+
+
+
+

+ 9.3.3.7. Device Naming + Order Changes Randomly After Rebooting +

+
+
+
+

+ This is due to the fact that udev, by design, handles + uevents and loads modules in parallel, and thus in an + unpredictable order. This will never be “fixed.” You + should not rely upon the kernel device names being stable. + Instead, create your own rules that make symlinks with + stable names based on some stable attributes of the device, + such as a serial number or the output of various *_id + utilities installed by udev. See Section 9.4, “Managing + Devices” and Section 9.5, + “General Network Configuration” for examples. +

+
+
+
+

+ 9.3.4. Useful Reading +

+

+ Additional helpful documentation is available at the + following sites: +

+ +
+
+
+
+
+

+ 9.4. Managing Devices +

+
+
+
+
+
+

+ 9.4.1. Network Devices +

+

+ Udev, by default, names network devices according to + Firmware/BIOS data or physical characteristics like the bus, + slot, or MAC address. The purpose of this naming convention + is to ensure that network devices are named consistently, not + based on when the network card was discovered. In older + versions of Linux—on a computer with two network cards made + by Intel and Realtek, for instance—the network card + manufactured by Intel might have become eth0 while the + Realtek card became eth1. After a reboot, the cards would + sometimes get renumbered the other way around. +

+

+ In the new naming scheme, typical network device names are + something like enp5s0 or wlp3s0. If this naming convention is + not desired, the traditional naming scheme, or a custom + scheme, can be implemented. +

+
+
+
+
+

+ 9.4.1.1. Disabling + Persistent Naming on the Kernel Command Line +

+
+
+
+

+ The traditional naming scheme using eth0, eth1, etc. can be + restored by adding net.ifnames=0 on the + kernel command line. This is most appropriate for systems + that have just one ethernet device of a particular type. + Laptops often have two ethernet connections named eth0 and + wlan0; such laptops can also use this method. The command + line is in the GRUB configuration file. See Section 10.4.4, + “Creating the GRUB Configuration File.” +

+
+
+
+
+
+

+ 9.4.1.2. Creating + Custom Udev Rules +

+
+
+
+

+ The naming scheme can be customized by creating custom udev + rules. A script has been included that generates the + initial rules. Generate these rules by running: +

+
bash /usr/lib/udev/init-net-rules.sh
+

+ Now, inspect the /etc/udev/rules.d/70-persistent-net.rules + file, to find out which name was assigned to which network + device: +

+
cat /etc/udev/rules.d/70-persistent-net.rules
+
+

+ Note +

+

+ In some cases, such as when MAC addresses have been + assigned to a network card manually, or in a virtual + environment such as Qemu or Xen, the network rules file + may not be generated because addresses are not + consistently assigned. In these cases, this method cannot + be used. +

+
+

+ The file begins with a comment block, followed by two lines + for each NIC. The first line for each NIC is a commented + description showing its hardware IDs (e.g. its PCI vendor + and device IDs, if it's a PCI card), along with its driver + (in parentheses, if the driver can be found). Neither the + hardware ID nor the driver is used to determine which name + to give an interface; this information is only for + reference. The second line is the udev rule that matches + this NIC and actually assigns it a name. +

+

+ All udev rules are made up of several keywords, separated + by commas and optional whitespace. Here are the keywords, + and an explanation of each one: +

+
+
    +
  • +

    + SUBSYSTEM=="net" - This + tells udev to ignore devices that are not network + cards. +

    +
  • +
  • +

    + ACTION=="add" - This + tells udev to ignore this rule for a uevent that + isn't an add ("remove" and "change" uevents also + happen, but don't need to rename network interfaces). +

    +
  • +
  • +

    + DRIVERS=="?*" - This + exists so that udev will ignore VLAN or bridge + sub-interfaces (because these sub-interfaces do not + have drivers). These sub-interfaces are skipped + because the name that would be assigned would collide + with the parent devices. +

    +
  • +
  • +

    + ATTR{address} - The + value of this keyword is the NIC's MAC address. +

    +
  • +
  • +

    + ATTR{type}=="1" - This + ensures the rule only matches the primary interface + in the case of certain wireless drivers which create + multiple virtual interfaces. The secondary interfaces + are skipped for the same reason that VLAN and bridge + sub-interfaces are skipped: there would be a name + collision otherwise. +

    +
  • +
  • +

    + NAME - The value of this + keyword is the name that udev will assign to this + interface. +

    +
  • +
+
+

+ The value of NAME is the + important part. Make sure you know which name has been + assigned to each of your network cards before proceeding, + and be sure to use that NAME + value when creating your network configuration files. +

+

+ Even if the custom udev rule file is created, udev may + still assign one or more alternative names for a NIC based + on physical characteristics. If a custom udev rule would + rename some NIC using a name already assigned as an + alternative name of another NIC, this udev rule will fail. + If this issue happens, you may create the /etc/udev/network/99-default.link + configuration file with an empty alternative assignment + policy, overriding the default configuration file + /usr/lib/udev/network/99-default.link: +

+
sed -e '/^AlternativeNamesPolicy/s/=.*$/=/'  \
+       /usr/lib/udev/network/99-default.link \
+     > /etc/udev/network/99-default.link
+
+
+
+

+ 9.4.2. CD-ROM Symlinks +

+

+ Some software that you may want to install later (e.g., + various media players) expects the /dev/cdrom and /dev/dvd symlinks to exist, and to point to + a CD-ROM or DVD-ROM device. Also, it may be convenient to put + references to those symlinks into /etc/fstab. Udev comes with a script that + will generate rules files to create these symlinks for you, + depending on the capabilities of each device, but you need to + decide which of two modes of operation you wish to have the + script use. +

+

+ First, the script can operate in “by-path” mode + (used by default for USB and FireWire devices), where the + rules it creates depend on the physical path to the CD or DVD + device. Second, it can operate in “by-id” mode + (default for IDE and SCSI devices), where the rules it + creates depend on identification strings stored on the CD or + DVD device itself. The path is determined by udev's + path_id script, + and the identification strings are read from the hardware by + its ata_id or + scsi_id + programs, depending on which type of device you have. +

+

+ There are advantages to each approach; the correct approach + depends on what kinds of device changes may happen. If you + expect the physical path to the device (that is, the ports + and/or slots that it plugs into) to change, for example + because you plan on moving the drive to a different IDE port + or a different USB connector, then you should use the + “by-id” + mode. On the other hand, if you expect the device's + identification to change, for example because it may die, and + you intend to replace it with a different device that plugs + into the same connectors, then you should use the + “by-path” mode. +

+

+ If either type of change is possible with your drive, then + choose a mode based on the type of change you expect to + happen more often. +

+
+

+ Important +

+

+ External devices (for example, a USB-connected CD drive) + should not use by-path persistence, because each time the + device is plugged into a new external port, its physical + path will change. All externally-connected devices will + have this problem if you write udev rules to recognize them + by their physical path; the problem is not limited to CD + and DVD drives. +

+
+

+ If you wish to see the values that the udev scripts will use, + then for the appropriate CD-ROM device, find the + corresponding directory under /sys (e.g., this can be /sys/block/hdd) and run a command similar + to the following: +

+
udevadm test /sys/block/hdd
+

+ Look at the lines containing the output of various *_id + programs. The “by-id” mode will use the ID_SERIAL + value if it exists and is not empty, otherwise it will use a + combination of ID_MODEL and ID_REVISION. The “by-path” mode will + use the ID_PATH value. +

+

+ If the default mode is not suitable for your situation, then + the following modification can be made to the /etc/udev/rules.d/83-cdrom-symlinks.rules + file, as follows (where mode is one of “by-id” or + “by-path”): +

+
sed -e 's/"write_cd_rules"/"write_cd_rules mode"/' \
+    -i /etc/udev/rules.d/83-cdrom-symlinks.rules
+

+ Note that it is not necessary to create the rules files or + symlinks at this time because you have bind-mounted the + host's /dev directory into the + LFS system and we assume the symlinks exist on the host. The + rules and symlinks will be created the first time you boot + your LFS system. +

+

+ However, if you have multiple CD-ROM devices, then the + symlinks generated at that time may point to different + devices than they point to on your host because devices are + not discovered in a predictable order. The assignments + created when you first boot the LFS system will be stable, so + this is only an issue if you need the symlinks on both + systems to point to the same device. If you need that, then + inspect (and possibly edit) the generated /etc/udev/rules.d/70-persistent-cd.rules + file after booting, to make sure the assigned symlinks match + your needs. +

+
+
+

+ 9.4.3. Dealing with Duplicate Devices +

+

+ As explained in Section 9.3, + “Overview of Device and Module Handling,” the order in + which devices with the same function appear in /dev is essentially random. E.g., if you + have a USB web camera and a TV tuner, sometimes /dev/video0 refers to the camera and + /dev/video1 refers to the + tuner, and sometimes after a reboot the order changes. For + all classes of hardware except sound cards and network cards, + this is fixable by creating udev rules to create persistent + symlinks. The case of network cards is covered separately in + Section 9.5, + “General Network Configuration,” and sound card + configuration can be found in + BLFS. +

+

+ For each of your devices that is likely to have this problem + (even if the problem doesn't exist in your current Linux + distribution), find the corresponding directory under + /sys/class or /sys/block. For video devices, this may be + /sys/class/video4linux/videoX. Figure out the + attributes that identify the device uniquely (usually, vendor + and product IDs and/or serial numbers work): +

+
udevadm info -a -p /sys/class/video4linux/video0
+

+ Then write rules that create the symlinks, e.g.: +

+
cat > /etc/udev/rules.d/83-duplicate_devs.rules << "EOF"
+
+# Persistent symlinks for webcam and tuner
+KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", SYMLINK+="webcam"
+KERNEL=="video*", ATTRS{device}=="0x036f",  ATTRS{vendor}=="0x109e", SYMLINK+="tvtuner"
+
+EOF
+

+ The result is that /dev/video0 + and /dev/video1 devices still + refer randomly to the tuner and the web camera (and thus + should never be used directly), but there are symlinks + /dev/tvtuner and /dev/webcam that always point to the + correct device. +

+
+
+
+
+
+

+ 9.5. General Network + Configuration +

+
+
+
+
+
+

+ 9.5.1. Creating Network Interface Configuration Files +

+

+ The files in /etc/sysconfig/ + usually determine which interfaces are brought up and down by + the network script. This directory should contain a file for + each interface to be configured, such as ifconfig.xyz, where “xyz” describes the + network card. The interface name (e.g. eth0) is usually + appropriate. Each file contains the attributes of one + interface, such as its IP address(es), subnet masks, and so + forth. The stem of the filename must be ifconfig. +

+
+

+ Note +

+

+ If the procedure in the previous section was not used, udev + will assign network card interface names based on system + physical characteristics such as enp2s1. If you are not + sure what your interface name is, you can always run + ip link or + ls + /sys/class/net after you have booted your + system. +

+

+ The interface names depend on the implementation and + configuration of the udev daemon running on the system. The + udev daemon for LFS (installed in Section 8.76, + “Udev from Systemd-257.8”) will not run until the LFS + system is booted. So the interface names in the LFS system + cannot always be determined by running those commands on + the host distro, even in the + chroot environment. +

+
+

+ The following command creates a sample file for the + eth0 device with a + static IP address: +

+
cd /etc/sysconfig/
+cat > ifconfig.eth0 << "EOF"
+ONBOOT=yes
+IFACE=eth0
+SERVICE=ipv4-static
+IP=192.168.1.2
+GATEWAY=192.168.1.1
+PREFIX=24
+BROADCAST=192.168.1.255
+EOF
+

+ The values in italics must be changed in each file, to set + the interfaces up correctly. +

+

+ If the ONBOOT variable is set to + yes the System V network script + will bring up the Network Interface Card (NIC) during the + system boot process. If set to anything besides yes, the NIC will be ignored by the network + script and will not be started automatically. Interfaces can + be manually started or stopped with the ifup and ifdown commands. +

+

+ The IFACE variable defines the + interface name, for example, eth0. It is required for all + network device configuration files. The filename extension + must match this value. +

+

+ The SERVICE variable defines the + method used for obtaining the IP address. The LFS-Bootscripts + package has a modular IP assignment format, and creating + additional files in the /lib/services/ directory allows other IP + assignment methods. This is commonly used for Dynamic Host + Configuration Protocol (DHCP), which is addressed in the BLFS + book. +

+

+ The GATEWAY variable should + contain the default gateway IP address, if one is present. If + not, then comment out the variable entirely. +

+

+ The PREFIX variable specifies the + number of bits used in the subnet. Each segment of an IP + address is 8 bits. If the subnet's netmask is 255.255.255.0, + then it is using the first three segments (24 bits) to + specify the network number. If the netmask is + 255.255.255.240, the subnet is using the first 28 bits. + Prefixes longer than 24 bits are commonly used by DSL and + cable-based Internet Service Providers (ISPs). In this + example (PREFIX=24), the netmask is 255.255.255.0. Adjust the + PREFIX variable according to your + specific subnet. If omitted, the PREFIX defaults to 24. +

+

+ For more information see the ifup man page. +

+
+
+

+ 9.5.2. Creating + the /etc/resolv.conf File +

+

+ The system will need some means of obtaining Domain Name + Service (DNS) name resolution to resolve Internet domain + names to IP addresses, and vice versa. This is best achieved + by placing the IP address of the DNS server, available from + the ISP or network administrator, into /etc/resolv.conf. Create the file by + running the following: +

+
cat > /etc/resolv.conf << "EOF"
+# Begin /etc/resolv.conf
+
+domain <Your Domain Name>
+nameserver <IP address of your primary nameserver>
+nameserver <IP address of your secondary nameserver>
+
+# End /etc/resolv.conf
+EOF
+

+ The domain statement can be + omitted or replaced with a search statement. See the man page for + resolv.conf for more details. +

+

+ Replace <IP address of the + nameserver> with the IP address of the DNS + most appropriate for the setup. There will often be more than + one entry (requirements demand secondary servers for fallback + capability). If you only need or want one DNS server, remove + the second nameserver + line from the file. The IP address may also be a router on + the local network. +

+
+

+ Note +

+

+ The Google Public IPv4 DNS addresses are 8.8.8.8 and + 8.8.4.4. +

+
+
+
+

+ 9.5.3. Configuring the System + Hostname +

+

+ During the boot process, the file /etc/hostname is used for establishing the + system's hostname. +

+

+ Create the /etc/hostname file + and enter a hostname by running: +

+
echo "<lfs>" > /etc/hostname
+

+ <lfs> needs + to be replaced with the name given to the computer. Do not + enter the Fully Qualified Domain Name (FQDN) here. That + information goes in the /etc/hosts file. +

+
+
+

+ 9.5.4. + Customizing the /etc/hosts File +

+

+ Decide on a fully-qualified domain name (FQDN), and possible + aliases for use in the /etc/hosts file. If using static IP + addresses, you'll also need to decide on an IP address. The + syntax for a hosts file entry is: +

+
IP_address myhost.example.org aliases
+

+ Unless the computer is to be visible to the Internet (i.e., + there is a registered domain and a valid block of assigned IP + addresses—most users do not have this), make sure that the IP + address is in the private network IP address range. Valid + ranges are: +

+
Private Network Address Range      Normal Prefix
+10.0.0.1 - 10.255.255.254           8
+172.x.0.1 - 172.x.255.254           16
+192.168.y.1 - 192.168.y.254         24
+

+ x can be any number in the range 16-31. y can be any number + in the range 0-255. +

+

+ A valid private IP address could be 192.168.1.2. +

+

+ If the computer is to be visible to the Internet, a valid + FQDN can be the domain name itself, or a string resulted by + concatenating a prefix (often the hostname) and the domain + name with a “.” character. And, you need to contact + the domain provider to resolve the FQDN to your public IP + address. +

+

+ Even if the computer is not visible to the Internet, a FQDN + is still needed for certain programs, such as MTAs, to + operate properly. A special FQDN, localhost.localdomain, can be used for this + purpose. +

+

+ Create the /etc/hosts file by + running: +

+
cat > /etc/hosts << "EOF"
+# Begin /etc/hosts
+
+127.0.0.1 localhost.localdomain localhost
+127.0.1.1 <FQDN> <HOSTNAME>
+<192.168.1.2> <FQDN> <HOSTNAME> [alias1] [alias2 ...]
+::1       localhost ip6-localhost ip6-loopback
+ff02::1   ip6-allnodes
+ff02::2   ip6-allrouters
+
+# End /etc/hosts
+EOF
+

+ The <192.168.1.2>, + <FQDN>, and + <HOSTNAME> + values need to be changed for specific uses or requirements + (if assigned an IP address by a network/system administrator + and the machine will be connected to an existing network). + The optional alias name(s) can be omitted. +

+
+
+
+
+
+

+ 9.6. System V Bootscript Usage + and Configuration +

+
+
+
+
+
+

+ 9.6.1. How Do the System V Bootscripts Work? +

+

+ This version of LFS uses a special booting facility named + SysVinit, based on a series of run + levels. The boot procedure can be quite different + from one system to another; the fact that things worked one + way in a particular Linux distribution does not guarantee + they will work the same way in LFS. LFS has its own way of + doing things, but it does respect generally accepted + standards. +

+

+ There is an alternative boot procedure called systemd. We will not + discuss that boot process any further here. For a detailed + description visit + https://www.linux.com/training-tutorials/understanding-and-using-systemd/. +

+

+ SysVinit (which will be referred to as “init” from now on) + uses a run levels scheme. There are seven run levels, + numbered 0 to 6. (Actually, there are more run levels, but + the others are for special cases and are generally not used. + See init(8) for more + details.) Each one of the seven corresponds to actions the + computer is supposed to perform when it starts up or shuts + down. The default run level is 3. Here are the descriptions + of the different run levels as they are implemented in LFS: +

+
+

+ 0: halt the computer
+ 1: single-user mode
+ 2: reserved for customization, otherwise the same as 3
+ + 3: multi-user mode with networking
+ + 4: reserved for customization, otherwise the same as 3
+ + 5: same as 4, it is usually used for GUI login (like GNOME's gdm or LXDE's lxdm)
+ + 6: reboot the computer +

+
+
+

+ Note +

+

+ Classically, run level 2 above was defined as “multi-user mode without + networking,” but this was only the case many + years ago when multiple users could connect to a system via + serial ports. In today's environment it makes no sense, and + we now say it is “reserved.” +

+
+
+
+

+ 9.6.2. + Configuring SysVinit +

+

+ During kernel initialization, the first program that is run + (if not overridden on the command line) is init. This program reads + the initialization file /etc/inittab. Create this file with: +

+
cat > /etc/inittab << "EOF"
+# Begin /etc/inittab
+
+id:3:initdefault:
+
+si::sysinit:/etc/rc.d/init.d/rc S
+
+l0:0:wait:/etc/rc.d/init.d/rc 0
+l1:S1:wait:/etc/rc.d/init.d/rc 1
+l2:2:wait:/etc/rc.d/init.d/rc 2
+l3:3:wait:/etc/rc.d/init.d/rc 3
+l4:4:wait:/etc/rc.d/init.d/rc 4
+l5:5:wait:/etc/rc.d/init.d/rc 5
+l6:6:wait:/etc/rc.d/init.d/rc 6
+
+ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+
+su:S06:once:/sbin/sulogin
+s1:1:respawn:/sbin/sulogin
+
+1:2345:respawn:/sbin/agetty --noclear tty1 9600
+2:2345:respawn:/sbin/agetty tty2 9600
+3:2345:respawn:/sbin/agetty tty3 9600
+4:2345:respawn:/sbin/agetty tty4 9600
+5:2345:respawn:/sbin/agetty tty5 9600
+6:2345:respawn:/sbin/agetty tty6 9600
+
+# End /etc/inittab
+EOF
+

+ An explanation of this initialization file is in the man page + for inittab. In LFS, + the key command is rc. The initialization file + above instructs rc to run all the scripts + starting with an S in the /etc/rc.d/rcS.d directory followed by all + the scripts starting with an S in the /etc/rc.d/rc?.d directory where the + question mark is specified by the initdefault value. +

+

+ As a convenience, the rc script reads a library + of functions in /lib/lsb/init-functions. This library also + reads an optional configuration file, /etc/sysconfig/rc.site. Any of the system + configuration parameters described in subsequent sections can + be placed in this file, allowing consolidation of all system + parameters in this one file. +

+

+ As a debugging convenience, the functions script also logs + all output to /run/var/bootlog. + Since the /run directory is a + tmpfs, this file is not persistent across boots; however, it + is appended to the more permanent file /var/log/boot.log at the end of the boot + process. +

+
+
+
+
+

+ 9.6.2.1. Changing Run Levels +

+
+
+
+

+ Changing run levels is done with init <runlevel>, + where <runlevel> is the + target run level. For example, to reboot the computer, a + user could issue the init + 6 command, which is an alias for the + reboot + command. Likewise, init + 0 is an alias for the halt command. +

+

+ There are a number of directories under /etc/rc.d that look like rc?.d (where ? is the number of the run + level) and rcS.d, all + containing a number of symbolic links. Some links begin + with a K; the others + begin with an S, and + all of them have two numbers following the initial letter. + The K means to stop (kill) a service and the S means to + start a service. The numbers determine the order in which + the scripts are run, from 00 to 99—the smaller the number, + the sooner the script runs. When init switches to another + run level, the appropriate services are either started or + stopped, depending on the run level chosen. +

+

+ The real scripts are in /etc/rc.d/init.d. They do the actual + work, and the symlinks all point to them. K links and S + links point to the same script in /etc/rc.d/init.d. This is because the + scripts can be called with different parameters like + start, stop, restart, reload, and status. When a K link is + encountered, the appropriate script is run with the + stop argument. When + an S link is encountered, the appropriate script is run + with the start + argument. +

+

+ These are descriptions of what the arguments make the + scripts do: +

+
+
+
+ start +
+
+

+ The service is started. +

+
+
+ stop +
+
+

+ The service is stopped. +

+
+
+ restart +
+
+

+ The service is stopped and then started again. +

+
+
+ reload +
+
+

+ The configuration of the service is updated. This is + used after the configuration file of a service was + modified, when the service does not need to be + restarted. +

+
+
+ status +
+
+

+ Tells if the service is running and with which PIDs. +

+
+
+
+

+ Feel free to modify the way the boot process works (after + all, it is your own LFS system). The files given here are + an example of how it can be done. +

+
+
+
+

+ 9.6.3. Udev Bootscripts +

+

+ The /etc/rc.d/init.d/udev + initscript starts udevd, triggers any + "coldplug" devices that have already been created by the + kernel, and waits for any rules to complete. The script also + unsets the uevent handler from the default of /sbin/hotplug . This is done because the + kernel no longer needs to call an external binary. Instead, + udevd will + listen on a netlink socket for uevents that the kernel + raises. +

+

+ The /etc/rc.d/init.d/udev_retry + script takes care of re-triggering events for subsystems + whose rules may rely on file systems that are not mounted + until the mountfs script is run (in + particular, /usr and + /var may cause this). This + script runs after the mountfs script, so those + rules (if re-triggered) should succeed the second time + around. It is configured by the /etc/sysconfig/udev_retry file; any words + in this file other than comments are considered subsystem + names to trigger at retry time. To find the subsystem of a + device, use udevadm info + --attribute-walk <device> where + <device> is an absolute path in /dev or /sys, such as + /dev/sr0, or /sys/class/rtc. +

+

+ For information on kernel module loading and udev, see + Section 9.3.2.3, “Module + Loading.” +

+
+
+

+ 9.6.4. + Configuring the System Clock +

+

+ The setclock + script reads the time from the hardware clock, also known as + the BIOS or Complementary Metal Oxide Semiconductor (CMOS) + clock. If the hardware clock is set to UTC, this script will + convert the hardware clock's time to the local time using the + /etc/localtime file (which + tells the hwclock program which time + zone to use). There is no way to detect whether or not the + hardware clock is set to UTC, so this must be configured + manually. +

+

+ The setclock + program is run via udev when + the kernel detects the hardware capability upon boot. It can + also be run manually with the stop parameter to store the + system time to the CMOS clock. +

+

+ If you cannot remember whether or not the hardware clock is + set to UTC, find out by running the hwclock --localtime --show + command. This will display what the current time is according + to the hardware clock. If this time matches whatever your + watch says, then the hardware clock is set to local time. If + the output from hwclock is not local time, + chances are it is set to UTC time. Verify this by adding or + subtracting the proper number of hours for your time zone to + the time shown by hwclock. For example, if + you are currently in the MST time zone, which is also known + as GMT -0700, add seven hours to the local time. +

+

+ Change the value of the UTC + variable below to a value of 0 (zero) if the hardware clock + is NOT set to UTC + time. +

+

+ Create a new file /etc/sysconfig/clock by running the + following: +

+
cat > /etc/sysconfig/clock << "EOF"
+# Begin /etc/sysconfig/clock
+
+UTC=1
+
+# Set this to any options you might need to give to hwclock,
+# such as machine hardware clock type for Alphas.
+CLOCKPARAMS=
+
+# End /etc/sysconfig/clock
+EOF
+

+ A good hint explaining how to deal with time on LFS is + available at + https://www.linuxfromscratch.org/hints/downloads/files/time.txt. + It explains issues such as time zones, UTC, and the + TZ environment variable. +

+
+

+ Note +

+

+ The CLOCKPARAMS and UTC parameters may also be set in the + /etc/sysconfig/rc.site file. +

+
+
+
+

+ 9.6.5. + Configuring the Linux Console +

+

+ This section discusses how to configure the console bootscript that + sets up the keyboard map, console font, and console kernel + log level. If non-ASCII characters (e.g., the copyright sign, + the British pound sign, and the Euro symbol) will not be used + and the keyboard is a U.S. one, much of this section can be + skipped. Without the configuration file, (or equivalent + settings in rc.site), the + console + bootscript will do nothing. +

+

+ The console + script reads the /etc/sysconfig/console file for + configuration information. Decide which keymap and screen + font will be used. Various language-specific HOWTOs can also + help with this; see https://tldp.org/HOWTO/HOWTO-INDEX/other-lang.html. + If still in doubt, look in the /usr/share/keymaps and /usr/share/consolefonts directories for + valid keymaps and screen fonts. Read the loadkeys(1) + and setfont(8) + manual pages to determine the correct arguments for these + programs. +

+

+ The /etc/sysconfig/console file + should contain lines of the form: VARIABLE=value. The following variables are + recognized: +

+
+
+
+ LOGLEVEL +
+
+

+ This variable specifies the log level for kernel + messages sent to the console as set by dmesg -n. Valid + levels are from 1 (no + messages) to 8. The + default level is 7, which + is quite verbose. +

+
+
+ KEYMAP +
+
+

+ This variable specifies the arguments for the + loadkeys + program, typically, the name of the keymap to load, + e.g., it. If this variable + is not set, the bootscript will not run the + loadkeys + program, and the default kernel keymap will be used. + Note that a few keymaps have multiple versions with the + same name (cz and its variants in qwerty/ and qwertz/, + es in olpc/ and qwerty/, and trf in fgGIod/ and + qwerty/). In these cases the parent directory should + also be specified (e.g. qwerty/es) to ensure the proper + keymap is loaded. +

+
+
+ KEYMAP_CORRECTIONS +
+
+

+ This (rarely used) variable specifies the arguments for + the second call to the loadkeys program. + This is useful if the stock keymap is not completely + satisfactory and a small adjustment has to be made. + E.g., to include the Euro sign into a keymap that + normally doesn't have it, set this variable to + euro2. +

+
+
+ FONT +
+
+

+ This variable specifies the arguments for the + setfont + program. Typically, this includes the font name, + -m, and the name of the + application character map to load. E.g., in order to + load the “lat1-16” font together with the + “8859-1” application character map + (appropriate in the USA), set this variable to + lat1-16 -m 8859-1. In + UTF-8 mode, the kernel uses the application character + map to convert 8-bit key codes to UTF-8. Therefore the + argument of the "-m" parameter should be set to the + encoding of the composed key codes in the keymap. +

+
+
+ UNICODE +
+
+

+ Set this variable to 1, + yes, or true in order to put the console into + UTF-8 mode. This is useful in UTF-8 based locales and + harmful otherwise. +

+
+
+ LEGACY_CHARSET +
+
+

+ For many keyboard layouts, there is no stock Unicode + keymap in the Kbd package. The console bootscript + will convert an available keymap to UTF-8 on the fly if + this variable is set to the encoding of the available + non-UTF-8 keymap. +

+
+
+
+

+ Some examples: +

+
+
    +
  • +

    + We'll use C.UTF-8 as the + locale for interactive sessions in the Linux console in + Section 9.7, + “Configuring the System Locale,” so we should set + UNICODE to 1. And the console fonts shipped by + the Kbd package + containing the glyphs for all characters from the + program messages in the C.UTF-8 locale are LatArCyrHeb*.psfu.gz, LatGrkCyr*.psfu.gz, Lat2-Terminus16.psfu.gz, and + pancyrillic.f16.psfu.gz + in /usr/share/consolefonts (the other + shipped console fonts lack glyphs of some characters + like the Unicode left/right quotation marks and the + Unicode English dash). So set one of them, for example + Lat2-Terminus16.psfu.gz + as the default console font: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +UNICODE="1"
    +FONT="Lat2-Terminus16"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + For a non-Unicode setup, only the KEYMAP and FONT + variables are generally needed. E.g., for a Polish + setup, one would use: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +KEYMAP="pl2"
    +FONT="lat2a-16 -m 8859-2"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + As mentioned above, it is sometimes necessary to adjust + a stock keymap slightly. The following example adds the + Euro symbol to the German keymap: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +KEYMAP="de-latin1"
    +KEYMAP_CORRECTIONS="euro2"
    +FONT="lat0-16 -m 8859-15"
    +UNICODE="1"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + The following is a Unicode-enabled example for + Bulgarian, where a stock UTF-8 keymap exists: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +UNICODE="1"
    +KEYMAP="bg_bds-utf8"
    +FONT="LatArCyrHeb-16"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + Due to the use of a 512-glyph LatArCyrHeb-16 font in + the previous example, bright colors are no longer + available on the Linux console unless a framebuffer is + used. If one wants to have bright colors without a + framebuffer and can live without characters not + belonging to his language, it is still possible to use + a language-specific 256-glyph font, as illustrated + below: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +UNICODE="1"
    +KEYMAP="bg_bds-utf8"
    +FONT="cyr-sun16"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + The following example illustrates keymap autoconversion + from ISO-8859-15 to UTF-8 and enabling dead keys in + Unicode mode: +

    +
    cat > /etc/sysconfig/console << "EOF"
    +# Begin /etc/sysconfig/console
    +
    +UNICODE="1"
    +KEYMAP="de-latin1"
    +KEYMAP_CORRECTIONS="euro2"
    +LEGACY_CHARSET="iso-8859-15"
    +FONT="LatArCyrHeb-16 -m 8859-15"
    +
    +# End /etc/sysconfig/console
    +EOF
    +
  • +
  • +

    + Some keymaps have dead keys (i.e., keys that don't + produce a character by themselves, but put an accent on + the character produced by the next key) or define + composition rules (such as: “press Ctrl+. A E to get + Æ” in the default keymap). Linux-6.16.1 + interprets dead keys and composition rules in the + keymap correctly only when the source characters to be + composed together are not multibyte. This deficiency + doesn't affect keymaps for European languages, because + there accents are added to unaccented ASCII characters, + or two ASCII characters are composed together. However, + in UTF-8 mode it is a problem; e.g., for the Greek + language, where one sometimes needs to put an accent on + the letter α. The solution is either to avoid the use + of UTF-8, or to install the X window system, which + doesn't have this limitation, in its input handling. +

    +
  • +
  • +

    + For Chinese, Japanese, Korean, and some other + languages, the Linux console cannot be configured to + display the needed characters. Users who need such + languages should install the X Window System, fonts + that cover the necessary character ranges, and the + proper input method (e.g., SCIM supports a wide variety + of languages). +

    +
  • +
+
+
+

+ Note +

+

+ The /etc/sysconfig/console + file only controls the Linux text console localization. It + has nothing to do with setting the proper keyboard layout + and terminal fonts in the X Window System, with ssh + sessions, or with a serial console. In such situations, + limitations mentioned in the last two list items above do + not apply. +

+
+
+
+

+ 9.6.6. Creating Files at Boot +

+

+ At times, it is desirable to create files at boot time. For + instance, the /tmp/.ICE-unix + directory is often needed. This can be done by creating an + entry in the /etc/sysconfig/createfiles configuration + script. The format of this file is embedded in the comments + of the default configuration file. +

+
+
+

+ 9.6.7. Configuring the Sysklogd + Script +

+

+ The sysklogd script invokes the + syslogd program + as a part of System V initialization. The -m 0 option turns off the + periodic timestamp mark that syslogd writes to the log + files every 20 minutes by default. If you want to turn on + this periodic timestamp mark, edit /etc/sysconfig/rc.site and define the + variable SYSKLOGD_PARMS to the desired value. For instance, + to remove all parameters, set the variable to a null value: +

+
SYSKLOGD_PARMS=
+

+ See man + syslogd for more options. +

+
+
+

+ 9.6.8. The + rc.site File +

+

+ The optional /etc/sysconfig/rc.site file contains + settings that are automatically set for each SystemV boot + script. It can alternatively set the values specified in the + hostname, console, and clock files in the /etc/sysconfig/ directory. If the + associated variables are present in both these separate files + and rc.site, the values in the + script-specific files take effect. +

+

+ rc.site also contains + parameters that can customize other aspects of the boot + process. Setting the IPROMPT variable will enable selective + running of bootscripts. Other options are described in the + file comments. The default version of the file is as follows: +

+
# rc.site
+# Optional parameters for boot scripts.
+
+# Distro Information
+# These values, if specified here, override the defaults
+#DISTRO="Linux From Scratch" # The distro name
+#DISTRO_CONTACT="lfs-dev@lists.linuxfromscratch.org" # Bug report address
+#DISTRO_MINI="LFS" # Short name used in filenames for distro config
+
+# Define custom colors used in messages printed to the screen
+
+# Please consult `man console_codes` for more information
+# under the "ECMA-48 Set Graphics Rendition" section
+#
+# Warning: when switching from a 8bit to a 9bit font,
+# the linux console will reinterpret the bold (1;) to
+# the top 256 glyphs of the 9bit font.  This does
+# not affect framebuffer consoles
+
+# These values, if specified here, override the defaults
+#BRACKET="\\033[1;34m" # Blue
+#FAILURE="\\033[1;31m" # Red
+#INFO="\\033[1;36m"    # Cyan
+#NORMAL="\\033[0;39m"  # Grey
+#SUCCESS="\\033[1;32m" # Green
+#WARNING="\\033[1;33m" # Yellow
+
+# Use a colored prefix
+# These values, if specified here, override the defaults
+#BMPREFIX="      "
+#SUCCESS_PREFIX="${SUCCESS}  *  ${NORMAL} "
+#FAILURE_PREFIX="${FAILURE}*****${NORMAL} "
+#WARNING_PREFIX="${WARNING} *** ${NORMAL} "
+
+# Manually set the right edge of message output (characters)
+# Useful when resetting console font during boot to override
+# automatic screen width detection
+#COLUMNS=120
+
+# Interactive startup
+#IPROMPT="yes" # Whether to display the interactive boot prompt
+#itime="3"    # The amount of time (in seconds) to display the prompt
+
+# The total length of the distro welcome string, without escape codes
+#wlen=$(echo "Welcome to ${DISTRO}" | wc -c )
+#welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}"
+
+# The total length of the interactive string, without escape codes
+#ilen=$(echo "Press 'I' to enter interactive startup" | wc -c )
+#i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup"
+
+# Set scripts to skip the file system check on reboot
+#FASTBOOT=yes
+
+# Skip reading from the console
+#HEADLESS=yes
+
+# Write out fsck progress if yes
+#VERBOSE_FSCK=no
+
+# Speed up boot without waiting for settle in udev
+#OMIT_UDEV_SETTLE=y
+
+# Speed up boot without waiting for settle in udev_retry
+#OMIT_UDEV_RETRY_SETTLE=yes
+
+# Skip cleaning /tmp if yes
+#SKIPTMPCLEAN=no
+
+# For setclock
+#UTC=1
+#CLOCKPARAMS=
+
+# For consolelog (Note that the default, 7=debug, is noisy)
+#LOGLEVEL=7
+
+# For network
+#HOSTNAME=mylfs
+
+# Delay between TERM and KILL signals at shutdown
+#KILLDELAY=3
+
+# Optional sysklogd parameters
+#SYSKLOGD_PARMS="-m 0"
+
+# Console parameters
+#UNICODE=1
+#KEYMAP="de-latin1"
+#KEYMAP_CORRECTIONS="euro2"
+#FONT="lat0-16 -m 8859-15"
+#LEGACY_CHARSET=
+
+
+
+
+
+
+

+ 9.6.8.1. Customizing + the Boot and Shutdown Scripts +

+
+
+
+

+ The LFS boot scripts boot and shut down a system in a + fairly efficient manner, but there are a few tweaks you can + make in the rc.site file to improve speed even more, and to + adjust messages according to your preferences. To do this, + adjust the settings in the /etc/sysconfig/rc.site file above. +

+
+
    +
  • +

    + During the boot script udev, there is a call to + udev + settle that requires some time to + complete. This time may or may not be required + depending on the devices in the system. If you only + have simple partitions and a single ethernet card, + the boot process will probably not need to wait for + this command. To skip it, set the variable + OMIT_UDEV_SETTLE=y. +

    +
  • +
  • +

    + The boot script udev_retry also runs udev settle by + default. This command is only needed if the + /var directory is + separately mounted, because the clock needs the + /var/lib/hwclock/adjtime file. + Other customizations may also need to wait for udev + to complete, but in many installations it is not + necessary. Skip the command by setting the variable + OMIT_UDEV_RETRY_SETTLE=y. +

    +
  • +
  • +

    + By default, the file system checks are silent. This + can appear to be a delay during the bootup process. + To turn on the fsck output, set + the variable VERBOSE_FSCK=y. +

    +
  • +
  • +

    + When rebooting, you may want to skip the filesystem + check, fsck, completely. + To do this, either create the file /fastboot or reboot the system with + the command /sbin/shutdown -f -r + now. On the other hand, you can force + all file systems to be checked by creating + /forcefsck or running + shutdown with the + -F parameter + instead of -f. +

    +

    + Setting the variable FASTBOOT=y will disable + fsck + during the boot process until it is removed. This is + not recommended on a permanent basis. +

    +
  • +
  • +

    + Normally, all files in the /tmp directory are deleted at boot + time. Depending on the number of files or directories + present, this can cause a noticeable delay in the + boot process. To skip removing these files set the + variable SKIPTMPCLEAN=y. +

    +
  • +
  • +

    + During shutdown, the init program sends + a TERM signal to each program it has started (e.g. + agetty), waits for a set time (default 3 seconds), + then sends each process a KILL signal and waits + again. This process is repeated in the sendsignals script + for any processes that are not shut down by their own + scripts. The delay for init can be set by + passing a parameter. For example to remove the delay + in init, pass the -t0 + parameter when shutting down or rebooting (e.g. + /sbin/shutdown -t0 -r + now). The delay for the sendsignals script + can be skipped by setting the parameter KILLDELAY=0. +

    +
  • +
+
+
+
+
+
+
+
+

+ 9.7. Configuring the System + Locale +

+
+
+
+
+

+ Some environment variables are necessary for native language + support. Setting them properly results in: +

+
+
    +
  • +

    + The output of programs being translated into your native + language +

    +
  • +
  • +

    + The correct classification of characters into letters, + digits and other classes. This is necessary for + bash to + properly accept non-ASCII characters in command lines in + non-English locales +

    +
  • +
  • +

    + The correct alphabetical sorting order for the country +

    +
  • +
  • +

    + The appropriate default paper size +

    +
  • +
  • +

    + The correct formatting of monetary, time, and date values +

    +
  • +
+
+

+ Replace <ll> + below with the two-letter code for your desired language (e.g., + en) and <CC> with the two-letter + code for the appropriate country (e.g., GB). <charmap> should be + replaced with the canonical charmap for your chosen locale. + Optional modifiers such as @euro + may also be present. +

+

+ The list of all locales supported by Glibc can be obtained by + running the following command: +

+
locale -a
+

+ Charmaps can have a number of aliases, e.g., ISO-8859-1 is also referred to as iso8859-1 and iso88591. Some applications cannot handle the + various synonyms correctly (e.g., require that UTF-8 is written as UTF-8, not utf8), + so it is the safest in most cases to choose the canonical name + for a particular locale. To determine the canonical name, run + the following command, where <locale name> is the + output given by locale + -a for your preferred locale (en_GB.iso88591 in our example). +

+
LC_ALL=<locale name> locale charmap
+

+ For the en_GB.iso88591 locale, the + above command will print: +

+
ISO-8859-1
+

+ This results in a final locale setting of en_GB.ISO-8859-1. It is important that the + locale found using the heuristic above is tested prior to it + being added to the Bash startup files: +

+
LC_ALL=<locale name> locale language
+LC_ALL=<locale name> locale charmap
+LC_ALL=<locale name> locale int_curr_symbol
+LC_ALL=<locale name> locale int_prefix
+

+ The above commands should print the language name, the + character encoding used by the locale, the local currency, and + the prefix to dial before the telephone number in order to get + into the country. If any of the commands above fail with a + message similar to the one shown below, this means that your + locale was either not installed in Chapter 8 or is not + supported by the default installation of Glibc. +

+
locale: Cannot set LC_* to default locale: No such file or directory
+

+ If this happens, you should either install the desired locale + using the localedef command, or + consider choosing a different locale. Further instructions + assume that there are no such error messages from Glibc. +

+

+ Other packages can also function incorrectly (but may not + necessarily display any error messages) if the locale name does + not meet their expectations. In those cases, investigating how + other Linux distributions support your locale might provide + some useful information. +

+

+ The shell program /bin/bash (here after + referred as “the + shell”) uses a collection of startup files to + help create the environment to run in. Each file has a specific + use and may affect login and interactive environments + differently. The files in the /etc directory provide global settings. If + equivalent files exist in the home directory, they may override + the global settings. +

+

+ An interactive login shell is started after a successful login, + using /bin/login, + by reading the /etc/passwd file. + An interactive non-login shell is started at the command-line + (e.g. [prompt]$/bin/bash). 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. +

+

+ Create the /etc/profile + once the proper locale settings have been + determined to set the desired locale, but set the + C.UTF-8 locale instead if running + in the Linux console (to prevent programs from outputting + characters that the Linux console is unable to render): +

+
cat > /etc/profile << "EOF"
+# Begin /etc/profile
+
+for i in $(locale); do
+  unset ${i%=*}
+done
+
+if [[ "$TERM" = linux ]]; then
+  export LANG=C.UTF-8
+else
+  export LANG=<ll>_<CC>.<charmap><@modifiers>
+fi
+
+# End /etc/profile
+EOF
+

+ The C (default) and en_US (the recommended one for United States + English users) locales are different. C uses the US-ASCII 7-bit character set, and + treats bytes with the high bit set as invalid characters. + That's why, e.g., the ls command substitutes them + with question marks in that locale. Also, an attempt to send + mail with such characters from Mutt or Pine results in + non-RFC-conforming messages being sent (the charset in the + outgoing mail is indicated as unknown 8-bit). It's suggested that you + use the C locale only if you are + certain that you will never need 8-bit characters. +

+
+
+
+
+

+ 9.8. Creating the /etc/inputrc + File +

+
+
+
+
+

+ The inputrc file is the + configuration file for the readline library, which provides + editing capabilities while the user is entering a line from the + terminal. It works by translating keyboard inputs into specific + actions. Readline is used by bash and most other shells as well + as many other applications. +

+

+ Most people do not need user-specific functionality so the + command below creates a global /etc/inputrc used by everyone who logs in. If + you later decide you need to override the defaults on a per + user basis, you can create a .inputrc file in the user's home directory + with the modified mappings. +

+

+ For more information on how to edit the inputrc file, see info bash under the + Readline Init File + section. info + readline is also a good source of information. +

+

+ Below is a generic global inputrc + along with comments to explain what the various options do. + Note that comments cannot be on the same line as commands. + Create the file using the following command: +

+
cat > /etc/inputrc << "EOF"
+# Begin /etc/inputrc
+# Modified by Chris Lynn <roryo@roryo.dynup.net>
+
+# Allow the command prompt to wrap to the next line
+set horizontal-scroll-mode Off
+
+# Enable 8-bit input
+set meta-flag On
+set input-meta On
+
+# Turns off 8th bit stripping
+set convert-meta Off
+
+# Keep the 8th bit for display
+set output-meta On
+
+# none, visible or audible
+set bell-style none
+
+# All of the following map the escape sequence of the value
+# contained in the 1st argument to the readline specific functions
+"\eOd": backward-word
+"\eOc": forward-word
+
+# for linux console
+"\e[1~": beginning-of-line
+"\e[4~": end-of-line
+"\e[5~": beginning-of-history
+"\e[6~": end-of-history
+"\e[3~": delete-char
+"\e[2~": quoted-insert
+
+# for xterm
+"\eOH": beginning-of-line
+"\eOF": end-of-line
+
+# for Konsole
+"\e[H": beginning-of-line
+"\e[F": end-of-line
+
+# End /etc/inputrc
+EOF
+
+
+
+
+

+ 9.9. Creating the /etc/shells + File +

+
+
+
+
+

+ The shells file contains a list + of login shells on the system. Applications use this file to + determine whether a shell is valid. For each shell a single + line should be present, consisting of the shell's path relative + to the root of the directory structure (/). +

+

+ For example, this file is consulted by chsh to determine whether an + unprivileged user may change the login shell for her own + account. If the command name is not listed, the user will be + denied the ability to change shells. +

+

+ It is a requirement for applications such as GDM which does not populate the face + browser if it can't find /etc/shells, or FTP daemons which + traditionally disallow access to users with shells not included + in this file. +

+
cat > /etc/shells << "EOF"
+# Begin /etc/shells
+
+/bin/sh
+/bin/bash
+
+# End /etc/shells
+EOF
+
+
+
+
+
+

+ Chapter 10. Making the LFS + System Bootable +

+
+
+
+
+
+
+
+

+ 10.1. Introduction +

+
+
+
+
+

+ It is time to make the LFS system bootable. This chapter + discusses creating the /etc/fstab + file, building a kernel for the new LFS system, and installing + the GRUB boot loader so that the LFS system can be selected for + booting at startup. +

+
+
+
+
+

+ 10.2. Creating the /etc/fstab + File +

+
+
+
+
+

+ The /etc/fstab file is used by + some programs to determine where file systems are to be mounted + by default, in which order, and which must be checked (for + integrity errors) prior to mounting. Create a new file systems + table like this: +

+
cat > /etc/fstab << "EOF"
+# Begin /etc/fstab
+
+# file system  mount-point    type     options             dump  fsck
+#                                                                order
+
+/dev/<xxx>     /              <fff>    defaults            1     1
+/dev/<yyy>     swap           swap     pri=1               0     0
+proc           /proc          proc     nosuid,noexec,nodev 0     0
+sysfs          /sys           sysfs    nosuid,noexec,nodev 0     0
+devpts         /dev/pts       devpts   gid=5,mode=620      0     0
+tmpfs          /run           tmpfs    defaults            0     0
+devtmpfs       /dev           devtmpfs mode=0755,nosuid    0     0
+tmpfs          /dev/shm       tmpfs    nosuid,nodev        0     0
+cgroup2        /sys/fs/cgroup cgroup2  nosuid,noexec,nodev 0     0
+
+# End /etc/fstab
+EOF
+

+ Replace <xxx>, + <yyy>, and + <fff> with the + values appropriate for the system, for example, sda2, sda5, and + ext4. For details on the six + fields in this file, see fstab(5). +

+

+ Filesystems with MS-DOS or Windows origin (i.e. vfat, ntfs, + smbfs, cifs, iso9660, udf) need a special option, utf8, in + order for non-ASCII characters in file names to be interpreted + properly. For non-UTF-8 locales, the value of iocharset should be set to be the same as the + character set of the locale, adjusted in such a way that the + kernel understands it. This works if the relevant character set + definition (found under File systems -> Native Language + Support when configuring the kernel) has been compiled into the + kernel or built as a module. However, if the character set of + the locale is UTF-8, the corresponding option iocharset=utf8 would make the file system case + sensitive. To fix this, use the special option utf8 instead of iocharset=utf8, for UTF-8 locales. The + “codepage” option is also needed for vfat + and smbfs filesystems. It should be set to the codepage number + used under MS-DOS in your country. For example, in order to + mount USB flash drives, a ru_RU.KOI8-R user would need the + following in the options portion of its mount line in + /etc/fstab: +

+
noauto,user,quiet,showexec,codepage=866,iocharset=koi8r
+

+ The corresponding options fragment for ru_RU.UTF-8 users is: +

+
noauto,user,quiet,showexec,codepage=866,utf8
+

+ Note that using iocharset is the + default for iso8859-1 (which keeps + the file system case insensitive), and the utf8 option tells the kernel to convert the + file names using UTF-8 so they can be interpreted in the UTF-8 + locale. +

+

+ It is also possible to specify default codepage and iocharset + values for some filesystems during kernel configuration. The + relevant parameters are named “Default NLS Option” (CONFIG_NLS_DEFAULT), “Default Remote NLS + Option” (CONFIG_SMB_NLS_DEFAULT), “Default codepage for + FAT” (CONFIG_FAT_DEFAULT_CODEPAGE), and “Default iocharset for + FAT” (CONFIG_FAT_DEFAULT_IOCHARSET). There is no way + to specify these settings for the ntfs filesystem at kernel + compilation time. +

+
+
+
+
+

+ 10.3. Linux-6.16.1 +

+
+
+
+
+
+

+ The Linux package contains the Linux kernel. +

+
+
+
+ Approximate build time: + 0.4 - 32 SBU (typically about 2.5 + SBU) +
+
+ Required disk space: + 1.7 - 14 GB (typically about 2.3 + GB) +
+
+
+
+
+

+ 10.3.1. Installation of the kernel +

+

+ Building the kernel involves a few steps—configuration, + compilation, and installation. Read the README file in the kernel source tree for + alternative methods to the way this book configures the + kernel. +

+
+

+ Important +

+

+ Building the linux kernel for the first time is one of the + most challenging tasks in LFS. Getting it right depends on + the specific hardware for the target system and your + specific needs. There are almost 12,000 configuration items + that are available for the kernel although only about a + third of them are needed for most computers. The LFS + editors recommend that users not familiar with this process + follow the procedures below fairly closely. The objective + is to get an initial system to a point where you can log in + at the command line when you reboot later in Section 11.3, + “Rebooting the System.” At this point optimization and + customization is not a goal. +

+

+ For general information on kernel configuration see + + https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt. + Additional information about configuring and building the + kernel can be found at https://anduin.linuxfromscratch.org/LFS/kernel-nutshell/. + These references are a bit dated, but still give a + reasonable overview of the process. +

+

+ If all else fails, you can ask for help on the lfs-support + mailing list. Note that subscribing is required in order + for the list to avoid spam. +

+
+

+ Prepare for compilation by running the following command: +

+
make mrproper
+

+ This ensures that the kernel tree is absolutely clean. The + kernel team recommends that this command be issued prior to + each kernel compilation. Do not rely on the source tree being + clean after un-tarring. +

+

+ There are several ways to configure the kernel options. + Usually, this is done through a menu-driven interface, for + example: +

+
make menuconfig
+
+

+ The meaning of optional make environment + variables: +

+
+
+ LANG=<host_LANG_value> + LC_ALL= +
+
+

+ This establishes the locale setting to the one used on + the host. This may be needed for a proper menuconfig + ncurses interface line drawing on a UTF-8 linux text + console. +

+

+ If used, be sure to replace <host_LANG_value> + by the value of the $LANG + variable from your host. You can alternatively use + instead the host's value of $LC_ALL or $LC_CTYPE. +

+
+
+ make + menuconfig +
+
+

+ This launches an ncurses menu-driven interface. For + other (graphical) interfaces, type make help. +

+
+
+
+
+

+ Note +

+

+ A good starting place for setting up the kernel + configuration is to run make + defconfig. This will set the base + configuration to a good state that takes your current + system architecture into account. +

+

+ Be sure to enable/disable/set the following features or the + system might not work correctly or boot at all: +

+
General setup --->
+  [ ] Compile the kernel with warnings as errors                        [WERROR]
+  CPU/Task time and stats accounting --->
+    [*] Pressure stall information tracking                                [PSI]
+    [ ]   Require boot parameter to enable pressure stall information tracking
+                                                     ...  [PSI_DEFAULT_DISABLED]
+  < > Enable kernel headers through /sys/kernel/kheaders.tar.xz      [IKHEADERS]
+  [*] Control Group support --->                                       [CGROUPS]
+    [*] Memory controller                                                [MEMCG]
+  [ ] Configure standard kernel features (expert users) --->            [EXPERT]
+
+Processor type and features --->
+  [*] Build a relocatable kernel                                   [RELOCATABLE]
+  [*]   Randomize the address of the kernel image (KASLR)       [RANDOMIZE_BASE]
+
+General architecture-dependent options --->
+  [*] Stack Protector buffer overflow detection                 [STACKPROTECTOR]
+  [*]   Strong Stack Protector                           [STACKPROTECTOR_STRONG]
+
+Device Drivers --->
+  Generic Driver Options --->
+    [ ] Support for uevent helper                                [UEVENT_HELPER]
+    [*] Maintain a devtmpfs filesystem to mount at /dev               [DEVTMPFS]
+    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
+                                                           ...  [DEVTMPFS_MOUNT]
+  Firmware Drivers --->
+    [*] Mark VGA/VBE/EFI FB as generic system framebuffer       [SYSFB_SIMPLEFB]
+  Graphics support --->
+    <*>    Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
+                                                                      ...  [DRM]
+    [*]    Display a user-friendly message when a kernel panic occurs
+                                                                ...  [DRM_PANIC]
+    (kmsg)   Panic screen formatter                           [DRM_PANIC_SCREEN]
+    Supported DRM clients --->
+      [*] Enable legacy fbdev support for your modesetting driver
+                                                      ...  [DRM_FBDEV_EMULATION]
+    Drivers for system framebuffers --->
+      <*> Simple framebuffer driver                              [DRM_SIMPLEDRM]
+    Console display driver support --->
+      [*] Framebuffer Console support                      [FRAMEBUFFER_CONSOLE]
+

+ Enable some additional features if you are building a + 64-bit system. If you are using menuconfig, enable them in + the order of CONFIG_PCI_MSI first, then + CONFIG_IRQ_REMAP, + at last CONFIG_X86_X2APIC because an + option only shows up after its dependencies are selected. +

+
Processor type and features --->
+  [*] x2APIC interrupt controller architecture support              [X86_X2APIC]
+
+Device Drivers --->
+  [*] PCI support --->                                                     [PCI]
+    [*] Message Signaled Interrupts (MSI and MSI-X)                    [PCI_MSI]
+  [*] IOMMU Hardware Support --->                                [IOMMU_SUPPORT]
+    [*] Support for Interrupt Remapping                              [IRQ_REMAP]
+

+ If the partition for the LFS system is in a NVME SSD (i. e. + the device node for the partition is /dev/nvme* instead of /dev/sd*), enable NVME support or the LFS + system won't boot: +

+
Device Drivers --->
+  NVME Support --->
+    <*> NVM Express block device                                  [BLK_DEV_NVME]
+
+

+ There are several other options that may be desired depending + on the requirements for the system. For a list of options + needed for BLFS packages, see the + BLFS Index of Kernel Settings. +

+
+

+ Note +

+

+ If your host hardware is using UEFI and you wish to boot + the LFS system with it, you should adjust some kernel + configuration following + the BLFS page even if you'll + use the UEFI bootloader from the host + distro. +

+
+
+

+ The rationale for the above configuration + items: +

+
+
+ Randomize + the address of the kernel image + (KASLR) +
+
+

+ Enable ASLR for kernel image, to mitigate some attacks + based on fixed addresses of sensitive data or code in + the kernel. +

+
+
+ Compile + the kernel with warnings as errors +
+
+

+ This may cause building failure if the compiler and/or + configuration are different from those of the kernel + developers. +

+
+
+ Enable + kernel headers through + /sys/kernel/kheaders.tar.xz +
+
+

+ This will require cpio building the + kernel. cpio is not installed + by LFS. +

+
+
+ Configure + standard kernel features (expert + users) +
+
+

+ This will make some options show up in the + configuration interface but changing those options may + be dangerous. Do not use this unless you know what you + are doing. +

+
+
+ Strong + Stack Protector +
+
+

+ Enable SSP for the kernel. We've enabled it for the + entire userspace with --enable-default-ssp + configuring GCC, but the kernel does not use GCC + default setting for SSP. We enable it explicitly here. +

+
+
+ Support + for uevent helper +
+
+

+ Having this option set may interfere with device + management when using Udev. +

+
+
+ Maintain a + devtmpfs +
+
+

+ This will create automated device nodes which are + populated by the kernel, even without Udev running. + Udev then runs on top of this, managing permissions and + adding symlinks. This configuration item is required + for all users of Udev. +

+
+
+ Automount + devtmpfs at /dev +
+
+

+ This will mount the kernel view of the devices on /dev + upon switching to root filesystem just before starting + init. +

+
+
+ Display a + user-friendly message when a kernel panic + occurs +
+
+

+ This will make the kernel correctly display the message + in case a kernel panic happens and a running DRM driver + supports to do so. Without this, it would be more + difficult to diagnose a panic: if no DRM driver is + running, we'd be on the VGA console which can only hold + 24 lines and the relevant kernel message is often + flushed away; if a DRM driver is running, the display + is often completely messed up on panic. As of + Linux-6.12, none of the dedicated drivers for + mainstream GPU models really supports this, but it's + supported by the “Simple framebuffer driver” which + runs on the VESA (or EFI) framebuffer before the + dedicated GPU driver is loaded. If the dedicated GPU + driver is built as a module (instead of a part of the + kernel image) and no initramfs is used, this + functionality will work just fine before the root file + system is mounted and it's already enough for providing + information about most LFS configuration errors causing + a panic (for example, an incorrect root= setting in + Section 10.4, + “Using GRUB to Set Up the Boot Process”). +

+
+
+ Panic + screen formatter +
+
+

+ Set this kmsg to make sure + the last kernel messages lines are displayed when a + kernel panic happens. The default, user, would make the kernel show only + a “user + friendly” panic message which is not + helpful on diagnostic. The third choice, qr_code, would make the kernel to + compress the last kernel message lines into a QR code + and display it. The QR code can hold more message lines + than plain text and it can be decoded with an external + device (like a smart phone). But it requires a Rust + compiler that LFS does not provide. +

+
+
+ Mark + VGA/VBE/EFI FB as generic system framebuffer + and Simple framebuffer + driver +
+
+

+ These allow to use the VESA framebuffer (or the EFI + framebuffer if booting the LFS system via UEFI) as a + DRM device. The VESA framebuffer will be set up by GRUB + (or the EFI framebuffer will be set up by the UEFI + firmware), so the DRM panic handler can function before + the GPU-specific DRM driver is loaded. +

+
+
+ Enable + legacy fbdev support for your modesetting + driver and Framebuffer Console + support +
+
+

+ These are needed to display the Linux console on a GPU + driven by a DRI (Direct Rendering Infrastructure) + driver. As CONFIG_DRM + (Direct Rendering Manager) is enabled, we should enable + these two options as well or we'll see a blank screen + once the DRI driver is loaded. +

+
+
+ Support + x2apic +
+
+

+ Support running the interrupt controller of 64-bit x86 + processors in x2APIC mode. x2APIC may be enabled by + firmware on 64-bit x86 systems, and a kernel without + this option enabled will panic on boot if x2APIC is + enabled by firmware. This option has no effect, but + also does no harm if x2APIC is disabled by the + firmware. +

+
+
+
+

+ Alternatively, make + oldconfig may be more appropriate in some + situations. See the README file + for more information. +

+

+ If desired, skip kernel configuration by copying the kernel + config file, .config, from the + host system (assuming it is available) to the unpacked + linux-6.16.1 directory. + However, we do not recommend this option. It is often better + to explore all the configuration menus and create the kernel + configuration from scratch. +

+

+ Compile the kernel image and modules: +

+
make
+

+ If using kernel modules, module configuration in /etc/modprobe.d may be required. + Information pertaining to modules and kernel configuration is + located in Section 9.3, + “Overview of Device and Module Handling” and in the + kernel documentation in the linux-6.16.1/Documentation directory. Also, + modprobe.d(5) + may be of interest. +

+

+ Unless module support has been disabled in the kernel + configuration, install the modules with: +

+
make modules_install
+

+ After kernel compilation is complete, additional steps are + required to complete the installation. Some files need to be + copied to the /boot directory. +

+
+

+ Caution +

+

+ If you've decided to use a separate /boot partition for the LFS system (maybe + sharing a /boot partition + with the host distro), the files copied below should go + there. The easiest way to do that is to create the entry + for /boot in /etc/fstab first (read the previous + section for details), then issue the following command as + the root user in the + chroot environment: +

+
mount /boot
+

+ The path to the device node is omitted in the command + because mount + can read it from /etc/fstab. +

+
+

+ The path to the kernel image may vary depending on the + platform being used. The filename below can be changed to + suit your taste, but the stem of the filename should be + vmlinuz to be + compatible with the automatic setup of the boot process + described in the next section. The following command assumes + an x86 architecture: +

+
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.16.1-lfs-12.4
+

+ System.map is a symbol file for + the kernel. It maps the function entry points of every + function in the kernel API, as well as the addresses of the + kernel data structures for the running kernel. It is used as + a resource when investigating kernel problems. Issue the + following command to install the map file: +

+
cp -iv System.map /boot/System.map-6.16.1
+

+ The kernel configuration file .config produced by the make menuconfig step above + contains all the configuration selections for the kernel that + was just compiled. It is a good idea to keep this file for + future reference: +

+
cp -iv .config /boot/config-6.16.1
+

+ Install the documentation for the Linux kernel: +

+
cp -r Documentation -T /usr/share/doc/linux-6.16.1
+

+ It is important to note that the files in the kernel source + directory are not owned by root. Whenever a package is + unpacked as user root + (like we did inside chroot), the files have the user and + group IDs of whatever they were on the packager's computer. + This is usually not a problem for any other package to be + installed because the source tree is removed after the + installation. However, the Linux source tree is often + retained for a long time. Because of this, there is a chance + that whatever user ID the packager used will be assigned to + somebody on the machine. That person would then have write + access to the kernel source. +

+
+

+ Note +

+

+ In many cases, the configuration of the kernel will need to + be updated for packages that will be installed later in + BLFS. Unlike other packages, it is not necessary to remove + the kernel source tree after the newly built kernel is + installed. +

+

+ If the kernel source tree is going to be retained, run + chown -R 0:0 + on the linux-6.16.1 directory + to ensure all files are owned by user root. +

+

+ If you are updating the configuration and rebuilding the + kernel from a retained kernel source tree, normally you + should not run + the make + mrproper command. The command would purge + the .config file and all the + .o files from the previous + build. Despite it's easy to restore .config from the copy in /boot, purging all the .o files is still a waste: for a simple + configuration change, often only a few .o files need to be (re)built and the + kernel build system will correctly skip other .o files if they are not purged. +

+

+ On the other hand, if you've upgraded GCC, you should run + make clean to + purge all the .o files from + the previous build, or the new build may fail. +

+
+
+

+ Warning +

+

+ Some kernel documentation recommends creating a symlink + from /usr/src/linux pointing + to the kernel source directory. This is specific to kernels + prior to the 2.6 series and must + not be created on an LFS system as it can cause + problems for packages you may wish to build once your base + LFS system is complete. +

+
+
+
+

+ 10.3.2. + Configuring Linux Module Load Order +

+

+ Most of the time Linux modules are loaded automatically, but + sometimes it needs some specific direction. The program that + loads modules, modprobe or insmod, uses /etc/modprobe.d/usb.conf for this purpose. + This file needs to be created so that if the USB drivers + (ehci_hcd, ohci_hcd and uhci_hcd) have been built as modules, + they will be loaded in the correct order; ehci_hcd needs to + be loaded prior to ohci_hcd and uhci_hcd in order to avoid a + warning being output at boot time. +

+

+ Create a new file /etc/modprobe.d/usb.conf by running the + following: +

+
install -v -m755 -d /etc/modprobe.d
+cat > /etc/modprobe.d/usb.conf << "EOF"
+# Begin /etc/modprobe.d/usb.conf
+
+install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
+install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true
+
+# End /etc/modprobe.d/usb.conf
+EOF
+
+
+

+ 10.3.3. + Contents of Linux +

+
+
+
+ Installed files: + config-6.16.1, + vmlinuz-6.16.1-lfs-12.4, and System.map-6.16.1 +
+
+ Installed directories: + /lib/modules, + /usr/share/doc/linux-6.16.1 +
+
+
+
+

+ Short Descriptions +

+ + + + + + + + + + + + + + + + + + + +
+

+ config-6.16.1 +

+
+

+ Contains all the configuration selections for the + kernel +

+
+

+ vmlinuz-6.16.1-lfs-12.4 +

+
+

+ The engine of the Linux system. When turning on the + computer, the kernel is the first part of the + operating system that gets loaded. It detects and + initializes all components of the computer's + hardware, then makes these components available as + a tree of files to the software and turns a single + CPU into a multitasking machine capable of running + scores of programs seemingly at the same time +

+
+

+ System.map-6.16.1 +

+
+

+ A list of addresses and symbols; it maps the entry + points and addresses of all the functions and data + structures in the kernel +

+
+
+
+
+
+
+
+

+ 10.4. Using GRUB to Set Up the + Boot Process +

+
+
+
+
+
+

+ Note +

+

+ If your system has UEFI support and you wish to boot LFS with + UEFI, you should skip the instructions in this page but still + learn the syntax of grub.cfg + and the method to specify a partition in the file from this + page, and configure GRUB with UEFI support using the + instructions provided in + the BLFS page. +

+
+
+

+ 10.4.1. Introduction +

+
+

+ Warning +

+

+ Configuring GRUB incorrectly can render your system + inoperable without an alternate boot device such as a + CD-ROM or bootable USB drive. This section is not required + to boot your LFS system. You may just want to modify your + current boot loader, e.g. Grub-Legacy, GRUB2, or LILO. +

+
+

+ Ensure that an emergency boot disk is ready to “rescue” the + computer if the computer becomes unusable (un-bootable). If + you do not already have a boot device, you can create one. In + order for the procedure below to work, you need to jump ahead + to BLFS and install xorriso from the + libisoburn package. +

+
cd /tmp
+grub-mkrescue --output=grub-img.iso
+xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso
+
+
+

+ 10.4.2. GRUB Naming Conventions +

+

+ GRUB uses its own naming structure for drives and partitions + in the form of (hdn,m), where n is the hard drive number and + m is the partition + number. The hard drive numbers start from zero, but the + partition numbers start from one for normal partitions (from + five for extended partitions). Note that this is different + from earlier versions where both numbers started from zero. + For example, partition sda1 is + (hd0,1) to GRUB and + sdb3 is (hd1,3). In contrast to Linux, + GRUB does not consider CD-ROM drives to be hard drives. For + example, if using a CD on hdb + and a second hard drive on hdc, + that second hard drive would still be (hd1). +

+
+
+

+ 10.4.3. Setting Up the Configuration +

+

+ GRUB works by writing data to the first physical track of the + hard disk. This area is not part of any file system. The + programs there access GRUB modules in the boot partition. The + default location is /boot/grub/. +

+

+ The location of the boot partition is a choice of the user + that affects the configuration. One recommendation is to have + a separate small (suggested size is 200 MB) partition just + for boot information. That way each build, whether LFS or + some commercial distro, can access the same boot files and + access can be made from any booted system. If you choose to + do this, you will need to mount the separate partition, move + all files in the current /boot + directory (e.g. the Linux kernel you just built in the + previous section) to the new partition. You will then need to + unmount the partition and remount it as /boot. If you do this, be sure to update + /etc/fstab. +

+

+ Leaving /boot on the current + LFS partition will also work, but configuration for multiple + systems is more difficult. +

+

+ Using the above information, determine the appropriate + designator for the root partition (or boot partition, if a + separate one is used). For the following example, it is + assumed that the root (or separate boot) partition is + sda2. +

+

+ Install the GRUB files into /boot/grub and set up the boot track: +

+
+

+ Warning +

+

+ The following command will overwrite the current boot + loader. Do not run the command if this is not desired, for + example, if using a third party boot manager to manage the + Master Boot Record (MBR). +

+
+
grub-install /dev/sda
+
+

+ Note +

+

+ If the system has been booted using UEFI, grub-install will try to + install files for the x86_64-efi target, but those + files have not been installed in Chapter 8. + If this is the case, add --target + i386-pc to the command above. +

+
+
+
+

+ 10.4.4. Creating the + GRUB Configuration File +

+

+ Generate /boot/grub/grub.cfg: +

+
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)
+set gfxpayload=1024x768x32
+
+menuentry "GNU/Linux, Linux 6.16.1-lfs-12.4" {
+        linux   /boot/vmlinuz-6.16.1-lfs-12.4 root=/dev/sda2 ro
+}
+EOF
+

+ The insmod + commands load the GRUB + modules named part_gpt and + ext2. Despite the naming, + ext2 actually supports + ext2, ext3, and ext4 filesystems. The grub-install command has + embedded some modules into the main GRUB image (installed into the MBR or + the GRUB BIOS partition) to access the other modules (in + /boot/grub/i386-pc) without a + chicken-or-egg issue, so with a typical configuration these + two modules are already embedded and those two insmod commands will do + nothing. But they do no harm anyway, and they may be needed + with some rare configurations. +

+

+ The set + gfxpayload=1024x768x32 command sets the + resolution and color depth of the VESA framebuffer to be + passed to the kernel. It's necessary for the kernel SimpleDRM + driver to use the VESA framebuffer. You can use a different + resolution or color depth value which better suits for your + monitor. +

+
+

+ Note +

+

+ From GRUB's perspective, + the kernel files are relative to the partition used. If you + used a separate /boot partition, remove /boot from the + above linux line. + You will also need to change the set root line to point to the + boot partition. +

+
+
+

+ Note +

+

+ The GRUB designator for a partition may change if you added + or removed some disks (including removable disks like USB + thumb devices). The change may cause boot failure because + grub.cfg refers to some + “old” + designators. If you wish to avoid such a problem, you may + use the UUID of a partition and the UUID of a filesystem + instead of a GRUB designator to specify a device. Run + lsblk -o + UUID,PARTUUID,PATH,MOUNTPOINT to show the + UUIDs of your filesystems (in the UUID column) and partitions (in the + PARTUUID column). Then replace + set root=(hdx,y) with + search --set=root --fs-uuid + <UUID of the filesystem + where the kernel is installed>, and + replace root=/dev/sda2 with + root=PARTUUID=<UUID of the partition where LFS is + built>. +

+

+ Note that the UUID of a partition is completely different + from the UUID of the filesystem in this partition. Some + online resources may instruct you to use root=UUID=<filesystem + UUID> instead of root=PARTUUID=<partition + UUID>, but doing so will require an + initramfs, which is beyond the scope of LFS. +

+

+ The name of the device node for a partition in /dev may also change (this is less likely + than a GRUB designator change). You can also replace paths + to device nodes like /dev/sda1 + with PARTUUID=<partition + UUID>, in /etc/fstab, to avoid a potential boot + failure in case the device node name has changed. +

+
+

+ GRUB is an extremely powerful program and it provides a + tremendous number of options for booting from a wide variety + of devices, operating systems, and partition types. There are + also many options for customization such as graphical splash + screens, playing sounds, mouse input, etc. The details of + these options are beyond the scope of this introduction. +

+
+

+ Caution +

+

+ There is a command, grub-mkconfig, that can write a + configuration file automatically. It uses a set of scripts + in /etc/grub.d/ and will destroy any customizations that + you make. These scripts are designed primarily for + non-source distributions and are not recommended for LFS. + If you install a commercial Linux distribution, there is a + good chance that this program will be run. Be sure to back + up your grub.cfg file. +

+
+
+
+
+
+
+
+

+ Chapter 11. The End +

+
+
+
+
+
+
+
+

+ 11.1. The End +

+
+
+
+
+

+ Well done! The new LFS system is installed! We wish you much + success with your shiny new custom-built Linux system. +

+

+ It may be a good idea to create an /etc/lfs-release file. By having this file, + it is very easy for you (and for us if you need to ask for help + at some point) to find out which LFS version is installed on + the system. Create this file by running: +

+
echo 12.4 > /etc/lfs-release
+

+ Two files describing the installed system may be used by + packages that can be installed on the system later, either in + binary form or by building them. +

+

+ The first one shows the status of your new system with respect + to the Linux Standards Base (LSB). To create this file, run: +

+
cat > /etc/lsb-release << "EOF"
+DISTRIB_ID="Linux From Scratch"
+DISTRIB_RELEASE="12.4"
+DISTRIB_CODENAME="<your name here>"
+DISTRIB_DESCRIPTION="Linux From Scratch"
+EOF
+

+ The second one contains roughly the same information, and is + used by systemd and some graphical desktop environments. To + create this file, run: +

+
cat > /etc/os-release << "EOF"
+NAME="Linux From Scratch"
+VERSION="12.4"
+ID=lfs
+PRETTY_NAME="Linux From Scratch 12.4"
+VERSION_CODENAME="<your name here>"
+HOME_URL="https://www.linuxfromscratch.org/lfs/"
+RELEASE_TYPE="stable"
+EOF
+

+ Be sure to customize the fields 'DISTRIB_CODENAME' and + 'VERSION_CODENAME' to make the system uniquely yours. +

+
+
+
+
+

+ 11.2. Get Counted +

+
+
+
+
+

+ Now that you have finished the book, do you want to be counted + as an LFS user? Head over to https://www.linuxfromscratch.org/cgi-bin/lfscounter.php + and register as an LFS user by entering your name and the first + LFS version you have used. +

+

+ Let's reboot into LFS now. +

+
+
+
+
+

+ 11.3. Rebooting the System +

+
+
+
+
+

+ Now that all of the software has been installed, it is time to + reboot your computer. However, there are still a few things to + check. Here are some suggestions: +

+
+
    +
  • +

    + Install any + firmware needed if the kernel driver for your + hardware requires some firmware files to function + properly. +

    +
  • +
  • +

    + Ensure a password is set for the root user. +

    +
  • +
  • +

    + A review of the following configuration files is also + appropriate at this point. +

    +
    +
      +
    • +

      + /etc/fstab +

      +
    • +
    • +

      + /etc/hosts +

      +
    • +
    • +

      + /etc/inputrc +

      +
    • +
    • +

      + /etc/profile +

      +
    • +
    • +

      + /etc/resolv.conf +

      +
    • +
    • +

      + /etc/vimrc +

      +
    • +
    • +

      + /etc/sysconfig/ifconfig.eth0 +

      +
    • +
    +
    +
  • +
+
+

+ Now that we have said that, let's move on to booting our shiny + new LFS installation for the first time! First exit from the chroot + environment: +

+
logout
+

+ Then unmount the virtual file systems: +

+
umount -v $LFS/dev/pts
+mountpoint -q $LFS/dev/shm && umount -v $LFS/dev/shm
+umount -v $LFS/dev
+umount -v $LFS/run
+umount -v $LFS/proc
+umount -v $LFS/sys
+

+ If multiple partitions were created, unmount the other + partitions before unmounting the main one, like this: +

+
umount -v $LFS/home
+umount -v $LFS
+

+ Unmount the LFS file system itself: +

+
umount -v $LFS
+

+ Now, reboot the system. +

+

+ Assuming the GRUB boot loader was set up as outlined earlier, + the menu is set to boot LFS + 12.4 automatically. +

+

+ When the reboot is complete, the LFS system is ready for use. + What you will see is a simple “login: ” prompt. At this point, you can + proceed to the BLFS + Book where you can add more software to suit your needs. +

+

+ If your reboot is not successful, it is time to + troubleshoot. For hints on solving initial booting problems, + see https://www.linuxfromscratch.org/lfs/troubleshooting.html. +

+
+
+
+
+

+ 11.4. Additional Resources +

+
+
+
+
+

+ Thank you for reading this LFS book. We hope that you have + found this book helpful and have learned more about the system + creation process. +

+

+ Now that the LFS system is installed, you may be wondering + “What + next?” To answer that question, we have compiled + a list of resources for you. +

+
+
    +
  • +

    + Maintenance +

    +

    + Bugs and security notices are reported regularly for all + software. Since an LFS system is compiled from source, it + is up to you to keep abreast of such reports. There are + several online resources that track such reports, some of + which are shown below: +

    +
    +
      +
    • +

      + LFS + Security Advisories +

      +

      + This is a list of security vulnerabilities + discovered in the LFS book after it's published. +

      +
    • +
    • +

      + Open Source + Security Mailing List +

      +

      + This is a mailing list for discussion of security + flaws, concepts, and practices in the Open Source + community. +

      +
    • +
    +
    +
  • +
  • +

    + LFS Hints +

    +

    + The LFS Hints are a collection of educational documents + submitted by volunteers in the LFS community. The hints + are available at + https://www.linuxfromscratch.org/hints/downloads/files/. +

    +
  • +
  • +

    + Mailing lists +

    +

    + There are several LFS mailing lists you may subscribe to + if you are in need of help, want to stay current with the + latest developments, want to contribute to the project, + and more. See Chapter 1 - + Mailing Lists for more information. +

    +
  • +
  • +

    + The Linux Documentation Project +

    +

    + The goal of The Linux Documentation Project (TLDP) is to + collaborate on all of the issues of Linux documentation. + The TLDP features a large collection of HOWTOs, guides, + and man pages. It is located at https://tldp.org/. +

    +
  • +
+
+
+
+
+
+

+ 11.5. Getting + Started After LFS +

+
+
+
+
+
+

+ 11.5.1. Deciding what to do next +

+

+ Now that LFS is complete and you have a bootable system, what + do you do? The next step is to decide how to use it. + Generally, there are two broad categories to consider: + workstation or server. Indeed, these categories are not + mutually exclusive. The applications needed for each category + can be combined onto a single system, but let's look at them + separately for now. +

+

+ A server is the simpler category. Generally this consists of + a web server such as the + Apache HTTP Server and a database server such as + + MariaDB. However other services are possible. The + operating system embedded in a single use device falls into + this category. +

+

+ On the other hand, a workstation is much more complex. It + generally requires a graphical user environment such as + + LXDE, + XFCE, + KDE, or + Gnome based on a basic + graphical environment and several graphical based + applications such as the + Firefox web browser, + Thunderbird email client, or + LibreOffice office suite. These applications require many + (several hundred depending on desired capabilities) more + packages of support applications and libraries. +

+

+ In addition to the above, there is a set of applications for + system management for all kinds of systems. These + applications are all in the BLFS book. Not all packages are + needed in every environment. For example + dhcpcd, is not normally appropriate for a server and + + wireless_tools, are normally only useful for a laptop + system. +

+
+
+

+ 11.5.2. Working in a basic LFS environment +

+

+ When you initially boot into LFS, you have all the internal + tools to build additional packages. Unfortunately, the user + environment is quite sparse. There are a couple of ways to + improve this: +

+
+
+
+
+

+ 11.5.2.1. Work from the + LFS host in chroot +

+
+
+
+

+ This method provides a complete graphical environment where + a full featured browser and copy/paste capabilities are + available. This method allows using applications like the + host's version of wget to download package sources to a + location available when working in the chroot environment. +

+

+ In order to properly build packages in chroot, you will + also need to remember to mount the virtual file systems if + they are not already mounted. One way to do this is to + create a script on the HOST system: +

+
cat > ~/mount-virt.sh << "EOF"
+#!/bin/bash
+
+function mountbind
+{
+   if ! mountpoint $LFS/$1 >/dev/null; then
+     $SUDO mount --bind /$1 $LFS/$1
+     echo $LFS/$1 mounted
+   else
+     echo $LFS/$1 already mounted
+   fi
+}
+
+function mounttype
+{
+   if ! mountpoint $LFS/$1 >/dev/null; then
+     $SUDO mount -t $2 $3 $4 $5 $LFS/$1
+     echo $LFS/$1 mounted
+   else
+     echo $LFS/$1 already mounted
+   fi
+}
+
+if [ $EUID -ne 0 ]; then
+  SUDO=sudo
+else
+  SUDO=""
+fi
+
+if [ x$LFS == x ]; then
+  echo "LFS not set"
+  exit 1
+fi
+
+mountbind dev
+mounttype dev/pts devpts devpts -o gid=5,mode=620
+mounttype proc    proc   proc
+mounttype sys     sysfs  sysfs
+mounttype run     tmpfs  run
+if [ -h $LFS/dev/shm ]; then
+  install -v -d -m 1777 $LFS$(realpath /dev/shm)
+else
+  mounttype dev/shm tmpfs tmpfs -o nosuid,nodev
+fi 
+
+#mountbind usr/src
+#mountbind boot
+#mountbind home
+EOF
+

+ Note that the last three commands in the script are + commented out. These are useful if those directories are + mounted as separate partitions on the host system and will + be mounted when booting the completed LFS/BLFS system. +

+

+ The script can be run with bash ~/mount-virt.sh as + either a regular user (recommended) or as root. If run as a regular user, sudo is + required on the host system. +

+

+ Another issue pointed out by the script is where to store + downloaded package files. This location is arbitrary. It + can be in a regular user's home directory such as ~/sources + or in a global location like /usr/src. Our recommendation + is not to mix BLFS sources and LFS sources in (from the + chroot environment) /sources. In any case, the packages + must be accessible inside the chroot environment. +

+

+ A last convenience feature presented here is to streamline + the process of entering the chroot environment. This can be + done with an alias placed in a user's ~/.bashrc file on the + host system: +

+
alias lfs='sudo /usr/sbin/chroot /mnt/lfs /usr/bin/env -i HOME=/root TERM="$TERM" PS1="\u:\w\\\\$ "
+PATH=/usr/bin:/usr/sbin /bin/bash --login'
+

+ This alias is a little tricky because of the quoting and + levels of backslash characters. It must be all on a single + line. The above command has been split in two for + presentation purposes. +

+
+
+
+
+
+

+ 11.5.2.2. Work remotely + via ssh +

+
+
+
+

+ This method also provides a full graphical environment, but + first requires installing + sshd on the LFS system, usually in chroot. It also + requires a second computer. This method has the advantage + of being simple by not requiring the complexity of the + chroot environment. It also uses your LFS built kernel for + all additional packages and still provides a complete + system for installing packages. +

+

+ You may use the scp command to upload the + package sources to be built onto the LFS system. If you + want to download the sources onto the LFS system directly + instead, install + libtasn1, + p11-kit, + make-ca, and + wget in chroot (or upload their sources using + scp after + booting the LFS system). +

+
+
+
+
+
+

+ 11.5.2.3. Work from the + LFS command line +

+
+
+
+

+ This method requires installing + libtasn1, + p11-kit, + make-ca, + wget, + gpm, and + links (or + lynx) in chroot and then rebooting into the new LFS + system. At this point the default system has six virtual + consoles. Switching consoles is as easy as using the + Alt+Fx key combinations where + Fx is between + F1 and + F6. The + Alt+← and Alt+→ combinations also will + change the console. +

+

+ At this point you can log into two different virtual + consoles and run the links or lynx browser in one console + and bash in the other. GPM then allows copying commands + from the browser with the left mouse button, switching + consoles, and pasting into the other console. +

+
+

+ Note +

+

+ As a side note, switching of virtual consoles can also be + done from an X Window instance with the Ctrl+Alt+Fx key combination, but + the mouse copy operation does not work between the + graphical interface and a virtual console. You can return + to the X Window display with the Ctrl+Alt+Fx combination, where + Fx is + usually F1 + but may be F7. +

+
+
+
+
+
+
+
+
+
+

+ Part V. Appendices +

+
+
+
+
+
+
+
+

+ Appendix A. Acronyms and Terms +

+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ ABI +

+
+

+ Application Binary Interface +

+
+

+ ALFS +

+
+

+ Automated Linux From Scratch +

+
+

+ API +

+
+

+ Application Programming Interface +

+
+

+ ASCII +

+
+

+ American Standard Code for Information Interchange +

+
+

+ BIOS +

+
+

+ Basic Input/Output System +

+
+

+ BLFS +

+
+

+ Beyond Linux From Scratch +

+
+

+ BSD +

+
+

+ Berkeley Software Distribution +

+
+

+ chroot +

+
+

+ change root +

+
+

+ CMOS +

+
+

+ Complementary Metal Oxide Semiconductor +

+
+

+ COS +

+
+

+ Class Of Service +

+
+

+ CPU +

+
+

+ Central Processing Unit +

+
+

+ CRC +

+
+

+ Cyclic Redundancy Check +

+
+

+ CVS +

+
+

+ Concurrent Versions System +

+
+

+ DHCP +

+
+

+ Dynamic Host Configuration Protocol +

+
+

+ DNS +

+
+

+ Domain Name Service +

+
+

+ EGA +

+
+

+ Enhanced Graphics Adapter +

+
+

+ ELF +

+
+

+ Executable and Linkable Format +

+
+

+ EOF +

+
+

+ End of File +

+
+

+ EQN +

+
+

+ equation +

+
+

+ ext2 +

+
+

+ second extended file system +

+
+

+ ext3 +

+
+

+ third extended file system +

+
+

+ ext4 +

+
+

+ fourth extended file system +

+
+

+ FAQ +

+
+

+ Frequently Asked Questions +

+
+

+ FHS +

+
+

+ Filesystem Hierarchy Standard +

+
+

+ FIFO +

+
+

+ First-In, First Out +

+
+

+ FQDN +

+
+

+ Fully Qualified Domain Name +

+
+

+ FTP +

+
+

+ File Transfer Protocol +

+
+

+ GB +

+
+

+ Gigabytes +

+
+

+ GCC +

+
+

+ GNU Compiler Collection +

+
+

+ GID +

+
+

+ Group Identifier +

+
+

+ GMT +

+
+

+ Greenwich Mean Time +

+
+

+ HTML +

+
+

+ Hypertext Markup Language +

+
+

+ IDE +

+
+

+ Integrated Drive Electronics +

+
+

+ IEEE +

+
+

+ Institute of Electrical and Electronic Engineers +

+
+

+ IO +

+
+

+ Input/Output +

+
+

+ IP +

+
+

+ Internet Protocol +

+
+

+ IPC +

+
+

+ Inter-Process Communication +

+
+

+ IRC +

+
+

+ Internet Relay Chat +

+
+

+ ISO +

+
+

+ International Organization for Standardization +

+
+

+ ISP +

+
+

+ Internet Service Provider +

+
+

+ KB +

+
+

+ Kilobytes +

+
+

+ LED +

+
+

+ Light Emitting Diode +

+
+

+ LFS +

+
+

+ Linux From Scratch +

+
+

+ LSB +

+
+

+ Linux Standard Base +

+
+

+ MB +

+
+

+ Megabytes +

+
+

+ MBR +

+
+

+ Master Boot Record +

+
+

+ MD5 +

+
+

+ Message Digest 5 +

+
+

+ NIC +

+
+

+ Network Interface Card +

+
+

+ NLS +

+
+

+ Native Language Support +

+
+

+ NNTP +

+
+

+ Network News Transport Protocol +

+
+

+ NPTL +

+
+

+ Native POSIX Threading Library +

+
+

+ OSS +

+
+

+ Open Sound System +

+
+

+ PCH +

+
+

+ Pre-Compiled Headers +

+
+

+ PCRE +

+
+

+ Perl Compatible Regular Expression +

+
+

+ PID +

+
+

+ Process Identifier +

+
+

+ PTY +

+
+

+ pseudo terminal +

+
+

+ QOS +

+
+

+ Quality Of Service +

+
+

+ RAM +

+
+

+ Random Access Memory +

+
+

+ RPC +

+
+

+ Remote Procedure Call +

+
+

+ RTC +

+
+

+ Real Time Clock +

+
+

+ SBU +

+
+

+ Standard Build Unit +

+
+

+ SCO +

+
+

+ The Santa Cruz Operation +

+
+

+ SHA1 +

+
+

+ Secure-Hash Algorithm 1 +

+
+

+ TLDP +

+
+

+ The Linux Documentation Project +

+
+

+ TFTP +

+
+

+ Trivial File Transfer Protocol +

+
+

+ TLS +

+
+

+ Thread-Local Storage +

+
+

+ UID +

+
+

+ User Identifier +

+
+

+ umask +

+
+

+ user file-creation mask +

+
+

+ USB +

+
+

+ Universal Serial Bus +

+
+

+ UTC +

+
+

+ Coordinated Universal Time +

+
+

+ UUID +

+
+

+ Universally Unique Identifier +

+
+

+ VC +

+
+

+ Virtual Console +

+
+

+ VGA +

+
+

+ Video Graphics Array +

+
+

+ VT +

+
+

+ Virtual Terminal +

+
+
+
+
+
+
+

+ Appendix B. Acknowledgments +

+
+
+
+
+

+ We would like to thank the following people and organizations for + their contributions to the Linux From Scratch Project. +

+
+
    +
  • +

    + Gerard Beekmans + <gerard AT linuxfromscratch D0T org> – LFS Creator +

    +
  • +
  • +

    + Bruce Dubbs + <bdubbs AT linuxfromscratch D0T org> – LFS Managing Editor +

    +
  • +
  • +

    + Jim + Gifford <jim AT linuxfromscratch D0T org> – CLFS Project + Co-Leader +

    +
  • +
  • +

    + Pierre Labastie + <pierre AT linuxfromscratch D0T org> – BLFS Editor and ALFS + Lead +

    +
  • +
  • +

    + DJ + Lucas <dj AT linuxfromscratch D0T org> – LFS and BLFS + Editor +

    +
  • +
  • +

    + Ken + Moffat <ken AT linuxfromscratch D0T org> – BLFS Editor +

    +
  • +
  • +

    + Countless other people on the various LFS and BLFS mailing + lists who helped make this book possible by giving their + suggestions, testing the book, and submitting bug reports, + instructions, and their experiences with installing various + packages. +

    +
  • +
+
+

+ Translators +

+
+
    +
  • +

    + Manuel + Canales Esparcia <macana AT macana-es D0T com> – Spanish + LFS translation project +

    +
  • +
  • +

    + Johan Lenglet + <johan AT linuxfromscratch D0T org> – French LFS translation + project until 2008 +

    +
  • +
  • +

    + Jean-Philippe + Mengual <jmengual AT linuxfromscratch D0T org> – French + LFS translation project 2008-2016 +

    +
  • +
  • +

    + Julien Lepiller + <jlepiller AT linuxfromscratch D0T org> – French LFS + translation project 2017-present +

    +
  • +
  • +

    + Anderson Lizardo + <lizardo AT linuxfromscratch D0T org> – Portuguese LFS + translation project historical +

    +
  • +
  • +

    + Jamenson + Espindula <jafesp AT gmail D0T com> – Portuguese LFS + translation project 2022-present +

    +
  • +
  • +

    + Thomas + Reitelbach <tr AT erdfunkstelle D0T de> – German LFS + translation project +

    +
  • +
+
+

+ Mirror + Maintainers +

+

+ North + American Mirrors +

+
+
    +
  • +

    + Scott + Kveton <scott AT osuosl D0T org> – lfs.oregonstate.edu + mirror +

    +
  • +
  • +

    + William + Astle <lost AT l-w D0T net> – ca.linuxfromscratch.org + mirror +

    +
  • +
  • +

    + Eujon Sellers + <jpolen@rackspace.com> – lfs.introspeed.com mirror +

    +
  • +
  • +

    + Justin + Knierim <tim@idge.net> – lfs-matrix.net mirror +

    +
  • +
+
+

+ South + American Mirrors +

+
+ +
+

+ European + Mirrors +

+
+
    +
  • +

    + Guido + Passet <guido AT primerelay D0T net> – + nl.linuxfromscratch.org mirror +

    +
  • +
  • +

    + Bastiaan + Jacques <baafie AT planet D0T nl> – lfs.pagefault.net + mirror +

    +
  • +
  • +

    + Sven + Cranshoff <sven D0T cranshoff AT lineo D0T be> – + lfs.lineo.be mirror +

    +
  • +
  • +

    + Scarlet Belgium – lfs.scarlet.be mirror +

    +
  • +
  • +

    + Sebastian + Faulborn <info AT aliensoft D0T org> – lfs.aliensoft.org + mirror +

    +
  • +
  • +

    + Stuart + Fox <stuart AT dontuse D0T ms> – lfs.dontuse.ms mirror +

    +
  • +
  • +

    + Ralf + Uhlemann <admin AT realhost D0T de> – lfs.oss-mirror.org + mirror +

    +
  • +
  • +

    + Antonin Sprinzl + <Antonin D0T Sprinzl AT tuwien D0T ac D0T at> – + at.linuxfromscratch.org mirror +

    +
  • +
  • +

    + Fredrik Danerklint + <fredan-lfs AT fredan D0T org> – se.linuxfromscratch.org + mirror +

    +
  • +
  • +

    + Franck + <franck AT linuxpourtous D0T com> – lfs.linuxpourtous.com + mirror +

    +
  • +
  • +

    + Philippe + Baque <baque AT cict D0T fr> – lfs.cict.fr mirror +

    +
  • +
  • +

    + Vitaly + Chekasin <gyouja AT pilgrims D0T ru> – lfs.pilgrims.ru + mirror +

    +
  • +
  • +

    + Benjamin + Heil <kontakt AT wankoo D0T org> – lfs.wankoo.org mirror +

    +
  • +
  • +

    + Anton Maisak + <info AT linuxfromscratch D0T org D0T ru> – + linuxfromscratch.org.ru mirror +

    +
  • +
+
+

+ Asian + Mirrors +

+
+ +
+

+ Australian Mirrors +

+
+
    +
  • +

    + Jason + Andrade <jason AT dstc D0T edu D0T au> – + au.linuxfromscratch.org mirror +

    +
  • +
+
+

+ Former + Project Team Members +

+
+
    +
  • +

    + Christine + Barczak <theladyskye AT linuxfromscratch D0T org> – LFS + Book Editor +

    +
  • +
  • +

    + Archaic <archaic@linuxfromscratch.org> – LFS + Technical Writer/Editor, HLFS Project Leader, BLFS Editor, + Hints and Patches Project Maintainer +

    +
  • +
  • +

    + Matthew Burgess + <matthew AT linuxfromscratch D0T org> – LFS Project Leader, + LFS Technical Writer/Editor +

    +
  • +
  • +

    + Nathan Coulson + <nathan AT linuxfromscratch D0T org> – LFS-Bootscripts + Maintainer +

    +
  • +
  • +

    + Timothy Bauscher +

    +
  • +
  • +

    + Robert Briggs +

    +
  • +
  • +

    + Ian Chilton +

    +
  • +
  • +

    + Jeroen Coumans + <jeroen AT linuxfromscratch D0T org> – Website Developer, + FAQ Maintainer +

    +
  • +
  • +

    + Manuel Canales + Esparcia <manuel AT linuxfromscratch D0T org> – + LFS/BLFS/HLFS XML and XSL Maintainer +

    +
  • +
  • +

    + Alex Groenewoud – LFS Technical Writer +

    +
  • +
  • +

    + Marc Heerdink +

    +
  • +
  • +

    + Jeremy Huntwork + <jhuntwork AT linuxfromscratch D0T org> – LFS Technical + Writer, LFS LiveCD Maintainer +

    +
  • +
  • +

    + Bryan Kadzban + <bryan AT linuxfromscratch D0T org> – LFS Technical Writer +

    +
  • +
  • +

    + Mark Hymers +

    +
  • +
  • +

    + Seth W. Klein – FAQ maintainer +

    +
  • +
  • +

    + Nicholas Leippe + <nicholas AT linuxfromscratch D0T org> – Wiki Maintainer +

    +
  • +
  • +

    + Anderson Lizardo + <lizardo AT linuxfromscratch D0T org> – Website + Backend-Scripts Maintainer +

    +
  • +
  • +

    + Randy McMurchy + <randy AT linuxfromscratch D0T org> – BLFS Project Leader, + LFS Editor +

    +
  • +
  • +

    + Dan Nicholson + <dnicholson AT linuxfromscratch D0T org> – LFS and BLFS + Editor +

    +
  • +
  • +

    + Alexander E. + Patrakov <alexander AT linuxfromscratch D0T org> – LFS + Technical Writer, LFS Internationalization Editor, LFS Live + CD Maintainer +

    +
  • +
  • +

    + Simon Perreault +

    +
  • +
  • +

    + Scot Mc Pherson + <scot AT linuxfromscratch D0T org> – LFS NNTP Gateway + Maintainer +

    +
  • +
  • +

    + Douglas R. Reno + <renodr AT linuxfromscratch D0T org> – Systemd Editor +

    +
  • +
  • +

    + Ryan Oliver + <ryan AT linuxfromscratch D0T org> – CLFS Project Co-Leader +

    +
  • +
  • +

    + Greg + Schafer <gschafer AT zip D0T com D0T au> – LFS Technical + Writer and Architect of the Next Generation 64-bit-enabling + Build Method +

    +
  • +
  • +

    + Jesse Tie-Ten-Quee – LFS Technical Writer +

    +
  • +
  • +

    + James Robertson + <jwrober AT linuxfromscratch D0T org> – Bugzilla Maintainer +

    +
  • +
  • +

    + Tushar Teredesai + <tushar AT linuxfromscratch D0T org> – BLFS Book Editor, + Hints and Patches Project Leader +

    +
  • +
  • +

    + Jeremy Utley + <jeremy AT linuxfromscratch D0T org> – LFS Technical Writer, + Bugzilla Maintainer, LFS-Bootscripts Maintainer +

    +
  • +
  • +

    + Zack + Winkles <zwinkles AT gmail D0T com> – LFS Technical + Writer +

    +
  • +
+
+
+
+
+
+

+ Appendix C. Dependencies +

+
+
+
+
+

+ Every package built in LFS relies on one or more other packages + in order to build and install properly. Some packages even + participate in circular dependencies, that is, the first package + depends on the second which in turn depends on the first. Because + of these dependencies, the order in which packages are built in + LFS is very important. The purpose of this page is to document + the dependencies of each package built in LFS. +

+

+ For each package that is built, there are three, and sometimes up + to five types of dependencies listed below. The first lists what + other packages need to be available in order to compile and + install the package in question. The second lists the packages + that must be available when any programs or libraries from the + package are used at runtime. The third lists what packages, in + addition to those on the first list, need to be available in + order to run the test suites. The fourth list of dependencies are + packages that require this package to be built and installed in + its final location before they are built and installed. +

+

+ The last list of dependencies are optional packages that are not + addressed in LFS, but could be useful to the user. These packages + may have additional mandatory or optional dependencies of their + own. For these dependencies, the recommended practice is to + install them after completion of the LFS book and then go back + and rebuild the LFS package. In several cases, re-installation is + addressed in BLFS. +

+

+ Acl +

+
+ +
+
+ Installation depends on: + Attr, Bash, Binutils, Coreutils, GCC, + Gettext, Grep, M4, Make, Perl, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Attr and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Automake, Diffutils, Findutils, and + Libtool +
+
+
+
+ +
+
+ Must be installed before: + Coreutils, Sed, Tar, and Vim +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Attr +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, M4, Make, Perl, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Automake, Diffutils, Findutils, and + Libtool +
+
+
+
+ +
+
+ Must be installed before: + Acl, Libcap, and Patch +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Autoconf +

+
+ +
+
+ Installation depends on: + Bash, Coreutils, Grep, M4, Make, Perl, + Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash, Coreutils, Grep, M4, Make, Sed, + and Texinfo +
+
+
+
+ +
+
+ Test suite depends on: + Automake, Diffutils, Findutils, GCC, + and Libtool +
+
+
+
+ +
+
+ Must be installed before: + Automake and Coreutils +
+
+
+
+ +
+
+ Optional dependencies: + + Emacs +
+
+
+

+ Automake +

+
+ +
+
+ Installation depends on: + Autoconf, Bash, Coreutils, Gettext, + Grep, M4, Make, Perl, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash, Coreutils, Grep, M4, Sed, and + Texinfo +
+
+
+
+ +
+
+ Test suite depends on: + Binutils, Bison, Bzip2, DejaGNU, + Diffutils, Expect, Findutils, Flex, GCC, Gettext, Gzip, + Libtool, and Tar +
+
+
+
+ +
+
+ Must be installed before: + Coreutils +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Bash +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, + Diffutils, Gawk, GCC, Glibc, Grep, Make, Ncurses, Patch, + Readline, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Ncurses, and Readline +
+
+
+
+ +
+
+ Test suite depends on: + Expect and Shadow +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Xorg +
+
+
+

+ Bc +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Grep, Make, and Readline +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Ncurses, and Readline +
+
+
+
+ +
+
+ Test suite depends on: + Gawk +
+
+
+
+ +
+
+ Must be installed before: + Linux +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Binutils +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + File, Flex, Gawk, GCC, Glibc, Grep, Make, Perl, Pkgconf, Sed, + Texinfo, Zlib, and Zstd +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Zlib, and Zstd +
+
+
+
+ +
+
+ Test suite depends on: + DejaGNU and Expect +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + Elfutils and + Jansson +
+
+
+

+ Bison +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Gettext, Glibc, Grep, M4, Make, Perl, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils, Findutils, and Flex +
+
+
+
+ +
+
+ Must be installed before: + Kbd and Tar +
+
+
+
+ +
+
+ Optional dependencies: + + Doxygen +
+
+
+

+ Bzip2 +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Glibc, Make, and Patch +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + File and Libelf +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Coreutils +

+
+ +
+
+ Installation depends on: + Autoconf, Automake, Bash, Binutils, + Coreutils, GCC, Gettext, Glibc, GMP, Grep, Libcap, Make, + OpenSSL, Patch, Perl, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils, E2fsprogs, Findutils, + Shadow, and Util-linux +
+
+
+
+ +
+
+ Must be installed before: + Bash, Diffutils, Findutils, Man-DB, and + Udev +
+
+
+
+ +
+
+ Optional dependencies: + Expect.pm and IO::Tty +
+
+
+

+ DejaGNU +

+
+ +
+
+ Installation depends on: + Bash, Coreutils, Diffutils, Expect, + GCC, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Expect and Bash +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Diffutils +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + Gettext, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Perl +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ E2fsprogs +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, Gzip, Make, Pkgconf, Sed, Texinfo, + and Util-linux +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Util-linux +
+
+
+
+ +
+
+ Test suite depends on: + Procps-ng and Psmisc +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Expat +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + Glibc, Grep, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Python and XML::Parser +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Expect +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Glibc, Grep, Make, Patch, Sed, and Tcl +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Tcl +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Tk +
+
+
+

+ File +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bzip2, Coreutils, + Diffutils, Gawk, GCC, Glibc, Grep, Make, Sed, Xz, and + Zlib +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Bzip2, Xz, and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + libseccomp +
+
+
+

+ Findutils +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + DejaGNU, Diffutils, and Expect +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Flex +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, M4, Make, Patch, Sed, and + Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash, Glibc, and M4 +
+
+
+
+ +
+
+ Test suite depends on: + Bison and Gawk +
+
+
+
+ +
+
+ Must be installed before: + Binutils, IProute2, Kbd, Kmod, and + Man-DB +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Flit-Core +

+
+ +
+
+ Installation depends on: + Python +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Packaging and Wheel +
+
+
+
+ +
+
+ Optional dependencies: + + pytest and testpath +
+
+
+

+ Gawk +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, GMP, Grep, Make, MPFR, Patch, Readline, Sed, + and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash, Glibc, and Mpfr +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + libsigsegv +
+
+
+

+ GCC +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Findutils, Gawk, GCC, Gettext, Glibc, GMP, Grep, M4, Make, + MPC, MPFR, Patch, Perl, Sed, Tar, Texinfo, and Zstd +
+
+
+
+ +
+
+ Required at runtime: + Bash, Binutils, Glibc, Mpc, and + Python +
+
+
+
+ +
+
+ Test suite depends on: + DejaGNU, Expect, and Shadow +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + GDC, GNAT, and ISL +
+
+
+

+ GDBM +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Grep, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Bash, Glibc, and Readline +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Gettext +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + Glibc, Grep, Make, Ncurses, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Acl, Bash, Gcc, and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils, Perl, and Tcl +
+
+
+
+ +
+
+ Must be installed before: + Automake and Bison +
+
+
+
+ +
+
+ Optional dependencies: + + libunistring and + libxml2 +
+
+
+

+ Glibc +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, + Diffutils, Gawk, GCC, Gettext, Grep, Gzip, Linux API Headers, + Make, Perl, Python, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + None +
+
+
+
+ +
+
+ Test suite depends on: + File +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ GMP +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, M4, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + GCC and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + MPFR and GCC +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Gperf +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + and Make +
+
+
+
+ +
+
+ Required at runtime: + GCC and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils and Expect +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Grep +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Gettext, Glibc, Grep, Make, Patch, Sed, and + Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Gawk +
+
+
+
+ +
+
+ Must be installed before: + Man-DB +
+
+
+
+ +
+
+ Optional dependencies: + + PCRE2 and + libsigsegv +
+
+
+

+ Groff +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, Gawk, + GCC, Glibc, Grep, Make, Patch, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + GCC, Glibc, and Perl +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Man-DB +
+
+
+
+ +
+
+ Optional dependencies: + + ghostscript and + Uchardet +
+
+
+

+ GRUB +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, + Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, + Texinfo, and Xz +
+
+
+
+ +
+
+ Required at runtime: + Bash, GCC, Gettext, Glibc, Xz, and + Sed +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Gzip +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils and Less +
+
+
+
+ +
+
+ Must be installed before: + Man-DB +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Iana-Etc +

+
+ +
+
+ Installation depends on: + Coreutils +
+
+
+
+ +
+
+ Required at runtime: + None +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Perl +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Inetutils +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Grep, Make, Ncurses, Patch, Sed, Texinfo, and Zlib +
+
+
+
+ +
+
+ Required at runtime: + GCC, Glibc, Ncurses, and + Readline +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Tar +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Intltool +

+
+ +
+
+ Installation depends on: + Bash, Gawk, Glibc, Make, Perl, Sed, and + XML::Parser +
+
+
+
+ +
+
+ Required at runtime: + Autoconf, Automake, Bash, Glibc, Grep, + Perl, and Sed +
+
+
+
+ +
+
+ Test suite depends on: + Perl +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ IProute2 +

+
+ +
+
+ Installation depends on: + Bash, Bison, Coreutils, Flex, GCC, + Glibc, Make, Libcap, Libelf, Linux API Headers, Pkgconf, and + Zlib +
+
+
+
+ +
+
+ Required at runtime: + Bash, Coreutils, Glibc, Libcap, Libelf, + and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Berkeley DB, + iptables, libbpf, + libmnl, and + libtirpc +
+
+
+

+ Jinja2 +

+
+ +
+
+ Installation depends on: + MarkupSafe, Python, Setuptools, and + Wheel +
+
+
+
+ +
+
+ Required at runtime: + MarkupSafe and Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Kbd +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, Flex, + GCC, Gettext, Glibc, Gzip, Make, Patch, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Bash, Coreutils, and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Linux-PAM +
+
+
+

+ Kmod +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bison, Coreutils, Flex, + GCC, Gettext, Glibc, Gzip, Make, OpenSSL, Pkgconf, Sed, Xz, + and Zlib +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Xz, and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Udev +
+
+
+
+ +
+
+ Optional dependencies: + scdoc (for man + pages) +
+
+
+

+ Less +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Glibc, Grep, Make, Ncurses, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Ncurses +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Gzip +
+
+
+
+ +
+
+ Optional dependencies: + + PCRE2 or + PCRE +
+
+
+

+ Libcap +

+
+ +
+
+ Installation depends on: + Attr, Bash, Binutils, Coreutils, GCC, + Glibc, Perl, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + IProute2 and Shadow +
+
+
+
+ +
+
+ Optional dependencies: + + Linux-PAM +
+
+
+

+ Libelf +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bzip2, Coreutils, GCC, + Glibc, Make, Xz, Zlib, and Zstd +
+
+
+
+ +
+
+ Required at runtime: + Bzip2, Glibc, Xz, Zlib, and Zstd +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + IProute2 and Linux +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Libffi +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + DejaGnu +
+
+
+
+ +
+
+ Must be installed before: + Python +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Libpipeline +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Check and Pkgconf +
+
+
+
+ +
+
+ Must be installed before: + Man-DB +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Libtool +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Autoconf, Automake, Bash, Binutils, + Coreutils, File, GCC, Glibc, Grep, Make, and Sed +
+
+
+
+ +
+
+ Test suite depends on: + Autoconf, Automake, and + Findutils +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Libxcrypt +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, Make, Perl, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Perl, Python, Shadow, and Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Linux +

+
+ +
+
+ Installation depends on: + Bash, Bc, Binutils, Coreutils, + Diffutils, Findutils, GCC, Glibc, Grep, Gzip, Kmod, Libelf, + Make, Ncurses, OpenSSL, Perl, and Sed +
+
+
+
+ +
+
+ Required at runtime: + None +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + cpio, + LLVM (with Clang), and + Rust-bindgen +
+
+
+

+ Linux API Headers +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Findutils, + GCC, Glibc, Grep, Gzip, Make, Perl, and Sed +
+
+
+
+ +
+
+ Required at runtime: + None +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Lz4 +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + and Make +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Python +
+
+
+
+ +
+
+ Must be installed before: + Zstd +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ M4 +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Bash and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils +
+
+
+
+ +
+
+ Must be installed before: + Autoconf and Bison +
+
+
+
+ +
+
+ Optional dependencies: + + libsigsegv +
+
+
+

+ Make +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Perl and Procps-ng +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Guile +
+
+
+

+ Man-DB +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Bzip2, Coreutils, Flex, + GCC, GDBM, Gettext, Glibc, Grep, Groff, Gzip, Less, + Libpipeline, Make, Pkgconf, Sed, and Xz +
+
+
+
+ +
+
+ Required at runtime: + Bash, GDBM, Groff, Glibc, Gzip, Less, + Libpipeline, and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + Util-linux +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + libseccomp and po4a +
+
+
+

+ Man-Pages +

+
+ +
+
+ Installation depends on: + Bash, Coreutils, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + None +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ MarkupSafe +

+
+ +
+
+ Installation depends on: + Python, Setuptools, and Wheel +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Jinja2 +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Meson +

+
+ +
+
+ Installation depends on: + Ninja, Python, Setuptools, and + Wheel +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ MPC +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, GMP, Make, MPFR, Sed, and + Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc, GMP, and MPFR +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + GCC +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ MPFR +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, GMP, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc and GMP +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Gawk and GCC +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Ncurses +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + Gawk, GCC, Glibc, Grep, Make, Patch, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Bash, GRUB, Inetutils, Less, Procps-ng, + Psmisc, Readline, Texinfo, Util-linux, and Vim +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Ninja +

+
+ +
+
+ Installation depends on: + Binutils, Coreutils, GCC, and + Python +
+
+
+
+ +
+
+ Required at runtime: + GCC and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + + cmake +
+
+
+
+ +
+
+ Must be installed before: + Meson +
+
+
+
+ +
+
+ Optional dependencies: + + Asciidoc, + Doxygen, + Emacs, and re2c +
+
+
+

+ OpenSSL +

+
+ +
+
+ Installation depends on: + Binutils, Coreutils, GCC, Make, and + Perl +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Perl +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Coreutils, Kmod, Linux, and + Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Packaging +

+
+ +
+
+ Installation depends on: + Flit-core and Python +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Wheel +
+
+
+
+ +
+
+ Optional dependencies: + + pytest +
+
+
+

+ Patch +

+
+ +
+
+ Installation depends on: + Attr, Bash, Binutils, Coreutils, GCC, + Glibc, Grep, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Attr and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Ed +
+
+
+

+ Perl +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + GDBM, Glibc, Grep, Libxcrypt, Make, Sed, and Zlib +
+
+
+
+ +
+
+ Required at runtime: + GDBM, Glibc, and Libxcrypt +
+
+
+
+ +
+
+ Test suite depends on: + Iana-Etc, Less, and Procps-ng +
+
+
+
+ +
+
+ Must be installed before: + Autoconf +
+
+
+
+ +
+
+ Optional dependencies: + + Berkeley DB +
+
+
+

+ Pkgconf +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + Glibc, Grep, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Binutils, E2fsprogs, IProute2, Kmod, + Man-DB, Procps-ng, Python, Udev, + and Util-linux +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Procps-ng +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Make, Ncurses, and Pkgconf +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + DejaGNU +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + elogind +
+
+
+

+ Psmisc +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, Make, Ncurses, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Ncurses +
+
+
+
+ +
+
+ Test suite depends on: + Expect +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Python +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Expat, GCC, + Gdbm, Gettext, Glibc, Grep, Libffi, Libxcrypt, Make, Ncurses, + OpenSSL, Pkgconf, Sed, and Util-linux +
+
+
+
+ +
+
+ Required at runtime: + Bzip2, Expat, Gdbm, Glibc, Libffi, + Libxcrypt, Ncurses, OpenSSL, and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + GDB and Valgrind +
+
+
+
+ +
+
+ Must be installed before: + Ninja +
+
+
+
+ +
+
+ Optional dependencies: + + Berkeley DB, + libnsl, + SQLite, and + Tk +
+
+
+

+ Readline +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Gawk, GCC, + Glibc, Grep, Make, Ncurses, Patch, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Ncurses +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Bash, Bc, and Gawk +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Sed +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, Make, Sed, and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Acl, Attr, and Glibc +
+
+
+
+ +
+
+ Test suite depends on: + Diffutils and Gawk +
+
+
+
+ +
+
+ Must be installed before: + E2fsprogs, File, Libtool, and + Shadow +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Setuptools +

+
+ +
+
+ Installation depends on: + Python and Wheel +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Jinja2, MarkupSafe, and Meson +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Shadow +

+
+ +
+
+ Installation depends on: + Acl, Attr, Bash, Binutils, Coreutils, + Diffutils, Findutils, Gawk, GCC, Gettext, Glibc, Grep, + Libcap, Libxcrypt, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Libxcrypt +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Coreutils +
+
+
+
+ +
+
+ Optional dependencies: + + CrackLib and + Linux-PAM +
+
+
+

+ Sysklogd +

+
+ +
+
+ Installation depends on: + Binutils, Coreutils, GCC, Glibc, Make, + and Patch +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ SysVinit +

+
+ +
+
+ Installation depends on: + Binutils, Coreutils, GCC, Glibc, Make, + and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Tar +

+
+ +
+
+ Installation depends on: + Acl, Attr, Bash, Binutils, Bison, + Coreutils, GCC, Gettext, Glibc, Grep, Inetutils, Make, Sed, + and Texinfo +
+
+
+
+ +
+
+ Required at runtime: + Acl, Attr, Bzip2, Glibc, Gzip, and + Xz +
+
+
+
+ +
+
+ Test suite depends on: + Autoconf, Diffutils, Findutils, Gawk, + and Gzip +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Tcl +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Glibc, Grep, Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Texinfo +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, + Gettext, Glibc, Grep, Make, Ncurses, Patch, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc and Ncurses +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Udev +

+
+ +
+
+ Installation depends on: + Acl, Bash, Binutils, Coreutils, + Diffutils, Gawk, GCC, Glibc, Gperf, Grep, Jinja2, Libcap, + Libxcrypt, Meson, OpenSSL, Pkgconf, Sed, Util-linux, and + Zstd +
+
+
+
+ +
+
+ Required at runtime: + Acl, Glibc, Libcap, OpenSSL, and + Util-linux +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Util-linux +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Util-linux +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + File, Findutils, Gawk, GCC, Gettext, Glibc, Grep, Make, + Ncurses, Pkgconf, Sed, Udev, and + Zlib +
+
+
+
+ +
+
+ Required at runtime: + Glibc, Ncurses, Readline, Udev, and Zlib +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ + +
+

+ Vim +

+
+ +
+
+ Installation depends on: + Acl, Attr, Bash, Binutils, Coreutils, + Diffutils, GCC, Glibc, Grep, Make, Ncurses, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Acl, Attr, Glibc, Python, Ncurses, and + Tcl +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + None +
+
+
+
+ +
+
+ Optional dependencies: + + Xorg, + GTK+2, LessTif, + Ruby, and + GPM +
+
+
+

+ Wheel +

+
+ +
+
+ Installation depends on: + Python, Flit-core, and packaging +
+
+
+
+ +
+
+ Required at runtime: + Python +
+
+
+
+ +
+
+ Test suite depends on: + No test suite available +
+
+
+
+ +
+
+ Must be installed before: + Jinja2, MarkupSafe, Meson, and + Setuptools +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ XML::Parser +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Expat, GCC, + Glibc, Make, and Perl +
+
+
+
+ +
+
+ Required at runtime: + Expat, Glibc, and Perl +
+
+
+
+ +
+
+ Test suite depends on: + Perl +
+
+
+
+ +
+
+ Must be installed before: + Intltool +
+
+
+
+ +
+
+ Optional dependencies: + LWP::UserAgent +
+
+
+

+ Xz +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, Diffutils, + GCC, Glibc, and Make +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + File, GRUB, Kmod, Libelf, Man-DB, and + Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Zlib +

+
+ +
+
+ Installation depends on: + Bash, Binutils, Coreutils, GCC, Glibc, + Make, and Sed +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + File, Kmod, Libelf, Perl, and + Util-linux +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+

+ Zstd +

+
+ +
+
+ Installation depends on: + Binutils, Coreutils, GCC, Glibc, Gzip, + Lz4, Make, Xz, and Zlib +
+
+
+
+ +
+
+ Required at runtime: + Glibc +
+
+
+
+ +
+
+ Test suite depends on: + None +
+
+
+
+ +
+
+ Must be installed before: + Binutils, GCC, Libelf, and Udev +
+
+
+
+ +
+
+ Optional dependencies: + None +
+
+
+
+
+
+
+

+ Appendix D. Boot + and sysconfig scripts version-20250827 +

+
+
+
+
+

+ The scripts in this appendix are listed by the directory where + they normally reside. The order is /etc/rc.d/init.d, /etc/sysconfig, /etc/sysconfig/network-devices, and + /etc/sysconfig/network-devices/services. + Within each section, the files are listed in the order they are + normally called. +

+
+
+
+

+ D.1. /etc/rc.d/init.d/rc +

+
+
+
+
+

+ The rc script is the first + script called by init and + initiates the boot process. +

+
#!/bin/bash
+########################################################################
+# Begin rc
+#
+# Description : Main Run Level Control Script
+#
+# Authors     : Gerard Beekmans  - gerard AT linuxfromscratch D0T org
+#             : DJ Lucas - dj AT linuxfromscratch D0T org
+# Updates     : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#             : Pierre Labastie - pierre AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Notes       : Updates March 24th, 2022: new semantics of S/K files
+#               - Instead of testing that S scripts were K scripts in the
+#                 previous runlevel, test that they were not S scripts
+#               - Instead of testing that K scripts were S scripts in the
+#                 previous runlevel, test that they were not K scripts
+#               - S scripts in runlevel 0 or 6 are now run with
+#                "script start" (was "script stop" previously).
+########################################################################
+
+. /lib/lsb/init-functions
+
+print_error_msg()
+{
+   log_failure_msg
+   # $i is set when called
+   MSG="FAILURE:\n\nYou should not be reading this error message.\n\n"
+   MSG="${MSG}It means that an unforeseen error took place in\n"
+   MSG="${MSG}${i},\n"
+   MSG="${MSG}which exited with a return value of ${error_value}.\n"
+
+   MSG="${MSG}If you're able to track this error down to a bug in one of\n"
+   MSG="${MSG}the files provided by the ${DISTRO_MINI} book,\n"
+   MSG="${MSG}please be so kind to inform us at ${DISTRO_CONTACT}.\n"
+   log_failure_msg "${MSG}"
+
+   log_info_msg "Press Enter to continue..."
+   wait_for_user
+}
+
+check_script_status()
+{
+   # $i is set when called
+   if [ ! -f ${i} ]; then
+      log_warning_msg "${i} is not a valid symlink."
+      SCRIPT_STAT="1"
+   fi
+
+   if [ ! -x ${i} ]; then
+      log_warning_msg "${i} is not executable, skipping."
+      SCRIPT_STAT="1"
+   fi
+}
+
+run()
+{
+   if [ -z $interactive ]; then
+      ${1} ${2}
+      return $?
+   fi
+
+   while true; do
+      read -p "Run ${1} ${2} (Yes/no/continue)? " -n 1 runit
+      echo
+
+      case ${runit} in
+         c | C)
+            interactive=""
+            ${i} ${2}
+            ret=${?}
+            break;
+            ;;
+
+         n | N)
+            return 0
+            ;;
+
+         y | Y)
+            ${i} ${2}
+            ret=${?}
+            break
+            ;;
+      esac
+   done
+
+   return $ret
+}
+
+# Read any local settings/overrides
+[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site
+
+DISTRO=${DISTRO:-"Linux From Scratch"}
+DISTRO_CONTACT=${DISTRO_CONTACT:-"lfs-dev@lists.linuxfromscratch.org (Registration required)"}
+DISTRO_MINI=${DISTRO_MINI:-"LFS"}
+IPROMPT=${IPROMPT:-"no"}
+
+# These 3 signals will not cause our script to exit
+trap "" INT QUIT TSTP
+
+[ "${1}" != "" ] && runlevel=${1}
+
+if [ "${runlevel}" == "" ]; then
+   echo "Usage: ${0} <runlevel>" >&2
+   exit 1
+fi
+
+previous=${PREVLEVEL}
+[ "${previous}" == "" ] && previous=N
+
+if [ ! -d /etc/rc.d/rc${runlevel}.d ]; then
+   log_info_msg "/etc/rc.d/rc${runlevel}.d does not exist.\n"
+   exit 1
+fi
+
+if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; then IPROMPT="no"; fi
+
+# Note: In ${LOGLEVEL:-7}, it is ':' 'dash' '7', not minus 7
+if [ "$runlevel" == "S" ]; then
+   [ -r /etc/sysconfig/console ] && source /etc/sysconfig/console
+   dmesg -n "${LOGLEVEL:-7}"
+fi
+
+if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; then
+   # The total length of the distro welcome string, without escape codes
+   wlen=${wlen:-$(echo "Welcome to ${DISTRO}" | wc -c )}
+   welcome_message=${welcome_message:-"Welcome to ${INFO}${DISTRO}${NORMAL}"}
+
+   # The total length of the interactive string, without escape codes
+   ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )}
+   i_message=${i_message:-"Press '${FAILURE}I${NORMAL}' to enter interactive startup"}
+
+
+   # dcol and icol are spaces before the message to center the message
+   # on screen. itime is the amount of wait time for the user to press a key
+   wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))
+   icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 ))
+   itime=${itime:-"3"}
+
+   echo -e "\n\n"
+   echo -e "\\033[${wcol}G${welcome_message}"
+   echo -e "\\033[${icol}G${i_message}${NORMAL}"
+   echo ""
+   read -t "${itime}" -n 1 interactive 2>&1 > /dev/null
+fi
+
+# Make lower case
+[ "${interactive}" == "I" ] && interactive="i"
+[ "${interactive}" != "i" ] && interactive=""
+
+# Read the state file if it exists from runlevel S
+[ -r /run/interactive ] && source /run/interactive
+
+# Stop all services marked as K, except if marked as K in the previous
+# runlevel: it is the responsibility of the script to not try to kill
+# a non running service
+if [ "${previous}" != "N" ]; then
+   for i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null)
+   do
+      check_script_status
+      if [ "${SCRIPT_STAT}" == "1" ]; then
+         SCRIPT_STAT="0"
+         continue
+      fi
+
+      suffix=${i#/etc/rc.d/rc${runlevel}.d/K[0-9][0-9]}
+      [ -e /etc/rc.d/rc${previous}.d/K[0-9][0-9]$suffix ] && continue
+
+      run ${i} stop
+      error_value=${?}
+
+      if [ "${error_value}" != "0" ]; then print_error_msg; fi
+   done
+fi
+
+if [ "${previous}" == "N" ]; then export IN_BOOT=1; fi
+
+if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; then
+   touch /fastboot
+fi
+
+
+# Start all services marked as S in this runlevel, except if marked as
+# S in the previous runlevel
+# it is the responsibility of the script to not try to start an already running
+# service
+for i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null)
+do
+
+   if [ "${previous}" != "N" ]; then
+      suffix=${i#/etc/rc.d/rc${runlevel}.d/S[0-9][0-9]}
+      [ -e /etc/rc.d/rc${previous}.d/S[0-9][0-9]$suffix ] && continue
+   fi
+
+   check_script_status
+   if [ "${SCRIPT_STAT}" == "1" ]; then
+      SCRIPT_STAT="0"
+      continue
+   fi
+
+   run ${i} start
+
+   error_value=${?}
+
+   if [ "${error_value}" != "0" ]; then print_error_msg; fi
+done
+
+# Store interactive variable on switch from runlevel S and remove if not
+if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; then
+    echo "interactive=\"i\"" > /run/interactive
+else
+    rm -f /run/interactive 2> /dev/null
+fi
+
+# Copy the boot log on initial boot only
+if [ "${previous}" == "N" -a  "${runlevel}" != "S" ]; then
+   cat $BOOTLOG >> /var/log/boot.log
+
+   # Mark the end of boot
+   echo "--------" >> /var/log/boot.log
+
+   # Remove the temporary file
+   rm -f $BOOTLOG 2> /dev/null
+fi
+
+# End rc
+
+
+
+
+
+

+ D.2. /lib/lsb/init-functions +

+
+
+
+
+
#!/bin/sh
+########################################################################
+#
+# Begin /lib/lsb/init-funtions
+#
+# Description : Run Level Control Functions
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#             : DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Notes       : With code based on Matthias Benkmann's simpleinit-msb
+#               http://winterdrache.de/linux/newboot/index.html
+#
+#               The file should be located in /lib/lsb
+#
+########################################################################
+
+## Environmental setup
+# Setup default values for environment
+umask 022
+export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+
+## Set color commands, used via echo
+# Please consult `man console_codes for more information
+# under the "ECMA-48 Set Graphics Rendition" section
+#
+# Warning: when switching from a 8bit to a 9bit font,
+# the linux console will reinterpret the bold (1;) to
+# the top 256 glyphs of the 9bit font.  This does
+# not affect framebuffer consoles
+
+NORMAL="\\033[0;39m"         # Standard console grey
+SUCCESS="\\033[1;32m"        # Success is green
+WARNING="\\033[1;33m"        # Warnings are yellow
+FAILURE="\\033[1;31m"        # Failures are red
+INFO="\\033[1;36m"           # Information is light cyan
+BRACKET="\\033[1;34m"        # Brackets are blue
+
+# Use a colored prefix
+BMPREFIX="      "
+SUCCESS_PREFIX="${SUCCESS}  *  ${NORMAL} "
+FAILURE_PREFIX="${FAILURE}*****${NORMAL} "
+WARNING_PREFIX="${WARNING} *** ${NORMAL} "
+SKIP_PREFIX="${INFO}  S   ${NORMAL}"
+
+SUCCESS_SUFFIX="${BRACKET}[${SUCCESS}  OK  ${BRACKET}]${NORMAL}"
+FAILURE_SUFFIX="${BRACKET}[${FAILURE} FAIL ${BRACKET}]${NORMAL}"
+WARNING_SUFFIX="${BRACKET}[${WARNING} WARN ${BRACKET}]${NORMAL}"
+SKIP_SUFFIX="${BRACKET}[${INFO} SKIP ${BRACKET}]${NORMAL}"
+
+BOOTLOG=/run/bootlog
+KILLDELAY=3
+SCRIPT_STAT="0"
+
+# Set any user specified environment variables e.g. HEADLESS
+[ -r /etc/sysconfig/rc.site ]  && . /etc/sysconfig/rc.site
+
+# If HEADLESS is set, use that.  
+# If file descriptor 1 or 2 (stdout and stderr) is not open or
+# does not refer to a terminal, consider the script headless.
+[ ! -t 1 -o ! -t 2 ] && HEADLESS=${HEADLESS:-yes}
+
+if [ "x$HEADLESS" != "xyes" ]
+then 
+  ## Screen Dimensions
+  # Find current screen size
+  if [ -z "${COLUMNS}" ]; then
+    COLUMNS=$(stty size)
+    COLUMNS=${COLUMNS##* }
+  fi
+else
+   COLUMNS=80
+fi
+
+# When using remote connections, such as a serial port, stty size returns 0
+if [ "${COLUMNS}" = "0" ]; then
+   COLUMNS=80
+fi
+
+## Measurements for positioning result messages
+COL=$((${COLUMNS} - 8))
+WCOL=$((${COL} - 2))
+
+## Set Cursor Position Commands, used via echo
+SET_COL="\\033[${COL}G"      # at the $COL char
+SET_WCOL="\\033[${WCOL}G"    # at the $WCOL char
+CURS_UP="\\033[1A\\033[0G"   # Up one line, at the 0'th char
+CURS_ZERO="\\033[0G"
+
+################################################################################
+# start_daemon()                                                               #
+# Usage: start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args...]      #
+#                                                                              #
+# Purpose: This runs the specified program as a daemon                         #
+#                                                                              #
+# Inputs: -f: (force) run the program even if it is already running.           #
+#         -n nicelevel: specify a nice level. See 'man nice(1)'.               #
+#         -p pidfile: use the specified file to determine PIDs.                #
+#         pathname: the complete path to the specified program                 #
+#         args: additional arguments passed to the program (pathname)          #
+#                                                                              #
+# Return values (as defined by LSB exit codes):                                #
+#       0 - program is running or service is OK                                #
+#       1 - generic or unspecified error                                       #
+#       2 - invalid or excessive argument(s)                                   #
+#       5 - program is not installed                                           #
+################################################################################
+start_daemon()
+{
+    local force=""
+    local nice="0"
+    local pidfile=""
+    local pidlist=""
+    local retval=""
+
+    # Process arguments
+    while true
+    do
+        case "${1}" in
+
+            -f)
+                force="1"
+                shift 1
+                ;;
+
+            -n)
+                nice="${2}"
+                shift 2
+                ;;
+
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+
+            -*)
+                return 2
+                ;;
+
+            *)
+                program="${1}"
+                break
+                ;;
+        esac
+    done
+
+    # Check for a valid program
+    if [ ! -e "${program}" ]; then return 5; fi
+
+    # Execute
+    if [ -z "${force}" ]; then
+        if [ -z "${pidfile}" ]; then
+            # Determine the pid by discovery
+            pidlist=`pidofproc "${1}"`
+            retval="${?}"
+        else
+            # The PID file contains the needed PIDs
+            # Note that by LSB requirement, the path must be given to pidofproc,
+            # however, it is not used by the current implementation or standard.
+            pidlist=`pidofproc -p "${pidfile}" "${1}"`
+            retval="${?}"
+        fi
+
+        # Return a value ONLY
+        # It is the init script's (or distribution's functions) responsibility
+        # to log messages!
+        case "${retval}" in
+
+            0)
+                # Program is already running correctly, this is a
+                # successful start.
+                return 0
+                ;;
+
+            1)
+                # Program is not running, but an invalid pid file exists
+                # remove the pid file and continue
+                rm -f "${pidfile}"
+                ;;
+
+            3)
+                # Program is not running and no pidfile exists
+                # do nothing here, let start_deamon continue.
+                ;;
+
+            *)
+                # Others as returned by status values shall not be interpreted
+                # and returned as an unspecified error.
+                return 1
+                ;;
+        esac
+    fi
+
+    # Do the start!
+    nice -n "${nice}" "${@}"
+}
+
+################################################################################
+# killproc()                                                                   #
+# Usage: killproc [-p pidfile] pathname [signal]                               #
+#                                                                              #
+# Purpose: Send control signals to running processes                           #
+#                                                                              #
+# Inputs: -p pidfile, uses the specified pidfile                               #
+#         pathname, pathname to the specified program                          #
+#         signal, send this signal to pathname                                 #
+#                                                                              #
+# Return values (as defined by LSB exit codes):                                #
+#       0 - program (pathname) has stopped/is already stopped or a             #
+#           running program has been sent specified signal and stopped         #
+#           successfully                                                       #
+#       1 - generic or unspecified error                                       #
+#       2 - invalid or excessive argument(s)                                   #
+#       5 - program is not installed                                           #
+#       7 - program is not running and a signal was supplied                   #
+################################################################################
+killproc()
+{
+    local pidfile
+    local program
+    local prefix
+    local progname
+    local signal="-TERM"
+    local fallback="-KILL"
+    local nosig
+    local pidlist
+    local retval
+    local pid
+    local delay="30"
+    local piddead
+    local dtime
+
+    # Process arguments
+    while true; do
+        case "${1}" in
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+
+             *)
+                 program="${1}"
+                 if [ -n "${2}" ]; then
+                     signal="${2}"
+                     fallback=""
+                 else
+                     nosig=1
+                 fi
+
+                 # Error on additional arguments
+                 if [ -n "${3}" ]; then
+                     return 2
+                 else
+                     break
+                 fi
+                 ;;
+        esac
+    done
+
+    # Check for a valid program
+    if [ ! -e "${program}" ]; then return 5; fi
+
+    # Check for a valid signal
+    check_signal "${signal}"
+    if [ "${?}" -ne "0" ]; then return 2; fi
+
+    # Get a list of pids
+    if [ -z "${pidfile}" ]; then
+        # determine the pid by discovery
+        pidlist=`pidofproc "${1}"`
+        retval="${?}"
+    else
+        # The PID file contains the needed PIDs
+        # Note that by LSB requirement, the path must be given to pidofproc,
+        # however, it is not used by the current implementation or standard.
+        pidlist=`pidofproc -p "${pidfile}" "${1}"`
+        retval="${?}"
+    fi
+
+    # Return a value ONLY
+    # It is the init script's (or distribution's functions) responsibility
+    # to log messages!
+    case "${retval}" in
+
+        0)
+            # Program is running correctly
+            # Do nothing here, let killproc continue.
+            ;;
+
+        1)
+            # Program is not running, but an invalid pid file exists
+            # Remove the pid file.
+
+            progname=${program##*/}
+
+            if [[ -e "/run/${progname}.pid" ]]; then
+                pidfile="/run/${progname}.pid"
+                rm -f "${pidfile}"
+            fi
+
+            # This is only a success if no signal was passed.
+            if [ -n "${nosig}" ]; then
+                return 0
+            else
+                return 7
+            fi
+            ;;
+
+        3)
+            # Program is not running and no pidfile exists
+            # This is only a success if no signal was passed.
+            if [ -n "${nosig}" ]; then
+                return 0
+            else
+                return 7
+            fi
+            ;;
+
+        *)
+            # Others as returned by status values shall not be interpreted
+            # and returned as an unspecified error.
+            return 1
+            ;;
+    esac
+
+    # Perform different actions for exit signals and control signals
+    check_sig_type "${signal}"
+
+    if [ "${?}" -eq "0" ]; then # Signal is used to terminate the program
+
+        # Account for empty pidlist (pid file still exists and no
+        # signal was given)
+        if [ "${pidlist}" != "" ]; then
+
+            # Kill the list of pids
+            for pid in ${pidlist}; do
+
+                kill -0 "${pid}" 2> /dev/null
+
+                if [ "${?}" -ne "0" ]; then
+                    # Process is dead, continue to next and assume all is well
+                    continue
+                else
+                    kill "${signal}" "${pid}" 2> /dev/null
+
+                    # Wait up to ${delay}/10 seconds to for "${pid}" to
+                    # terminate in 10ths of a second
+
+                    while [ "${delay}" -ne "0" ]; do
+                        kill -0 "${pid}" 2> /dev/null || piddead="1"
+                        if [ "${piddead}" = "1" ]; then break; fi
+                        sleep 0.1
+                        delay="$(( ${delay} - 1 ))"
+                    done
+
+                    # If a fallback is set, and program is still running, then
+                    # use the fallback
+                    if [ -n "${fallback}" -a "${piddead}" != "1" ]; then
+                        kill "${fallback}" "${pid}" 2> /dev/null
+                        sleep 1
+                        # Check again, and fail if still running
+                        kill -0 "${pid}" 2> /dev/null && return 1
+                    fi
+                fi
+            done
+        fi
+
+        # Check for and remove stale PID files.
+        if [ -z "${pidfile}" ]; then
+            # Find the basename of $program
+            prefix=`echo "${program}" | sed 's/[^/]*$//'`
+            progname=`echo "${program}" | sed "s@${prefix}@@"`
+
+            if [ -e "/run/${progname}.pid" ]; then
+                rm -f "/run/${progname}.pid" 2> /dev/null
+            fi
+        else
+            if [ -e "${pidfile}" ]; then rm -f "${pidfile}" 2> /dev/null; fi
+        fi
+
+    # For signals that do not expect a program to exit, simply
+    # let kill do its job, and evaluate kill's return for value
+
+    else # check_sig_type - signal is not used to terminate program
+        for pid in ${pidlist}; do
+            kill "${signal}" "${pid}"
+            if [ "${?}" -ne "0" ]; then return 1; fi
+        done
+    fi
+}
+
+################################################################################
+# pidofproc()                                                                  #
+# Usage: pidofproc [-p pidfile] pathname                                       #
+#                                                                              #
+# Purpose: This function returns one or more pid(s) for a particular daemon    #
+#                                                                              #
+# Inputs: -p pidfile, use the specified pidfile instead of pidof               #
+#         pathname, path to the specified program                              #
+#                                                                              #
+# Return values (as defined by LSB status codes):                              #
+#       0 - Success (PIDs to stdout)                                           #
+#       1 - Program is dead, PID file still exists (remaining PIDs output)     #
+#       3 - Program is not running (no output)                                 #
+################################################################################
+pidofproc()
+{
+    local pidfile
+    local program
+    local prefix
+    local progname
+    local pidlist
+    local lpids
+    local exitstatus="0"
+
+    # Process arguments
+    while true; do
+        case "${1}" in
+
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+
+            *)
+                program="${1}"
+                if [ -n "${2}" ]; then
+                    # Too many arguments
+                    # Since this is status, return unknown
+                    return 4
+                else
+                    break
+                fi
+                ;;
+        esac
+    done
+
+    # If a PID file is not specified, try and find one.
+    if [ -z "${pidfile}" ]; then
+        # Get the program's basename
+        prefix=`echo "${program}" | sed 's/[^/]*$//'`
+
+        if [ -z "${prefix}" ]; then
+           progname="${program}"
+        else
+           progname=`echo "${program}" | sed "s@${prefix}@@"`
+        fi
+
+        # If a PID file exists with that name, assume that is it.
+        if [ -e "/run/${progname}.pid" ]; then
+            pidfile="/run/${progname}.pid"
+        fi
+    fi
+
+    # If a PID file is set and exists, use it.
+    if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
+        # Use the value in the first line of the pidfile
+        pidlist=`/bin/head -n1 "${pidfile}"`
+    else
+        # Use pidof
+        pidlist=`pidof "${program}"`
+    fi
+
+    # Figure out if all listed PIDs are running.
+    for pid in ${pidlist}; do
+        kill -0 ${pid} 2> /dev/null
+
+        if [ "${?}" -eq "0" ]; then
+            lpids="${lpids}${pid} "
+        else
+            exitstatus="1"
+        fi
+    done
+
+    if [ -z "${lpids}" -a ! -f "${pidfile}" ]; then
+        return 3
+    else
+        echo "${lpids}"
+        return "${exitstatus}"
+    fi
+}
+
+################################################################################
+# statusproc()                                                                 #
+# Usage: statusproc [-p pidfile] pathname                                      #
+#                                                                              #
+# Purpose: This function prints the status of a particular daemon to stdout    #
+#                                                                              #
+# Inputs: -p pidfile, use the specified pidfile instead of pidof               #
+#         pathname, path to the specified program                              #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Status printed                                                     #
+#       1 - Input error. The daemon to check was not specified.                #
+################################################################################
+statusproc()
+{
+   local pidfile
+   local pidlist
+
+   if [ "${#}" = "0" ]; then
+      echo "Usage: statusproc [-p pidfle] {program}"
+      exit 1
+   fi
+
+   # Process arguments
+   while true; do
+       case "${1}" in
+
+           -p)
+               pidfile="${2}"
+               shift 2
+               ;;
+
+           *)
+               if [ -n "${2}" ]; then
+                   echo "Too many arguments"
+                   return 1
+               else
+                   break
+               fi
+               ;;
+       esac
+   done
+
+   if [ -n "${pidfile}" ]; then
+      pidlist=`pidofproc -p "${pidfile}" $@`
+   else
+      pidlist=`pidofproc $@`
+   fi
+
+   # Trim trailing blanks
+   pidlist=`echo "${pidlist}" | sed -r 's/ +$//'`
+
+   base="${1##*/}"
+
+   if [ -n "${pidlist}" ]; then
+      /bin/echo -e "${INFO}${base} is running with Process" \
+         "ID(s) ${pidlist}.${NORMAL}"
+   else
+      if [ -n "${base}" -a -e "/run/${base}.pid" ]; then
+         /bin/echo -e "${WARNING}${1} is not running but" \
+            "/run/${base}.pid exists.${NORMAL}"
+      else
+         if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
+            /bin/echo -e "${WARNING}${1} is not running" \
+               "but ${pidfile} exists.${NORMAL}"
+         else
+            /bin/echo -e "${INFO}${1} is not running.${NORMAL}"
+         fi
+      fi
+   fi
+}
+
+################################################################################
+# timespec()                                                                   #
+#                                                                              #
+# Purpose: An internal utility function to format a timestamp                  #
+#          a boot log file.  Sets the STAMP variable.                          #
+#                                                                              #
+# Return value: Not used                                                       #
+################################################################################
+timespec()
+{
+   STAMP="$(echo `date +"%b %d %T %:z"` `hostname`) "
+   return 0
+}
+
+################################################################################
+# log_success_msg()                                                            #
+# Usage: log_success_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a successful status message to the screen and                 #
+#          a boot log file.                                                    #
+#                                                                              #
+# Inputs: $@ - Message                                                         #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_success_msg()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then 
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo -e "${logmessage} OK" 
+    fi
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+
+    timespec
+    /bin/echo -e "${STAMP} ${logmessage} OK" >> ${BOOTLOG}
+
+    return 0
+}
+
+log_success_msg2()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then 
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
+    else
+      echo " OK" 
+    fi
+
+    echo " OK" >> ${BOOTLOG}
+
+    return 0
+}
+
+################################################################################
+# log_failure_msg()                                                            #
+# Usage: log_failure_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a failure status message to the screen and                    #
+#          a boot log file.                                                    #
+#                                                                              #
+# Inputs: $@ - Message                                                         #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_failure_msg()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then 
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo -e "${logmessage} FAIL"
+    fi
+
+    # Strip non-printable characters from log file
+
+    timespec
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    /bin/echo -e "${STAMP} ${logmessage} FAIL" >> ${BOOTLOG}
+
+    return 0
+}
+
+log_failure_msg2()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then 
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
+    else
+      echo "FAIL"
+    fi
+
+    echo "FAIL" >> ${BOOTLOG}
+
+    return 0
+}
+
+################################################################################
+# log_warning_msg()                                                            #
+# Usage: log_warning_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a warning status message to the screen and                    #
+#          a boot log file.                                                    #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_warning_msg()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${WARNING_PREFIX}${SET_COL}${WARNING_SUFFIX}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo -e "${logmessage} WARN"
+    fi 
+
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    timespec
+    /bin/echo -e "${STAMP} ${logmessage} WARN" >> ${BOOTLOG}
+
+    return 0
+}
+
+log_skip_msg()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then
+      /bin/echo -n -e "${BMPREFIX}${@}"
+      /bin/echo -e "${CURS_ZERO}${SKIP_PREFIX}${SET_COL}${SKIP_SUFFIX}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo "SKIP"
+    fi
+
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    /bin/echo "SKIP" >> ${BOOTLOG}
+
+    return 0
+}
+
+################################################################################
+# log_info_msg()                                                               #
+# Usage: log_info_msg message                                                  #
+#                                                                              #
+# Purpose: Print an information message to the screen and                      #
+#          a boot log file.  Does not print a trailing newline character.      #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_info_msg()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then
+      /bin/echo -n -e "${BMPREFIX}${@}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo -n -e "${logmessage}"
+    fi
+
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    timespec
+    /bin/echo -n -e "${STAMP} ${logmessage}" >> ${BOOTLOG}
+
+    return 0
+}
+
+log_info_msg2()
+{
+    if [ "x$HEADLESS" != "xyes" ]
+    then
+      /bin/echo -n -e "${@}"
+    else
+      logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+      /bin/echo -n -e "${logmessage}"
+    fi
+
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    /bin/echo -n -e "${logmessage}" >> ${BOOTLOG}
+
+    return 0
+}
+
+################################################################################
+# evaluate_retval()                                                            #
+# Usage: Evaluate a return value and print success or failure as appropriate  #
+#                                                                              #
+# Purpose: Convenience function to terminate an info message                   #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+evaluate_retval()
+{
+   local error_value="${?}"
+
+   if [ ${error_value} = 0 ]; then
+      log_success_msg2
+   else
+      log_failure_msg2
+   fi
+}
+
+################################################################################
+# check_signal()                                                               #
+# Usage: check_signal [ -{signal} ]                                            #
+#                                                                              #
+# Purpose: Check for a valid signal.  This is not defined by any LSB draft,    #
+#          however, it is required to check the signals to determine if the    #
+#          signals chosen are invalid arguments to the other functions.        #
+#                                                                              #
+# Inputs: Accepts a single string value in the form of -{signal}               #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Success (signal is valid                                           #
+#       1 - Signal is not valid                                                #
+################################################################################
+check_signal()
+{
+    local valsig
+
+    # Add error handling for invalid signals
+    valsig=" -ALRM -HUP -INT -KILL -PIPE -POLL -PROF -TERM -USR1 -USR2"
+    valsig="${valsig} -VTALRM -STKFLT -PWR -WINCH -CHLD -URG -TSTP -TTIN"
+    valsig="${valsig} -TTOU -STOP -CONT -ABRT -FPE -ILL -QUIT -SEGV -TRAP"
+    valsig="${valsig} -SYS -EMT -BUS -XCPU -XFSZ -0 -1 -2 -3 -4 -5 -6 -8 -9"
+    valsig="${valsig} -11 -13 -14 -15 "
+
+    echo "${valsig}" | grep -- " ${1} " > /dev/null
+
+    if [ "${?}" -eq "0" ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+################################################################################
+# check_sig_type()                                                             #
+# Usage: check_signal [ -{signal} | {signal} ]                                 #
+#                                                                              #
+# Purpose: Check if signal is a program termination signal or a control signal #
+#          This is not defined by any LSB draft, however, it is required to    #
+#          check the signals to determine if they are intended to end a        #
+#          program or simply to control it.                                    #
+#                                                                              #
+# Inputs: Accepts a single string value in the form or -{signal} or {signal}   #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Signal is used for program termination                             #
+#       1 - Signal is used for program control                                 #
+################################################################################
+check_sig_type()
+{
+    local valsig
+
+    # The list of termination signals (limited to generally used items)
+    valsig=" -ALRM -INT -KILL -TERM -PWR -STOP -ABRT -QUIT -2 -3 -6 -9 -14 -15 "
+
+    echo "${valsig}" | grep -- " ${1} " > /dev/null
+
+    if [ "${?}" -eq "0" ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+################################################################################
+# wait_for_user()                                                              #
+#                                                                              #
+# Purpose: Wait for the user to respond if not a headless system               #
+#                                                                              #
+################################################################################
+wait_for_user()
+{
+   # Wait for the user by default
+   [ "${HEADLESS=0}" = "0" ] && read ENTER
+   return 0
+}
+
+################################################################################
+# is_true()                                                                    #
+#                                                                              #
+# Purpose: Utility to test if a variable is true | yes | 1                     #
+#                                                                              #
+################################################################################
+is_true()
+{
+   [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ] ||  [ "$1" = "y" ] ||
+   [ "$1" = "t" ]
+}
+
+# End /lib/lsb/init-functions
+
+
+
+
+
+

+ D.3. /etc/rc.d/init.d/mountvirtfs +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin mountvirtfs
+#
+# Description : Ensure proc, sysfs, run, and dev are mounted
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#               Xi Ruoyao - xry111@xry111.site
+#
+# Version     : LFS 12.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            mountvirtfs
+# Required-Start:      $first
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Mounts various special fs needed at start
+# Description:         Mounts /sys and /proc virtual (kernel) filesystems.
+#                      Mounts /run (tmpfs) and /dev (devtmpfs).
+#                      This is done only if they are not already mounted.
+#                      with the kernel config proposed in the book, dev
+#                      should be automatically mounted by the kernel.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      # Make sure /run is available before logging any messages
+      if ! mountpoint /run >/dev/null; then
+         mount /run || failed=1
+      fi
+
+      mkdir -p   /run/lock 
+      chmod 1777 /run/lock
+
+      log_info_msg "Mounting virtual file systems: ${INFO}/run"
+
+      if ! mountpoint /proc >/dev/null; then
+         log_info_msg2 " ${INFO}/proc"
+         mount -o nosuid,noexec,nodev /proc || failed=1
+      fi
+
+      if ! mountpoint /sys >/dev/null; then
+         log_info_msg2 " ${INFO}/sys"
+         mount -o nosuid,noexec,nodev /sys || failed=1
+      fi
+
+      if ! mountpoint /dev >/dev/null; then
+         log_info_msg2 " ${INFO}/dev"
+         mount -o mode=0755,nosuid /dev  || failed=1
+      fi
+
+      mkdir -p /dev/shm
+      log_info_msg2 " ${INFO}/dev/shm"
+      mount -o nosuid,nodev /dev/shm || failed=1
+
+      mkdir -p /sys/fs/cgroup
+      log_info_msg2 " ${INFO}/sys/fs/cgroup"
+      mount -o nosuid,noexec,nodev /sys/fs/cgroup || failed=1
+
+      (exit ${failed})
+      evaluate_retval
+      if [ "${failed}" = 1 ]; then
+         exit 1
+      fi
+
+      log_info_msg "Create symlinks in /dev targeting /proc: ${INFO}/dev/stdin"
+      ln -sf /proc/self/fd/0 /dev/stdin  || failed=1
+
+      log_info_msg2 " ${INFO}/dev/stdout"
+      ln -sf /proc/self/fd/1 /dev/stdout || failed=1
+
+      log_info_msg2 " ${INFO}/dev/stderr"
+      ln -sf /proc/self/fd/2 /dev/stderr || failed=1
+
+      log_info_msg2 " ${INFO}/dev/fd"
+      ln -sfn /proc/self/fd  /dev/fd     || failed=1
+
+      if [ -e /proc/kcore ]; then
+         log_info_msg2 " ${INFO}/dev/core"
+         ln -sf /proc/kcore  /dev/core   || failed=1
+      fi
+
+      (exit ${failed})
+      evaluate_retval
+      exit $failed
+      ;;
+
+   *)
+      echo "Usage: ${0} {start}"
+      exit 1
+      ;;
+esac
+
+# End mountvirtfs
+
+
+
+
+
+

+ D.4. /etc/rc.d/init.d/modules +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin modules
+#
+# Description : Module auto-loading script
+#
+# Authors     : Zack Winkles
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            modules
+# Required-Start:      mountvirtfs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Loads required modules.
+# Description:         Loads modules listed in /etc/sysconfig/modules.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+# Assure that the kernel has module support.
+[ -e /proc/modules ] || exit 0
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      # Exit if there's no modules file or there are no
+      # valid entries
+      [ -r /etc/sysconfig/modules ]             || exit 0
+      grep -E -qv '^($|#)' /etc/sysconfig/modules || exit 0
+
+      log_info_msg "Loading modules:"
+
+      # Only try to load modules if the user has actually given us
+      # some modules to load.
+
+      while read module args; do
+
+         # Ignore comments and blank lines.
+         case "$module" in
+            ""|"#"*) continue ;;
+         esac
+
+         # Attempt to load the module, passing any arguments provided.
+         modprobe ${module} ${args} >/dev/null
+
+         # Print the module name if successful, otherwise take note.
+         if [ $? -eq 0 ]; then
+            log_info_msg2 " ${module}"
+         else
+            failedmod="${failedmod} ${module}"
+         fi
+      done < /etc/sysconfig/modules
+
+      # Print a message about successfully loaded modules on the correct line.
+      log_success_msg2
+
+      # Print a failure message with a list of any modules that
+      # may have failed to load.
+      if [ -n "${failedmod}" ]; then
+         log_failure_msg "Failed to load modules:${failedmod}"
+         exit 1
+      fi
+      ;;
+
+   *)
+      echo "Usage: ${0} {start}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End modules
+
+
+
+
+
+

+ D.5. /etc/rc.d/init.d/udev +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin udev
+#
+# Description : Udev cold-plugging script
+#
+# Authors     : Zack Winkles, Alexander E. Patrakov
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#               Xi Ruoyao - xry111@xry111.site
+#
+# Version     : LFS 12.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            udev $time
+# Required-Start:      localnet
+# Should-Start:        modules
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Populates /dev with device nodes.
+# Description:         Mounts a tempfs on /dev and starts the udevd daemon.
+#                      Device nodes are created as defined by udev.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Populating /dev with device nodes... "
+      if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
+         log_failure_msg2
+         msg="FAILURE:\n\nUnable to create "
+         msg="${msg}devices without a SysFS filesystem\n\n"
+         msg="${msg}After you press Enter, this system "
+         msg="${msg}will be halted and powered off.\n\n"
+         log_info_msg "$msg"
+         log_info_msg "Press Enter to continue..."
+         wait_for_user
+         /etc/rc.d/init.d/halt start
+      fi
+
+      # Start the udev daemon to continually watch for, and act on,
+      # uevents
+      SYSTEMD_LOG_TARGET=kmsg /sbin/udevd --daemon
+
+      # Now traverse /sys in order to "coldplug" devices that have
+      # already been discovered
+      /bin/udevadm trigger --action=add    --type=subsystems
+      /bin/udevadm trigger --action=add    --type=devices
+      /bin/udevadm trigger --action=change --type=devices
+
+      # Now wait for udevd to process the uevents we triggered
+      if ! is_true "$OMIT_UDEV_SETTLE"; then
+         /bin/udevadm settle
+      fi
+
+      # If any LVM based partitions are on the system, ensure they
+      # are activated so they can be used.
+      if [ -x /sbin/vgchange ]; then /sbin/vgchange -a y >/dev/null; fi
+
+      log_success_msg2
+      ;;
+
+   *)
+      echo "Usage ${0} {start}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End udev
+
+
+
+
+
+

+ D.6. /etc/rc.d/init.d/swap +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin swap
+#
+# Description : Swap Control Script
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            swap
+# Required-Start:      udev
+# Should-Start:        modules
+# Required-Stop:       localnet
+# Should-Stop:         $local_fs
+# Default-Start:       S
+# Default-Stop:        0 6
+# Short-Description:   Activates and deactivates swap partitions.
+# Description:         Activates and deactivates swap partitions defined in
+#                      /etc/fstab.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Activating all swap files/partitions..."
+      swapon -a
+      evaluate_retval
+      ;;
+
+   stop)
+      log_info_msg "Deactivating all swap files/partitions..."
+      swapoff -a
+      evaluate_retval
+      ;;
+
+   restart)
+      ${0} stop
+      sleep 1
+      ${0} start
+      ;;
+
+   status)
+      log_success_msg "Retrieving swap status."
+      swapon -s
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop|restart|status}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End swap
+
+
+
+
+
+

+ D.7. /etc/rc.d/init.d/setclock +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin setclock
+#
+# Description : Setting Linux Clock
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:
+# Required-Start:
+# Should-Start:        modules
+# Required-Stop:
+# Should-Stop:         $syslog
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Stores and restores time from the hardware clock
+# Description:         On boot, system time is obtained from hwclock.  The
+#                      hardware clock can also be set on shutdown.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+[ -r /etc/sysconfig/clock ] && . /etc/sysconfig/clock
+
+
+case "${UTC}" in
+   yes|true|1)
+      CLOCKPARAMS="${CLOCKPARAMS} --utc"
+      ;;
+
+   no|false|0)
+      CLOCKPARAMS="${CLOCKPARAMS} --localtime"
+      ;;
+
+esac
+
+case ${1} in
+   start)
+      hwclock --hctosys ${CLOCKPARAMS} >/dev/null
+      ;;
+
+   stop)
+      log_info_msg "Setting hardware clock..."
+      hwclock --systohc ${CLOCKPARAMS} >/dev/null
+      evaluate_retval
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop}"
+      exit 1
+      ;;
+
+esac
+
+exit 0
+
+
+
+
+
+

+ D.8. /etc/rc.d/init.d/checkfs +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin checkfs
+#
+# Description : File System Check
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               A. Luebke - luebke@users.sourceforge.net
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Based on checkfs script from LFS-3.1 and earlier.
+#
+# From man fsck
+# 0    - No errors
+# 1    - File system errors corrected
+# 2    - System should be rebooted
+# 4    - File system errors left uncorrected
+# 8    - Operational error
+# 16   - Usage or syntax error
+# 32   - Fsck canceled by user request
+# 128  - Shared library error
+#
+#########################################################################
+
+### BEGIN INIT INFO
+# Provides:            checkfs
+# Required-Start:      udev swap
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Checks local filesystems before mounting.
+# Description:         Checks local filesystems before mounting.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      if [ -f /fastboot ]; then
+         msg="/fastboot found, will omit "
+         msg="${msg} file system checks as requested.\n"
+         log_info_msg "${msg}"
+         exit 0
+      fi
+
+      log_info_msg "Mounting root file system in read-only mode... "
+      mount -n -o remount,ro / >/dev/null
+
+      if [ ${?} != 0 ]; then
+         log_failure_msg2
+         msg="\n\nCannot check root "
+         msg="${msg}filesystem because it could not be mounted "
+         msg="${msg}in read-only mode.\n\n"
+         msg="${msg}After you press Enter, this system will be "
+         msg="${msg}halted and powered off.\n\n"
+         log_failure_msg "${msg}"
+
+         log_info_msg "Press Enter to continue..."
+         wait_for_user
+         /etc/rc.d/init.d/halt start
+      else
+         log_success_msg2
+      fi
+
+      if [ -f /forcefsck ]; then
+         msg="/forcefsck found, forcing file"
+         msg="${msg} system checks as requested."
+         log_success_msg "$msg"
+         options="-f"
+      else
+         options=""
+      fi
+
+      log_info_msg "Checking file systems..."
+      # Note: -a option used to be -p; but this fails e.g. on fsck.minix
+      if is_true "$VERBOSE_FSCK"; then
+        fsck ${options} -a -A -C -T
+      else
+        fsck ${options} -a -A -C -T >/dev/null
+      fi
+
+      error_value=${?}
+
+      if [ "${error_value}" = 0 ]; then
+         log_success_msg2
+      fi
+
+      if [ "${error_value}" = 1 ]; then
+         msg="\nWARNING:\n\nFile system errors "
+         msg="${msg}were found and have been corrected.\n"
+         msg="${msg}      You may want to double-check that "
+         msg="${msg}everything was fixed properly."
+         log_warning_msg "$msg"
+      fi
+
+      if [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then
+         msg="\nWARNING:\n\nFile system errors "
+         msg="${msg}were found and have been "
+         msg="${msg}corrected, but the nature of the "
+         msg="${msg}errors require this system to be rebooted.\n\n"
+         msg="${msg}After you press enter, "
+         msg="${msg}this system will be rebooted\n\n"
+         log_failure_msg "$msg"
+
+         log_info_msg "Press Enter to continue..."
+         wait_for_user
+         reboot -f
+      fi
+
+      if [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
+         msg="\nFAILURE:\n\nFile system errors "
+         msg="${msg}were encountered that could not be "
+         msg="${msg}fixed automatically.\nThis system "
+         msg="${msg}cannot continue to boot and will "
+         msg="${msg}therefore be halted until those "
+         msg="${msg}errors are fixed manually by a "
+         msg="${msg}System Administrator.\n\n"
+         msg="${msg}After you press Enter, this system will be "
+         msg="${msg}halted and powered off.\n\n"
+         log_failure_msg "$msg"
+
+         log_info_msg "Press Enter to continue..."
+         wait_for_user
+         /etc/rc.d/init.d/halt start
+      fi
+
+      if [ "${error_value}" -ge 16 ]; then
+         msg="FAILURE:\n\nUnexpected failure "
+         msg="${msg}running fsck.  Exited with error "
+         msg="${msg} code: ${error_value}.\n"
+         log_info_msg $msg
+         exit ${error_value}
+      fi
+
+      exit 0
+      ;;
+   *)
+      echo "Usage: ${0} {start}"
+      exit 1
+      ;;
+esac
+
+# End checkfs
+
+
+
+
+
+

+ D.9. /etc/rc.d/init.d/mountfs +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin mountfs
+#
+# Description : File System Mount Script
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            $local_fs
+# Required-Start:      udev checkfs
+# Should-Start:        modules
+# Required-Stop:       localnet
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:        0 6
+# Short-Description:   Mounts/unmounts local filesystems defined in /etc/fstab.
+# Description:         Remounts root filesystem read/write and mounts all
+#                      remaining local filesystems defined in /etc/fstab on
+#                      start.  Remounts root filesystem read-only and unmounts
+#                      remaining filesystems on stop.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Remounting root file system in read-write mode..."
+      mount --options remount,rw / >/dev/null
+      evaluate_retval
+
+      # Remove fsck-related file system watermarks.
+      rm -f /fastboot /forcefsck
+
+      # Make sure /dev/pts exists
+      mkdir -p /dev/pts
+
+      # This will mount all filesystems that do not have _netdev in
+      # their option list.  _netdev denotes a network filesystem.
+
+      log_info_msg "Mounting remaining file systems..."
+      failed=0
+      mount --all --test-opts no_netdev >/dev/null || failed=1
+      evaluate_retval
+      exit $failed
+      ;;
+
+   stop)
+      # Don't unmount virtual file systems like /run
+      log_info_msg "Unmounting all other currently mounted file systems..."
+      # Ensure any loop devices are removed
+      losetup -D
+      umount --all --detach-loop --read-only \
+             --types notmpfs,nosysfs,nodevtmpfs,noproc,nodevpts >/dev/null
+      evaluate_retval
+
+      # Make sure / is mounted read only (umount bug)
+      mount --options remount,ro /
+
+      # Make all LVM volume groups unavailable, if appropriate
+      # This fails if swap or / are on an LVM partition
+      #if [ -x /sbin/vgchange ]; then /sbin/vgchange -an > /dev/null; fi
+      if [ -r /etc/mdadm.conf ]; then
+         log_info_msg "Mark arrays as clean..."
+         mdadm --wait-clean --scan
+         evaluate_retval
+      fi
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop}"
+      exit 1
+      ;;
+esac
+
+# End mountfs
+
+
+
+
+
+

+ D.10. /etc/rc.d/init.d/udev_retry +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin udev_retry
+#
+# Description : Udev cold-plugging script (retry)
+#
+# Authors     : Alexander E. Patrakov
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#               Bryan Kadzban -
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            udev_retry
+# Required-Start:      udev
+# Should-Start:        $local_fs cleanfs
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Replays failed uevents and creates additional devices.
+# Description:         Replays any failed uevents that were skipped due to
+#                      slow hardware initialization, and creates those needed
+#                      device nodes
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Retrying failed uevents, if any..."
+
+      rundir=/run/udev
+      # From Debian: "copy the rules generated before / was mounted
+      # read-write":
+
+      for file in ${rundir}/tmp-rules--*; do
+         dest=${file##*tmp-rules--}
+         [ "$dest" = '*' ] && break
+         cat $file >> /etc/udev/rules.d/$dest
+         rm -f $file
+      done
+
+      # Re-trigger the uevents that may have failed,
+      # in hope they will succeed now
+      /bin/sed -e 's/#.*$//' /etc/sysconfig/udev_retry | /bin/grep -v '^$' | \
+      while read line ; do
+         for subsystem in $line ; do
+            /bin/udevadm trigger --subsystem-match=$subsystem --action=add
+         done
+      done
+
+      # Now wait for udevd to process the uevents we triggered
+      if ! is_true "$OMIT_UDEV_RETRY_SETTLE"; then
+         /bin/udevadm settle
+      fi
+
+      evaluate_retval
+      ;;
+
+   *)
+      echo "Usage ${0} {start}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End udev_retry
+
+
+
+
+
+

+ D.11. /etc/rc.d/init.d/cleanfs +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin cleanfs
+#
+# Description : Clean file system
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            cleanfs
+# Required-Start:      $local_fs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Cleans temporary directories early in the boot process.
+# Description:         Cleans temporary directories /run, /var/lock, and
+#                      optionally, /tmp.  cleanfs also creates /run/utmp
+#                      and any files defined in /etc/sysconfig/createfiles.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Function to create files/directory on boot.
+create_files()
+{
+   # Input to file descriptor 9 and output to stdin (redirection)
+   exec 9>&0 < /etc/sysconfig/createfiles
+
+   while read name type perm usr grp dtype maj min junk
+   do
+      # Ignore comments and blank lines.
+      case "${name}" in
+         ""|\#*) continue ;;
+      esac
+
+      # Ignore existing files.
+      if [ ! -e "${name}" ]; then
+         # Create stuff based on its type.
+         case "${type}" in
+            dir)
+               mkdir "${name}"
+               ;;
+            file)
+               :> "${name}"
+               ;;
+            dev)
+               case "${dtype}" in
+                  char)
+                     mknod "${name}" c ${maj} ${min}
+                     ;;
+                  block)
+                     mknod "${name}" b ${maj} ${min}
+                     ;;
+                  pipe)
+                     mknod "${name}" p
+                     ;;
+                  *)
+                     log_warning_msg "\nUnknown device type: ${dtype}"
+                     ;;
+               esac
+               ;;
+            *)
+               log_warning_msg "\nUnknown type: ${type}"
+               continue
+               ;;
+         esac
+
+         # Set up the permissions, too.
+         chown ${usr}:${grp} "${name}"
+         chmod ${perm} "${name}"
+      fi
+   done
+
+   # Close file descriptor 9 (end redirection)
+   exec 0>&9 9>&-
+   return 0
+}
+
+case "${1}" in
+   start)
+      log_info_msg "Cleaning file systems:"
+
+      if [ "${SKIPTMPCLEAN}" = "" ]; then
+         log_info_msg2 " /tmp"
+         cd /tmp &&
+         find . -xdev -mindepth 1 ! -name lost+found -delete || failed=1
+      fi
+
+      > /run/utmp
+
+      if grep -q '^utmp:' /etc/group ; then
+         chmod 664 /run/utmp
+         chgrp utmp /run/utmp
+      fi
+
+      (exit ${failed})
+      evaluate_retval
+
+      if grep -E -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null; then
+         log_info_msg "Creating files and directories... "
+         create_files      # Always returns 0
+         evaluate_retval
+      fi
+
+      exit $failed
+      ;;
+   *)
+      echo "Usage: ${0} {start}"
+      exit 1
+      ;;
+esac
+
+# End cleanfs
+
+
+
+
+
+

+ D.12. /etc/rc.d/init.d/console +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin console
+#
+# Description : Sets keymap and screen font
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               Alexander E. Patrakov
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            console
+# Required-Start:      $local_fs
+# Should-Start:        udev_retry
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Sets up a localised console.
+# Description:         Sets up fonts and language settings for the user's
+#                      local as defined by /etc/sysconfig/console.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Native English speakers probably don't have /etc/sysconfig/console at all
+[ -r /etc/sysconfig/console ] && . /etc/sysconfig/console
+
+failed=0
+
+case "${1}" in
+   start)
+      # See if we need to do anything
+      if [ -z "${KEYMAP}"         ] && [ -z "${KEYMAP_CORRECTIONS}" ] &&
+         [ -z "${FONT}"           ] && [ -z "${LEGACY_CHARSET}"     ] &&
+         ! is_true "${UNICODE}"; then
+         exit 0
+      fi
+
+      # There should be no bogus failures below this line!
+      log_info_msg "Setting up Linux console..."
+
+      # Figure out if a framebuffer console is used
+      [ -d /sys/class/graphics/fbcon ] && use_fb=1 || use_fb=0
+
+      # Figure out the command to set the console into the
+      # desired mode
+      is_true "${UNICODE}" &&
+         MODE_COMMAND="echo -en '\033%G' && kbd_mode -u" ||
+         MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
+
+      # On framebuffer consoles, font has to be set for each vt in
+      # UTF-8 mode. This doesn't hurt in non-UTF-8 mode also.
+
+      ! is_true "${use_fb}" || [ -z "${FONT}" ] ||
+         MODE_COMMAND="${MODE_COMMAND} && setfont ${FONT}"
+
+      # Apply that command to all consoles mentioned in
+      # /etc/inittab. Important: in the UTF-8 mode this should
+      # happen before setfont, otherwise a kernel bug will
+      # show up and the unicode map of the font will not be
+      # used.
+
+      for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab |
+         grep -o '\btty[[:digit:]]*\b'`
+      do
+         openvt -f -w -c ${TTY#tty} -- \
+            /bin/sh -c "${MODE_COMMAND}" || failed=1
+      done
+
+      # Set the font (if not already set above) and the keymap
+      [ "${use_fb}" == "1" ] || [ -z "${FONT}" ] || setfont $FONT || failed=1
+
+      [ -z "${KEYMAP}" ] ||
+         loadkeys ${KEYMAP} >/dev/null 2>&1 ||
+         failed=1
+
+      [ -z "${KEYMAP_CORRECTIONS}" ] ||
+         loadkeys ${KEYMAP_CORRECTIONS} >/dev/null 2>&1 ||
+         failed=1
+
+      # Convert the keymap from $LEGACY_CHARSET to UTF-8
+      [ -z "$LEGACY_CHARSET" ] ||
+         dumpkeys -c "$LEGACY_CHARSET" | loadkeys -u >/dev/null 2>&1 ||
+         failed=1
+
+      # If any of the commands above failed, the trap at the
+      # top would set $failed to 1
+      ( exit $failed )
+      evaluate_retval
+
+      exit $failed
+      ;;
+
+   *)
+      echo "Usage:  ${0} {start}"
+      exit 1
+      ;;
+esac
+
+# End console
+
+
+
+
+
+

+ D.13. /etc/rc.d/init.d/localnet +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin localnet
+#
+# Description : Loopback device
+#
+# Authors     : Gerard Beekmans  - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            localnet
+# Required-Start:      mountvirtfs
+# Should-Start:        modules
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:        0 6
+# Short-Description:   Starts the local network.
+# Description:         Sets the hostname of the machine and starts the
+#                      loopback interface.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
+[ -r /etc/hostname ] && HOSTNAME=`cat /etc/hostname`
+
+case "${1}" in
+   start)
+      log_info_msg "Bringing up the loopback interface..."
+      ip addr add 127.0.0.1/8 label lo dev lo
+      ip link set lo up
+      evaluate_retval
+
+      log_info_msg "Setting hostname to ${HOSTNAME}..."
+      hostname ${HOSTNAME}
+      evaluate_retval
+      ;;
+
+   stop)
+      log_info_msg "Bringing down the loopback interface..."
+      ip link set lo down
+      evaluate_retval
+      ;;
+
+   restart)
+      ${0} stop
+      sleep 1
+      ${0} start
+      ;;
+
+   status)
+      echo "Hostname is: $(hostname)"
+      ip link show lo
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop|restart|status}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End localnet
+
+
+
+
+
+

+ D.14. /etc/rc.d/init.d/sysctl +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin sysctl
+#
+# Description : File uses /etc/sysctl.conf to set kernel runtime
+#               parameters
+#
+# Authors     : Nathan Coulson (nathan AT linuxfromscratch D0T org)
+#               Matthew Burgress (matthew AT linuxfromscratch D0T org)
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            sysctl
+# Required-Start:      mountvirtfs
+# Should-Start:        console
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:
+# Short-Description:   Makes changes to the proc filesystem
+# Description:         Makes changes to the proc filesystem as defined in
+#                      /etc/sysctl.conf.  See 'man sysctl(8)'.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      if [ -f "/etc/sysctl.conf" ]; then
+         log_info_msg "Setting kernel runtime parameters..."
+         sysctl -q -p
+         evaluate_retval
+      fi
+      ;;
+
+   status)
+      sysctl -a
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|status}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End sysctl
+
+
+
+
+
+

+ D.15. /etc/rc.d/init.d/sysklogd +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin sysklogd
+#
+# Description : Sysklogd loader
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org LFS12.1
+#               Remove kernel log daemon.  The functionality has been
+#               merged with syslogd.                
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            $syslog
+# Required-Start:      $first localnet
+# Should-Start:
+# Required-Stop:       $local_fs
+# Should-Stop:         sendsignals
+# Default-Start:       2 3 4 5
+# Default-Stop:        0 1 6
+# Short-Description:   Starts system log daemon.
+# Description:         Starts system log daemon.
+#                      /etc/fstab.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Starting system log daemon..."
+      parms=${SYSKLOGD_PARMS-'-m 0'}
+      start_daemon /sbin/syslogd $parms
+      evaluate_retval
+      ;;
+
+   stop)
+      log_info_msg "Stopping system log daemon..."
+      killproc /sbin/syslogd
+      evaluate_retval
+      ;;
+
+   reload)
+      log_info_msg "Reloading system log daemon config file..."
+      pid=`pidofproc syslogd`
+      kill -HUP "${pid}"
+      evaluate_retval
+      ;;
+
+   restart)
+      ${0} stop
+      sleep 1
+      ${0} start
+      ;;
+
+   status)
+      statusproc /sbin/syslogd
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop|reload|restart|status}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End sysklogd
+
+
+
+
+
+

+ D.16. /etc/rc.d/init.d/network +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin network
+#
+# Description : Network Control Script
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               Nathan Coulson - nathan AT linuxfromscratch D0T org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            $network
+# Required-Start:      $local_fs localnet swap
+# Should-Start:        $syslog firewalld iptables nftables
+# Required-Stop:       $local_fs localnet swap
+# Should-Stop:         $syslog firewalld iptables nftables
+# Default-Start:       2 3 4 5
+# Default-Stop:        0 1 6
+# Short-Description:   Starts and configures network interfaces.
+# Description:         Starts and configures network interfaces.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+case "${1}" in
+   start)
+      # if the default route exists, network is already configured
+      if ip route | grep -q "^default"; then exit 0; fi
+      # Start all network interfaces
+      for file in /etc/sysconfig/ifconfig.*
+      do
+         interface=${file##*/ifconfig.}
+
+         # Skip if $file is * (because nothing was found)
+         if [ "${interface}" = "*" ]; then continue; fi
+
+         /sbin/ifup ${interface}
+      done
+      ;;
+
+   stop)
+      # Unmount any network mounted file systems
+       umount --all --force --types nfs,cifs,nfs4
+
+      # Reverse list
+      net_files=""
+      for file in  /etc/sysconfig/ifconfig.*
+      do
+         net_files="${file} ${net_files}"
+      done
+
+      # Stop all network interfaces
+      for file in ${net_files}
+      do
+         interface=${file##*/ifconfig.}
+
+         # Skip if $file is * (because nothing was found)
+         if [ "${interface}" = "*" ]; then continue; fi
+
+         # See if interface exists
+         if [ ! -e /sys/class/net/$interface ]; then continue; fi
+
+         # Is interface UP?
+         ip link show $interface 2>/dev/null | grep -q "state UP"
+         if [ $? -ne 0 ];  then continue; fi
+
+         /sbin/ifdown ${interface}
+      done
+      ;;
+
+   restart)
+      ${0} stop
+      sleep 1
+      ${0} start
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop|restart}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End network
+
+
+
+
+
+

+ D.17. /etc/rc.d/init.d/sendsignals +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin sendsignals
+#
+# Description : Sendsignals Script
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            sendsignals
+# Required-Start:
+# Should-Start:
+# Required-Stop:       $local_fs swap localnet
+# Should-Stop:
+# Default-Start:
+# Default-Stop:        0 6
+# Short-Description:   Attempts to kill remaining processes.
+# Description:         Attempts to kill remaining processes.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   stop)
+      omit=$(pidof mdmon)
+      [ -n "$omit" ] && omit="-o $omit"
+
+      log_info_msg "Sending all processes the TERM signal..."
+      killall5 -15 $omit
+      error_value=${?}
+
+      sleep ${KILLDELAY}
+
+      if [ "${error_value}" = 0 -o "${error_value}" = 2 ]; then
+         log_success_msg
+      else
+         log_failure_msg
+      fi
+
+      log_info_msg "Sending all processes the KILL signal..."
+      killall5 -9 $omit
+      error_value=${?}
+
+      sleep ${KILLDELAY}
+
+      if [ "${error_value}" = 0 -o "${error_value}" = 2 ]; then
+         log_success_msg
+      else
+         log_failure_msg
+      fi
+      ;;
+
+   *)
+      echo "Usage: ${0} {stop}"
+      exit 1
+      ;;
+
+esac
+
+exit 0
+
+# End sendsignals
+
+
+
+
+
+

+ D.18. /etc/rc.d/init.d/reboot +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin reboot
+#
+# Description : Reboot Scripts
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Updates     : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#             : Pierre Labastie - pierre AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Notes       : Update March 24th, 2022: change "stop" to "start".
+#               Add the $last facility to Required-start
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            reboot
+# Required-Start:      $last
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       6
+# Default-Stop:
+# Short-Description:   Reboots the system.
+# Description:         Reboots the System.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Restarting system..."
+      reboot -d -f -i
+      ;;
+
+   *)
+      echo "Usage: ${0} {start}"
+      exit 1
+      ;;
+
+esac
+
+# End reboot
+
+
+
+
+
+

+ D.19. /etc/rc.d/init.d/halt +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin halt
+#
+# Description : Halt Script
+#
+# Authors     : Gerard Beekmans - gerard AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#             : Pierre Labastie - pierre AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Notes       : Update March 24th, 2022: change "stop" to "start".
+#               Add the $last facility to Required-start
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            halt
+# Required-Start:      $last
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       0
+# Default-Stop:
+# Short-Description:   Halts the system.
+# Description:         Halts the System.
+# X-LFS-Provided-By:   LFS
+### END INIT INFO
+
+case "${1}" in
+   start)
+      halt -d -f -i -p
+      ;;
+
+   *)
+      echo "Usage: {start}"
+      exit 1
+      ;;
+esac
+
+# End halt
+
+
+
+
+
+

+ D.20. /etc/rc.d/init.d/template +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin scriptname
+#
+# Description :
+#
+# Authors     :
+#
+# Version     : LFS x.x
+#
+# Notes       :
+#
+########################################################################
+
+### BEGIN INIT INFO
+# Provides:            template
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:
+# Default-Stop:
+# Short-Description:
+# Description:
+# X-LFS-Provided-By:
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+   start)
+      log_info_msg "Starting..."
+    # if it is possible to use start_daemon
+      start_daemon fully_qualified_path
+    # if it is not possible to use start_daemon
+    # (command to start the daemon is not simple enough)
+      if ! pidofproc daemon_name_as_reported_by_ps >/dev/null; then
+         command_to_start_the_service
+      fi
+      evaluate_retval
+      ;;
+
+   stop)
+      log_info_msg "Stopping..."
+    # if it is possible to use killproc
+      killproc fully_qualified_path
+    # if it is not possible to use killproc
+    # (the daemon shouldn't be stopped by killing it)
+      if pidofproc daemon_name_as_reported_by_ps >/dev/null; then
+         command_to_stop_the_service
+      fi
+      evaluate_retval
+      ;;
+
+   restart)
+      ${0} stop
+      sleep 1
+      ${0} start
+      ;;
+
+   *)
+      echo "Usage: ${0} {start|stop|restart}"
+      exit 1
+      ;;
+esac
+
+exit 0
+
+# End scriptname
+
+
+
+
+
+

+ D.21. /etc/sysconfig/modules +

+
+
+
+
+
########################################################################
+# Begin /etc/sysconfig/modules
+#
+# Description : Module auto-loading configuration
+#
+# Authors     :
+#
+# Version     : 00.00
+#
+# Notes       : The syntax of this file is as follows:
+#               <module> [<arg1> <arg2> ...]
+#
+# Each module should be on its own line, and any options that you want
+# passed to the module should follow it.  The line deliminator is either
+# a space or a tab.
+########################################################################
+
+# End /etc/sysconfig/modules
+
+
+
+
+
+

+ D.22. /etc/sysconfig/createfiles +

+
+
+
+
+
########################################################################
+# Begin /etc/sysconfig/createfiles
+#
+# Description : Createfiles script config file
+#
+# Authors     :
+#
+# Version     : 00.00
+#
+# Notes       : The syntax of this file is as follows:
+#               if type is equal to "file" or "dir"
+#                <filename> <type> <permissions> <user> <group>
+#               if type is equal to "dev"
+#                <filename> <type> <permissions> <user> <group> <devtype>
+#             <major> <minor>
+#
+#               <filename> is the name of the file which is to be created
+#               <type> is either file, dir, or dev.
+#                       file creates a new file
+#                       dir creates a new directory
+#                       dev creates a new device
+#               <devtype> is either block, char or pipe
+#                       block creates a block device
+#                       char creates a character device
+#                       pipe creates a pipe, this will ignore the <major> and
+#           <minor> fields
+#               <major> and <minor> are the major and minor numbers used for
+#     the device.
+########################################################################
+
+# End /etc/sysconfig/createfiles
+
+
+
+
+
+

+ D.23. /etc/sysconfig/udev-retry +

+
+
+
+
+
########################################################################
+# Begin /etc/sysconfig/udev_retry
+#
+# Description : udev_retry script configuration
+#
+# Authors     :
+#
+# Version     : 00.00
+#
+# Notes       : Each subsystem that may need to be re-triggered after mountfs
+#               runs should be listed in this file.  Probable subsystems to be
+#               listed here are rtc (due to /var/lib/hwclock/adjtime) and sound
+#               (due to both /var/lib/alsa/asound.state and /usr/sbin/alsactl).
+#               Entries are whitespace-separated.
+########################################################################
+
+rtc
+
+# End /etc/sysconfig/udev_retry
+
+
+
+
+
+

+ D.24. /sbin/ifup +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin /sbin/ifup
+#
+# Description : Interface Up
+#
+# Authors     : Nathan Coulson - nathan AT linuxfromscratch D0T org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.7
+#
+# Notes       : The IFCONFIG variable is passed to the SERVICE script
+#               in the /lib/services directory, to indicate what file the
+#               service should source to get interface specifications.
+#
+########################################################################
+
+up()
+{
+  log_info_msg "Bringing up the ${1} interface..."
+
+  if ip link show $1 > /dev/null 2>&1; then
+     link_status=`ip link show $1`
+
+     if [ -n "${link_status}" ]; then
+        if ! echo "${link_status}" | grep -q UP; then
+           ip link set $1 up
+        fi
+     fi
+
+  else
+     log_failure_msg "Interface ${IFACE} doesn't exist."
+     exit 1
+  fi
+
+  evaluate_retval
+}
+
+RELEASE="7.7"
+
+USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
+VERSTR="LFS ifup, version ${RELEASE}"
+
+while [ $# -gt 0 ]; do
+   case "$1" in
+      --help | -h)     help="y"; break ;;
+
+      --version | -V)  echo "${VERSTR}"; exit 0 ;;
+
+      -*)              echo "ifup: ${1}: invalid option" >&2
+                       echo "${USAGE}" >& 2
+                       exit 2 ;;
+
+      *)               break ;;
+   esac
+done
+
+if [ -n "$help" ]; then
+   echo "${VERSTR}"
+   echo "${USAGE}"
+   echo
+   cat << HERE_EOF
+ifup is used to bring up a network interface.  The interface
+parameter, e.g. eth0 or eth0:2, must match the trailing part of the
+interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
+
+HERE_EOF
+   exit 0
+fi
+
+file=/etc/sysconfig/ifconfig.${1}
+
+# Skip backup files
+[ "${file}" = "${file%""~""}" ] || exit 0
+
+. /lib/lsb/init-functions
+
+if [ ! -r "${file}" ]; then
+   log_failure_msg "Unable to bring up ${1} interface! ${file} is missing or cannot be accessed."
+   exit 1
+fi
+
+.  $file
+
+if [ "$IFACE" = "" ]; then
+   log_failure_msg "Unable to bring up ${1} interface! ${file} does not define an interface [IFACE]."
+   exit 1
+fi
+
+# Do not process this service if started by boot, and ONBOOT
+# is not set to yes
+if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+   exit 0
+fi
+
+# Bring up the interface
+if [ "$VIRTINT" != "yes" ]; then
+   up ${IFACE}
+fi
+
+for S in ${SERVICE}; do
+  if [ ! -x "/lib/services/${S}" ]; then
+    MSG="\nUnable to process ${file}.  Either "
+    MSG="${MSG}the SERVICE '${S} was not present "
+    MSG="${MSG}or cannot be executed."
+    log_failure_msg "$MSG"
+    exit 1
+  fi
+done
+
+#if [ "${SERVICE}" = "wpa" ]; then log_success_msg; fi
+
+# Create/configure the interface
+for S in ${SERVICE}; do
+  IFCONFIG=${file} /lib/services/${S} ${IFACE} up
+done
+
+# Set link up virtual interfaces
+if [ "${VIRTINT}" == "yes" ]; then
+   up ${IFACE}
+fi
+
+# Bring up any additional interface components
+for I in $INTERFACE_COMPONENTS; do up $I; done
+
+# Set MTU if requested. Check if MTU has a "good" value.
+if test -n "${MTU}"; then
+   if [[ ${MTU} =~ ^[0-9]+$ ]] && [[ $MTU -ge 68 ]] ; then
+      for I in $IFACE $INTERFACE_COMPONENTS; do
+         ip link set dev $I mtu $MTU;
+      done
+   else
+      log_info_msg2 "Invalid MTU $MTU"
+   fi
+fi
+
+# Set the route default gateway if requested
+if [ -n "${GATEWAY}" ]; then
+   if ip route | grep -q default; then
+      log_warning_msg "Gateway already setup; skipping."
+   else
+      log_info_msg "Adding default gateway ${GATEWAY} to the ${IFACE} interface..."
+      ip route add default via ${GATEWAY} dev ${IFACE}
+      evaluate_retval
+   fi
+fi
+
+# End /sbin/ifup
+
+
+
+
+
+

+ D.25. /sbin/ifdown +

+
+
+
+
+
#!/bin/bash
+########################################################################
+# Begin /sbin/ifdown
+#
+# Description : Interface Down
+#
+# Authors     : Nathan Coulson - nathan AT linuxfromscratch D0T org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+# Notes       : the IFCONFIG variable is passed to the scripts found
+#               in the /lib/services directory, to indicate what file the
+#               service should source to get interface specifications.
+#
+########################################################################
+
+RELEASE="7.0"
+
+USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
+VERSTR="LFS ifdown, version ${RELEASE}"
+
+while [ $# -gt 0 ]; do
+   case "$1" in
+      --help | -h)     help="y"; break ;;
+
+      --version | -V)  echo "${VERSTR}"; exit 0 ;;
+
+      -*)              echo "ifup: ${1}: invalid option" >&2
+                       echo "${USAGE}" >& 2
+                       exit 2 ;;
+
+      *)               break ;;
+   esac
+done
+
+if [ -n "$help" ]; then
+   echo "${VERSTR}"
+   echo "${USAGE}"
+   echo
+   cat << HERE_EOF
+ifdown is used to bring down a network interface.  The interface
+parameter, e.g. eth0 or eth0:2, must match the trailing part of the
+interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
+
+HERE_EOF
+   exit 0
+fi
+
+file=/etc/sysconfig/ifconfig.${1}
+
+# Skip backup files
+[ "${file}" = "${file%""~""}" ] || exit 0
+
+. /lib/lsb/init-functions
+
+if [ ! -r "${file}" ]; then
+   log_warning_msg "${file} is missing or cannot be accessed."
+   exit 1
+fi
+
+. ${file}
+
+if [ "$IFACE" = "" ]; then
+   log_failure_msg "${file} does not define an interface [IFACE]."
+   exit 1
+fi
+
+# We only need to first service to bring down the interface
+S=`echo ${SERVICE} | cut -f1 -d" "`
+
+if ip link show ${IFACE} > /dev/null 2>&1; then
+   if [ -n "${S}" -a -x "/lib/services/${S}" ]; then
+     IFCONFIG=${file} /lib/services/${S} ${IFACE} down
+   else
+     MSG="Unable to process ${file}.  Either "
+     MSG="${MSG}the SERVICE variable was not set "
+     MSG="${MSG}or the specified service cannot be executed."
+     log_failure_msg "$MSG"
+     exit 1
+  fi
+else
+   log_warning_msg "Interface ${1} doesn't exist."
+fi
+
+# Leave the interface up if there are additional interfaces in the device
+link_status=`ip link show ${IFACE} 2>/dev/null`
+
+if [ -n "${link_status}" ]; then
+   if [ "$(echo "${link_status}" | grep UP)" != "" ]; then
+      if [ "$(ip addr show ${IFACE} | grep 'inet ')" == ""  ]; then
+         log_info_msg "Bringing down the ${IFACE} interface..."
+         ip link set ${IFACE} down
+         evaluate_retval
+      fi
+   fi
+fi
+
+# End /sbin/ifdown
+
+
+
+
+
+

+ D.26. /lib/services/ipv4-static +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin /lib/services/ipv4-static
+#
+# Description : IPV4 Static Boot Script
+#
+# Authors     : Nathan Coulson - nathan AT linuxfromscratch D0T org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+. /lib/lsb/init-functions
+. ${IFCONFIG}
+
+if [ -z "${IP}" ]; then
+   log_failure_msg "\nIP variable missing from ${IFCONFIG}, cannot continue."
+   exit 1
+fi
+
+if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
+   log_warning_msg "\nPREFIX variable missing from ${IFCONFIG}, assuming 24."
+   PREFIX=24
+   args="${args} ${IP}/${PREFIX}"
+
+elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
+   log_failure_msg "\nPREFIX and PEER both specified in ${IFCONFIG}, cannot continue."
+   exit 1
+
+elif [ -n "${PREFIX}" ]; then
+   args="${args} ${IP}/${PREFIX}"
+
+elif [ -n "${PEER}" ]; then
+   args="${args} ${IP} peer ${PEER}"
+fi
+
+if [ -n "${LABEL}" ]; then
+   args="${args} label ${LABEL}"
+fi
+
+if [ -n "${BROADCAST}" ]; then
+   args="${args} broadcast ${BROADCAST}"
+fi
+
+case "${2}" in
+   up)
+      if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" = "" ]; then
+         log_info_msg "Adding IPv4 address ${IP} to the ${1} interface..."
+         ip addr add ${args} dev ${1}
+         evaluate_retval
+      else
+         log_warning_msg "Cannot add IPv4 address ${IP} to ${1}.  Already present."
+      fi
+   ;;
+
+   down)
+      if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" != "" ]; then
+         log_info_msg "Removing IPv4 address ${IP} from the ${1} interface..."
+         ip addr del ${args} dev ${1}
+         evaluate_retval
+      fi
+
+      if [ -n "${GATEWAY}" ]; then
+         # Only remove the gateway if there are no remaining ipv4 addresses
+         if [ "$(ip addr show ${1} 2>/dev/null | grep 'inet ')" != "" ]; then
+            log_info_msg "Removing default gateway..."
+            ip route del default
+            evaluate_retval
+         fi
+      fi
+   ;;
+
+   *)
+      echo "Usage: ${0} [interface] {up|down}"
+      exit 1
+   ;;
+esac
+
+# End /lib/services/ipv4-static
+
+
+
+
+
+

+ D.27. /lib/services/ipv4-static-route +

+
+
+
+
+
#!/bin/sh
+########################################################################
+# Begin /lib/services/ipv4-static-route
+#
+# Description : IPV4 Static Route Script
+#
+# Authors     : Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#               DJ Lucas - dj AT linuxfromscratch D0T org
+# Update      : Bruce Dubbs - bdubbs AT linuxfromscratch D0T org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+. /lib/lsb/init-functions
+. ${IFCONFIG}
+
+case "${TYPE}" in
+   ("" | "network")
+      need_ip=1
+      need_gateway=1
+   ;;
+
+   ("default")
+      need_gateway=1
+      args="${args} default"
+      desc="default"
+   ;;
+
+   ("host")
+      need_ip=1
+   ;;
+
+   ("unreachable")
+      need_ip=1
+      args="${args} unreachable"
+      desc="unreachable "
+   ;;
+
+   (*)
+      log_failure_msg "Unknown route type (${TYPE}) in ${IFCONFIG}, cannot continue."
+      exit 1
+   ;;
+esac
+
+if [ -n "${GATEWAY}" ]; then
+   MSG="The GATEWAY variable cannot be set in ${IFCONFIG} for static routes.\n"
+   log_failure_msg "$MSG Use STATIC_GATEWAY only, cannot continue"
+   exit 1
+fi
+
+if [ -n "${need_ip}" ]; then
+   if [ -z "${IP}" ]; then
+      log_failure_msg "IP variable missing from ${IFCONFIG}, cannot continue."
+      exit 1
+   fi
+
+   if [ -z "${PREFIX}" ]; then
+      log_failure_msg "PREFIX variable missing from ${IFCONFIG}, cannot continue."
+      exit 1
+   fi
+
+   args="${args} ${IP}/${PREFIX}"
+   desc="${desc}${IP}/${PREFIX}"
+fi
+
+if [ -n "${need_gateway}" ]; then
+   if [ -z "${STATIC_GATEWAY}" ]; then
+      log_failure_msg "STATIC_GATEWAY variable missing from ${IFCONFIG}, cannot continue."
+      exit 1
+   fi
+   args="${args} via ${STATIC_GATEWAY}"
+fi
+
+if [ -n "${SOURCE}" ]; then
+        args="${args} src ${SOURCE}"
+fi
+
+case "${2}" in
+   up)
+      log_info_msg "Adding '${desc}' route to the ${1} interface..."
+      ip route add ${args} dev ${1}
+      evaluate_retval
+   ;;
+
+   down)
+      log_info_msg "Removing '${desc}' route from the ${1} interface..."
+      ip route del ${args} dev ${1}
+      evaluate_retval
+   ;;
+
+   *)
+      echo "Usage: ${0} [interface] {up|down}"
+      exit 1
+   ;;
+esac
+
+# End /lib/services/ipv4-static-route
+
+
+
+
+
+
+

+ Appendix E. Udev + configuration rules +

+
+
+
+
+

+ The rules in this appendix are listed for convenience. + Installation is normally done via instructions in Section 8.76, “Udev + from Systemd-257.8.” +

+
+
+
+

+ E.1. 55-lfs.rules +

+
+
+
+
+
# /etc/udev/rules.d/55-lfs.rules: Rule definitions for LFS.
+
+# Core kernel devices
+
+# This causes the system clock to be set as soon as /dev/rtc becomes available.
+SUBSYSTEM=="rtc", ACTION=="add", MODE="0644", RUN+="/etc/rc.d/init.d/setclock start"
+KERNEL=="rtc", ACTION=="add", MODE="0644", RUN+="/etc/rc.d/init.d/setclock start"
+
+
+
+
+
+
+
+

+ Appendix F. LFS Licenses +

+
+
+
+
+

+ This book is licensed under the Creative Commons + Attribution-NonCommercial-ShareAlike 2.0 License. +

+

+ Computer instructions may be extracted from the book under the + MIT License. +

+
+
+
+

+ F.1. 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. +
    3. +

      + "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. +

      +
    4. +
    5. +

      + "Licensor" means the individual or entity that + offers the Work under the terms of this License. +

      +
    6. +
    7. +

      + "Original Author" means the individual or entity + who created the Work. +

      +
    8. +
    9. +

      + "Work" means the copyrightable work of authorship + offered under the terms of this License. +

      +
    10. +
    11. +

      + "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. +

      +
    12. +
    13. +

      + "License Elements" means the following high-level + license attributes as selected by Licensor and + indicated in the title of this License: + Attribution, Noncommercial, ShareAlike. +

      +
    14. +
    +
    +
  2. +
  3. +

    + 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. +

    +
  4. +
  5. +

    + 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. +
    3. +

      + to create and reproduce Derivative Works; +

      +
    4. +
    5. +

      + 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; +

      +
    6. +
    7. +

      + to distribute copies or phonorecords of, display + publicly, perform publicly, and perform publicly by + means of a digital audio transmission Derivative + Works; +

      +
    8. +
    +
    +

    + 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). +

    +
  6. +
  7. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    5. +

      + 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. +

      +
    6. +
    7. +

      + 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. +

      +
    8. +
    9. +

      + 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. +
      3. +

        + 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. +

        +
      4. +
      +
      +
    10. +
    11. +

      + 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. +

      +
    12. +
    +
    +
  8. +
  9. +

    + 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. +

    +
  10. +
  11. +

    + 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. +

    +
  12. +
  13. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    +
    +
  14. +
  15. +

    + 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. +
    3. +

      + 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. +

      +
    4. +
    5. +

      + 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. +

      +
    6. +
    7. +

      + 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. +

      +
    8. +
    9. +

      + 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. +

      +
    10. +
    +
    +
  16. +
+
+
+

+ 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/. +

+
+
+
+
+
+

+ F.2. The MIT License +

+
+
+
+
+

+ Copyright © 1999-2025 Gerard Beekmans +

+

+ 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. +

+
+
+
+
+
+
+
+

+ Index +

+
+
+
+
+

+ Packages +

+ +

+ Programs +

+ +

+ Libraries +

+ +

+ Scripts +

+ +

+ Others +

+ +
+
+
+ + diff --git a/meta/.gitignore b/meta/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/meta/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/meta/Makefile b/meta/Makefile new file mode 100644 index 0000000..a9735ec --- /dev/null +++ b/meta/Makefile @@ -0,0 +1,26 @@ +INPUTS = src/etc/X11/wdm/motd.in \ + src/etc/issue.in \ + src/etc/lsb-release.in \ + src/etc/motd.in \ + src/etc/os-release.in + +OUTPUTS = build/etc/X11/wdm/motd \ + build/etc/issue \ + build/etc/lsb-release \ + build/etc/motd \ + build/etc/os-release + +VARS = ../vars.sh + +.PHONY = all clean install + +all: $(OUTPUTS) + +clean: + rm -rf build/ + +build/%: src/%.in $(VARS) + ./render.sh $< + +install: all + cp -rv build/ "$(DESTDIR)/" diff --git a/meta/render.sh b/meta/render.sh new file mode 100755 index 0000000..6b27494 --- /dev/null +++ b/meta/render.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env /bin/bash +# Co-Authored by: Claude (Sonnet 5.5 Medium) +# Usage: render.sh src/path/file.in [../vars.sh] +set -euo pipefail + +in=$1 +vars_file=${2:-../vars.sh} + +case $in in + src/*) ;; + *) echo "render.sh: input must be under src/: $in" >&2; exit 1 ;; +esac + +# src/etc/issue.in -> build/etc/issue +out=build/${in#src/} +out=${out%.in} + +# Load variables from vars.sh and export them for envsubst +if [[ -n $vars_file ]]; then + set -a + # shellcheck disable=SC1090 + source "$vars_file" + set +a +fi + +# Only substitute ${VAR} references that actually appear in the template, +# so anything else (like \n or \l) is left untouched +refs=$(grep -oE '\$\{[A-Za-z_][A-Za-z0-9_]*\}' "$in" | sort -u || true) + +# Fail loudly on undefined variables instead of silently emitting empty strings +for ref in $refs; do + name=${ref#\$\{}; name=${name%\}} + if [[ -z ${!name+x} ]]; then + echo "render.sh: $in uses undefined variable $name" >&2 + exit 1 + fi +done + +mkdir -p "$(dirname "$out")" + +# Write to a temp file first so a failure never leaves a half-written output +tmp=$(mktemp "$out.XXXXXX") +trap 'rm -f "$tmp"' EXIT +envsubst "$(echo $refs)" < "$in" > "$tmp" +chmod 644 "$tmp" +mv "$tmp" "$out" +trap - EXIT diff --git a/meta/src/etc/X11/wdm/motd.in b/meta/src/etc/X11/wdm/motd.in new file mode 100644 index 0000000..7fd5ded --- /dev/null +++ b/meta/src/etc/X11/wdm/motd.in @@ -0,0 +1,2 @@ +ZiomekOS ${VERSION} (${CODENAME_PRETTY}) based on LFS 12.4 +Created by Tomek Wójcik | For teh lulz diff --git a/meta/src/etc/issue.in b/meta/src/etc/issue.in new file mode 100644 index 0000000..5fa24ad --- /dev/null +++ b/meta/src/etc/issue.in @@ -0,0 +1,2 @@ +ZiomekOS ${VERSION} (${CODENAME_PRETTY}) \n \l + diff --git a/meta/src/etc/lsb-release.in b/meta/src/etc/lsb-release.in new file mode 100644 index 0000000..0470b90 --- /dev/null +++ b/meta/src/etc/lsb-release.in @@ -0,0 +1,4 @@ +DISTRIB_ID="ZiomekOS" +DISTRIB_RELEASE="${VERSION}" +DISTRIB_CODENAME="${CODENAME}" +DISTRIB_DESCRIPTION="ZiomekOS ${VERSION} (${CODENAME_PRETTY})" diff --git a/meta/src/etc/motd.in b/meta/src/etc/motd.in new file mode 100644 index 0000000..d9adeae --- /dev/null +++ b/meta/src/etc/motd.in @@ -0,0 +1,12 @@ + + A + _ _ _ _ _ _ +| |__ | |_| |__ | | __ _| |__ ___ _ __ | | +| '_ \| __| '_ \| |/ _` | '_ \/ __| | '_ \| | +| |_) | |_| | | | | (_| | |_) \__ \_| |_) | | +|_.__/ \__|_| |_|_|\__,_|_.__/|___(_) .__/|_| + |_| + production + +ZiomekOS ${VERSION} (${CODENAME_PRETTY}) based on LFS 12.4 +Created by Tomek Wójcik | For teh lulz diff --git a/meta/src/etc/os-release.in b/meta/src/etc/os-release.in new file mode 100644 index 0000000..0eeeebd --- /dev/null +++ b/meta/src/etc/os-release.in @@ -0,0 +1,7 @@ +NAME="ZiomekOS" +ID=ziomekos +PRETTY_NAME="ZiomekOS ${VERSION} (${CODENAME_PRETTY})" +VERSION="${VERSION} (${CODENAME_PRETTY})" +VERSION_CODENAME="${CODENAME}" +BUILD_ID="${BUILD}" +RELEASE_TYPE="stable" diff --git a/packages/archey4-4.15.0.0/README.md b/packages/archey4-4.15.0.0/README.md new file mode 100644 index 0000000..bd4d039 --- /dev/null +++ b/packages/archey4-4.15.0.0/README.md @@ -0,0 +1,29 @@ +# archey4-4.15.0.0 + +## Introduction to Archey4 + +Archey4 is a simple _fetch-like_ tool, to display system information and +distribution logo. It's written in Python and has zero system dependencies. + +This package is known to build and work properly using ZiomekOS 26.9.26 +platform. + +## Archey4 Package Information + +N/A + +## Archey4 Dependencies + +## Required + +Python 3.13.7 + +## Installation of Archey4 + +Install WDM by running the following commands: + +``` +pip3.13 install --user archey4==4.15.0.0 +``` + +This will install Archey4 in the current user's home directory and will install the binary in `$HOME/.local/bin`. You may need to adjust your shell's environment's `PATH` to add that directory. diff --git a/packages/archey4-4.15.0.0/ziomekos/ziomekos.py b/packages/archey4-4.15.0.0/ziomekos/ziomekos.py new file mode 100644 index 0000000..a347986 --- /dev/null +++ b/packages/archey4-4.15.0.0/ziomekos/ziomekos.py @@ -0,0 +1,28 @@ +"""ZiomekOS logo""" + +from archey.colors import Colors + +COLORS = [Colors.WHITE_NORMAL, Colors.WHITE_BRIGHT] + +LOGO = [ + """{c[0]} ..:.....:{c[1]}^~^{c[0]}:.....::. """, + """{c[0]} .:{c[1]}^~{c[0]}.:{c[1]}^^{c[0]}:.^{c[1]}!YG57{c[0]}^..{c[1]}^^{c[0]}:.{c[1]}~^{c[0]}:. """, + """{c[0]} :^{c[1]}^!?{c[0]}....::::{c[1]}7PBG?{c[0]}::::....{c[1]}!~^{c[0]}::. """, + """{c[0]}.{c[1]}^^~{c[0]}:{c[1]}~!^{c[0]} .{c[1]}^^^{c[0]}:^:{c[1]}^YB5^{c[0]}.::{c[1]}^^^{c[0]}. :{c[1]}!~{c[0]}:{c[1]}^~^{c[0]}. """, + """{c[0]}{c[1]}!{c[0]}..{c[1]}~77~{c[0]} :{c[1]}^{c[0]}::: :{c[1]}7?5G57!{c[0]}: :.:{c[1]}^{c[0]}: {c[1]}~?7~{c[0]}::{c[1]}!{c[0]}.""", + """{c[0]}::.{c[1]}!7!{c[0]}....{c[1]}^^{c[0]}:.:{c[1]}7YPGP57{c[0]}:.:{c[1]}^^{c[0]}.:..{c[1]}!7~{c[0]}.:: """, + """{c[0]} :{c[1]}~~7{c[0]}::^ . .{c[1]}^75PPPPPPPY7^{c[0]}: . ^.:{c[1]}!~~{c[0]}: """, + """{c[0]} {c[1]}~~{c[0]}. .^~.{c[1]}^75GY7777777YG5?{c[0]}:.~^. .{c[1]}~^{c[0]} """, + """{c[0]} . .^:{c[1]}?GGJ:^~!7!~^:7GG?{c[0]}.!. . """, + """{c[0]} :{c[1]}!YGP?{c[0]}:.:{c[1]}^^{c[0]}::.:{c[1]}7PGY!{c[0]}:. """, + """{c[0]} .{c[1]}^7PPYJ!{c[0]}:::..::{c[1]}!JYG5!^{c[0]}. """, + """{c[0]} .~{c[1]}^5P5Y7~^^:^^~7Y5G5^{c[0]}^. """, + """{c[0]} .~~.{c[1]}^7J5YJ???7?JY5Y?^{c[0]} ~~. """, + """{c[0]} ~{c[1]}Y{c[0]}~..::{c[1]}~?YJ5GPJJJ~{c[0]}^:..~{c[1]}J{c[0]}~. """, + """{c[0]} .~{c[1]}Y!{c[0]}:~^...:.{c[1]}^~^{c[0]}:....^~^{c[1]}7J{c[0]}~. """, + """{c[0]} .{c[1]}7J7{c[0]}~^{c[1]}~~{c[0]}::{c[1]}~^{c[0]}. .{c[1]}^~{c[0]}::{c[1]}~~{c[0]}^!{c[1]}7?7{c[0]}. """, + """{c[0]} .^{c[1]}??!77{c[0]}~^{c[1]}!57{c[0]}. .{c[1]}!5!{c[0]}:^{c[1]}77!??{c[0]}:. """, + """{c[0]} .^{c[1]}~?7!!!~{c[0]}.::::{c[1]}~!~!7?^{c[0]}~: """, + """{c[0]} .::{c[1]}!!~~!??7!~~!!{c[0]}::. """, + """{c[0]} ..{c[1]}^!{c[0]}:.. """, +] diff --git a/packages/linux-6.16.1/ziomekos/config b/packages/linux-6.16.1/ziomekos/config new file mode 100644 index 0000000..ea00d8a --- /dev/null +++ b/packages/linux-6.16.1/ziomekos/config @@ -0,0 +1,11656 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/x86 6.16.1 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="gcc (GCC) 15.2.0" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=150200 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=24500 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=24500 +CONFIG_LLD_VERSION=0 +CONFIG_RUSTC_VERSION=0 +CONFIG_RUSTC_LLVM_VERSION=0 +CONFIG_CC_CAN_LINK=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_TOOLS_SUPPORT_RELR=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_CC_HAS_COUNTED_BY=y +CONFIG_CC_HAS_MULTIDIMENSIONAL_NONSTRING=y +CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y +CONFIG_PAHOLE_VERSION=0 +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="-ziomekos-20260926" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_BUILD_SALT="" +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_HAVE_KERNEL_ZSTD=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set +CONFIG_KERNEL_ZSTD=y +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_WATCH_QUEUE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_AUDIT=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_GENERIC_IRQ_INJECTION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +# end of IRQ subsystem + +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_ARCH_CLOCKSOURCE_INIT=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_CONTEXT_TRACKING=y +CONFIG_CONTEXT_TRACKING_IDLE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +# CONFIG_NO_HZ_IDLE is not set +CONFIG_NO_HZ_FULL=y +CONFIG_CONTEXT_TRACKING_USER=y +# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125 +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +# CONFIG_BPF_JIT_ALWAYS_ON is not set +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_BPF_UNPRIV_DEFAULT_OFF=y +# CONFIG_BPF_PRELOAD is not set +CONFIG_BPF_LSM=y +# end of BPF subsystem + +CONFIG_PREEMPT_BUILD=y +CONFIG_ARCH_HAS_PREEMPT_LAZY=y +# CONFIG_PREEMPT_NONE is not set +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_LAZY=y +# CONFIG_PREEMPT_RT is not set +CONFIG_PREEMPT_COUNT=y +CONFIG_PREEMPTION=y +CONFIG_PREEMPT_DYNAMIC=y +# CONFIG_SCHED_CORE is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_VIRT_CPU_ACCOUNTING=y +CONFIG_VIRT_CPU_ACCOUNTING_GEN=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +CONFIG_PREEMPT_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_NEED_TASKS_RCU=y +CONFIG_TASKS_RCU=y +CONFIG_TASKS_RUDE_RCU=y +CONFIG_TASKS_TRACE_RCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +CONFIG_RCU_NOCB_CPU=y +# CONFIG_RCU_NOCB_CPU_DEFAULT_ALL is not set +CONFIG_RCU_LAZY=y +# CONFIG_RCU_LAZY_DEFAULT_OFF is not set +# end of RCU Subsystem + +# CONFIG_IKCONFIG is not set +# CONFIG_IKHEADERS is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +# CONFIG_PRINTK_INDEX is not set +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y + +# +# Scheduler features +# +CONFIG_UCLAMP_TASK=y +CONFIG_UCLAMP_BUCKETS_COUNT=5 +# end of Scheduler features + +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_CC_HAS_INT128=y +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_GCC10_NO_ARRAY_BOUNDS=y +CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_SLAB_OBJ_EXT=y +CONFIG_CGROUPS=y +CONFIG_PAGE_COUNTER=y +# CONFIG_CGROUP_FAVOR_DYNMODS is not set +CONFIG_MEMCG=y +# CONFIG_MEMCG_V1 is not set +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_SCHED=y +CONFIG_GROUP_SCHED_WEIGHT=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_SCHED_MM_CID=y +CONFIG_UCLAMP_TASK_GROUP=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +# CONFIG_CGROUP_DMEM is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +# CONFIG_CPUSETS_V1 is not set +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_MISC=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_TIME_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y +# CONFIG_BOOT_CONFIG is not set +CONFIG_INITRAMFS_PRESERVE_MTIME=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_LD_ORPHAN_WARN_LEVEL="warn" +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_SYSFS_SYSCALL=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_MULTIUSER=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_PCSPKR_PLATFORM=y +# CONFIG_BASE_SMALL is not set +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_FUTEX_MPOL=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +CONFIG_ADVISE_SYSCALLS=y +CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_SELFTEST is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_GUEST_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y + +# +# Kexec and crash features +# +CONFIG_CRASH_RESERVE=y +CONFIG_VMCORE_INFO=y +CONFIG_KEXEC_CORE=y +CONFIG_HAVE_IMA_KEXEC=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +CONFIG_KEXEC_SIG=y +# CONFIG_KEXEC_SIG_FORCE is not set +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y +# CONFIG_KEXEC_JUMP is not set +# CONFIG_KEXEC_HANDOVER is not set +CONFIG_CRASH_DUMP=y +# CONFIG_CRASH_DM_CRYPT is not set +CONFIG_CRASH_HOTPLUG=y +CONFIG_CRASH_MAX_MEMORY_RANGES=8192 +# end of Kexec and crash features +# end of General setup + +CONFIG_64BIT=y +CONFIG_X86_64=y +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_AUDIT_ARCH=y +CONFIG_HAVE_INTEL_TXT=y +CONFIG_X86_64_SMP=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DYNAMIC_PHYSICAL_MASK=y +CONFIG_PGTABLE_LEVELS=5 + +# +# Processor type and features +# +CONFIG_SMP=y +CONFIG_X86_X2APIC=y +# CONFIG_X86_POSTED_MSI is not set +CONFIG_X86_MPPARSE=y +CONFIG_X86_CPU_RESCTRL=y +# CONFIG_X86_FRED is not set +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_X86_INTEL_LPSS=y +CONFIG_X86_AMD_PLATFORM_DEVICE=y +CONFIG_IOSF_MBI=y +# CONFIG_IOSF_MBI_DEBUG is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_XXL=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +CONFIG_X86_HV_CALLBACK_VECTOR=y +CONFIG_XEN=y +CONFIG_XEN_PV=y +CONFIG_XEN_512GB=y +CONFIG_XEN_PV_SMP=y +CONFIG_XEN_PV_DOM0=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_PVHVM_SMP=y +CONFIG_XEN_PVHVM_GUEST=y +CONFIG_XEN_SAVE_RESTORE=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_PVH=y +CONFIG_XEN_DOM0=y +CONFIG_XEN_PV_MSR_SAFE=y +CONFIG_KVM_GUEST=y +CONFIG_ARCH_CPUIDLE_HALTPOLL=y +CONFIG_PVH=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_JAILHOUSE_GUEST is not set +# CONFIG_ACRN_GUEST is not set +CONFIG_INTEL_TDX_GUEST=y +CONFIG_CC_HAS_MARCH_NATIVE=y +# CONFIG_X86_NATIVE_CPU is not set +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_TSC=y +CONFIG_X86_HAVE_PAE=y +CONFIG_X86_CX8=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_IA32_FEAT_CTL=y +CONFIG_X86_VMX_FEATURE_NAMES=y +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_BROADCAST_TLB_FLUSH=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_HYGON=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_ZHAOXIN=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +CONFIG_GART_IOMMU=y +CONFIG_BOOT_VESA_SUPPORT=y +CONFIG_MAXSMP=y +CONFIG_NR_CPUS_RANGE_BEGIN=8192 +CONFIG_NR_CPUS_RANGE_END=8192 +CONFIG_NR_CPUS_DEFAULT=8192 +CONFIG_NR_CPUS=8192 +CONFIG_SCHED_CLUSTER=y +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_MC_PRIO=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_ACPI_MADT_WAKEUP=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +# CONFIG_X86_MCELOG_LEGACY is not set +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MCE_INJECT=m + +# +# Performance monitoring +# +CONFIG_PERF_EVENTS_INTEL_UNCORE=m +CONFIG_PERF_EVENTS_INTEL_RAPL=m +CONFIG_PERF_EVENTS_INTEL_CSTATE=m +CONFIG_PERF_EVENTS_AMD_POWER=m +CONFIG_PERF_EVENTS_AMD_UNCORE=y +# CONFIG_PERF_EVENTS_AMD_BRS is not set +# end of Performance monitoring + +CONFIG_X86_16BIT=y +CONFIG_X86_ESPFIX64=y +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_IOPL_IOPERM=y +CONFIG_MICROCODE=y +# CONFIG_MICROCODE_LATE_LOADING is not set +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +CONFIG_X86_DIRECT_GBPAGES=y +# CONFIG_X86_CPA_STATISTICS is not set +CONFIG_X86_MEM_ENCRYPT=y +CONFIG_AMD_MEM_ENCRYPT=y +CONFIG_NUMA=y +CONFIG_AMD_NUMA=y +CONFIG_X86_64_ACPI_NUMA=y +CONFIG_NODES_SHIFT=10 +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +# CONFIG_ARCH_MEMORY_PROBE is not set +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_X86_PMEM_LEGACY_DEVICE=y +CONFIG_X86_PMEM_LEGACY=m +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_X86_UMIP=y +CONFIG_CC_HAS_IBT=y +CONFIG_X86_CET=y +CONFIG_X86_KERNEL_IBT=y +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +CONFIG_ARCH_PKEY_BITS=4 +CONFIG_X86_INTEL_TSX_MODE_OFF=y +# CONFIG_X86_INTEL_TSX_MODE_ON is not set +# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set +CONFIG_X86_SGX=y +CONFIG_X86_USER_SHADOW_STACK=y +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_HANDOVER_PROTOCOL=y +CONFIG_EFI_MIXED=y +CONFIG_EFI_RUNTIME_MAP=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_SCHED_HRTICK=y +CONFIG_ARCH_SUPPORTS_KEXEC=y +CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y +CONFIG_ARCH_SELECTS_KEXEC_FILE=y +CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y +CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y +CONFIG_ARCH_SUPPORTS_KEXEC_HANDOVER=y +CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_ARCH_DEFAULT_CRASH_DUMP=y +CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y +CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_RELOCATABLE=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_X86_NEED_RELOCS=y +CONFIG_PHYSICAL_ALIGN=0x200000 +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_HOTPLUG_CPU=y +# CONFIG_COMPAT_VDSO is not set +# CONFIG_LEGACY_VSYSCALL_XONLY is not set +CONFIG_LEGACY_VSYSCALL_NONE=y +# CONFIG_CMDLINE_BOOL is not set +CONFIG_MODIFY_LDT_SYSCALL=y +# CONFIG_STRICT_SIGALTSTACK_SIZE is not set +CONFIG_HAVE_LIVEPATCH=y +CONFIG_LIVEPATCH=y +CONFIG_X86_BUS_LOCK_DETECT=y +# end of Processor type and features + +CONFIG_CC_HAS_NAMED_AS=y +CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y +CONFIG_USE_X86_SEG_SUPPORT=y +CONFIG_CC_HAS_SLS=y +CONFIG_CC_HAS_RETURN_THUNK=y +CONFIG_CC_HAS_ENTRY_PADDING=y +CONFIG_FUNCTION_PADDING_CFI=11 +CONFIG_FUNCTION_PADDING_BYTES=16 +CONFIG_CALL_PADDING=y +CONFIG_HAVE_CALL_THUNKS=y +CONFIG_CALL_THUNKS=y +CONFIG_PREFIX_SYMBOLS=y +CONFIG_CPU_MITIGATIONS=y +CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y +CONFIG_MITIGATION_RETPOLINE=y +CONFIG_MITIGATION_RETHUNK=y +CONFIG_MITIGATION_UNRET_ENTRY=y +CONFIG_MITIGATION_CALL_DEPTH_TRACKING=y +# CONFIG_CALL_THUNKS_DEBUG is not set +CONFIG_MITIGATION_IBPB_ENTRY=y +CONFIG_MITIGATION_IBRS_ENTRY=y +CONFIG_MITIGATION_SRSO=y +CONFIG_MITIGATION_SLS=y +CONFIG_MITIGATION_GDS=y +CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y +CONFIG_MITIGATION_MDS=y +CONFIG_MITIGATION_TAA=y +CONFIG_MITIGATION_MMIO_STALE_DATA=y +CONFIG_MITIGATION_L1TF=y +CONFIG_MITIGATION_RETBLEED=y +CONFIG_MITIGATION_SPECTRE_V1=y +CONFIG_MITIGATION_SPECTRE_V2=y +CONFIG_MITIGATION_SRBDS=y +CONFIG_MITIGATION_SSB=y +CONFIG_MITIGATION_ITS=y +CONFIG_MITIGATION_TSA=y +CONFIG_ARCH_HAS_ADD_PAGES=y + +# +# Power management and ACPI options +# +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_HIBERNATION_SNAPSHOT_DEV=y +CONFIG_HIBERNATION_COMP_LZO=y +# CONFIG_HIBERNATION_COMP_LZ4 is not set +CONFIG_HIBERNATION_DEF_COMP="lzo" +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_SLEEP_DEBUG=y +# CONFIG_DPM_WATCHDOG is not set +# CONFIG_PM_TRACE_RTC is not set +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARCH_SUPPORTS_ACPI=y +CONFIG_ACPI=y +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_TABLE_LIB=y +CONFIG_ACPI_THERMAL_LIB=y +# CONFIG_ACPI_DEBUGGER is not set +CONFIG_ACPI_SPCR_TABLE=y +# CONFIG_ACPI_FPDT is not set +CONFIG_ACPI_LPIT=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y +CONFIG_ACPI_EC=y +CONFIG_ACPI_EC_DEBUGFS=y +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +# CONFIG_ACPI_TINY_POWER_BUTTON is not set +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_TAD=m +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_CPU_FREQ_PSS=y +CONFIG_ACPI_PROCESSOR_CSTATE=y +CONFIG_ACPI_PROCESSOR_IDLE=y +CONFIG_ACPI_CPPC_LIB=y +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_PLATFORM_PROFILE=m +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_TABLE_UPGRADE=y +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_PCI_SLOT=y +CONFIG_ACPI_CONTAINER=y +CONFIG_ACPI_HOTPLUG_MEMORY=y +CONFIG_ACPI_HOTPLUG_IOAPIC=y +CONFIG_ACPI_SBS=m +CONFIG_ACPI_HED=y +CONFIG_ACPI_BGRT=y +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ACPI_NHLT=y +CONFIG_ACPI_NFIT=m +# CONFIG_NFIT_SECURITY_DEBUG is not set +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_HMAT=y +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=m +# CONFIG_ACPI_APEI_ERST_DEBUG is not set +# CONFIG_ACPI_DPTF is not set +CONFIG_ACPI_WATCHDOG=y +CONFIG_ACPI_EXTLOG=y +CONFIG_ACPI_ADXL=y +# CONFIG_ACPI_CONFIGFS is not set +# CONFIG_ACPI_PFRUT is not set +CONFIG_ACPI_PCC=y +# CONFIG_ACPI_FFH is not set +CONFIG_ACPI_MRRM=y +CONFIG_PMIC_OPREGION=y +CONFIG_BYTCRC_PMIC_OPREGION=y +CONFIG_CHTCRC_PMIC_OPREGION=y +CONFIG_XPOWER_PMIC_OPREGION=y +CONFIG_BXT_WC_PMIC_OPREGION=y +CONFIG_CHT_WC_PMIC_OPREGION=y +CONFIG_CHT_DC_TI_PMIC_OPREGION=y +# CONFIG_TPS68470_PMIC_OPREGION is not set +CONFIG_ACPI_VIOT=y +CONFIG_ACPI_PRMT=y +CONFIG_X86_PM_TIMER=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_X86_INTEL_PSTATE=y +CONFIG_X86_PCC_CPUFREQ=m +CONFIG_X86_AMD_PSTATE=y +CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3 +# CONFIG_X86_AMD_PSTATE_UT is not set +CONFIG_X86_ACPI_CPUFREQ=m +CONFIG_X86_ACPI_CPUFREQ_CPB=y +CONFIG_X86_POWERNOW_K8=m +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +CONFIG_X86_SPEEDSTEP_CENTRINO=m +CONFIG_X86_P4_CLOCKMOD=m + +# +# shared options +# +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_CPUFREQ_ARCH_CUR_FREQ=y +# end of CPU Frequency scaling + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +# CONFIG_CPU_IDLE_GOV_TEO is not set +CONFIG_CPU_IDLE_GOV_HALTPOLL=y +CONFIG_HALTPOLL_CPUIDLE=y +# end of CPU Idle + +CONFIG_INTEL_IDLE=y +# end of Power management and ACPI options + +# +# Bus options (PCI etc.) +# +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_XEN=y +CONFIG_MMCONF_FAM10H=y +# CONFIG_ISA_BUS is not set +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +CONFIG_AMD_NODE=y +# end of Bus options (PCI etc.) + +# +# Binary Emulations +# +CONFIG_IA32_EMULATION=y +# CONFIG_IA32_EMULATION_DEFAULT_DISABLED is not set +CONFIG_X86_X32_ABI=y +CONFIG_COMPAT_32=y +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +# end of Binary Emulations + +CONFIG_KVM_COMMON=y +CONFIG_HAVE_KVM_PFNCACHE=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_DIRTY_RING=y +CONFIG_HAVE_KVM_DIRTY_RING_TSO=y +CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y +CONFIG_KVM_MMIO=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_READONLY_MEM=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY=y +CONFIG_KVM_COMPAT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=m +CONFIG_HAVE_KVM_NO_POLL=y +CONFIG_KVM_XFER_TO_GUEST_WORK=y +CONFIG_HAVE_KVM_PM_NOTIFIER=y +CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y +CONFIG_KVM_GENERIC_MMU_NOTIFIER=y +CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG=y +CONFIG_KVM_MMU_LOCKLESS_AGING=y +CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y +CONFIG_KVM_PRIVATE_MEM=y +CONFIG_KVM_GENERIC_PRIVATE_MEM=y +CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE=y +CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM_X86=m +CONFIG_KVM=m +# CONFIG_KVM_WERROR is not set +# CONFIG_KVM_SW_PROTECTED_VM is not set +CONFIG_KVM_INTEL=m +# CONFIG_KVM_INTEL_PROVE_VE is not set +CONFIG_X86_SGX_KVM=y +CONFIG_KVM_AMD=m +CONFIG_KVM_AMD_SEV=y +CONFIG_KVM_SMM=y +CONFIG_KVM_HYPERV=y +CONFIG_KVM_XEN=y +# CONFIG_KVM_PROVE_MMU is not set +CONFIG_KVM_EXTERNAL_WRITE_TRACKING=y +CONFIG_KVM_MAX_NR_VCPUS=4096 +CONFIG_X86_REQUIRED_FEATURE_ALWAYS=y +CONFIG_X86_REQUIRED_FEATURE_NOPL=y +CONFIG_X86_REQUIRED_FEATURE_CX8=y +CONFIG_X86_REQUIRED_FEATURE_CMOV=y +CONFIG_X86_REQUIRED_FEATURE_CPUID=y +CONFIG_X86_REQUIRED_FEATURE_FPU=y +CONFIG_X86_REQUIRED_FEATURE_PAE=y +CONFIG_X86_REQUIRED_FEATURE_MSR=y +CONFIG_X86_REQUIRED_FEATURE_FXSR=y +CONFIG_X86_REQUIRED_FEATURE_XMM=y +CONFIG_X86_REQUIRED_FEATURE_XMM2=y +CONFIG_X86_REQUIRED_FEATURE_LM=y +CONFIG_X86_DISABLED_FEATURE_VME=y +CONFIG_X86_DISABLED_FEATURE_K6_MTRR=y +CONFIG_X86_DISABLED_FEATURE_CYRIX_ARR=y +CONFIG_X86_DISABLED_FEATURE_CENTAUR_MCR=y +CONFIG_X86_DISABLED_FEATURE_LAM=y +CONFIG_X86_DISABLED_FEATURE_FRED=y +CONFIG_AS_AVX512=y +CONFIG_AS_GFNI=y +CONFIG_AS_VAES=y +CONFIG_AS_VPCLMULQDQ=y +CONFIG_AS_WRUSS=y +CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y +CONFIG_ARCH_HAS_DMA_OPS=y + +# +# General architecture-dependent options +# +CONFIG_HOTPLUG_SMT=y +CONFIG_HOTPLUG_CORE_SYNC=y +CONFIG_HOTPLUG_CORE_SYNC_DEAD=y +CONFIG_HOTPLUG_CORE_SYNC_FULL=y +CONFIG_HOTPLUG_SPLIT_STARTUP=y +CONFIG_HOTPLUG_PARALLEL=y +CONFIG_GENERIC_ENTRY=y +CONFIG_KPROBES=y +CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +# CONFIG_STATIC_CALL_SELFTEST is not set +CONFIG_OPTPROBES=y +CONFIG_KPROBES_ON_FTRACE=y +CONFIG_UPROBES=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_KRETPROBES=y +CONFIG_KRETPROBE_ON_RETHOOK=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y +CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SET_DIRECT_MAP=y +CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y +CONFIG_ARCH_HAS_CPU_PASID=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANTS_NO_INSTR=y +CONFIG_HAVE_ASM_MODVERSIONS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y +CONFIG_MMU_GATHER_TABLE_FREE=y +CONFIG_MMU_GATHER_RCU_TABLE_FREE=y +CONFIG_MMU_GATHER_MERGE_VMAS=y +CONFIG_ARCH_WANT_IRQS_OFF_ACTIVATE_MM=y +CONFIG_MMU_LAZY_TLB_REFCOUNT=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HAVE_EXTRA_ELF_NOTES=y +CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_ARCH_STACKLEAK=y +CONFIG_HAVE_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y +CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y +CONFIG_HAVE_CONTEXT_TRACKING_USER=y +CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOVE_PUD=y +CONFIG_HAVE_MOVE_PMD=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_PMD_MKWRITE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_ARCH_HAS_EXECMEM_ROX=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 +CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 +CONFIG_HAVE_OBJTOOL=y +CONFIG_HAVE_JUMP_LABEL_HACK=y +CONFIG_HAVE_NOINSTR_HACK=y +CONFIG_HAVE_NOINSTR_VALIDATION=y +CONFIG_HAVE_UACCESS_VALIDATION=y +CONFIG_HAVE_STACK_VALIDATION=y +CONFIG_HAVE_RELIABLE_STACKTRACE=y +CONFIG_ISA_BUS_API=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_ARCH_SUPPORTS_RT=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_ARCH_HAS_CPU_RESCTRL=y +CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_ARCH_HAS_CC_PLATFORM=y +CONFIG_HAVE_STATIC_CALL=y +CONFIG_HAVE_STATIC_CALL_INLINE=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y +CONFIG_ARCH_HAS_ELFCORE_COMPAT=y +CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y +CONFIG_DYNAMIC_SIGFRAME=y +CONFIG_HAVE_ARCH_NODE_DEV_GROUP=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y +CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y +CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y +CONFIG_ARCH_VMLINUX_NEEDS_RELOCS=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +CONFIG_FUNCTION_ALIGNMENT_4B=y +CONFIG_FUNCTION_ALIGNMENT_16B=y +CONFIG_FUNCTION_ALIGNMENT=16 +CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y +CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_MODULE_SIG_FORMAT=y +CONFIG_MODULES=y +# CONFIG_MODULE_DEBUG is not set +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set +CONFIG_MODVERSIONS=y +CONFIG_GENKSYMS=y +# CONFIG_GENDWARFKSYMS is not set +CONFIG_ASM_MODVERSIONS=y +# CONFIG_EXTENDED_MODVERSIONS is not set +CONFIG_BASIC_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_MODULE_SIG=y +# CONFIG_MODULE_SIG_FORCE is not set +CONFIG_MODULE_SIG_ALL=y +# CONFIG_MODULE_SIG_SHA1 is not set +CONFIG_MODULE_SIG_SHA256=y +# CONFIG_MODULE_SIG_SHA384 is not set +# CONFIG_MODULE_SIG_SHA512 is not set +# CONFIG_MODULE_SIG_SHA3_256 is not set +# CONFIG_MODULE_SIG_SHA3_384 is not set +# CONFIG_MODULE_SIG_SHA3_512 is not set +CONFIG_MODULE_SIG_HASH="sha256" +CONFIG_MODULE_COMPRESS=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +CONFIG_MODULE_COMPRESS_XZ=y +# CONFIG_MODULE_COMPRESS_ZSTD is not set +CONFIG_MODULE_COMPRESS_ALL=y +CONFIG_MODULE_DECOMPRESS=y +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_RQ_ALLOC_TIME=y +CONFIG_BLK_CGROUP_RWSTAT=y +CONFIG_BLK_CGROUP_PUNT_BIO=y +CONFIG_BLK_DEV_BSG_COMMON=y +CONFIG_BLK_ICQ=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_WRITE_MOUNTED=y +CONFIG_BLK_DEV_ZONED=y +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_CGROUP_IOLATENCY is not set +# CONFIG_BLK_CGROUP_FC_APPID is not set +CONFIG_BLK_CGROUP_IOCOST=y +# CONFIG_BLK_CGROUP_IOPRIO is not set +CONFIG_BLK_DEBUG_FS=y +CONFIG_BLK_SED_OPAL=y +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +CONFIG_ACORN_PARTITION=y +# CONFIG_ACORN_PARTITION_CUMANA is not set +# CONFIG_ACORN_PARTITION_EESOX is not set +CONFIG_ACORN_PARTITION_ICS=y +# CONFIG_ACORN_PARTITION_ADFS is not set +# CONFIG_ACORN_PARTITION_POWERTEC is not set +CONFIG_ACORN_PARTITION_RISCIX=y +# CONFIG_AIX_PARTITION is not set +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_KARMA_PARTITION=y +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +# CONFIG_CMDLINE_PARTITION is not set +# end of Partition Types + +CONFIG_BLK_PM=y +CONFIG_BLOCK_HOLDER_DEPRECATED=y +CONFIG_BLK_MQ_STACKING=y + +# +# IO Schedulers +# +CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_IOSCHED_BFQ=m +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_BFQ_CGROUP_DEBUG is not set +# end of IO Schedulers + +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PADATA=y +CONFIG_ASN1=y +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ELFCORE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_BINFMT_MISC=m +CONFIG_COREDUMP=y +# end of Executable file formats + +# +# Memory Management options +# +CONFIG_ZPOOL=y +CONFIG_SWAP=y +CONFIG_ZSWAP=y +# CONFIG_ZSWAP_DEFAULT_ON is not set +# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo" +CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC=y +CONFIG_ZSWAP_ZPOOL_DEFAULT="zsmalloc" +CONFIG_ZSMALLOC=y +# CONFIG_ZSMALLOC_STAT is not set +CONFIG_ZSMALLOC_CHAIN_SIZE=8 + +# +# Slab allocator options +# +CONFIG_SLUB=y +CONFIG_KVFREE_RCU_BATCHED=y +# CONFIG_SLUB_TINY is not set +CONFIG_SLAB_MERGE_DEFAULT=y +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_SLAB_BUCKETS=y +# CONFIG_SLUB_STATS is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_RANDOM_KMALLOC_CACHES is not set +# end of Slab allocator options + +CONFIG_SHUFFLE_PAGE_ALLOCATOR=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_SPARSEMEM_VMEMMAP_PREINIT=y +CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y +CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y +CONFIG_ARCH_WANT_HUGETLB_VMEMMAP_PREINIT=y +CONFIG_HAVE_GUP_FAST=y +CONFIG_NUMA_KEEP_MEMINFO=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_EXCLUSIVE_SYSTEM_RAM=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE=y +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_AUTO is not set +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_KERNEL is not set +# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is not set +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MHP_MEMMAP_ON_MEMORY=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_SPLIT_PTE_PTLOCKS=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_SPLIT_PMD_PTLOCKS=y +CONFIG_MEMORY_BALLOON=y +CONFIG_BALLOON_COMPACTION=y +CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 +CONFIG_PAGE_REPORTING=y +CONFIG_MIGRATION=y +CONFIG_DEVICE_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_PCP_BATCH_SCALE_MAX=5 +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_MEMORY_FAILURE=y +CONFIG_HWPOISON_INJECT=m +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_ARCH_WANTS_THP_SWAP=y +CONFIG_MM_ID=y +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y +# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set +# CONFIG_TRANSPARENT_HUGEPAGE_NEVER is not set +CONFIG_THP_SWAP=y +# CONFIG_READ_ONLY_THP_FOR_FS is not set +# CONFIG_NO_PAGE_MAPCOUNT is not set +CONFIG_PAGE_MAPCOUNT=y +CONFIG_PGTABLE_HAS_HUGE_LEAVES=y +CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP=y +CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y +CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +# CONFIG_CMA is not set +CONFIG_PAGE_BLOCK_ORDER=10 +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_GENERIC_EARLY_IOREMAP=y +CONFIG_DEFERRED_STRUCT_PAGE_INIT=y +CONFIG_PAGE_IDLE_FLAG=y +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y +CONFIG_ARCH_HAS_PTE_DEVMAP=y +CONFIG_ARCH_HAS_ZONE_DMA_SET=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ZONE_DEVICE=y +CONFIG_HMM_MIRROR=y +CONFIG_GET_FREE_REGION=y +CONFIG_DEVICE_PRIVATE=y +CONFIG_VMAP_PFN=y +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_HAS_PKEYS=y +CONFIG_ARCH_USES_PG_ARCH_2=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +# CONFIG_DMAPOOL_TEST is not set +CONFIG_ARCH_HAS_PTE_SPECIAL=y +CONFIG_MAPPING_DIRTY_HELPERS=y +CONFIG_MEMFD_CREATE=y +CONFIG_SECRETMEM=y +# CONFIG_ANON_VMA_NAME is not set +CONFIG_HAVE_ARCH_USERFAULTFD_WP=y +CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y +CONFIG_USERFAULTFD=y +CONFIG_PTE_MARKER_UFFD_WP=y +CONFIG_LRU_GEN=y +CONFIG_LRU_GEN_ENABLED=y +# CONFIG_LRU_GEN_STATS is not set +CONFIG_LRU_GEN_WALKS_MMU=y +CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y +CONFIG_PER_VMA_LOCK=y +CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_IOMMU_MM_DATA=y +CONFIG_EXECMEM=y +CONFIG_NUMA_MEMBLKS=y +CONFIG_NUMA_EMU=y +CONFIG_ARCH_HAS_USER_SHADOW_STACK=y +CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y +CONFIG_PT_RECLAIM=y + +# +# Data Access Monitoring +# +CONFIG_DAMON=y +CONFIG_DAMON_VADDR=y +CONFIG_DAMON_PADDR=y +CONFIG_DAMON_SYSFS=y +CONFIG_DAMON_RECLAIM=y +CONFIG_DAMON_LRU_SORT=y +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y +CONFIG_NET_XGRESS=y +CONFIG_NET_REDIRECT=y +CONFIG_SKB_DECRYPTED=y +CONFIG_SKB_EXTENSIONS=y +CONFIG_NET_DEVMEM=y +CONFIG_NET_SHAPER=y +CONFIG_NET_CRC32C=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=m +CONFIG_UNIX=y +CONFIG_AF_UNIX_OOB=y +CONFIG_UNIX_DIAG=m +CONFIG_TLS=m +CONFIG_TLS_DEVICE=y +# CONFIG_TLS_TOE is not set +CONFIG_XFRM=y +CONFIG_XFRM_OFFLOAD=y +CONFIG_XFRM_ALGO=m +CONFIG_XFRM_USER=m +# CONFIG_XFRM_USER_COMPAT is not set +CONFIG_XFRM_INTERFACE=m +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_MIGRATE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_AH=m +CONFIG_XFRM_ESP=m +CONFIG_XFRM_IPCOMP=m +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y +# CONFIG_XFRM_IPTFS is not set +CONFIG_SMC=m +CONFIG_SMC_DIAG=m +# CONFIG_SMC_LO is not set +CONFIG_XDP_SOCKETS=y +CONFIG_XDP_SOCKETS_DIAG=m +CONFIG_NET_HANDSHAKE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_ROUTE_CLASSID=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IP_TUNNEL=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE_COMMON=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=m +CONFIG_NET_UDP_TUNNEL=m +CONFIG_NET_FOU=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_ESP_OFFLOAD=m +# CONFIG_INET_ESPINTCP is not set +CONFIG_INET_IPCOMP=m +CONFIG_INET_TABLE_PERTURB_ORDER=16 +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_RAW_DIAG=m +CONFIG_INET_DIAG_DESTROY=y +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_NV=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_CONG_BBR=m +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_SIGPOOL=y +# CONFIG_TCP_AO is not set +CONFIG_TCP_MD5SIG=y +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_ESP_OFFLOAD=m +# CONFIG_INET6_ESPINTCP is not set +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=y +CONFIG_IPV6_ILA=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_IPV6_VTI=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_FOU=m +CONFIG_IPV6_FOU_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SEG6_HMAC=y +CONFIG_IPV6_SEG6_BPF=y +CONFIG_IPV6_RPL_LWTUNNEL=y +# CONFIG_IPV6_IOAM6_LWTUNNEL is not set +CONFIG_NETLABEL=y +CONFIG_MPTCP=y +CONFIG_INET_MPTCP_DIAG=m +CONFIG_MPTCP_IPV6=y +CONFIG_NETWORK_SECMARK=y +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=m + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_EGRESS=y +CONFIG_NETFILTER_SKIP_EGRESS=y +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_FAMILY_BRIDGE=y +CONFIG_NETFILTER_FAMILY_ARP=y +CONFIG_NETFILTER_BPF_LINK=y +# CONFIG_NETFILTER_NETLINK_HOOK is not set +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_OSF=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_LOG_SYSLOG=m +CONFIG_NETFILTER_CONNCOUNT=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_LABELS=y +CONFIG_NF_CONNTRACK_OVS=y +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_BROADCAST=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_NETLINK_TIMEOUT=m +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_REDIRECT=y +CONFIG_NF_NAT_MASQUERADE=y +CONFIG_NF_NAT_OVS=y +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=m +CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=m +CONFIG_NFT_CONNLIMIT=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m +CONFIG_NFT_TUNNEL=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m +CONFIG_NFT_XFRM=m +CONFIG_NFT_SOCKET=m +CONFIG_NFT_OSF=m +CONFIG_NFT_TPROXY=m +CONFIG_NFT_SYNPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m +# CONFIG_NFT_REJECT_NETDEV is not set +CONFIG_NF_FLOW_TABLE_INET=m +CONFIG_NF_FLOW_TABLE=m +# CONFIG_NF_FLOW_TABLE_PROCFS is not set +CONFIG_NETFILTER_XTABLES=m +# CONFIG_NETFILTER_XTABLES_COMPAT is not set + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_SET=m + +# +# Xtables targets +# +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_NAT=m +CONFIG_NETFILTER_XT_TARGET_NETMAP=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +# end of Core Netfilter Configuration + +CONFIG_IP_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMARK=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_IPMAC=m +CONFIG_IP_SET_HASH_MAC=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_FO=m +CONFIG_IP_VS_OVF=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_MH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m +CONFIG_IP_VS_TWOS=m + +# +# IPVS SH scheduler +# +CONFIG_IP_VS_SH_TAB_BITS=8 + +# +# IPVS MH scheduler +# +CONFIG_IP_VS_MH_TAB_INDEX=12 + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PE_SIP=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_IP_NF_IPTABLES_LEGACY=m +CONFIG_NF_SOCKET_IPV4=m +CONFIG_NF_TPROXY_IPV4=m +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_DUP_IPV4=m +CONFIG_NF_LOG_ARP=m +CONFIG_NF_LOG_IPV4=m +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_NFT_COMPAT_ARP=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +# end of IP: Netfilter Configuration + +# +# IPv6: Netfilter Configuration +# +CONFIG_IP6_NF_IPTABLES_LEGACY=m +CONFIG_NF_SOCKET_IPV6=m +CONFIG_NF_TPROXY_IPV6=m +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NF_DUP_IPV6=m +CONFIG_NF_REJECT_IPV6=m +CONFIG_NF_LOG_IPV6=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_SRH=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +# end of IPv6: Netfilter Configuration + +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_CONNTRACK_BRIDGE=m +CONFIG_BRIDGE_NF_EBTABLES_LEGACY=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_IP_SCTP=m +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +CONFIG_INET_SCTP_DIAG=m +CONFIG_RDS=m +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +# CONFIG_RDS_DEBUG is not set +CONFIG_TIPC=m +CONFIG_TIPC_MEDIA_IB=y +CONFIG_TIPC_MEDIA_UDP=y +CONFIG_TIPC_CRYPTO=y +CONFIG_TIPC_DIAG=m +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=m +CONFIG_L2TP_ETH=m +CONFIG_STP=m +CONFIG_GARP=m +CONFIG_MRP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y +# CONFIG_BRIDGE_MRP is not set +# CONFIG_BRIDGE_CFM is not set +# CONFIG_NET_DSA is not set +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_ATALK=m +# CONFIG_X25 is not set +CONFIG_LAPB=m +CONFIG_PHONET=m +CONFIG_6LOWPAN=m +# CONFIG_6LOWPAN_DEBUGFS is not set +CONFIG_6LOWPAN_NHC=m +CONFIG_6LOWPAN_NHC_DEST=m +CONFIG_6LOWPAN_NHC_FRAGMENT=m +CONFIG_6LOWPAN_NHC_HOP=m +CONFIG_6LOWPAN_NHC_IPV6=m +CONFIG_6LOWPAN_NHC_MOBILITY=m +CONFIG_6LOWPAN_NHC_ROUTING=m +CONFIG_6LOWPAN_NHC_UDP=m +CONFIG_6LOWPAN_GHC_EXT_HDR_HOP=m +CONFIG_6LOWPAN_GHC_UDP=m +CONFIG_6LOWPAN_GHC_ICMPV6=m +CONFIG_6LOWPAN_GHC_EXT_HDR_DEST=m +CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG=m +CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m +CONFIG_IEEE802154=m +# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set +CONFIG_IEEE802154_SOCKET=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_MAC802154=m +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_ETF=m +CONFIG_NET_SCH_MQPRIO_LIB=m +CONFIG_NET_SCH_TAPRIO=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_SKBPRIO=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=y +CONFIG_NET_SCH_CAKE=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_PIE=m +CONFIG_NET_SCH_FQ_PIE=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_PLUG=m +CONFIG_NET_SCH_ETS=m +CONFIG_NET_SCH_DEFAULT=y +# CONFIG_DEFAULT_FQ is not set +# CONFIG_DEFAULT_CODEL is not set +CONFIG_DEFAULT_FQ_CODEL=y +# CONFIG_DEFAULT_FQ_PIE is not set +# CONFIG_DEFAULT_SFQ is not set +# CONFIG_DEFAULT_PFIFO_FAST is not set +CONFIG_DEFAULT_NET_SCH="fq_codel" + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m +CONFIG_NET_CLS_FLOWER=m +CONFIG_NET_CLS_MATCHALL=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_CANID=m +CONFIG_NET_EMATCH_IPSET=m +CONFIG_NET_EMATCH_IPT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_SAMPLE=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_ACT_MPLS=m +CONFIG_NET_ACT_VLAN=m +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_CTINFO=m +CONFIG_NET_ACT_SKBMOD=m +CONFIG_NET_ACT_IFE=m +CONFIG_NET_ACT_TUNNEL_KEY=m +CONFIG_NET_ACT_CT=m +CONFIG_NET_ACT_GATE=m +CONFIG_NET_IFE_SKBMARK=m +CONFIG_NET_IFE_SKBPRIO=m +CONFIG_NET_IFE_SKBTCINDEX=m +# CONFIG_NET_TC_SKB_EXT is not set +CONFIG_NET_SCH_FIFO=y +CONFIG_DCB=y +CONFIG_DNS_RESOLVER=m +CONFIG_BATMAN_ADV=m +CONFIG_BATMAN_ADV_BATMAN_V=y +CONFIG_BATMAN_ADV_BLA=y +CONFIG_BATMAN_ADV_DAT=y +CONFIG_BATMAN_ADV_NC=y +CONFIG_BATMAN_ADV_MCAST=y +# CONFIG_BATMAN_ADV_DEBUG is not set +# CONFIG_BATMAN_ADV_TRACING is not set +CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=m +CONFIG_OPENVSWITCH_VXLAN=m +CONFIG_OPENVSWITCH_GENEVE=m +CONFIG_VSOCKETS=m +CONFIG_VSOCKETS_DIAG=m +CONFIG_VSOCKETS_LOOPBACK=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m +CONFIG_HYPERV_VSOCKETS=m +CONFIG_NETLINK_DIAG=m +CONFIG_MPLS=y +CONFIG_NET_MPLS_GSO=y +CONFIG_MPLS_ROUTING=m +CONFIG_MPLS_IPTUNNEL=m +CONFIG_NET_NSH=m +CONFIG_HSR=m +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_L3_MASTER_DEV=y +CONFIG_QRTR=m +# CONFIG_QRTR_TUN is not set +CONFIG_QRTR_MHI=m +# CONFIG_NET_NCSI is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_MAX_SKB_FRAGS=17 +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_BPF_STREAM_PARSER=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +CONFIG_NET_DROP_MONITOR=m +# end of Network testing +# end of Networking options + +CONFIG_HAMRADIO=y + +# +# Packet Radio protocols +# +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_NETROM=m +CONFIG_ROSE=m + +# +# AX.25 network device drivers +# +CONFIG_MKISS=m +CONFIG_6PACK=m +CONFIG_BPQETHER=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BAYCOM_PAR=m +CONFIG_YAM=m +# end of AX.25 network device drivers + +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m +CONFIG_CAN_GW=m +CONFIG_CAN_J1939=m +CONFIG_CAN_ISOTP=m +CONFIG_BT=m +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_HIDP=m +CONFIG_BT_LE=y +CONFIG_BT_LE_L2CAP_ECRED=y +CONFIG_BT_6LOWPAN=m +CONFIG_BT_LEDS=y +# CONFIG_BT_MSFTEXT is not set +# CONFIG_BT_AOSPEXT is not set +CONFIG_BT_DEBUGFS=y +# CONFIG_BT_SELFTEST is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_RTL=m +CONFIG_BT_QCA=m +CONFIG_BT_MTK=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y +CONFIG_BT_HCIBTUSB_POLL_SYNC=y +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_MTK=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_SERDEV=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_NOKIA=m +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_INTEL=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_RTL=y +CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_AG6XX=y +CONFIG_BT_HCIUART_MRVL=y +# CONFIG_BT_HCIUART_AML is not set +CONFIG_BT_HCIBCM203X=m +# CONFIG_BT_HCIBCM4377 is not set +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +# CONFIG_BT_MTKSDIO is not set +CONFIG_BT_MTKUART=m +CONFIG_BT_HCIRSI=m +# CONFIG_BT_VIRTIO is not set +# CONFIG_BT_NXPUART is not set +CONFIG_BT_INTEL_PCIE=m +# end of Bluetooth device drivers + +CONFIG_AF_RXRPC=m +CONFIG_AF_RXRPC_IPV6=y +# CONFIG_AF_RXRPC_INJECT_LOSS is not set +# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_RXKAD=y +# CONFIG_RXGK is not set +# CONFIG_RXPERF is not set +CONFIG_AF_KCM=m +CONFIG_STREAM_PARSER=y +# CONFIG_MCTP is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_GPIO is not set +CONFIG_NET_9P=m +CONFIG_NET_9P_FD=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_9P_XEN=m +# CONFIG_NET_9P_USBG is not set +CONFIG_NET_9P_RDMA=m +# CONFIG_NET_9P_DEBUG is not set +# CONFIG_CAIF is not set +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set +CONFIG_NFC=m +CONFIG_NFC_DIGITAL=m +CONFIG_NFC_NCI=m +# CONFIG_NFC_NCI_SPI is not set +# CONFIG_NFC_NCI_UART is not set +CONFIG_NFC_HCI=m +# CONFIG_NFC_SHDLC is not set + +# +# Near Field Communication (NFC) devices +# +# CONFIG_NFC_TRF7970A is not set +CONFIG_NFC_MEI_PHY=m +CONFIG_NFC_SIM=m +CONFIG_NFC_PORT100=m +# CONFIG_NFC_VIRTUAL_NCI is not set +# CONFIG_NFC_FDP is not set +CONFIG_NFC_PN544=m +CONFIG_NFC_PN544_MEI=m +CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_USB=m +# CONFIG_NFC_PN533_I2C is not set +# CONFIG_NFC_PN532_UART is not set +# CONFIG_NFC_MICROREAD_MEI is not set +# CONFIG_NFC_MRVL_USB is not set +# CONFIG_NFC_ST_NCI_I2C is not set +# CONFIG_NFC_ST_NCI_SPI is not set +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m +# CONFIG_NFC_S3FWRN5_I2C is not set +# CONFIG_NFC_S3FWRN82_UART is not set +# CONFIG_NFC_ST95HF is not set +# end of Near Field Communication (NFC) devices + +CONFIG_PSAMPLE=m +CONFIG_NET_IFE=m +CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_SOCK_VALIDATE_XMIT=y +CONFIG_NET_SELFTESTS=m +CONFIG_NET_SOCK_MSG=y +CONFIG_NET_DEVLINK=y +CONFIG_PAGE_POOL=y +CONFIG_PAGE_POOL_STATS=y +CONFIG_FAILOVER=m +CONFIG_ETHTOOL_NETLINK=y + +# +# Device Drivers +# +CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_PCIEAER=y +CONFIG_PCIEAER_INJECT=m +CONFIG_PCIEAER_CXL=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y +CONFIG_PCIE_DPC=y +CONFIG_PCIE_PTM=y +# CONFIG_PCIE_EDR is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_REALLOC_ENABLE_AUTO=y +CONFIG_PCI_STUB=m +CONFIG_PCI_PF_STUB=m +CONFIG_XEN_PCIDEV_FRONTEND=m +CONFIG_PCI_ATS=y +CONFIG_PCI_DOE=y +CONFIG_PCI_LOCKLESS_CONFIG=y +CONFIG_PCI_IOV=y +# CONFIG_PCI_NPEM is not set +CONFIG_PCI_PRI=y +CONFIG_PCI_PASID=y +# CONFIG_PCIE_TPH is not set +CONFIG_PCI_P2PDMA=y +CONFIG_PCI_LABEL=y +CONFIG_PCI_HYPERV=m +# CONFIG_PCIE_BUS_TUNE_OFF is not set +CONFIG_PCIE_BUS_DEFAULT=y +# CONFIG_PCIE_BUS_SAFE is not set +# CONFIG_PCIE_BUS_PERFORMANCE is not set +# CONFIG_PCIE_BUS_PEER2PEER is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +# CONFIG_HOTPLUG_PCI_OCTEONEP is not set +CONFIG_HOTPLUG_PCI_SHPC=y + +# +# PCI controller drivers +# +CONFIG_VMD=m +CONFIG_PCI_HYPERV_INTERFACE=m + +# +# Cadence-based PCIe controllers +# +# end of Cadence-based PCIe controllers + +# +# DesignWare-based PCIe controllers +# +# CONFIG_PCI_MESON is not set +# CONFIG_PCIE_DW_PLAT_HOST is not set +# end of DesignWare-based PCIe controllers + +# +# Mobiveil-based PCIe controllers +# +# end of Mobiveil-based PCIe controllers + +# +# PLDA-based PCIe controllers +# +# end of PLDA-based PCIe controllers +# end of PCI controller drivers + +# +# PCI Endpoint +# +# CONFIG_PCI_ENDPOINT is not set +# end of PCI Endpoint + +# +# PCI switch controller drivers +# +# CONFIG_PCI_SW_SWITCHTEC is not set +# end of PCI switch controller drivers + +# CONFIG_PCI_PWRCTRL_SLOT is not set +CONFIG_CXL_BUS=y +CONFIG_CXL_PCI=m +# CONFIG_CXL_MEM_RAW_COMMANDS is not set +CONFIG_CXL_ACPI=m +CONFIG_CXL_PMEM=m +CONFIG_CXL_MEM=m +# CONFIG_CXL_FEATURES is not set +CONFIG_CXL_PORT=y +CONFIG_CXL_SUSPEND=y +CONFIG_CXL_REGION=y +# CONFIG_CXL_REGION_INVALIDATION_TEST is not set +CONFIG_CXL_MCE=y +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +CONFIG_YENTA=m +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_PCCARD_NONSTATIC=y +# CONFIG_RAPIDIO is not set + +# +# Generic Driver Options +# +CONFIG_AUXILIARY_BUS=y +# CONFIG_UEVENT_HELPER is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_DEVTMPFS_SAFE is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_DEBUG=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_FW_LOADER_SYSFS=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_LOADER_COMPRESS_XZ=y +CONFIG_FW_LOADER_COMPRESS_ZSTD=y +CONFIG_FW_CACHE=y +CONFIG_FW_UPLOAD=y +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +CONFIG_HMEM_REPORTING=y +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_SYS_HYPERVISOR=y +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SPI=m +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_IRQ=y +CONFIG_REGMAP_SOUNDWIRE=m +CONFIG_REGMAP_SOUNDWIRE_MBQ=m +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set +# end of Generic Driver Options + +# +# Bus devices +# +CONFIG_MHI_BUS=m +# CONFIG_MHI_BUS_DEBUG is not set +CONFIG_MHI_BUS_PCI_GENERIC=m +# CONFIG_MHI_BUS_EP is not set +# end of Bus devices + +# +# Cache Drivers +# +# end of Cache Drivers + +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +# end of ARM System Control and Management Interface Protocol + +CONFIG_EDD=m +# CONFIG_EDD_OFF is not set +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_IBFT=m +CONFIG_FW_CFG_SYSFS=m +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set +CONFIG_SYSFB=y +CONFIG_SYSFB_SIMPLEFB=y +CONFIG_FW_CS_DSP=m +CONFIG_GOOGLE_FIRMWARE=y +CONFIG_GOOGLE_SMI=m +# CONFIG_GOOGLE_CBMEM is not set +CONFIG_GOOGLE_COREBOOT_TABLE=y +CONFIG_GOOGLE_MEMCONSOLE=m +# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set +CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=y +CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m +CONFIG_GOOGLE_VPD=m + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_ESRT=y +CONFIG_EFI_VARS_PSTORE=m +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EFI_SOFT_RESERVE=y +CONFIG_EFI_DXE_MEM_ATTRIBUTES=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_BOOTLOADER_CONTROL=m +CONFIG_EFI_CAPSULE_LOADER=m +# CONFIG_EFI_TEST is not set +CONFIG_EFI_DEV_PATH_PARSER=y +CONFIG_APPLE_PROPERTIES=y +CONFIG_RESET_ATTACK_MITIGATION=y +# CONFIG_EFI_RCI2_TABLE is not set +# CONFIG_EFI_DISABLE_PCI_DMA is not set +CONFIG_EFI_EARLYCON=y +CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y +# CONFIG_EFI_DISABLE_RUNTIME is not set +# CONFIG_EFI_COCO_SECRET is not set +CONFIG_UNACCEPTED_MEMORY=y +CONFIG_EFI_EMBEDDED_FIRMWARE=y +# end of EFI (Extensible Firmware Interface) Support + +CONFIG_UEFI_CPER=y +CONFIG_UEFI_CPER_X86=y + +# +# Qualcomm firmware drivers +# +# end of Qualcomm firmware drivers + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +# CONFIG_FWCTL is not set +CONFIG_GNSS=m +CONFIG_GNSS_SERIAL=m +CONFIG_GNSS_MTK_SERIAL=m +CONFIG_GNSS_SIRF_SERIAL=m +CONFIG_GNSS_UBX_SERIAL=m +CONFIG_GNSS_USB=m +CONFIG_MTD=m +# CONFIG_MTD_TESTS is not set + +# +# Partition parsers +# +# CONFIG_MTD_CMDLINE_PARTS is not set +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# end of Partition parsers + +# +# User Modules And Translation Layers +# +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m + +# +# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. +# +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m +# CONFIG_SM_FTL is not set +CONFIG_MTD_OOPS=m +# CONFIG_MTD_PSTORE is not set +CONFIG_MTD_SWAP=m +# CONFIG_MTD_PARTITIONED_MASTER is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m +# end of RAM/ROM/Flash chip drivers + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +# CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set +CONFIG_MTD_SBC_GXX=m +# CONFIG_MTD_AMD76XROM is not set +# CONFIG_MTD_ICHXROM is not set +# CONFIG_MTD_ESB2ROM is not set +# CONFIG_MTD_CK804XROM is not set +# CONFIG_MTD_SCB2_FLASH is not set +CONFIG_MTD_NETtel=m +# CONFIG_MTD_L440GX is not set +CONFIG_MTD_PCI=m +CONFIG_MTD_PCMCIA=m +# CONFIG_MTD_PCMCIA_ANONYMOUS is not set +CONFIG_MTD_PLATRAM=m +# end of Mapping drivers for chip access + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +CONFIG_MTD_DATAFLASH=m +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +# CONFIG_MTD_DATAFLASH_OTP is not set +# CONFIG_MTD_MCHP23K256 is not set +# CONFIG_MTD_MCHP48L640 is not set +CONFIG_MTD_SST25L=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +# end of Self-contained MTD device drivers + +# +# NAND +# +CONFIG_MTD_NAND_CORE=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +# CONFIG_MTD_ONENAND_GENERIC is not set +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_RAW_NAND=m + +# +# Raw/parallel NAND flash controllers +# +# CONFIG_MTD_NAND_DENALI_PCI is not set +CONFIG_MTD_NAND_CAFE=m +# CONFIG_MTD_NAND_MXIC is not set +# CONFIG_MTD_NAND_GPIO is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_NAND_ARASAN is not set + +# +# Misc +# +CONFIG_MTD_SM_COMMON=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_RICOH=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +# CONFIG_MTD_SPI_NAND is not set + +# +# ECC engine support +# +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_ECC_SW_HAMMING=y +# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set +CONFIG_MTD_NAND_ECC_SW_BCH=y +# CONFIG_MTD_NAND_ECC_MXIC is not set +# end of ECC engine support +# end of NAND + +# +# LPDDR & LPDDR2 PCM memory drivers +# +CONFIG_MTD_LPDDR=m +CONFIG_MTD_QINFO_PROBE=m +# end of LPDDR & LPDDR2 PCM memory drivers + +CONFIG_MTD_SPI_NOR=m +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set +CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y +# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_MTD_UBI_BLOCK=y +# CONFIG_MTD_UBI_NVMEM is not set +# CONFIG_MTD_HYPERBUS is not set +# CONFIG_OF is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_PC_PCMCIA=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_NULL_BLK=m +CONFIG_BLK_DEV_FD=m +# CONFIG_BLK_DEV_FD_RAWCMD is not set +CONFIG_CDROM=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_ZRAM=m +CONFIG_ZRAM_BACKEND_LZ4=y +CONFIG_ZRAM_BACKEND_LZ4HC=y +CONFIG_ZRAM_BACKEND_ZSTD=y +CONFIG_ZRAM_BACKEND_DEFLATE=y +# CONFIG_ZRAM_BACKEND_842 is not set +# CONFIG_ZRAM_BACKEND_LZO is not set +CONFIG_ZRAM_DEF_COMP_LZ4=y +# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set +# CONFIG_ZRAM_DEF_COMP_ZSTD is not set +# CONFIG_ZRAM_DEF_COMP_DEFLATE is not set +CONFIG_ZRAM_DEF_COMP="lz4" +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZRAM_TRACK_ENTRY_ACTIME=y +CONFIG_ZRAM_MEMORY_TRACKING=y +# CONFIG_ZRAM_MULTI_COMP is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=16384 +# CONFIG_CDROM_PKTCDVD is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_XEN_BLKDEV_FRONTEND=m +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_VIRTIO_BLK=m +CONFIG_BLK_DEV_RBD=m +CONFIG_BLK_DEV_UBLK=m +CONFIG_BLKDEV_UBLK_LEGACY_OPCODES=y +# CONFIG_BLK_DEV_ZONED_LOOP is not set + +# +# NVME Support +# +CONFIG_NVME_KEYRING=y +CONFIG_NVME_AUTH=y +CONFIG_NVME_CORE=y +CONFIG_BLK_DEV_NVME=y +CONFIG_NVME_MULTIPATH=y +# CONFIG_NVME_VERBOSE_ERRORS is not set +CONFIG_NVME_HWMON=y +CONFIG_NVME_FABRICS=m +CONFIG_NVME_RDMA=m +CONFIG_NVME_FC=m +CONFIG_NVME_TCP=m +CONFIG_NVME_TCP_TLS=y +CONFIG_NVME_HOST_AUTH=y +CONFIG_NVME_TARGET=m +# CONFIG_NVME_TARGET_DEBUGFS is not set +CONFIG_NVME_TARGET_PASSTHRU=y +CONFIG_NVME_TARGET_LOOP=m +CONFIG_NVME_TARGET_RDMA=m +CONFIG_NVME_TARGET_FC=m +CONFIG_NVME_TARGET_FCLOOP=m +CONFIG_NVME_TARGET_TCP=m +CONFIG_NVME_TARGET_TCP_TLS=y +CONFIG_NVME_TARGET_AUTH=y +# end of NVME Support + +# +# Misc devices +# +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_AD525X_DPOT=m +CONFIG_AD525X_DPOT_I2C=m +CONFIG_AD525X_DPOT_SPI=m +# CONFIG_DUMMY_IRQ is not set +CONFIG_IBM_ASM=m +CONFIG_PHANTOM=m +# CONFIG_RPMB is not set +# CONFIG_TI_FPC202 is not set +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +CONFIG_ICS932S401=m +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_HP_ILO=m +CONFIG_APDS9802ALS=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m +CONFIG_HMC6352=m +CONFIG_DS1682=m +CONFIG_VMWARE_BALLOON=m +# CONFIG_LATTICE_ECP3_CONFIG is not set +# CONFIG_SRAM is not set +# CONFIG_DW_XDATA_PCIE is not set +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_XILINX_SDFEC is not set +CONFIG_MISC_RTSX=m +CONFIG_NTSYNC=m +CONFIG_NSM=m +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEPROM_93CX6=m +# CONFIG_EEPROM_93XX46 is not set +# CONFIG_EEPROM_IDT_89HPESX is not set +CONFIG_EEPROM_EE1004=m +# end of EEPROM support + +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +CONFIG_SENSORS_LIS3_I2C=m +CONFIG_ALTERA_STAPL=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MEI_ME=m +CONFIG_INTEL_MEI_TXE=m +CONFIG_INTEL_MEI_GSC=m +CONFIG_INTEL_MEI_VSC_HW=m +CONFIG_INTEL_MEI_VSC=m +CONFIG_INTEL_MEI_HDCP=m +CONFIG_INTEL_MEI_PXP=m +CONFIG_INTEL_MEI_GSC_PROXY=m +CONFIG_VMWARE_VMCI=m +# CONFIG_GENWQE is not set +# CONFIG_BCM_VK is not set +# CONFIG_MISC_ALCOR_PCI is not set +CONFIG_MISC_RTSX_PCI=m +CONFIG_MISC_RTSX_USB=m +# CONFIG_UACCE is not set +CONFIG_PVPANIC=y +CONFIG_PVPANIC_MMIO=m +CONFIG_PVPANIC_PCI=m +# CONFIG_GP_PCI1XXXX is not set +# CONFIG_KEBA_CP500 is not set +# CONFIG_AMD_SBRMI_I2C is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +CONFIG_RAID_ATTRS=m +CONFIG_SCSI_COMMON=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_NETLINK=y +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +CONFIG_BLK_DEV_SR=m +CONFIG_CHR_DEV_SG=y +CONFIG_BLK_DEV_BSG=y +CONFIG_CHR_DEV_SCH=m +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SRP_ATTRS=m +# end of SCSI Transports + +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_ISCSI_BOOT_SYSFS=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_BE2ISCSI=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m +CONFIG_SCSI_MPT3SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPI3MR=m +CONFIG_SCSI_SMARTPQI=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_BUSLOGIC=m +# CONFIG_SCSI_FLASHPOINT is not set +CONFIG_SCSI_MYRB=m +CONFIG_SCSI_MYRS=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_HYPERV_STORAGE=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_SCSI_SNIC=m +# CONFIG_SCSI_SNIC_DEBUG_FS is not set +CONFIG_SCSI_DMX3191D=m +# CONFIG_SCSI_FDOMAIN_PCI is not set +CONFIG_SCSI_ISCI=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLA_FC=m +CONFIG_TCM_QLA2XXX=m +# CONFIG_TCM_QLA2XXX_DEBUG is not set +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_QEDI=m +CONFIG_QEDF=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SCSI_EFCT is not set +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_WD719X=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_VIRTIO=y +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +CONFIG_PCMCIA_AHA152X=m +# CONFIG_PCMCIA_FDOMAIN is not set +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_RDAC=m +CONFIG_SCSI_DH_HP_SW=m +CONFIG_SCSI_DH_EMC=m +CONFIG_SCSI_DH_ALUA=m +# end of SCSI device support + +CONFIG_ATA=y +CONFIG_SATA_HOST=y +CONFIG_PATA_TIMINGS=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_FORCE=y +CONFIG_ATA_ACPI=y +CONFIG_SATA_ZPODD=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=y +CONFIG_SATA_MOBILE_LPM_POLICY=3 +# CONFIG_SATA_AHCI_PLATFORM is not set +# CONFIG_AHCI_DWC is not set +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_ACARD_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +# CONFIG_SATA_DWC is not set +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m + +# +# PATA SFF controllers with BMDMA +# +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD64X=m +# CONFIG_PATA_CYPRESS is not set +CONFIG_PATA_EFAR=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +CONFIG_PATA_NS87415=m +CONFIG_PATA_OLDPIIX=y +# CONFIG_PATA_OPTIDMA is not set +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RDC=m +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=m +CONFIG_PATA_TOSHIBA=m +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_VIA=m +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +CONFIG_PATA_MPIIX=m +CONFIG_PATA_NS87410=m +# CONFIG_PATA_OPTI is not set +CONFIG_PATA_PCMCIA=m +CONFIG_PATA_RZ1000=m +# CONFIG_PATA_PARPORT is not set + +# +# Generic fallback / legacy drivers +# +# CONFIG_PATA_ACPI is not set +CONFIG_ATA_GENERIC=m +CONFIG_PATA_LEGACY=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_BITMAP_FILE=y +# CONFIG_MD_LINEAR is not set +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_CLUSTER=m +CONFIG_BCACHE=m +# CONFIG_BCACHE_DEBUG is not set +# CONFIG_BCACHE_ASYNC_REGISTRATION is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_BUFIO=m +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_PERSISTENT_DATA=m +CONFIG_DM_UNSTRIPED=m +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_SMQ=m +CONFIG_DM_WRITECACHE=m +# CONFIG_DM_EBS is not set +CONFIG_DM_ERA=m +CONFIG_DM_CLONE=m +CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +# CONFIG_DM_MULTIPATH_HST is not set +# CONFIG_DM_MULTIPATH_IOA is not set +CONFIG_DM_DELAY=m +# CONFIG_DM_DUST is not set +CONFIG_DM_UEVENT=y +CONFIG_DM_FLAKEY=m +CONFIG_DM_VERITY=m +CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y +CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING=y +CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_PLATFORM_KEYRING=y +CONFIG_DM_VERITY_FEC=y +CONFIG_DM_SWITCH=m +CONFIG_DM_LOG_WRITES=m +CONFIG_DM_INTEGRITY=m +CONFIG_DM_ZONED=m +CONFIG_DM_AUDIT=y +CONFIG_DM_VDO=m +CONFIG_TARGET_CORE=m +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_PSCSI=m +CONFIG_TCM_USER2=m +CONFIG_LOOPBACK_TARGET=m +CONFIG_TCM_FC=m +CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m +CONFIG_SBP_TARGET=m +# CONFIG_REMOTE_TARGET is not set +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +# CONFIG_FUSION_LOGGING is not set + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_NOSY=m +# end of IEEE 1394 (FireWire) support + +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_NETDEVICES=y +CONFIG_MII=m +CONFIG_NET_CORE=y +CONFIG_BONDING=m +CONFIG_DUMMY=m +CONFIG_WIREGUARD=m +# CONFIG_WIREGUARD_DEBUG is not set +CONFIG_OVPN=m +CONFIG_EQUALIZER=m +CONFIG_NET_FC=y +CONFIG_IFB=m +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_IPVLAN_L3S=y +CONFIG_IPVLAN=m +CONFIG_IPVTAP=m +CONFIG_VXLAN=m +CONFIG_GENEVE=m +# CONFIG_BAREUDP is not set +CONFIG_GTP=m +# CONFIG_PFCP is not set +# CONFIG_AMT is not set +CONFIG_MACSEC=m +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +# CONFIG_NETCONSOLE_EXTENDED_LOG is not set +CONFIG_NETPOLL=y +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_TUN=m +CONFIG_TAP=m +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_VETH=m +CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m +CONFIG_NETKIT=y +CONFIG_NET_VRF=m +CONFIG_VSOCKMON=m +CONFIG_MHI_NET=m +CONFIG_SUNGEM_PHY=m +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM20020_CS=m +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_DUMMY=m +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E=m +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_SOLOS=m +CONFIG_ETHERNET=y +CONFIG_MDIO=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_3C589=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_NET_VENDOR_AGERE=y +CONFIG_ET131X=m +CONFIG_NET_VENDOR_ALACRITECH=y +# CONFIG_SLICOSS is not set +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_ALTERA_TSE is not set +CONFIG_NET_VENDOR_AMAZON=y +CONFIG_ENA_ETHERNET=m +CONFIG_NET_VENDOR_AMD=y +CONFIG_AMD8111_ETH=m +CONFIG_PCNET32=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_AMD_XGBE=m +CONFIG_AMD_XGBE_DCB=y +CONFIG_AMD_XGBE_HAVE_ECC=y +# CONFIG_PDS_CORE is not set +CONFIG_NET_VENDOR_AQUANTIA=y +CONFIG_AQTION=m +# CONFIG_NET_VENDOR_ARC is not set +CONFIG_NET_VENDOR_ASIX=y +# CONFIG_SPI_AX88796C is not set +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_ATL2=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_ALX=m +# CONFIG_CX_ECAT is not set +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +# CONFIG_BCMGENET is not set +CONFIG_BNX2=m +CONFIG_CNIC=m +CONFIG_TIGON3=m +CONFIG_TIGON3_HWMON=y +CONFIG_BNX2X=m +CONFIG_BNX2X_SRIOV=y +# CONFIG_SYSTEMPORT is not set +CONFIG_BNXT=m +CONFIG_BNXT_SRIOV=y +CONFIG_BNXT_FLOWER_OFFLOAD=y +CONFIG_BNXT_DCB=y +CONFIG_BNXT_HWMON=y +CONFIG_NET_VENDOR_CADENCE=y +# CONFIG_MACB is not set +CONFIG_NET_VENDOR_CAVIUM=y +# CONFIG_THUNDER_NIC_PF is not set +# CONFIG_THUNDER_NIC_VF is not set +# CONFIG_THUNDER_NIC_BGX is not set +# CONFIG_THUNDER_NIC_RGX is not set +CONFIG_CAVIUM_PTP=m +CONFIG_LIQUIDIO_CORE=m +CONFIG_LIQUIDIO=m +CONFIG_LIQUIDIO_VF=m +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4_DCB=y +CONFIG_CHELSIO_T4_FCOE=y +CONFIG_CHELSIO_T4VF=m +CONFIG_CHELSIO_LIB=m +CONFIG_CHELSIO_INLINE_CRYPTO=y +# CONFIG_CHELSIO_IPSEC_INLINE is not set +# CONFIG_CHELSIO_TLS_DEVICE is not set +CONFIG_NET_VENDOR_CISCO=y +CONFIG_ENIC=m +CONFIG_NET_VENDOR_CORTINA=y +CONFIG_NET_VENDOR_DAVICOM=y +# CONFIG_DM9051 is not set +# CONFIG_DNET is not set +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_NET_VENDOR_DLINK=y +CONFIG_DL2K=m +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_BE2NET=m +CONFIG_BE2NET_HWMON=y +CONFIG_BE2NET_BE2=y +CONFIG_BE2NET_BE3=y +CONFIG_BE2NET_LANCER=y +CONFIG_BE2NET_SKYHAWK=y +CONFIG_NET_VENDOR_ENGLEDER=y +# CONFIG_TSNEP is not set +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_FUJITSU=y +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_NET_VENDOR_FUNGIBLE=y +# CONFIG_FUN_ETH is not set +CONFIG_NET_VENDOR_GOOGLE=y +CONFIG_GVE=m +CONFIG_NET_VENDOR_HISILICON=y +# CONFIG_HIBMCGE is not set +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_HINIC=m +# CONFIG_HINIC3 is not set +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_LIBETH=m +CONFIG_LIBIE=m +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y +CONFIG_IGB=m +CONFIG_IGB_HWMON=y +CONFIG_IGB_DCA=y +CONFIG_IGBVF=m +CONFIG_IXGBE=m +CONFIG_IXGBE_HWMON=y +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_IPSEC=y +CONFIG_IXGBEVF=m +CONFIG_IXGBEVF_IPSEC=y +CONFIG_I40E=m +CONFIG_I40E_DCB=y +CONFIG_IAVF=m +CONFIG_I40EVF=m +CONFIG_ICE=m +CONFIG_ICE_HWMON=y +CONFIG_ICE_SWITCHDEV=y +CONFIG_ICE_HWTS=y +# CONFIG_FM10K is not set +CONFIG_IGC=m +CONFIG_IGC_LEDS=y +CONFIG_IDPF=m +# CONFIG_IDPF_SINGLEQ is not set +CONFIG_JME=m +CONFIG_NET_VENDOR_ADI=y +# CONFIG_ADIN1110 is not set +CONFIG_NET_VENDOR_LITEX=y +CONFIG_NET_VENDOR_MARVELL=y +# CONFIG_MVMDIO is not set +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKGE_GENESIS=y +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +# CONFIG_OCTEON_EP is not set +# CONFIG_OCTEON_EP_VF is not set +# CONFIG_PRESTERA is not set +CONFIG_NET_VENDOR_MELLANOX=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_EN_DCB=y +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_CORE_GEN2=y +CONFIG_MLX5_CORE=m +CONFIG_MLX5_FPGA=y +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_EN_ARFS=y +CONFIG_MLX5_EN_RXNFC=y +CONFIG_MLX5_MPFS=y +CONFIG_MLX5_ESWITCH=y +CONFIG_MLX5_BRIDGE=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_IPOIB=y +# CONFIG_MLX5_MACSEC is not set +# CONFIG_MLX5_EN_IPSEC is not set +# CONFIG_MLX5_EN_TLS is not set +CONFIG_MLX5_SW_STEERING=y +CONFIG_MLX5_HW_STEERING=y +# CONFIG_MLX5_SF is not set +# CONFIG_MLX5_DPLL is not set +# CONFIG_MLXSW_CORE is not set +CONFIG_MLXFW=m +CONFIG_NET_VENDOR_META=y +# CONFIG_FBNIC is not set +CONFIG_NET_VENDOR_MICREL=y +# CONFIG_KS8842 is not set +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set +CONFIG_KSZ884X_PCI=m +CONFIG_NET_VENDOR_MICROCHIP=y +# CONFIG_ENC28J60 is not set +# CONFIG_ENCX24J600 is not set +CONFIG_LAN743X=m +# CONFIG_LAN865X is not set +# CONFIG_VCAP is not set +CONFIG_NET_VENDOR_MICROSEMI=y +CONFIG_NET_VENDOR_MICROSOFT=y +CONFIG_MICROSOFT_MANA=m +CONFIG_NET_VENDOR_MYRI=y +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +# CONFIG_FEALNX is not set +CONFIG_NET_VENDOR_NI=y +# CONFIG_NI_XGE_MANAGEMENT_ENET is not set +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NATSEMI=m +CONFIG_NS83820=m +CONFIG_NET_VENDOR_NETERION=y +CONFIG_S2IO=m +CONFIG_NET_VENDOR_NETRONOME=y +CONFIG_NFP=m +CONFIG_NFP_APP_FLOWER=y +CONFIG_NFP_APP_ABM_NIC=y +CONFIG_NFP_NET_IPSEC=y +# CONFIG_NFP_DEBUG is not set +CONFIG_NET_VENDOR_8390=y +CONFIG_PCMCIA_AXNET=m +CONFIG_NE2K_PCI=m +CONFIG_PCMCIA_PCNET=m +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_FORCEDETH=m +CONFIG_NET_VENDOR_OKI=y +# CONFIG_ETHOC is not set +CONFIG_NET_VENDOR_PACKET_ENGINES=y +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_NET_VENDOR_PENSANDO=y +CONFIG_IONIC=m +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLCNIC_SRIOV=y +CONFIG_QLCNIC_DCB=y +CONFIG_QLCNIC_HWMON=y +CONFIG_NETXEN_NIC=m +CONFIG_QED=m +CONFIG_QED_LL2=y +CONFIG_QED_SRIOV=y +CONFIG_QEDE=m +CONFIG_QED_RDMA=y +CONFIG_QED_ISCSI=y +CONFIG_QED_FCOE=y +CONFIG_QED_OOO=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_BNA=m +CONFIG_NET_VENDOR_QUALCOMM=y +# CONFIG_QCOM_EMAC is not set +# CONFIG_RMNET is not set +CONFIG_NET_VENDOR_RDC=y +CONFIG_R6040=m +CONFIG_NET_VENDOR_REALTEK=y +# CONFIG_ATP is not set +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_R8169=m +# CONFIG_R8169_LEDS is not set +# CONFIG_RTASE is not set +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +# CONFIG_ROCKER is not set +CONFIG_NET_VENDOR_SAMSUNG=y +# CONFIG_SXGBE_ETH is not set +# CONFIG_NET_VENDOR_SEEQ is not set +CONFIG_NET_VENDOR_SILAN=y +CONFIG_SC92031=m +CONFIG_NET_VENDOR_SIS=y +CONFIG_SIS900=m +CONFIG_SIS190=m +CONFIG_NET_VENDOR_SOLARFLARE=y +CONFIG_SFC=m +CONFIG_SFC_MTD=y +CONFIG_SFC_MCDI_MON=y +CONFIG_SFC_SRIOV=y +CONFIG_SFC_MCDI_LOGGING=y +CONFIG_SFC_FALCON=m +CONFIG_SFC_FALCON_MTD=y +CONFIG_SFC_SIENA=m +CONFIG_SFC_SIENA_MTD=y +CONFIG_SFC_SIENA_MCDI_MON=y +CONFIG_SFC_SIENA_SRIOV=y +CONFIG_SFC_SIENA_MCDI_LOGGING=y +CONFIG_NET_VENDOR_SMSC=y +CONFIG_PCMCIA_SMC91C92=m +CONFIG_EPIC100=m +# CONFIG_SMSC911X is not set +CONFIG_SMSC9420=m +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_SELFTESTS is not set +CONFIG_STMMAC_PLATFORM=m +CONFIG_DWMAC_GENERIC=m +CONFIG_DWMAC_INTEL=m +# CONFIG_STMMAC_PCI is not set +CONFIG_NET_VENDOR_SUN=y +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_CASSINI=m +CONFIG_NIU=m +CONFIG_NET_VENDOR_SYNOPSYS=y +# CONFIG_DWC_XLGMAC is not set +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_TEHUTI=m +# CONFIG_TEHUTI_TN40 is not set +CONFIG_NET_VENDOR_TI=y +# CONFIG_TI_CPSW_PHY_SEL is not set +CONFIG_TLAN=m +CONFIG_NET_VENDOR_VERTEXCOM=y +# CONFIG_MSE102X is not set +CONFIG_NET_VENDOR_VIA=y +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_VIA_VELOCITY=m +CONFIG_NET_VENDOR_WANGXUN=y +# CONFIG_NGBE is not set +# CONFIG_TXGBE is not set +CONFIG_NET_VENDOR_WIZNET=y +# CONFIG_WIZNET_W5100 is not set +# CONFIG_WIZNET_W5300 is not set +CONFIG_NET_VENDOR_XILINX=y +# CONFIG_XILINX_EMACLITE is not set +# CONFIG_XILINX_LL_TEMAC is not set +CONFIG_NET_VENDOR_XIRCOM=y +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_FDDI=y +CONFIG_DEFXX=m +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +# CONFIG_ROADRUNNER_LARGE_RINGS is not set +CONFIG_PHYLINK=m +CONFIG_PHYLIB=m +CONFIG_SWPHY=y +CONFIG_LED_TRIGGER_PHY=y +CONFIG_FIXED_PHY=m +CONFIG_SFP=m + +# +# MII PHY device drivers +# +# CONFIG_AS21XXX_PHY is not set +# CONFIG_AIR_EN8811H_PHY is not set +CONFIG_AMD_PHY=m +# CONFIG_ADIN_PHY is not set +# CONFIG_ADIN1100_PHY is not set +CONFIG_AQUANTIA_PHY=m +CONFIG_AX88796B_PHY=m +CONFIG_BROADCOM_PHY=m +# CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_BCM84881_PHY is not set +CONFIG_BCM87XX_PHY=m +CONFIG_BCM_NET_PHYLIB=m +CONFIG_BCM_NET_PHYPTP=m +CONFIG_CICADA_PHY=m +CONFIG_CORTINA_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_ICPLUS_PHY=m +CONFIG_LXT_PHY=m +# CONFIG_INTEL_XWAY_PHY is not set +CONFIG_LSI_ET1011C_PHY=m +CONFIG_MARVELL_PHY=m +CONFIG_MARVELL_10G_PHY=m +# CONFIG_MARVELL_88Q2XXX_PHY is not set +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MAXLINEAR_86110_PHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +CONFIG_MICREL_PHY=m +# CONFIG_MICROCHIP_T1S_PHY is not set +CONFIG_MICROCHIP_PHY=m +CONFIG_MICROCHIP_T1_PHY=m +CONFIG_MICROCHIP_PHY_RDS_PTP=m +CONFIG_MICROSEMI_PHY=m +# CONFIG_MOTORCOMM_PHY is not set +CONFIG_NATIONAL_PHY=m +# CONFIG_NXP_CBTX_PHY is not set +# CONFIG_NXP_C45_TJA11XX_PHY is not set +# CONFIG_NXP_TJA11XX_PHY is not set +# CONFIG_NCN26000_PHY is not set +CONFIG_QCOM_NET_PHYLIB=m +CONFIG_AT803X_PHY=m +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +CONFIG_QSEMI_PHY=m +CONFIG_REALTEK_PHY=m +# CONFIG_REALTEK_PHY_HWMON is not set +CONFIG_RENESAS_PHY=m +CONFIG_ROCKCHIP_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_STE10XP=m +CONFIG_TERANETICS_PHY=m +CONFIG_DP83822_PHY=m +CONFIG_DP83TC811_PHY=m +CONFIG_DP83848_PHY=m +CONFIG_DP83867_PHY=m +# CONFIG_DP83869_PHY is not set +CONFIG_DP83TD510_PHY=m +# CONFIG_DP83TG720_PHY is not set +CONFIG_VITESSE_PHY=m +# CONFIG_XILINX_GMII2RGMII is not set +# CONFIG_MICREL_KS8995MA is not set +# CONFIG_PSE_CONTROLLER is not set +CONFIG_CAN_DEV=m +CONFIG_CAN_VCAN=m +CONFIG_CAN_VXCAN=m +CONFIG_CAN_NETLINK=y +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_RX_OFFLOAD=y +CONFIG_CAN_CAN327=m +# CONFIG_CAN_KVASER_PCIEFD is not set +CONFIG_CAN_SLCAN=m +# CONFIG_CAN_C_CAN is not set +# CONFIG_CAN_CC770 is not set +# CONFIG_CAN_CTUCANFD_PCI is not set +# CONFIG_CAN_ESD_402_PCI is not set +# CONFIG_CAN_IFI_CANFD is not set +# CONFIG_CAN_M_CAN is not set +CONFIG_CAN_PEAK_PCIEFD=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_PCMCIA=m +# CONFIG_CAN_F81601 is not set +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PEAK_PCMCIA=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_SJA1000_ISA=m +# CONFIG_CAN_SJA1000_PLATFORM is not set +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m + +# +# CAN SPI interfaces +# +CONFIG_CAN_HI311X=m +CONFIG_CAN_MCP251X=m +CONFIG_CAN_MCP251XFD=m +# CONFIG_CAN_MCP251XFD_SANITY is not set +# end of CAN SPI interfaces + +# +# CAN USB interfaces +# +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB=m +# CONFIG_CAN_ETAS_ES58X is not set +# CONFIG_CAN_F81604 is not set +CONFIG_CAN_GS_USB=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_MCBA_USB=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_UCAN=m +# end of CAN USB interfaces + +# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_MDIO_BUS=m +CONFIG_FWNODE_MDIO=m +CONFIG_ACPI_MDIO=m +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +CONFIG_MDIO_I2C=m +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_MSCC_MIIM is not set +# CONFIG_MDIO_THUNDER is not set + +# +# MDIO Multiplexers +# + +# +# PCS device drivers +# +CONFIG_PCS_XPCS=m +# end of PCS device drivers + +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +# CONFIG_PPPOE_HASH_BITS_1 is not set +# CONFIG_PPPOE_HASH_BITS_2 is not set +CONFIG_PPPOE_HASH_BITS_4=y +# CONFIG_PPPOE_HASH_BITS_8 is not set +CONFIG_PPPOE_HASH_BITS=4 +CONFIG_PPTP=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_SLIP=m +CONFIG_SLHC=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_USB_NET_DRIVERS=m +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m +CONFIG_USB_NET_CH9200=m +CONFIG_USB_NET_AQC111=m +CONFIG_USB_RTL8153_ECM=m +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_ADMTEK=y +CONFIG_ADM8211=m +CONFIG_ATH_COMMON=m +CONFIG_WLAN_VENDOR_ATH=y +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +# CONFIG_ATH5K_TRACER is not set +CONFIG_ATH5K_PCI=y +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K=m +CONFIG_ATH9K_PCI=y +# CONFIG_ATH9K_AHB is not set +# CONFIG_ATH9K_DYNACK is not set +# CONFIG_ATH9K_WOW is not set +CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_CHANNEL_CONTEXT=y +CONFIG_ATH9K_PCOEM=y +# CONFIG_ATH9K_PCI_NO_EEPROM is not set +CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set +# CONFIG_ATH9K_HWRNG is not set +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +CONFIG_CARL9170_WPC=y +# CONFIG_CARL9170_HWRNG is not set +CONFIG_ATH6KL=m +CONFIG_ATH6KL_SDIO=m +CONFIG_ATH6KL_USB=m +# CONFIG_ATH6KL_DEBUG is not set +# CONFIG_ATH6KL_TRACING is not set +CONFIG_AR5523=m +CONFIG_WIL6210=m +CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_WIL6210_DEBUGFS=y +CONFIG_ATH10K=m +CONFIG_ATH10K_CE=y +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_SDIO is not set +CONFIG_ATH10K_USB=m +# CONFIG_ATH10K_DEBUG is not set +# CONFIG_ATH10K_DEBUGFS is not set +CONFIG_ATH10K_LEDS=y +# CONFIG_ATH10K_TRACING is not set +# CONFIG_WCN36XX is not set +CONFIG_ATH11K=m +CONFIG_ATH11K_PCI=m +# CONFIG_ATH11K_DEBUG is not set +# CONFIG_ATH11K_TRACING is not set +CONFIG_ATH12K=m +# CONFIG_ATH12K_DEBUG is not set +# CONFIG_ATH12K_TRACING is not set +# CONFIG_ATH12K_COREDUMP is not set +CONFIG_WLAN_VENDOR_ATMEL=y +CONFIG_AT76C50X_USB=m +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_B43=m +CONFIG_B43_BCMA=y +CONFIG_B43_SSB=y +CONFIG_B43_BUSES_BCMA_AND_SSB=y +# CONFIG_B43_BUSES_BCMA is not set +# CONFIG_B43_BUSES_SSB is not set +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +CONFIG_B43_SDIO=y +CONFIG_B43_BCMA_PIO=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_G=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +CONFIG_B43LEGACY_DEBUG=y +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_PROTO_MSGBUF=y +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +CONFIG_BRCMFMAC_PCIE=y +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set +CONFIG_WLAN_VENDOR_INTEL=y +# CONFIG_IPW2100 is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_IWLEGACY=m +CONFIG_IWL4965=m +CONFIG_IWL3945=m + +# +# iwl3945 / iwl4965 Debugging Options +# +# CONFIG_IWLEGACY_DEBUG is not set +# end of iwl3945 / iwl4965 Debugging Options + +CONFIG_IWLWIFI=m +CONFIG_IWLWIFI_LEDS=y +CONFIG_IWLDVM=m +CONFIG_IWLMVM=m +CONFIG_IWLMLD=m +CONFIG_IWLWIFI_OPMODE_MODULAR=y + +# +# Debugging Options +# +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_DEVICE_TRACING=y +# end of Debugging Options + +CONFIG_WLAN_VENDOR_INTERSIL=y +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +CONFIG_P54_PCI=m +# CONFIG_P54_SPI is not set +CONFIG_P54_LEDS=y +CONFIG_WLAN_VENDOR_MARVELL=y +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBERTAS_SDIO=m +# CONFIG_LIBERTAS_SPI is not set +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_MESH=y +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m +CONFIG_MWL8K=m +CONFIG_WLAN_VENDOR_MEDIATEK=y +CONFIG_MT7601U=m +CONFIG_MT76_CORE=m +CONFIG_MT76_LEDS=y +CONFIG_MT76_USB=m +CONFIG_MT76x02_LIB=m +CONFIG_MT76x02_USB=m +CONFIG_MT76_CONNAC_LIB=m +CONFIG_MT792x_LIB=m +CONFIG_MT792x_USB=m +CONFIG_MT76x0_COMMON=m +CONFIG_MT76x0U=m +CONFIG_MT76x0E=m +CONFIG_MT76x2_COMMON=m +CONFIG_MT76x2E=m +CONFIG_MT76x2U=m +# CONFIG_MT7603E is not set +CONFIG_MT7615_COMMON=m +CONFIG_MT7615E=m +CONFIG_MT7663_USB_SDIO_COMMON=m +CONFIG_MT7663U=m +# CONFIG_MT7663S is not set +CONFIG_MT7915E=m +CONFIG_MT7921_COMMON=m +CONFIG_MT7921E=m +# CONFIG_MT7921S is not set +CONFIG_MT7921U=m +CONFIG_MT7996E=m +CONFIG_MT7925_COMMON=m +CONFIG_MT7925E=m +CONFIG_MT7925U=m +CONFIG_WLAN_VENDOR_MICROCHIP=y +# CONFIG_WILC1000_SDIO is not set +# CONFIG_WILC1000_SPI is not set +CONFIG_WLAN_VENDOR_PURELIFI=y +# CONFIG_PLFXLC is not set +CONFIG_WLAN_VENDOR_RALINK=y +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT33XX=y +CONFIG_RT2800PCI_RT35XX=y +CONFIG_RT2800PCI_RT53XX=y +CONFIG_RT2800PCI_RT3290=y +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +# CONFIG_RT2800USB_UNKNOWN is not set +CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m +CONFIG_RT2X00_LIB_MMIO=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WLAN_VENDOR_REALTEK=y +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CE=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192DE=m +CONFIG_RTL8723AE=m +CONFIG_RTL8723BE=m +CONFIG_RTL8188EE=m +CONFIG_RTL8192EE=m +CONFIG_RTL8821AE=m +CONFIG_RTL8192CU=m +# CONFIG_RTL8192DU is not set +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8192D_COMMON=m +CONFIG_RTL8723_COMMON=m +CONFIG_RTLBTCOEXIST=m +CONFIG_RTL8XXXU=m +# CONFIG_RTL8XXXU_UNTESTED is not set +CONFIG_RTW88=m +CONFIG_RTW88_CORE=m +CONFIG_RTW88_PCI=m +CONFIG_RTW88_SDIO=m +CONFIG_RTW88_USB=m +CONFIG_RTW88_8822B=m +CONFIG_RTW88_8822C=m +CONFIG_RTW88_8723X=m +CONFIG_RTW88_8703B=m +CONFIG_RTW88_8723D=m +CONFIG_RTW88_8821C=m +CONFIG_RTW88_88XXA=m +CONFIG_RTW88_8821A=m +CONFIG_RTW88_8812A=m +CONFIG_RTW88_8814A=m +CONFIG_RTW88_8822BE=m +CONFIG_RTW88_8822BS=m +CONFIG_RTW88_8822BU=m +CONFIG_RTW88_8822CE=m +CONFIG_RTW88_8822CS=m +CONFIG_RTW88_8822CU=m +CONFIG_RTW88_8723DE=m +CONFIG_RTW88_8723DS=m +CONFIG_RTW88_8723CS=m +CONFIG_RTW88_8723DU=m +CONFIG_RTW88_8821CE=m +CONFIG_RTW88_8821CS=m +CONFIG_RTW88_8821CU=m +CONFIG_RTW88_8821AU=m +CONFIG_RTW88_8812AU=m +CONFIG_RTW88_8814AE=m +CONFIG_RTW88_8814AU=m +# CONFIG_RTW88_DEBUG is not set +# CONFIG_RTW88_DEBUGFS is not set +CONFIG_RTW88_LEDS=y +CONFIG_RTW89=m +CONFIG_RTW89_CORE=m +CONFIG_RTW89_PCI=m +CONFIG_RTW89_8851B=m +CONFIG_RTW89_8852A=m +CONFIG_RTW89_8852B_COMMON=m +CONFIG_RTW89_8852B=m +CONFIG_RTW89_8852BT=m +CONFIG_RTW89_8852C=m +CONFIG_RTW89_8922A=m +CONFIG_RTW89_8851BE=m +CONFIG_RTW89_8852AE=m +CONFIG_RTW89_8852BE=m +CONFIG_RTW89_8852BTE=m +CONFIG_RTW89_8852CE=m +CONFIG_RTW89_8922AE=m +# CONFIG_RTW89_DEBUGMSG is not set +CONFIG_WLAN_VENDOR_RSI=y +CONFIG_RSI_91X=m +CONFIG_RSI_DEBUGFS=y +# CONFIG_RSI_SDIO is not set +CONFIG_RSI_USB=m +CONFIG_RSI_COEX=y +CONFIG_WLAN_VENDOR_SILABS=y +# CONFIG_WFX is not set +CONFIG_WLAN_VENDOR_ST=y +# CONFIG_CW1200 is not set +# CONFIG_WLAN_VENDOR_TI is not set +CONFIG_WLAN_VENDOR_ZYDAS=y +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_WLAN_VENDOR_QUANTENNA=y +# CONFIG_QTNFMAC_PCIE is not set +CONFIG_MAC80211_HWSIM=m +# CONFIG_VIRT_WIFI is not set +CONFIG_WAN=y +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +# CONFIG_HDLC_X25 is not set +# CONFIG_FRAMER is not set +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +# CONFIG_PC300TOO is not set +CONFIG_FARSYNC=m +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKELB=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_MRF24J40=m +CONFIG_IEEE802154_CC2520=m +CONFIG_IEEE802154_ATUSB=m +CONFIG_IEEE802154_ADF7242=m +# CONFIG_IEEE802154_CA8210 is not set +# CONFIG_IEEE802154_MCR20A is not set +CONFIG_IEEE802154_HWSIM=m + +# +# Wireless WAN +# +CONFIG_WWAN=m +CONFIG_WWAN_DEBUGFS=y +# CONFIG_WWAN_HWSIM is not set +CONFIG_MHI_WWAN_CTRL=m +CONFIG_MHI_WWAN_MBIM=m +CONFIG_IOSM=m +CONFIG_MTK_T7XX=m +# end of Wireless WAN + +CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_VMXNET3=m +CONFIG_FUJITSU_ES=m +CONFIG_USB4_NET=m +CONFIG_HYPERV_NET=m +# CONFIG_NETDEVSIM is not set +CONFIG_NET_FAILOVER=m +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=y +CONFIG_MISDN=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_L1OIP=m + +# +# mISDN hardware drivers +# +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_W6692=m +# CONFIG_MISDN_NETJET is not set +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_SPARSEKMAP=m +CONFIG_INPUT_MATRIXKMAP=m +CONFIG_INPUT_VIVALDIFMAP=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_EVDEV=m + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADC is not set +CONFIG_KEYBOARD_ADP5588=m +# CONFIG_KEYBOARD_ADP5589 is not set +CONFIG_KEYBOARD_APPLESPI=m +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1050 is not set +# CONFIG_KEYBOARD_QT1070 is not set +CONFIG_KEYBOARD_QT2160=m +# CONFIG_KEYBOARD_DLINK_DIR685 is not set +CONFIG_KEYBOARD_LKKBD=m +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_GPIO_POLLED=m +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +CONFIG_KEYBOARD_LM8323=m +# CONFIG_KEYBOARD_LM8333 is not set +CONFIG_KEYBOARD_MAX7359=m +# CONFIG_KEYBOARD_MPR121 is not set +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_OPENCORES=m +# CONFIG_KEYBOARD_PINEPHONE is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_KEYBOARD_SUNKBD=m +# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYBOARD_CROS_EC=m +# CONFIG_KEYBOARD_CYPRESS_SF is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=m +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y +CONFIG_MOUSE_PS2_SENTELIC=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_FOCALTECH=y +CONFIG_MOUSE_PS2_VMMOUSE=y +CONFIG_MOUSE_PS2_SMBUS=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_CYAPA=m +CONFIG_MOUSE_ELAN_I2C=m +CONFIG_MOUSE_ELAN_I2C_I2C=y +CONFIG_MOUSE_ELAN_I2C_SMBUS=y +CONFIG_MOUSE_VSXXXAA=m +# CONFIG_MOUSE_GPIO is not set +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOUSE_SYNAPTICS_USB=m +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +# CONFIG_JOYSTICK_ADC is not set +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=m +CONFIG_JOYSTICK_IFORCE_232=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_TURBOGRAFX=m +# CONFIG_JOYSTICK_AS5011 is not set +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_WALKERA0701=m +# CONFIG_JOYSTICK_PSXPAD_SPI is not set +CONFIG_JOYSTICK_PXRC=m +# CONFIG_JOYSTICK_QWIIC is not set +# CONFIG_JOYSTICK_FSIA6B is not set +# CONFIG_JOYSTICK_SENSEHAT is not set +# CONFIG_JOYSTICK_SEESAW is not set +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_HANWANG=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_PEGASUS=m +CONFIG_TABLET_SERIAL_WACOM4=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +# CONFIG_TOUCHSCREEN_AD7879_SPI is not set +# CONFIG_TOUCHSCREEN_ADC is not set +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +# CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_BU21029 is not set +# CONFIG_TOUCHSCREEN_CHIPONE_ICN8505 is not set +# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_CYTTSP5 is not set +CONFIG_TOUCHSCREEN_DYNAPRO=m +CONFIG_TOUCHSCREEN_HAMPSHIRE=m +CONFIG_TOUCHSCREEN_EETI=m +# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set +# CONFIG_TOUCHSCREEN_EXC3000 is not set +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GOODIX=m +# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C is not set +# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI is not set +# CONFIG_TOUCHSCREEN_HIDEEP is not set +# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set +# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_ILITEK is not set +# CONFIG_TOUCHSCREEN_S6SY761 is not set +CONFIG_TOUCHSCREEN_GUNZE=m +# CONFIG_TOUCHSCREEN_EKTF2127 is not set +CONFIG_TOUCHSCREEN_ELAN=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set +# CONFIG_TOUCHSCREEN_MSG2638 is not set +CONFIG_TOUCHSCREEN_MTOUCH=m +# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set +# CONFIG_TOUCHSCREEN_IMAGIS is not set +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_ELO=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +CONFIG_TOUCHSCREEN_USB_NEXIO=y +CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TSC_SERIO=m +# CONFIG_TOUCHSCREEN_TSC2004 is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +CONFIG_TOUCHSCREEN_TSC2007=m +# CONFIG_TOUCHSCREEN_TSC2007_IIO is not set +# CONFIG_TOUCHSCREEN_RM_TS is not set +CONFIG_TOUCHSCREEN_SILEAD=m +# CONFIG_TOUCHSCREEN_SIS_I2C is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_STMFTS is not set +CONFIG_TOUCHSCREEN_SUR40=m +CONFIG_TOUCHSCREEN_SURFACE3_SPI=m +# CONFIG_TOUCHSCREEN_SX8654 is not set +CONFIG_TOUCHSCREEN_TPS6507X=m +# CONFIG_TOUCHSCREEN_ZET6223 is not set +# CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set +# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set +# CONFIG_TOUCHSCREEN_IQS5XX is not set +# CONFIG_TOUCHSCREEN_IQS7211 is not set +# CONFIG_TOUCHSCREEN_ZINITIX is not set +# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set +CONFIG_INPUT_PCSPKR=m +# CONFIG_INPUT_MMA8450 is not set +CONFIG_INPUT_APANEL=m +# CONFIG_INPUT_GPIO_BEEPER is not set +# CONFIG_INPUT_GPIO_DECODER is not set +# CONFIG_INPUT_GPIO_VIBRA is not set +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +# CONFIG_INPUT_KXTJ9 is not set +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_CM109=m +# CONFIG_INPUT_REGULATOR_HAPTIC is not set +CONFIG_INPUT_AXP20X_PEK=m +CONFIG_INPUT_UINPUT=m +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +# CONFIG_INPUT_PWM_VIBRA is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_DA7280_HAPTICS is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_IQS269A is not set +# CONFIG_INPUT_IQS626A is not set +# CONFIG_INPUT_IQS7222 is not set +# CONFIG_INPUT_CMA3000 is not set +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y +CONFIG_INPUT_IDEAPAD_SLIDEBAR=m +CONFIG_INPUT_SOC_BUTTON_ARRAY=m +# CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set +# CONFIG_INPUT_DRV2667_HAPTICS is not set +CONFIG_RMI4_CORE=m +# CONFIG_RMI4_I2C is not set +# CONFIG_RMI4_SPI is not set +CONFIG_RMI4_SMB=m +CONFIG_RMI4_F03=y +CONFIG_RMI4_F03_SERIO=m +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y +CONFIG_RMI4_F34=y +CONFIG_RMI4_F3A=y +# CONFIG_RMI4_F54 is not set +CONFIG_RMI4_F55=y + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m +CONFIG_SERIO_ALTERA_PS2=m +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +CONFIG_HYPERV_KEYBOARD=m +# CONFIG_SERIO_GPIO_PS2 is not set +# CONFIG_USERIO is not set +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +# CONFIG_LEGACY_TIOCSTI is not set +CONFIG_LDISC_AUTOLOAD=y + +# +# Serial drivers +# +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_PNP=y +# CONFIG_SERIAL_8250_16550A_VARIANTS is not set +CONFIG_SERIAL_8250_FINTEK=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCILIB=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_EXAR=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_PCI1XXXX is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_DWLIB=y +CONFIG_SERIAL_8250_DW=y +# CONFIG_SERIAL_8250_RT288X is not set +CONFIG_SERIAL_8250_LPSS=m +CONFIG_SERIAL_8250_MID=y +CONFIG_SERIAL_8250_PERICOM=y +# CONFIG_SERIAL_8250_NI is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_JSM=m +# CONFIG_SERIAL_LANTIQ is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_ARC is not set +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_RP2_NR_UARTS=32 +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_FSL_LINFLEXUART is not set +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_MCTRL_GPIO=y +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_N_HDLC=m +CONFIG_IPWIRELESS=m +# CONFIG_N_GSM is not set +CONFIG_NOZOMI=m +# CONFIG_NULL_TTY is not set +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +CONFIG_TTY_PRINTK=m +CONFIG_TTY_PRINTK_LEVEL=6 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_VIRTIO_CONSOLE=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_DMI_DECODE=y +CONFIG_IPMI_PLAT_DATA=y +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_SSIF=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +# CONFIG_HW_RANDOM_BA431 is not set +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +# CONFIG_HW_RANDOM_XIPHERA is not set +CONFIG_APPLICOM=m +CONFIG_MWAVE=m +CONFIG_DEVMEM=y +CONFIG_NVRAM=m +CONFIG_DEVPORT=y +CONFIG_HPET=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_MMAP_DEFAULT=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_TCG_TPM=y +CONFIG_TCG_TPM2_HMAC=y +CONFIG_HW_RANDOM_TPM=y +CONFIG_TCG_TIS_CORE=y +CONFIG_TCG_TIS=y +CONFIG_TCG_TIS_SPI=m +CONFIG_TCG_TIS_SPI_CR50=y +# CONFIG_TCG_TIS_I2C is not set +CONFIG_TCG_TIS_I2C_CR50=m +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +CONFIG_TCG_XEN=m +CONFIG_TCG_CRB=y +CONFIG_TCG_VTPM_PROXY=m +# CONFIG_TCG_SVSM is not set +CONFIG_TCG_TIS_ST33ZP24=m +CONFIG_TCG_TIS_ST33ZP24_I2C=m +# CONFIG_TCG_TIS_ST33ZP24_SPI is not set +CONFIG_TELCLOCK=m +# CONFIG_XILLYBUS is not set +# CONFIG_XILLYUSB is not set +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_ACPI_I2C_OPREGION=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_MUX=m + +# +# Multiplexer I2C Chip support +# +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_LTC4306 is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PCA954x is not set +# CONFIG_I2C_MUX_REG is not set +# CONFIG_I2C_MUX_MLXCPLD is not set +# end of Multiplexer I2C Chip support + +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_SMBUS=m +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_CCGX_UCSI=m +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_AMD_MP2=m +# CONFIG_I2C_AMD_ASF is not set +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_CHT_WC=m +CONFIG_I2C_NFORCE2=m +# CONFIG_I2C_NVIDIA_GPU is not set +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +# CONFIG_I2C_ZHAOXIN is not set + +# +# ACPI drivers +# +CONFIG_I2C_SCMI=m + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +CONFIG_I2C_DESIGNWARE_CORE=y +# CONFIG_I2C_DESIGNWARE_SLAVE is not set +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_DESIGNWARE_BAYTRAIL=y +CONFIG_I2C_DESIGNWARE_PCI=m +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_KEMPLD=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_SIMTEC=m +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_LJCA=m +# CONFIG_I2C_CP2615 is not set +CONFIG_I2C_PARPORT=m +# CONFIG_I2C_PCI1XXXX is not set +CONFIG_I2C_ROBOTFUZZ_OSIF=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VIPERBOARD=m + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_MLXCPLD is not set +CONFIG_I2C_CROS_EC_TUNNEL=m +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +CONFIG_I2C_STUB=m +# CONFIG_I2C_SLAVE is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +# CONFIG_I3C is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y +CONFIG_SPI_MEM=y +CONFIG_SPI_OFFLOAD=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_AXI_SPI_ENGINE is not set +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPI_CH341 is not set +CONFIG_SPI_CS42L43=m +# CONFIG_SPI_DESIGNWARE is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_INTEL_PCI is not set +# CONFIG_SPI_INTEL_PLATFORM is not set +CONFIG_SPI_LM70_LLP=m +CONFIG_SPI_LJCA=m +# CONFIG_SPI_MICROCHIP_CORE is not set +# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set +# CONFIG_SPI_LANTIQ_SSC is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PCI1XXXX is not set +CONFIG_SPI_PXA2XX=m +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_SIFIVE is not set +# CONFIG_SPI_MXIC is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_ZYNQMP_GQSPI is not set +# CONFIG_SPI_AMD is not set + +# +# SPI Multiplexer support +# +# CONFIG_SPI_MUX is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_LOOPBACK_TEST is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_SPI_SLAVE is not set +CONFIG_SPI_DYNAMIC=y + +# +# SPI Offload triggers +# +# CONFIG_SPI_OFFLOAD_TRIGGER_PWM is not set +# CONFIG_SPMI is not set +# CONFIG_HSI is not set +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_PPS_CLIENT_PARPORT=m +# CONFIG_PPS_CLIENT_GPIO is not set +# CONFIG_PPS_GENERATOR is not set + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y +CONFIG_DP83640_PHY=m +CONFIG_PTP_1588_CLOCK_INES=m +CONFIG_PTP_1588_CLOCK_KVM=m +CONFIG_PTP_1588_CLOCK_VMCLOCK=m +CONFIG_PTP_1588_CLOCK_IDT82P33=m +CONFIG_PTP_1588_CLOCK_IDTCM=m +# CONFIG_PTP_1588_CLOCK_FC3W is not set +# CONFIG_PTP_1588_CLOCK_MOCK is not set +CONFIG_PTP_1588_CLOCK_VMW=m +CONFIG_PTP_1588_CLOCK_OCP=m +# end of PTP clock support + +CONFIG_PINCTRL=y +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_AMD=y +# CONFIG_PINCTRL_CY8C95X0 is not set +# CONFIG_PINCTRL_MCP23S08 is not set +# CONFIG_PINCTRL_SX150X is not set +CONFIG_PINCTRL_CS42L43=m + +# +# Intel pinctrl drivers +# +CONFIG_PINCTRL_BAYTRAIL=y +CONFIG_PINCTRL_CHERRYVIEW=y +# CONFIG_PINCTRL_LYNXPOINT is not set +CONFIG_PINCTRL_INTEL=y +CONFIG_PINCTRL_INTEL_PLATFORM=m +CONFIG_PINCTRL_ALDERLAKE=m +CONFIG_PINCTRL_BROXTON=y +CONFIG_PINCTRL_CANNONLAKE=y +CONFIG_PINCTRL_CEDARFORK=y +CONFIG_PINCTRL_DENVERTON=y +CONFIG_PINCTRL_ELKHARTLAKE=m +CONFIG_PINCTRL_EMMITSBURG=m +CONFIG_PINCTRL_GEMINILAKE=y +CONFIG_PINCTRL_ICELAKE=y +CONFIG_PINCTRL_JASPERLAKE=m +CONFIG_PINCTRL_LAKEFIELD=m +CONFIG_PINCTRL_LEWISBURG=y +CONFIG_PINCTRL_METEORLAKE=m +CONFIG_PINCTRL_METEORPOINT=m +CONFIG_PINCTRL_SUNRISEPOINT=y +CONFIG_PINCTRL_TIGERLAKE=y +# end of Intel pinctrl drivers + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_FASTPATH_LIMIT=512 +CONFIG_GPIO_ACPI=y +CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_REGMAP=m +CONFIG_GPIO_SWNODE_UNDEFINED=y +CONFIG_GPIO_IDIO_16=m + +# +# Memory mapped GPIO drivers +# +# CONFIG_GPIO_ALTERA is not set +CONFIG_GPIO_AMDPT=m +# CONFIG_GPIO_DWAPB is not set +CONFIG_GPIO_EXAR=m +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_GRANITERAPIDS is not set +# CONFIG_GPIO_ICH is not set +# CONFIG_GPIO_MB86S7X is not set +# CONFIG_GPIO_POLARFIRE_SOC is not set +# CONFIG_GPIO_XILINX is not set +CONFIG_GPIO_AMD_FCH=m +# end of Memory mapped GPIO drivers + +# +# Port-mapped I/O GPIO drivers +# +# CONFIG_GPIO_VX855 is not set +CONFIG_GPIO_F7188X=m +# CONFIG_GPIO_IT87 is not set +# CONFIG_GPIO_SCH is not set +# CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_WINBOND is not set +# CONFIG_GPIO_WS16C48 is not set +# end of Port-mapped I/O GPIO drivers + +# +# I2C GPIO expanders +# +# CONFIG_GPIO_FXL6408 is not set +# CONFIG_GPIO_DS4520 is not set +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCA9570 is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_TPIC2810 is not set +# end of I2C GPIO expanders + +# +# MFD GPIO expanders +# +# CONFIG_GPIO_CROS_EC is not set +# CONFIG_GPIO_CRYSTAL_COVE is not set +# CONFIG_GPIO_ELKHARTLAKE is not set +CONFIG_GPIO_KEMPLD=m +CONFIG_GPIO_LJCA=m +# CONFIG_GPIO_TPS68470 is not set +CONFIG_GPIO_WHISKEY_COVE=m +# end of MFD GPIO expanders + +# +# PCI GPIO expanders +# +# CONFIG_GPIO_AMD8111 is not set +CONFIG_GPIO_ML_IOH=m +CONFIG_GPIO_PCI_IDIO_16=m +CONFIG_GPIO_PCIE_IDIO_24=m +# CONFIG_GPIO_RDC321X is not set +# end of PCI GPIO expanders + +# +# SPI GPIO expanders +# +# CONFIG_GPIO_74X164 is not set +# CONFIG_GPIO_MAX3191X is not set +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_PISOSR is not set +# CONFIG_GPIO_XRA1403 is not set +# end of SPI GPIO expanders + +# +# USB GPIO expanders +# +CONFIG_GPIO_VIPERBOARD=m +CONFIG_GPIO_MPSSE=m +# end of USB GPIO expanders + +# +# Virtual GPIO drivers +# +# CONFIG_GPIO_AGGREGATOR is not set +# CONFIG_GPIO_LATCH is not set +# CONFIG_GPIO_MOCKUP is not set +# CONFIG_GPIO_VIRTIO is not set +# CONFIG_GPIO_SIM is not set +# end of Virtual GPIO drivers + +# +# GPIO Debugging utilities +# +# CONFIG_GPIO_SLOPPY_LOGIC_ANALYZER is not set +# CONFIG_GPIO_VIRTUSER is not set +# end of GPIO Debugging utilities + +CONFIG_W1=m +CONFIG_W1_CON=y + +# +# 1-wire Bus Masters +# +# CONFIG_W1_MASTER_AMD_AXI is not set +# CONFIG_W1_MASTER_MATROX is not set +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_GPIO=m +# CONFIG_W1_MASTER_SGI is not set +# CONFIG_W1_MASTER_UART is not set +# end of 1-wire Bus Masters + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2405=m +CONFIG_W1_SLAVE_DS2408=m +CONFIG_W1_SLAVE_DS2408_READBACK=y +CONFIG_W1_SLAVE_DS2413=m +CONFIG_W1_SLAVE_DS2406=m +CONFIG_W1_SLAVE_DS2423=m +CONFIG_W1_SLAVE_DS2805=m +# CONFIG_W1_SLAVE_DS2430 is not set +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2438=m +# CONFIG_W1_SLAVE_DS250X is not set +CONFIG_W1_SLAVE_DS2780=m +CONFIG_W1_SLAVE_DS2781=m +CONFIG_W1_SLAVE_DS28E04=m +CONFIG_W1_SLAVE_DS28E17=m +# end of 1-wire Slaves + +# CONFIG_POWER_RESET is not set +# CONFIG_POWER_SEQUENCING is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_POWER_SUPPLY_HWMON=y +# CONFIG_GENERIC_ADC_BATTERY is not set +# CONFIG_IP5XXX_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_CHARGER_ADP5061 is not set +# CONFIG_BATTERY_CHAGALL is not set +# CONFIG_BATTERY_CW2015 is not set +CONFIG_BATTERY_DS2760=m +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SAMSUNG_SDI is not set +CONFIG_BATTERY_SBS=m +# CONFIG_CHARGER_SBS is not set +# CONFIG_MANAGER_SBS is not set +CONFIG_BATTERY_BQ27XXX=m +# CONFIG_BATTERY_BQ27XXX_I2C is not set +CONFIG_BATTERY_BQ27XXX_HDQ=m +# CONFIG_CHARGER_AXP20X is not set +# CONFIG_BATTERY_AXP20X is not set +# CONFIG_AXP20X_POWER is not set +CONFIG_AXP288_CHARGER=m +CONFIG_AXP288_FUEL_GAUGE=m +# CONFIG_BATTERY_MAX17040 is not set +CONFIG_BATTERY_MAX17042=m +# CONFIG_BATTERY_MAX1720X is not set +# CONFIG_BATTERY_MAX1721X is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_LT3651 is not set +# CONFIG_CHARGER_LTC4162L is not set +# CONFIG_CHARGER_MAX77976 is not set +# CONFIG_CHARGER_MAX8971 is not set +# CONFIG_CHARGER_BQ2415X is not set +CONFIG_CHARGER_BQ24190=m +# CONFIG_CHARGER_BQ24257 is not set +# CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ2515X is not set +# CONFIG_CHARGER_BQ25890 is not set +# CONFIG_CHARGER_BQ25980 is not set +# CONFIG_CHARGER_BQ256XX is not set +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_GOLDFISH is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_CHARGER_RT9455 is not set +# CONFIG_CHARGER_RT9467 is not set +# CONFIG_CHARGER_RT9471 is not set +CONFIG_CHARGER_CROS_USBPD=m +CONFIG_CHARGER_CROS_PCHG=m +CONFIG_CHARGER_CROS_CONTROL=m +# CONFIG_FUEL_GAUGE_STC3117 is not set +# CONFIG_CHARGER_BD99954 is not set +CONFIG_CHARGER_WILCO=m +CONFIG_BATTERY_SURFACE=m +CONFIG_CHARGER_SURFACE=m +# CONFIG_BATTERY_UG3105 is not set +# CONFIG_FUEL_GAUGE_MM8013 is not set +CONFIG_HWMON=y +CONFIG_HWMON_VID=m +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +# CONFIG_SENSORS_AD7314 is not set +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +# CONFIG_SENSORS_ADM1177 is not set +CONFIG_SENSORS_ADM9240=m +# CONFIG_SENSORS_ADT7310 is not set +# CONFIG_SENSORS_ADT7410 is not set +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +# CONFIG_SENSORS_AHT10 is not set +CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m +# CONFIG_SENSORS_AS370 is not set +CONFIG_SENSORS_ASC7621=m +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATXP1=m +# CONFIG_SENSORS_CHIPCAP2 is not set +CONFIG_SENSORS_CORSAIR_CPRO=m +CONFIG_SENSORS_CORSAIR_PSU=m +CONFIG_SENSORS_CROS_EC=m +CONFIG_SENSORS_DRIVETEMP=m +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_DELL_SMM=m +CONFIG_I8K=y +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_FTSTEUTATES=m +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_G760A=m +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_HIH6130 is not set +# CONFIG_SENSORS_HS3001 is not set +# CONFIG_SENSORS_HTU31 is not set +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IIO_HWMON=m +CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_CORETEMP=m +# CONFIG_SENSORS_ISL28022 is not set +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_JC42=m +# CONFIG_SENSORS_POWERZ is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LENOVO_EC is not set +CONFIG_SENSORS_LINEAGE=m +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2947_SPI is not set +# CONFIG_SENSORS_LTC2990 is not set +# CONFIG_SENSORS_LTC2991 is not set +# CONFIG_SENSORS_LTC2992 is not set +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +# CONFIG_SENSORS_LTC4222 is not set +CONFIG_SENSORS_LTC4245=m +# CONFIG_SENSORS_LTC4260 is not set +CONFIG_SENSORS_LTC4261=m +# CONFIG_SENSORS_LTC4282 is not set +CONFIG_SENSORS_MAX1111=m +# CONFIG_SENSORS_MAX127 is not set +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX1668=m +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX31722 is not set +# CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX31760 is not set +# CONFIG_MAX31827 is not set +# CONFIG_SENSORS_MAX6620 is not set +# CONFIG_SENSORS_MAX6621 is not set +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6650=m +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MAX31790 is not set +# CONFIG_SENSORS_MC34VR500 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_TC654 is not set +# CONFIG_SENSORS_TPS23861 is not set +CONFIG_SENSORS_MENF21BMC_HWMON=m +# CONFIG_SENSORS_MR75203 is not set +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +# CONFIG_SENSORS_LM95234 is not set +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LM95245=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_NCT6683=m +CONFIG_SENSORS_NCT6775_CORE=m +CONFIG_SENSORS_NCT6775=m +# CONFIG_SENSORS_NCT6775_I2C is not set +# CONFIG_SENSORS_NCT7363 is not set +CONFIG_SENSORS_NCT7802=m +CONFIG_SENSORS_NCT7904=m +CONFIG_SENSORS_NPCM7XX=m +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set +# CONFIG_SENSORS_NZXT_SMART2 is not set +# CONFIG_SENSORS_OCC_P8_I2C is not set +CONFIG_SENSORS_PCF8591=m +CONFIG_PMBUS=m +CONFIG_SENSORS_PMBUS=m +# CONFIG_SENSORS_ACBEL_FSG032 is not set +# CONFIG_SENSORS_ADM1266 is not set +# CONFIG_SENSORS_ADM1275 is not set +# CONFIG_SENSORS_ADP1050 is not set +# CONFIG_SENSORS_BEL_PFE is not set +# CONFIG_SENSORS_BPA_RS600 is not set +# CONFIG_SENSORS_CRPS is not set +# CONFIG_SENSORS_DELTA_AHE50DC_FAN is not set +# CONFIG_SENSORS_FSP_3Y is not set +# CONFIG_SENSORS_IBM_CFFPS is not set +# CONFIG_SENSORS_DPS920AB is not set +# CONFIG_SENSORS_INA233 is not set +# CONFIG_SENSORS_INSPUR_IPSPS is not set +# CONFIG_SENSORS_IR35221 is not set +# CONFIG_SENSORS_IR36021 is not set +# CONFIG_SENSORS_IR38064 is not set +# CONFIG_SENSORS_IRPS5401 is not set +# CONFIG_SENSORS_ISL68137 is not set +# CONFIG_SENSORS_LM25066 is not set +# CONFIG_SENSORS_LT3074 is not set +# CONFIG_SENSORS_LT7182S is not set +# CONFIG_SENSORS_LTC2978 is not set +# CONFIG_SENSORS_LTC3815 is not set +# CONFIG_SENSORS_LTC4286 is not set +# CONFIG_SENSORS_MAX15301 is not set +# CONFIG_SENSORS_MAX16064 is not set +# CONFIG_SENSORS_MAX16601 is not set +# CONFIG_SENSORS_MAX20730 is not set +# CONFIG_SENSORS_MAX20751 is not set +# CONFIG_SENSORS_MAX31785 is not set +# CONFIG_SENSORS_MAX34440 is not set +# CONFIG_SENSORS_MAX8688 is not set +# CONFIG_SENSORS_MP2856 is not set +# CONFIG_SENSORS_MP2888 is not set +# CONFIG_SENSORS_MP2891 is not set +# CONFIG_SENSORS_MP2975 is not set +# CONFIG_SENSORS_MP2993 is not set +# CONFIG_SENSORS_MP5023 is not set +# CONFIG_SENSORS_MP5920 is not set +# CONFIG_SENSORS_MP5990 is not set +# CONFIG_SENSORS_MP9941 is not set +# CONFIG_SENSORS_MPQ7932 is not set +# CONFIG_SENSORS_MPQ8785 is not set +# CONFIG_SENSORS_PIM4328 is not set +# CONFIG_SENSORS_PLI1209BC is not set +# CONFIG_SENSORS_PM6764TR is not set +# CONFIG_SENSORS_PXE1610 is not set +# CONFIG_SENSORS_Q54SJ108A2 is not set +# CONFIG_SENSORS_STPDDC60 is not set +# CONFIG_SENSORS_TDA38640 is not set +# CONFIG_SENSORS_TPS25990 is not set +# CONFIG_SENSORS_TPS40422 is not set +# CONFIG_SENSORS_TPS53679 is not set +# CONFIG_SENSORS_TPS546D24 is not set +# CONFIG_SENSORS_UCD9000 is not set +# CONFIG_SENSORS_UCD9200 is not set +# CONFIG_SENSORS_XDP710 is not set +# CONFIG_SENSORS_XDPE152 is not set +# CONFIG_SENSORS_XDPE122 is not set +# CONFIG_SENSORS_ZL6100 is not set +# CONFIG_SENSORS_PT5161L is not set +# CONFIG_SENSORS_PWM_FAN is not set +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SHT15 is not set +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SHT3x=m +CONFIG_SENSORS_SHT4x=m +# CONFIG_SENSORS_SHTC1 is not set +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_EMC1403=m +CONFIG_SENSORS_EMC2103=m +# CONFIG_SENSORS_EMC2305 is not set +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +# CONFIG_SENSORS_STTS751 is not set +# CONFIG_SENSORS_SURFACE_FAN is not set +# CONFIG_SENSORS_SURFACE_TEMP is not set +# CONFIG_SENSORS_ADC128D818 is not set +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_AMC6821=m +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_INA238 is not set +# CONFIG_SENSORS_INA3221 is not set +CONFIG_SENSORS_SPD5118=m +# CONFIG_SENSORS_SPD5118_DETECT is not set +# CONFIG_SENSORS_TC74 is not set +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_SENSORS_TMP108 is not set +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +# CONFIG_SENSORS_TMP464 is not set +# CONFIG_SENSORS_TMP513 is not set +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83773G=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83627EHF=m +# CONFIG_SENSORS_XGENE is not set + +# +# ACPI drivers +# +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_ATK0110=m +CONFIG_SENSORS_ASUS_WMI=m +CONFIG_SENSORS_ASUS_EC=m +CONFIG_SENSORS_HP_WMI=m +CONFIG_THERMAL=y +CONFIG_THERMAL_NETLINK=y +CONFIG_THERMAL_STATISTICS=y +# CONFIG_THERMAL_DEBUGFS is not set +# CONFIG_THERMAL_CORE_TESTING is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_DEVFREQ_THERMAL=y +# CONFIG_PCIE_THERMAL is not set +# CONFIG_THERMAL_EMULATION is not set + +# +# Intel thermal drivers +# +CONFIG_INTEL_POWERCLAMP=m +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_INTEL_TCC=y +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_INTEL_SOC_DTS_IOSF_CORE=m +CONFIG_INTEL_SOC_DTS_THERMAL=m + +# +# ACPI INT340X thermal drivers +# +CONFIG_INT340X_THERMAL=m +CONFIG_ACPI_THERMAL_REL=m +CONFIG_INT3406_THERMAL=m +CONFIG_PROC_THERMAL_MMIO_RAPL=m +# end of ACPI INT340X thermal drivers + +CONFIG_INTEL_BXT_PMIC_THERMAL=m +CONFIG_INTEL_PCH_THERMAL=m +# CONFIG_INTEL_TCC_COOLING is not set +CONFIG_INTEL_HFI_THERMAL=y +# end of Intel thermal drivers + +# CONFIG_GENERIC_ADC_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=m +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +CONFIG_WATCHDOG_SYSFS=y +CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y + +# +# Watchdog Pretimeout Governors +# +CONFIG_WATCHDOG_PRETIMEOUT_GOV=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y +# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC is not set + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set +# CONFIG_CROS_EC_WATCHDOG is not set +# CONFIG_LENOVO_SE10_WDT is not set +# CONFIG_LENOVO_SE30_WDT is not set +CONFIG_MENF21BMC_WATCHDOG=m +CONFIG_WDAT_WDT=m +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_ZIIRAVE_WATCHDOG is not set +# CONFIG_CADENCE_WATCHDOG is not set +# CONFIG_DW_WATCHDOG is not set +# CONFIG_MAX63XX_WATCHDOG is not set +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ADVANTECH_EC_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +# CONFIG_EBC_C384_WDT is not set +# CONFIG_EXAR_WDT is not set +CONFIG_F71808E_WDT=m +CONFIG_SP5100_TCO=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_WAFER_WDT=m +CONFIG_I6300ESB_WDT=m +CONFIG_IE6XX_WDT=m +# CONFIG_INTEL_OC_WATCHDOG is not set +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_HP_WATCHDOG=m +CONFIG_HPWDT_NMI_DECODING=y +CONFIG_KEMPLD_WDT=m +CONFIG_SC1200_WDT=m +CONFIG_PC87413_WDT=m +CONFIG_NV_TCO=m +CONFIG_60XX_WDT=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMSC37B787_WDT=m +# CONFIG_TQMX86_WDT is not set +CONFIG_VIA_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_NI903X_WDT=m +CONFIG_NIC7018_WDT=m +CONFIG_SIEMENS_SIMATIC_IPC_WDT=m +# CONFIG_MEN_A21_WDT is not set +CONFIG_XEN_WDT=m + +# +# PCI-based Watchdog Cards +# +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m + +# +# USB-based Watchdog Cards +# +CONFIG_USBPCWATCHDOG=m +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +CONFIG_SSB_PCMCIAHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +# CONFIG_SSB_DRIVER_GPIO is not set +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +# CONFIG_BCMA_HOST_SOC is not set +CONFIG_BCMA_DRIVER_PCI=y +# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +# CONFIG_BCMA_DRIVER_GPIO is not set +# CONFIG_BCMA_DEBUG is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_SMPRO is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_BD9571MWV is not set +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m +# CONFIG_MFD_CGBC is not set +CONFIG_MFD_CROS_EC_DEV=m +CONFIG_MFD_CS42L43=m +# CONFIG_MFD_CS42L43_I2C is not set +CONFIG_MFD_CS42L43_SDW=m +# CONFIG_MFD_MADERA is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set +# CONFIG_MFD_INTEL_QUARK_I2C_GPIO is not set +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_INTEL_SOC_PMIC=y +CONFIG_INTEL_SOC_PMIC_BXTWC=m +CONFIG_INTEL_SOC_PMIC_CHTWC=y +CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m +CONFIG_MFD_INTEL_LPSS=m +CONFIG_MFD_INTEL_LPSS_ACPI=m +CONFIG_MFD_INTEL_LPSS_PCI=m +CONFIG_MFD_INTEL_PMC_BXT=m +# CONFIG_MFD_IQS62X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +CONFIG_MFD_KEMPLD=m +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77541 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77705 is not set +# CONFIG_MFD_MAX77843 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set +# CONFIG_MFD_MT6397 is not set +CONFIG_MFD_MENF21BMC=m +# CONFIG_MFD_OCELOT is not set +# CONFIG_EZX_PCAP is not set +CONFIG_MFD_VIPERBOARD=m +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_SY7636A is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_RT4831 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set +# CONFIG_MFD_RC5T583 is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +CONFIG_MFD_SYSCON=y +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65086 is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS6594_I2C is not set +# CONFIG_MFD_TPS6594_SPI is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_WCD934X is not set +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_CS40L50_I2C is not set +# CONFIG_MFD_CS40L50_SPI is not set +# CONFIG_RAVE_SP_CORE is not set +# CONFIG_MFD_INTEL_M10_BMC_SPI is not set +# CONFIG_MFD_QNAP_MCU is not set +# CONFIG_MFD_UPBOARD_FPGA is not set +# end of Multifunction device drivers + +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_NETLINK_EVENTS is not set +# CONFIG_REGULATOR_88PG86X is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_ADP5055 is not set +# CONFIG_REGULATOR_AW37503 is not set +# CONFIG_REGULATOR_AXP20X is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +# CONFIG_REGULATOR_FAN53555 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_LTC3676 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX77503 is not set +# CONFIG_REGULATOR_MAX77857 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8893 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX20086 is not set +# CONFIG_REGULATOR_MAX20411 is not set +# CONFIG_REGULATOR_MAX77826 is not set +# CONFIG_REGULATOR_MP8859 is not set +# CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_PCA9450 is not set +# CONFIG_REGULATOR_PF9453 is not set +# CONFIG_REGULATOR_PV88060 is not set +# CONFIG_REGULATOR_PV88080 is not set +# CONFIG_REGULATOR_PV88090 is not set +# CONFIG_REGULATOR_PWM is not set +# CONFIG_REGULATOR_RAA215300 is not set +# CONFIG_REGULATOR_RT4801 is not set +# CONFIG_REGULATOR_RT4803 is not set +# CONFIG_REGULATOR_RT5190A is not set +# CONFIG_REGULATOR_RT5739 is not set +# CONFIG_REGULATOR_RT5759 is not set +# CONFIG_REGULATOR_RT6160 is not set +# CONFIG_REGULATOR_RT6190 is not set +# CONFIG_REGULATOR_RT6245 is not set +# CONFIG_REGULATOR_RTQ2134 is not set +# CONFIG_REGULATOR_RTMV20 is not set +# CONFIG_REGULATOR_RTQ6752 is not set +# CONFIG_REGULATOR_RTQ2208 is not set +# CONFIG_REGULATOR_SLG51000 is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS65132 is not set +# CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_REGULATOR_TPS68470 is not set +CONFIG_RC_CORE=m +CONFIG_LIRC=y +CONFIG_RC_MAP=m +CONFIG_RC_DECODERS=y +CONFIG_IR_IMON_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +# CONFIG_IR_RCMM_DECODER is not set +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_SHARP_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_XMP_DECODER=m +CONFIG_RC_DEVICES=y +CONFIG_IR_ENE=m +CONFIG_IR_FINTEK=m +CONFIG_IR_IGORPLUGUSB=m +CONFIG_IR_IGUANA=m +CONFIG_IR_IMON=m +CONFIG_IR_IMON_RAW=m +CONFIG_IR_ITE_CIR=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_SERIAL=m +CONFIG_IR_SERIAL_TRANSMITTER=y +CONFIG_IR_STREAMZAP=m +# CONFIG_IR_TOY is not set +CONFIG_IR_TTUSBIR=m +CONFIG_IR_WINBOND_CIR=m +CONFIG_RC_ATI_REMOTE=m +CONFIG_RC_LOOPBACK=m +# CONFIG_RC_XBOX_DVD is not set +CONFIG_CEC_CORE=m +CONFIG_CEC_NOTIFIER=y + +# +# CEC support +# +CONFIG_MEDIA_CEC_RC=y +CONFIG_MEDIA_CEC_SUPPORT=y +# CONFIG_CEC_CH7322 is not set +# CONFIG_CEC_NXP_TDA9950 is not set +CONFIG_CEC_CROS_EC=m +# CONFIG_CEC_GPIO is not set +CONFIG_CEC_SECO=m +# CONFIG_CEC_SECO_RC is not set +# CONFIG_USB_EXTRON_DA_HD_4K_PLUS_CEC is not set +CONFIG_USB_PULSE8_CEC=m +CONFIG_USB_RAINSHADOW_CEC=m +# end of CEC support + +CONFIG_MEDIA_SUPPORT=m +# CONFIG_MEDIA_SUPPORT_FILTER is not set +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y + +# +# Media device types +# +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_MEDIA_TEST_SUPPORT=y +# end of Media device types + +# +# Media core support +# +CONFIG_VIDEO_DEV=m +CONFIG_MEDIA_CONTROLLER=y +CONFIG_DVB_CORE=m +# end of Media core support + +# +# Video4Linux options +# +CONFIG_VIDEO_V4L2_I2C=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_TUNER=m +CONFIG_V4L2_FWNODE=m +CONFIG_V4L2_ASYNC=m +CONFIG_V4L2_CCI=m +CONFIG_V4L2_CCI_I2C=m +# end of Video4Linux options + +# +# Media controller options +# +CONFIG_MEDIA_CONTROLLER_DVB=y +# end of Media controller options + +# +# Digital TV options +# +# CONFIG_DVB_MMAP is not set +CONFIG_DVB_NET=y +CONFIG_DVB_MAX_ADAPTERS=16 +CONFIG_DVB_DYNAMIC_MINORS=y +# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set +# CONFIG_DVB_ULE_DEBUG is not set +# end of Digital TV options + +# +# Media drivers +# + +# +# Media drivers +# +CONFIG_MEDIA_USB_SUPPORT=y + +# +# Webcam devices +# +CONFIG_USB_GSPCA=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_DTCS033=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_JL2005BCD=m +CONFIG_USB_GSPCA_KINECT=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SE401=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=m +CONFIG_USB_GSPCA_TOUPTEK=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_GL860=m +CONFIG_USB_M5602=m +CONFIG_USB_STV06XX=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_USB_S2255=m +CONFIG_VIDEO_USBTV=m +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y + +# +# Analog TV USB devices +# +# CONFIG_VIDEO_GO7007 is not set +CONFIG_VIDEO_HDPVR=m +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_STK1160=m + +# +# Analog/digital TV USB devices +# +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_V4L2=y +CONFIG_VIDEO_AU0828_RC=y +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m + +# +# Digital TV USB devices +# +CONFIG_DVB_AS102=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_AF9035=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_AZ6007=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_DVBSKY=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_MXL111SF=m +CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_ZD1301=m +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_CXUSB=m +# CONFIG_DVB_USB_CXUSB_ANALOG is not set +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_DIB3000MC=m +CONFIG_DVB_USB_DIBUSB_MB=m +CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_PCTV452E=m +CONFIG_DVB_USB_TECHNISAT_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_VP7045=m +CONFIG_SMS_USB_DRV=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m + +# +# Webcam, TV (analog/digital) USB devices +# +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_EM28XX_RC=m + +# +# Software defined radio USB devices +# +CONFIG_USB_AIRSPY=m +CONFIG_USB_HACKRF=m +CONFIG_USB_MSI2500=m +CONFIG_MEDIA_PCI_SUPPORT=y + +# +# Media capture support +# +# CONFIG_VIDEO_MGB4 is not set +CONFIG_VIDEO_SOLO6X10=m +CONFIG_VIDEO_TW5864=m +CONFIG_VIDEO_TW68=m +CONFIG_VIDEO_TW686X=m +# CONFIG_VIDEO_ZORAN is not set + +# +# Media capture/analog TV support +# +CONFIG_VIDEO_DT3155=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_IVTV_ALSA=m +CONFIG_VIDEO_FB_IVTV=m +# CONFIG_VIDEO_FB_IVTV_FORCE_PAT is not set +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_MXB=m + +# +# Media capture/analog/hybrid TV support +# +CONFIG_VIDEO_BT848=m +CONFIG_DVB_BT8XX=m +# CONFIG_VIDEO_COBALT is not set +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX18_ALSA=m +CONFIG_VIDEO_CX23885=m +CONFIG_MEDIA_ALTERA_CI=m +# CONFIG_VIDEO_CX25821 is not set +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7164=m + +# +# Media digital TV PCI Adapters +# +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set +CONFIG_DVB_DDBRIDGE=m +# CONFIG_DVB_DDBRIDGE_MSIENABLE is not set +CONFIG_DVB_DM1105=m +CONFIG_MANTIS_CORE=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_HOPPER=m +CONFIG_DVB_NETUP_UNIDVB=m +CONFIG_DVB_NGENE=m +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_PT1=m +CONFIG_DVB_PT3=m +CONFIG_DVB_SMIPCIE=m +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_VIDEO_IPU3_CIO2=m +CONFIG_VIDEO_INTEL_IPU6=m +CONFIG_INTEL_VSC=m +CONFIG_IPU_BRIDGE=m +CONFIG_RADIO_ADAPTERS=m +CONFIG_RADIO_MAXIRADIO=m +# CONFIG_RADIO_SAA7706H is not set +CONFIG_RADIO_SHARK=m +CONFIG_RADIO_SHARK2=m +# CONFIG_RADIO_SI4713 is not set +CONFIG_RADIO_TEA575X=m +# CONFIG_RADIO_TEA5764 is not set +# CONFIG_RADIO_TEF6862 is not set +# CONFIG_RADIO_WL1273 is not set +CONFIG_USB_DSBR=m +CONFIG_USB_KEENE=m +CONFIG_USB_MA901=m +CONFIG_USB_MR800=m +CONFIG_USB_RAREMONO=m +CONFIG_RADIO_SI470X=m +CONFIG_USB_SI470X=m +# CONFIG_I2C_SI470X is not set +CONFIG_MEDIA_PLATFORM_DRIVERS=y +CONFIG_V4L_PLATFORM_DRIVERS=y +# CONFIG_SDR_PLATFORM_DRIVERS is not set +# CONFIG_DVB_PLATFORM_DRIVERS is not set +CONFIG_V4L_MEM2MEM_DRIVERS=y +# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set + +# +# Allegro DVT media platform drivers +# + +# +# Amlogic media platform drivers +# + +# +# Amphion drivers +# + +# +# Aspeed media platform drivers +# + +# +# Atmel media platform drivers +# + +# +# Cadence media platform drivers +# +# CONFIG_VIDEO_CADENCE_CSI2RX is not set +# CONFIG_VIDEO_CADENCE_CSI2TX is not set + +# +# Chips&Media media platform drivers +# + +# +# Intel media platform drivers +# + +# +# Marvell media platform drivers +# +CONFIG_VIDEO_CAFE_CCIC=m + +# +# Mediatek media platform drivers +# + +# +# Microchip Technology, Inc. media platform drivers +# + +# +# Nuvoton media platform drivers +# + +# +# NVidia media platform drivers +# + +# +# NXP media platform drivers +# + +# +# Qualcomm media platform drivers +# + +# +# Raspberry Pi media platform drivers +# +# CONFIG_VIDEO_RP1_CFE is not set + +# +# Renesas media platform drivers +# + +# +# Rockchip media platform drivers +# + +# +# Samsung media platform drivers +# + +# +# STMicroelectronics media platform drivers +# + +# +# Sunxi media platform drivers +# + +# +# Texas Instruments drivers +# + +# +# Verisilicon media platform drivers +# + +# +# VIA media platform drivers +# +CONFIG_VIDEO_VIA_CAMERA=m + +# +# Xilinx media platform drivers +# + +# +# MMC/SDIO DVB adapters +# +CONFIG_SMS_SDIO_DRV=m +CONFIG_V4L_TEST_DRIVERS=y +# CONFIG_VIDEO_VIM2M is not set +# CONFIG_VIDEO_VICODEC is not set +# CONFIG_VIDEO_VIMC is not set +CONFIG_VIDEO_VIVID=m +CONFIG_VIDEO_VIVID_CEC=y +CONFIG_VIDEO_VIVID_OSD=y +CONFIG_VIDEO_VIVID_MAX_DEVS=64 +# CONFIG_VIDEO_VISL is not set +# CONFIG_DVB_TEST_DRIVERS is not set + +# +# FireWire (IEEE 1394) Adapters +# +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_INPUT=y +CONFIG_MEDIA_COMMON_OPTIONS=y + +# +# common driver options +# +CONFIG_CYPRESS_FIRMWARE=m +CONFIG_TTPCI_EEPROM=m +CONFIG_UVC_COMMON=m +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_SIANO_RC=y +# CONFIG_SMS_SIANO_DEBUGFS is not set +CONFIG_VIDEO_V4L2_TPG=m +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_V4L2=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_DMA_CONTIG=m +CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_VIDEOBUF2_DMA_SG=m +CONFIG_VIDEOBUF2_DVB=m +# end of Media drivers + +# +# Media ancillary drivers +# +CONFIG_MEDIA_ATTACH=y + +# +# IR I2C driver auto-selected by 'Autoselect ancillary drivers' +# +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_CAMERA_SENSOR=y +# CONFIG_VIDEO_ALVIUM_CSI2 is not set +# CONFIG_VIDEO_AR0521 is not set +# CONFIG_VIDEO_GC0308 is not set +# CONFIG_VIDEO_GC05A2 is not set +# CONFIG_VIDEO_GC08A3 is not set +# CONFIG_VIDEO_GC2145 is not set +CONFIG_VIDEO_HI556=m +# CONFIG_VIDEO_HI846 is not set +# CONFIG_VIDEO_HI847 is not set +# CONFIG_VIDEO_IMX208 is not set +# CONFIG_VIDEO_IMX214 is not set +# CONFIG_VIDEO_IMX219 is not set +# CONFIG_VIDEO_IMX258 is not set +# CONFIG_VIDEO_IMX274 is not set +# CONFIG_VIDEO_IMX283 is not set +# CONFIG_VIDEO_IMX290 is not set +# CONFIG_VIDEO_IMX296 is not set +# CONFIG_VIDEO_IMX319 is not set +# CONFIG_VIDEO_IMX355 is not set +# CONFIG_VIDEO_MT9M001 is not set +# CONFIG_VIDEO_MT9M111 is not set +# CONFIG_VIDEO_MT9M114 is not set +# CONFIG_VIDEO_MT9P031 is not set +# CONFIG_VIDEO_MT9T112 is not set +CONFIG_VIDEO_MT9V011=m +# CONFIG_VIDEO_MT9V032 is not set +# CONFIG_VIDEO_MT9V111 is not set +# CONFIG_VIDEO_OG01A1B is not set +CONFIG_VIDEO_OV01A10=m +# CONFIG_VIDEO_OV02A10 is not set +# CONFIG_VIDEO_OV02E10 is not set +CONFIG_VIDEO_OV02C10=m +# CONFIG_VIDEO_OV08D10 is not set +CONFIG_VIDEO_OV08X40=m +# CONFIG_VIDEO_OV13858 is not set +CONFIG_VIDEO_OV13B10=m +CONFIG_VIDEO_OV2640=m +# CONFIG_VIDEO_OV2659 is not set +CONFIG_VIDEO_OV2680=m +# CONFIG_VIDEO_OV2685 is not set +CONFIG_VIDEO_OV2740=m +# CONFIG_VIDEO_OV4689 is not set +# CONFIG_VIDEO_OV5647 is not set +# CONFIG_VIDEO_OV5648 is not set +CONFIG_VIDEO_OV5670=m +# CONFIG_VIDEO_OV5675 is not set +CONFIG_VIDEO_OV5693=m +# CONFIG_VIDEO_OV5695 is not set +# CONFIG_VIDEO_OV64A40 is not set +# CONFIG_VIDEO_OV6650 is not set +CONFIG_VIDEO_OV7251=m +# CONFIG_VIDEO_OV7640 is not set +CONFIG_VIDEO_OV7670=m +# CONFIG_VIDEO_OV772X is not set +# CONFIG_VIDEO_OV7740 is not set +CONFIG_VIDEO_OV8856=m +# CONFIG_VIDEO_OV8858 is not set +CONFIG_VIDEO_OV8865=m +# CONFIG_VIDEO_OV9640 is not set +# CONFIG_VIDEO_OV9650 is not set +# CONFIG_VIDEO_OV9734 is not set +# CONFIG_VIDEO_RDACM20 is not set +# CONFIG_VIDEO_RDACM21 is not set +# CONFIG_VIDEO_RJ54N1 is not set +# CONFIG_VIDEO_S5C73M3 is not set +# CONFIG_VIDEO_S5K5BAF is not set +# CONFIG_VIDEO_S5K6A3 is not set +# CONFIG_VIDEO_VD55G1 is not set +# CONFIG_VIDEO_VD56G3 is not set +# CONFIG_VIDEO_CCS is not set +# CONFIG_VIDEO_ET8EK8 is not set + +# +# Camera ISPs +# +# CONFIG_VIDEO_THP7312 is not set +# end of Camera ISPs + +# +# Lens drivers +# +# CONFIG_VIDEO_AD5820 is not set +# CONFIG_VIDEO_AK7375 is not set +# CONFIG_VIDEO_DW9714 is not set +# CONFIG_VIDEO_DW9719 is not set +# CONFIG_VIDEO_DW9768 is not set +# CONFIG_VIDEO_DW9807_VCM is not set +# end of Lens drivers + +# +# Flash devices +# +# CONFIG_VIDEO_ADP1653 is not set +# CONFIG_VIDEO_LM3560 is not set +# CONFIG_VIDEO_LM3646 is not set +# end of Flash devices + +# +# Audio decoders, processors and mixers +# +CONFIG_VIDEO_CS3308=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_MSP3400=m +# CONFIG_VIDEO_SONY_BTF_MPX is not set +# CONFIG_VIDEO_TDA1997X is not set +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_TLV320AIC23B=m +CONFIG_VIDEO_TVAUDIO=m +# CONFIG_VIDEO_UDA1342 is not set +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_WM8775=m +# end of Audio decoders, processors and mixers + +# +# RDS decoders +# +CONFIG_VIDEO_SAA6588=m +# end of RDS decoders + +# +# Video decoders +# +# CONFIG_VIDEO_ADV7180 is not set +# CONFIG_VIDEO_ADV7183 is not set +# CONFIG_VIDEO_ADV7604 is not set +# CONFIG_VIDEO_ADV7842 is not set +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT856=m +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_LT6911UXE is not set +CONFIG_VIDEO_KS0127=m +# CONFIG_VIDEO_ML86V7667 is not set +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +# CONFIG_VIDEO_TC358743 is not set +# CONFIG_VIDEO_TC358746 is not set +# CONFIG_VIDEO_TVP514X is not set +CONFIG_VIDEO_TVP5150=m +# CONFIG_VIDEO_TVP7002 is not set +# CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9900 is not set +# CONFIG_VIDEO_TW9903 is not set +# CONFIG_VIDEO_TW9906 is not set +# CONFIG_VIDEO_TW9910 is not set +CONFIG_VIDEO_VPX3220=m + +# +# Video and audio decoders +# +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_CX25840=m +# end of Video decoders + +# +# Video encoders +# +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +# CONFIG_VIDEO_ADV7343 is not set +# CONFIG_VIDEO_ADV7393 is not set +# CONFIG_VIDEO_ADV7511 is not set +# CONFIG_VIDEO_AK881X is not set +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7185=m +# CONFIG_VIDEO_THS8200 is not set +# end of Video encoders + +# +# Video improvement chips +# +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +# end of Video improvement chips + +# +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m +# end of Audio/Video compression chips + +# +# SDR tuner chips +# +# CONFIG_SDR_MAX2175 is not set +# end of SDR tuner chips + +# +# Miscellaneous helper chips +# +# CONFIG_VIDEO_I2C is not set +CONFIG_VIDEO_M52790=m +# CONFIG_VIDEO_ST_MIPID02 is not set +# CONFIG_VIDEO_THS7303 is not set +# end of Miscellaneous helper chips + +# +# Video serializers and deserializers +# +# end of Video serializers and deserializers + +# +# Media SPI Adapters +# +# CONFIG_CXD2880_SPI_DRV is not set +# CONFIG_VIDEO_GS1662 is not set +# end of Media SPI Adapters + +CONFIG_MEDIA_TUNER=m + +# +# Customize TV tuners +# +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_M88RS6000T=m +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MSI001=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MXL301RF=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_QM1D1B0004=m +CONFIG_MEDIA_TUNER_QM1D1C0042=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_R820T=m +CONFIG_MEDIA_TUNER_SI2157=m +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_TDA18250=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC4000=m +CONFIG_MEDIA_TUNER_XC5000=m +# end of Customize TV tuners + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +CONFIG_DVB_M88DS3103=m +CONFIG_DVB_MXL5XX=m +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV0910=m +CONFIG_DVB_STV6110x=m +CONFIG_DVB_STV6111=m + +# +# Multistandard (cable + terrestrial) frontends +# +CONFIG_DVB_DRXK=m +CONFIG_DVB_MN88472=m +CONFIG_DVB_MN88473=m +CONFIG_DVB_SI2165=m +CONFIG_DVB_TDA18271C2DD=m + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24117=m +CONFIG_DVB_CX24120=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_MB86A16=m +CONFIG_DVB_MT312=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_TDA10071=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_AF9013=m +CONFIG_DVB_AS102_FE=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_CXD2841ER=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +# CONFIG_DVB_DIB9000 is not set +CONFIG_DVB_DRXD=m +CONFIG_DVB_EC100=m +CONFIG_DVB_GP8PSK_FE=m +CONFIG_DVB_L64781=m +CONFIG_DVB_MT352=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m +CONFIG_DVB_RTL2832_SDR=m +# CONFIG_DVB_S5H1432 is not set +CONFIG_DVB_SI2168=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_STV0367=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_ZD1301_DEMOD=m +CONFIG_DVB_ZL10353=m +# CONFIG_DVB_CXD2880 is not set + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_STV0297=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_VES1820=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT3306A=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_MXL692=m +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_S5H1411=m + +# +# ISDB-T (terrestrial) frontends +# +CONFIG_DVB_DIB8000=m +CONFIG_DVB_MB86A20S=m +CONFIG_DVB_S921=m + +# +# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_MN88443X is not set +CONFIG_DVB_TC90522=m + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_DIB0090=m + +# +# SEC control devices for DVB-S +# +CONFIG_DVB_A8293=m +CONFIG_DVB_AF9033=m +CONFIG_DVB_ASCOT2E=m +CONFIG_DVB_ATBM8830=m +CONFIG_DVB_HELENE=m +CONFIG_DVB_HORUS3A=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_IX2505V=m +# CONFIG_DVB_LGS8GL5 is not set +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_LNBH25=m +# CONFIG_DVB_LNBH29 is not set +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_TDA665x=m +CONFIG_DVB_DRX39XYJ=m + +# +# Common Interface (EN50221) controller drivers +# +CONFIG_DVB_CXD2099=m +CONFIG_DVB_SP2=m +# end of Customise DVB Frontends + +# +# Tools to develop new frontends +# +CONFIG_DVB_DUMMY_FE=m +# end of Media ancillary drivers + +# +# Graphics support +# +CONFIG_APERTURE_HELPERS=y +CONFIG_SCREEN_INFO=y +CONFIG_VIDEO=y +# CONFIG_AUXDISPLAY is not set +# CONFIG_PANEL is not set +CONFIG_AGP=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_SIS=y +CONFIG_AGP_VIA=y +CONFIG_INTEL_GTT=y +CONFIG_VGA_SWITCHEROO=y +CONFIG_DRM=y + +# +# DRM debugging options +# +# CONFIG_DRM_WERROR is not set +# CONFIG_DRM_DEBUG_MM is not set +# end of DRM debugging options + +CONFIG_DRM_MIPI_DSI=y +CONFIG_DRM_KMS_HELPER=y +CONFIG_DRM_DRAW=y +CONFIG_DRM_PANIC=y +CONFIG_DRM_PANIC_FOREGROUND_COLOR=0xffffff +CONFIG_DRM_PANIC_BACKGROUND_COLOR=0x000000 +# CONFIG_DRM_PANIC_DEBUG is not set +CONFIG_DRM_PANIC_SCREEN="kmsg" +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_CLIENT=y +CONFIG_DRM_CLIENT_LIB=y +CONFIG_DRM_CLIENT_SELECTION=y +CONFIG_DRM_CLIENT_SETUP=y + +# +# Supported DRM clients +# +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +# CONFIG_DRM_CLIENT_LOG is not set +CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y +CONFIG_DRM_CLIENT_DEFAULT="fbdev" +# end of Supported DRM clients + +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_DISPLAY_HELPER=m +CONFIG_DRM_DISPLAY_DP_AUX_CEC=y +CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y +CONFIG_DRM_DISPLAY_DP_HELPER=y +CONFIG_DRM_DISPLAY_DP_TUNNEL=y +CONFIG_DRM_DISPLAY_DSC_HELPER=y +CONFIG_DRM_DISPLAY_HDCP_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_HELPER=y +CONFIG_DRM_TTM=m +CONFIG_DRM_EXEC=m +CONFIG_DRM_GPUVM=m +CONFIG_DRM_GPUSVM=m +CONFIG_DRM_BUDDY=m +CONFIG_DRM_VRAM_HELPER=m +CONFIG_DRM_TTM_HELPER=m +CONFIG_DRM_GEM_SHMEM_HELPER=y +CONFIG_DRM_SUBALLOC_HELPER=m +CONFIG_DRM_SCHED=m + +# +# Drivers for system framebuffers +# +CONFIG_DRM_SYSFB_HELPER=y +CONFIG_DRM_SIMPLEDRM=y +# end of Drivers for system framebuffers + +# +# ARM devices +# +# end of ARM devices + +CONFIG_DRM_RADEON=m +# CONFIG_DRM_RADEON_USERPTR is not set +CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMDGPU_SI=y +CONFIG_DRM_AMDGPU_CIK=y +CONFIG_DRM_AMDGPU_USERPTR=y +# CONFIG_DRM_AMD_ISP is not set +# CONFIG_DRM_AMDGPU_WERROR is not set + +# +# ACP (Audio CoProcessor) Configuration +# +CONFIG_DRM_AMD_ACP=y +# end of ACP (Audio CoProcessor) Configuration + +# +# Display Engine Configuration +# +CONFIG_DRM_AMD_DC=y +CONFIG_DRM_AMD_DC_FP=y +CONFIG_DRM_AMD_DC_SI=y +# CONFIG_DRM_AMD_SECURE_DISPLAY is not set +# end of Display Engine Configuration + +CONFIG_HSA_AMD=y +CONFIG_HSA_AMD_SVM=y +CONFIG_DRM_NOUVEAU=m +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +# CONFIG_NOUVEAU_DEBUG_MMU is not set +# CONFIG_NOUVEAU_DEBUG_PUSH is not set +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_NOUVEAU_SVM is not set +CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y +CONFIG_DRM_NOUVEAU_CH7006=m +CONFIG_DRM_NOUVEAU_SIL164=m +CONFIG_DRM_I915=m +CONFIG_DRM_I915_FORCE_PROBE="" +CONFIG_DRM_I915_CAPTURE_ERROR=y +CONFIG_DRM_I915_COMPRESS_ERROR=y +CONFIG_DRM_I915_USERPTR=y +CONFIG_DRM_I915_GVT_KVMGT=m +CONFIG_DRM_I915_PXP=y +CONFIG_DRM_I915_DP_TUNNEL=y + +# +# drm/i915 Debugging +# +# CONFIG_DRM_I915_WERROR is not set +# CONFIG_DRM_I915_REPLAY_GPU_HANGS_API is not set +# CONFIG_DRM_I915_DEBUG is not set +# CONFIG_DRM_I915_DEBUG_MMIO is not set +# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set +# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set +# CONFIG_DRM_I915_DEBUG_GUC is not set +# CONFIG_DRM_I915_SELFTEST is not set +# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set +# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set +# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set +# CONFIG_DRM_I915_DEBUG_WAKEREF is not set +# end of drm/i915 Debugging + +# +# drm/i915 Profile Guided Optimisation +# +CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 +CONFIG_DRM_I915_FENCE_TIMEOUT=10000 +CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 +CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 +CONFIG_DRM_I915_PREEMPT_TIMEOUT=640 +CONFIG_DRM_I915_PREEMPT_TIMEOUT_COMPUTE=7500 +CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000 +CONFIG_DRM_I915_STOP_TIMEOUT=100 +CONFIG_DRM_I915_TIMESLICE_DURATION=1 +# end of drm/i915 Profile Guided Optimisation + +CONFIG_DRM_I915_GVT=y +CONFIG_DRM_XE=m +CONFIG_DRM_XE_DISPLAY=y +CONFIG_DRM_XE_DP_TUNNEL=y +CONFIG_DRM_XE_GPUSVM=y +CONFIG_DRM_XE_DEVMEM_MIRROR=y +CONFIG_DRM_XE_FORCE_PROBE="" + +# +# drm/Xe Debugging +# +# CONFIG_DRM_XE_WERROR is not set +# CONFIG_DRM_XE_DEBUG is not set +# CONFIG_DRM_XE_DEBUG_VM is not set +# CONFIG_DRM_XE_DEBUG_MEMIRQ is not set +# CONFIG_DRM_XE_DEBUG_SRIOV is not set +# CONFIG_DRM_XE_DEBUG_MEM is not set +# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set +# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set +# end of drm/Xe Debugging + +# +# drm/xe Profile Guided Optimisation +# +CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000 +CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1 +CONFIG_DRM_XE_TIMESLICE_MAX=10000000 +CONFIG_DRM_XE_TIMESLICE_MIN=1 +CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000 +CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000 +CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1 +CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y +# end of drm/xe Profile Guided Optimisation + +CONFIG_DRM_VGEM=m +# CONFIG_DRM_VKMS is not set +CONFIG_DRM_VMWGFX=m +# CONFIG_DRM_VMWGFX_MKSSTATS is not set +CONFIG_DRM_GMA500=m +CONFIG_DRM_UDL=m +CONFIG_DRM_AST=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_QXL=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_VIRTIO_GPU_KMS=y +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set +# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set +# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set +# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_HISI_HIBMC is not set +# CONFIG_DRM_APPLETBDRM is not set +CONFIG_DRM_BOCHS=m +CONFIG_DRM_CIRRUS_QEMU=m +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_PANEL_MIPI_DBI is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9163 is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_ILI9486 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_SHARP_MEMORY is not set +CONFIG_DRM_XEN=y +CONFIG_DRM_XEN_FRONTEND=m +CONFIG_DRM_VBOXVIDEO=m +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_ST7571_I2C is not set +# CONFIG_DRM_ST7586 is not set +# CONFIG_DRM_ST7735R is not set +# CONFIG_DRM_SSD130X is not set +CONFIG_DRM_HYPERV=m +CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS=m +CONFIG_DRM_PRIVACY_SCREEN=y +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y + +# +# Frame buffer Devices +# +CONFIG_FB=y +CONFIG_FB_HECUBA=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_CYBER2000_DDC=y +CONFIG_FB_ARC=m +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +CONFIG_FB_VGA16=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +CONFIG_FB_EFI=y +CONFIG_FB_N411=m +CONFIG_FB_HGA=m +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I740 is not set +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_S3=m +CONFIG_FB_S3_DDC=y +CONFIG_FB_SAVAGE=m +# CONFIG_FB_SAVAGE_I2C is not set +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_VIA=m +# CONFIG_FB_VIA_DIRECT_PROCFS is not set +CONFIG_FB_VIA_X_COMPATIBILITY=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +CONFIG_FB_3DFX_I2C=y +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +# CONFIG_FB_CARMINE is not set +CONFIG_FB_SMSCUFX=m +# CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set +CONFIG_FB_VIRTUAL=m +CONFIG_XEN_FBDEV_FRONTEND=y +# CONFIG_FB_METRONOME is not set +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_MB862XX_I2C=y +# CONFIG_FB_HYPERV is not set +# CONFIG_FB_SSD1307 is not set +# CONFIG_FB_SM712 is not set +CONFIG_FB_CORE=y +CONFIG_FB_NOTIFY=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_DEVICE=y +CONFIG_FB_DDC=m +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYSMEM_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_IOMEM_FOPS=y +CONFIG_FB_IOMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set +# CONFIG_BACKLIGHT_KTZ8866 is not set +CONFIG_BACKLIGHT_PWM=m +CONFIG_BACKLIGHT_APPLE=m +# CONFIG_BACKLIGHT_QCOM_WLED is not set +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3509 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_MP3309C is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +# end of Backlight & LCD device support + +CONFIG_VGASTATE=m +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_HDMI=y + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set +# end of Console display driver support + +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y +# end of Graphics support + +CONFIG_DRM_ACCEL=y +# CONFIG_DRM_ACCEL_AMDXDNA is not set +CONFIG_DRM_ACCEL_HABANALABS=m +CONFIG_DRM_ACCEL_IVPU=m +# CONFIG_DRM_ACCEL_IVPU_DEBUG is not set +# CONFIG_DRM_ACCEL_QAIC is not set +CONFIG_SOUND=m +CONFIG_SOUND_OSS_CORE=y +# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_SEQ_DEVICE=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_PCM_TIMER=y +CONFIG_SND_HRTIMER=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_CTL_FAST_LOOKUP=y +# CONFIG_SND_DEBUG is not set +# CONFIG_SND_CTL_INPUT_VALIDATION is not set +# CONFIG_SND_UTIMER is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_CTL_LED=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +# CONFIG_SND_SEQUENCER_OSS is not set +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SEQ_MIDI_EVENT=m +CONFIG_SND_SEQ_MIDI=m +CONFIG_SND_SEQ_MIDI_EMUL=m +CONFIG_SND_SEQ_VIRMIDI=m +# CONFIG_SND_SEQ_UMP is not set +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DRIVERS=y +CONFIG_SND_PCSP=m +CONFIG_SND_DUMMY=m +CONFIG_SND_ALOOP=m +# CONFIG_SND_PCMTEST is not set +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 +CONFIG_SND_SB_COMMON=m +CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ASIHPI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +# CONFIG_SND_AW2 is not set +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_OXYGEN=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_ES1968_INPUT=y +CONFIG_SND_ES1968_RADIO=y +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_LOLA=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MAESTRO3_INPUT=y +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +# +# HD-Audio +# +CONFIG_SND_HDA=m +CONFIG_SND_HDA_GENERIC_LEDS=y +CONFIG_SND_HDA_INTEL=m +# CONFIG_SND_HDA_ACPI is not set +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=1 +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_CIRRUS_SCODEC=m +CONFIG_SND_HDA_SCODEC_CS35L41=m +CONFIG_SND_HDA_SCODEC_COMPONENT=m +CONFIG_SND_HDA_SCODEC_CS35L41_I2C=m +CONFIG_SND_HDA_SCODEC_CS35L41_SPI=m +CONFIG_SND_HDA_SCODEC_CS35L56=m +CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m +CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m +CONFIG_SND_HDA_SCODEC_TAS2781=m +CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m +# CONFIG_SND_HDA_SCODEC_TAS2781_SPI is not set +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CS8409=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +# CONFIG_SND_HDA_CODEC_SENARYTECH is not set +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m +CONFIG_SND_HDA_CODEC_CA0132_DSP=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=10 +# CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM is not set +# CONFIG_SND_HDA_CTL_DEV_ID is not set +# end of HD-Audio + +CONFIG_SND_HDA_CORE=m +CONFIG_SND_HDA_DSP_LOADER=y +CONFIG_SND_HDA_COMPONENT=y +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_EXT_CORE=m +CONFIG_SND_HDA_PREALLOC_SIZE=2048 +CONFIG_SND_INTEL_NHLT=y +CONFIG_SND_INTEL_DSP_CONFIG=m +CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +# CONFIG_SND_USB_AUDIO_MIDI_V2 is not set +CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m +CONFIG_SND_BCD2000=m +CONFIG_SND_USB_LINE6=m +CONFIG_SND_USB_POD=m +CONFIG_SND_USB_PODHD=m +CONFIG_SND_USB_TONEPORT=m +CONFIG_SND_USB_VARIAX=m +CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_DICE=m +CONFIG_SND_OXFW=m +CONFIG_SND_ISIGHT=m +CONFIG_SND_FIREWORKS=m +CONFIG_SND_BEBOB=m +CONFIG_SND_FIREWIRE_DIGI00X=m +CONFIG_SND_FIREWIRE_TASCAM=m +CONFIG_SND_FIREWIRE_MOTU=m +CONFIG_SND_FIREFACE=m +CONFIG_SND_PCMCIA=y +CONFIG_SND_VXPOCKET=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +CONFIG_SND_SOC_COMPRESS=y +CONFIG_SND_SOC_TOPOLOGY=y +CONFIG_SND_SOC_ACPI=m +# CONFIG_SND_SOC_USB is not set +# CONFIG_SND_SOC_ADI is not set +CONFIG_SND_SOC_AMD_ACP=m +CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m +CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m +# CONFIG_SND_SOC_AMD_ST_ES8336_MACH is not set +CONFIG_SND_SOC_AMD_ACP3x=m +CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m +CONFIG_SND_SOC_AMD_RENOIR=m +CONFIG_SND_SOC_AMD_RENOIR_MACH=m +CONFIG_SND_SOC_AMD_ACP5x=m +CONFIG_SND_SOC_AMD_VANGOGH_MACH=m +CONFIG_SND_SOC_AMD_ACP6x=m +CONFIG_SND_SOC_AMD_YC_MACH=m +CONFIG_SND_AMD_ACP_CONFIG=m +CONFIG_SND_SOC_AMD_ACP_COMMON=m +CONFIG_SND_SOC_ACPI_AMD_MATCH=m +CONFIG_SND_SOC_AMD_ACP_PDM=m +CONFIG_SND_SOC_AMD_ACP_LEGACY_COMMON=m +CONFIG_SND_SOC_AMD_ACP_I2S=m +CONFIG_SND_SOC_AMD_ACPI_MACH=m +CONFIG_SND_SOC_AMD_ACP_PCM=m +CONFIG_SND_SOC_AMD_ACP_PCI=m +CONFIG_SND_AMD_ASOC_RENOIR=m +# CONFIG_SND_AMD_ASOC_REMBRANDT is not set +# CONFIG_SND_AMD_ASOC_ACP63 is not set +CONFIG_SND_AMD_ASOC_ACP70=m +CONFIG_SND_SOC_AMD_MACH_COMMON=m +CONFIG_SND_SOC_AMD_LEGACY_MACH=m +CONFIG_SND_SOC_AMD_SOF_MACH=m +# CONFIG_SND_SOC_AMD_SOF_SDW_MACH is not set +# CONFIG_SND_SOC_AMD_LEGACY_SDW_MACH is not set +CONFIG_SND_AMD_SOUNDWIRE_ACPI=m +CONFIG_SND_SOC_AMD_RPL_ACP6x=m +CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m +CONFIG_SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE=m +CONFIG_SND_SOC_AMD_PS=m +CONFIG_SND_SOC_AMD_PS_MACH=m +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set +CONFIG_SND_DESIGNWARE_I2S=m +# CONFIG_SND_DESIGNWARE_PCM is not set + +# +# SoC Audio for Freescale CPUs +# + +# +# Common SoC Audio options for Freescale CPUs: +# +# CONFIG_SND_SOC_FSL_ASRC is not set +# CONFIG_SND_SOC_FSL_SAI is not set +# CONFIG_SND_SOC_FSL_AUDMIX is not set +# CONFIG_SND_SOC_FSL_SSI is not set +# CONFIG_SND_SOC_FSL_SPDIF is not set +# CONFIG_SND_SOC_FSL_ESAI is not set +# CONFIG_SND_SOC_FSL_MICFIL is not set +# CONFIG_SND_SOC_FSL_XCVR is not set +# CONFIG_SND_SOC_IMX_AUDMUX is not set +# end of SoC Audio for Freescale CPUs + +# CONFIG_SND_SOC_CHV3_I2S is not set +# CONFIG_SND_I2S_HI6210_I2S is not set + +# +# SoC Audio for Loongson CPUs +# +# end of SoC Audio for Loongson CPUs + +# CONFIG_SND_SOC_IMG is not set +CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y +CONFIG_SND_SOC_INTEL_CATPT=m +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m +# CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI is not set +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m +CONFIG_SND_SOC_ACPI_INTEL_MATCH=m +CONFIG_SND_SOC_ACPI_INTEL_SDCA_QUIRKS=m +CONFIG_SND_SOC_INTEL_AVS=m + +# +# Intel AVS Machine drivers +# + +# +# Available DSP configurations +# +# CONFIG_SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219=m +CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_ES8336 is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_HDAUDIO=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_I2S_TEST is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98927=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98357A is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98373=m +CONFIG_SND_SOC_INTEL_AVS_MACH_NAU8825=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_PCM3168A is not set +# CONFIG_SND_SOC_INTEL_AVS_MACH_PROBE is not set +# CONFIG_SND_SOC_INTEL_AVS_MACH_RT274 is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_RT286=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_RT298 is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_RT5514=m +CONFIG_SND_SOC_INTEL_AVS_MACH_RT5663=m +# CONFIG_SND_SOC_INTEL_AVS_MACH_RT5682 is not set +CONFIG_SND_SOC_INTEL_AVS_MACH_SSM4567=m +# end of Intel AVS Machine drivers + +CONFIG_SND_SOC_INTEL_MACH=y +CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y +CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_REALTEK_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS=m +CONFIG_SND_SOC_INTEL_HASWELL_MACH=m +CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH=m +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m +CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m +# CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set +# CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH is not set +CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m +CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m +CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m +# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set +CONFIG_SND_SOC_INTEL_SOF_ES8336_MACH=m +CONFIG_SND_SOC_INTEL_SOF_NAU8825_MACH=m +CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m +CONFIG_SND_SOC_INTEL_SOF_DA7219_MACH=m +CONFIG_SND_SOC_INTEL_SOF_SSP_AMP_MACH=m +# CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH is not set +CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH=m +# CONFIG_SND_SOC_MTK_BTCVSD is not set +CONFIG_SND_SOC_SDCA=m +CONFIG_SND_SOC_SDCA_OPTIONAL=m +CONFIG_SND_SOC_SOF_TOPLEVEL=y +CONFIG_SND_SOC_SOF_PCI_DEV=m +CONFIG_SND_SOC_SOF_PCI=m +# CONFIG_SND_SOC_SOF_ACPI is not set +CONFIG_SND_SOC_SOF_DEBUG_PROBES=m +CONFIG_SND_SOC_SOF_CLIENT=m +# CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT is not set +CONFIG_SND_SOC_SOF=m +CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y +CONFIG_SND_SOC_SOF_IPC3=y +CONFIG_SND_SOC_SOF_IPC4=y +CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m +CONFIG_SND_SOC_SOF_AMD_COMMON=m +# CONFIG_SND_SOC_SOF_AMD_RENOIR is not set +# CONFIG_SND_SOC_SOF_AMD_VANGOGH is not set +CONFIG_SND_SOC_SOF_AMD_REMBRANDT=m +CONFIG_SND_SOC_SOF_ACP_PROBES=m +# CONFIG_SND_SOC_SOF_AMD_ACP63 is not set +# CONFIG_SND_SOC_SOF_AMD_ACP70 is not set +CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y +CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m +CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m +CONFIG_SND_SOC_SOF_INTEL_COMMON=m +CONFIG_SND_SOC_SOF_MERRIFIELD=m +CONFIG_SND_SOC_SOF_INTEL_SKL=m +CONFIG_SND_SOC_SOF_SKYLAKE=m +CONFIG_SND_SOC_SOF_KABYLAKE=m +CONFIG_SND_SOC_SOF_INTEL_APL=m +CONFIG_SND_SOC_SOF_APOLLOLAKE=m +CONFIG_SND_SOC_SOF_GEMINILAKE=m +CONFIG_SND_SOC_SOF_INTEL_CNL=m +CONFIG_SND_SOC_SOF_CANNONLAKE=m +CONFIG_SND_SOC_SOF_COFFEELAKE=m +CONFIG_SND_SOC_SOF_COMETLAKE=m +CONFIG_SND_SOC_SOF_INTEL_ICL=m +CONFIG_SND_SOC_SOF_ICELAKE=m +CONFIG_SND_SOC_SOF_JASPERLAKE=m +CONFIG_SND_SOC_SOF_INTEL_TGL=m +CONFIG_SND_SOC_SOF_TIGERLAKE=m +CONFIG_SND_SOC_SOF_ELKHARTLAKE=m +CONFIG_SND_SOC_SOF_ALDERLAKE=m +CONFIG_SND_SOC_SOF_INTEL_MTL=m +CONFIG_SND_SOC_SOF_METEORLAKE=m +CONFIG_SND_SOC_SOF_INTEL_LNL=m +CONFIG_SND_SOC_SOF_LUNARLAKE=m +CONFIG_SND_SOC_SOF_INTEL_PTL=m +CONFIG_SND_SOC_SOF_PANTHERLAKE=m +CONFIG_SND_SOC_SOF_HDA_COMMON=m +CONFIG_SND_SOC_SOF_HDA_GENERIC=m +CONFIG_SND_SOC_SOF_HDA_MLINK=m +CONFIG_SND_SOC_SOF_HDA_LINK=y +CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y +CONFIG_SND_SOF_SOF_HDA_SDW_BPT=m +CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m +CONFIG_SND_SOC_SOF_HDA=m +CONFIG_SND_SOC_SOF_HDA_PROBES=m +CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m +CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE=m +CONFIG_SND_SOC_SOF_XTENSA=m + +# +# STMicroelectronics STM32 SOC audio support +# +# end of STMicroelectronics STM32 SOC audio support + +# CONFIG_SND_SOC_XILINX_I2S is not set +# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set +# CONFIG_SND_SOC_XILINX_SPDIF is not set +# CONFIG_SND_SOC_XTFPGA_I2S is not set +CONFIG_SND_SOC_I2C_AND_SPI=m + +# +# CODEC drivers +# +CONFIG_SND_SOC_WM_ADSP=m +# CONFIG_SND_SOC_AC97_CODEC is not set +# CONFIG_SND_SOC_ADAU1372_I2C is not set +# CONFIG_SND_SOC_ADAU1372_SPI is not set +# CONFIG_SND_SOC_ADAU1373 is not set +# CONFIG_SND_SOC_ADAU1701 is not set +# CONFIG_SND_SOC_ADAU1761_I2C is not set +# CONFIG_SND_SOC_ADAU1761_SPI is not set +CONFIG_SND_SOC_ADAU7002=m +# CONFIG_SND_SOC_ADAU7118_HW is not set +# CONFIG_SND_SOC_ADAU7118_I2C is not set +# CONFIG_SND_SOC_AK4104 is not set +# CONFIG_SND_SOC_AK4118 is not set +# CONFIG_SND_SOC_AK4375 is not set +# CONFIG_SND_SOC_AK4458 is not set +# CONFIG_SND_SOC_AK4554 is not set +# CONFIG_SND_SOC_AK4613 is not set +# CONFIG_SND_SOC_AK4619 is not set +# CONFIG_SND_SOC_AK4642 is not set +# CONFIG_SND_SOC_AK5386 is not set +# CONFIG_SND_SOC_AK5558 is not set +# CONFIG_SND_SOC_ALC5623 is not set +# CONFIG_SND_SOC_AUDIO_IIO_AUX is not set +# CONFIG_SND_SOC_AW8738 is not set +# CONFIG_SND_SOC_AW88395 is not set +# CONFIG_SND_SOC_AW88166 is not set +# CONFIG_SND_SOC_AW88261 is not set +# CONFIG_SND_SOC_AW88081 is not set +# CONFIG_SND_SOC_AW87390 is not set +# CONFIG_SND_SOC_AW88399 is not set +# CONFIG_SND_SOC_BD28623 is not set +# CONFIG_SND_SOC_BT_SCO is not set +# CONFIG_SND_SOC_CHV3_CODEC is not set +CONFIG_SND_SOC_CROS_EC_CODEC=m +CONFIG_SND_SOC_CS_AMP_LIB=m +# CONFIG_SND_SOC_CS35L32 is not set +# CONFIG_SND_SOC_CS35L33 is not set +# CONFIG_SND_SOC_CS35L34 is not set +# CONFIG_SND_SOC_CS35L35 is not set +# CONFIG_SND_SOC_CS35L36 is not set +CONFIG_SND_SOC_CS35L41_LIB=m +CONFIG_SND_SOC_CS35L41=m +CONFIG_SND_SOC_CS35L41_SPI=m +CONFIG_SND_SOC_CS35L41_I2C=m +# CONFIG_SND_SOC_CS35L45_SPI is not set +# CONFIG_SND_SOC_CS35L45_I2C is not set +CONFIG_SND_SOC_CS35L56=m +CONFIG_SND_SOC_CS35L56_SHARED=m +CONFIG_SND_SOC_CS35L56_I2C=m +CONFIG_SND_SOC_CS35L56_SPI=m +CONFIG_SND_SOC_CS35L56_SDW=m +CONFIG_SND_SOC_CS42L42_CORE=m +CONFIG_SND_SOC_CS42L42=m +CONFIG_SND_SOC_CS42L42_SDW=m +CONFIG_SND_SOC_CS42L43=m +CONFIG_SND_SOC_CS42L43_SDW=m +# CONFIG_SND_SOC_CS42L51_I2C is not set +# CONFIG_SND_SOC_CS42L52 is not set +# CONFIG_SND_SOC_CS42L56 is not set +# CONFIG_SND_SOC_CS42L73 is not set +# CONFIG_SND_SOC_CS42L83 is not set +# CONFIG_SND_SOC_CS42L84 is not set +# CONFIG_SND_SOC_CS4234 is not set +# CONFIG_SND_SOC_CS4265 is not set +# CONFIG_SND_SOC_CS4270 is not set +# CONFIG_SND_SOC_CS4271_I2C is not set +# CONFIG_SND_SOC_CS4271_SPI is not set +# CONFIG_SND_SOC_CS42XX8_I2C is not set +# CONFIG_SND_SOC_CS43130 is not set +# CONFIG_SND_SOC_CS4341 is not set +# CONFIG_SND_SOC_CS4349 is not set +# CONFIG_SND_SOC_CS48L32 is not set +# CONFIG_SND_SOC_CS53L30 is not set +# CONFIG_SND_SOC_CS530X_I2C is not set +CONFIG_SND_SOC_CX2072X=m +CONFIG_SND_SOC_DA7213=m +CONFIG_SND_SOC_DA7219=m +CONFIG_SND_SOC_DMIC=m +# CONFIG_SND_SOC_ES7134 is not set +# CONFIG_SND_SOC_ES7241 is not set +CONFIG_SND_SOC_ES83XX_DSM_COMMON=m +# CONFIG_SND_SOC_ES8311 is not set +CONFIG_SND_SOC_ES8316=m +# CONFIG_SND_SOC_ES8323 is not set +CONFIG_SND_SOC_ES8326=m +# CONFIG_SND_SOC_ES8328_I2C is not set +# CONFIG_SND_SOC_ES8328_SPI is not set +# CONFIG_SND_SOC_ES8375 is not set +# CONFIG_SND_SOC_ES8389 is not set +# CONFIG_SND_SOC_GTM601 is not set +CONFIG_SND_SOC_HDAC_HDA=m +CONFIG_SND_SOC_HDA=m +# CONFIG_SND_SOC_ICS43432 is not set +# CONFIG_SND_SOC_IDT821034 is not set +# CONFIG_SND_SOC_MAX98088 is not set +CONFIG_SND_SOC_MAX98090=m +CONFIG_SND_SOC_MAX98357A=m +# CONFIG_SND_SOC_MAX98504 is not set +# CONFIG_SND_SOC_MAX9867 is not set +CONFIG_SND_SOC_MAX98927=m +# CONFIG_SND_SOC_MAX98520 is not set +CONFIG_SND_SOC_MAX98363=m +CONFIG_SND_SOC_MAX98373=m +CONFIG_SND_SOC_MAX98373_I2C=m +CONFIG_SND_SOC_MAX98373_SDW=m +CONFIG_SND_SOC_MAX98388=m +CONFIG_SND_SOC_MAX98390=m +# CONFIG_SND_SOC_MAX98396 is not set +# CONFIG_SND_SOC_MAX9860 is not set +# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set +# CONFIG_SND_SOC_PCM1681 is not set +# CONFIG_SND_SOC_PCM1789_I2C is not set +# CONFIG_SND_SOC_PCM179X_I2C is not set +# CONFIG_SND_SOC_PCM179X_SPI is not set +# CONFIG_SND_SOC_PCM186X_I2C is not set +# CONFIG_SND_SOC_PCM186X_SPI is not set +# CONFIG_SND_SOC_PCM3060_I2C is not set +# CONFIG_SND_SOC_PCM3060_SPI is not set +# CONFIG_SND_SOC_PCM3168A_I2C is not set +# CONFIG_SND_SOC_PCM3168A_SPI is not set +# CONFIG_SND_SOC_PCM5102A is not set +# CONFIG_SND_SOC_PCM512x_I2C is not set +# CONFIG_SND_SOC_PCM512x_SPI is not set +# CONFIG_SND_SOC_PCM6240 is not set +# CONFIG_SND_SOC_PEB2466 is not set +CONFIG_SND_SOC_RL6231=m +CONFIG_SND_SOC_RT_SDW_COMMON=m +CONFIG_SND_SOC_RL6347A=m +CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT1011=m +CONFIG_SND_SOC_RT1015=m +CONFIG_SND_SOC_RT1015P=m +# CONFIG_SND_SOC_RT1017_SDCA_SDW is not set +CONFIG_SND_SOC_RT1019=m +CONFIG_SND_SOC_RT1308=m +CONFIG_SND_SOC_RT1308_SDW=m +CONFIG_SND_SOC_RT1316_SDW=m +CONFIG_SND_SOC_RT1318_SDW=m +CONFIG_SND_SOC_RT1320_SDW=m +CONFIG_SND_SOC_RT5514=m +# CONFIG_SND_SOC_RT5616 is not set +# CONFIG_SND_SOC_RT5631 is not set +CONFIG_SND_SOC_RT5640=m +CONFIG_SND_SOC_RT5645=m +CONFIG_SND_SOC_RT5651=m +# CONFIG_SND_SOC_RT5659 is not set +CONFIG_SND_SOC_RT5663=m +CONFIG_SND_SOC_RT5670=m +CONFIG_SND_SOC_RT5677=m +CONFIG_SND_SOC_RT5677_SPI=m +CONFIG_SND_SOC_RT5682=m +CONFIG_SND_SOC_RT5682_I2C=m +CONFIG_SND_SOC_RT5682_SDW=m +CONFIG_SND_SOC_RT5682S=m +CONFIG_SND_SOC_RT700=m +CONFIG_SND_SOC_RT700_SDW=m +CONFIG_SND_SOC_RT711=m +CONFIG_SND_SOC_RT711_SDW=m +CONFIG_SND_SOC_RT711_SDCA_SDW=m +CONFIG_SND_SOC_RT712_SDCA_SDW=m +CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW=m +CONFIG_SND_SOC_RT721_SDCA_SDW=m +CONFIG_SND_SOC_RT722_SDCA_SDW=m +CONFIG_SND_SOC_RT715=m +CONFIG_SND_SOC_RT715_SDW=m +CONFIG_SND_SOC_RT715_SDCA_SDW=m +# CONFIG_SND_SOC_RT9120 is not set +# CONFIG_SND_SOC_RT9123 is not set +# CONFIG_SND_SOC_RT9123P is not set +# CONFIG_SND_SOC_RTQ9128 is not set +CONFIG_SND_SOC_SDW_MOCKUP=m +# CONFIG_SND_SOC_SGTL5000 is not set +# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set +# CONFIG_SND_SOC_SIMPLE_MUX is not set +# CONFIG_SND_SOC_SMA1303 is not set +# CONFIG_SND_SOC_SMA1307 is not set +# CONFIG_SND_SOC_SPDIF is not set +# CONFIG_SND_SOC_SRC4XXX_I2C is not set +# CONFIG_SND_SOC_SSM2305 is not set +# CONFIG_SND_SOC_SSM2518 is not set +# CONFIG_SND_SOC_SSM2602_SPI is not set +# CONFIG_SND_SOC_SSM2602_I2C is not set +CONFIG_SND_SOC_SSM4567=m +# CONFIG_SND_SOC_STA32X is not set +# CONFIG_SND_SOC_STA350 is not set +# CONFIG_SND_SOC_STI_SAS is not set +# CONFIG_SND_SOC_TAS2552 is not set +# CONFIG_SND_SOC_TAS2562 is not set +# CONFIG_SND_SOC_TAS2764 is not set +# CONFIG_SND_SOC_TAS2770 is not set +# CONFIG_SND_SOC_TAS2780 is not set +CONFIG_SND_SOC_TAS2781_COMLIB=m +CONFIG_SND_SOC_TAS2781_COMLIB_I2C=m +CONFIG_SND_SOC_TAS2781_FMWLIB=m +CONFIG_SND_SOC_TAS2781_I2C=m +# CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TAS571X is not set +# CONFIG_SND_SOC_TAS5720 is not set +# CONFIG_SND_SOC_TAS5805M is not set +# CONFIG_SND_SOC_TAS6424 is not set +# CONFIG_SND_SOC_TDA7419 is not set +# CONFIG_SND_SOC_TFA9879 is not set +# CONFIG_SND_SOC_TFA989X is not set +# CONFIG_SND_SOC_TLV320ADC3XXX is not set +# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +# CONFIG_SND_SOC_TLV320AIC23_SPI is not set +# CONFIG_SND_SOC_TLV320AIC31XX is not set +# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set +# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set +# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set +# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set +# CONFIG_SND_SOC_TLV320ADCX140 is not set +CONFIG_SND_SOC_TS3A227E=m +# CONFIG_SND_SOC_TSCS42XX is not set +# CONFIG_SND_SOC_TSCS454 is not set +# CONFIG_SND_SOC_UDA1334 is not set +# CONFIG_SND_SOC_UDA1342 is not set +# CONFIG_SND_SOC_WCD9335 is not set +# CONFIG_SND_SOC_WCD937X_SDW is not set +# CONFIG_SND_SOC_WCD938X_SDW is not set +# CONFIG_SND_SOC_WCD939X_SDW is not set +# CONFIG_SND_SOC_WM8510 is not set +# CONFIG_SND_SOC_WM8523 is not set +# CONFIG_SND_SOC_WM8524 is not set +# CONFIG_SND_SOC_WM8580 is not set +# CONFIG_SND_SOC_WM8711 is not set +# CONFIG_SND_SOC_WM8728 is not set +# CONFIG_SND_SOC_WM8731_I2C is not set +# CONFIG_SND_SOC_WM8731_SPI is not set +# CONFIG_SND_SOC_WM8737 is not set +# CONFIG_SND_SOC_WM8741 is not set +# CONFIG_SND_SOC_WM8750 is not set +# CONFIG_SND_SOC_WM8753 is not set +# CONFIG_SND_SOC_WM8770 is not set +# CONFIG_SND_SOC_WM8776 is not set +# CONFIG_SND_SOC_WM8782 is not set +# CONFIG_SND_SOC_WM8804_I2C is not set +# CONFIG_SND_SOC_WM8804_SPI is not set +# CONFIG_SND_SOC_WM8903 is not set +# CONFIG_SND_SOC_WM8904 is not set +# CONFIG_SND_SOC_WM8940 is not set +# CONFIG_SND_SOC_WM8960 is not set +# CONFIG_SND_SOC_WM8961 is not set +# CONFIG_SND_SOC_WM8962 is not set +# CONFIG_SND_SOC_WM8974 is not set +# CONFIG_SND_SOC_WM8978 is not set +# CONFIG_SND_SOC_WM8985 is not set +# CONFIG_SND_SOC_WSA881X is not set +# CONFIG_SND_SOC_WSA883X is not set +# CONFIG_SND_SOC_WSA884X is not set +# CONFIG_SND_SOC_ZL38060 is not set +# CONFIG_SND_SOC_MAX9759 is not set +# CONFIG_SND_SOC_MT6351 is not set +# CONFIG_SND_SOC_MT6357 is not set +# CONFIG_SND_SOC_MT6358 is not set +# CONFIG_SND_SOC_MT6660 is not set +CONFIG_SND_SOC_NAU8315=m +# CONFIG_SND_SOC_NAU8540 is not set +# CONFIG_SND_SOC_NAU8810 is not set +CONFIG_SND_SOC_NAU8821=m +# CONFIG_SND_SOC_NAU8822 is not set +CONFIG_SND_SOC_NAU8824=m +CONFIG_SND_SOC_NAU8825=m +# CONFIG_SND_SOC_NTP8918 is not set +# CONFIG_SND_SOC_NTP8835 is not set +# CONFIG_SND_SOC_TPA6130A2 is not set +# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set +# CONFIG_SND_SOC_LPASS_VA_MACRO is not set +# CONFIG_SND_SOC_LPASS_RX_MACRO is not set +# CONFIG_SND_SOC_LPASS_TX_MACRO is not set +# end of CODEC drivers + +CONFIG_SND_SOC_SDW_UTILS=m +# CONFIG_SND_SIMPLE_CARD is not set +CONFIG_SND_X86=y +CONFIG_HDMI_LPE_AUDIO=m +CONFIG_SND_SYNTH_EMUX=m +CONFIG_SND_XEN_FRONTEND=m +CONFIG_SND_VIRTIO=m +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +CONFIG_HID_A4TECH=m +CONFIG_HID_ACCUTOUCH=m +CONFIG_HID_ACRUX=m +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_APPLE=m +CONFIG_HID_APPLEIR=m +# CONFIG_HID_APPLETB_BL is not set +# CONFIG_HID_APPLETB_KBD is not set +CONFIG_HID_ASUS=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BELKIN=m +CONFIG_HID_BETOP_FF=m +CONFIG_HID_BIGBEN_FF=m +CONFIG_HID_CHERRY=m +CONFIG_HID_CHICONY=m +CONFIG_HID_CORSAIR=m +CONFIG_HID_COUGAR=m +CONFIG_HID_MACALLY=m +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CMEDIA=m +CONFIG_HID_CP2112=m +CONFIG_HID_CREATIVE_SB0540=m +CONFIG_HID_CYPRESS=m +CONFIG_HID_DRAGONRISE=m +CONFIG_DRAGONRISE_FF=y +CONFIG_HID_EMS_FF=m +CONFIG_HID_ELAN=m +CONFIG_HID_ELECOM=m +CONFIG_HID_ELO=m +# CONFIG_HID_EVISION is not set +CONFIG_HID_EZKEY=m +CONFIG_HID_FT260=m +CONFIG_HID_GEMBIRD=m +CONFIG_HID_GFRM=m +CONFIG_HID_GLORIOUS=m +CONFIG_HID_HOLTEK=m +CONFIG_HOLTEK_FF=y +CONFIG_HID_VIVALDI_COMMON=m +# CONFIG_HID_GOODIX_SPI is not set +CONFIG_HID_GOOGLE_HAMMER=m +# CONFIG_HID_GOOGLE_STADIA_FF is not set +CONFIG_HID_VIVALDI=m +CONFIG_HID_GT683R=m +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +# CONFIG_HID_KYSONA is not set +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=m +CONFIG_HID_VIEWSONIC=m +# CONFIG_HID_VRC2 is not set +# CONFIG_HID_XIAOMI is not set +CONFIG_HID_GYRATION=m +CONFIG_HID_ICADE=m +CONFIG_HID_ITE=m +CONFIG_HID_JABRA=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=m +CONFIG_HID_LCPOWER=m +CONFIG_HID_LED=m +CONFIG_HID_LENOVO=m +# CONFIG_HID_LETSKETCH is not set +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_LOGITECH_HIDPP=m +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWHEELS_FF=y +CONFIG_HID_MAGICMOUSE=m +CONFIG_HID_MALTRON=m +CONFIG_HID_MAYFLASH=m +# CONFIG_HID_MEGAWORLD_FF is not set +CONFIG_HID_REDRAGON=m +CONFIG_HID_MICROSOFT=m +CONFIG_HID_MONTEREY=m +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NINTENDO=m +CONFIG_NINTENDO_FF=y +CONFIG_HID_NTI=m +CONFIG_HID_NTRIG=m +# CONFIG_HID_NVIDIA_SHIELD is not set +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PENMOUNT=m +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PICOLCD_CIR=y +CONFIG_HID_PLANTRONICS=m +CONFIG_HID_PLAYSTATION=m +CONFIG_PLAYSTATION_FF=y +# CONFIG_HID_PXRC is not set +# CONFIG_HID_RAZER is not set +CONFIG_HID_PRIMAX=m +CONFIG_HID_RETRODE=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SEMITEK=m +# CONFIG_HID_SIGMAMICRO is not set +CONFIG_HID_SONY=m +CONFIG_SONY_FF=y +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_STEAM=m +# CONFIG_STEAM_FF is not set +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_RMI=m +CONFIG_HID_GREENASIA=m +CONFIG_GREENASIA_FF=y +CONFIG_HID_HYPERV_MOUSE=m +CONFIG_HID_SMARTJOYPLUS=m +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +# CONFIG_HID_TOPRE is not set +CONFIG_HID_THINGM=m +CONFIG_HID_THRUSTMASTER=m +CONFIG_THRUSTMASTER_FF=y +CONFIG_HID_UDRAW_PS3=m +CONFIG_HID_U2FZERO=m +# CONFIG_HID_UNIVERSAL_PIDFF is not set +CONFIG_HID_WACOM=m +CONFIG_HID_WIIMOTE=m +# CONFIG_HID_WINWING is not set +CONFIG_HID_XINMO=m +CONFIG_HID_ZEROPLUS=m +CONFIG_ZEROPLUS_FF=y +CONFIG_HID_ZYDACRON=m +CONFIG_HID_SENSOR_HUB=m +CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +CONFIG_HID_ALPS=m +# CONFIG_HID_MCP2200 is not set +CONFIG_HID_MCP2221=m +# end of Special HID drivers + +# +# HID-BPF support +# +CONFIG_HID_BPF=y +# end of HID-BPF support + +CONFIG_I2C_HID=m +CONFIG_I2C_HID_ACPI=m +CONFIG_I2C_HID_OF=m +CONFIG_I2C_HID_CORE=m + +# +# Intel ISH HID support +# +CONFIG_INTEL_ISH_HID=m +# CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER is not set +# end of Intel ISH HID support + +# +# AMD SFH HID Support +# +CONFIG_AMD_SFH_HID=m +# end of AMD SFH HID Support + +# +# Surface System Aggregator Module HID support +# +CONFIG_SURFACE_HID=m +CONFIG_SURFACE_KBD=m +# end of Surface System Aggregator Module HID support + +CONFIG_SURFACE_HID_CORE=m + +# +# Intel THC HID Support +# +# CONFIG_INTEL_THC_HID is not set +# end of Intel THC HID Support + +# +# USB HID support +# +CONFIG_USB_HID=y +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y +# end of USB HID support + +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_LED_TRIG=y +# CONFIG_USB_ULPI_BUS is not set +# CONFIG_USB_CONN_GPIO is not set +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_PCI=y +CONFIG_USB_PCI_AMD=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set +CONFIG_USB_DYNAMIC_MINORS=y +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +CONFIG_USB_LEDS_TRIGGER_USBPORT=m +CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 +CONFIG_USB_MON=m + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +# CONFIG_USB_XHCI_DBGCAP is not set +CONFIG_USB_XHCI_PCI=y +CONFIG_USB_XHCI_PCI_RENESAS=m +CONFIG_USB_XHCI_PLATFORM=y +# CONFIG_USB_XHCI_SIDEBAND is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +# CONFIG_USB_EHCI_FSL is not set +CONFIG_USB_EHCI_HCD_PLATFORM=y +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_MAX3421_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_SL811_HCD=m +# CONFIG_USB_SL811_HCD_ISO is not set +CONFIG_USB_SL811_CS=m +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set +# CONFIG_USB_HCD_TEST_MODE is not set +CONFIG_USB_XEN_HCD=m + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_WDM=m +CONFIG_USB_TMC=m + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_REALTEK=m +CONFIG_REALTEK_AUTOPM=y +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_ENE_UB6250=m +CONFIG_USB_UAS=y + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USBIP_CORE=m +CONFIG_USBIP_VHCI_HCD=m +CONFIG_USBIP_VHCI_HC_PORTS=15 +CONFIG_USBIP_VHCI_NR_HCS=8 +CONFIG_USBIP_HOST=m +CONFIG_USBIP_VUDC=m +# CONFIG_USBIP_DEBUG is not set + +# +# USB dual-mode controller drivers +# +# CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_MUSB_HDRC is not set +CONFIG_USB_DWC3=m +# CONFIG_USB_DWC3_HOST is not set +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_DUAL_ROLE=y + +# +# Platform Glue Driver Support +# +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_HAPS=m +# CONFIG_USB_DWC2 is not set +# CONFIG_USB_CHIPIDEA is not set +# CONFIG_USB_ISP1760 is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_UPD78F0730=m +CONFIG_USB_SERIAL_XR=m +CONFIG_USB_SERIAL_DEBUG=m + +# +# USB Miscellaneous drivers +# +CONFIG_USB_USS720=m +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_APPLEDISPLAY=m +CONFIG_APPLE_MFI_FASTCHARGE=m +CONFIG_USB_LJCA=m +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_TEST=m +CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_YUREX=m +CONFIG_USB_EZUSB_FX2=m +# CONFIG_USB_HUB_USB251XB is not set +# CONFIG_USB_HSIC_USB3503 is not set +# CONFIG_USB_HSIC_USB4604 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +CONFIG_USB_CHAOSKEY=m +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +# +# USB Physical Layer drivers +# +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# end of USB Physical Layer drivers + +CONFIG_USB_GADGET=m +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +# CONFIG_U_SERIAL_CONSOLE is not set + +# +# USB Peripheral Controller +# +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_M66592 is not set +# CONFIG_USB_BDC_UDC is not set +# CONFIG_USB_AMD5536UDC is not set +CONFIG_USB_NET2280=m +# CONFIG_USB_GOKU is not set +CONFIG_USB_EG20T=m +# CONFIG_USB_MAX3420_UDC is not set +# CONFIG_USB_CDNS2_UDC is not set +CONFIG_USB_DUMMY_HCD=m +# end of USB Peripheral Controller + +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_F_ACM=m +CONFIG_USB_F_SS_LB=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_U_AUDIO=m +CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_OBEX=m +CONFIG_USB_F_NCM=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_PHONET=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_RNDIS=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_UAC1=m +CONFIG_USB_F_UAC2=m +CONFIG_USB_F_UVC=m +CONFIG_USB_F_MIDI=m +CONFIG_USB_F_HID=m +CONFIG_USB_F_PRINTER=m +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_PHONET=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_UAC1=y +# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set +CONFIG_USB_CONFIGFS_F_UAC2=y +CONFIG_USB_CONFIGFS_F_MIDI=y +# CONFIG_USB_CONFIGFS_F_MIDI2 is not set +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +# CONFIG_USB_CONFIGFS_F_TCM is not set + +# +# USB Gadget precomposed configurations +# +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +# CONFIG_USB_ETH_EEM is not set +# CONFIG_USB_G_NCM is not set +CONFIG_USB_GADGETFS=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_FUNCTIONFS_ETH=y +CONFIG_USB_FUNCTIONFS_RNDIS=y +CONFIG_USB_FUNCTIONFS_GENERIC=y +CONFIG_USB_MASS_STORAGE=m +# CONFIG_USB_GADGET_TARGET is not set +CONFIG_USB_G_SERIAL=m +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_NOKIA is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set +# CONFIG_USB_RAW_GADGET is not set +# end of USB Gadget precomposed configurations + +CONFIG_TYPEC=m +CONFIG_TYPEC_TCPM=m +# CONFIG_TYPEC_TCPCI is not set +CONFIG_TYPEC_FUSB302=m +CONFIG_TYPEC_WCOVE=m +CONFIG_TYPEC_UCSI=m +# CONFIG_UCSI_CCG is not set +CONFIG_UCSI_ACPI=m +# CONFIG_UCSI_STM32G0 is not set +CONFIG_CROS_EC_UCSI=m +CONFIG_TYPEC_TPS6598X=m +# CONFIG_TYPEC_ANX7411 is not set +# CONFIG_TYPEC_RT1719 is not set +# CONFIG_TYPEC_HD3SS3220 is not set +# CONFIG_TYPEC_STUSB160X is not set +# CONFIG_TYPEC_WUSB3801 is not set + +# +# USB Type-C Multiplexer/DeMultiplexer Switch support +# +# CONFIG_TYPEC_MUX_FSA4480 is not set +# CONFIG_TYPEC_MUX_GPIO_SBU is not set +CONFIG_TYPEC_MUX_PI3USB30532=m +# CONFIG_TYPEC_MUX_INTEL_PMC is not set +# CONFIG_TYPEC_MUX_IT5205 is not set +# CONFIG_TYPEC_MUX_NB7VPQ904M is not set +# CONFIG_TYPEC_MUX_PS883X is not set +# CONFIG_TYPEC_MUX_PTN36502 is not set +# CONFIG_TYPEC_MUX_TUSB1046 is not set +# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set +# end of USB Type-C Multiplexer/DeMultiplexer Switch support + +# +# USB Type-C Alternate Mode drivers +# +CONFIG_TYPEC_DP_ALTMODE=m +CONFIG_TYPEC_NVIDIA_ALTMODE=m +# CONFIG_TYPEC_TBT_ALTMODE is not set +# end of USB Type-C Alternate Mode drivers + +CONFIG_USB_ROLE_SWITCH=m +CONFIG_USB_ROLES_INTEL_XHCI=m +CONFIG_MMC=m +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=256 +CONFIG_SDIO_UART=m +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_UHS2=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_ACPI=m +# CONFIG_MMC_SDHCI_PLTFM is not set +CONFIG_MMC_WBSD=m +CONFIG_MMC_TIFM_SD=m +# CONFIG_MMC_SPI is not set +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_CB710=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_USHC=m +# CONFIG_MMC_USDHI6ROL0 is not set +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_REALTEK_USB=m +CONFIG_MMC_CQHCI=m +# CONFIG_MMC_HSQ is not set +CONFIG_MMC_TOSHIBA_PCI=m +# CONFIG_MMC_MTK is not set +CONFIG_SCSI_UFSHCD=m +# CONFIG_SCSI_UFS_BSG is not set +# CONFIG_SCSI_UFS_HWMON is not set +CONFIG_SCSI_UFSHCD_PCI=m +# CONFIG_SCSI_UFS_DWC_TC_PCI is not set +# CONFIG_SCSI_UFSHCD_PLATFORM is not set +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set + +# +# MemoryStick drivers +# +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MSPRO_BLOCK=m +# CONFIG_MS_BLOCK is not set + +# +# MemoryStick Host Controller Drivers +# +CONFIG_MEMSTICK_TIFM_MS=m +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_USB=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +# CONFIG_LEDS_CLASS_FLASH is not set +CONFIG_LEDS_CLASS_MULTICOLOR=m +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y + +# +# LED drivers +# +CONFIG_LEDS_APU=m +# CONFIG_LEDS_AW200XX is not set +# CONFIG_LEDS_CHT_WCOVE is not set +CONFIG_LEDS_CROS_EC=m +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_LP3944=m +# CONFIG_LEDS_LP3952 is not set +# CONFIG_LEDS_LP50XX is not set +CONFIG_LEDS_PCA955X=m +# CONFIG_LEDS_PCA955X_GPIO is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA995X is not set +CONFIG_LEDS_DAC124S085=m +# CONFIG_LEDS_PWM is not set +CONFIG_LEDS_REGULATOR=m +# CONFIG_LEDS_BD2606MVV is not set +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_LT3593=m +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +# CONFIG_LEDS_LM355x is not set +CONFIG_LEDS_MENF21BMC=m +# CONFIG_LEDS_IS31FL319X is not set + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +# CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_MLXCPLD is not set +# CONFIG_LEDS_MLXREG is not set +# CONFIG_LEDS_USER is not set +# CONFIG_LEDS_NIC78BX is not set +# CONFIG_LEDS_SPI_BYTE is not set + +# +# Flash and Torch LED drivers +# + +# +# RGB LED drivers +# +# CONFIG_LEDS_KTD202X is not set +# CONFIG_LEDS_PWM_MULTICOLOR is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_ONESHOT=m +CONFIG_LEDS_TRIGGER_DISK=y +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_ACTIVITY=m +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_LEDS_TRIGGER_NETDEV=m +CONFIG_LEDS_TRIGGER_PATTERN=m +# CONFIG_LEDS_TRIGGER_TTY is not set +CONFIG_LEDS_TRIGGER_INPUT_EVENTS=m + +# +# Simatic LED drivers +# +CONFIG_LEDS_SIEMENS_SIMATIC_IPC=m +CONFIG_LEDS_SIEMENS_SIMATIC_IPC_APOLLOLAKE=m +CONFIG_LEDS_SIEMENS_SIMATIC_IPC_F7188X=m +CONFIG_LEDS_SIEMENS_SIMATIC_IPC_ELKHARTLAKE=m +CONFIG_ACCESSIBILITY=y +CONFIG_A11Y_BRAILLE_CONSOLE=y + +# +# Speakup console speech +# +CONFIG_SPEAKUP=m +CONFIG_SPEAKUP_SYNTH_ACNTSA=m +CONFIG_SPEAKUP_SYNTH_APOLLO=m +CONFIG_SPEAKUP_SYNTH_AUDPTR=m +CONFIG_SPEAKUP_SYNTH_BNS=m +CONFIG_SPEAKUP_SYNTH_DECTLK=m +CONFIG_SPEAKUP_SYNTH_DECEXT=m +CONFIG_SPEAKUP_SYNTH_LTLK=m +CONFIG_SPEAKUP_SYNTH_SOFT=m +CONFIG_SPEAKUP_SYNTH_SPKOUT=m +CONFIG_SPEAKUP_SYNTH_TXPRT=m +CONFIG_SPEAKUP_SYNTH_DUMMY=m +# end of Speakup console speech + +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_ON_DEMAND_PAGING=y +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y +CONFIG_INFINIBAND_VIRT_DMA=y +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_CXGB4=m +# CONFIG_INFINIBAND_EFA is not set +# CONFIG_INFINIBAND_ERDMA is not set +CONFIG_INFINIBAND_HFI1=m +# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set +# CONFIG_SDMA_VERBOSITY is not set +CONFIG_INFINIBAND_IRDMA=m +CONFIG_MANA_INFINIBAND=m +CONFIG_MLX4_INFINIBAND=m +CONFIG_MLX5_INFINIBAND=m +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_QEDR=m +CONFIG_INFINIBAND_QIB=m +CONFIG_INFINIBAND_QIB_DCA=y +CONFIG_INFINIBAND_USNIC=m +# CONFIG_INFINIBAND_VMWARE_PVRDMA is not set +CONFIG_INFINIBAND_RDMAVT=m +CONFIG_RDMA_RXE=m +# CONFIG_RDMA_SIW is not set +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_SRPT=m +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_ISERT=m +# CONFIG_INFINIBAND_RTRS_CLIENT is not set +# CONFIG_INFINIBAND_RTRS_SERVER is not set +# CONFIG_INFINIBAND_OPA_VNIC is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC=y +CONFIG_EDAC_LEGACY_SYSFS=y +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +# CONFIG_EDAC_GHES is not set +# CONFIG_EDAC_SCRUB is not set +# CONFIG_EDAC_ECS is not set +# CONFIG_EDAC_MEM_REPAIR is not set +CONFIG_EDAC_AMD64=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_IE31200=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I7300=m +CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_SKX=m +CONFIG_EDAC_I10NM=m +CONFIG_EDAC_PND2=m +CONFIG_EDAC_IGEN6=m +CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set +# CONFIG_RTC_DRV_ABX80X is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_PCF85363 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8010 is not set +# CONFIG_RTC_DRV_RX8111 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set +# CONFIG_RTC_DRV_EM3027 is not set +# CONFIG_RTC_DRV_RV3028 is not set +# CONFIG_RTC_DRV_RV3032 is not set +# CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_SD2405AL is not set +# CONFIG_RTC_DRV_SD3078 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1302 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1343 is not set +# CONFIG_RTC_DRV_DS1347 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6916 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RX4581 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +# CONFIG_RTC_DRV_MCP795 is not set +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_PCF2127 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set +# CONFIG_RTC_DRV_RX6110 is not set + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +CONFIG_RTC_DRV_CROS_EC=m + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_FTRTC010 is not set + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set +# CONFIG_RTC_DRV_GOLDFISH is not set +CONFIG_RTC_DRV_WILCO_EC=m +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_ACPI=y +# CONFIG_ALTERA_MSGDMA is not set +CONFIG_INTEL_IDMA64=m +CONFIG_INTEL_IDXD_BUS=m +CONFIG_INTEL_IDXD=m +# CONFIG_INTEL_IDXD_COMPAT is not set +CONFIG_INTEL_IDXD_SVM=y +CONFIG_INTEL_IDXD_PERFMON=y +CONFIG_INTEL_IOATDMA=m +# CONFIG_PLX_DMA is not set +# CONFIG_XILINX_DMA is not set +# CONFIG_XILINX_XDMA is not set +# CONFIG_AMD_PTDMA is not set +# CONFIG_AMD_QDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +CONFIG_DW_DMAC_CORE=m +CONFIG_DW_DMAC=m +CONFIG_DW_DMAC_PCI=m +# CONFIG_DW_EDMA is not set +CONFIG_HSU_DMA=y +# CONFIG_SF_PDMA is not set +# CONFIG_INTEL_LDMA is not set + +# +# DMA Clients +# +CONFIG_ASYNC_TX_DMA=y +# CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +# CONFIG_SW_SYNC is not set +CONFIG_UDMABUF=y +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +CONFIG_DMABUF_HEAPS=y +# CONFIG_DMABUF_SYSFS_STATS is not set +CONFIG_DMABUF_HEAPS_SYSTEM=y +# end of DMABUF options + +CONFIG_DCA=m +CONFIG_UIO=m +CONFIG_UIO_CIF=m +# CONFIG_UIO_PDRV_GENIRQ is not set +# CONFIG_UIO_DMEM_GENIRQ is not set +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_NETX=m +CONFIG_UIO_MF624=m +CONFIG_UIO_HV_GENERIC=m +CONFIG_VFIO=m +CONFIG_VFIO_GROUP=y +CONFIG_VFIO_CONTAINER=y +CONFIG_VFIO_IOMMU_TYPE1=m +# CONFIG_VFIO_NOIOMMU is not set +CONFIG_VFIO_VIRQFD=y +# CONFIG_VFIO_DEBUGFS is not set + +# +# VFIO support for PCI devices +# +CONFIG_VFIO_PCI_CORE=m +CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI=m +CONFIG_VFIO_PCI_VGA=y +CONFIG_VFIO_PCI_IGD=y +# CONFIG_MLX5_VFIO_PCI is not set +# CONFIG_VIRTIO_VFIO_PCI is not set +# end of VFIO support for PCI devices + +CONFIG_VFIO_MDEV=m +CONFIG_IRQ_BYPASS_MANAGER=m +CONFIG_VIRT_DRIVERS=y +CONFIG_VMGENID=y +CONFIG_VBOXGUEST=m +CONFIG_NITRO_ENCLAVES=m +# CONFIG_EFI_SECRET is not set +CONFIG_SEV_GUEST=m +CONFIG_TDX_GUEST_DRIVER=m +CONFIG_TSM_GUEST=y +CONFIG_TSM_REPORTS=m +CONFIG_TSM_MEASUREMENTS=y +CONFIG_VIRTIO_ANCHOR=y +CONFIG_VIRTIO=y +CONFIG_VIRTIO_PCI_LIB=y +CONFIG_VIRTIO_PCI_LIB_LEGACY=y +CONFIG_VIRTIO_MENU=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_PCI_ADMIN_LEGACY=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_VDPA=m +CONFIG_VIRTIO_PMEM=m +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_MEM=m +CONFIG_VIRTIO_INPUT=m +CONFIG_VIRTIO_MMIO=m +# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set +CONFIG_VIRTIO_DMA_SHARED_BUFFER=m +# CONFIG_VIRTIO_DEBUG is not set +# CONFIG_VIRTIO_RTC is not set +CONFIG_VDPA=m +# CONFIG_VDPA_SIM is not set +CONFIG_VDPA_USER=m +# CONFIG_IFCVF is not set +# CONFIG_MLX5_VDPA_NET is not set +# CONFIG_MLX5_VDPA_STEERING_DEBUG is not set +# CONFIG_VP_VDPA is not set +# CONFIG_ALIBABA_ENI_VDPA is not set +# CONFIG_SNET_VDPA is not set +# CONFIG_OCTEONEP_VDPA is not set +CONFIG_VHOST_IOTLB=m +CONFIG_VHOST_TASK=y +CONFIG_VHOST=m +CONFIG_VHOST_MENU=y +CONFIG_VHOST_NET=m +CONFIG_VHOST_SCSI=m +CONFIG_VHOST_VSOCK=m +CONFIG_VHOST_VDPA=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set +CONFIG_VHOST_ENABLE_FORK_OWNER_CONTROL=y + +# +# Microsoft Hyper-V guest support +# +CONFIG_HYPERV=m +# CONFIG_HYPERV_VTL_MODE is not set +CONFIG_HYPERV_TIMER=y +CONFIG_HYPERV_UTILS=m +CONFIG_HYPERV_BALLOON=m +# CONFIG_MSHV_ROOT is not set +# end of Microsoft Hyper-V guest support + +# +# Xen driver support +# +CONFIG_XEN_BALLOON=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y +CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512 +CONFIG_XEN_SCRUB_PAGES_DEFAULT=y +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=m +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +# CONFIG_XEN_GRANT_DMA_ALLOC is not set +CONFIG_SWIOTLB_XEN=y +CONFIG_XEN_PCI_STUB=y +CONFIG_XEN_PCIDEV_BACKEND=m +# CONFIG_XEN_PVCALLS_FRONTEND is not set +# CONFIG_XEN_PVCALLS_BACKEND is not set +CONFIG_XEN_SCSI_BACKEND=m +CONFIG_XEN_PRIVCMD=m +CONFIG_XEN_ACPI_PROCESSOR=m +CONFIG_XEN_MCE_LOG=y +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_EFI=y +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_ACPI=y +CONFIG_XEN_SYMS=y +CONFIG_XEN_HAVE_VPMU=y +CONFIG_XEN_FRONT_PGDIR_SHBUF=m +CONFIG_XEN_UNPOPULATED_ALLOC=y +# CONFIG_XEN_VIRTIO is not set +# end of Xen driver support + +# CONFIG_GREYBUS is not set +CONFIG_COMEDI=m +# CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 +CONFIG_COMEDI_MISC_DRIVERS=y +CONFIG_COMEDI_BOND=m +CONFIG_COMEDI_TEST=m +CONFIG_COMEDI_PARPORT=m +CONFIG_COMEDI_PCI_DRIVERS=m +CONFIG_COMEDI_8255_PCI=m +CONFIG_COMEDI_ADDI_WATCHDOG=m +CONFIG_COMEDI_ADDI_APCI_1032=m +CONFIG_COMEDI_ADDI_APCI_1500=m +CONFIG_COMEDI_ADDI_APCI_1516=m +CONFIG_COMEDI_ADDI_APCI_1564=m +CONFIG_COMEDI_ADDI_APCI_16XX=m +CONFIG_COMEDI_ADDI_APCI_2032=m +CONFIG_COMEDI_ADDI_APCI_2200=m +CONFIG_COMEDI_ADDI_APCI_3120=m +CONFIG_COMEDI_ADDI_APCI_3501=m +CONFIG_COMEDI_ADDI_APCI_3XXX=m +CONFIG_COMEDI_ADL_PCI6208=m +CONFIG_COMEDI_ADL_PCI7X3X=m +CONFIG_COMEDI_ADL_PCI8164=m +CONFIG_COMEDI_ADL_PCI9111=m +CONFIG_COMEDI_ADL_PCI9118=m +CONFIG_COMEDI_ADV_PCI1710=m +CONFIG_COMEDI_ADV_PCI1720=m +CONFIG_COMEDI_ADV_PCI1723=m +CONFIG_COMEDI_ADV_PCI1724=m +CONFIG_COMEDI_ADV_PCI1760=m +CONFIG_COMEDI_ADV_PCI_DIO=m +CONFIG_COMEDI_AMPLC_DIO200_PCI=m +CONFIG_COMEDI_AMPLC_PC236_PCI=m +CONFIG_COMEDI_AMPLC_PC263_PCI=m +CONFIG_COMEDI_AMPLC_PCI224=m +CONFIG_COMEDI_AMPLC_PCI230=m +CONFIG_COMEDI_CONTEC_PCI_DIO=m +CONFIG_COMEDI_DAS08_PCI=m +CONFIG_COMEDI_DT3000=m +CONFIG_COMEDI_DYNA_PCI10XX=m +CONFIG_COMEDI_GSC_HPDI=m +CONFIG_COMEDI_MF6X4=m +CONFIG_COMEDI_ICP_MULTI=m +CONFIG_COMEDI_DAQBOARD2000=m +CONFIG_COMEDI_JR3_PCI=m +CONFIG_COMEDI_KE_COUNTER=m +CONFIG_COMEDI_CB_PCIDAS64=m +CONFIG_COMEDI_CB_PCIDAS=m +CONFIG_COMEDI_CB_PCIDDA=m +CONFIG_COMEDI_CB_PCIMDAS=m +CONFIG_COMEDI_CB_PCIMDDA=m +CONFIG_COMEDI_ME4000=m +CONFIG_COMEDI_ME_DAQ=m +CONFIG_COMEDI_NI_6527=m +CONFIG_COMEDI_NI_65XX=m +CONFIG_COMEDI_NI_660X=m +CONFIG_COMEDI_NI_670X=m +CONFIG_COMEDI_NI_LABPC_PCI=m +CONFIG_COMEDI_NI_PCIDIO=m +CONFIG_COMEDI_NI_PCIMIO=m +CONFIG_COMEDI_RTD520=m +CONFIG_COMEDI_S626=m +CONFIG_COMEDI_MITE=m +CONFIG_COMEDI_NI_TIOCMD=m +CONFIG_COMEDI_PCMCIA_DRIVERS=m +CONFIG_COMEDI_CB_DAS16_CS=m +CONFIG_COMEDI_DAS08_CS=m +CONFIG_COMEDI_NI_DAQ_700_CS=m +CONFIG_COMEDI_NI_DAQ_DIO24_CS=m +CONFIG_COMEDI_NI_LABPC_CS=m +CONFIG_COMEDI_NI_MIO_CS=m +CONFIG_COMEDI_QUATECH_DAQP_CS=m +CONFIG_COMEDI_USB_DRIVERS=m +CONFIG_COMEDI_DT9812=m +CONFIG_COMEDI_NI_USB6501=m +CONFIG_COMEDI_USBDUX=m +CONFIG_COMEDI_USBDUXFAST=m +CONFIG_COMEDI_USBDUXSIGMA=m +CONFIG_COMEDI_VMK80XX=m +CONFIG_COMEDI_8254=m +CONFIG_COMEDI_8255=m +CONFIG_COMEDI_8255_SA=m +CONFIG_COMEDI_KCOMEDILIB=m +CONFIG_COMEDI_AMPLC_DIO200=m +CONFIG_COMEDI_AMPLC_PC236=m +CONFIG_COMEDI_DAS08=m +CONFIG_COMEDI_NI_LABPC=m +CONFIG_COMEDI_NI_TIO=m +CONFIG_COMEDI_NI_ROUTING=m +# CONFIG_COMEDI_TESTS is not set +CONFIG_STAGING=y +CONFIG_RTL8723BS=m + +# +# IIO staging drivers +# + +# +# Accelerometers +# +# CONFIG_ADIS16203 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD7816 is not set +# end of Analog to digital converters + +# +# Analog digital bi-direction converters +# +# CONFIG_ADT7316 is not set +# end of Analog digital bi-direction converters + +# +# Direct Digital Synthesis +# +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# end of Direct Digital Synthesis + +# +# Network Analyzer, Impedance Converters +# +# CONFIG_AD5933 is not set +# end of Network Analyzer, Impedance Converters +# end of IIO staging drivers + +# CONFIG_FB_SM750 is not set +CONFIG_STAGING_MEDIA=y +# CONFIG_INTEL_ATOMISP is not set +CONFIG_DVB_AV7110_IR=y +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_SP8870=m +CONFIG_VIDEO_IPU3_IMGU=m + +# +# StarFive media platform drivers +# +# CONFIG_STAGING_MEDIA_DEPRECATED is not set +# CONFIG_FB_TFT is not set +# CONFIG_VME_BUS is not set +# CONFIG_GPIB is not set +# CONFIG_GOLDFISH is not set +CONFIG_CHROME_PLATFORMS=y +CONFIG_CHROMEOS_ACPI=m +CONFIG_CHROMEOS_LAPTOP=m +CONFIG_CHROMEOS_PSTORE=m +CONFIG_CHROMEOS_TBMC=m +CONFIG_CROS_EC=m +CONFIG_CROS_EC_I2C=m +CONFIG_CROS_EC_ISHTP=m +CONFIG_CROS_EC_SPI=m +# CONFIG_CROS_EC_UART is not set +CONFIG_CROS_EC_LPC=m +CONFIG_CROS_EC_PROTO=m +CONFIG_CROS_KBD_LED_BACKLIGHT=m +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CROS_EC_LIGHTBAR=m +CONFIG_CROS_EC_DEBUGFS=m +CONFIG_CROS_EC_SENSORHUB=m +CONFIG_CROS_EC_SYSFS=m +CONFIG_CROS_EC_TYPEC_ALTMODES=y +CONFIG_CROS_EC_TYPEC=m +# CONFIG_CROS_HPS_I2C is not set +CONFIG_CROS_USBPD_LOGGER=m +CONFIG_CROS_USBPD_NOTIFY=m +CONFIG_CHROMEOS_PRIVACY_SCREEN=m +CONFIG_CROS_TYPEC_SWITCH=m +CONFIG_WILCO_EC=m +CONFIG_WILCO_EC_DEBUGFS=m +CONFIG_WILCO_EC_EVENTS=m +CONFIG_WILCO_EC_TELEMETRY=m +# CONFIG_MELLANOX_PLATFORM is not set +CONFIG_SURFACE_PLATFORMS=y +CONFIG_SURFACE3_WMI=m +CONFIG_SURFACE_3_POWER_OPREGION=m +CONFIG_SURFACE_ACPI_NOTIFY=m +# CONFIG_SURFACE_AGGREGATOR_CDEV is not set +# CONFIG_SURFACE_AGGREGATOR_HUB is not set +CONFIG_SURFACE_AGGREGATOR_REGISTRY=m +# CONFIG_SURFACE_AGGREGATOR_TABLET_SWITCH is not set +CONFIG_SURFACE_DTX=m +CONFIG_SURFACE_GPE=m +CONFIG_SURFACE_HOTPLUG=m +CONFIG_SURFACE_PLATFORM_PROFILE=m +CONFIG_SURFACE_PRO3_BUTTON=m +CONFIG_SURFACE_AGGREGATOR=m +CONFIG_SURFACE_AGGREGATOR_BUS=y +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_ACPI_WMI=m +CONFIG_WMI_BMOF=m +CONFIG_HUAWEI_WMI=m +CONFIG_MXM_WMI=m +CONFIG_NVIDIA_WMI_EC_BACKLIGHT=m +CONFIG_XIAOMI_WMI=m +CONFIG_GIGABYTE_WMI=m +# CONFIG_YOGABOOK is not set +# CONFIG_YT2_1380 is not set +CONFIG_ACERHDF=m +CONFIG_ACER_WIRELESS=m +CONFIG_ACER_WMI=m + +# +# AMD HSMP Driver +# +# CONFIG_AMD_HSMP_ACPI is not set +# CONFIG_AMD_HSMP_PLAT is not set +# end of AMD HSMP Driver + +CONFIG_AMD_PMF=m +# CONFIG_AMD_PMF_DEBUG is not set +CONFIG_AMD_PMC=m +CONFIG_AMD_MP2_STB=y +# CONFIG_AMD_3D_VCACHE is not set +# CONFIG_AMD_WBRF is not set +# CONFIG_AMD_ISP_PLATFORM is not set +# CONFIG_ADV_SWBUTTON is not set +CONFIG_APPLE_GMUX=m +CONFIG_ASUS_LAPTOP=m +CONFIG_ASUS_WIRELESS=m +CONFIG_ASUS_WMI=m +CONFIG_ASUS_NB_WMI=m +# CONFIG_ASUS_TF103C_DOCK is not set +CONFIG_EEEPC_LAPTOP=m +CONFIG_EEEPC_WMI=m +CONFIG_X86_PLATFORM_DRIVERS_DELL=y +CONFIG_ALIENWARE_WMI=m +CONFIG_ALIENWARE_WMI_LEGACY=y +CONFIG_ALIENWARE_WMI_WMAX=y +CONFIG_DCDBAS=m +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_RBU=m +CONFIG_DELL_RBTN=m +CONFIG_DELL_PC=m +CONFIG_DELL_SMBIOS=m +CONFIG_DELL_SMBIOS_WMI=y +CONFIG_DELL_SMBIOS_SMM=y +CONFIG_DELL_SMO8800=m +# CONFIG_DELL_UART_BACKLIGHT is not set +CONFIG_DELL_WMI=m +# CONFIG_DELL_WMI_PRIVACY is not set +CONFIG_DELL_WMI_AIO=m +CONFIG_DELL_WMI_DESCRIPTOR=m +CONFIG_DELL_WMI_DDV=m +CONFIG_DELL_WMI_LED=m +CONFIG_DELL_WMI_SYSMAN=m +CONFIG_AMILO_RFKILL=m +CONFIG_FUJITSU_LAPTOP=m +CONFIG_FUJITSU_TABLET=m +CONFIG_GPD_POCKET_FAN=m +CONFIG_X86_PLATFORM_DRIVERS_HP=y +CONFIG_HP_ACCEL=m +CONFIG_HP_WMI=m +CONFIG_HP_BIOSCFG=m +# CONFIG_WIRELESS_HOTKEY is not set +CONFIG_IBM_RTL=m +CONFIG_IDEAPAD_LAPTOP=m +# CONFIG_LENOVO_WMI_HOTKEY_UTILITIES is not set +CONFIG_LENOVO_YMC=m +CONFIG_SENSORS_HDAPS=m +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set +# CONFIG_THINKPAD_ACPI_DEBUG is not set +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +CONFIG_THINKPAD_LMI=m +CONFIG_INTEL_ATOMISP2_PDX86=y +# CONFIG_INTEL_ATOMISP2_LED is not set +CONFIG_INTEL_ATOMISP2_PM=m +CONFIG_INTEL_IFS=m +# CONFIG_INTEL_SAR_INT1092 is not set +CONFIG_INTEL_SKL_INT3472=m +CONFIG_INTEL_PMC_CORE=m +CONFIG_INTEL_PMC_SSRAM_TELEMETRY=m +CONFIG_INTEL_PMT_CLASS=m +CONFIG_INTEL_PMT_TELEMETRY=m +CONFIG_INTEL_PMT_CRASHLOG=m + +# +# Intel Speed Select Technology interface support +# +CONFIG_INTEL_SPEED_SELECT_TPMI=m +CONFIG_INTEL_SPEED_SELECT_INTERFACE=m +# end of Intel Speed Select Technology interface support + +CONFIG_INTEL_WMI=y +# CONFIG_INTEL_WMI_SBL_FW_UPDATE is not set +CONFIG_INTEL_WMI_THUNDERBOLT=m + +# +# Intel Uncore Frequency Control +# +CONFIG_INTEL_UNCORE_FREQ_CONTROL_TPMI=m +CONFIG_INTEL_UNCORE_FREQ_CONTROL=m +# end of Intel Uncore Frequency Control + +CONFIG_INTEL_HID_EVENT=m +CONFIG_INTEL_VBTN=m +CONFIG_INTEL_INT0002_VGPIO=m +CONFIG_INTEL_OAKTRAIL=m +CONFIG_INTEL_BXTWC_PMIC_TMU=m +# CONFIG_INTEL_BYTCRC_PWRSRC is not set +# CONFIG_INTEL_CHTDC_TI_PWRBTN is not set +CONFIG_INTEL_CHTWC_INT33FE=m +# CONFIG_INTEL_ISHTP_ECLITE is not set +# CONFIG_INTEL_PUNIT_IPC is not set +CONFIG_INTEL_RST=m +CONFIG_INTEL_SDSI=m +CONFIG_INTEL_SMARTCONNECT=m +CONFIG_INTEL_TPMI_POWER_DOMAINS=m +CONFIG_INTEL_TPMI=m +# CONFIG_INTEL_PLR_TPMI is not set +CONFIG_INTEL_TURBO_MAX_3=y +CONFIG_INTEL_VSEC=m +# CONFIG_ACPI_QUICKSTART is not set +# CONFIG_MEEGOPAD_ANX7428 is not set +CONFIG_MSI_EC=m +CONFIG_MSI_LAPTOP=m +CONFIG_MSI_WMI=m +# CONFIG_MSI_WMI_PLATFORM is not set +CONFIG_PCENGINES_APU2=m +# CONFIG_PORTWELL_EC is not set +# CONFIG_BARCO_P50_GPIO is not set +CONFIG_SAMSUNG_GALAXYBOOK=m +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_SAMSUNG_Q10=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_TOSHIBA_HAPS=m +CONFIG_TOSHIBA_WMI=m +CONFIG_ACPI_CMPC=m +CONFIG_COMPAL_LAPTOP=m +CONFIG_LG_LAPTOP=m +CONFIG_PANASONIC_LAPTOP=m +CONFIG_SONY_LAPTOP=m +CONFIG_SONYPI_COMPAT=y +CONFIG_SYSTEM76_ACPI=m +CONFIG_TOPSTAR_LAPTOP=m +CONFIG_SERIAL_MULTI_INSTANTIATE=m +CONFIG_TOUCHSCREEN_DMI=y +# CONFIG_INSPUR_PLATFORM_PROFILE is not set +# CONFIG_LENOVO_WMI_CAMERA is not set +# CONFIG_DASHARO_ACPI is not set +CONFIG_X86_ANDROID_TABLETS=m +CONFIG_FW_ATTR_CLASS=m +CONFIG_INTEL_IPS=m +CONFIG_INTEL_SCU_IPC=y +# CONFIG_INTEL_SCU_PCI is not set +# CONFIG_INTEL_SCU_PLATFORM is not set +CONFIG_SIEMENS_SIMATIC_IPC=m +CONFIG_SIEMENS_SIMATIC_IPC_BATT=m +CONFIG_SIEMENS_SIMATIC_IPC_BATT_APOLLOLAKE=m +CONFIG_SIEMENS_SIMATIC_IPC_BATT_ELKHARTLAKE=m +CONFIG_SIEMENS_SIMATIC_IPC_BATT_F7188X=m +# CONFIG_SILICOM_PLATFORM is not set +# CONFIG_WINMATE_FM07_KEYS is not set +# CONFIG_SEL3350_PLATFORM is not set +# CONFIG_OXP_EC is not set +# CONFIG_TUXEDO_NB04_WMI_AB is not set +CONFIG_P2SB=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y +# CONFIG_LMK04832 is not set +# CONFIG_COMMON_CLK_MAX9485 is not set +# CONFIG_COMMON_CLK_SI5341 is not set +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_TPS68470 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_COMMON_CLK_PWM is not set +# CONFIG_XILINX_VCU is not set +# CONFIG_HWSPINLOCK is not set + +# +# Clock Source drivers +# +CONFIG_CLKEVT_I8253=y +CONFIG_I8253_LOCK=y +CONFIG_CLKBLD_I8253=y +# end of Clock Source drivers + +CONFIG_MAILBOX=y +CONFIG_PCC=y +# CONFIG_ALTERA_MBOX is not set +CONFIG_IOMMU_IOVA=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IO_PGTABLE=y +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set +CONFIG_IOMMU_DEFAULT_DMA_LAZY=y +# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set +CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_SVA=y +CONFIG_IOMMU_IOPF=y +CONFIG_AMD_IOMMU=y +CONFIG_DMAR_TABLE=y +CONFIG_INTEL_IOMMU=y +CONFIG_INTEL_IOMMU_SVM=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y +CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y +CONFIG_INTEL_IOMMU_PERF_EVENTS=y +# CONFIG_IOMMUFD is not set +CONFIG_IRQ_REMAP=y +CONFIG_HYPERV_IOMMU=y +CONFIG_VIRTIO_IOMMU=m + +# +# Remoteproc drivers +# +# CONFIG_REMOTEPROC is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +# CONFIG_RPMSG_QCOM_GLINK_RPM is not set +# CONFIG_RPMSG_VIRTIO is not set +# end of Rpmsg drivers + +CONFIG_SOUNDWIRE=m + +# +# SoundWire Devices +# +# CONFIG_SOUNDWIRE_AMD is not set +CONFIG_SOUNDWIRE_CADENCE=m +CONFIG_SOUNDWIRE_INTEL=m +CONFIG_SOUNDWIRE_QCOM=m +CONFIG_SOUNDWIRE_GENERIC_ALLOCATION=m + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# end of NXP/Freescale QorIQ SoC drivers + +# +# fujitsu SoC drivers +# +# end of fujitsu SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# end of Enable LiteX SoC Builder specific drivers + +# CONFIG_WPCM450_SOC is not set + +# +# Qualcomm SoC drivers +# +CONFIG_QCOM_QMI_HELPERS=m +# end of Qualcomm SoC drivers + +# CONFIG_SOC_TI is not set + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +# +# PM Domains +# + +# +# Amlogic PM Domains +# +# end of Amlogic PM Domains + +# +# Broadcom PM Domains +# +# end of Broadcom PM Domains + +# +# i.MX PM Domains +# +# end of i.MX PM Domains + +# +# Qualcomm PM Domains +# +# end of Qualcomm PM Domains +# end of PM Domains + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m +# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set +# CONFIG_DEVFREQ_GOV_POWERSAVE is not set +# CONFIG_DEVFREQ_GOV_USERSPACE is not set +# CONFIG_DEVFREQ_GOV_PASSIVE is not set + +# +# DEVFREQ Drivers +# +# CONFIG_PM_DEVFREQ_EVENT is not set +CONFIG_EXTCON=m + +# +# Extcon Device Drivers +# +# CONFIG_EXTCON_ADC_JACK is not set +CONFIG_EXTCON_AXP288=m +# CONFIG_EXTCON_FSA9480 is not set +# CONFIG_EXTCON_GPIO is not set +# CONFIG_EXTCON_INTEL_INT3496 is not set +CONFIG_EXTCON_INTEL_CHT_WC=m +# CONFIG_EXTCON_LC824206XA is not set +# CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_PTN5150 is not set +# CONFIG_EXTCON_RT8973A is not set +# CONFIG_EXTCON_SM5502 is not set +# CONFIG_EXTCON_USB_GPIO is not set +CONFIG_EXTCON_USBC_CROS_EC=m +# CONFIG_EXTCON_USBC_TUSB320 is not set +CONFIG_MEMORY=y +CONFIG_IIO=m +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_BUFFER_CB is not set +CONFIG_IIO_BUFFER_DMA=m +CONFIG_IIO_BUFFER_DMAENGINE=m +# CONFIG_IIO_BUFFER_HW_CONSUMER is not set +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_TRIGGERED_BUFFER=m +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_GTS_HELPER=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +# CONFIG_IIO_SW_DEVICE is not set +CONFIG_IIO_SW_TRIGGER=m +CONFIG_IIO_TRIGGERED_EVENT=m +CONFIG_IIO_BACKEND=m + +# +# Accelerometers +# +CONFIG_ADIS16201=m +CONFIG_ADIS16209=m +# CONFIG_ADXL313_I2C is not set +# CONFIG_ADXL313_SPI is not set +CONFIG_ADXL345=m +CONFIG_ADXL345_I2C=m +CONFIG_ADXL345_SPI=m +# CONFIG_ADXL355_I2C is not set +# CONFIG_ADXL355_SPI is not set +# CONFIG_ADXL367_SPI is not set +# CONFIG_ADXL367_I2C is not set +CONFIG_ADXL372=m +CONFIG_ADXL372_SPI=m +CONFIG_ADXL372_I2C=m +# CONFIG_ADXL380_SPI is not set +# CONFIG_ADXL380_I2C is not set +CONFIG_BMA180=m +CONFIG_BMA220=m +CONFIG_BMA400=m +CONFIG_BMA400_I2C=m +CONFIG_BMA400_SPI=m +CONFIG_BMC150_ACCEL=m +CONFIG_BMC150_ACCEL_I2C=m +CONFIG_BMC150_ACCEL_SPI=m +# CONFIG_BMI088_ACCEL is not set +CONFIG_DA280=m +CONFIG_DA311=m +# CONFIG_DMARD06 is not set +CONFIG_DMARD09=m +CONFIG_DMARD10=m +# CONFIG_FXLS8962AF_I2C is not set +# CONFIG_FXLS8962AF_SPI is not set +CONFIG_HID_SENSOR_ACCEL_3D=m +CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m +# CONFIG_IIO_KX022A_SPI is not set +# CONFIG_IIO_KX022A_I2C is not set +CONFIG_KXSD9=m +CONFIG_KXSD9_SPI=m +CONFIG_KXSD9_I2C=m +CONFIG_KXCJK1013=m +CONFIG_MC3230=m +CONFIG_MMA7455=m +CONFIG_MMA7455_I2C=m +CONFIG_MMA7455_SPI=m +CONFIG_MMA7660=m +CONFIG_MMA8452=m +CONFIG_MMA9551_CORE=m +CONFIG_MMA9551=m +CONFIG_MMA9553=m +# CONFIG_MSA311 is not set +CONFIG_MXC4005=m +CONFIG_MXC6255=m +CONFIG_SCA3000=m +# CONFIG_SCA3300 is not set +CONFIG_STK8312=m +CONFIG_STK8BA50=m +# end of Accelerometers + +# +# Analog to digital converters +# +CONFIG_AD_SIGMA_DELTA=m +# CONFIG_AD4000 is not set +# CONFIG_AD4030 is not set +# CONFIG_AD4130 is not set +# CONFIG_AD4695 is not set +# CONFIG_AD4851 is not set +CONFIG_AD7091R=m +CONFIG_AD7091R5=m +# CONFIG_AD7091R8 is not set +CONFIG_AD7124=m +# CONFIG_AD7173 is not set +# CONFIG_AD7191 is not set +CONFIG_AD7192=m +CONFIG_AD7266=m +# CONFIG_AD7280 is not set +CONFIG_AD7291=m +CONFIG_AD7292=m +CONFIG_AD7298=m +# CONFIG_AD7380 is not set +CONFIG_AD7476=m +CONFIG_AD7606=m +CONFIG_AD7606_IFACE_PARALLEL=m +CONFIG_AD7606_IFACE_SPI=m +# CONFIG_AD7625 is not set +CONFIG_AD7766=m +CONFIG_AD7768_1=m +# CONFIG_AD7779 is not set +CONFIG_AD7780=m +CONFIG_AD7791=m +CONFIG_AD7793=m +CONFIG_AD7887=m +CONFIG_AD7923=m +# CONFIG_AD7944 is not set +CONFIG_AD7949=m +CONFIG_AD799X=m +CONFIG_AD9467=m +CONFIG_AXP20X_ADC=m +CONFIG_AXP288_ADC=m +CONFIG_CC10001_ADC=m +# CONFIG_ENVELOPE_DETECTOR is not set +# CONFIG_GEHC_PMC_ADC is not set +CONFIG_HI8435=m +CONFIG_HX711=m +CONFIG_INA2XX_ADC=m +# CONFIG_LTC2309 is not set +CONFIG_LTC2471=m +CONFIG_LTC2485=m +CONFIG_LTC2496=m +CONFIG_LTC2497=m +CONFIG_MAX1027=m +CONFIG_MAX11100=m +CONFIG_MAX1118=m +# CONFIG_MAX11205 is not set +# CONFIG_MAX11410 is not set +CONFIG_MAX1241=m +CONFIG_MAX1363=m +# CONFIG_MAX34408 is not set +CONFIG_MAX9611=m +CONFIG_MCP320X=m +CONFIG_MCP3422=m +# CONFIG_MCP3564 is not set +CONFIG_MCP3911=m +CONFIG_NAU7802=m +# CONFIG_NCT7201 is not set +# CONFIG_PAC1921 is not set +# CONFIG_PAC1934 is not set +# CONFIG_ROHM_BD79124 is not set +# CONFIG_RICHTEK_RTQ6056 is not set +# CONFIG_SD_ADC_MODULATOR is not set +CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m +CONFIG_TI_ADC084S021=m +CONFIG_TI_ADC108S102=m +CONFIG_TI_ADC12138=m +CONFIG_TI_ADC128S052=m +CONFIG_TI_ADC161S626=m +CONFIG_TI_ADS1015=m +# CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1119 is not set +# CONFIG_TI_ADS124S08 is not set +# CONFIG_TI_ADS1298 is not set +# CONFIG_TI_ADS131E08 is not set +# CONFIG_TI_ADS7138 is not set +# CONFIG_TI_ADS7924 is not set +CONFIG_TI_ADS7950=m +# CONFIG_TI_ADS8344 is not set +# CONFIG_TI_ADS8688 is not set +# CONFIG_TI_LMP92064 is not set +# CONFIG_TI_TLC4541 is not set +# CONFIG_TI_TSC2046 is not set +# CONFIG_VF610_ADC is not set +CONFIG_VIPERBOARD_ADC=m +# CONFIG_XILINX_XADC is not set +# end of Analog to digital converters + +# +# Analog to digital and digital to analog converters +# +# CONFIG_AD74115 is not set +# CONFIG_AD74413R is not set +# end of Analog to digital and digital to analog converters + +# +# Analog Front Ends +# +# CONFIG_IIO_RESCALE is not set +# end of Analog Front Ends + +# +# Amplifiers +# +# CONFIG_AD8366 is not set +# CONFIG_ADA4250 is not set +# CONFIG_HMC425 is not set +# end of Amplifiers + +# +# Capacitance to digital converters +# +# CONFIG_AD7150 is not set +# CONFIG_AD7746 is not set +# end of Capacitance to digital converters + +# +# Chemical Sensors +# +# CONFIG_AOSONG_AGS02MA is not set +# CONFIG_ATLAS_PH_SENSOR is not set +# CONFIG_ATLAS_EZO_SENSOR is not set +# CONFIG_BME680 is not set +# CONFIG_CCS811 is not set +# CONFIG_ENS160 is not set +# CONFIG_IAQCORE is not set +# CONFIG_MHZ19B is not set +# CONFIG_PMS7003 is not set +# CONFIG_SCD30_CORE is not set +# CONFIG_SCD4X is not set +# CONFIG_SEN0322 is not set +# CONFIG_SENSIRION_SGP30 is not set +# CONFIG_SENSIRION_SGP40 is not set +# CONFIG_SPS30_I2C is not set +# CONFIG_SPS30_SERIAL is not set +# CONFIG_SENSEAIR_SUNRISE_CO2 is not set +# CONFIG_VZ89X is not set +# end of Chemical Sensors + +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=m + +# +# Hid Sensor IIO Common +# +CONFIG_HID_SENSOR_IIO_COMMON=m +CONFIG_HID_SENSOR_IIO_TRIGGER=m +# end of Hid Sensor IIO Common + +CONFIG_IIO_INV_SENSORS_TIMESTAMP=m +CONFIG_IIO_MS_SENSORS_I2C=m + +# +# IIO SCMI Sensors +# +# end of IIO SCMI Sensors + +# +# SSP Sensor Common +# +# CONFIG_IIO_SSP_SENSORHUB is not set +# end of SSP Sensor Common + +CONFIG_IIO_ST_SENSORS_I2C=m +CONFIG_IIO_ST_SENSORS_SPI=m +CONFIG_IIO_ST_SENSORS_CORE=m + +# +# Digital to analog converters +# +# CONFIG_AD3530R is not set +# CONFIG_AD3552R_HS is not set +# CONFIG_AD3552R is not set +CONFIG_AD5064=m +CONFIG_AD5360=m +CONFIG_AD5380=m +CONFIG_AD5421=m +CONFIG_AD5446=m +CONFIG_AD5449=m +CONFIG_AD5592R_BASE=m +CONFIG_AD5592R=m +CONFIG_AD5593R=m +CONFIG_AD5504=m +CONFIG_AD5624R_SPI=m +# CONFIG_AD9739A is not set +# CONFIG_LTC2688 is not set +CONFIG_AD5686=m +CONFIG_AD5686_SPI=m +CONFIG_AD5696_I2C=m +CONFIG_AD5755=m +CONFIG_AD5758=m +CONFIG_AD5761=m +CONFIG_AD5764=m +# CONFIG_AD5766 is not set +CONFIG_AD5770R=m +CONFIG_AD5791=m +# CONFIG_AD7293 is not set +CONFIG_AD7303=m +# CONFIG_AD8460 is not set +CONFIG_AD8801=m +# CONFIG_BD79703 is not set +# CONFIG_DPOT_DAC is not set +CONFIG_DS4424=m +CONFIG_LTC1660=m +CONFIG_LTC2632=m +# CONFIG_LTC2664 is not set +CONFIG_M62332=m +CONFIG_MAX517=m +# CONFIG_MAX5522 is not set +# CONFIG_MAX5821 is not set +CONFIG_MCP4725=m +# CONFIG_MCP4728 is not set +# CONFIG_MCP4821 is not set +CONFIG_MCP4922=m +CONFIG_TI_DAC082S085=m +CONFIG_TI_DAC5571=m +CONFIG_TI_DAC7311=m +CONFIG_TI_DAC7612=m +# CONFIG_VF610_DAC is not set +# end of Digital to analog converters + +# +# IIO dummy driver +# +# end of IIO dummy driver + +# +# Filters +# +# CONFIG_ADMV8818 is not set +# end of Filters + +# +# Frequency Synthesizers DDS/PLL +# + +# +# Clock Generator/Distribution +# +# CONFIG_AD9523 is not set +# end of Clock Generator/Distribution + +# +# Phase-Locked Loop (PLL) frequency synthesizers +# +# CONFIG_ADF4350 is not set +# CONFIG_ADF4371 is not set +# CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set +# CONFIG_ADMV1013 is not set +# CONFIG_ADMV1014 is not set +# CONFIG_ADMV4420 is not set +# CONFIG_ADRF6780 is not set +# end of Phase-Locked Loop (PLL) frequency synthesizers +# end of Frequency Synthesizers DDS/PLL + +# +# Digital gyroscope sensors +# +CONFIG_ADIS16080=m +CONFIG_ADIS16130=m +CONFIG_ADIS16136=m +CONFIG_ADIS16260=m +CONFIG_ADXRS290=m +CONFIG_ADXRS450=m +CONFIG_BMG160=m +CONFIG_BMG160_I2C=m +CONFIG_BMG160_SPI=m +CONFIG_FXAS21002C=m +CONFIG_FXAS21002C_I2C=m +CONFIG_FXAS21002C_SPI=m +CONFIG_HID_SENSOR_GYRO_3D=m +CONFIG_MPU3050=m +CONFIG_MPU3050_I2C=m +CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_IIO_ST_GYRO_I2C_3AXIS=m +CONFIG_IIO_ST_GYRO_SPI_3AXIS=m +CONFIG_ITG3200=m +# end of Digital gyroscope sensors + +# +# Health Sensors +# + +# +# Heart Rate Monitors +# +# CONFIG_AFE4403 is not set +# CONFIG_AFE4404 is not set +# CONFIG_MAX30100 is not set +# CONFIG_MAX30102 is not set +# end of Heart Rate Monitors +# end of Health Sensors + +# +# Humidity sensors +# +# CONFIG_AM2315 is not set +# CONFIG_DHT11 is not set +# CONFIG_ENS210 is not set +# CONFIG_HDC100X is not set +# CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set +# CONFIG_HID_SENSOR_HUMIDITY is not set +# CONFIG_HTS221 is not set +# CONFIG_HTU21 is not set +# CONFIG_SI7005 is not set +# CONFIG_SI7020 is not set +# end of Humidity sensors + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +CONFIG_ADIS16460=m +CONFIG_ADIS16475=m +CONFIG_ADIS16480=m +# CONFIG_ADIS16550 is not set +CONFIG_BMI160=m +CONFIG_BMI160_I2C=m +CONFIG_BMI160_SPI=m +# CONFIG_BMI270_I2C is not set +# CONFIG_BMI270_SPI is not set +# CONFIG_BMI323_I2C is not set +# CONFIG_BMI323_SPI is not set +# CONFIG_BOSCH_BNO055_SERIAL is not set +# CONFIG_BOSCH_BNO055_I2C is not set +CONFIG_FXOS8700=m +CONFIG_FXOS8700_I2C=m +CONFIG_FXOS8700_SPI=m +CONFIG_KMX61=m +CONFIG_INV_ICM42600=m +CONFIG_INV_ICM42600_I2C=m +CONFIG_INV_ICM42600_SPI=m +CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_SPI=m +# CONFIG_SMI240 is not set +CONFIG_IIO_ST_LSM6DSX=m +CONFIG_IIO_ST_LSM6DSX_I2C=m +CONFIG_IIO_ST_LSM6DSX_SPI=m +# CONFIG_IIO_ST_LSM9DS0 is not set +# end of Inertial measurement units + +CONFIG_IIO_ADIS_LIB=m +CONFIG_IIO_ADIS_LIB_BUFFER=y + +# +# Light sensors +# +CONFIG_ACPI_ALS=m +CONFIG_ADJD_S311=m +CONFIG_ADUX1020=m +# CONFIG_AL3000A is not set +CONFIG_AL3010=m +CONFIG_AL3320A=m +# CONFIG_APDS9160 is not set +CONFIG_APDS9300=m +# CONFIG_APDS9306 is not set +CONFIG_APDS9960=m +CONFIG_AS73211=m +# CONFIG_BH1745 is not set +CONFIG_BH1750=m +CONFIG_BH1780=m +CONFIG_CM32181=m +CONFIG_CM3232=m +CONFIG_CM3323=m +# CONFIG_CM3605 is not set +CONFIG_CM36651=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +CONFIG_GP2AP002=m +CONFIG_GP2AP020A00F=m +CONFIG_SENSORS_ISL29018=m +CONFIG_SENSORS_ISL29028=m +CONFIG_ISL29125=m +# CONFIG_ISL76682 is not set +CONFIG_HID_SENSOR_ALS=m +CONFIG_HID_SENSOR_PROX=m +CONFIG_JSA1212=m +# CONFIG_ROHM_BU27034 is not set +CONFIG_RPR0521=m +# CONFIG_LTR390 is not set +CONFIG_LTR501=m +# CONFIG_LTRF216A is not set +CONFIG_LV0104CS=m +CONFIG_MAX44000=m +CONFIG_MAX44009=m +CONFIG_NOA1305=m +CONFIG_OPT3001=m +# CONFIG_OPT4001 is not set +# CONFIG_OPT4060 is not set +CONFIG_PA12203001=m +CONFIG_SI1133=m +CONFIG_SI1145=m +CONFIG_STK3310=m +CONFIG_ST_UVIS25=m +CONFIG_ST_UVIS25_I2C=m +CONFIG_ST_UVIS25_SPI=m +CONFIG_TCS3414=m +CONFIG_TCS3472=m +CONFIG_SENSORS_TSL2563=m +CONFIG_TSL2583=m +# CONFIG_TSL2591 is not set +CONFIG_TSL2772=m +CONFIG_TSL4531=m +CONFIG_US5182D=m +CONFIG_VCNL4000=m +CONFIG_VCNL4035=m +# CONFIG_VEML3235 is not set +CONFIG_VEML6030=m +# CONFIG_VEML6040 is not set +CONFIG_VEML6070=m +# CONFIG_VEML6075 is not set +CONFIG_VL6180=m +CONFIG_ZOPT2201=m +# end of Light sensors + +# +# Magnetometer sensors +# +# CONFIG_AK8974 is not set +CONFIG_AK8975=m +CONFIG_AK09911=m +# CONFIG_ALS31300 is not set +CONFIG_BMC150_MAGN=m +CONFIG_BMC150_MAGN_I2C=m +CONFIG_BMC150_MAGN_SPI=m +CONFIG_MAG3110=m +CONFIG_HID_SENSOR_MAGNETOMETER_3D=m +CONFIG_MMC35240=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_ST_MAGN_I2C_3AXIS=m +CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m +CONFIG_SENSORS_RM3100=m +CONFIG_SENSORS_RM3100_I2C=m +CONFIG_SENSORS_RM3100_SPI=m +# CONFIG_SI7210 is not set +# CONFIG_TI_TMAG5273 is not set +# CONFIG_YAMAHA_YAS530 is not set +# end of Magnetometer sensors + +# +# Multiplexers +# +# CONFIG_IIO_MUX is not set +# end of Multiplexers + +# +# Inclinometer sensors +# +CONFIG_HID_SENSOR_INCLINOMETER_3D=m +CONFIG_HID_SENSOR_DEVICE_ROTATION=m +# end of Inclinometer sensors + +# +# Triggers - standalone +# +CONFIG_IIO_HRTIMER_TRIGGER=m +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set +CONFIG_IIO_SYSFS_TRIGGER=m +# end of Triggers - standalone + +# +# Linear and angular position sensors +# +# CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE is not set +# end of Linear and angular position sensors + +# +# Digital potentiometers +# +# CONFIG_AD5110 is not set +# CONFIG_AD5272 is not set +# CONFIG_DS1803 is not set +# CONFIG_MAX5432 is not set +# CONFIG_MAX5481 is not set +# CONFIG_MAX5487 is not set +# CONFIG_MCP4018 is not set +# CONFIG_MCP4131 is not set +# CONFIG_MCP4531 is not set +# CONFIG_MCP41010 is not set +# CONFIG_TPL0102 is not set +# CONFIG_X9250 is not set +# end of Digital potentiometers + +# +# Digital potentiostats +# +# CONFIG_LMP91000 is not set +# end of Digital potentiostats + +# +# Pressure sensors +# +CONFIG_ABP060MG=m +# CONFIG_ROHM_BM1390 is not set +CONFIG_BMP280=m +CONFIG_BMP280_I2C=m +CONFIG_BMP280_SPI=m +CONFIG_IIO_CROS_EC_BARO=m +CONFIG_DLHL60D=m +CONFIG_DPS310=m +CONFIG_HID_SENSOR_PRESS=m +CONFIG_HP03=m +# CONFIG_HSC030PA is not set +CONFIG_ICP10100=m +CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m +CONFIG_MPL3115=m +# CONFIG_MPRLS0025PA is not set +CONFIG_MS5611=m +# CONFIG_MS5611_I2C is not set +# CONFIG_MS5611_SPI is not set +CONFIG_MS5637=m +# CONFIG_SDP500 is not set +CONFIG_IIO_ST_PRESS=m +CONFIG_IIO_ST_PRESS_I2C=m +CONFIG_IIO_ST_PRESS_SPI=m +CONFIG_T5403=m +CONFIG_HP206C=m +CONFIG_ZPA2326=m +CONFIG_ZPA2326_I2C=m +CONFIG_ZPA2326_SPI=m +# end of Pressure sensors + +# +# Lightning sensors +# +# CONFIG_AS3935 is not set +# end of Lightning sensors + +# +# Proximity and distance sensors +# +# CONFIG_CROS_EC_MKBP_PROXIMITY is not set +# CONFIG_HX9023S is not set +# CONFIG_IRSD200 is not set +CONFIG_ISL29501=m +CONFIG_LIDAR_LITE_V2=m +CONFIG_MB1232=m +CONFIG_PING=m +CONFIG_RFD77402=m +CONFIG_SRF04=m +CONFIG_SX_COMMON=m +CONFIG_SX9310=m +# CONFIG_SX9324 is not set +# CONFIG_SX9360 is not set +# CONFIG_SX9500 is not set +CONFIG_SRF08=m +CONFIG_VCNL3020=m +CONFIG_VL53L0X_I2C=m +# CONFIG_AW96103 is not set +# end of Proximity and distance sensors + +# +# Resolver to digital converters +# +# CONFIG_AD2S90 is not set +# CONFIG_AD2S1200 is not set +# CONFIG_AD2S1210 is not set +# end of Resolver to digital converters + +# +# Temperature sensors +# +CONFIG_LTC2983=m +CONFIG_MAXIM_THERMOCOUPLE=m +CONFIG_HID_SENSOR_TEMP=m +CONFIG_MLX90614=m +CONFIG_MLX90632=m +# CONFIG_MLX90635 is not set +CONFIG_TMP006=m +CONFIG_TMP007=m +# CONFIG_TMP117 is not set +CONFIG_TSYS01=m +CONFIG_TSYS02D=m +# CONFIG_MAX30208 is not set +CONFIG_MAX31856=m +# CONFIG_MAX31865 is not set +# CONFIG_MCP9600 is not set +# end of Temperature sensors + +# CONFIG_NTB is not set +CONFIG_PWM=y +# CONFIG_PWM_DEBUG is not set +# CONFIG_PWM_CLK is not set +CONFIG_PWM_CRC=y +CONFIG_PWM_CROS_EC=m +# CONFIG_PWM_DWC is not set +# CONFIG_PWM_GPIO is not set +CONFIG_PWM_LPSS=m +# CONFIG_PWM_LPSS_PCI is not set +CONFIG_PWM_LPSS_PLATFORM=m +# CONFIG_PWM_PCA9685 is not set + +# +# IRQ chip support +# +# end of IRQ chip support + +# CONFIG_IPACK_BUS is not set +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_TI_SYSCON is not set +# CONFIG_RESET_TI_TPS380X is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_USB_LGM_PHY is not set +# CONFIG_PHY_CAN_TRANSCEIVER is not set + +# +# PHY drivers for Broadcom platforms +# +# CONFIG_BCM_KONA_USB2_PHY is not set +# end of PHY drivers for Broadcom platforms + +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PHY_CPCAP_USB is not set +# CONFIG_PHY_INTEL_LGM_EMMC is not set +# end of PHY Subsystem + +CONFIG_POWERCAP=y +CONFIG_INTEL_RAPL_CORE=m +CONFIG_INTEL_RAPL=m +CONFIG_INTEL_RAPL_TPMI=m +CONFIG_IDLE_INJECT=y +# CONFIG_MCB is not set + +# +# Performance monitor support +# +# CONFIG_DWC_PCIE_PMU is not set +# CONFIG_CXL_PMU is not set +# end of Performance monitor support + +CONFIG_RAS=y +CONFIG_RAS_CEC=y +# CONFIG_RAS_CEC_DEBUG is not set +CONFIG_AMD_ATL=m +CONFIG_AMD_ATL_PRM=y +CONFIG_RAS_FMPM=m +CONFIG_USB4=m +# CONFIG_USB4_DEBUGFS_WRITE is not set +# CONFIG_USB4_DMA_TEST is not set + +# +# Android +# +# CONFIG_ANDROID_BINDER_IPC is not set +# end of Android + +CONFIG_LIBNVDIMM=m +CONFIG_BLK_DEV_PMEM=m +CONFIG_ND_CLAIM=y +CONFIG_ND_BTT=m +CONFIG_BTT=y +CONFIG_ND_PFN=m +CONFIG_NVDIMM_PFN=y +CONFIG_NVDIMM_DAX=y +CONFIG_NVDIMM_KEYS=y +# CONFIG_NVDIMM_SECURITY_TEST is not set +CONFIG_DAX=y +CONFIG_DEV_DAX=m +CONFIG_DEV_DAX_PMEM=m +CONFIG_DEV_DAX_HMEM=m +CONFIG_DEV_DAX_CXL=m +CONFIG_DEV_DAX_HMEM_DEVICES=y +CONFIG_DEV_DAX_KMEM=m +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +# CONFIG_NVMEM_LAYOUTS is not set +# CONFIG_NVMEM_RMEM is not set + +# +# HW tracing support +# +CONFIG_STM=m +CONFIG_STM_PROTO_BASIC=m +CONFIG_STM_PROTO_SYS_T=m +CONFIG_STM_DUMMY=m +CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_HEARTBEAT=m +CONFIG_STM_SOURCE_FTRACE=m +CONFIG_INTEL_TH=m +CONFIG_INTEL_TH_PCI=m +CONFIG_INTEL_TH_ACPI=m +CONFIG_INTEL_TH_GTH=m +CONFIG_INTEL_TH_STH=m +CONFIG_INTEL_TH_MSU=m +CONFIG_INTEL_TH_PTI=m +# CONFIG_INTEL_TH_DEBUG is not set +# end of HW tracing support + +# CONFIG_FPGA is not set +CONFIG_TEE=m +CONFIG_AMDTEE=m +CONFIG_PM_OPP=y +# CONFIG_SIOX is not set +CONFIG_SLIMBUS=m +# CONFIG_SLIM_QCOM_CTRL is not set +# CONFIG_INTERCONNECT is not set +# CONFIG_COUNTER is not set +# CONFIG_MOST is not set +# CONFIG_PECI is not set +# CONFIG_HTE is not set +CONFIG_DPLL=y +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_VALIDATE_FS_PARSER is not set +CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y +CONFIG_BUFFER_HEAD=y +CONFIG_LEGACY_DIRECT_IO=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT2=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +CONFIG_XFS_FS=m +CONFIG_XFS_SUPPORT_V4=y +CONFIG_XFS_SUPPORT_ASCII_CI=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +# CONFIG_XFS_ONLINE_SCRUB is not set +# CONFIG_XFS_WARN is not set +# CONFIG_XFS_DEBUG is not set +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +CONFIG_OCFS2_FS=m +CONFIG_OCFS2_FS_O2CB=m +CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_DEBUG_MASKLOG=y +# CONFIG_OCFS2_DEBUG_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_EXPERIMENTAL is not set +# CONFIG_BTRFS_FS_REF_VERIFY is not set +CONFIG_NILFS2_FS=m +CONFIG_F2FS_FS=m +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +CONFIG_F2FS_FS_COMPRESSION=y +CONFIG_F2FS_FS_LZO=y +CONFIG_F2FS_FS_LZORLE=y +CONFIG_F2FS_FS_LZ4=y +CONFIG_F2FS_FS_LZ4HC=y +CONFIG_F2FS_FS_ZSTD=y +CONFIG_F2FS_IOSTAT=y +# CONFIG_F2FS_UNFAIR_RWSEM is not set +CONFIG_BCACHEFS_FS=m +CONFIG_BCACHEFS_QUOTA=y +# CONFIG_BCACHEFS_ERASURE_CODING is not set +CONFIG_BCACHEFS_POSIX_ACL=y +# CONFIG_BCACHEFS_DEBUG is not set +# CONFIG_BCACHEFS_TESTS is not set +# CONFIG_BCACHEFS_LOCK_TIME_STATS is not set +# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set +CONFIG_BCACHEFS_SIX_OPTIMISTIC_SPIN=y +# CONFIG_BCACHEFS_PATH_TRACEPOINTS is not set +# CONFIG_BCACHEFS_TRANS_KMALLOC_TRACE is not set +# CONFIG_BCACHEFS_ASYNC_OBJECT_LISTS is not set +CONFIG_ZONEFS_FS=m +CONFIG_FS_DAX=y +CONFIG_FS_DAX_PMD=y +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +CONFIG_EXPORTFS_BLOCK_OPS=y +CONFIG_FILE_LOCKING=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_ENCRYPTION_ALGS=y +CONFIG_FS_VERITY=y +CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=m +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QUOTACTL=y +CONFIG_AUTOFS_FS=m +CONFIG_FUSE_FS=y +CONFIG_CUSE=m +CONFIG_VIRTIO_FS=y +CONFIG_FUSE_DAX=y +CONFIG_FUSE_PASSTHROUGH=y +CONFIG_FUSE_IO_URING=y +CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_INDEX is not set +# CONFIG_OVERLAY_FS_XINO_AUTO is not set +# CONFIG_OVERLAY_FS_METACOPY is not set +# CONFIG_OVERLAY_FS_DEBUG is not set + +# +# Caches +# +CONFIG_NETFS_SUPPORT=m +CONFIG_NETFS_STATS=y +# CONFIG_NETFS_DEBUG is not set +CONFIG_FSCACHE=y +CONFIG_FSCACHE_STATS=y +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_ERROR_INJECTION is not set +# CONFIG_CACHEFILES_ONDEMAND is not set +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +CONFIG_FAT_DEFAULT_UTF8=y +CONFIG_EXFAT_FS=m +CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS3_FS=m +# CONFIG_NTFS3_64BIT_CLUSTER is not set +# CONFIG_NTFS3_LZX_XPRESS is not set +# CONFIG_NTFS3_FS_POSIX_ACL is not set +# CONFIG_NTFS_FS is not set +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +# CONFIG_PROC_VMCORE_DEVICE_DUMP is not set +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_CHILDREN=y +CONFIG_PROC_PID_ARCH_STATUS=y +CONFIG_PROC_CPU_RESCTRL=y +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TMPFS_INODE64=y +# CONFIG_TMPFS_QUOTA is not set +CONFIG_HUGETLBFS=y +# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set +CONFIG_HUGETLB_PAGE=y +CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y +CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_CONFIGFS_FS=m +CONFIG_EFIVAR_FS=m +# end of Pseudo filesystems + +CONFIG_MISC_FILESYSTEMS=y +CONFIG_ORANGEFS_FS=m +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_AFFS_FS=m +CONFIG_ECRYPT_FS=m +CONFIG_ECRYPT_FS_MESSAGING=y +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BFS_FS=m +CONFIG_EFS_FS=m +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +CONFIG_JFFS2_SUMMARY=y +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +# CONFIG_JFFS2_CMODE_FAVOURLZO is not set +CONFIG_UBIFS_FS=m +CONFIG_UBIFS_FS_ADVANCED_COMPR=y +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UBIFS_FS_ZSTD=y +# CONFIG_UBIFS_ATIME_SUPPORT is not set +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_SECURITY=y +# CONFIG_UBIFS_FS_AUTHENTICATION is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=m +# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y +# CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT is not set +# CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE is not set +# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI is not set +CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU=y +CONFIG_SQUASHFS_XATTR=y +# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_VXFS_FS=m +CONFIG_MINIX_FS=m +CONFIG_OMFS_FS=m +CONFIG_HPFS_FS=m +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +# CONFIG_QNX6FS_DEBUG is not set +CONFIG_RESCTRL_FS=y +CONFIG_RESCTRL_FS_PSEUDO_LOCK=y +CONFIG_ROMFS_FS=m +# CONFIG_ROMFS_BACKED_BY_BLOCK is not set +# CONFIG_ROMFS_BACKED_BY_MTD is not set +CONFIG_ROMFS_BACKED_BY_BOTH=y +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_ROMFS_ON_MTD=y +CONFIG_PSTORE=y +CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 +CONFIG_PSTORE_COMPRESS=y +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_PMSG is not set +# CONFIG_PSTORE_FTRACE is not set +CONFIG_PSTORE_RAM=m +CONFIG_PSTORE_ZONE=m +CONFIG_PSTORE_BLK=m +CONFIG_PSTORE_BLK_BLKDEV="" +CONFIG_PSTORE_BLK_KMSG_SIZE=64 +CONFIG_PSTORE_BLK_MAX_REASON=2 +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_UFS_DEBUG is not set +CONFIG_EROFS_FS=m +# CONFIG_EROFS_FS_DEBUG is not set +CONFIG_EROFS_FS_XATTR=y +CONFIG_EROFS_FS_POSIX_ACL=y +CONFIG_EROFS_FS_SECURITY=y +CONFIG_EROFS_FS_BACKED_BY_FILE=y +CONFIG_EROFS_FS_ZIP=y +CONFIG_EROFS_FS_ZIP_LZMA=y +CONFIG_EROFS_FS_ZIP_DEFLATE=y +CONFIG_EROFS_FS_ZIP_ZSTD=y +# CONFIG_EROFS_FS_ZIP_ACCEL is not set +# CONFIG_EROFS_FS_ONDEMAND is not set +# CONFIG_EROFS_FS_PCPU_KTHREAD is not set +CONFIG_VBOXSF_FS=m +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V2=m +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +CONFIG_NFS_SWAP=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_NFS_V4_SECURITY_LABEL=y +CONFIG_NFS_FSCACHE=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFS_DEBUG=y +CONFIG_NFS_DISABLE_UDP_SUPPORT=y +CONFIG_NFS_V4_2_READ_PLUS=y +CONFIG_NFSD=m +# CONFIG_NFSD_V2 is not set +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_PNFS=y +CONFIG_NFSD_BLOCKLAYOUT=y +# CONFIG_NFSD_SCSILAYOUT is not set +# CONFIG_NFSD_FLEXFILELAYOUT is not set +# CONFIG_NFSD_V4_2_INTER_SSC is not set +CONFIG_NFSD_V4_SECURITY_LABEL=y +# CONFIG_NFSD_LEGACY_CLIENT_TRACKING is not set +# CONFIG_NFSD_V4_DELEG_TIMESTAMPS is not set +CONFIG_GRACE_PERIOD=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +# CONFIG_NFS_LOCALIO is not set +CONFIG_NFS_V4_2_SSC_HELPER=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_SUNRPC_SWAP=y +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1=y +# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA is not set +CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2=y +CONFIG_SUNRPC_DEBUG=y +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_CEPH_FS=m +CONFIG_CEPH_FSCACHE=y +CONFIG_CEPH_FS_POSIX_ACL=y +# CONFIG_CEPH_FS_SECURITY_LABEL is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS2=y +CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set +CONFIG_CIFS_DFS_UPCALL=y +# CONFIG_CIFS_SWN_UPCALL is not set +# CONFIG_CIFS_SMB_DIRECT is not set +CONFIG_CIFS_FSCACHE=y +# CONFIG_CIFS_COMPRESSION is not set +CONFIG_SMB_SERVER=m +# CONFIG_SMB_SERVER_SMBDIRECT is not set +CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y +CONFIG_SMB_SERVER_KERBEROS5=y +CONFIG_SMBFS=m +CONFIG_CODA_FS=m +CONFIG_AFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FSCACHE=y +# CONFIG_AFS_DEBUG_CURSOR is not set +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_9P_FS_SECURITY=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m +CONFIG_NLS_UTF8=m +CONFIG_NLS_UCS2_UTILS=m +CONFIG_DLM=m +CONFIG_DLM_DEBUG=y +CONFIG_UNICODE=y +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_REQUEST_CACHE is not set +CONFIG_PERSISTENT_KEYRINGS=y +# CONFIG_BIG_KEYS is not set +# CONFIG_TRUSTED_KEYS is not set +CONFIG_ENCRYPTED_KEYS=y +# CONFIG_USER_DECRYPTED_DATA is not set +CONFIG_KEY_DH_OPERATIONS=y +CONFIG_SECURITY_DMESG_RESTRICT=y +CONFIG_PROC_MEM_ALWAYS_FORCE=y +# CONFIG_PROC_MEM_FORCE_PTRACE is not set +# CONFIG_PROC_MEM_NO_FORCE is not set +CONFIG_SECURITY=y +CONFIG_HAS_SECURITY_AUDIT=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_INFINIBAND is not set +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_SECURITY_PATH=y +CONFIG_INTEL_TXT=y +CONFIG_LSM_MMAP_MIN_ADDR=65536 +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_SECURITY_SELINUX=y +# CONFIG_SECURITY_SELINUX_BOOTPARAM is not set +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9 +CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 +# CONFIG_SECURITY_SELINUX_DEBUG is not set +# CONFIG_SECURITY_SMACK is not set +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init" +# CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING is not set +CONFIG_SECURITY_APPARMOR=y +# CONFIG_SECURITY_APPARMOR_DEBUG is not set +CONFIG_SECURITY_APPARMOR_INTROSPECT_POLICY=y +CONFIG_SECURITY_APPARMOR_HASH=y +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y +CONFIG_SECURITY_APPARMOR_EXPORT_BINARY=y +CONFIG_SECURITY_APPARMOR_PARANOID_LOAD=y +# CONFIG_SECURITY_LOADPIN is not set +CONFIG_SECURITY_YAMA=y +# CONFIG_SECURITY_SAFESETID is not set +CONFIG_SECURITY_LOCKDOWN_LSM=y +CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y +CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y +# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set +# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set +CONFIG_SECURITY_LANDLOCK=y +CONFIG_SECURITY_IPE=y +CONFIG_IPE_BOOT_POLICY="" +CONFIG_IPE_POLICY_SIG_SECONDARY_KEYRING=y +CONFIG_IPE_POLICY_SIG_PLATFORM_KEYRING=y + +# +# IPE Trust Providers +# +CONFIG_IPE_PROP_DM_VERITY=y +CONFIG_IPE_PROP_DM_VERITY_SIGNATURE=y +CONFIG_IPE_PROP_FS_VERITY=y +CONFIG_IPE_PROP_FS_VERITY_BUILTIN_SIG=y +# end of IPE Trust Providers + +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +# CONFIG_INTEGRITY_TRUSTED_KEYRING is not set +CONFIG_INTEGRITY_PLATFORM_KEYRING=y +CONFIG_INTEGRITY_MACHINE_KEYRING=y +# CONFIG_INTEGRITY_CA_MACHINE_KEYRING is not set +CONFIG_LOAD_UEFI_KEYS=y +CONFIG_INTEGRITY_AUDIT=y +CONFIG_IMA=y +# CONFIG_IMA_KEXEC is not set +CONFIG_IMA_MEASURE_PCR_IDX=10 +CONFIG_IMA_LSM_RULES=y +# CONFIG_IMA_NG_TEMPLATE is not set +CONFIG_IMA_SIG_TEMPLATE=y +CONFIG_IMA_DEFAULT_TEMPLATE="ima-sig" +# CONFIG_IMA_DEFAULT_HASH_SHA1 is not set +CONFIG_IMA_DEFAULT_HASH_SHA256=y +# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set +CONFIG_IMA_DEFAULT_HASH="sha256" +# CONFIG_IMA_WRITE_POLICY is not set +# CONFIG_IMA_READ_POLICY is not set +CONFIG_IMA_APPRAISE=y +CONFIG_IMA_ARCH_POLICY=y +# CONFIG_IMA_APPRAISE_BUILD_POLICY is not set +CONFIG_IMA_APPRAISE_BOOTPARAM=y +# CONFIG_IMA_APPRAISE_MODSIG is not set +# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set +CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y +CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y +CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT=y +# CONFIG_IMA_DISABLE_HTABLE is not set +CONFIG_EVM=y +CONFIG_EVM_ATTR_FSUUID=y +# CONFIG_EVM_ADD_XATTRS is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,apparmor,selinux,smack,tomoyo,bpf,ipe" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y +# CONFIG_INIT_STACK_NONE is not set +# CONFIG_INIT_STACK_ALL_PATTERN is not set +CONFIG_INIT_STACK_ALL_ZERO=y +# CONFIG_GCC_PLUGIN_STACKLEAK is not set +CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization + +# +# Bounds checking +# +CONFIG_FORTIFY_SOURCE=y +CONFIG_HARDENED_USERCOPY=y +CONFIG_HARDENED_USERCOPY_DEFAULT_ON=y +# end of Bounds checking + +# +# Hardening of kernel data structures +# +CONFIG_LIST_HARDENED=y +CONFIG_BUG_ON_DATA_CORRUPTION=y +# end of Hardening of kernel data structures + +CONFIG_RANDSTRUCT_NONE=y +# CONFIG_RANDSTRUCT_FULL is not set +# CONFIG_RANDSTRUCT_PERFORMANCE is not set +# end of Kernel hardening options +# end of Security options + +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_FIPS=y +CONFIG_CRYPTO_FIPS_NAME="Linux Kernel Cryptographic API" +# CONFIG_CRYPTO_FIPS_CUSTOM_VERSION is not set +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=m +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SIG=y +CONFIG_CRYPTO_SIG2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_HKDF=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_SELFTESTS=y +# CONFIG_CRYPTO_SELFTESTS_FULL is not set +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_KRB5ENC=m +CONFIG_CRYPTO_BENCHMARK=m +CONFIG_CRYPTO_ENGINE=m +# end of Crypto core or helper + +# +# Public-key cryptography +# +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_DH=y +CONFIG_CRYPTO_DH_RFC7919_GROUPS=y +CONFIG_CRYPTO_ECC=y +CONFIG_CRYPTO_ECDH=y +CONFIG_CRYPTO_ECDSA=y +CONFIG_CRYPTO_ECRDSA=m +CONFIG_CRYPTO_CURVE25519=m +# end of Public-key cryptography + +# +# Block ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_TI=m +# CONFIG_CRYPTO_ARIA is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_SERPENT=m +# CONFIG_CRYPTO_SM4_GENERIC is not set +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# end of Block ciphers + +# +# Length-preserving ciphers and modes +# +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_CHACHA20=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_HCTR2 is not set +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=y +CONFIG_CRYPTO_NHPOLY1305=m +# end of Length-preserving ciphers and modes + +# +# AEAD (authenticated encryption with associated data) ciphers +# +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_GENIV=m +CONFIG_CRYPTO_SEQIV=m +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_ESSIV=m +# end of AEAD (authenticated encryption with associated data) ciphers + +# +# Hashes, digests, and MACs +# +CONFIG_CRYPTO_BLAKE2B=m +CONFIG_CRYPTO_CMAC=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA3=y +# CONFIG_CRYPTO_SM3_GENERIC is not set +CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XXHASH=m +# end of Hashes, digests, and MACs + +# +# CRCs (cyclic redundancy checks) +# +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CRC32=m +# end of CRCs (cyclic redundancy checks) + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_LZO=y +# CONFIG_CRYPTO_842 is not set +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m +CONFIG_CRYPTO_ZSTD=m +# end of Compression + +# +# Random number generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_JITTERENTROPY_MEMSIZE_2=y +# CONFIG_CRYPTO_JITTERENTROPY_MEMSIZE_128 is not set +# CONFIG_CRYPTO_JITTERENTROPY_MEMSIZE_1024 is not set +# CONFIG_CRYPTO_JITTERENTROPY_MEMSIZE_8192 is not set +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 +CONFIG_CRYPTO_JITTERENTROPY_OSR=3 +# CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE is not set +CONFIG_CRYPTO_KDF800108_CTR=y +# end of Random number generation + +# +# Userspace interface +# +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_RNG=m +# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set +CONFIG_CRYPTO_USER_API_AEAD=m +# CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set +# end of Userspace interface + +CONFIG_CRYPTO_HASH_INFO=y + +# +# Accelerated Cryptographic Algorithms for CPU (x86) +# +CONFIG_CRYPTO_CURVE25519_X86=m +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_BLOWFISH_X86_64=m +CONFIG_CRYPTO_CAMELLIA_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_CAST5_AVX_X86_64=m +CONFIG_CRYPTO_CAST6_AVX_X86_64=m +CONFIG_CRYPTO_DES3_EDE_X86_64=m +CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m +# CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64 is not set +# CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64 is not set +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m +CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m +# CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64 is not set +# CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64 is not set +# CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64 is not set +CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m +CONFIG_CRYPTO_NHPOLY1305_SSE2=m +CONFIG_CRYPTO_NHPOLY1305_AVX2=m +# CONFIG_CRYPTO_POLYVAL_CLMUL_NI is not set +CONFIG_CRYPTO_SHA1_SSSE3=m +CONFIG_CRYPTO_SHA512_SSSE3=m +# CONFIG_CRYPTO_SM3_AVX_X86_64 is not set +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m +# end of Accelerated Cryptographic Algorithms for CPU (x86) + +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set +# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m +CONFIG_CRYPTO_DEV_SP_PSP=y +# CONFIG_CRYPTO_DEV_CCP_DEBUGFS is not set +# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set +CONFIG_CRYPTO_DEV_QAT=m +CONFIG_CRYPTO_DEV_QAT_DH895xCC=m +CONFIG_CRYPTO_DEV_QAT_C3XXX=m +CONFIG_CRYPTO_DEV_QAT_C62X=m +# CONFIG_CRYPTO_DEV_QAT_4XXX is not set +# CONFIG_CRYPTO_DEV_QAT_420XX is not set +# CONFIG_CRYPTO_DEV_QAT_6XXX is not set +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m +CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m +CONFIG_CRYPTO_DEV_QAT_C62XVF=m +# CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION is not set +CONFIG_CRYPTO_DEV_IAA_CRYPTO=m +# CONFIG_CRYPTO_DEV_IAA_CRYPTO_STATS is not set +CONFIG_CRYPTO_DEV_CHELSIO=m +CONFIG_CRYPTO_DEV_VIRTIO=m +# CONFIG_CRYPTO_DEV_SAFEXCEL is not set +# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS8_PRIVATE_KEY_PARSER=m +CONFIG_PKCS7_MESSAGE_PARSER=y +# CONFIG_PKCS7_TEST_KEY is not set +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +# CONFIG_FIPS_SIGNATURE_SELFTEST is not set + +# +# Certificates for signature checking +# +CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" +CONFIG_MODULE_SIG_KEY_TYPE_RSA=y +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set +CONFIG_SECONDARY_TRUSTED_KEYRING=y +# CONFIG_SECONDARY_TRUSTED_KEYRING_SIGNED_BY_BUILTIN is not set +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" +# CONFIG_SYSTEM_REVOCATION_LIST is not set +# CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE is not set +# end of Certificates for signature checking + +CONFIG_CRYPTO_KRB5=m +# CONFIG_CRYPTO_KRB5_SELFTESTS is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=m +CONFIG_RAID6_PQ_BENCHMARK=y +CONFIG_LINEAR_RANGES=y +CONFIG_PACKING=y +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_CORDIC=m +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_GENERIC_IOMAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y + +# +# Crypto library routines +# +CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_AESCFB=y +CONFIG_CRYPTO_LIB_AESGCM=y +CONFIG_CRYPTO_LIB_ARC4=m +CONFIG_CRYPTO_LIB_GF128MUL=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y +CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m +CONFIG_CRYPTO_LIB_CHACHA=m +CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y +CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m +CONFIG_CRYPTO_LIB_CURVE25519_INTERNAL=m +CONFIG_CRYPTO_LIB_CURVE25519=m +CONFIG_CRYPTO_LIB_DES=m +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11 +CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y +CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m +CONFIG_CRYPTO_LIB_POLY1305=m +CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_SHA256=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_SHA256=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_SHA256_SIMD=y +CONFIG_CRYPTO_LIB_SHA256_GENERIC=y +CONFIG_CRYPTO_BLAKE2S_X86=y +CONFIG_CRYPTO_CHACHA20_X86_64=m +CONFIG_CRYPTO_POLY1305_X86_64=m +CONFIG_CRYPTO_SHA256_X86_64=y +# end of Crypto library routines + +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_ARCH_HAS_CRC_T10DIF=y +CONFIG_CRC_T10DIF_ARCH=y +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_ARCH_HAS_CRC32=y +CONFIG_CRC32_ARCH=y +CONFIG_CRC64=y +CONFIG_ARCH_HAS_CRC64=y +CONFIG_CRC64_ARCH=y +CONFIG_CRC8=m +CONFIG_CRC_OPTIMIZATIONS=y +CONFIG_XXHASH=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMMON=y +CONFIG_ZSTD_COMPRESS=y +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_ARM is not set +# CONFIG_XZ_DEC_ARMTHUMB is not set +CONFIG_XZ_DEC_ARM64=y +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_XZ_DEC_RISCV=y +CONFIG_XZ_DEC_MICROLZMA=y +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_BCH=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_BTREE=y +CONFIG_INTERVAL_TREE=y +CONFIG_XARRAY_MULTI=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_CLOSURES=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS_HELPERS=y +CONFIG_NEED_SG_DMA_FLAGS=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y +CONFIG_SWIOTLB=y +# CONFIG_SWIOTLB_DYNAMIC is not set +CONFIG_DMA_NEED_SYNC=y +CONFIG_DMA_COHERENT_POOL=y +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +CONFIG_IOMMU_HELPER=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CPUMASK_OFFSTACK=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +CONFIG_LRU_CACHE=m +CONFIG_CLZ_TAB=y +CONFIG_IRQ_POLL=y +CONFIG_MPILIB=y +CONFIG_SIGNATURE=y +CONFIG_DIMLIB=y +CONFIG_OID_REGISTRY=y +CONFIG_UCS2_STRING=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y +CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y +CONFIG_VDSO_GETRANDOM=y +CONFIG_GENERIC_VDSO_DATA_STORE=y +CONFIG_FONT_SUPPORT=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +# CONFIG_FONT_ACORN_8x8 is not set +# CONFIG_FONT_MINI_4x6 is not set +# CONFIG_FONT_6x10 is not set +# CONFIG_FONT_10x18 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +CONFIG_FONT_TER16x32=y +# CONFIG_FONT_6x8 is not set +CONFIG_SG_POOL=y +CONFIG_ARCH_HAS_PMEM_API=y +CONFIG_MEMREGION=y +CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y +CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y +CONFIG_ARCH_HAS_COPY_MC=y +CONFIG_ARCH_STACKWALK=y +CONFIG_STACKDEPOT=y +CONFIG_STACKDEPOT_MAX_FRAMES=64 +CONFIG_SBITMAP=y +# CONFIG_LWQ_TEST is not set +# end of Library routines + +CONFIG_PLDMFW=y +CONFIG_FIRMWARE_TABLE=y +CONFIG_UNION_FIND=y +CONFIG_MIN_HEAP=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_DEBUG_CORE=y +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# end of printk and dmesg options + +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_INFO=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y +# CONFIG_DEBUG_INFO_NONE is not set +CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +# CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set +# CONFIG_DEBUG_INFO_REDUCED is not set +CONFIG_DEBUG_INFO_COMPRESSED_NONE=y +# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set +# CONFIG_DEBUG_INFO_COMPRESSED_ZSTD is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +# CONFIG_GDB_SCRIPTS is not set +CONFIG_FRAME_WARN=2048 +CONFIG_STRIP_ASM_SYMS=y +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +CONFIG_OBJTOOL=y +# CONFIG_OBJTOOL_WERROR is not set +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +CONFIG_ARCH_HAS_UBSAN=y +CONFIG_UBSAN=y +# CONFIG_UBSAN_TRAP is not set +CONFIG_CC_HAS_UBSAN_BOUNDS_STRICT=y +CONFIG_UBSAN_BOUNDS=y +CONFIG_UBSAN_BOUNDS_STRICT=y +CONFIG_UBSAN_SHIFT=y +# CONFIG_UBSAN_DIV_ZERO is not set +# CONFIG_UBSAN_BOOL is not set +# CONFIG_UBSAN_ENUM is not set +# CONFIG_UBSAN_ALIGNMENT is not set +# CONFIG_TEST_UBSAN is not set +CONFIG_HAVE_ARCH_KCSAN=y +CONFIG_HAVE_KCSAN_COMPILER=y +# CONFIG_KCSAN is not set +# end of Generic Kernel Debugging Instruments + +# +# Networking Debugging +# +# CONFIG_NET_DEV_REFCNT_TRACKER is not set +# CONFIG_NET_NS_REFCNT_TRACKER is not set +# CONFIG_DEBUG_NET is not set +# CONFIG_DEBUG_NET_SMALL_RTNL is not set +# end of Networking Debugging + +# +# Memory Debugging +# +CONFIG_PAGE_EXTENSION=y +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_SLUB_DEBUG=y +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_TABLE_CHECK is not set +CONFIG_PAGE_POISONING=y +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_ARCH_HAS_DEBUG_WX=y +CONFIG_DEBUG_WX=y +CONFIG_ARCH_HAS_PTDUMP=y +CONFIG_PTDUMP=y +# CONFIG_PTDUMP_DEBUGFS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_PER_VMA_LOCK_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SHRINKER_DEBUG is not set +# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VFS is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VM_PGTABLE is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +CONFIG_DEBUG_MEMORY_INIT=y +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_MEM_ALLOC_PROFILING is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_KASAN_SW_TAGS=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +CONFIG_KFENCE=y +CONFIG_KFENCE_SAMPLE_INTERVAL=0 +CONFIG_KFENCE_NUM_OBJECTS=255 +# CONFIG_KFENCE_DEFERRABLE is not set +# CONFIG_KFENCE_STATIC_KEYS is not set +CONFIG_KFENCE_STRESS_TEST_FAULTS=0 +CONFIG_HAVE_ARCH_KMSAN=y +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_SOFTLOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y +CONFIG_HARDLOCKUP_DETECTOR=y +# CONFIG_HARDLOCKUP_DETECTOR_PREFER_BUDDY is not set +CONFIG_HARDLOCKUP_DETECTOR_PERF=y +# CONFIG_HARDLOCKUP_DETECTOR_BUDDY is not set +# CONFIG_HARDLOCKUP_DETECTOR_ARCH is not set +CONFIG_HARDLOCKUP_DETECTOR_COUNTS_HRTIMER=y +CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_DETECT_HUNG_TASK_BLOCKER=y +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +CONFIG_SCHED_INFO=y +CONFIG_SCHEDSTATS=y +# end of Scheduler Debugging + +# CONFIG_DEBUG_PREEMPT is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# CONFIG_CSD_LOCK_WAIT_DEBUG is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +# CONFIG_NMI_CHECK_CPU is not set +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +CONFIG_DEBUG_LIST=y +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CLOSURES is not set +# CONFIG_DEBUG_MAPLE_TREE is not set +# end of Debug kernel data structures + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 +# CONFIG_RCU_CPU_STALL_CPUTIME is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_LATENCYTOP is not set +# CONFIG_DEBUG_CGROUP_REF is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_RETHOOK=y +CONFIG_RETHOOK=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FREGS=y +CONFIG_HAVE_FTRACE_GRAPH_FUNC=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_REGS_HAVING_PT_REGS=y +CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_OBJTOOL_MCOUNT=y +CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y +CONFIG_BUILDTIME_MCOUNT_SORT=y +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_BOOTTIME_TRACING is not set +CONFIG_FUNCTION_TRACER=y +CONFIG_FUNCTION_GRAPH_TRACER=y +# CONFIG_FUNCTION_GRAPH_RETVAL is not set +# CONFIG_FUNCTION_GRAPH_RETADDR is not set +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_FPROBE=y +# CONFIG_FUNCTION_PROFILER is not set +CONFIG_STACK_TRACER=y +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_PREEMPT_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_HWLAT_TRACER is not set +# CONFIG_OSNOISE_TRACER is not set +# CONFIG_TIMERLAT_TRACER is not set +CONFIG_MMIOTRACE=y +CONFIG_FTRACE_SYSCALLS=y +CONFIG_TRACER_SNAPSHOT=y +# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_FPROBE_EVENTS=y +CONFIG_KPROBE_EVENTS=y +# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set +CONFIG_UPROBE_EVENTS=y +CONFIG_BPF_EVENTS=y +CONFIG_DYNAMIC_EVENTS=y +CONFIG_PROBE_EVENTS=y +CONFIG_FTRACE_MCOUNT_RECORD=y +CONFIG_FTRACE_MCOUNT_USE_CC=y +CONFIG_TRACING_MAP=y +CONFIG_SYNTH_EVENTS=y +# CONFIG_USER_EVENTS is not set +CONFIG_HIST_TRIGGERS=y +# CONFIG_TRACE_EVENT_INJECT is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_TRACE_EVAL_MAP_FILE is not set +# CONFIG_FTRACE_RECORD_RECURSION is not set +# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_FTRACE_SORT_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set +# CONFIG_MMIOTRACE_TEST is not set +# CONFIG_PREEMPTIRQ_DELAY_TEST is not set +# CONFIG_SYNTH_EVENT_GEN_TEST is not set +# CONFIG_KPROBE_EVENT_GEN_TEST is not set +# CONFIG_HIST_TRIGGERS_DEBUG is not set +# CONFIG_RV is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y +CONFIG_STRICT_DEVMEM=y +CONFIG_IO_STRICT_DEVMEM=y + +# +# x86 Debugging +# +# CONFIG_X86_VERBOSE_BOOTUP is not set +CONFIG_EARLY_PRINTK=y +# CONFIG_EARLY_PRINTK_DBGP is not set +# CONFIG_EARLY_PRINTK_USB_XDBC is not set +# CONFIG_EFI_PGT_DUMP is not set +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_IOMMU_DEBUG is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +# CONFIG_X86_DECODER_SELFTEST is not set +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +# CONFIG_CPA_DEBUG is not set +# CONFIG_DEBUG_ENTRY is not set +# CONFIG_DEBUG_NMI_SELFTEST is not set +CONFIG_X86_DEBUG_FPU=y +# CONFIG_PUNIT_ATOM_DEBUG is not set +CONFIG_UNWINDER_ORC=y +# CONFIG_UNWINDER_FRAME_POINTER is not set +# end of x86 Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +CONFIG_NOTIFIER_ERROR_INJECTION=m +CONFIG_PM_NOTIFIER_ERROR_INJECT=m +# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set +# CONFIG_FUNCTION_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +# CONFIG_KCOV is not set +CONFIG_RUNTIME_TESTING_MENU=y +# CONFIG_TEST_DHRY is not set +# CONFIG_LKDTM is not set +# CONFIG_TEST_MIN_HEAP is not set +# CONFIG_TEST_DIV64 is not set +# CONFIG_TEST_MULDIV64 is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_TEST_REF_TRACKER is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_REED_SOLOMON_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set +# CONFIG_TEST_MAPLE_TREE is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_IDA is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BITOPS is not set +# CONFIG_TEST_VMALLOC is not set +CONFIG_TEST_BPF=m +# CONFIG_FIND_BIT_BENCHMARK is not set +CONFIG_TEST_FIRMWARE=m +# CONFIG_TEST_SYSCTL is not set +# CONFIG_TEST_UDELAY is not set +CONFIG_TEST_STATIC_KEYS=m +# CONFIG_TEST_DYNAMIC_DEBUG is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_KALLSYMS is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_MEMINIT is not set +# CONFIG_TEST_HMM is not set +# CONFIG_TEST_FREE_PAGES is not set +# CONFIG_TEST_FPU is not set +# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +# CONFIG_TEST_OBJPOOL is not set +CONFIG_ARCH_USE_MEMTEST=y +CONFIG_MEMTEST=y +# CONFIG_HYPERV_TESTING is not set +# end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking +# end of Kernel hacking + +CONFIG_IO_URING_ZCRX=y diff --git a/packages/wdm-1.28/README.md b/packages/wdm-1.28/README.md new file mode 100644 index 0000000..bd4451c --- /dev/null +++ b/packages/wdm-1.28/README.md @@ -0,0 +1,191 @@ +# wdm-1.28 + +## Introduction to WINGs Display Manager + +The WDM package contains a display manager based on WINGs toolkit from +Window Maker. + +This package is known to build and work properly using a ZiomekOS 26.9.26 +platform. + +## WDM Package Information + +* Download (HTTP): http://deb.debian.org/debian/pool/main/w/wdm/wdm_1.28.orig.tar.gz +* Download MD5 sum: `97d75a5be4fe1d2e232d2a39106a972e` +* Download size: 400kB + +## Additional Download + +### Debian package source tarball + +This download is needed for patches. + +Download: http://deb.debian.org/debian/pool/main/w/wdm/wdm_1.28-27.debian.tar.xz + +## WDM Dependencies + +### Required + +Window Maker 0.96.0 (for WINGs), xdm 1.1.17 (for up to date configuration), BLFS Boot Scripts 20250225 (for xdm boot script) + +## Installation of WDM + +Extract patches 1 to 11 from the Debian source tarball into `patches` directory. + +Apply patches: + +``` +patch -Np1 -i ../patches/01_kfreebsd.patch +patch -Np1 -i ../patches/02_fix_login_overflow.patch +patch -Np1 -i ../patches/03_autoconf.patch +patch -Np1 -i ../patches/04_manpage_indent.patch +patch -Np1 -i ../patches/05_french_translation_name.patch +patch -Np1 -i ../patches/06_login_composite.patch +patch -Np1 -i ../patches/07_ld_no_add_needed.patch +patch -Np1 -i ../patches/08_do_not_use_dev_mem.patch +patch -Np1 -i ../patches/09_pam_session.patch +patch -Np1 -i ../patches/10_spelling_fixes.patch +patch -Np1 -i ../patches/11_usr_bin_X11_removal.patch +patch -Np1 -i ../patches/12_make_it_compile_on_lfs.patch +``` + +Since `configure.ac` has been changed, you need to rebuild `configure`: + +``` +autoreconf -i +``` + +Install WDM by running the following commands: + +``` +./configure \ + --prefix=/usr \ + --datadir=/usr/share \ + --sysconfdir=/etc/X11 \ + --localstatedir=/var/lib/wdm \ + --with-gfxdir=/usr/share/pixmaps \ + --enable-shadow \ + --enable-pam \ + --enable-aafont \ + --with-pamdir=/etc/pam.d \ + --with-wdmdir=/etc/X11/wdm \ + --with-nlsdir=/usr/share/locale && +make +``` + +This package does not come with a test suite. + +Now, as the _root_ user: + +``` +make install +``` + +## Configuring WDM + +**NOTE**: All the actions in this section must be executed as _root_. + +First, you need to update WDM config to make it inline with modern Xorg. I found the best way to do it, is just use what's delivered OOTB by xdm: + +``` +cp -v /etc/X11/xdm/{GiveConsole,TakeConsole,Xaccess,Xreset,Xresources,Xservers,Xsession,Xsetup_0,Xstartup,Xstartup} /etc/X11/wdm/ +``` + +xdm starts `xconsole` in `Xsetup_0`, which means an ever-present window on your desktop. You may want to comment out that line :). + +Next, you need to create WDM's `authdir`: + +``` +install -m0700 -o root -g root /etc/X11/wdm/authdir +``` + +You'll also need PAM configuration for WDM: + +``` +cat > /etc/pam.d/wdm << "EOF" +#%PAM-1.0 + +# Block login if they are globally disabled +auth required pam_nologin.so + +# Load environment from /etc/environment and ~/.pam_environment +auth required pam_env.so + +# Use /etc/passwd and /etc/shadow for passwords +auth required pam_unix.so + +# Check account is active, change password if required +account required pam_unix.so + +# Allow password to be changed +password required pam_unix.so + +# Setup session +session required pam_unix.so +session optional pam_systemd.so +EOF +``` + +Finally, install `.xsession` for _root_ and make it executable: + +``` +cat > /root/.xsession << "EOF" +#!/usr/bin/env /bin/bash +exec /usr/bin/twm +EOF +``` + +``` +chmod 755 /root/.xsession +``` + +## Boot Script + +**NOTE**: All the actions in this section must be executed as _root_. + +To start WDM automatically when the system is switched to runlevel 5, you'll need to install the `/etc/rc.d/init.d/xdm` script and the `/etc/sysconfig/xdm` configuration file included in the _blfs-bootscripts-20250225_ package: + +``` +make install-xdm +``` + +Adjust the `/etc/sysconfig/xdm` to use WDM: + +``` +cat > /etc/sysconfig/xdm << "EOF" +# Which display manager to use (full path): +# DISPLAY_MANAGER=/usr/sbin/gdm +# DISPLAY_MANAGER=/usr/sbin/lxdm +DISPLAY_MANAGER=/usr/bin/wdm +# DISPLAY_MANAGER=/usr/bin/sddm + +# Options to pass to the display manager: +DM_OPTIONS="" +EOF +``` + +## Starting WDM + +WDM can be started from the command line as the root user: + +``` +telinit 5 +``` + +## Starting WDM on boot + +To start WDM on boot, adjust `/etc/inittab` to set _5_ as the default runlevel: + +``` +id:5:initdefault: +``` + +## Debugging WDM + +WDM is a pretty old piece of software, largely outdated in the context of a modern system like LFS. As such, there can be potential issues. + +By default, WDM logs to `/var/log/xdm-errors.log` and that's the first place to look for issues. + +In any case, if you need to validate your display manager setup, you can adjust `/etc/sysconfig/xdm` to switch to xdm and validate your overall environment is sane. + +For the (default) _NoChange_ WM choice, each user will need an `.xsesion` file in their home directory, to start the selected window manageger or desktop environment. diff --git a/packages/wdm-1.28/patches/.gitignore b/packages/wdm-1.28/patches/.gitignore new file mode 100644 index 0000000..4ed32bc --- /dev/null +++ b/packages/wdm-1.28/patches/.gitignore @@ -0,0 +1,11 @@ +01_kfreebsd.patch +02_fix_login_overflow.patch +03_autoconf.patch +04_manpage_indent.patch +05_french_translation_name.patch +06_login_composite.patch +07_ld_no_add_needed.patch +08_do_not_use_dev_mem.patch +09_pam_session.patch +10_spelling_fixes.patch +11_usr_bin_X11_removal.patch diff --git a/packages/wdm-1.28/patches/12_make_it_compile_on_lfs.patch b/packages/wdm-1.28/patches/12_make_it_compile_on_lfs.patch new file mode 100644 index 0000000..ec24116 --- /dev/null +++ b/packages/wdm-1.28/patches/12_make_it_compile_on_lfs.patch @@ -0,0 +1,20 @@ +--- Makefile.in.orig 2026-09-24 08:23:36.968895608 +0000 ++++ Makefile.in 2026-09-24 08:26:03.833751849 +0000 +@@ -3,7 +3,7 @@ + # WARNING: Makefile.in is generated by etc/makefile.cook + # Do not send patches for this file. + +-CFLAGS = @CFLAGS@ ++CFLAGS = @CFLAGS@ -std=gnu99 + CPPFLAGS = @CPPFLAGS@ + LDFLAGS = @LDFLAGS@ + DEFS = @DEFS@ +@@ -75,7 +75,7 @@ + + install: install-bin install-config install-doc install-gfx install-nls-$(I18N) + +-all-bin: bin/TestLogin bin/wdm bin/wdmChooser bin/wdmLogin bin/wdmPrefs ++all-bin: bin/wdm bin/wdmChooser bin/wdmLogin bin/wdmPrefs + + install-bin: $(DESTDIR)$(bindir)/wdm $(DESTDIR)$(bindir)/wdmLogin + diff --git a/packages/wdm-1.28/ziomekos/motd b/packages/wdm-1.28/ziomekos/motd new file mode 100644 index 0000000..b6053da --- /dev/null +++ b/packages/wdm-1.28/ziomekos/motd @@ -0,0 +1,2 @@ +ZiomekOS 26.9.26 (First Bark) based on LFS 12.4 +Created by Tomek Wójcik | For teh lulz diff --git a/packages/wdm-1.28/ziomekos/wdm-config b/packages/wdm-1.28/ziomekos/wdm-config new file mode 100644 index 0000000..a15373d --- /dev/null +++ b/packages/wdm-1.28/ziomekos/wdm-config @@ -0,0 +1,75 @@ +! $XConsortium: xdm-conf.cpp /main/3 1996/01/15 15:17:26 gildea $ +! +! wdm configuration file input (sed in Makefile) +! +! Adjusted for ZiomekOS 26.9.26 by Tomek Wójcik +DisplayManager.errorLogFile: /var/log/xdm-errors.log +DisplayManager.pidFile: /var/run/xdm-pid +DisplayManager.keyFile: /etc/X11/wdm/xdm-keys +DisplayManager.servers: /etc/X11/wdm/Xservers +DisplayManager.accessFile: /etc/X11/wdm/Xaccess +! All displays should use authorization, but we cannot be sure +! X terminals will be configured that way, so by default +! use authorization only for local displays :0, :1, etc. +DisplayManager._0.authorize: true +DisplayManager._1.authorize: true +! The following three resources set up display :0 as the console. +DisplayManager._0.setup: /etc/X11/wdm/Xsetup_0 +DisplayManager._0.startup: /etc/X11/wdm/GiveConsole +DisplayManager._0.reset: /etc/X11/wdm/TakeConsole +! +DisplayManager*resources: /etc/X11/wdm/Xresources +DisplayManager*session: /etc/X11/wdm/Xsession +DisplayManager*authComplain: false +DisplayManager*wdmLogin: /usr/bin/wdmLogin +! +! display screen background--if not set or set to none, then the +! background is not set by wdm. +! DisplayManager*wdmBg: none +! DisplayManager*wdmBg: solid:RoyalBlue +DisplayManager*wdmBg: solid:#505075 +! DisplayManager*wdmBg: dgradient:RoyalBlue,FireBrick,Black +! DisplayManager*wdmBg: hgradient:RoyalBlue,FireBrick,Black +! DisplayManager*wdmBg: vgradient:RoyalBlue,FireBrick,Black +! DisplayManager*wdmBg: pixmap:/usr/share/pixmaps/Stars.jpg +! +! optional pixmap for logo +DisplayManager*wdmLogo: /usr/share/pixmaps/ziomekos.xpm +! +! optional help file to display in the help panel +! long lines may cause an ugly display +DisplayManager*wdmHelpFile: /etc/X11/wdm/motd +! +! optional default username and password (in clear text) +! which wdm should use if nothing is typed by the user. +! it's strongly suggested that wdm-config should be +! chmod 600 and owned by root if you want to use this +! feature, or else you could open a huge security hole +! in your system, letting anyone to log in as this default +! user. In any case if you want to use this feature do +! it with a very restricted account, and especially NOT +! WITH THE root ACCOUNT !!! +!DisplayManager*wdmDefaultUser: nobody +!DisplayManager*wdmDefaultPasswd: dumb_clear_text_passwd +! +! list of window managers which can be started +! or 'None' if you want only NoChange to appear +! e.g.: DisplayManager*wdmWm: None +DisplayManager*wdmWm: WindowMaker +! +! commands for reboot and halt +! -- be sure to edit these if the +! system is not linux. +DisplayManager*wdmReboot: /usr/sbin/shutdown -r now +DisplayManager*wdmHalt: /usr/sbin/shutdown -h now +! alternates (for Linux) +! DisplayManager*wdmReboot: /usr/sbin/shutdown -t3 -r now +! DisplayManager*wdmHalt: /usr/sbin/shutdown -t3 -h now +! +! true/false to require valid username/passwd to reboot,halt, or exit +DisplayManager*wdmVerify: true +! true/false to require root as valid username/passwd to reboot,halt, or exit +DisplayManager*wdmRoot: false +! true=enable, false=disable shake and rollup animations +DisplayManager*wdmAnimations: true + diff --git a/resources/linux-6.16.1/drivers/video/logo/logo_linux_clut224.ppm b/resources/linux-6.16.1/drivers/video/logo/logo_linux_clut224.ppm new file mode 100644 index 0000000..c47de91 --- /dev/null +++ b/resources/linux-6.16.1/drivers/video/logo/logo_linux_clut224.ppm @@ -0,0 +1,883 @@ +P3 +80 80 +255 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +56 56 55 104 104 102 88 88 86 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 56 56 55 40 40 39 40 40 39 +32 32 31 48 48 47 48 47 46 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 82 81 78 72 72 71 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 137 136 134 +88 88 86 5 6 5 5 6 5 121 120 118 72 72 71 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 88 88 86 56 56 55 56 56 55 56 56 55 193 190 182 +205 203 194 80 79 77 56 56 55 72 72 71 82 81 78 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 82 81 78 121 120 118 5 6 5 5 6 5 112 111 108 +104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 132 131 126 82 81 78 +5 6 5 5 6 5 5 6 5 16 15 15 24 24 23 154 152 148 121 120 118 154 152 148 +137 136 134 154 152 148 121 120 118 5 6 5 5 6 5 121 120 118 166 164 157 185 183 175 +200 197 187 183 181 174 121 120 118 5 6 5 5 6 5 137 136 134 154 152 148 137 136 134 +154 152 148 132 131 126 149 147 140 24 24 23 16 15 15 5 6 5 5 6 5 5 6 5 +40 40 39 172 170 164 16 15 15 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 121 120 118 104 104 102 5 6 5 +5 6 5 5 6 5 5 6 5 24 24 23 32 32 31 40 40 39 16 16 15 16 15 15 +5 6 5 5 6 5 40 40 39 104 104 102 56 56 55 16 15 15 137 136 134 183 181 174 +185 183 175 166 164 157 40 40 39 72 72 71 104 104 102 40 40 39 5 6 5 5 6 5 +5 6 5 16 16 15 24 24 23 40 40 39 24 24 23 5 6 5 5 6 5 5 6 5 +5 6 5 128 127 124 114 114 110 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 80 79 77 137 136 134 40 40 39 5 6 5 +5 6 5 5 6 5 63 64 63 16 15 15 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 112 111 108 200 199 195 121 120 118 188 187 183 +194 193 189 154 152 148 172 170 164 82 81 78 5 6 5 5 6 5 16 15 15 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 80 79 77 5 6 5 5 6 5 +5 6 5 24 24 23 137 136 134 112 111 108 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 166 164 157 194 193 189 194 193 189 188 187 183 48 48 47 5 6 5 +5 6 5 72 72 71 40 40 39 40 40 39 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 16 15 15 72 72 71 194 193 189 40 40 39 229 227 218 225 221 211 160 158 152 +183 181 174 160 158 152 210 208 200 82 81 78 166 164 157 80 79 77 24 24 23 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 56 56 55 56 56 55 5 6 5 +5 6 5 24 24 23 169 167 161 185 183 176 188 187 183 149 147 140 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +72 72 71 166 164 157 72 72 71 16 16 15 88 88 86 104 104 102 16 15 15 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 24 24 23 24 24 23 16 15 15 121 120 118 154 152 148 166 164 157 177 175 169 +166 164 157 185 183 175 145 143 139 137 136 134 24 24 23 40 40 39 24 24 23 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 40 40 39 121 120 118 16 15 15 56 56 55 154 152 148 56 56 55 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 121 120 118 +82 81 78 32 32 31 16 15 15 40 40 39 65 64 63 32 32 31 5 6 5 5 6 5 +16 15 15 16 15 15 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 40 40 39 +16 16 15 5 6 5 16 15 15 24 24 23 56 56 55 149 147 140 132 131 126 169 167 161 +166 164 157 166 164 157 154 152 148 88 88 86 24 24 23 16 15 15 5 6 5 16 15 15 +80 79 80 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 16 15 15 +5 6 5 5 6 5 40 40 39 104 104 102 24 24 23 5 6 5 16 15 15 96 95 92 +114 114 110 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 114 114 110 169 167 161 +24 24 23 5 6 5 5 6 5 24 24 23 40 40 39 24 24 23 5 6 5 16 15 15 +5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 82 81 78 56 56 55 16 15 15 +16 16 15 24 24 23 5 6 5 5 6 5 16 15 15 121 120 118 154 152 148 154 152 148 +188 187 183 149 147 140 121 120 118 16 15 15 5 6 5 5 6 5 16 15 15 24 24 23 +16 15 15 40 40 39 72 72 71 72 72 71 16 15 15 5 6 5 5 6 5 5 6 5 +16 15 15 5 6 5 16 15 15 56 56 55 24 24 23 5 6 5 5 6 5 24 24 23 +149 147 140 149 147 140 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 40 40 39 24 24 23 24 24 23 +5 6 5 5 6 5 24 24 23 72 72 71 82 81 78 40 40 39 5 6 5 16 15 15 +5 6 5 5 6 5 5 6 5 16 15 15 16 15 15 40 40 39 82 81 78 72 72 71 +72 72 71 72 72 71 5 6 5 5 6 5 5 6 5 40 40 39 137 136 134 172 170 164 +183 181 174 149 147 140 48 47 46 5 6 5 5 6 5 24 24 23 72 72 71 56 56 55 +56 56 55 56 56 55 24 24 23 5 6 5 16 15 15 5 6 5 5 6 5 5 6 5 +16 15 15 5 6 5 24 24 23 104 104 102 72 72 71 40 40 39 5 6 5 5 6 5 +16 15 15 24 24 23 24 24 23 40 40 39 16 15 15 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 16 15 15 121 120 118 56 56 55 88 88 86 40 40 39 48 48 47 +5 6 5 63 64 63 104 104 102 82 81 78 121 120 118 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 32 32 31 56 56 55 72 72 71 40 40 39 16 15 15 56 56 55 +24 24 23 121 120 118 32 32 31 5 6 5 24 24 23 149 147 140 149 147 140 172 170 164 +172 170 164 154 152 148 121 120 118 24 24 23 5 6 5 48 48 47 104 104 102 24 24 23 +56 56 55 16 15 15 24 24 23 104 104 102 72 72 71 40 40 39 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 104 104 102 82 81 78 104 104 102 72 72 71 5 6 5 +40 40 39 56 56 55 104 104 102 82 81 78 114 114 110 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 121 120 118 160 158 152 104 104 102 121 120 118 40 40 39 16 15 15 +40 40 39 149 147 140 121 120 118 121 120 118 56 56 55 5 6 5 5 6 5 5 6 5 +5 6 5 82 81 78 104 104 102 169 167 161 121 120 118 121 120 118 5 6 5 24 24 23 +16 15 15 24 24 23 16 15 15 5 6 5 5 6 5 40 40 39 149 147 140 176 173 165 +183 181 174 154 152 148 72 72 71 5 6 5 5 6 5 40 40 39 40 40 39 40 40 39 +40 40 39 5 6 5 88 88 86 121 120 118 149 147 140 137 136 134 82 81 78 5 6 5 +5 6 5 5 6 5 5 6 5 40 40 39 121 120 118 137 136 134 121 120 118 40 40 39 +16 15 15 56 56 55 104 104 102 121 120 118 166 164 157 88 88 86 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 56 56 55 104 104 102 16 15 15 56 56 55 72 72 71 40 40 39 40 40 39 +72 72 71 104 104 102 88 88 86 82 81 78 40 40 39 5 6 5 5 6 5 5 6 5 +40 40 39 104 104 102 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 16 15 15 5 6 5 72 72 71 104 104 102 149 147 140 194 193 189 +194 193 189 176 173 165 88 88 86 64 63 61 5 6 5 24 24 23 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 82 81 78 40 40 39 +5 6 5 5 6 5 5 6 5 16 15 15 104 104 102 88 88 86 104 104 102 72 72 71 +56 56 55 40 40 39 72 72 71 56 56 55 24 24 23 98 98 94 72 72 71 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +24 24 23 72 72 71 24 24 23 5 6 5 5 6 5 24 24 23 40 40 39 104 104 102 +72 72 71 104 104 102 104 104 102 72 72 71 16 15 15 5 6 5 5 6 5 40 40 39 +72 72 71 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 63 64 63 5 6 5 98 98 94 166 164 157 145 143 139 188 187 183 +200 197 187 154 152 148 154 152 148 72 72 71 5 6 5 56 56 55 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 82 81 78 +40 40 39 5 6 5 5 6 5 5 6 5 72 72 71 98 98 94 104 104 102 82 81 78 +88 88 86 56 56 55 40 40 39 5 6 5 5 6 5 24 24 23 88 88 86 24 24 23 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +154 152 148 56 56 55 24 24 23 5 6 5 5 6 5 24 24 23 56 56 55 104 104 102 +72 72 71 104 104 102 104 104 102 56 56 55 5 6 5 5 6 5 5 6 5 104 104 102 +56 56 55 24 24 23 5 6 5 5 6 5 88 88 86 24 24 23 5 6 5 5 6 5 +5 6 5 24 24 23 145 143 139 16 15 15 121 120 118 194 193 189 149 147 140 200 197 187 +209 206 197 188 187 183 176 173 165 112 111 108 24 24 23 149 147 140 24 24 23 5 6 5 +5 6 5 5 6 5 16 15 15 88 88 86 5 6 5 5 6 5 16 15 15 56 56 55 +82 81 78 5 6 5 5 6 5 5 6 5 72 72 71 104 104 102 104 104 102 82 81 78 +98 98 94 72 72 71 40 40 39 5 6 5 5 6 5 16 15 15 63 64 63 114 114 110 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +149 147 140 56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 48 48 47 104 104 102 +63 64 63 88 88 86 82 81 78 56 56 55 5 6 5 5 6 5 56 56 55 48 48 47 +16 15 15 5 6 5 5 6 5 5 6 5 72 72 71 169 167 161 5 6 5 5 6 5 +5 6 5 16 15 15 169 167 161 104 104 102 137 136 134 96 95 92 154 152 148 205 203 194 +200 197 187 188 187 183 104 104 102 145 143 139 114 114 110 145 143 139 16 16 15 5 6 5 +5 6 5 5 6 5 174 173 168 72 72 71 5 6 5 5 6 5 5 6 5 16 15 15 +40 40 39 56 56 55 5 6 5 5 6 5 72 72 71 72 72 71 88 88 86 72 72 71 +82 81 78 80 79 80 24 24 23 5 6 5 5 6 5 5 6 5 56 56 55 104 104 102 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +40 40 39 72 72 71 5 6 5 5 6 5 5 6 5 88 88 86 72 72 71 104 104 102 +72 72 71 88 88 86 104 104 102 24 24 23 5 6 5 56 56 55 40 40 39 40 40 39 +5 6 5 16 15 15 88 88 86 5 6 5 16 15 15 40 40 39 16 15 15 5 6 5 +5 6 5 72 72 71 98 98 94 221 219 210 128 127 124 160 158 152 160 158 152 205 203 194 +205 203 194 166 164 157 137 136 134 154 152 148 188 187 183 88 88 86 88 88 86 5 6 5 +5 6 5 40 40 39 40 40 39 5 6 5 5 6 5 104 104 102 24 24 23 5 6 5 +24 24 23 56 56 55 40 40 39 5 6 5 24 24 23 88 88 86 104 104 102 82 81 78 +88 88 86 82 81 78 88 88 86 5 6 5 5 6 5 5 6 5 72 72 71 40 40 39 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 88 88 86 5 6 5 5 6 5 5 6 5 104 104 102 82 81 78 137 136 134 +104 104 102 137 136 134 104 104 102 5 6 5 5 6 5 16 15 15 32 32 31 5 6 5 +5 6 5 72 72 71 154 152 148 5 6 5 5 6 5 5 6 5 56 56 55 5 6 5 +5 6 5 24 24 23 56 56 55 137 136 134 176 173 165 205 203 194 154 152 148 194 193 189 +205 203 194 149 147 140 194 193 189 188 187 183 137 136 134 80 79 77 40 40 39 5 6 5 +5 6 5 98 98 94 5 6 5 5 6 5 5 6 5 154 152 148 72 72 71 5 6 5 +5 6 5 56 56 55 16 15 15 5 6 5 5 6 5 104 104 102 121 120 118 104 104 102 +104 104 102 104 104 102 98 98 94 5 6 5 5 6 5 5 6 5 88 88 86 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 82 81 78 88 88 86 5 6 5 16 15 15 114 114 110 88 88 86 121 120 118 +88 88 86 121 120 118 72 72 71 5 6 5 5 6 5 63 64 63 16 15 15 5 6 5 +5 6 5 16 16 15 104 104 102 114 114 110 56 56 55 88 88 86 16 15 15 5 6 5 +56 56 55 121 120 118 104 104 102 183 181 174 154 152 148 210 208 200 183 181 174 200 197 187 +209 206 197 193 190 182 200 197 187 172 170 164 188 187 183 98 98 94 104 104 102 40 40 39 +5 6 5 24 24 23 88 88 86 72 72 71 88 88 86 104 104 102 24 24 23 5 6 5 +5 6 5 16 15 15 56 56 55 5 6 5 5 6 5 72 72 71 121 120 118 104 104 102 +104 104 102 104 104 102 88 88 86 24 24 23 5 6 5 72 72 71 82 81 78 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 137 136 134 24 24 23 5 6 5 24 24 23 40 40 39 82 81 78 +56 56 55 82 81 78 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 40 40 39 40 40 39 24 24 23 5 6 5 16 15 15 +16 15 15 16 15 15 72 72 71 82 81 78 72 72 71 154 152 148 193 190 182 177 175 169 +200 197 187 188 187 183 149 147 140 82 81 78 82 81 78 72 72 71 24 24 23 24 24 23 +16 15 15 5 6 5 24 24 23 40 40 39 40 40 39 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 82 81 78 72 72 71 +72 72 71 72 72 71 40 40 39 5 6 5 24 24 23 104 104 102 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 40 40 39 132 131 126 5 6 5 24 24 23 56 56 55 145 143 139 +104 104 102 104 104 102 5 6 5 40 40 39 24 24 23 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 56 56 55 16 15 15 56 56 55 +56 56 55 166 164 157 121 120 118 183 181 174 154 152 148 172 170 164 172 170 164 185 183 175 +185 183 175 172 170 164 166 164 157 166 164 157 166 164 157 121 120 118 149 147 140 56 56 55 +40 40 39 24 24 23 56 56 55 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 16 15 15 24 24 23 5 6 5 82 81 78 88 88 86 +98 98 94 56 56 55 24 24 23 5 6 5 121 120 118 32 32 31 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 82 81 78 40 40 39 5 6 5 56 56 55 104 104 102 +72 72 71 24 24 23 5 6 5 56 56 55 56 56 55 5 6 5 5 6 5 5 6 5 +24 24 23 5 6 5 5 6 5 16 16 15 24 24 23 16 15 15 5 6 5 72 72 71 +114 114 110 132 131 126 149 147 140 200 197 187 177 175 169 210 208 200 176 173 165 183 181 174 +183 181 174 188 187 183 194 193 189 183 181 174 200 197 187 154 152 148 132 131 126 112 111 108 +72 72 71 5 6 5 5 6 5 24 24 23 24 24 23 5 6 5 5 6 5 24 24 23 +5 6 5 5 6 5 5 6 5 24 24 23 40 40 39 5 6 5 5 6 5 82 81 78 +88 88 86 72 72 71 16 15 15 72 72 71 137 136 134 16 15 15 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 16 15 15 104 104 102 16 15 15 56 56 55 104 104 102 +56 56 55 5 6 5 5 6 5 88 88 86 154 152 148 16 15 15 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 24 24 23 5 6 5 5 6 5 121 120 118 149 147 140 +145 143 139 188 187 183 172 170 164 194 193 189 154 152 148 188 187 183 149 147 140 169 167 161 +154 152 148 172 170 164 172 170 164 172 170 164 188 187 183 172 170 164 172 170 164 121 120 118 +137 136 134 121 120 118 5 6 5 5 6 5 24 24 23 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 16 15 15 183 181 174 16 15 15 5 6 5 5 6 5 72 72 71 +82 81 78 82 81 78 24 24 23 128 127 124 40 40 39 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 40 40 39 56 56 55 104 104 102 +16 15 15 5 6 5 5 6 5 5 6 5 104 104 102 24 24 23 5 6 5 40 40 39 +40 40 39 24 24 23 5 6 5 5 6 5 16 16 15 56 56 55 104 104 102 166 164 157 +172 170 164 205 203 194 166 164 157 193 191 184 137 136 134 154 152 148 56 56 55 132 131 126 +104 104 102 104 104 102 137 136 134 154 152 148 188 187 183 183 181 174 209 206 197 166 164 157 +183 181 174 104 104 102 72 72 71 16 15 15 5 6 5 5 6 5 24 24 23 56 56 55 +40 40 39 5 6 5 24 24 23 88 88 86 5 6 5 5 6 5 5 6 5 16 15 15 +72 72 71 63 64 63 56 56 55 56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 112 111 108 82 81 78 24 24 23 +5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 137 136 134 24 24 23 40 40 39 +5 6 5 5 6 5 5 6 5 82 81 78 176 173 165 183 181 174 183 181 174 200 197 187 +177 175 169 194 193 189 166 164 157 169 167 161 16 15 15 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 16 15 15 132 131 126 176 173 165 194 193 189 166 164 157 +194 193 189 177 175 169 185 183 175 183 181 174 88 88 86 5 6 5 5 6 5 16 15 15 +40 40 39 16 15 15 154 152 148 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 104 104 102 104 104 102 88 88 86 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 104 104 102 82 81 78 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 154 152 148 121 120 118 56 56 55 +40 40 39 5 6 5 5 6 5 5 6 5 24 24 23 169 167 161 205 203 194 221 219 210 +200 199 195 194 193 189 40 40 39 5 6 5 16 15 15 137 136 134 82 81 78 121 120 118 +82 81 78 104 104 102 88 88 86 16 15 15 5 6 5 64 63 61 194 193 189 194 193 189 +210 208 200 205 203 194 154 152 148 24 24 23 5 6 5 5 6 5 5 6 5 56 56 55 +48 48 47 169 167 161 169 167 161 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 82 81 78 104 104 102 96 95 92 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 112 111 108 96 95 92 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 137 136 134 56 56 55 40 40 39 +5 6 5 5 6 5 16 15 15 121 120 118 216 213 203 229 227 218 229 227 218 225 221 211 +188 187 183 56 56 55 5 6 5 48 48 47 56 56 55 88 88 86 56 56 55 104 104 102 +63 64 63 72 72 71 82 81 78 88 88 86 40 40 39 5 6 5 56 56 55 205 203 194 +216 213 203 229 227 218 229 227 218 209 206 197 137 136 134 24 24 23 5 6 5 5 6 5 +24 24 23 72 72 71 166 164 157 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 72 72 71 88 88 86 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 5 6 5 +5 6 5 72 72 71 188 187 183 210 208 200 229 227 218 236 232 222 210 208 200 210 208 200 +40 40 39 16 15 15 72 72 71 104 104 102 82 81 78 137 136 134 98 98 94 121 120 118 +88 88 86 104 104 102 104 104 102 88 88 86 104 104 102 56 56 55 5 6 5 63 64 63 +193 191 184 210 208 200 229 227 218 225 221 211 205 203 194 193 191 184 82 81 78 5 6 5 +5 6 5 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 5 6 5 +5 6 5 5 6 5 16 15 15 104 104 102 221 219 210 229 227 218 221 219 210 172 170 164 +5 6 5 24 24 23 104 104 102 121 120 118 88 88 86 132 131 126 104 104 102 121 120 118 +104 104 102 104 104 102 121 120 118 104 104 102 121 120 118 104 104 102 40 40 39 5 6 5 +137 136 134 216 213 203 236 232 222 229 227 218 104 104 102 16 15 15 5 6 5 5 6 5 +5 6 5 82 81 78 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 5 6 5 +16 16 15 185 183 175 225 221 211 236 232 222 240 237 227 240 237 227 240 237 227 166 164 157 +5 6 5 169 167 161 82 81 78 5 6 5 5 6 5 72 72 71 121 120 118 121 120 118 +72 72 71 137 136 134 72 72 71 5 6 5 5 6 5 104 104 102 154 152 148 5 6 5 +154 152 148 236 232 222 240 237 227 236 232 222 240 237 227 221 219 210 154 152 148 5 6 5 +5 6 5 145 143 139 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 160 158 152 5 6 5 +5 6 5 16 15 15 104 104 102 240 237 227 231 229 218 221 219 210 221 219 210 183 181 174 +16 15 15 145 143 139 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 24 24 23 +5 6 5 56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 121 120 118 5 6 5 +154 152 148 210 208 200 221 219 210 231 229 218 221 219 210 72 72 71 16 15 15 5 6 5 +5 6 5 194 193 189 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 +98 98 94 225 221 211 229 227 218 221 219 210 216 213 203 221 219 210 154 152 148 104 104 102 +5 6 5 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 16 15 15 +5 6 5 40 40 39 5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 5 6 5 +82 81 78 149 147 140 210 208 200 221 219 210 194 193 189 229 227 218 221 219 210 72 72 71 +56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 98 98 94 +56 56 55 56 56 55 166 164 157 188 187 183 188 187 183 183 181 174 137 136 134 149 147 140 +24 24 23 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 16 15 15 +5 6 5 72 72 71 16 15 15 5 6 5 5 6 5 5 6 5 16 15 15 40 40 39 +145 143 139 145 143 139 166 164 157 185 183 175 188 187 183 166 164 157 56 56 55 40 40 39 +132 131 126 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +24 24 23 193 191 184 176 173 165 205 203 194 183 181 174 160 158 152 149 147 140 128 127 124 +24 24 23 63 64 63 24 24 23 24 24 23 16 15 15 72 72 71 72 72 71 16 15 15 +5 6 5 82 81 78 56 56 55 16 16 15 24 24 23 56 56 55 56 56 55 40 40 39 +121 120 118 166 164 157 172 170 164 174 173 168 177 175 169 183 181 174 176 173 165 24 24 23 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 72 72 71 +72 72 71 88 88 86 132 131 126 210 208 200 205 203 194 210 208 200 160 158 152 183 181 174 +72 72 71 5 6 5 40 40 39 72 72 71 56 56 55 88 88 86 24 24 23 16 15 15 +5 6 5 56 56 55 72 72 71 56 56 55 56 56 55 32 32 31 5 6 5 88 88 86 +172 170 164 154 152 148 200 197 187 209 206 197 221 219 210 132 131 126 56 56 55 98 98 94 +56 56 55 40 40 39 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 82 81 78 56 56 55 +24 24 23 137 136 134 188 187 183 193 190 182 166 164 157 114 114 110 183 181 174 210 208 200 +104 104 102 16 15 15 5 6 5 24 24 23 24 24 23 40 40 39 16 16 15 5 6 5 +5 6 5 24 24 23 40 40 39 40 40 39 24 24 23 5 6 5 16 15 15 137 136 134 +194 193 189 177 175 169 104 104 102 183 181 174 188 187 183 194 193 189 114 114 110 16 15 15 +56 56 55 104 104 102 40 40 39 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 24 24 23 5 6 5 +137 136 134 172 170 164 145 143 139 200 197 187 132 131 126 194 193 189 154 152 148 104 104 102 +88 88 86 121 120 118 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 121 120 118 98 98 94 +104 104 102 166 164 157 185 183 176 137 136 134 177 175 169 166 164 157 154 152 148 145 143 139 +5 6 5 32 32 31 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 +82 81 78 72 72 71 154 152 148 193 190 182 154 152 148 149 147 140 72 72 71 160 158 152 +98 98 94 72 72 71 56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 72 72 71 104 104 102 +137 136 134 72 72 71 137 136 134 176 173 165 183 181 174 176 173 165 72 72 71 82 81 78 +104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 72 72 71 +16 15 15 166 164 157 185 183 175 194 193 189 166 164 157 114 114 110 149 147 140 169 167 161 +82 81 78 80 79 77 72 72 71 104 104 102 32 32 31 5 6 5 24 24 23 82 81 78 +56 56 55 72 72 71 5 6 5 40 40 39 82 81 78 72 72 71 63 64 63 104 104 102 +149 147 140 132 131 126 88 88 86 177 175 169 194 193 189 185 183 175 149 147 140 5 6 5 +72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 +24 24 23 174 173 168 160 158 152 205 203 194 121 120 118 166 164 157 166 164 157 172 170 164 +72 72 71 137 136 134 40 40 39 40 40 39 24 24 23 40 40 39 40 40 39 40 40 39 +24 24 23 56 56 55 56 56 55 56 56 55 40 40 39 72 72 71 121 120 118 72 72 71 +172 170 164 154 152 148 172 170 164 132 131 126 200 197 187 172 170 164 154 152 148 16 15 15 +16 15 15 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 72 72 71 +24 24 23 104 104 102 177 175 169 194 193 189 200 197 187 194 193 189 194 193 189 166 164 157 +149 147 140 114 114 110 82 81 78 104 104 102 40 40 39 145 143 139 56 56 55 16 15 15 +5 6 5 72 72 71 121 120 118 56 56 55 82 81 78 82 81 78 104 104 102 137 136 134 +169 167 161 185 183 176 194 193 189 194 193 189 188 187 183 185 183 175 88 88 86 24 24 23 +80 79 77 82 81 78 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 82 81 78 40 40 39 +5 6 5 128 127 124 154 152 148 104 104 102 166 164 157 114 114 110 166 164 157 82 81 78 +104 104 102 104 104 102 40 40 39 82 81 78 72 72 71 24 24 23 5 6 5 5 6 5 +5 6 5 5 6 5 24 24 23 88 88 86 82 81 78 72 72 71 82 81 78 98 98 94 +82 81 78 166 164 157 104 104 102 183 181 174 104 104 102 183 181 174 104 104 102 5 6 5 +16 16 15 114 114 110 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 121 120 118 16 15 15 +5 6 5 104 104 102 40 40 39 154 152 148 121 120 118 160 158 152 104 104 102 166 164 157 +88 88 86 121 120 118 82 81 78 72 72 71 16 15 15 16 15 15 5 6 5 40 40 39 +24 24 23 5 6 5 16 15 15 24 24 23 56 56 55 82 81 78 104 104 102 98 98 94 +166 164 157 104 104 102 166 164 157 121 120 118 154 152 148 40 40 39 88 88 86 5 6 5 +16 15 15 149 147 140 112 111 108 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 80 79 77 56 56 55 40 40 39 +5 6 5 5 6 5 24 24 23 166 164 157 128 127 124 188 187 183 154 152 148 188 187 183 +154 152 148 149 147 140 114 114 110 121 120 118 63 64 63 88 88 86 56 56 55 149 147 140 +104 104 102 88 88 86 72 72 71 104 104 102 88 88 86 121 120 118 154 152 148 154 152 148 +183 181 174 169 167 161 185 183 176 121 120 118 149 147 140 16 15 15 5 6 5 5 6 5 +24 24 23 56 56 55 65 64 63 40 40 39 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 32 32 31 121 120 118 121 120 118 5 6 5 +5 6 5 5 6 5 16 16 15 104 104 102 72 72 71 194 193 189 188 187 183 193 190 182 +172 170 164 183 181 174 145 143 139 183 181 174 121 120 118 166 164 157 137 136 134 154 152 148 +149 147 140 154 152 148 154 152 148 145 143 139 166 164 157 149 147 140 172 170 164 176 173 165 +194 193 189 188 187 183 185 183 175 56 56 55 82 81 78 5 6 5 5 6 5 5 6 5 +5 6 5 137 136 134 104 104 102 56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 56 56 55 121 120 118 40 40 39 5 6 5 +5 6 5 5 6 5 72 72 71 5 6 5 16 15 15 82 81 78 166 164 157 98 98 94 +154 152 148 193 190 182 154 152 148 188 187 183 132 131 126 183 181 174 137 136 134 183 181 174 +154 152 148 166 164 157 177 175 169 154 152 148 183 181 174 166 164 157 194 193 189 145 143 139 +96 95 92 166 164 157 88 88 86 16 15 15 5 6 5 72 72 71 5 6 5 5 6 5 +5 6 5 24 24 23 121 120 118 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 48 48 47 121 120 118 88 88 86 40 40 39 5 6 5 +5 6 5 5 6 5 72 72 71 5 6 5 5 6 5 40 40 39 88 88 86 40 40 39 +183 181 174 185 183 175 172 170 164 183 181 174 177 175 169 188 187 183 160 158 152 183 181 174 +166 164 157 172 170 164 172 170 164 194 193 189 210 208 200 166 164 157 172 170 164 166 164 157 +40 40 39 72 72 71 56 56 55 5 6 5 5 6 5 80 79 77 5 6 5 5 6 5 +5 6 5 40 40 39 72 72 71 154 152 148 24 24 23 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 132 131 126 48 48 47 121 120 118 +40 40 39 5 6 5 16 16 15 96 95 92 5 6 5 5 6 5 5 6 5 32 32 31 +149 147 140 32 32 31 193 191 184 221 219 210 98 98 94 194 193 189 205 203 194 177 175 169 +185 183 175 200 197 187 193 191 184 121 120 118 216 213 203 200 197 187 56 56 55 160 158 152 +56 56 55 5 6 5 5 6 5 5 6 5 80 79 77 5 6 5 5 6 5 32 32 31 +114 114 110 32 32 31 112 111 108 149 147 140 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 88 88 86 194 193 189 154 152 148 137 136 134 72 72 71 +5 6 5 5 6 5 5 6 5 40 40 39 40 40 39 24 24 23 5 6 5 5 6 5 +5 6 5 24 24 23 166 164 157 98 98 94 5 6 5 80 79 77 176 173 165 166 164 157 +205 203 194 176 173 165 88 88 86 5 6 5 88 88 86 188 187 183 56 56 55 5 6 5 +5 6 5 5 6 5 24 24 23 48 48 47 40 40 39 5 6 5 5 6 5 5 6 5 +56 56 55 166 164 157 149 147 140 176 173 165 82 81 78 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 72 72 71 104 104 102 96 95 92 88 88 86 24 24 23 5 6 5 +5 6 5 5 6 5 56 56 55 5 6 5 40 40 39 72 72 71 5 6 5 5 6 5 +5 6 5 5 6 5 16 15 15 5 6 5 5 6 5 98 98 94 80 79 77 166 164 157 +183 181 174 104 104 102 104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 16 15 15 56 56 55 24 24 23 5 6 5 80 79 77 5 6 5 5 6 5 +5 6 5 24 24 23 72 72 71 88 88 86 121 120 118 65 64 63 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 40 40 39 24 24 23 121 120 118 121 120 118 88 88 86 82 81 78 +5 6 5 65 64 63 24 24 23 24 24 23 24 24 23 5 6 5 98 98 94 121 120 118 +24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 +56 56 55 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 40 40 39 +104 104 102 88 88 86 5 6 5 24 24 23 40 40 39 24 24 23 72 72 71 5 6 5 +72 72 71 96 95 92 104 104 102 149 147 140 24 24 23 40 40 39 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 40 40 39 166 164 157 121 120 118 82 81 78 40 40 39 +24 24 23 166 164 157 56 56 55 149 147 140 104 104 102 5 6 5 5 6 5 5 6 5 +104 104 102 121 120 118 88 88 86 16 15 15 16 15 15 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 16 15 15 5 6 5 114 114 110 121 120 118 98 98 94 +5 6 5 5 6 5 5 6 5 121 120 118 121 120 118 72 72 71 137 136 134 24 24 23 +24 24 23 88 88 86 56 56 55 149 147 140 16 16 15 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 88 88 86 104 104 102 80 79 80 104 104 102 +72 72 71 104 104 102 80 79 80 104 104 102 16 15 15 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 154 152 148 88 88 86 154 152 148 98 98 94 169 167 161 +104 104 102 121 120 118 128 127 124 121 120 118 149 147 140 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 24 24 23 88 88 86 98 98 94 88 88 86 88 88 86 +72 72 71 104 104 102 88 88 86 112 111 108 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 188 187 183 149 147 140 121 120 118 104 104 102 121 120 118 +104 104 102 145 143 139 32 32 31 5 6 5 5 6 5 56 56 55 72 72 71 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 16 15 15 5 6 5 5 6 5 +5 6 5 72 72 71 56 56 55 5 6 5 5 6 5 40 40 39 121 120 118 137 136 134 +88 88 86 121 120 118 98 98 94 149 147 140 193 191 184 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 82 81 78 154 152 148 177 175 169 154 152 148 137 136 134 169 167 161 +112 111 108 82 81 78 5 6 5 5 6 5 16 15 15 188 187 183 56 56 55 5 6 5 +5 6 5 5 6 5 154 152 148 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 137 136 134 5 6 5 5 6 5 +5 6 5 64 63 61 169 167 161 5 6 5 5 6 5 5 6 5 56 56 55 145 143 139 +137 136 134 169 167 161 145 143 139 200 199 195 72 72 71 48 47 46 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 63 64 63 177 175 169 154 152 148 137 136 134 121 120 118 149 147 140 +104 104 102 40 40 39 56 56 55 56 56 55 104 104 102 137 136 134 104 104 102 40 40 39 +5 6 5 5 6 5 149 147 140 194 193 189 5 6 5 24 24 23 5 6 5 5 6 5 +5 6 5 5 6 5 24 24 23 5 6 5 154 152 148 114 114 110 5 6 5 5 6 5 +5 6 5 137 136 134 121 120 118 121 120 118 88 88 86 5 6 5 32 32 31 145 143 139 +112 111 108 169 167 161 145 143 139 188 187 183 185 183 175 56 56 55 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 121 120 118 24 24 23 5 6 5 145 143 139 104 104 102 72 72 71 +5 6 5 5 6 5 24 24 23 121 120 118 88 88 86 137 136 134 63 64 63 5 6 5 +5 6 5 104 104 102 166 164 157 183 181 174 88 88 86 194 193 189 5 6 5 5 6 5 +5 6 5 5 6 5 132 131 126 121 120 118 154 152 148 166 164 157 104 104 102 5 6 5 +5 6 5 40 40 39 104 104 102 104 104 102 104 104 102 82 81 78 5 6 5 5 6 5 +40 40 39 145 143 139 149 147 140 5 6 5 16 15 15 137 136 134 16 15 15 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 121 120 118 137 136 134 104 104 102 104 104 102 +40 40 39 56 56 55 82 81 78 104 104 102 88 88 86 88 88 86 16 15 15 5 6 5 +16 15 15 166 164 157 149 147 140 183 181 174 145 143 139 166 164 157 5 6 5 5 6 5 +5 6 5 5 6 5 114 114 110 149 147 140 154 152 148 154 152 148 166 164 157 5 6 5 +5 6 5 24 24 23 88 88 86 80 79 80 88 88 86 104 104 102 56 56 55 32 31 31 +88 88 86 121 120 118 121 120 118 160 158 152 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 64 63 61 183 181 174 160 158 152 137 136 134 169 167 161 +121 120 118 121 120 118 104 104 102 104 104 102 72 72 71 40 40 39 5 6 5 98 98 94 +121 120 118 172 170 164 154 152 148 193 191 184 154 152 148 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 166 164 157 169 167 161 166 164 157 166 164 157 104 104 102 +82 81 78 5 6 5 24 24 23 82 81 78 88 88 86 132 131 126 121 120 118 121 120 118 +104 104 102 154 152 148 166 164 157 194 193 189 40 40 39 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 82 81 78 72 72 71 98 98 94 149 147 140 145 143 139 +104 104 102 145 143 139 88 88 86 104 104 102 24 24 23 5 6 5 104 104 102 56 56 55 +16 15 15 137 136 134 154 152 148 166 164 157 82 81 78 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 98 98 94 160 158 152 154 152 148 149 147 140 5 6 5 +56 56 55 104 104 102 5 6 5 16 15 15 88 88 86 112 111 108 104 104 102 137 136 134 +137 136 134 169 167 161 96 95 92 40 40 39 72 72 71 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 121 120 118 104 104 102 +121 120 118 104 104 102 72 72 71 82 81 78 56 56 55 16 15 15 5 6 5 5 6 5 +16 15 15 154 152 148 121 120 118 183 181 174 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 137 136 134 128 127 124 149 147 140 5 6 5 +5 6 5 5 6 5 5 6 5 72 72 71 72 72 71 88 88 86 82 81 78 145 143 139 +88 88 86 121 120 118 104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 82 81 78 5 6 5 +24 24 23 121 120 118 72 72 71 88 88 86 56 56 55 82 81 78 72 72 71 5 6 5 +40 40 39 137 136 134 104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 16 16 15 5 6 5 5 6 5 5 6 5 121 120 118 145 143 139 24 24 23 +5 6 5 72 72 71 72 72 71 56 56 55 80 79 80 82 81 78 104 104 102 16 15 15 +5 6 5 104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 82 81 78 +24 24 23 149 147 140 145 143 139 188 187 183 137 136 134 149 147 140 72 72 71 121 120 118 +145 143 139 188 187 183 24 24 23 5 6 5 5 6 5 5 6 5 56 56 55 16 15 15 +5 6 5 88 88 86 56 56 55 5 6 5 5 6 5 24 24 23 166 164 157 149 147 140 +132 131 126 72 72 71 137 136 134 149 147 140 169 167 161 169 167 161 137 136 134 24 24 23 +72 72 71 72 72 71 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 24 24 23 +40 40 39 121 120 118 24 24 23 63 64 63 88 88 86 104 104 102 72 72 71 104 104 102 +82 81 78 24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 64 63 61 24 24 23 +5 6 5 56 56 55 121 120 118 5 6 5 5 6 5 5 6 5 24 24 23 104 104 102 +104 104 102 88 88 86 104 104 102 88 88 86 72 72 71 24 24 23 112 111 108 16 15 15 +24 24 23 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 72 72 71 82 81 78 16 16 15 121 120 118 137 136 134 98 98 94 121 120 118 +72 72 71 56 56 55 40 40 39 5 6 5 24 24 23 154 152 148 104 104 102 56 56 55 +5 6 5 104 104 102 132 131 126 72 72 71 16 15 15 24 24 23 56 56 55 82 81 78 +121 120 118 104 104 102 121 120 118 104 104 102 24 24 23 88 88 86 72 72 71 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 56 56 55 5 6 5 40 40 39 149 147 140 104 104 102 145 143 139 +137 136 134 121 120 118 82 81 78 16 15 15 72 72 71 154 152 148 104 104 102 149 147 140 +80 79 80 121 120 118 121 120 118 121 120 118 32 32 31 82 81 78 121 120 118 145 143 139 +145 143 139 121 120 118 154 152 148 40 40 39 5 6 5 72 72 71 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 72 72 71 56 56 55 5 6 5 +16 16 15 132 131 126 104 104 102 137 136 134 88 88 86 137 136 134 88 88 86 149 147 140 +114 114 110 121 120 118 137 136 134 104 104 102 121 120 118 104 104 102 121 120 118 16 15 15 +5 6 5 72 72 71 82 81 78 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 88 88 86 5 6 5 +5 6 5 16 15 15 88 88 86 169 167 161 40 40 39 56 56 55 128 127 124 154 152 148 +121 120 118 145 143 139 63 64 63 40 40 39 145 143 139 82 81 78 24 24 23 5 6 5 +5 6 5 88 88 86 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 56 56 55 5 6 5 5 6 5 82 81 78 121 120 118 +104 104 102 82 81 78 16 15 15 5 6 5 40 40 39 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 104 104 102 +104 104 102 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 +5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 5 6 5 + diff --git a/resources/linux-6.16.1/drivers/video/logo/logo_linux_mono.pbm b/resources/linux-6.16.1/drivers/video/logo/logo_linux_mono.pbm new file mode 100644 index 0000000..c29f494 --- /dev/null +++ b/resources/linux-6.16.1/drivers/video/logo/logo_linux_mono.pbm @@ -0,0 +1,185 @@ +P1 +80 80 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 +1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 +0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 +0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 +0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 +1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 +0 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 +1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 +1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 +1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 +1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 +1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 +1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 +1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 +1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 +1 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 +0 0 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 +0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 +1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 +1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 +1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 +0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 +1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 +1 0 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 +1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 1 0 +1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 +0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 +0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 1 1 0 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 +0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 +0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 +1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 +0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 +1 1 1 1 0 1 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 +0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 0 1 +1 1 0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 +1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 +0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 +1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 1 +0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 +1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 0 1 1 1 0 1 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 +1 0 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 0 0 +0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 +0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 +0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 +0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 0 0 +0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 +1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 0 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 +1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 1 1 0 0 0 1 1 1 1 +1 1 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 +1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 +1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 +1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 1 1 1 +1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 +0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 0 +0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 1 1 1 1 0 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/resources/linux-6.16.1/drivers/video/logo/logo_linux_vga16.ppm b/resources/linux-6.16.1/drivers/video/logo/logo_linux_vga16.ppm new file mode 100644 index 0000000..5cf19b2 --- /dev/null +++ b/resources/linux-6.16.1/drivers/video/logo/logo_linux_vga16.ppm @@ -0,0 +1,678 @@ +P3 +80 80 +255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 0 0 0 170 170 170 170 170 170 85 85 85 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 170 170 170 85 85 85 +170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 +85 85 85 170 170 170 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 +85 85 85 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +170 170 170 0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 +85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 170 170 170 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 170 170 170 85 85 85 170 170 170 +170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 +85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 170 170 170 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 +170 170 170 85 85 85 170 170 170 170 170 170 85 85 85 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 170 170 170 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 170 170 170 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 0 0 0 0 0 0 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 170 170 170 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 +170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 85 85 85 +170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 +170 170 170 85 85 85 170 170 170 170 170 170 170 170 170 85 85 85 +0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 +170 170 170 85 85 85 170 170 170 170 170 170 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 +85 85 85 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 +170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 +170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 170 170 170 +170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +0 0 0 85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 +85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 +85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 +170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85 +170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 +170 170 170 170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 170 170 170 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 85 85 85 85 85 85 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 +85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 0 0 0 170 170 170 170 170 170 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 170 170 170 170 170 170 0 0 0 170 170 170 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 +85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 +170 170 170 0 0 0 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 +85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +170 170 170 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +170 170 170 170 170 170 170 170 170 85 85 85 170 170 170 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 +170 170 170 85 85 85 170 170 170 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 170 170 170 +170 170 170 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 170 170 170 85 85 85 170 170 170 85 85 85 170 170 170 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 170 170 170 +170 170 170 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 85 85 85 170 170 170 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +85 85 85 170 170 170 170 170 170 170 170 170 170 170 170 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170 170 170 +170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 170 170 170 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 170 170 170 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 170 170 170 170 170 170 85 85 85 +0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 170 170 170 85 85 85 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 +85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 +85 85 85 85 85 85 170 170 170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 170 170 170 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 170 170 170 170 170 170 85 85 85 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 85 85 85 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 85 85 85 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +170 170 170 85 85 85 0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 0 0 0 +0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 170 170 170 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +0 0 0 85 85 85 170 170 170 85 85 85 170 170 170 85 85 85 85 85 85 +85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 +170 170 170 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 170 170 170 85 85 85 +85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 +85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 0 0 0 0 0 0 0 0 0 +85 85 85 170 170 170 0 0 0 85 85 85 85 85 85 170 170 170 85 85 85 +85 85 85 85 85 85 0 0 0 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 85 85 85 85 85 85 85 85 85 85 85 85 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 85 85 85 85 85 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/resources/wdm-1.28/pixmaps/ziomekos.xpm b/resources/wdm-1.28/pixmaps/ziomekos.xpm new file mode 100644 index 0000000..79e9749 --- /dev/null +++ b/resources/wdm-1.28/pixmaps/ziomekos.xpm @@ -0,0 +1,392 @@ +/* XPM */ +static char *ziomekos_new[] = { +/* columns rows colors chars-per-pixel */ +"200 130 256 2 ", +" c #5F5E5D", +". c #6F6E6D", +"X c #141413", +"o c #B9B7B0", +"O c #D7D4CA", +"+ c #A9A69E", +"@ c #403F3E", +"# c #BEBDB5", +"$ c #363635", +"% c #C1BFB9", +"& c #5F605F", +"* c #51514E", +"= c #7F807F", +"- c #121211", +"; c #CFCCC4", +": c #C9C6BE", +"> c #1F1F1E", +", c #4F4E4D", +"< c #585756", +"1 c #EEEBE1", +"2 c #92918D", +"3 c #595956", +"4 c #333332", +"5 c #494947", +"6 c #BFBEB8", +"7 c #6A6966", +"8 c #050506", +"9 c #535352", +"0 c #3B3B3A", +"q c #484745", +"w c #DDDBD2", +"e c #565655", +"r c #3D3C3B", +"t c #9E9D9A", +"y c #96958E", +"u c #AEADA9", +"i c #41403F", +"p c #787775", +"a c #302F2E", +"s c #ACABA5", +"d c #3B3A39", +"f c #373736", +"g c #323231", +"h c #676766", +"j c #A6A5A1", +"k c #3F403F", +"l c #605F5D", +"z c #D1CEC5", +"x c #353433", +"c c #D5D2C9", +"v c #B9B6AE", +"b c #B0AFAC", +"n c #82817E", +"m c #B0AEA6", +"M c #A8A7A4", +"N c #666562", +"B c #504F4D", +"V c #676665", +"C c #D9D6CD", +"Z c #8A8985", +"A c #272726", +"S c #626161", +"D c gray1", +"F c #B0ADA3", +"G c #0B0A0A", +"H c #AEADA6", +"J c #555553", +"K c #080807", +"L c #CCC9BE", +"P c #2F2F2E", +"I c #060506", +"U c gray2", +"Y c #94938D", +"T c #3F3E3D", +"R c #4F4F4E", +"E c #4B4B4A", +"W c #474746", +"Q c #5B5B5A", +"! c #B0AFA9", +"~ c #282827", +"^ c #54534F", +"/ c #A8A7A1", +"( c #61615E", +") c #8C8B86", +"_ c #686766", +"` c #2B2B2A", +"' c #2C2C2B", +"] c #8E8D87", +"[ c #A09F99", +"{ c #E5E2DA", +"} c #5B5A59", +"| c #6B6B6A", +" . c #9C9B96", +".. c #A19E96", +"X. c #CDCAC2", +"o. c #6D6D6A", +"O. c #7E7E7D", +"+. c #D9D7D0", +"@. c #DBD9CE", +"#. c #D4D2CB", +"$. c #ADACAA", +"%. c gray16", +"&. c #B4B2AB", +"*. c #181718", +"=. c #212120", +"-. c #252525", +";. c #4D4D4A", +":. c #7D7D7A", +">. c #969591", +",. c #6C6B67", +"<. c #5D5C57", +"1. c #656564", +"2. c #6E6D6D", +"3. c #908E87", +"4. c #D9D6CA", +"5. c #474645", +"6. c #EDEADD", +"7. c #050606", +"8. c #525251", +"9. c #3D3D3C", +"0. c #5F5F5E", +"q. c #B7B5AD", +"w. c #0E0E0E", +"e. c #313130", +"r. c #ABA9A2", +"t. c #D1CDC3", +"y. c #0A0909", +"u. c #242423", +"i. c #99968E", +"p. c #060606", +"a. c #C3C1BA", +"s. c #1C1B1B", +"d. c #7A7A79", +"f. c #706F6C", +"g. c #908F8B", +"h. c #D1CFC8", +"j. c #060505", +"k. c #4C4B47", +"l. c #131312", +"z. c #10100F", +"x. c #1B1B1A", +"c. c #989791", +"v. c #454543", +"b. c #787772", +"n. c #838281", +"m. c #C3C1B7", +"M. c #6F7070", +"N. c #232322", +"B. c #21201F", +"V. c #201F1F", +"C. c #4A4A49", +"Z. c #171716", +"A. c #636261", +"S. c #2E2E2D", +"D. c #6B6A69", +"F. c #F1EEE5", +"G. c #7B7A77", +"H. c #3F3F3E", +"J. c #424241", +"K. c #060605", +"L. c #807F7B", +"P. c #939392", +"I. c #E7E3D8", +"U. c #393836", +"Y. c #88867F", +"T. c #191919", +"R. c #C7C5BE", +"E. c #C9C7C1", +"W. c #E2DED5", +"Q. c #64625E", +"!. c #E1DDD2", +"~. c #888783", +"^. c #BBB9AF", +"/. c #30302F", +"(. c #A09F9C", +"). c #C9C6BB", +"_. c #414140", +"`. c #C5C2B9", +"'. c #868582", +"]. c #101010", +"[. c #7C7B76", +"{. c #090808", +"}. c #C1BEB6", +"|. c #A6A49E", +" X c #9E9C96", +".X c #868685", +"XX c #8E8D89", +"oX c #100F0F", +"OX c #71716E", +"+X c #767572", +"@X c #86857F", +"#X c #515150", +"$X c #1D1D1C", +"%X c #A3A3A2", +"&X c gray30", +"*X c #494948", +"=X c DimGray", +"-X c #151515", +";X c #989795", +":X c #141313", +">X c #4C4B49", +",X c #646362", +" U.i 7XU.K K K.U U K.p.U K.K.nXK.U 7.;.Q 7 JX_ o.3 ;.. +XDXVX;.lXj.U p.K.U U K.K.U U p.K.{.K 0 XJ ;.[ bX}.&.( 5 * ^ 6X5.p.U U U K.p.nXp.p.GX4 +X3 l.y.y.S.qXB n I D D I I I p.p.U U nXU U U U U U p.p.K.K.K.p.K.p.K.K.K.U U U U U U U U K.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U K.U U U p.U p.U K.U U I K.K.U p.nXU U U U U U U U U p.U p.p.p.U j.U K.G 0X/.5 T nX7.D > ;.u.K D K K.D nX{.U D uXS. ~ n s +XL.;Xn JXXX'.,X-XD 7.0 c.+ 4Xa.X.v pXy 5 p.U 7.wXJXZ ) +X:.tXO.JXNXmXT.lX7.D D I D :XZ >.a y.D 8 D U U U I U nXU K.U U nXU U U U nXp.7.U K.p.U U nXp.U U U U U K.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U nXU p.K.K.U U nXU U U U 7.nXU U U U U U U U U U U U U U U U nX-.~.J 3 G D D D D nX-XrX*X,X=XMXC.%.nXnXK w.zX%.A -Xy.;.8Xo c c L iXSXG $X=.aX> y.K 7.7.y.A E * UXeX, u.7.7.U D D oXe qX:.HXI D j.D D D I I U U U K.U nXU j.p.U nXU p.p.p.K.p.U p.p.K.p.nXU K.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U K.K.p.K.p.U U U p.nXU U U U U U U U U U U U p.U nXK.p.p.W AXN N.D U D I 3X$XjXMX0 < 6X3XG K p.j.7.3X` f.g.UXD.Z |.).t.+.5Xm.) f.Z d.:.` G 7.7.nX7.7.-X' 9 k 4 k gXD D D U I G Z 0XT lXI j.D I D D U U U U U j.K.U U U nXp.p.I p.nX7.p.K.p.p.p.nX8 U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U 7.U nXp.U nXK.p.j.U j.U U U K.U U U U K.U p.U K.U U U p.K.K.K.].#XZ DXf uXD 8 j.I S._.s.T.3XmXT.7.7.p.U GXK GXuXmXgXZ 6 [ 8X# R.5Xo kX3.q.@XaX$XG 7.K K 7.D 7.uX].x.-X3XE =X-XU 8 D j.I HX2.G.V I D D I D I D D D D D U U U j.p.U K.p.U p.p.p.p.p.p.p.K.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.nXU p.U U p.K.p.p.U p.K.U U nXU U U U U U U U U U U U p.y.- -.M.M.#XCXD D D D I I GX:X} %.y.7.D U nXp.lXf $X7.uXG 1X>.&.+ fXc 4.!.1 L r.* z.lXK T.9Xx.7.D D D 7.7.w.k > D y.7.U D U D *.} A..XCX{.{.I D D j.D D D I 8 I I I I U K.U p.K.p.p.nXU p.p.U U 7.K.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U 8 p.U I p.p.nXp.p.p.p.p.p.U U p.U U U p.U nXU U U U U U GX> q.M (.kXj n.S.D D I CXMXe.%.aX8 7.7.D 7.D 3XX X u.9X6X;X| r Y.O I.pX&.).kX&.m q.( SXtXR gX-.T.l.3XD 7.7.D D 7.> $ S.f %.U D I B.O.~.>./ .n HXI I D D D D I D D I j.D I K.p.K.K.p.p.p.p.U p.p.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U I I p.U p.p.p.p.p.nXp.p.p.U U U U U U U K.U K.K.U U X T ;.&XjXg %.C.R HX].U U 8 G :X- oX3XI 8 7.7.D D A P aXjXx.lXmX[.DX+X[ L a.5XC ).c + XL.Q.N.w.zXX:XD D D D I I I D I I I K.U U p.p.p.U p.K.K.K.j.p.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.U U K.p.p.p.K.p.K.p.U U U U U p.U U U U U U U p.=.+X) * $X> J wXP.2XGXD 8 %.$ T *.I j.8 8 7.6X-.T.uXp.p.l.e.` v.2 .4X}.R.#.+.C h.C q.bXF G.MXMX' -X7.7.nXl.N.aX7.U U U 7.T.' 9.=.GXD D s.A.2 S w.-X5 _ ~.$XD D D D I I D D I j.j.j.U p.p.p.p.K.p.p.K.p.p.p.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.j.U nXp.K.U K.p.p.p.p.p.U U U p.p.K.K.U U U p.w.VXe AXB.w.K x.0 E 5.y.I U U - 3X-XG j.D D 8 D -Xw.T.' -XuXp.G uX*.>X, [.:.Z / q.&.&.kXL.[ o.H.T.- y.K {.3X` < x.3X7.7.8 D D G w.l.w.8 D I l.5.h 1XZ.GXlXoX. 3 ( N.D D D D I I D I j.I I p.p.p.K.p.p.p.p.K.p.p.p.j.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.j.U p.p.U U K.p.p.U p.U U U U U U U U U {.w.X 7 W ^ z.D 7.X@ -X3XI D D D j.D I I I p.p.p.p.p.K.K.p.p.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.nXU U p.nXU U p.nXU U U U U K.D p :.AX~ -XzXCX7.D 7.&XrXe eX2.-X7.D D D U j.I I oX&X S.G -.gXQ M.gXA ,X4 e.G I HXe.VXv t.#.w z m.. ~ T y.D 5 aX1Xf ~ 6X| =.7.7.g _.C.3X7.7.D 7.D D D I lXe JXFXe &XoXU GX-XCX-.CX0XwX( GXj.j.I I I I I j.I p.p.p.p.p.p.p.p.p.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.p.p.U U p.U U p.K.U U j.U U N.hXv.S.v.B g N.A D 7.&X1.| eXeXJX7.D D U U D j.I s.N.BXLX*XLX7.K X 8.A -XM.J.s.GXI V.l ) Z iX&.q.+ y DXf.> K.K.' $ V A gX&X-XK 7.=.=X0.J.$ l.D D D D D D D {.0XS &XeX1.J U {.s.-.i 6XN 5.5..X{.D I D D j.D D I I K.K.p.p.p.p.p.K.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.p.K.U U U U p.U U U U U U G ' :.E d >X$XGXG 7.K lXC.*X3 ( FXJXD D D D D I -.rXS S g.O.*X8.K D 7.S.mX7.` -.8 8 I GX@ m { { 6.I.I.cXq.3 K.K.K.K T.P X ~ gXnXnXK | &X1XwXwXrXE aXD D D D I lXeXA.e eX8.7XuXGXI lX{.- 9XMXT iX3Xy.D j.I I I I j.I U I p.p.p.p.7.U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.p.U nXU U U j.K.U U K.7.f UXd.UX} 1._.` LXw.' rX2 KXIX=XV w.7.D 7.D U p.Z.J.< } = M.0Xn.y.U 7.Xw.D D D 7.7.-.kXhX-X&.N VX XL.r.X.c # |.y b.< [.lXsXY.~ D D D D 7.].0 (.4 D D D D 7.4 #XV K 8 nXnXy.R rX 2._ 9 JXe LXD 8 8 U U D uXe [.j.D D I I D I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U K.K.U U K.p.nXnXnXb.<.' mXD D D D 7.' g eXFXjX1XFXeX&Xf 3XD D ].gXk gXl.8 D I I I s.S |.UXj.U U 7.D l.VXc.N [.@XVXg.iXs 5X5Xm.v Y DX~.dXSX&.( -X7.nXnXnXK JX! eXmX7.7.D 7.7.zX~ K U 7.y.6XV n.g.wXIXJXtX2.FXqX8 D 8 I a :.N B D D D j.I I D D j.I I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U 8 U U p.p.U U U K.U K.K.D G uXA mXnXD nXnX-X%.x.4 l.y.nXD ].e O..XO.1.V >.KXS &XU I I I PXn *.j.D D D 8 I I D 8 D D I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U p.p.K.K.nXnXK.K.nXK.D D D D qXU.nXnXnX].k 9 J.rXrX6X8.< e jX7.7.D 7.-.' ].D D D f g.UX$XI D 8 J.].nXnX7.x.9 SX[.8XsX[ E.v 3.u c O 4Xi.F ).! dXVX3.e k.x.nX7.l.e..g.c.Y u q.j c.hX .iX[. .b.< VXk w.-XLX$XMXx.].7.D D nXD D K.nXnXnXD U K g w.nXZ.h :.} eXM.2X3X*.j.G NXCX$XD D 8 I I D j.D 8 D I I I I D I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U j.U U K.D D D K.D K.K.D D D D K.S.SXv.- K.2XT _ D.9 ,X3X7.U f n.l.D D nXD D 7.7.7.7.8 8 :Xa , U I p.3XAXY ! kXr.t.; a.h.5XR.z z t.c L ).c ).}.O v Xs kX9.- p.7.7.0.0 ].D D D D K.K.D nXnXnXD 7.s e.nXnX7.d.R rXKXMX*.j.*.S.:.:XD D D D D I D I I D D D I D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D K.K.K.K.D D D nXD D D x.x VX> w.g jX1.d.eX#Xw.U 7.P DX0 K D D D D mX-X8 7.D w.g ].lXI {.HXn iXy s m v 5X#.R.c +.: E.X.fXz ; ; c L R.4.m.pX/ |.dXJXT p.7.7.Z.%.X U 7.D zXZ.U D D D G =.g.` D nXD _ 0.V :.9 yXG a , N oXD D D D I I D j.I I D D D I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D D D K.D K.D D D D D K.D D K.m.SXr S.a E 9 9.CXGXU p.* y NX-XD D D 7.w.uXD 7.7.Z.Z.GXU p.^ f.b.:.) &.+ r.# &.Y r./ ) ..M + kXr.c.r.+ kX4XH c.kXy 3 ,.) <.l.7.K l.` w.D nXuXuXK.D D D S.j J.T.D nXnXmX5.i qXjXCXa n ~.uXD D D D D D D j.I D D D D j.D j.j.j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D K.K.K.D K.D D D D D D D D D D D D u.<.*X8.:.(.%X=X$X8 U U y.3X,.7.D D D D K uX- K G 9.U 7.7.D .}.O { I.6.ZX1 1 6.1 1 W.{ { { W.6.W.!.F.6.I.F.1 1 6.6.+.L m.G.-XU 7.nXK D ].lXG G U D D D mXG.p.U U nXD w.D.g.% wX#Xd s.I D D D D D D D D I D D j.j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D K.D D K.K.D D D j.D D D K.D D D K.D , 5 a HXR qX*.8 D D D nXy.g.A D D D 6X' T.$X].7.7.K w.$X&X( :.+ |.r.L q.kXv o L.XXo.9Xf.+X( +X( J c.i.c.a.bXr.E.6 P...|.AXR N.lXK 7.D x.zX> $ e.K.K.K.$ DXnXU D D D nXlX%.1X9XP *XR G j.I D D D D D D I D D j.I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D K.K.K.K.D D j.D D D D D D D D D D K.3 b.OXFX= Q y.U D D D nXnXQ.,.f G ~ 7.7.7.D 7.D l.Q . [ fX`.; 4.5Xz @.t.`.C ] L.L.,.C.< N 3 N AX<.b.Y.Y t.5X).C c # ).+.fX# ^.. ;.T.7.D 8 7.8 uXd K U.8X> D U D D nXD uX. Xq D j.D D D D nXD U -XV A.) d.:XD D D D j.D D I D I I I D D D I D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D K.D K.K.K.K.K.D D K.K.D K.D D D K.d BXs.- D D D D D D D 7.D D 9XAX' %.-XD 7.D D D K N.H.g.iX2 iXkX@Xf.VX7.nXK.u.g [.[.q N +X3 8Xo.^ <.jXmXy.U oXS ] +X3.s XXL.6 6X-Xy.7.D D D 7.7.%.k * yXD D K.K.D D D D U 7.mXCXHXg {.D D D D D D D j.D I I D D 8 I I D D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D K.K.D D K.D D j.D D K.D D D K.f.b.$ GXD D D D 8 D U U 7.D A.JXk 1XK D 7.D w.mX( C #.cX4.cXw #.`.g.x U K gX=Xv.e 3 MX3 DXC.0.^ >XV A.C.e.8 I S.r.`.X.@.!.w I.X.^.G.` y.7.nXD uXe R hX9.D D j.D K.D K.D U D 7..j ~.(.2 2 2 O.h d.e.w.U 5.:...4Xq.o ; + ! E.s ( ` nXD lXgXL.g nXD nXD D D D K.nXD D 7.R N I D j.j.D D D D j.I D D D D D D D I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.", +"U U U U U U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D K.K.D K.K.D D D K.D D K.K.K.D D D D D K.uXuXU D D D I I I I D D D D %.JX=.U D 7.E ,.<.,X@Xv z 6 kXkXkXi j.oXLXQ 2.=XS KXM.,XM.d.( O.h 1.M.IXS UXV -.y.j.J sXq.|.}.).4XL.Q 3 :.6X7.D D K n .~ U 7.7.> ( sX; y ] kXy VXVXx D y.U.eXE h 1.1XrXrXe FX1.&X=Xe 9 1.0.8.Q FXR 2XK D -.~.VXsX/ H Y.^.kXk.x.y.D 7.K [ 9.nXD K.D K.K.K.K.K.D nXD nXU 8 I D I I D I I I I I I D j.I I I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D K.D K.D K.K.K.K.D K.K.K.K.K.K.K.K.D D D D D D D D D I I I D I I 8 8 N.Q x.7.y.jX/ o ^.5Xw !.W.!.O ).* K.zXP.=XS.G K 7.$XQ =X1.1XgXd.KX1X%.D I D J.S n.aX8 q h.5Xw W.W.@.c ^.F sX;.7.nXG vXaXD nXK.K.K.K.K.K.K.D D 7.D D 8 I I I I I I I I I I I D I D I I D I j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D D D D D D K.D D K.K.D nXK.K.D K.D D D D D D D U U D D I I I I I I D 8 -.1.$X7.K e.f e.e ! : ).).: |. .5 K.u.| > 7.7.7.nX7.mXJ.0.w.K 1.9XT.8 D 8 I w.=.Q -.U r |.j xX; X.4Xs < zXg x D 7.uX+X' D D D K.K.K.K.K.K.K.D U nXU I I D I D I I D D j.I I D j.D I I I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.", +"U U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D D D D D D D D K.K.D D K.K.K.D K.D D D D K.D D D D D j.j.I D I I I D 8 8 s.&XD.l.7.uXr 7 Z L a.4X# q.>.sXq nXN.,.U U U U 7.7.7. 7 , $XD D K.K.K.K.K.D D K.D nXD nXj.I I D D I D I j.D I I D I I I I I D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D D D D D D D D D K.K.D K.D K.K.K.D D K.K.D D D D D D D D j.j.I I I I I D I I {.PXw.9.c.4.!.w @.+.c C +.c.8Xf nXuXT U j.U 7.D D 7.gXeX7.D e %.7.D 7.8 8 D y.HXT.8 u.XXy ).t.w L ).!.@.t.iX' %.f.K.K.j.j.K.K.K.K.K.K.K.K.D nXD K.j.j.D I D I I D D j.I D I I I D I I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D D D D D j.D D D D K.D K.K.D K.D K.K.K.K.D D D D D K.D D D D j.D I I D I D j.8 j.I U.n.g.^ J s `.v # a.}...(.AX- U K.I U D 7.7.7.7.k 0.D 7.,X' 7.7.D 7.D D 8 I 8 l.E NX[ s fXa.q.q.y d ;.Y . /.U D D D K.K.K.K.K.K.K.D K.D K.D j.j.D I j.D I I D D D I I D I I D D I D I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U U U U U U U U U U U U U U U U U U U U D D D D D D D D D D D D D D D D D D D D K.D D K.D D D K.K.K.K.K.K.K.D D D D K.K.K.D j.D I D j.D I D D I I 8X 0 6Xg , 0Xv.DX] 7 < + 3.N . X;.lXK.K.x.* X D D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.j.D j.D j.D j.I I D I I I D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.", +"U U U U U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D K.K.K.K.K.D K.D D K.K.K.K.D K.K.K.D K.D D D D K.K.K.D lXU.8Xf.lXK.yX....<.9Xm.XX3 X.i.AXc.o.H.@XE aX.X_ ` 7.D 7.7.nX7.7.nX7.7.gXFXXX D D D K.SX,.K nXK.K.* * GX@Xw 4XH @X/ # m.v Y [ % t.: w I.m.sXsXq...% m.XXr.E.t.Y.D i ;.K nXD 7.2 ;.U D K.D K SXi.) d.E./.D D D K.D D K.K.D K.D D K.D K.K.K.K.K.D K.D D D D j.D D j.D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.D D D D K.D K.D K.D K.K.D K.D D D D K.D D D D D D K.K.Z.[.i.VXx U.i.r K.nXK.N.L.y.D K.K.K.j.J ..VX` &.L !.c <.[.@.; pXq.`.&.`.L dX<.X.cXC r.d @X..N I K.nXnXnXw.D.u.U D K.k.hXq N.,X.X;XnXnXD D D D D K.K.D K.K.K.K.K.K.D K.K.K.K.K.D K.D K.j.j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D nXK.K.D D nXD K.K.K.D D D D D K.K.K.D D D K.K.K.-XPXj XX 0Xs Q.x.D D D zX@ g K K.K.K.K.- x aX' ^.j %X^ x.e.iXX.X.z !.).X.Y r V.&X[ &.+ T HXBXs.j.K.nXK.G P k.X D D K.A e / ,.N :.m v.- nXD D D D K.K.D D K.K.K.D K.K.K.K.K.K.K.D D K.K.D D D j.j.j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D nXD K.K.K.D K.D D K.D D K.K.D K.D K.K.K.D K.D D D D D A 3.q.; NX>.2 0Xw.D D D K.K.uXr * i K.K.K.K.K.K.B.Y ~._.K y.3 }.L `.q.h.m.).F 7 j.w.d t dX/.j.I I j.K.K ;.<.e.].7.D U D K.- @ s ;XiXxXE.8X~ D D D D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D K.K.D D j.j.D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D D K.K.D D K.K.D D D D D D D K.K.D K.D D D K @ VX+XN Q.&XS.uXj.D D K.~ e.K.zXd q $XK.K.K.K.K.K x.B.K U y.* |.DXPX).fX7 8X) <.j.D U N.Z.y.j.j.j.j.{.Z.k.x Z.7.9.> D D K.K.K gX#XJ ( ~.OXU.lXD D D nXK.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D K.D K.D j.D j.D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.D D D D K.K.D D K.D D K.D D D K.K.K.D K.D D D D ~ I.m @XXX(.Z x G U D D {.i q K.K.y.@ ,.- y.y.K.K.K.nXnXD D U nXf.f.Z./ |.d 3.vXj.j.D K.K.K.j.D I GXG N.5 * D 7.7.=XP K K.K.K.K -.:..Xg.8X&.}.T D D D K.K.K.K.K.K.K.K.K.D K.K.K.K.K.K.K.D K.K.D j.D D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D D K.D j.K.K.K.D D D D D D K.K.D D K.K.K.K.y.e.> x.y ) 0XrX>.*.D I ;.d K.$XaXzXy.U 3 ,XD.u.K.D K.K.j.nXnXnXK.K.K.q < lXj.D D j.j.D K.K.K.K.HX8.OX, z.K =.aX=.7.e v.K.D ~ [ ,X( = XGXzXA z.D K.D D K.K.K.K.K.K.K.D D K.K.K.K.K.D K.D D K.D D K.j.j.D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.D nXK.D D D D D D D D D K.K.K.K.K.D D D D D D j.w.e.iXf.V S } oXGX2XD.XZ 0 y.K.D K.D K.K.K.K.K.K.K.K.K.D K.K.K.K.K.K.K.D K.K.K.K.K.D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.K.K.D K.K.K.K.K.K.K.K.K.K.D D D K.K.D D D D D K.D D K...PXw.G ' j KX_ O.N.G j.I *.gX= KXQ :..X$ G K.D x.:.[ ] j iXAX@X* GXU j.D j.j.k.i.L.:.>.|.XX+XCXI I I 2X9 2 M. +XO.T.7.8 oX$X2.'.p Z BXI lXjX:.X U K.D D K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D K.D D K.K.K.K.K.D D D K.j.K.D D K.K.K.D K.D D D D > G nXT.Z g.OX,XKX} u.oX-.E 9 M.2.0.2.2.w.j.D K.x c.XXJX;XXXG.g.W GXD D j.D D PX2 ) VXP.iXL.2 e.I I I -X5..X0Xe M.UXk N.3XP q &X+Xo.G.>.{.I lX*.GXK.K.K.K.K.K.K.D K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D K.D D K.K.D nXK.K.K.K.K.D D D j.D K.K.D K.K.K.K.z.r XX2 OXIXd.= 1.2.wXKX1.n.JXQ M.x.7.z.w.~ <.Y @XJX;X'.O.Q zX8 D D j.D D zXB XXVXiX2 vXdXN V.GX].y.:X=XKXV O.:.KXUXO.KXd.P.g.o.n.kXi lXD I j.j.nXK.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D K.K.D K.D D K.K.K.D K.D j.D K.K.K.D K.K.K.D D K.aXdX% bX>.Z ;XM O.2.d.IXUX_ & *X9XK 7.H.U.DXkXb s t 6 s ;XC.8 D D U D j.j.j.T M .$.&.c.j u 5.-. I I S.qXq V Z 2.KX= M.,X,. .P.|.R. X-.I I j.j.j.D D K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.D K.K.K.K.K.D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D D D K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.D K.K.D D K.D K.D ~ 7 ) oXAXD. rXJ #XS < &XJXJXZ.7.GXR :.v.K $XvXn.VXn d..OXN.p.~.yXD D j.j.j.j.K.K.K.K.D D K.K.K.K.K.D K.K.K.K.K.D K.K.K.K.D K.K.D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D D K.K.K.K.K.D D K.K.K.K.K.K.K.K.K.K.K.K.K.D K.D D K.K.nXnXnXl.8Xo.> Z d.=XD.9 jXFXaX%.w.7.nXGXnXD ' ;X8XJXs G D D D D U U j.j.I I 8 8 -.iXZ p XXa D I I I I D LXyX9 V &X&XM.d.1.p.KXo.N.I I I D D D D j.j.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D nXK.D D K.D D D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D j.D D D K.K.D D D K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D K.D K.K.K.y.B XX%.HXg _ (.O.2.P..XFXS =Xe S.nXp.T a.$.c.v.7.D D D 7.8 8 8 I I I I I w.a # $.% i I I -.e C.IXKXUX;XP.KXZ .X4 %.y.kXB l.j.U I D D D j.D D j.D K.D D K.K.D K.K.K.K.K.K.K.K.K.K.D K.D K.K.D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D D K.K.K.K.K.K.K.K.K.D K.K.K.K.K.D K.D K.D D D D D K.K.X PXzXI G >XFXgX' E k -.4 1.9.$Xp.N.U.o.( E ].D D D 7.7.D 8 8 D V.G I I D GXS 0XVXE 3XI :XBXr MXe.N.LXW gXC.1X7.7.G J > D D D D D D j.D D D D j.K.D D K.D D D K.K.K.K.K.K.K.K.K.K.D K.D K.D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.D D D D D D K.K.K.D K.K.K.K.K.K.K.K.K.D D K.K.K.D D D K.D nXD K.` dX, uXw.1.P.KX:.tX= d.tXP.A $X9X,.>.b UXZ.D U D D nX- jXD D 8 &X' G D j.j.3XVX(.u < BX2XHX NXn.D.tXtX+XwXO.uX3X9XtXU.D D D D j.j.j.I I j.D K.K.D D K.D K.K.K.D K.K.K.K.K.K.K.D K.K.D K.D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.D D D D D D K.K.D K.K.D K.K.K.K.K.K.K.K.K.K.K.K.D D D K.K.D D K.x. .> G k.t .X| tXwX2.n.M.0.KX(.g.wXn K nXnX7.D D T.jXO.D 7.8 1.0XjXI D D D ].IX+ Z wXg.8.qX(.wX.XiXP.+Xd.( G $ o K p.D U D I I I I I I I D j.D D K.K.K.K.K.K.K.K.K.K.K.K.D nXD K.K.K.D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.K.K.K.D D K.K.K.D K.K.D D K.K.K.K.K.K.D D D K.D U uXa uXuXQ.L.HX].aXUXJ =X2.9 9 KXFX&Xx.D D nX7.D 7.MXMXeX7.D D LX#X0.{.j.D I I -XAX S KXe qXUX 1.9X-XS.7 OXK -Xf 7.U U U I I I I I I D I j.j.D K.K.K.D D D K.K.K.K.K.K.K.K.D D K.D D D D K.D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D nXK.D K.K.K.K.D D D D K.K.K.K.K.K.D D K.K.D K.K.K.K.K.D K.K.D D D D K.K.D K.Z.p < G -Xh Z (.wXUXn.2 Q 7XnX7.7.nXD 7.6X2 = O.7.7.gX=X.X%X< G 8 I I I T #XO.tXd.d.NXn.IX2Xj.,.n zXnXU nXD D D U I I I D D D D D D j.D K.K.K.D K.K.K.K.K.K.K.K.K.K.D D K.D K.K.D D D D nXD D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.D K.D K.K.K.D K.D D D D K.K.D D K.K.D D D K.K.K.K.K.K.K.D D K.D K.D D D K.x 7 +X7.N.1.UX2.&X1XA.9 PXSX9 4 y.D %.S S MXe 9XK 1XeX#XV , %.I G 9.< S &Xe 2.8.&Xd.2.%.I OX^ /.nXD D D nXD U U I I I I D I I D D j.j.j.D K.K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.D K.K.D K.D K.D D K.K.K.K.K.K.D K.D K.K.D K.K.K.K.K.D K.D K.K.D nXD K.k.UX7.w.0 UX| FX1.JXDX<.AX*Xe.w.4 k 2.| e =X2.-.=XS e D.IXE uXa HXqXKXD.D.n.0X j T ].I KXU.nXU D U D nXD 7.8 8 I I D I D I I D j.D j.D D K.K.K.K.K.K.K.K.K.K.K.K.K.D K.K.D D D D D D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D nXK.K.D D K.D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D K.K.K.K.K.K.K.K.K.K.K.K.K.D K.nXU nXS.JX$.eXe M.+XJXb tXUX*XP.KXtX;XJXP.tXKX$..X.Xb %Xp *XP.d.(.wX=X0XM.,X.XiXT.I D j.j.D nXnXK.nXD nXD 8 D I I D I I D j.D D D j.D K.K.D K.K.K.K.K.K.K.K.D K.K.K.K.D K.D D D D D D nXD D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D nXD K.K.D K.K.K.D K.K.K.K.K.K.K.K.K.K.K.D K.K.K.K.K.D K.K.K.D D K.K.K.D K.K.K.D j.D nXnX7.{.T.(.9Xx.7.K ~ KXh FXd.UXe 1.KXQ JX= 1.g.M.| d.D.0.:.KX7 KX2XGXI *., :.3XI D j.j.D D K.nXK.K.D nXD 8 D I I I D I I I D j.j.j.D K.K.K.K.K.K.K.D K.K.K.K.K.K.K.K.D D K.K.D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.D K.K.D K.K.K.K.K.K.K.K.D D K.K.K.K.K.K.K.K.D K.K.K.D K.K.D K.K.K.D K.D nXnXnXnXD K > .MX7.nXK -.UX'.:.KXf $ 2.,X| O.7 wXo.& J.d 1.UXZ 8XT GXj.I r XXe.I D D D D I j.j.D D K.D nXD D 8 8 I D D j.I I I I D j.D K.K.D K.K.K.D K.D K.K.K.K.K.K.K.D K.K.D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.D D D K.D K.D D K.K.K.K.K.K.K.K.D K.K.K.K.D K.K.K.K.D K.D K.K.K.K.K.K.D K.D nXD nXnX7.uX7.D D D nX7.=.% uXD nX:.iX>.%XXX$. .JX7.U 2X#.w.D D j.I I GXG I D D I D I D j.D K.D K.D nXD D D 8 I I I I I I I D j.j.D K.K.K.K.D D D K.K.K.K.K.K.K.K.K.K.D K.D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D K.D K.K.K.D K.D D K.K.K.K.K.K.K.D D K.D D K.K.K.K.K.D K.K.D K.D nXK.K.K.K.D D D nXD 7.7.D nX8 7.D U - k 7.U 7.' * OX. AXZ ;.g 8 8 ].*XGXI D I I I I D D D D D D I j.j.D j.K.K.D D nXD U U I D D I D I I I D j.j.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D K.K.D K.K.K.D D K.K.K.K.D D D K.D D D D nXK.K.K.K.K.K.D K.K.K.K.D K.D K.K.D K.nXnXnXD 7.D D nX7.7.D D 7.D D 7.U P ( >.d.b.-.D U 8 D D D I D D I I I D D D D D D D D D D K.K.K.K.D D U D j.I D D I j.D I I j.D j.D K.K.K.K.K.K.K.K.K.K.D D K.K.K.K.D K.K.D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D K.K.K.K.K.D K.K.D K.K.K.K.D K.K.K.K.D D D D nXK.D nXD D 7.7.7.D 7.D D D 7.7.D nXnXD uXE jXT.D U U U D U I D I I I I I D D D I D D I j.K.K.K.D K.K.K.nXD D U D D D D D I I I D j.D j.K.D K.K.D K.K.K.D K.K.K.K.K.D D D K.K.D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.D K.K.K.K.D D K.K.D K.K.K.D K.D K.K.D K.K.K.K.K.D nXK.K.K.K.K.K.K.K.K.K.K.K.D K.D D D nXD 7.7.7.D 7.D 7.7.7.7.D 7.D 7.7.7.K.U D D nXU U j.j.D I I D D I D I D I I j.j.j.K.K.K.K.K.K.D D U D j.D 8 I I I I D j.D D D K.K.K.K.K.K.K.K.K.K.K.K.D K.D D K.K.D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.K.K.D K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D nXK.K.K.D K.K.K.K.K.D nXK.nXD D nXnXD 7.7.7.D 7.7.7.7.7.D nXD 7.D D D D D D D D j.D j.I I I I I I I D D I I j.j.D K.K.K.K.K.K.K.K.j.D I I I I I I I D D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D K.D D D D D D D j.D D D D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D nXK.K.K.D K.K.K.K.K.K.K.D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D nXnXnX7.7.7.D nX7.D D 7.7.D D 7.D D 7.U nXnXU D j.D j.j.D I I I D j.D D I I D D j.D K.K.K.K.K.K.K.K.K.j.j.j.I I D I I D D j.j.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D D D D D D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.K.K.K.K.K.D K.K.K.K.K.K.K.D D K.D K.K.K.K.K.K.K.K.K.K.K.K.D D K.K.K.K.K.D D D nXD nXnXD 7.7.7.D D 7.D 7.7.7.D nXD D D D D nXnXD D D j.D D I I I I D D I I I I D j.j.D K.K.K.K.K.K.K.K.K.D j.D j.D D D I I I j.j.j.K.K.K.K.K.K.K.K.K.D K.K.D D K.D D D D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D ", +"U D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.D nXD 7.7.7.7.7.D 7.7.7.7.7.7.7.7.7.7.7.7.7.nXnXK.K.K.j.j.I I I I I I I I I I D j.D K.K.K.K.K.K.K.K.K.D j.D I I I I I I I D j.D K.K.K.K.K.K.K.K.K.K.K.K.D K.K.D D K.D D D D D D D D U D D D D D D D D D D D D D D D D D D D D D D D D D D " +}; diff --git a/resources/ziomekos/ZiomekOS.png b/resources/ziomekos/ZiomekOS.png new file mode 100644 index 0000000000000000000000000000000000000000..9a05ed5abb7c8d69e9c0ae8ce433663841f96dc6 GIT binary patch literal 1710756 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

`S!YpZW$jNVB#^D{GyF^0Ht%jPAMQ)A=fX_^*d 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�R!*9bX=)x`oMfCn|}y-HHav46)?Ltb1d)T`fp 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 z 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 z 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

yyk}>QMph=XF3cQu0H*m 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

Lu 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 z z%e+r>P=dQ~X5H`X)-6Rm#EFeQ-EE=%E%>Nm_9aj8^N*$8-B{E2*KJoM8xdDOZs+D0 z(NLU&mVF}LqAO08~7BZNS3$3?M~yrFNu=yDGzaTfP`J5gaQRaz)b9u|OAnYw3%8YN!DfGY3r~Xiz%$hl=h}OjO7v z2MAAzkn2#I+}HOn$D4?tnPtHG(Y9H8Gbf9|5=4uCEOZ#GV3G!tq~)C0xa~M{Ylt4-AI+$wKUl+QcbqM^4z0>e)Lz@wU>5veG8QG z8o~NP`Hig3O)eNHC)9J(0<~a*#0(DB^!VuAdMSU*lV@T>h}6_F;h=;toAPJ8(Gd2S zk8U>FTWtb^CREVh6WWe)DA&vsQW;Yk1TQIldfujEO00?&=j@-wufBc#C4FxyCm4d8 z$s|fXs#jaiY!JQ?D6S$J$ef8_0bzka+G@&X*(R2`2zDGbj^uI&r3q+(6GtVq7Afmd zs}$l#5RF7&87X|=;)EGf5fuz_kCHi1TF~QUmE-coR2PzSc~hn#s|JmvH2KQ{IuaE!lMi#;D_ab~fkP7hl4`>< z$)O<5(W$onwr_ojIN?U_A4Xm|sJX|wMajQhDb(Iz)7Y5v{WO{EO72sPA2&clP}kM< zpBY7$A+u@1SCt-$jVuecZaSR0sat{sQH*au?bFl0T{OPrU4hPE{0b-G(@vy^)W)BGq zX(N!UwvJOO?B^Bnm~1xIH)!~V7|%I#+zXkk)h^!inP*B;aC@Q~MQqBrgQOb@4t5Ic z1+bPlf)M%lWev#!PW#XIgttK+72(0Z$ zWK92z)~+A9^(#w=O%u$32PXrj)T{Vz3OokDB2YJO_h9q!}6*F20H zSBupe*19nsJ@}nE@n-5GkEINPx}O=CbQ9&$K9uAyMKTPXBVP2TMMYm0kP-w zn&iw`Je&Y_;#NV-dtC&Y3SvQ1DWp^goNyY0 z$owULS>RrUm$PHBV?ppjhu(_^lZq%>ZVH7S#gB0>20B*!QsShFB^gVA2xqDNrA>nq zmY@C@t?PM+3o$KVXiK&xPonBbRtLV{;zW9FKi&RHkYLSQB}vEjW{7@xiQh9HE+rB` zVW!sKiu6%mKL}Gx<+AvQnabyI{^E+h7TTR=_!0gD!$;JLj4h=(zEUX}o12fCu6qCB ziG55`l?(B+FU0r>xc$by6nu}rNkh|m=sEo5<`=@u(XGg;k?GHHt>ng08Z{6f^9H<% z-QrCBZTAgYmEu>Zs{z05ZWC-d1=;eQ$J0YM@oMRz%ZdIuXO@{69wi9Enb8;niB^-k z@sKkiRu7c2dNdJ455Tud`H=`Dk?pvd`m)V(518JWm}lBG;DfGTzf7={vj4>|Vp4K! zszEi`3;~*hwu}3#lSk!Z+WHphSTa;H+#c}MhH1B7c8xyDoK@RHxWNtY4n8gC^W_WJ zzyjA&!bmd2)cV2nsvC}!qtRjzPB^w!dO$hwlZ2ZA;!q-1+D<8{6T+g$als|c5Hq8< zNUwfHKD%(38lIQ*ck~XdM3pf{(l4!sJzo=yWu|T{u~3i~O_+)mtL9z!HsupG6c;zR zH};*NXeq@Q)3e2>A>FU=O=>DFZ4+#4=X?&gL3&kk;E7aHLP}g*f*Z}JZz_X>n@%-f z-k2HdzsA2*A9%9Uw2RfVM8G>~w!V{qt;lUe{MVW^<<$a&YuWGgti&49FPv1QVU94Z zT6sl_rcsUT%=Q1gq4FW??Xsb8w%hFaKgT|3l~v^=y4Bggwms|)2}1`LyauX%yRXiz z0iagQD66Vr#Slp~Ur&0K1VGVRUV6CKlg!h99snYU0Vj)QvIDc@=~}C^7FghP4mUDmvd?%B-tE^ey3l7&xVgNPgM2-Zfl&qziF<{o0I zXt@tEiwmCalG!I%%Blg&B(() z&%Z^pwoSvZX(ONA%PnUpgO>A^6xpcy(v~OAQ?l_IGm0Wlaf}IR9$$A%^nRr_W6|Gr zcot(Ms)bB+2LeaKsz&1zszc=AEQftY#PY-$p{p(-L-+O3W5?3YFOMu0t>u9B zYg3uhG+FXTGzWE-^1>lmOs`47=HSm1!OF)Wb7AFT^iH*VW~aRIG10}hUz&^+Gy{Dv zAIHkMF?FsW@yhwA#3-CG8Mvxn;wy7&w)2 zQNeL9Yr8Xh*QMIt6pBoHk}7j?a6q+_l2ZNgwR#{}s_eqENrkV)Hl&^IuFtmHY`VX3 zxqL$j#*oq!XtS$3rk;GmA<)l*GW2AqfH>Xsw3KlnSYR0{%>=%m^7p;KR43K5e}0c4 z^Z2THqeIH+A8^?c`f^m@gb*;X<`(jDmZ4JNC8mSg;2?a5RPkCNMl;%!dbF;5;EXBR?xD?Y9quwEe$3bSx(uJoVWGkO9+tb zD+pf=4bDi<@g8|f#u4+;Ii;@qBT$2P!|X?&k=aX0rKQ6WU!e0CkgBi$4aF2(GOu-4mJP_Y?<^&q0tusr`cPV#!fMqJZXy@7bVqLRL;Kd_g(vvO_GuW_12KNOLLJwis#b!$3n^< zqy6LOz3N87k-tMe5(06jH@bL#YLCSf;`tNbhlv^39d52rWq59e=e$)wGXIw`K9n9ix`W z9urOPd~ore=UragZn?_W9(rs-P(K58Y|4*`dji&gF-lFVic&A8|3`k)C!Q0#r8&?3 zc|!eouk-hT?gwF%APMEXO*)d-WN`GLkOk8$VB`BOqOm|(oP9LiZoogJSlmgD|B8A0 zGktS4!LgGq-Bw@pbfGX_=OB{?-+)xCHO-2 z654E(mgoh>+$@ZX)44;k1WQ-ENqoU)b&7z+kC5G;nILD4R4IC&kh^N}_=aim;S!Ak zENTBS=%blAK(o%XmQ=eHGDV-o+R2& zn}rkYJew9kzY4UPQHl6WBeA#JYG35KGa?+@l8vNjRB%(VoQXG?Wf}xc2}u@uxwY5> z?sQ|-ynfAx0BmK{UXm(BRdvk}T^mgOJ)8!nU*Xwh_wN^ijEO?-7Tn(wfV;_@ULqIt zR5%BuMMd3<1y)n*eT!m`&V-8<{)8B#wY5eBDJikv$47rOsQlwS6TUL!CTJ=0j__jM z^PQ=|QvHJgF1Te)FoVS@icr?7-Y{$d7WeylV+Lh zgYjG)i%+DVczQY@D`=n^9Z>aGi!EWhvN-$CQW}Rf2H)Udc>h4Y0!K1C%6)*X`V&w@J0@PErb3{}{*N6)QD}kFQ>sxN&i{U7d3Yo9B`{+&R0_djm$ z^C(M)`0%8~?Wv*DT?^q$(SfIVL=Nsxi?;_fhyn`=^NRiZUiFueT^IQp`wpJtz6)NMsBEY$(qY(+a6w9 z&iAE1Av_Wwexp9wZZ;f|#T$NZ1^$alkA^Y^@8~O^jvK@>z-kG1`3t}g{}l_1zHoCr z@}*@y3geKLMW*yoCZH&R(mvs5{Viowb#19U<5<*8fy)j_LrCu){--5=4>H)FM)Fu5 zAg_jp)ukAB{&{EZ3J8YTHJS3azEdbLd*&YqWZ`$mDJ>It0-`){=LyClcei{30b34z*JT7vYg<#f>k|sVMa1EZ8n` zecK%!M2iyAmPM8E6Jx)cs}C9ZvoG}P*PWF$cs?sGrSe;Hd1f2JeJCEcpHc|jn6P?~ z77xl^pZqfg{PKE=K;+%owEaTh0MLaPP+w&UVa7nIb5X8gHzN(tqt4blRLN&<%1zVI zv_HhjYCnMlKd#3Pw)6^Vinyf4{qr*iflPE@d$Ldb znh28RP$cg+l#XPE8m9}da(b~E=hu*vKeW};X^b*22YawIs+9g}sXUg!hEVYh_}YbS zo+XfcV2+qvHm%hEb$03l$cv-nUx7rQc-H3I{@lP_i&{(HDVRm~zj?*S26=Pnsfz9E z^o%}*`+uuN1ySRAL3+2ob$h3>NYf>k9WPf?$Pe8im zM$@*iKtM#9w5?4`*mdbqSjuxv`eJ{3&m~ni_$`z#V+dd#&ZW82)O8=^rj3$wkZFIX zlu%cFoRB`@E3W@LD6r#XnSiMF=e%>X3;+7Z$NskF5Jz2gQ!@0^hugPw;SCPsQub4> z6Ce|5T;2uSW_su3fd6a-_g)-oLEzf~bMiUw%h#BhN3iMO^w8Wg`L*i#YMT@#)bf>mD2*th?RO=-*G9gU*nOi($W0 z8PIwH16Y*fltKK@(BtFh|F{fAO6_ltKSWqr5nnN{GDp+nEYBcIX-R(EJRBGMY~2kao9t*^|8~D2wiqeBRHp*7VW1c`!_d; z&Vhqx4Y;j<%bjwE7INF-QArMA}!q@4H5#<-AKbAUD60L zG$`FecQ*_$XP>|GZ|2(9yXSqL`(EomFw+PR0r4Q>+#WGXC06%yxFefv7T&$cvyd65 zbO+dw4h3Il?)xKFS0n}w{jV+U`uod58bBeik;Df*vevVhFrXpIOH6<$GfB zqiiGtIscrq{hV(pfSPFd*i^eS1_VB2Ct_fJ(9n61Up0^a_jakZAx@*W^#bQ-m;NaR zt=#W?CR`@e25Qv4>qeGFQVKL|+v{_(NrPVUOG}z8@d#~wv7b}{#^|u^b3JD2;e3ca znxf`X{t+&2i8>Y{yw(Q$mQX+00THcy6cP7vg;QSJlm5eNrp*>bk!W5mZjkYy`T3yc zV*B-mM^_`08&WNvWKuu31_5WLA>oa@TvGi>exqwit!U&P-IKnSH^In7keJtp{~8Ju zem-;MgnY+|8GcFXXf!xyOWS~9B`>n1ebd>R=g~ow<}};u-CjymQr|qj95y@O{LVxg z=ovF-UMDkl-(IJ^H{@kA7o6B7wcFd3NsIO8!nqfUSVH(hSI_iuRoG1tp-&Vkp+6m% z0Rnpu`tOVoVJ_dTOwbnqKe;qtw{!g=3gCSx^ZBj|!XFlT-{Bj6^jS*M zwrX=S?e<%XD&K=Z_8@vPh5W~BsTz_vxVV=+lF!Uck3iVhBZO{sP8yE_B@S#U-@lMV zQ&Z%vdntk*EC|iM^psbX>1b=~A=Z;uG?W23;2z)C$6n($mzg=kkAcU| zZD=+gICP~%lXT%@3YJ8#hv#C?2 zK9BMtUFQXX5_T)C;C9|@c{3}^*9vn$y}=Ju*jMY_uiqxV4!V=c>w7G%mQUoO+)`Fn zq|jY%CrbL+%(KZ^gGc$WLL+GP2~3QiJVWbxa&k2)_PcKHrZ~ky7GmBeh&Jyj60D;W~>Y;PeUKi{`3ZKc)8rGO7ho#!{;;H1@)KXe+i zU2ye>m*7zPAH)O)J+1kkpAINsa%QN|S+nH7n^vxH*bC`A$ZO&>>b~kMk1FqdJuM2y zmXK0Wn8w3T$sV6)Ck^o$PXyjFp{y)nc|vDJFnHiXLBM2El=GV+`_YbDQrC{%bwOyb z=t6!?U7ar-Lh-3mZ77|aQuQS@g~0I*`x>g0Exs+mhNJ(ls) zX=NR-SBGA9#%bD3kM)|6FH8UAGj}(_&)PnJQw}L_vG6LlL@xZ|V%k1KYWo~bv)N_z zb5>B0V1GbU_=VFPW9sVa6WiR!Bt&Gl0?C)D#^JfA$@ zpJo#cJ&ctS_n0y4S^TH$)tcdpI3Lrrm}`HFAZu^`f4Ai8ER{uKgRz@02NPiBHJ*3S zT+fP0Pah{nE{uwxQW5By=4O&jC&O;W0a+-zw&|Dv@` zaaTJARQD*S7>lK^NTqq8LijXB+Ar=ns^xXSi|k7)ilWH8sO*1)N>?8IFtNe!6P}-<&kRlSJ=Irlfi4HiH`eyMK!x)RLzF4XL(X zzUOKXe4>42L8egs+5a&X9M?Qp+K?&mnq)&j0M%o!VT+_xTfQUY&giVNxufE`Bk)F$ zdQ2Yvh?krsebDk1Zu_STA+$GdlzkR!>5Dn+dvPfpX!0>-@OviP$JNK{>pRg0Er3ew z=HPHN@4V_Ylz-p#w0!&mYn{w%UrEw_8yoqY!(UCBL(;4lRhl}nOJvo;-;#oir^JlD zIvBOSiP4W&fVy@p@J_#uOG;Bx&S*@p=lsbqin@!cw$NJ2YbN+ra2+P+Qc#pLMuH{t z$f=Njn)FD(O<6ZnM%PF#_q;Qp$&~935|OGHp#R{QgF=N$oj4di{Ht zXfUiI0B$LIr+D7O`?;@=Hc@1h3v=i_ojgOn|MuKIMbJi(<@#p_mmERgb-ThKfX8HI zWhIVi8*nvZz04J>w*7-nr%FU_Z&3!AP$EiYd#MW)7T%7Ya7q?J^%epl#1%MXi@ny% zeecrHQa~*L__n|)!BfKZtT>*uErCdQzQIH4$LH)s$)M}iLU?gSCsi2`hg}@N77v`Q zY_4CKjW{w&sV1QcxXa%EKY4%hG1jKqc|fiFm~UwM23dI{7CD3E9mb<&vSZa zE<>flX)F*hY<2xx6|-N>!Yg60=wUQVT>>_YyN0HnpD(AEpO(8)L$34N3Z92N1E#XF zlo#yL$)$o{FEa&!K0vW6p)#{%AUqs^06X2=cLF5KvH=rCk@7M+ef>I<)}0!7*K=&K z112CSkzDdD>;{%Upt(0360Q?R-mbkbIdU&WiWE7#u-oMh{}Q7wXOV=p@QJc2HH91o zDv%X=`OVH%qU3Fw=;mV-6zVf;fx3VFSZMww4AS0wDpwx-$Y{Ry<@)r^`w&%p!jMj< z--1w$tS;8f&>Zj)bD7bs?rmY<&EZ~r?#v-cOjfP38-LmHbfX$a%%wH8;qaZ8Lr%eD zDe+dn{F}mnr$PV+@Uy07V!vrbZz9F!Jm}#!YNXRgef z+}E25$;^07{e{j>k=m}U9LKtzv;F-7zy18S+;WQ?AT=R%m5L+bf0EqmpkjGgT-Ks~ zn`!D+Yhg5^r=ridDP%sC5C6As{(nwC`N~Ra_VQCyc|yU@+CJavd3MuZ0502SB?HT~ z>#?=GN@3(voa<5-Q2x}gl#(9+YG3Mj7G9FNbSw5^MyG=E1MG_7yL`s@fZp zPGuk-?SZng*BukNF6}P`gHVpSn+RMNy@i&wkHb84N{9`(#u<^4R+;CtYfTe~ zVF3g~mq%Id#Z4m|PGRtUuz*VlmjTv#T*DzeefIP81ZxA~<};;fY?dZPGbc)!*v&Tt zmup*%n~zRzEGj=2SvXkbG}CXktmh7Kk+P z+cM~t)o04#KD0a}$A?xLRfkJiqj|oVfIzRT#`pGPxQ&C_f-Rax=zulk~h*U^S!p zioUq3-A5&{kDAhZe?>?4NdP&Q{;|6yC;SADjR`Lk~x+yfxX z02AJl<>mI2gy`l@DlqSMlGUW+>&Di4H=YvEh5l=ado#ZsgXWJoCh@~t+W^vsGrg~$ z4tW%oj&tD$(a{PoCF3`{^aApEOl$(tEC7Ro4%uQQnn{@lQkwMImuadUURh%PRk3TT zKeP*@;qt#)w!MQ4H8~xTyi1v$htUx8@882<=CzFYv0$Z?I9_>e^2jN_quq?kmJ)}2J5T0!Z2X@#W=X8vFAw8smE)TZ9 z`(<&&P3LY3oHW%%b{7Y~Q3m)QUg@{+^G602cowLYm8K;)`}*8~K--wZ)Wr+tAwZdH zEY4o{h}6Lc>g;c(4#CqK&J`6|7%vdFd;J<2{R>EX+~)e;PzveHvFlra)Rarv-}pK~ z3&sc{aOqb}yQ~2v3iLh3BQb9|V4MwndaP(K{#W7ZXsD?8kImT`>ax<+S`*^F@yqXa$rayTaY@+CG2yFdz+mid zOsQ>JY~H0DPu1t6yIO#2dYfTSMDIO#HHe=FI7m`j!OZd{Uh9v&BqE;=-b}%rM`z7M zTU{S5*A1a;j|Q7@tg8*D-hld|D|ny>cKUC%?%cP!2Qd8XNqC)qsUH zg{u0Y@oXzdqC=&t*qvf(tLw_;dM^CS?S$}QPBXa3exp48_~RG*`G1NOTWKne3pHz9 z-io@a*A?c0ORe6WtTs)y-NMJ|!r)PCk(*HNlA-tUTTfWW`XyL3Zh&-vz_UA_J z&nudeuMRVNHQ`ZrneVYEg{{Y0CyaG?F`{)|$uD*KJ!rt4*=|NV|VI(1ZW_^8xU{XjhwhWcx!BHgj4BA!)*cRvk zuMc}x@5SwsX9VtJLBSA(U*Mm5i>0#!erQcz`~JFjJeEP#!%`O~@MkPZiC)Lw@^t~4 z=fCWyNbWtHJd|HaKW#fgB5a!(7LLkp_DT-wxqoE@G(ZPQzmYOIOfC-@DbG94!;rqk zrA%i77^m3uvB-D%;%52ckzVTIU{%4B0wsFq6_-kN97^t!6IYr7JwO?@21)oUFqF&SA|mrm--( zdtxWWYiMYpUP$de#|e47rlhP@w*xqCSKm2%9f0xRNB7%XV8R7v0vBj-r%?j0n}&Db#yI^k16D9gnHobXxI8z5IVP#olieD4@~9M}3rrEvi0srhWzdj6jY9=%`b{G- zIJx?XSUM`#!!P15f~=L$`Wu4GhRTw3zF=gyQ<%iR|AZ!4z0HVirGWyOwIuGsc-H=D z>QDF!frxQEo(Tn%7zpS8Dj>caw?hLwm8m1M<$HiiCLy6UhWBoAmVs=D&c1!Dbj818 z!NsWC;w9%UVRCZ-MUYRR#NhgT-#iC)D+YPD@JXJqKE>Q=k%GB9erNOnBWw#*a+t(M z@!gi3mTsR#oU;HyjAE+eRrRLw#pAYX; zn}6Vv2S!A^ASnva9GZ<>=;j2^Ml-Ksl`)3s6K~Q5I1+h1{2OHSF6t}VzGeGpKHY_7 zox+bdma~-iKQ!q7#u+NgZPveujr&EPJ`vM(9Aoe$b*tt!cgq0Zxk^-LO9^wBGM*bF zh{aOEOx_X168H(D;>F+YvE5U)c$-efpUO|0bDXu`WE_cF6DgiRKg(vRfHF9}-63oe zBXZ?M(>hjpmOHw+sJ|PXLIKJ8(%QC}k%gY~LYAsSWq>dV?Dy|8yYxv)!$Dyf<6DQ+ z#x#u&5>0K|B=#~&A8a02IE+Bu<1EX5o`IKaQw$l0B$XT17k0BnSk2ON59;!HTd04D zwRSKR+udH1vP`q{5{402SLmJ69S6Dn* zISAlV7Y05600dY$<(|a|J(7=~`JXysP5i9?WhBGMq*={HS8)rmYie+%oNW;x2_#MAo zkDK3C$IpUk-zicAnkbif5RojrPmPXdGP^VT^nzN}@#x4PxJ{&RibiS0hsbdCELG;L z1$G1IK;1IYwc}8B7i!Qr%pGJ*w_8M>IxW$_O>*#3BcZUcA zp(|~MRCh8HG~(g6$|FRcyJ6gWE`-OeTMggNgyH?F07redWdZsyZ*uNA$!7*I9vg&g z$A>SsA>(<%-ihKq=IvXZ@^3O-TpeN0W9@)7Sod9l+Ck{z($d=MG@oainW#wTKIenN z3?H%=S%n^3JhA9gUpUS*aha})iHU)dT3MPfAV*yDJ?1w{O%VUIu>qV&l^F44+#X}) zHIDNxKWpls&F(>lnjf{>osF||awOP;RLV?cgW~&d?rJCR?gUD94$$LEz2qyknBpiU zH-Ae)FQ>oPJ@0NZ9vvN%51}ysUduJYx67(hUwdAuR>UOnTGr$o&e71d3Q{yd-Od9= z;>u0d)&07;_gx1z$dZ6Imr$UkHSJ3Na4~^4iF?RBy0WOJwx|Ihj;nLb@RRk2_dzqCaWP84w;oQ$DuQ_C~Q&X8Hknmc> zRi9~fat72fydVHW=5i>9mSKbNJ2aR*l|j>}(`9>9-?0>=Zm6#=Tb!cp;A}s!--t^2 zYri|>dF=0I$$8hd@BQj^h12@9HQy{#d*`NCXJ^)& z(NRI&w2h|v@^od}F8P>fdDNh5@3aa*YLw#Ph4=ym3~y6pP=FS zHx@8g_2)S%kZ}|}ZZa*RRZi`0V>`1hW1;^My6co*ZwW7Krb*Mea$-DRFy!vo)p=!p z&r(o-b14u3q@(;2O`Gu9$tCZ0)KS!@xeBZxmr_dT>}5h-*2(x@E}ro_*$vUBivwa3 z1g`k;xj#mX23*z^p>!Br<_caRs8_Qby)j%m*1Mx|0KLM}v3 z=&U26a;swzEU7y9173fRsMH&;9TwkzPUMXHX0QuNLu`^FiiX+& z)9N>e{mpE!4&q0Q#QqLe$+*|b)o%hH?dp)g&;8N!i^NM3m!ghlgW)U`_ANXEwJ}Dc z>kbdnr6|}AZ2tNgq9~O&Mq@kHc81nBgD&^Aonud2%dx+r-h96smu7n+0>={7_PM3# z`|Wb9Y*9su@uF=s(Nn0imv9|n(O7|k3*Li>e{}8_Z42q3L5TKM>Se{Pm?BH;jp4yB zbba&cxsgfHN;(;_^5WUJ$bee1A3b@qoZUq7>E?TAYO8bS=HYN3`vUpzU_uMeZG(AN zJ9$Pq#K3j4n@GC%92j?)*BM0$NHjL7MW$sI#ARMAegLbFoZrVopv?-BMl1+*TT9ds zBLM9MU)sYGd?GzpR*r?P{5~1Vl4|b$QN#_!;q0Q08wR1h=n6?8hJuhc2V`PG*GH0o zW(p)u=W>~qqx-HyH9o~}iD2ROQ1nxqy>5a39c5wglRiT}-G=z%NkmNQ(XoRer&-=; zDKK||^h&-=B}%}i-Px+Z#x$23NQuE0zlYT0)rWsE=d}PAo^FShaz--g6x<|kI%X-1 zZ=PpD*j8$rYAPETbv4!8D&;_n%L>VD=)JhvT3ka%6bi5w&dcd|vSBqK^o#`3ChmI$ z0gf>@KR>v>-p>gisxf4%C{vRuw>$YHir@b_E?7auKDj@xu7d+3U)}6DD`Tl7B?g0< zCzrvibfD|3A-Wp@Y`rIPUNTl3bIMus5DeP@HHO7N)c=e2|Ar{c8of4cGC$q|I96*1 zM}ny7M&bQ-r=F4;=gbDH^KRH=>s@Qp7k;7JcES$b8K z-{YL{>FH?>SP4XphDV+Pz~9|Rm4QT79{UMxqWIA{{L4BQyZTHh0-n+#CK=af2t|OZ zy}-S5wm=XNS7jY(CAN$6Y#SrCRP`)`y?U*zoCjV2Kct8HK8TKfJFi+SUBg1aa7K%> zENwa?wuYXMzleJ>cCbKBX6_w%vbT@-M3#hS;me)y%>lp@+#AXja8hBwmsyOWqv62} zrz7(|Y3NkT(=&wTwe8G=gtQusBDRa(@bFg^+bqn@_uh?;>6TCYI&525gKw0?dCF`1 zclf7N$$iC-wA{?h%v)GoTwI;?fUWs5o5mG34^5YiDZ2srsB&*#-#Kd@U-;(yyac=8 zTHwMpXBX3dOtG<2YTCbwjiTD2uc+oh6J^lArVR+G3$)QWx7Lx4jtb!HJBzkzW(!?T zcAis;1o9=dubc(&^TVr~99#OuE8Smy+W7PAaxPER0n7 zy-sD$-D9SCq1WgkJ9|*d2%jMU$U23N!xZMcRsa+?TEI@$W^dwli`~V69y@{i?wFs&jwRM9^vZVYUgLbA6Osr8kY2^8DCl zLG%5Y>?5#>HV&B*W*L~aKqzX&(lZ~YLI_J6&T<3?2fTQrlKbyG`<8X=->Dou6JWl#&^Um@e*5;$U!X!l9&omn*eRb3I%wvy6A3i^ z!wxR%dU|=sY7bEHj84P9#B~w)8p4NEzHZ3^B}N(3l%VTVm})oS!ZAUI^LoI)FAC$L z@E)Hu*@;*LedUmYzIGJ`H;ce!mTEM;xS_q_1MIT;Bcce5-_boyO<9O~PRU352iw#* z2%QxxkN;ACytP`a{psLpK=ys@j}}z#Pak40ZK!W@g-t^m)9m0??j~)Y(G}eTj=u-_ ze^tqkjCkZ>m-sY>b1EfIk6C2Nqv3;A7`;*D@xj8Vs zI;AjK^b%qz4~O)g){L)5sYHCjB+-WqG)nr~j?4I=9is)mP=&PQjrV1ifNQ=J5^ZZF z9eIi_oCcP%c<5vtuv*E>Js`Pbyb!kqUMXRIh=@L83)XzD7ED3Ji0N1AOgl>!Xb7Jv z#g#?DS@o4fd)VyBh5-VI;Ogptml1z$qbbe&0#25V%rF z5_9uud^A9Bv9-kUXk>_t`_sinLPGrM%Cd&|rkwh=%e=>4b5$Pq)Z2K6(n?6UQWJ}_ zv7AbHZMDN8^NA?UJ(Du0Hw(ZOt&w17w|hQ`TYd_@#lq_Cxyyl?`i>Awitnd<4_R8& zGGtjYBhOzj^&6@2T}@Lfe-(91pmHCzmwXvR@&zo6(_EM|T6!%dtgua3Vb}9?h`Ik| z*~07f=(M~lxuVBpmlP6EFJEZ|cG1JY1!g0f7CTu7F%0ZBNwhuA74L4Ps97L1!r?^O zHdg65C0bop24tKft2t;x4>AeO-L4MpRv0F;8sM(39TrE;m;K4vdd3U482fo#}rnq=v+>qel^{LmJKC9lI*99wI;;?9bZ+>ubsGQjX+YpJQ z`!jIzNT~=1ukNsNJPLEwvakTuT7CT%_Dkk=eGAj0> z{XTg*BcJWk9S8i@DN9Wd7c~3a(mi)_86=P_r zCH1*dSe!{zx<;N!(9lrM4Edch>6c?c_SO|0buFHTG+0hVyy%!r4rP zCV!*Zgm*lKUAZ>P`&gMIzy(yE6D92Ru)#YiQey51KkPicJg(++`CLgL!-PSY078ts zPSJjT^phlQ8Z%4SJeS}_ z=v(tM(&h&VU0sA1KJG((a=EYn%3?o0a!vx~6E0y7phcxFzhi3AIg#gc%Wp{Tzet_n z%#z1zxPs_byK`Mu*K5oLYZ2z`x#;(tdc9r~KKJtRVa6boF={nq%K%&=?$0qpS%W&% zxvr-(R}WSp?MKVso0jsNg|S*%zMX_Z!#9 zq|h@VUw%8ev2@2|46fLQSq-!p@$?;LF&wP+u)3@f&x&axg{rcm;Nf~|on@9Gao^m_ zl9EI(GU_s>+ns-sIKp5J+6U3ujxddc4HHBvS8RLNdW_=xaK(=e+O!)h@4zZ*KaCKT zb@W@j7)lsZ!L=2Ku!apvzzh5%33K&Bz zJh%RfdS+&1m$H8M{z&#aPeCXp$XDC=6O0xvi^**$|Cf44K>qLowfsELaO>G997(~F z(-q=hWXPb1>RS5uss~`F;}&Qs!MhqYCM^<5I0~Z0 z4Ph1N@y{>DWvqR|5ApTNs2i(et6PYQb)iXiBSR$zg}%N#VUY{* z<^L=c^Ltk1gx?D;n7=d?zTBkgYWQ95F3eg3yJ}*ZcfL`q+%o+?2E!ars`EnASf0T< zfQCWv)t0Ms>zjQtF76k&3VOmena{&!qWHD%CYQb{KOff9i}<~8!r^3W_x5C`Vcm)l z;DgU8$DpPWLV9_xzjiNaOb-c>GkJToeylhmAzoawiOSo~cp!=oFlJxeaIoMcV4f1wQr7#=PARdZ}?|lw5AHlo1t& zY<8yG?iRe$7gV56apb|n7DMFTUL(vC`E8$uTJP|Gz0g1s$tx;zwuxd#730akV6mc# zy~+G3B2;E#D-7MTB!v+wmN^>-esK#E0U8zH!?F}FVl`z{=aIoxjqupdUs|EEtSb@s2g>>~iCc?4MLPR&;eU?N3)mla(-Jw(>mXk{Hm# zOaGgeiHa@GqMvESf`oD#K#dGjm7ATRf7{IA|4I}WY=Rt7PGlEw#nSa)bc&m#j1F+QwnIPrRV=8Cm~OV z4=TwiG$4b9$UJ8&wZl~()q%$jq6n-`pdVb7Qb0=6|K9CZ^-4(Cu2z0~z1jel;nojX z7L55`N20DFmCUhjc`SUtvP2fEsO$C4ptU)Pyz%`}nJe(W6&T+Wi+QBt9?7&~H2vGY zxmz1yU-sSyVETp~ruR2;zCyKwn+q^L9L@Q`%#YU4b;=x=8ZyrjHw>NmUg3S=(L(9s zRS7g;_3>9~!w>#lUz6cT^>s8v$-fj`O)m}06g>6cJu^Q1+A<_KpqSORfzeC8YA=ak z1RngL-{>W~A0A+#IsaAoXZY))Z1hDRT>9V2oRx;n@6ZEv!HswJ2BBIda2+lxS&@1t z*Rw042ue1z-YClSm-xm}(!k(tW?PfrtYf^Y$=sDM z!~Cup<$fxhGJK`&P=JDi9f*nbit8I+R>@J}2%U0hV#n@mN>^r`_M^{C4mZ1FuFholo=Q zJlz;=<)YANepOqs#$a(Iw(Da$$q7d0llx>;5cj`&nq%{;`nfk0>AGCW-VTBAX84)$ zNxp`w$s#I>gnnLmZ}sCSTRF7?aCzsxQpGE)#*G_gDjIKit8tC~Aaj)?!f)ne%H(c# zu5QsBd$=r_5{8{*Kmey4=pPdSK{?tcCfOo9W{BeGY~=QQVR=@|HBC)^6L!*$`ok-N ziw!nRiw*td4&Y&fES9jh4;FpW!VpF{);-w*`hJA*XB*Ry@LDeZEs`~?H9i(f0JF%V zV)yJ6U*D}e3euW?!o-@XoIBPOIee%s_-FgmZC%L9W}F;3|4 z&)eP)jmT)R?WQc*>sD>zcgt3SE8|NUEwD4*f{?RAJqAFYW4`V^)a@)P@=m_W_4DV? zPEz&L%-tc5spa;EIeIz^DI>@TV?Oto#Ea&-1XOQI0o30EfWe*O8b^3BnXg-8ip&#n zUS8+5yE~n+7M%ptvRP9EJ$V(S`(jd&YO=cE;CkfnTuaV)eV=s@Fmq`de(Vjlayg z5NpvD`H^~+$h|#?RiebxAbhgnXNuK_Loam|P4ZUgYov^H(uVb^gy&PKa;hUKPfj@# zc)6t};9~f*17owY1@MFLDMNCKIN-w~anR-ptIfA-TR?YDV)N5(ixXhpj=hAwWt z-~3_8P<(YwwR-vO!mFss{?YuY$#L#+RzCt;S}R?^^Mkgrj-a~dVcVFVx_)~jya$Fw zET$#YI{NA9W(2^epPn6Rw+nbJZixG=1U=mxCYZ^&O1j4A6!=fac=NZk);l^lT<1St zZu^eRGLSbRC&;&6&hTnDI~+B2H+7fPh(lBBlou!hHzah7FsnLCf^MRv@7DwNFYst3 zU|ZKFAt8pXow^n$2PFwalI}FZOI|EXvwF}}RxlXfNm)5%)jQ55%|Jy8dB`1f@O(Yl zeXbcYe(NNtih>8UEdF{fS?cJzc3k?)VGpYfq{+}|1(}r>RZa4!mDgL#EO{@N%0oE- zSEZm@{dIMYDBhe5w-q@>9LdJJ3%1gG(rnz~R)O2+kdIj+_J%91Ko?U#zqFoB7Okjs z4ydmb4;4Nf_sc^aa`tRlM{hqydZ1#yFV$9SLw4@Vy1FrR{&P_zI)WlbS(m=}g; zAN+|QNo_-4mMI35M8_S4)xw_&i5I>48$MIDlR&;=47+LHcy7w9GrnH~pA%Whon+DC zPzpF{=~|r*X1?&GPFCuW`CWuv?+4E;&6QMwP1+Pu5JF2s3!;TF{*m}m{^7P?w2r2E z|HI>0|G&?J&wYO#9!wKAj;~^W;QQ-4VaYcbXz}IXrq0F=OB3gKd`NJInW8UI2h-xa zCE}j&44(UAQl|HkNhyT({jQZUdA|B>PzNY#G$P>AzR8_6bW&7hP|^B<&8@fQ^BGK$ zXE-?5eobN}BbB%;sFge{Nd$coG729+|GnhYtIUkNYVikuXJv{o`z3LPT?!iew?{YgJ!u4j&z z=eBS~=P_)1C*T~jtM?o>3F}xDF6!*)=sfZR>;7eYiyjxKy=YF=KaKWU(2nP(Y)kn8 z3-g^$?-T2n8h2P(d1ReccRZcYhkg{5L+BsKI=*%}17^)Xu34*jTN7AmxTdz&47}Fj zFAwfGJm0wE;XlJXkF+mH_I0eb-Ot+8GxwI-snFnmTpp=6q!P+4^$c+(4TB*u)zrp# zXJ)y>yqi;qM>D*=e$ z#B{sLg6Rw68$GWP(*E z#K3`|Mm(G}&wa=f%x~vpxDPDjg0HHeb@OBcd}-4~es7YcFG`jqlt+pMnEzvdqKin^ zt8Wpqa3*^V-&U@x>uj0B8L4Tk4*VL+T23W>*PqkFdlQCX9Sd04m`<&`0y-k)*|38F z-vptPgR`Dsh*3RUOZKLE-9fq!R8nZ6>SF0B^P&F@O*nbwD6Yapm6`9Yja{C%z~`x& zbbfA#9IhdP4BbF8F=2sjdO`JwrZf^RNO_92*_*?x=U{~~@Vo?va4{Rxo}7uLc?$Oi z+lFMXnK{>~WjCYu`Lxa_Puy<%iC**hyo#WDKJM^n(Rwt^xoy?*If7%iT}1_wJrBx> zupue0O55w_V$bE~Sc~0PMwT|l7~@e>O*X977nWhjMMWH{66QBlrAHQYQYG>U34w;= zh}8!U=A5=J*+SyfZ6}xi>|qjf8g`!*e4Lro8{7RIwqDb^_CBphx(%pse?t3%_1&Em zgyNrZfA0g-6v(KiJiCqkKtvt<${5CwW?VcPS%@+c;n(Ig7j?ggINJSJol{d)Rw@KH z5M9d07G$~7^hBz3FRT@?zT;PuavML5c=U2I`5&cMacaSzzkE7+zDW4#M=D3a# zc+7cdvwD!XwKUCK>$TEDq2ftXHg9VDcvDevOlUlE)?31tmQ3gG2 z?th~Q`phs>+j8ue;6ac3VTp}UAe4cIDyFYFW7*TRq91FLXh9`qetek5Dil*HRVVsj zR%JRJQ#z}hwdzP{$w?r0f=B^D3zTF?YM_Hb9kGVk_figfte}i9}&PcKa6Ub5$>qKeGc-2A~nVV))77%?&`G_79E zf~b_>$438!L%OlIP!>bAxb5=zXy`mLNfz}lx9T#7GBv4!ZFCF5N2A z3=4vtbnl-B->(4Q+kW@%4od>C3Q`6Nou9U!b7aA@vqzY!iVJe$jtr_>+_#4S!F!1K zUan%Tc@tZqD*}ymTqyOA`B)`KtT<}Iuhg`Ki@5F_d`c^P@O!QLFXm!&t1 zB?=!oiFj`=4Nnwgjx%@!8t~BLN##(MLg;ynHgBwU@{qXXyw~fdV7r{b(#A`zW>p3# zfbGY%G3HpP+@{93{i=Q-@ne^Dl@0MF_QlAL&;2JT^CZQazp2heG_?dl#N-|M3Ov#V zX($;MVI_3OhANhoH4kgJH&3?=5tV7*a6}G5t6x1v_Dr0NtMw4OlUskTcHD|{_TDX< zxQ@Rp8{#}eHqE`OZH6whxR6o*TIb9Iex`tR;75SHKF2v9r*$rbiQNXXAXLeQ=^{(8 zKNAkIe-+FX{geF3Iqg-cihe!ew;!&EE296gge&%%;y6tND=s+lC<8T-$Ibyc%Czu< zctnDY2F|D1iVK_3l;PnJes4x8lLnZ^0`vSmiBf2}2s4S4JXtA~6aIYkx@-S9DI<)( zb(UenM=qFj$l)liFVnyl@n`v&<(BO`ze?F<^;GAAPY>B4nzL&~2XXOU6SEabM3O4D zk}4M^hv9fy?tHTu93N*T6si{FL{*_xu38rMsp?d>tmD-mFubji5#Qu*k(qzdCJMpi zUmMS!8#6H6Num(2kxP3G+jM*vL^7y$lrvdb^mA4e6s*O`EM6F(0xQ1otgntuxw+NymbH^IrvWxMY5Y`(&gA4+KHUF9#hdG%5;38c$Jf z5|r#7^#dV0K0@%(}1?2#Kq)b*>d#V83l^-ASMR!H@qXK^3{h!^U)Iab6sw@koDF zLOl*WVK~{M#fX~Cv8>quM1tPzLCkH-r4FKt{8VsU<|;GVqy4Oe^Zdt>a|AQL z!N~m{N$8}l{-QQ>%MJyo?^>_yd}2fGsZMb^k!oY z*%IC?AUBuKG&H-3no-tssPY!iv6e9W&B2J&lG2IExyKuo$^A>k=3N4|ywraP&(7yoWVUWdAX|;XjuD2Lw2BrzQ#a7x zh}|tWL&N>H1PTAbH6Qlo)<;(3Q?)2h4Y}nS<*GaQGTu-yU&tBk8eIyFqijmgDw1(Y zyD!huUUp8_sF82^hg|#iR%wHx99<4gH(xVpvakFAXawP_5_ZIa{og%OKTDaT3j<3_ zf0FfC?yo4J1U)HPHS?xUlDYq+J=73MUEU7H+m+TSDif1z+T3UtTL&*$xuxb&=Y1yY z$=N=T(t3;!WZ+1E`YKT2t4FBO48EJbf@?Gu zOI}TH#X=x@;z&}1E>d_Pj;fUsxme?`oUaPui7I9aU!ND)^}Tw*JbynLMHF6#0(ty} z-4|Z2#KT`oU^yZ}{NuFrq;wgK@R;1g?}#q~7+)nw)Mt-}k$$<0RfQqaW67*8KO4F4 zyhA7s8*27KrzI}Mt8P<%zghCoq`g^%iv*5l3A~ojwzWF4wSS^u=K7S}<@jVp?J$W5)vwBC71xgqeOuNpVF9JaBu9iUtGvB@ciOx!pxe!0I7yU}ffu6(Y7tDQ) z`a>{sudz3J3ocFU8~g}WGX!F*KBNn>t)z|0H%Uc+x zrFMJ;<**`Nsg+hYFp~+Sk`1fUl{m$VojA#u!7_u)0Ht| zdZx0Mdq(M~NXaFr3^=-WwST!xN!1i-)f#?7D_bhA$P-19gpT~j{VgPsSagz)T@E+u zuZn1`>Ku#JS3b8JBHrj|Vx|avX2Y_QQo4aj5S0hE4mA}|l$075;>0g1OP!8Nepv_+ z2DLv7Meyf&0e6s&M4@ydh{y^N0hA3De2HHIC8H7GB5p@*3?th0BkpavB4NgPVr$gQ zLk0VAm02PGs@k)E+GIt|`+xZo-R$7(JZ61`HY~)&k+lJ;JqjTQJ0yKnC79Nmio9E>J0aZb&z6I0@2#5t%NC&6c z0Wk)o6);Yu%2me~IY0}nxepAuD+Hz?5$lTmOJsLqtCK)S5oS*ep^)Dzg%G9TlGd7} z`pW+M+1V^25MfJeTOnT{AO=LCqpT0M#_Li7cqNQy)-Qs9*gU2peyKuZ{4T{1 zrtX#Ga8{_41p0+ALgzDnWd647bKjr0c*&C4+i&C4sy_M=j44ir0c+Q8xaIac_uX&5 zuYK)+TBXV;*eih;7lu&I;ObRt06++#wT|=DaWT`7J|Zr$*3%_P(or9)r-($1RDzSh zQ=g19(i7fCXgK9Ea#fhpf8?$rSQV4cL@wCOu?OiTYawbU6jp3<`70($6(`Uv;W(Yq zrtGGkCVgik?XS-v?Q2KpDI*TUG`7m7A0}cai6#vJflT~amt8c%SC1m0334ATs1fn@ z(61#k8mTQcDM%n?#C<3kuxPmIiC8lBm()MT1|w2pFflodqrgajF8wzpsBJ>?;V5fj zdDa&c64I}I5sMx58b!aOr`xF6B>QdBAybu+l0Ke)oa*l*x9n7|!TXf1{NO)Hr-1cE zs*|rS;nBNYqY3!GULzZ=WS?uc6L^ykMmS^@liv9Mmsi|-8cbJeIuSO1DVa`F$rBXu z3n=|a&D5`)QLE;Q_8RgB(GW2CCSwSov=#<;T<6xCZ`ppkZ4N!`=)r*=p#)ge_TGIDrIq$P&X^-5M?~aWd4^$CE4AL9-ng)-;>ETWLQB?Iwx-Ic|1-FiZfYZJ zCpJQZZ%8pp3InhzIQdm0kDPyH*)C%uIX7IL9eDwX$Jm3^RAxWtTnl&|@1n zZZr(TpOY3+nZS%jQ4dOF73Px)t5;4e}J zKn(0VBOm|;gg_bqmD196xe!_r0BF+T8NcYCq7xw$!!R~%?B2M3!2=AR%zq6hb=Y^H&YX82|-wm4MR{XP}h|K|c~`zk_I{6p%2`vMlK-&KYBj zF&?a|MMTC;#;cX`=Cfwp_^;~$xc16i7(fB>CjT5+B+C?LTS0o#?;xJ*0Z?$Tt=5b) zAdLXXP-`Fr1|(g{1u(%#D*(nABSZ#Kgx4SL_JKY6vpNv~v_IjK0fAPU5P%~Pa?Uw3 zKx+gvG8~ahS2N@aH7Ny}YmX46VOh0GEtAV?r97uJXU83O-f4Em&PvbIT5&{!GsaQ+ z5eWsktj#zlWKwEm2*3pAz%&sk0w#o4lbmzYHmjwol`)l;jw7=9jFyVDHcYNHkyd_9 zA&{1uKym;;@I0*I zv{DEpIC+j_fTYw=spNRBX&c(3;_xtX6b2`)TU!g+Y+f({h}<*?n39AHkTKB2ScE)? zvgcnA@QV5Zw3j>{j=g{(>5U>$8iBMo6Y~^ zoS(e>+Ux#?USBxs0L_8HNDL=MLhH`^XmACoL5~QI#_+j;DFK9G245HcN(dg*!t&)S zdwY738&Z-$#t<}-mYOqEp0{|>qHVU>7SIAjAf_b%g3^@F6jrZWzj(<~0AP$OtwIr) zf9z$`C2u3Cqt5${@_zl7U+xN7MC#_qxFQWgM;tP3Dq)gZH?XxYFLWY_=G12-$eN<| zP4K`7qll?&8%ed#W{s?q0Ge*U6uuFmulf-u3d0K_Qi9;-2<;;^ z5R*1ciO5PErKlTfkC;P~bix2(G+F}TkYf~FPn9{8K1wCDuF+AD5L8G*Zx~Te7)=gH z1S9L%PGb*5gpnCtLQ83mklHrsOI?jzJz7>X3bTr%cPYt}XNyJmQlEsLE9j}z(1Pn6 z5{9#$>UMOfyP7wxcoL~HgwDzYNCuOdqkrY(YoiHv}Xeka30B6A~h{zZb0W#lgp?_joa=93S5Dd9d$k>J< zAZQ7siCDmOW0xWfzOlErd!UbqkO@SrmP&@9Gr2KDq`b20R5d7u=x+e)(?vuEhe z#?YTZNpaFT6MHUMr23K^Tynla8W1jz`5#1O+p)98WIRLx0d- z0RS-Ow{{bmFfFTdYzKt+XJqdjdcqO5Ax#(=-(JMPHes0)A-iyz216vEf#Ko4zP`>e z9j@zqzF^VhDU;hVkgy&27=~U4W8uS+V!9cM=ZwExCwcci{t)@(w<~W|F5Q(B@jJq|rqoe)glTMg6 zZMt&Hf^#M~V~jK~ZUGY+%g*L=ehv&!Ge2||0?~%87~}HB=rArZ)~S;kcU?-k|N5#& zfHbJ91IA6%(hN>VnMYcsAnm4zv3><*0+~>hO1*op=UZ`NVbm!h$CpK@2~-j1{KZf$ zjUT>LR!x&?WVrxADeEUaG>jnE(a~i35v;>RQ)zNVImC4o^@~(L44YnaeZ(duK^z+U zT<~#|G@96gk<^7aYD~v3aufTOTw*X{MhOU6pJ{ZT1*tT#u|Y=ZkL#pKq1!Kc)pf-b z{!2ELw9rlO)V*96Ye>=KrnLeg?WZWs=(XtXh{hcfufoX9a)fW&$lp-1kKqP096U1rVB@1)g*rBQy+vFVJ>ff+J*-zz~gz zjg)-TmjOfdq|6J3(GQ9;jJho6yi%!dzwK7%{QPGVCT>zJ4slaREz6~f>o@>p2sCZW zu(Lu4DU}8yMD3B3ni+=lJZ2a>@4Cm#&1QO@X9&T7u>i^YWCfEF`C>&rJ7HZ$Qd^z6 zQW}Gld1^?48sDmG$-$RVXZ8QjzyIVDPwp^#=UsN&Yp;C|`Nc2KU$t@#x_{#!&ebEs-|WWlAGeVWQmzZJm-)!zi7UeGGg=unzgZk3GF~*)l7e<%|O& zAcJrtM$RCc&1UnhnQRUbHE0AvP>4WE8{8u0{^Qzz&j0vRU-B4!hk%X%lv13DTD5k; zZ~yS{Lw8%2K&I`SxoFX{KVSampPh5gyYIc1&1Q*^2$?@^9RU!O(uh2pEo5?ee^aQ~ zItD%yh{&|fTp@3mrc_F638ei6a$0MzCba^_xRly+B_eVmf}{u$P;hQ%vy5kvnF!pI zkv}G=JtD<9w=9csCOsMP1d_qTBGSMZ7lz5WsVJCwiin=;m50lqlwq1yreNA8 z<6IL9_k;=SM3a`9A$MGIq+&vl(ppN=l5wV71sW{V+_4nUTCG0v z*yDpkMPXQ;s~KYi;5rI9tCT(E5dm%3*yFh#V@yfq54Qp-(n>1{pgG5y=l1p&k(*2i zt^5&WOhzzj4jJCkL|r3{;s)B-V=FXUU>GMNklXr+US zCPL5%M4E(QZRD1>3ZvE6 zzV@1{pMCnN{(*jB*`8C)+UERuAAIY$6aIPAU4~&urL@+Go&p4*wNJ~TyQk-!ci$!w zrj?bRBt#~-l!_w?gAWW27AxgUt^h(vsTl{q*CS(2RS9NpT)+P17heMa&y!mF!>uW* zmasJu7#-1chL{qd!Q1+97Q>(mGT&SS;~W5fb>8_0?srgcfB&=3KeyXXd);%}-GYgy zpMK`_Gk@^4gAW-P9QJ9Re{ym%WY8#K%9Mqed~|>k;QS!=AJWzU%hk=|iCtV>shenq z!UTzkNCySbK1-@SPi|`ZlhLVW&LC0PI5yEBWz^0Hh%jlh5+1inYl#!_ z^^+)9q@^ZgF-gdY{4))OG zp4K%XEG1o1N=a3#IG*RZo;!cuN00pX;l)dqSQ*QYcp9cbh=|zIe&fTBU-BpDkK0rMm5oJD0CqZdw-O+#hrb3zZm%rvMm5BXg1M@LLH5 zMlAeaWD--YD|!J!`xBdQS9*qF-hbbJ=Is2HyY9MQST-`Ql-9spR|+9&HRm7KUia)7y7|&$$pMSpa+JFAz z{ke0wnfE-c{LP;LlqZ#x$ha%jhK=j0wJH;a)|wauYhndgihP`2snw9NY`#^4W}I<@ z13+ZxbE_}t6f5QL<(1k`|918L=HCAlzu_lHZra=>Aqe!3`=$!pSDDF(;|XM$(* zE&sat&aWJJ#Ls_m{=iV#%48Tre=Vyb;)c0lWB28k|K*;$@7G$IrlCobRzyk@X;Ml_ z&UsJo!0mV3`@)N_C=kLlwe*k_X_BsX950)1pEvK5<4-v4$RkgD{q?u(j4cc!>d7WI z=6^Kr?z`^#iBU)SGw+pRY;)YVEwE9E#2AQ`6d#FNh+aM0mL9ew;wH{Z&* z5JCXK@X%1HRAihpVR~BJb=SRj-g$2}oAspU6XS$4!Mg65K%9XAp>SLw^otb2Sb)Up z`Xrd~$tv?>i--Wk1vf2o$%+-npLEhif4WQqZrIpcD)s;2!VB;C_igXIGuKZ!$=f4I z8bDG!4b^`w9(GFl$2x6>WeVcdgb`8o%ZbU+*Wlj}+{X^53D;stCHnI{{9}^=9)0Ag ztN#4w+i$&f`SRta$&_{lW2;xM{pT%rocWV;zkB-WAAImpp>+(A1|1k@#tbej08r9L zxGY(&2;%t5q%qlOF!a!&O-vO%A$#ahD1qcK{YnTHFi5unH&B#e`d(7u4PYkrS5c}l zppWpU@0dgU5jDJIvjCzIX-%R`NQrM#XeJuFXqZfpg#9tb#k!`EejgK=0w$->g{V2K zoM4lMdbH3GYM@xck**{Kizz+^Ux#}OB}+l+PY5VIszQlKK>{ITLK_e!+62d@YCKuQ zBm@d_PY{*}kAzubFq3o?4TLoknXJ^qbPWdOr!a!=e-QPBX4pPzrEvioUW?ISqTtaR zESXxA8P@lh5gTz`e&L7Voq%7}neX~f>awG{s6(XiW=gIrQhiU4JC*MP>O&)b^3-4j z>gpzvIr0-pvlaarn&a5(L`}7k_$HHWK=cVQDRnpO62bpt?8VdXhCY$f6Bg#5lp z5#Olyt)WEQ*ObCV%{2V1zUt%5LTZ7bw}?{kUrKlyXi#lLOGb;;g&-kt zJIQ7l^{FVikkt5CKUx03H`K*JM#(q&DyYr4mSZFli4g!3&isjs0N_b!m_}b;|5aC9 z_3{fZ=CTFXk%npH3YI@ZM{9k{t#^F$=o4!peK+pAD*I|f)n<%XL3qD)6e0gAM z0sKsWh1MT2ssL)dl6^bwBe5b9#isO)daLBu0R)IF)OJHVP4=%SV`#7&5lR4tz?jzh z;y?WHh;M%LrWZ(o0{R`a*M40}gI1p)c<7~9+1=gpEuli`uBhO)HBc7 zc19Cvt$>IjvrUT-7Oz#qBM^249qdC$E7z&U5A zffSJjhNf+MTHkcbEr%WX?H68rEmvrjM5L)&t+}qp5IGlx_V!m^dvlBJb~*91)0Zq= zQD|wGQjtc+u(PY9T61r{>E^p{z3boqzT@eqp3CQ3{8Kmme#Q_CLkQFQ=#x+Wb=}R6 z{_kl|ddSdm970l38itW=Z66#QeE#{@KA8XMs+BA9`4%F{7z)9-KV* zw%hL=7#y0v@N*4DuFzpyCMiN9rgbi7BdB}sedx8<-~9KT_f)I3Y%WUxT1p_zfPkRT zGUlO2p1kkAhZiqhx@Pq{K!Y2moy%(l)skbFx%F$;|NU>*&iiQojW^$Z{q_HHT-WfA z<<#2X!nCuOT>6*a{`SI~Z@jf{V1NsuwbK4pNF0h0Sva@-qh%?R^Lx6mH*GsRyeaU54 z{qvtUT=my$ltjZcJx}`fiE~!SXN8q_rIyMCfQsi06pKV;XIj^;S^oBW?*RbgTxsR^ zc+xuAae%eJ1NOp%F=MN)Zv~z%U%|AMM5%BLYuKL|n3D*&qLW)#+#b=xY9{f+G zQn5@+2Vueb5F^F_JlNv8jxQf5-O4d%@g=t6| zVvC5DMpc0jGI4@LX%p4pKO7yqBq0kVebQTk{ z7>PC4OtVJ~IAxSC((i^WKS|I+G!jY_NgH)9Ofp)Es6Z2eLmt~8UI2j`F?JJ7ZTOH< zv)iL?8Z?(tHPDRGP~9R5`oh){CG`a_5CM#&@bF%e7-GDDmLL@@`f>vKWkJNoI9t!Xj}|Hf;t{r1=AXL2o{ zeg4UN@6QE*a0)O+h9;P8N@zhy{A*HQZs?dmC0ltdGx7&-h9iVMT(*>|@wumR`9iHyGfX>^&E9|i!x#PO%C^qVfuZ4h9(Z7f z+1s|aw~|&`5daEd_Vo|k^Y9}NKl})A^tAlwv}?X zS6}vPZHmLm*XDTAj+_ko8V>6|eBE^SfTP3B1!4XiH*8Pt@{N|f)a8vyHH|Ia~)QhvX z-R6Yjzd3IFcuuMAI^q<5bFJJCj|% zVeMb8{M*pr5C9ZwRZUzl?$v5caD$;RvP0!n%w+AIU6yIxcI&+dfAzq9_Sr-08si3O zxZ}=SSFc^&(KW8EtBVT*lme}g5h;bBwU$B{l}dH#(p3OZ^Q7xZ&bbi&0&K>Fw(VST zsMOul*EP0d@{~!d*REgi*}_ex&jcor7$AS>;fEG{{<#q5CkvN+zG&g5n@p-!YMG3s zwKDB|p>0C{;K2LyJ_3OGpME}X!DnCj$^lAxKH5N^WJ>>-uoYX^YwQ+Iy*hr-MF#)-n;MF zX~%7)=jIFfOfFZgI77wqJ9FQC?z!g;!z4}qhT9N0i?MQM5Nvzaz4iY4ADE`8Nyj!iY1u>fr9(+53{*F{B0XY! z^h0y4`c8J_&2mNpCuuEx0Xj+vHuAeon%x)gKDF-<2VfoV;%fUHG$DI(2T(*SkEY5hHs}pe*^Ox<%-_;@~tr(SZZM7 zUoN8%-5~*`wqHuY%BDxk#*{3u&P@?#LntmbdC5c|p`au(j`?adf<{sL(6l<@PkdS$ z3r{KA9LHs_3B#`=8A;@t@Iyhkkdixq2RSz-*ZxcK*kd%gp@C+lYO`6*CSY0*A6gP367VZZ zNl77^5yI%+*z>=~9^GP#&CA8%k3at4mK**(WBSbBo`2rMk39OwqfY|B>ecI)ELqgw zKXB8(ZhQUBH-MQtZok9Bk39O?D{tDiEu}<6K!%Jl0Q8SQOxUl)6>AK`{WdUY$P^VX z;;9G$_l;b65QS?%T*;qd55rWiN+ccJY-Un@678$b4{U4YAC>`HYwc-C}-RE-1WfcpME}h%EVJnK5>^_<_z@qan2bNL;ZcF%22+&W%b&1 z=U;H)E&smb@Iw#&#-Rsu#(`+V`VCJ%d&52VKJ@7)pW7Mx!3Q5(_}P*(zIW;&U*Erw zYx(T6#n)Va!|QLnW7}EBtG#J1bdR|SrHP9_U^vJ`Hyz}Ne7hZJ!@!vjS zc&OJ9T$sk2Z@>G?pPrX(X&F0yT<^vW$A9bii!c1cDc?E1Z~cb$&M_~&_}aHmIm7c* zrjS#fy77ja-+29v@0@b{*4xawg=-9?6%gN<2jl%Dh;5t(xjmSqE`Q~eH9C*MtIy>4g{nPJ{IQ$ULb=Rz0_xMwHKKRfhAI+OD z40FZu6{mmi%-#3c<>%-8WX_JWYt@=0ect(hxc>T^I>(Rg@99~#WW`fYJiYf`JGHfr z5rT5L!Y7|CJmbut%zgL$mev+eYhfBvsU?dSFZuj)KgvU-Q3wQ3QKyc*VQg54{9V}D zdvia0@4XLA!?^3d|Cpxe-q=^I)=bN+RjRJz0^nWu{AbCc&#(K(RoiU8-STBCfBU&UYI0#b*xD2=*MmxbVu>aqr&ePji3I>9 zB{G(zNdb0A#NQ%$M@6bJjt=~L61LT`j!5Jbqz^eVHn*!$5}0@`N*KcFMx?@sF9DF& zS|T#X_0IUwuNZPoWZN0fbs4gro}T5)7XuuG93S}4gD*b!(y`w<>VSj4Q7ZL5^52Jh zdU^}3ty(D-4($Q>nPE_n+#{wW&i(& ztAVeE3;ktF=-aI(?|%tH5H-c% zuPebWHc zuw@mAU7>J6rRuC!c)k+wZ^o+N-Z3@NkGa79|yQi~R;AL~I5e@S_FSUU&1#m8)CZ zTb-ISJUH~yORsvh+SXfazU`c;J^j7ieLaBK(KTknhP8_qFY50ZXlZM$Rci={oGYaP z_}EDk@~ws5zCOb+H*V$MH=80#XUAkoHl<8BQT8#@)Ey9A2Kke=9 zn>=Y^OKZU@6o8o;`P%ipZEfwI>!H@W?7qu{i4&@ovSC?>Oi8)_0S8=v-PP}X_`$;u zJxUU~H*Vf)TvW2W| z7`cpTSRa49;GK8h+wUuT?6Lc9Yu2p?puysBt>$F1Ss_qsJya}SdF5aK{`V{XecRn* zJ3Eg*@u;15o%7J+Pq|8IrA&i&baeIf^*;anEBo%dw(_5s%MIHyM7dP*JP(L^`uc~;Rc_dtyv?`VV(t2#_3JkjT3Zl+ zbF^$rSh@DjaqVNqW%4abd%*K6R<5g6s|L@MtAnSXaoX%1cK~3fopC*H)|Q)|`|EQ) z{BZv49kxI6@Iwp+)oPUsraW4-cyU)p$C&nZt({77_y=d4y4N1NPntZbr6p4;myj`k z_KYwLDP1euzSE97zV*htt5>b*Xm6W1vCGQlY^jAn0L_K4?F<95GxqTC(3Gi@CT}tg zfaMBppT6+sl~??2Lw9#;TPuP`1j|>fs8%Z{e*1V}27xP;>g(wNQf}4JQtrO@9);HY z>#x3b%(2Jh3pwOQCR?yVN#jT<}m%a!Fb%2H z!X=9wsd9y!blnu?3iI%(O9We*AND-5*@)3w>SZGEy<-#%L;~Op8IfricD7J;DxT*~ zn>=~5Ew=o8(Wk3cuHl?>#z>PUoz5b4QR1L443?+Wqo7d!2tkLeBJBc$e<)6EB>P!6 z91xr0XavajN?J)*0)kTEW&}V=69Zxh!mSQnhN0ID)}{cfm#fxcd51xuh9N zhZZhba{E1ZzWeUH<*U|ZTUwOXptY7VAczbhY$twLHrO6L;m7O7R}#`v{NsyIN3&Pz z5E?a6a`S7n`HYPTjUp2KKM~QU8IF=c@LqFJ_eElU@rd4N&l{Mt?bZ4hYuWY;t3okkl1T45m8G z1fy^m*|H|#kfe!;3Y#Rqp`_{f0b=yLahx{!Bi0(m36D5IBmM*vbsbOph{TMep-m#M zNy8Ms<9moG?GTPr2*qRL(lpIfK^l5roheK_@NKuBMLdxnqH)?Un9C7Y0K{HkgjWfm zZbUjMUVamHgnB?~n?@6>( zjIBvyY$+;4Nax~=8lQ#|HcFk)6NYkAM2~`-3;+?>d7Vo<2fsU>Y*KwpLfiX?Y z&SV&XQi{L?#uSm`xS$Cc(?mk>&1TIUJ9gZ%B}><=Uc(KpV^{#mfH5NY(h(6v;cy7& zIVW5Wg?KQz02KX>N1+;`A==<(eArc__8__xcA6;Zh)6~#Cmh;GKvYU~wYOY#<)tl! zPN@bbv`@V7l8aZZU9!in`)us)H-zCsx9B9AxQ)dCGf}_PWB@)aWgI(?%9kiV#41X( z7GI}A7&WT>_=jhn@q^P|c;s;Yc(kqfPbzg5c#`Dg(8Nn zoWcn+5WX`sINUj={osQS?iiB;&@-oR+Bv4<^M#8Y$1x2PfX0p=-#%sxfM!CF2Ia~^ zYp&4N%9+qoIZ}=r+c9U(&cJhSts4l&c8%@o>{z*SHAyms!A#qA2VGaz90{P6494f( zT1|OW9IUvWb=9|^36*NSxR6!5+Kj460{qjfmJ@9C?R^4Itju&2ZfhJO($A!?E zYSmg-SLa!0pFRGeyYIg1zC*uu@M))=_KhRI;kq@;${-`@sqJ^z{(leMbLXA+uU@mJ ztE*$f>W$lNzqRMNny^-?Oq(|S8wc&*JutX(<*I7M8FGfFPM&z)Z_b@LVy3usg#D>+X}}X`_1Jm)>mq^TBW?}&O6?7|G#HU-_olUITsqhDY}sJ_S$34 z?z`7 zy|c3e06oVoWbA$S-bHCut(271f*V@9R>l^>kd8F?z<0lM!mhjSI8ZD~M^2kMsW{k6 znpH~!JIvnp!i&$l^2%#InfKYG$rEU`b}Cg;k^qMWhxgcH&hC56dGxVo^0{mcYmVaq zz+p#xW1s!^s#S_kt=87jarDuLz5n5dm73R5$WNO#W#*=vtX*Zgo>ZQ$mdg{zcg>tJ zy7CcGkyBB1)nZW7>WQPVYGo;0tO^| zXwt(Zy;f5<=i``!0mKB{iwEKuqL%tEmtJzxX{VlW+%bc+csPuVN*KP3taaqp12ht>&GIy5UPMMjT5E<}2;px>C8hGeSDJ)r442Bi z8+*5!x#i!lxnl2q_gJ@P!+-w!-rFrixf(T;%F!PeZ(jT9oT5RYB+iYP`DdLTJlk)_c%?pXXjVnK*T2Ui`2<1ak z6-^`$vTvZWQG*|)ERg{km0eTa%Tc+S4tPe9lw<Fd>+O0X;Y`g6@zIw>EThE>~b8`YR3}e@w#5P-RwRp+$ zTD4Ltl?(a&1sDGMl+%viuyI9eYs(Qw9P#RF@2p<6Dr095&~rUa+M#eky`LT9!Z0{z zobghrxZAF~{QK5hHs5mVx8HvCv{S#oZ25BAwmr{73=UBI%2)QAz2i=|{`=;^{z1k- zYaR7-Y+A6C{=ydMcl?x{OHc9-X6rOq8;bc~LR)ni`cs<$fIQb_NIUJcgKe7tdh;2Z zl2S^S$F#PdcJc|=T>r01)ieElXeg@C*luE?4j?in4YgdK{pbPWWLFJ~;yR9PX7<@@ zx312y-#q3><$A-VVWp%brKECQmkSmi=YYY{sSqj%APyuXyuMOe2$(WuLLpPwW4B%R zKVa`{EKe0T(K1BZ zW`}L}`pUj`E+ds>2;rHa1fbel3*$OFq*4Y&L6FWw^Lz&HApfV=ddvWwL+& z`{i40xy47HEa=_Xcj7509C73!1A_x!`O031%=4slYu`QPr0JW?a20@{70Xu5d;gQ2 zcAgCg!n6P}YnjuhZ_+ikI<;D?9(?duJ32d%D=Dj!r%XEW_+vj^`1y(@ zE4SKq*3m~DdC91-&)6X*akzSTDfePf-%&JoQhMWvh*b9{+U*wwU(ZzmE2+5?b_Pf z9mi8jAw$y2D_00fa84RMPZFX*B&A{ouT*P>DQ54uEjKJ6Eu~j3It1D+JH^4lEjO9= z*USDeSS*W-c>mpb#liB}aa{x?Rdw9NamO5U^xXI6tzEytG|ZaoOr9`l_g!|fEUcDl z0J>Tn_{Jdz?Yz^DHOCc(X&IuB%WgSqb45_8I@v53rg8K)kKA|Pz4EP@n{K-E?YHKV zR)|b`uJnq9tTk?ICjgX-#hUAmfE;3D>qBh<0Ifq-LH-(70N7@$tu~)IOK{qB<_x73 z40(g^MI(!sU=v}XQz6a~ zu|eQaDP;PHfFQMG8iir7FraAJR;5yzI%V=1r+;_LEw|Zh*34(0e(tHKo@Jc*Q+NSL zY2|sY55Y7Ma%LKWF;*^>_S$!!zy0OUJMFxS>r|&soA%3J{`~O64!iQNS3mIJ!_xHt z;NY(vaOfe2*Qyo95s;gPIsb#X4?p-YfJOx656*|kHg*touml3fpH@T?$0kWHB&q?U zuN$wX!(2^qQJhy0e`yYG(?d0wbR$thv0U{Z`xPHPOzmbt$xrJEPg4PsttP_iDe<8G zannCBlp}E)Q!m$FAp?$Za1&(T$dl?M^#6b`U_DY_rKY#O0QtuNq&~+mv(Xzyv!_ur zqja+bXoTf;={J$k(?ygcRAe6gaFaqYwf|Zsm0!M9ige zKn&9QO45%wju3Km7*V;2Tqx=op$Sc7G*YP`!NwX(n~e7~%{`rdoIySBh(1p|t}A{r zDS(u%Nv59)RwX!mLqr592w^sU{Y5QHja4A4XDnE5T#Vwr0GH;!L;aM7mQ_Zc$)Yy-545b zGu3XBt-keeSsN6NiTeiI5``20Z!H)6YEn!n^Oh_sN2V zfB5}x&il=|rD9PjPZ)-6*(+D9xb614?|ja(t8J(_;De(z0z$#2Gj>cihv{X_wa4GD{>#kGraQH&oy};)IHF-1N^5S|oE!eh zoS+@ot0}2{=i#}oFooke{r&yi5QTh;AxvR#1R|{vv?h{@T3W{6bML>;I`b!>^lm%v zbmGY;?E977Jy$MYzT)ZUpC1}5?XvSO`|ZE?go)$G(}p1cIRvL6A?IjV#)3~jU$t`O z4%=@troCNh&+{ZhA|kCQ-`b)TtzEl%c&)98qiX&6V<`CS_(UM3&370CE5mfB+bPzg4tHT6s=MdajZhI3w+o6lU0F zrC71DCPQ4mv6nPXn?8*JRZ1n!nf8zK0qWb>-!-8F0T?%=Qij0N@E~K%pPXEC93ZkR z!?Ftqh)fU#>(x;!t;n#=YOT_}VdK~dU8`2ELBJU^rxO4J?s=|Oo^)M?+|$aijb)3L zPT6E~He-99B+#TudXjVI)Lb)TXEIqpUaC}W)5v98FhG++OP6usPZzBY_mry@skGpN zA!hS7AZO^)0qr?1AZjfcl2)XY1R^CB0cz5SXjz8zl&2J9z=WukY8rqsfrM7pwlbD< z6@(j`8HV7TNl!7sJlCz1s-9DAY0C+dJ2lrZ3~mV0^bpYduHVVKAS02zjfOkDGizyJJ~7qqvvx}FUCCWYZaO7elw4`5)p(uQ(0&=umX z*wLg5fC!%FZ82-ccTYRx`)8k-u`^0}T6@05^*s69UJF9cdm>X{V z_r3Q$q%<+k1d2=kbiq&0`9-N%t~stD1cH;z7dYqVU-0|uuDNlKop<`p`RDDv=U#(@ zMFb{2Z``;sPyFw(bI<$Dq9sd-AR5~Mh{K}Ek_07AxTQLDR)+&4C>QA@{Z=~tG{Q-z z(*znt-gG2qnua1VjcNQO>1ZN38#0ZWO_G2_nh8K=j26QL8xij)T_E{FV*?IF^(jzz zqsWqvQIt-t@pZY9`WBvCNx@_QziO!TzJH_uuf2a6QYK=j|)fCxA z`FD1e5fH)wjtJQ)_&u5rsE@ zIRS<1=@~S(BJ`bO)9MJ`NXy(*QE5371y0K!xA;T?{@jI;QcFqPSaGRrMjNEU^a(?w z$R8I0l0#%r*W^Z^@!^X>t*07rlz7|_;}0O>n6@UH5?z`@K%BiPJ7&mUGo#srMIzdUV zw`bsk4?bGEZvC?_yzuz{{^xm~Z5R}tg+tR_8-_=SbgQH^2uOo;NHgkX^yuy`=`QK+ z5EzKGFggUJySq!eyT0G|FEF-q&hy;&bpeZoZ8)!PRS}R}^mb_4nU#u4BaDKjmw!2w zEOq~=F1OfCYu!;=O!|wCBoSLoV|p?80}zqdDx3Y1Q?p;@ATq~eUJm(afe6Bt8$jp8 zHq7;Zp{Q&*mZ1~Kc z?6G8-rIy!0gD!NO)4BDW+S_4!vqEE1)Dn)YA+sP%p1?hD$pMvRgo^LBG#A+w2@3k!d2u@R|zFMhUDFM88^Wv^^5O4IC?TtpD^F2$6! znSx|-aw>$Hole+@lMYVLB8s7JGxa+JH!S51 zr6FpO7&DBPAShWa_o9#z{>wxwZ0}pFD%aThs0;FngTQ`%UB(Jb4u(l{F_K_i)& z5ZIM0R~wDYSDqJJS?FLW_0-h5S3o_12hm)mp36}~I}mT;gPBzvp$A{v{u`^CkM1<| z@VD`nr_bX;ZutD8?zci#oimfV;U`QL*0i^8!+$UMu%-dme2|r4kT=9-l%GKIZ#6h~quqkad%;i%ss9oFj z10z_9y&pFa;3OCZQJGApK$-1PQD~8CG2T>kmTD9oa!@J@AP*1L%`epVeS98sS`(22 zlYe%O3z9P;WL$VI43;N0fq1!?1KYb`9HmU5A5cc>Aa(_RUK$Yh@o<~RvU^vlMLoQ( z@ul)xfR+5q1UJHGGYq=e%K>rcucd%=4Ao)kX6|097wb1G1Vk5YOi!32W=d zuH75SV+%Q>adksO6pJ36#8F*kJ(i`BLBYyhvN(1U639@wQ??zA00nSqxMWuyH7%)Y zzQQZ$fNlTN%Ya2*+06DX7q9SBgai)XS$>Yk3SC+)kYxdvT3Xo7F^k?FVF16yduBrb zICJn^=A+*>V15#Env@jRXT%b@SeNiv^?sGFYIQo0V|d+R`v9+pYyA4|giwT6ca<$} zvllfc3K$)*1&`RVnjud7TM?8gyU}9ueWm(OeM6P)yC_s4Y_z=<^#9@0p_9Fa5P9@0 z%FgY{ezM{IJm*LUu>QW$qg}}~kx+s;buk9Owur`z^CVuhv%-nrsIJam&zCk{jndZZ z*i}GuDZBjwXvjEHa>8K`=gtuk|B)}0nsmerqIDlQ6%v(lQr~1%K61-`-0ya6H+rJZ zHl--ieBF?B&G%$MqD8?0nsE8?Un%m75R*7wiuu^Y0A5!5WUaxISmn3Abv8q!R|8!) z$}fznPx<%Q`V*QXq%Kp7K|il~d4HWZ7{~@f40va~ObZiF{Wpk3Y4jp91P3HZRF z^VQhEIxu<`q5~5`gWZRYR$=FZ!tz$-yRnIXPR}w4sg`LK8gy8$b@l#-B6B8!lhU1GJe_byF7B6+o3sSG*mt_m@KRho-T z`3?H-oIWYHKvOhWb&_lBDqwWcv-My4fCp6;@TlI!8NCpSbJ-R6Xk}|d;WAETV9}5L zbP(tnrI^G0JlFB6SFt; zi77wDV-vNNv67N$obor%yctw416~bOfW&f*e#$~1Wm9Y|EH(ALsiD~tFc*(KtbG0u z$~=Jhg!hq#yMPVN1=CJW__}vmd~)}guS+;WOfuUEWO4r+;JJ;|f1YH;L#NVJ_GYE> zfV#XH8U=wkCErBKxa@Vj zf!NxAU$SOMidYMzm6>|Kg>k@=ts((P*YC6eI8ps^YBsdVd~umG2D7ipHdd_zn z;mOQqnyGrngi-J2l1Q6d_I%m>M~}$cJswJbBX;6`3N*{?|1Sw;J7t53Klh@}iWnqW zRHp&VE*K)YImdG$5bI80ImB(zk0rsRxK7{$5(7H;0IZZC8Utpvb?^>)7`NwdtDVty zv!LqrF;F6th?8=pQFQiLj`6ah30!laVUq$$kkw8d;kQ=oS7` zs+hgFusD0sRqGHCc*tv8p3LNZ)HcNG;;z-|xZuLp)^2=#5M#spbUi5g(Yasq@$oJ2 zDk3U2dn`*OmqDO%F4o0CO&y9X*^`K zs7@YYT;eQJo5@5fA`a3RJY^=#?%Fx6-Xd@p^Eb@yXU9a`*kXW{a`VZ42N26(>(XTE z@$O(@;vrjyLrY+5zrRn=MGKKTBy~Lv8xl2r2l}#PT&rk4e6&*iJ*(bmF}8#ciRwS1 zWw&L(r-ullo=VoOrEsj5RH!V~v$D6yT#iF5Ad;7Vk^YJbTK8OK8@=C=+B0CcxLqL* zR%cGVvDK58;sI~HU zeG;`kRxJ2}sPH#G0%uB3MF2*Uays)s4Qp5?OWG~1~wk|F20kRpzJZb77Y$}Pp& zhPoS}-zhuV4qVb`*vY_UK5R;@%5sw#P4LOoGC%{;tZ$|;SC`|yno{d;Rl&c9HxuVN z{-0{+aWmK!`s39jc_v=_;Zen@{B%DvMxuz>cv}*mH%oe3MvovVxoNa}cFk(~sNb-R z3Qiw8CzC?sw2u0Nd&G-YR0JY!@DY_a{6tZ9`9m9C@p}>SiNSGH2TEfJ4#qm}k*hCY z;;i7@PwwN<{B$CuGh&ctFWe`1d8e3$YyndD`^_JyWjya`JQ<|EQTe0vbi)7M?0v5%w9k#J>|5xKGYjnWNt^N6bE^i z`I%WPld7bz@*wSz{@z*-8gZ>$I4gQ!nAV|Vl#bJTOUk8)`jM4FR{JNtQAF`REsceu z6!@83&9L<$hcdV5?2V6`sazKhX--Usk+5_J)z9_^g+y%{!{1-&tiM$1^)}K&z|_u? zfs_ddfTth?)e;jsZ50se>AA0kN9oEh5m8|xhhV0ss+X#zRzWd9P&~$wgoN4LLoBoDE zJbM9?smk-Mls$W`29;niamdwADJ}#2xSZk-r?e{C-^LXeAKp0h5Tu)A4e=rV`EFKb z6Z_k)7!@I&#w41`B*XS(%hRQW*ES>|@$r~(#$wAj-0Jc01YkxTpPuG?apO!7do7PL z1iel8@yb9gffBow`h5pF@@DdTGNa^=|EiD5QHoPGL4P7?sGZM}zJda<0F2equ}PSb zcIXWU>mH`81jZaP*-FEz&*_UdMg66;%?~&X<~I8!>s@%bCW`?uv98r{-^($t(raip zvF#J_KEWarRz_z%Dwo0(>Pt$*Tq5~L;d2g4`;ybNpznQZz=&m|PGh)CX@strJg^J; z&xVNPs7fH#inxf!6XF;~21};!n!G#^-KFYZn_qi>*k&Ub$NcOp?8P zG*~ZADu5X14-qB%D24Y^B#;1TI8+k6a=o>y9k~Iael40SY)eo6|4t7R7^e*Dni z^xxud#V8ODZ8>flTaFWH-V1!I z%(v4RTcbCOTg=Ycgy}rHFi|sut>bgE&=oqADsnlDvEu9NixliB=hTDSge zxVFmo?Boez7}&*#e#=~s2RCW}ND$@|o3O23WfXuhXhez}BH15E#hj`a@Ed|3 z|J9j9X*=eV;%d;B?X3M|=O8h8aR$72R9BwwBw1MN(b4}9ZQq-|pEd3>C<;H*doG6XK9$CAzSpQT)6|? zK1kPCBERT6No7QGjNv26ye>5y`AB}nAy>uA@pJj3xi<~ZlQ1|=mTetV%Kl+D?VrX( zmJ>}Rzwh#oO=&K$pWkKC!)P8^MUSN5_tptZT6pC4bsIXQ$i9x##Fj!Pg8V;Ua=OU> zOj<0HTlY=l{!OvbmhICuDmoLl9fxFpIq{B^u~JR^MpH4l-VtU7O@#?56R3Uj*MwMY}67TnfQE#Yerw8wr&3Jh^ynaZ-^C< zvcgrTuMxPIWpVX}eEs8pH4xE3hl9_lb8i3`Kp!MTxz@d5__9if0Y2>+-cG5}7l!M=j#Y)SzQFcX~5o8s5 zJ55jm3rmu)_p-?oBqyHh{>V*Rae~Eg7KhB@FbT4m}DE9QqQ?h8#7a4FQvlnb&n!i;(|?czP~SOpWK z93F4To);94-7q56ECsxiT8}-Nui;X3C6>gVQ7%^jw_3>2%jrMD5xLu*kjY)O?VXV! zbCNwwzkyEFxVZZ}ye`6lK9%m=6z~6U;Hw^E!9XbEb`D2)xe zU8`IzOdgN~jQ4y_ONB5N0LhoiBK{v9Acn;LCrU7_2@SZ9jW-T0c@lKNS1 z^-Hnu{zXdDta$HWeFJ={_&>0R!#@q=Erz&`+rYO5KthbUveCF}TN_$M1A7k6Au@5F z{c?<1fKVjdpuwd6D^`^yEg6z%xnU878CJVzJI2Rm_i3k=SkQ(l;P6|2K;0~Ou^x+B zA|E~}*O7K~>Lg=_%Dj~N3~Z!C?>cc#n;v6X8di%TrG(JM6iB5iqW!giob0)n)pC(bT%dXJ^Mk;m_@{KbcadQT4jdzqfL8%F%Mt?oq?{GXpaCX4=kV zarN7EjZIaP3cmZ|J<{!(MX!bqnsi$k@2<{K;6|rBYtuo+-0DN?^CeJayaaZo=R$+q z&P8gaYS}_>KCtStbF+^xEbQo*j7?>`FbY$?DZ(_uHGAIL;oEboKm?J{pWVj`Um4*& zDW7L@Pre2*2YQiwDGI^+MLD8LB^}(^&0PlWF{sHlgf9N3*OP$QD5PnS63S#6g+8n*REIA1dNRb$i{lDcya3|x3v*RD#q>K?xKT6Q{1Ce^i^mu-X&kH#=M6$p&F3s zDBe(f$J$QY?k@aGX`+;DZ{;*NqJTu#)tlZfYRpb&S?(raB|uGHGv!6P`twJEvqCB> ztJ=SFfQ-{(x_>cZVZSLSZ(}MO9a-I+?ivM9cb9nCTVG-tR()^Vih2{Pe>mii4FYmc z+f-cLCVfAJL&4Kw-xt^%FnlP(#=&9QpJsa3O+6aACjf4?I}T;3&vkmGiOcmqY4Qdp zCAp6$9A<;ul0;-j_ouz1kjF7thcH%8yZoin-vEOJ`r>-9;=5oo1#abyFdtN!!_dI_$R7boA zevIZRt|%?q^a&pM%E|8yBp?20!J&9TE}hRm#P{VYBAr;VN|O%--W_`aOlr985WB4r z39;auDEHkF*O(8xLudVxg9WL%g{BOBRuaVdud`M4ZsXtihjzb)10V$9iz9Rf!e<}l zj!#CHl`jRY7etM%Iqg+pUa>SN1e2oRp2;C*IA&+EFIm_&?}uN$e|jm9_dB1W&_?Ww zIRx0xrC8XXuyQ9Mzj9Abu!P(4*mPh1ZjDj+KP9AC54f2sD|;9y8`MCawx>e#h7HD7 zRvLOVbjY0k@-_=B+NAti$K=DpdB3EiQ}wWv_tE>PRP=R+f^1&q|K^eIxW;vH)T=a2 ze9zpui3J|BMS2Z%^LF3EuSAjy|*>Hr)oDmBa+d$t=$rux%Kt~kEX-Jkav`e)AY*b{8EHWdFa2C5-s?EHJlrac!U=`u zX22Y*<)06bP>Dnh5)53zqYopur|j< zg@hHji`jDeezzkfoweg;vFR#uVhKfL-=t@FgM`$bo1CFwzhBS;GhQ%APCsJ%`azNC z9V)*%`$Jy>hioRToC4;Stf4~ zR>3;Y$vRdCs)_ClzkLThA|g13_na#a-$$AGBLZ*TyFtxcbA@lQCPd~-=}M(_4Da?( zIA5;2J62~G7uQ6Sf6qp)`%BgyT*mo_CqDWK#{?V_M8BZ-DoSU6IS^#@#}Sfp1#tkav4{46F|(hsIv781{gt-Ch8ny{(0e#oK?sW_hN#-_-y&5z8Tw^E-@F|1%@+ z$MmQ48#%5L#tKZMbYhA0S;x{k$A!tvtz@PYU~{_i#=nt0YiI|05xb=^2v_L+m1<*O z(YzHac+@avzhGMrP05`u8sN1ow&G7&1zK;2Ad^-rZt6%FfzB+XIrXsggE*fnp$~EF zf3S(8e}rL~Kk~Ufti{o&wP`j~{n+l!(Z$0Zq}ynYu}sK|>Mq_GKMwcJp%_1>DV{?L zx1#7NCD}1aVX^TtXLewU$Z3RvilT$Z@>lWaZxF93idVU6MpqZ(Nn|~rQfBj9EKTsc z!mUKH3+b#RdnvhrsR}wz<~DPV5dq`=oJBL%iAEXplkiV$+WO_*WXtGdW?13os+gZy z9mqvd`)%8(rz}OOz0>aurvD_F!bOts=2h_5O7yY+)4NlGsHiwxSI8Gc(f<-6$AWqB zNTxUHM=?^VF4Kcq)Wk832v~oy@&wR(N6c{TQEvRC+!*y4I1_Ik;~iy!rU zGnzb4vD=8B6{U@s=J`KlbiZePc%1R)-(Ht^`_?P8Q_N=U5~|bpS*Lk>8Ti1~2*xP4 zy10cjLs@A=6u)y7*R^lt@%r7pgl7$>?|SJwHO?^DS!;=QC0w-#=6ZYtVS*ts*3!{#K=T>JU^rv zMG_eVVe0h+$}&JrR~6_rk99 zeePqDl(lDPav9UUFWBbR-SnF%SQhkA_^y91d)eS$y;K&x?cy4P6QX~3+0Yc_I~;Cb zZO7RgX<6?Q^}jgZ%P1F~UlVm3oF-5f-Y9!}vbNSzUr1Byy#EW_Bw%zAQj+UAaDLST zr1(ee1qD-nyXvy2R~mBBXa6!?UiBRl)>-OX@p%NQY|s4(+;WUC282IATa3Gwzm|{N zbpfWi>~(2ZZ}oc6>JlsZ!o81$MpJ7$5ro0k>hs)dujX~)O#!4d6DBX?Lma-PpiB;$ znm4KW9h85HBXqfFU`yZc+)Xfvf1UYJ+r1cCVFgqb;h8ji zb1(Fo-({H--YJV*51)>{PVKJ=?hJFaYkt~Z&Mf3{?yQ@%9~m--zOT?d|3@&k;`{1< z+Wxq@r7U!ko%cc*TB*?{PSsJ;1;4yv9%(tHJS|ZpJ^Si=bUwp8m$`uX=~w`+K=roYj*Cl|$xf@o z&(TnfaYrrN#s56Zg%Dmhuc>$5N1!a^XDLQf?6#D1t9MmWrZ7rA_qf0>+O+vwRIN;X zXBu-zI&7=gol5)%-KmDP2^2~W1O3;WSeJ^OKo1+Q@SK4(HFV&BLX7STJsBIa0`zgc z-e2trQsD-gLA$%Vc~>2`63v)%Js(O#F+@m3jh2(GvecO2u&6Zl-lAl=Lp+b3h-#jj z@d-*va!ib8ElcORS*QdIst#tP18V-|B`voWqR%@NY)wDoZT2btX+Pa}Y3tY;nWO8T zwXdESylgJ>*zlflo8YL(S1`EF3mKUXnSsqucN>WRUG~czg>@t&pQzr$7wwFZP)9d@G?$WkXIS zbZqlUZ)4&B#zqupCArBcgod_EjzalqQwh%wqr{y+jK~8-!icESrXuU z(Gc#)!@-@XY{K0E#*LP2M(!trHAd?Z%u!-se^=Mg@BvgyYy^Fe$6k&IRhI$c%KG4x z5oqidYOqu9Gou2Skr6fvwHhHJB_i@U*tZ}yX%~Udf+$0%;0<0QVP->fb~QW2FrbJE zJvuyQt0ROmC}_7^U$-iY49vT?)6K1{JT7BYk$W7K0!S9$?Q@1?$bGb48UOgYD%G#R z?e||_My1;mOrp6^Krc-wBL``e{QNBA!~IJPMHUKF)K;8|Dy%r7*UR#0`mq7Kqz+?k z`}HkQ9rTuynl-W4@#R}l2$bf7pV)gmev^oNw`y-kEf*R!;vxyD{R7+2@=1iowUMB| z{0zvYSL0{Zi3h1VCyke}-nc5@j1lt)*Y!WHUbqZY^r3~sp!{US0GNE*>t&{YuJb`; z?U%erz;Dt2$B9farDlu4jLXx%3c5dA1i{Quy~ML^f zFNS|@y6Yp+1a0CD z4<@1bj!UDT4cad%8g@@S*8QqF9!?5i@`Lu*osTDCgz6UTNduTzDYKROf`Cl#cj)`X zKcQ%n5&gus$-HKhf3sfQd`r2nqApqI=T}Tn<=NG~Ym{qs6Zth8;!)37!-K5aUpt>> z%4X|gh*cTW1eyg9#89dDTmY#06mI1nasBg4_~~c8=E-^&|CWo)Q4SMeYdWj!e^bV* z@6Vf5Q!k09&+G_XhdN8PTw3YyBazEy3!|+A05B`>-GdeiHbY_u-lDQROr{B zh{@5(_fUh;A{MZ{g*D{dx2fsFaZ4`ll;9d8P#@hJ2JyZzD8|jegz2>gyHXf z+;1$V7Y^=OG%*R5izEy z4P{DoITepuD>>?)dEAbtWd{%M<+=QmdIH7fY>2ZT6kilqMxg2a5T` zc#ouN@_;)KPjnEyRA^8-pwe#onNB!eZXn^$c1ZZA&XD2GDYf;0&61d{aGE}T&=$=&ly}6dEOx#kbFf0Bl9JY{{Y{T#4_Xq5wl31Pt9ebMv|H}t-;0kn`G*B+pmW%(MRO=Z!&`zW5hcRJvM&J;+F3Q=syD99 zIOMG)X43fHJ(J^+=`!39>vI#jC-Ur5W44sLN444g>bd=VD^lJxI@!aFIdmb!A7p{v zO%!>T-cdie29fp5r4h`HZ!HnCG-fu z27iwbxig)}oGCN-c5k-h@cQpoLXr_yRy3Q*VNPVunYI1L!RNDk-EL##PMN`OsMs}} zY$@Xpn3|e;D;h7rhy=OQDLJ~vF&{DF31OD7-FETdX)*;oqhsH4yYVXAbiJGPx*yk( zC+wZI=~z=}Gwe3E)@XbGtHy-k6Wy`T?g;Pdf?XfE|9x4W3zfnU^lYL_RNr-@tg3D2 z8;p5mQ6OyLVo_9H`rWAEV3PF;4*aqWe8fagDufj2V2p*-26oxC}e2 z%H;D*JWS@TH0W?wzfC{i`aQX?&wtk$etLb4O%&#+S4C&Qw`b8I^p8}=atHSh$J&dM zjyE%Y3iG>)R(`>wD*)?FulHUTWM~1HBP(xw+W+gfU{Fd2K@+ZqZS5BZQ(jv)W|Nde z>}Son!o#D0-Dd0dWE8l&XGdP6t`5$UemkJ!&EOGy<5^nHXm9_fq(vB5bf)-*) ze4py%-s|-eYH`whh(NV&W3aUJyJEwb1Ni9n+NmYRLy-GHApQ@N*Y&H;8Zs6#rCK6; zA4C_NXRn|zV|3DfmBAc#zvb;x)h}09n#?J>^tHDl-m&C!+Kegj@h;_R)&{Q+bKiF^ zfT^wlW15Snl4RbfLABBG!+8?@N$aK3So_(*pY>`x?R*~RL35X2B&0mwo2EUl3KRO9 zoAQtUNUywI>C<%DjYqUCo{#oAg!TXo;^%jdE(=G!xiNG4{#&ZbqEQhQcA*^P$2#_3 z4tYCX?vIWe$Upw$<+^#z_1plSfVv%iD_vvniBor~oUv<=eQEqUIl<6S|4*;{LVJ| z99myauy~hUZ*ctitPYX^#I`ykW8;rt-@wdoX0q#H$vNQYvapGxhfOIu4?PC{gW|4{ zdm zJm`E`^4V<#D9F#-s-X1Sjn=q5-{Azt3fu&j-bVJ24$mJbXI@+n<#HJtm@C08IvEte4sOj=iayHBszZp_yqsPqB`A#* zi)YXDoB3ISyoD;C!TJ^PU37reA!jfuL-;=O%(PY|d#&Wpt`dS6)ci`6()LI0h=j$m zH8s*toFDAL`nmQhZ)D{^-{SU%gP(V@ z{IIf$_TIx@sl$)F#UI`#;#0(~&dR7;>6w77_!j<>z7v5I$E5ZH9~97;+rRvbk~qi@=^Yrpct97lKrPivmJJ5Pg_XcF%2lzUEzh0`NyJ zRP4)te-hivbBF)wQ+X1qTTnzyR2=$XJw^elib{R!&gV39d($}cCT36*-{eyx5cWB2 zf?FRO%o*J0Oey_4J=`Y~e91P@cRYskQWqFGcULp-Tr|W9Uu4?6q}CiMw4Y71-dp5c z7v73yugy;G^6`LvY1k~-y6>82p&OO!G_+S$#i7Q#Oaj5jTI(im&&|Ib&&Q{0LJvPb z82D@qbB*f$cGa%@?`QJ&CHs~Y(W(}&+ZFQ<;V4)V-yr6fp))pfxv$}(?bo}@K+M%V zsWho&QNUx>DjW%Wv4LBcJH#-^|Kk5c;Mkn$>kSS`81EFVc(Jc7=Fb7K$#q0Llw`6DP%CpG4-)2;66Jvc+He` zMmExNS$k$rs(p3rq#J8J8_ec+QFA2!r3&z*p2%wDBf-f zNcis_`CN`@j-`u~a_frkzP%?#`GSGf8Gjig99*11yf#AxV-S9K5?mZ=Rc_GnqohRB zhAv()o0}u426lKC66F*t4Xn;{-DYuKd=GOXzICB7=(?VVCebUZL7*Bp4*t)Vo*nnX z5=NOQRwI06v)QSs%h*e&?0#J#>Sda~&4xxJ3A(6Zl#N7W{{$b8P7N+^nNi-#XJoIe ztUL!(Jl*YEk&-Cm6!N{zB}mwr(Yd zw#O6II8kg|=^3=oQ|athU13o*POyX{Cv50~mOU$_HF;jk0*Ig5VVXTVxpx~mz5t~#KdqVB)pHuzerAK`b+unASgS1N8TPT0 z_eZ(g$`{Yt*y(#&n!gbnBJ(Or6Ceqa4Vh2D2Y+p~kgs?4hd;o-JC;+af#|RBZWmvN z?%ND5l8S@g2#bHl-_uni*LWf zo$f75Sf^9;mmHTM{`8C{CQg2BlZ+QYVlUl;UdHfu;cH?f@-rBnM$Aams$V#PvPZPw z`YO_yC$*jUM>jW>LZ1}A^`(ma?{gliviSdOFRUc#X?Rn29n#g_&Be=Pm#$xu5F)y5Z5WY8$2f z+In9M^tGlYu&GtSoRZzu+?Ft&zz!S8yzVD@Ehk*02#)Cp!DH?{ptI|qvq;{sc6Hlf za5J44jjfX`1A-e1re$t}Ja{^aA!9+}73WobNL^vAIG zyV<7>yvp*)tSC~pHxp|7Z$ zjmS?Crv+8K<4?JmU2?dFR~@@tl*%j>dtQ#b-stvmHctOd=y;y>?%wGHmZ@-`o?l7I zd?$}3d7T-1P1uNBEE`Qw#)Z|{>q3g`(LhB2Yp@$l%w;hQ9FyP*sFW$_z~=3#=xZU4 zU~?~UA9kJSl44F{dmehH`H;lfxQ_adFBWo8ak~oC41kO4)gLCROC1KPOKoPxbWT4Z zN&$E#_5(5kCBnB@uKL>AG8fEvaOZ14T5ml? z%=H%K0e<1!l$ztdZ1phBIHXZN``vr;4G!MI_<#E;n);VWhFx`yM!1Y1R~z-to<=9V zVfJKKm_%rK+e~U!$Hih+zB;Q3f64&>tN`eXo71|Amc-(YD4+}ljV1^I!tefS+7Um) z0m#eebHOlU5|Ar$KjJbj`5ErmHhN(J(al2%30T;=RzIy2cTkohk%D+QF z^2xDO%(js%b~D@xu>#K_ffDh>m-+$8LDFo{C4k(>;I^u2yIFCm5)dUh!r0YthIiVYXNSs7E|*1dOLKEq)vqa< zI3YaQKwNwxN()I!M1L^uojme(wv@h9+_?Bw^q_-{;9yBYpa5ftxFZ>g!mk!CnZ$xK zMg(8g^F7M`5Kw`U0w!_EO`@zIL~q#S3Lni-V19}SH!WV*F1UsRP#E}gIn1D+l z;{ERjwtA49J3Y9Ih|#Q$d(tj?%Zhx}LRU^zCbA`A0web;q(!{16J+kpyfxWO-*p)* zLe>HMt_BiR$-)yx#``#Fj200TW%}=(j!#OAEMBIUbG5(-4>8}LMl`?fnB2sKJRyMNY7&X0Z5$nl?2?(i5An8#}b7a_wa6WR4&=iAk* zC{o#PYxgH+!0wTgw`s4j6T1>tJXzUt6!woqcX-kK{oeG_oDEUf-aY1m`_c)!^YmF| zxpo93ZvW_lk9qQ&=CpRz@S(waDy8k@p%Xx zhm97U9vMX$KLM9o>!xW9;c@4}lXh)$n0weqz7kT=lxstT^5%~$T8R?I!CWcgyd@)drDNd*jH3odNq}KQY^OV`o_k z`T)8Fzu9C64L1K>ovPA>@LN3H5&`$4pIpkKZu8Yf?o|JWxA@mMCfM!azTr|ZjV{$5 z#l#K744y+_S{hw`h@io4xKP}2HV`qew6{-%JjC){*AcM2%+7`GQOb66%Yscm`EGdo zO>h!hi1WFXY&xL?WIGuKM9X(s!^8gK{?zw~2tqQUmD~AD%s^?M)g6w*ym0R~W@XKk zI`l5M_PkK~vtG@wSW9h<>Qq6CJwVw#`emvl+vmWkT@!osy*pV69Dc0x!2q+Lh#!6- zRvmyH@J8?0v;EXF_b|a#9wy}M(%BXIe7(rOmz~-2+L^+vVendOV?L6rSBVKSp{2v6 zG3@e~tJ2?l3?gm>a@{$5i*6ksO_PZd?MS67DMRIHeM@@z5|fqMq-k})EZ)a8q;mgG z4r?#IaGDdPs#db=_#7WvqzzrC-fY6sbWO8HAgOHv8O2l~v}+jBu!oi}in)9ny`)t` zAHJs=fyCN&@dK?g;V+8eWRB|}TaJP5;8Dh_i0A6P!BT4zDe+eR7o}8uqOEL_OBR#@Xw*)&_)`Q6sR)S)CC+$5-FL z5Uc#;Ag9Ko-wwyz9xYk+4(0B z5QIc=hiDEKVnSvbN!%}!qS4W{mC1yUc<*Yhn@jyBo)ab=pLM{8NEn&HeR44}PKjIez9AT}d$vtqH={$&7^8dAXD!hsPqk>2S8fZ)@cCGxJ+kWSJ-gq>cru?Vev0%w$Zzy(5US9ZYRa-$cc8E0 zFA|=P7U?AZ(87ldb*%_V`nf49XP-cZknwBs@+@fR^OD-0`+gqFeapynVIz}IR z>@n3^RWdtYrE_aA z=Y;^lq&@vjB0^+DVymgsuDj-kxqNQ!?z<2PA?27cWB+i+EpvC<14w@LYu|Y3<<||v zkov-M$QpUa^dCyoq|H4^N@qhRd#EeS0;la&Sb|d0uzZrTudjdW8B@M?;dzs%Os-Yy zhGF`3caPn6z2b`Rw6%6jn>K00@QxWcWySj^| z0vJdVq<~;0nG`}uPvs9JAQzH2GE~|Lj3`uU1Q{&`MhbOC3XfWv+eeKW(=~qqFam(D z9Dl^GZ~w)eciwZ!C07}obH;q%A30*!U3dPWt#c$}Uai`X$cQ8Y)@wDW)kzYvP~MmU zjKFgQV@ygZr0+Sdoihv*AAkOZ8?U=<*sx)L`om3czWvUdZ+$p=^vKqhHX(e^t$B_o zr7%o13}eOe)wQZqC>b~Z^4HsLJ9EVB0eU02byZB_Iib$ZW&N z=WGSG7ytq=AOwbpT#r(KqD5!H2T4*ONFo`GA&~?i0)`}m1AxKcR;5yFDm8uM>le>53*)5A*Bx}tCdQvT$WM_;d90*M(Uy6V~7l~S}z}e{1HF;(UrwwvAL-*(AUQ} zAdu(zEltIvjySlzrFGSswd2Q+?QCmrZYm1jm7Z^y#>L-Di?NB{Ds8}{03FG)TSTz~zKO#>MS-*c|K@-hkZuX`TwJU`fsT5(Tt zN2>3nNfrcCD=47d;9LrJ@pmu$_BX%h`OcmMO}dGo#?!Rq83d+gDdU3Nt-m)l{7Ifos1$m=h^HBcW2 z@|cJyLsuIGWm&?ApZUskLAhG{aOVyRfK3+Z`i8pnR+lxJUl z{ocFpYi?;4`aU9IjFdcwN=x@8ft6y3>V-iZXQTeX+_}3Qf7pwAb;XlPI&$Gw?l=DWyt?3q0SG8jcy8UT zTa0`4N-#JdG>k9^3;`GbfWevTxy54s#IGE8(n%*xm^fYt*DB-~hpAI1&zLcle9!S* z&-bmI>G`f@8{9Ai$-3i!5SD2oB1j? zyTgt=u%orzb3MkX?o?N-UES8+JZ$8MC5x8a@rOVE;>PPBm|Dw?n{WN~zyJL}Yg_5i z{r5WhxFa`i?Eb?a|I$)yI`iB!?)d$m*Q{RM+SXdHI%bXo`OM^&om;hb{bNr&(?3vq z_x<;LA@fA0wU=H1_()#BuONQ%u+7czExo= z1R{ng2@&y{YksiJ%&nbTU7>cBgkoI5glHjtD6+vHDP?eG50Ql6-=MoBAw!A5DJj4h z+q7}>?z``@<4$wXz*@D>vYGI>bO)N7bJzals!u+j_xFF?w|x1^d_FIPP+@bZH9@{{ z#K_@WZMAj1((gJ|AQr$t!{nal62P8&?#d058w{lMT_1?de2yfRnhe8g+GEf0M;`wA ztFOGy8AtRR&_cq;Xd@MoZZ?`d#fU*HQ>3#RyA%@E5@>O8$%%8JM^bK>A^5(SFk#B& zSN@QQKn9r$)?8}ZW4GP8ksCX9!fm(zX3?UhjB`?Z!m9+LX17CY7M89NoSgKl^C3G( z2_tj_a)!x%3V@=^#QaNXL3saxIn%b&mf?)#s8zJReDV@ycF z8J9vLLy}T}^o2i^5tQWA>l^@F>3fc4ne}STvcMatITeS9nv10yuKV#($DAzv8VR@3 zU(T0u=Y92}t!B>r-S2<<@=I^+I(P1kzqn!Aw5dItH#avo9e()Xrkz{5a>et{zc}yn z1&lGqf_(~6^+ud44(7{ANg6LS5Q?F3Qp+Qw;37J0Fz(nvf`KI5PNq1%1V$pQgrNsK z6;uvuK=o6+_3@X;pQaISTtf)K;$1USkP?)HMMx0_udcD-+0;Owr*YxxeT`rM)Tc;; z&X1(l62%+->cOWXA*1Q3LIUm}fSURoibGbw8l`?9L>XbV%3vsD8ZJgawPq;eB0aa> z5RU1#1t2Yli7;fa^3#DP>B6QGVW_hsh4TlGr2}-CjDFHp1bCn(U!41UxVKKErJ z_*9%Q$dJ<(2Nj0MJz(6SgOxHEnS0SXK3obWCp^0ZALxy^APM8*V&D127Tdf|*CNWKq*1wciu-K$# zmlYHcIG_kNWL&A&agfhxI+eN9bs{~JMA4=eSO5S?K&F=zh2@-c$8(wr#h+aBqtnhj z+jYty9O5R=F>cV==bZYLlaGJop@&a7`P9?SIP-+B99QY>Cz8mR?~A6^mWA^d{``ht z@38ZnZDwuP)3w^<+;!?gI#M#<7s8X{#!VbHa@hKfU6yT2DHY&KjA{qFX?UKH(g|oc z4a2l71nlbSTe4*Fq)FpR05a2a9nbfL@EPaa0wfJ&u3Iw=E_{!e*|llqqmMi;q%=$uW$147p_s@+ z5`ccTo$8^%X&PGNA`wZc!;p%v`y?U?oQv=KZOx_8qsMS^>$O@_b2A};1mBguTbIIj zSQQx}G795RAQV7^BnhOI&s(+~77r}!bQa`Ez%Y#dfq|p;+Uxg!_+v|Rt6QtM^&01l z2%NeA5+up+;~ZNBdZrpB^! zhG~-&7y!W#umwU)l7IwB-pXWnf^^l*!v~zr%+0o25suz430YP+YWV`KZw&J=b*|cg)yv`9jI_ zgu$i3FqgBNo129vd?A=+`@Uz}h5P<}H#dwu_TGKn%Jt0Tn>K9f=xm)dc@jgEQU>Ev z1O!9@zL7!_QN8A>b3}s0hm0}g+^ANo7o2(8Ip>~hnTA`h1~ICNR|CC?jZbKq2}n&G zr68>v0CZBI3qeXEUj{NMq+|?*FFdaTB$(Zm#e(ok$jFmj7=QNhwC#9(nc>+0%W zzGU&FsZ%{)7^d0Z-R-#5=H@m6wrfkm~_K;ns5BX#k6~`v1HD-wG%WPKKC{!xu))c`A z3B=I#KrASlY^XJ>jqTDKOS&b}eocipLk>VCn37nP8i9F@D!o7@kfG>NI6+-OmVmj5 zbE)EBCXt_rlF2&RD$Sv%GzMu%=#J9K1}%$*YSJJ^1VTKHqBAY(g}AQN(_i8W1J#(n zq?A8hLMl8M%=l=@l^AfVB9dN6hvSsdchQ4s6GjjTLu3mQc`03~6dcg|NT(Mf5sz7% zgeedUnEpX|F0FBzq-8QEWDErd!9`!AnnKlROf*Ka4iI}!ipL%?5M7QarD$y_O&B*W zpU*qB?p!X%xf`6l>UrL%(VgQ)k66EcQ+HQ42Vz{BR!&IrT$gj`+O(nC(?5R9I3ibg zo^9p;m>>jZRjbufsr{sL&VFzHM|b_>AH|65Q#ysp$teV09s1ThaPt5!ABf8 z&{uu^^*0{4?}1Wt>En++zVh-bAAI;8VodlxH;rIfX`x^bRBAu@*|i^i`bj>Q_k2%H zxz$>&Gl?|0jk{G#n5KayDQVDqO7$fo0WofL_w@ekmp2`H{K2iQ?IgsVfBoyU$&>dx zKpGGmIcx7OKPbt#F$DqsUa2xmC7A#+PB(YL^U;_hyXBQ$BE*cW)x)y zk4A6knU2Ox86rwxLXbelO+!k_IOnEe7@QlH5WeTuh3_%W08mCdP9t%Sh|IDq(=tKV z4OFI?VX&~YrM0Dy%T+2B-*=k|7ULiUNJ+jgNlHX!+UBZNYo2-fh21JU59?^zw0^^D zue`c`?YddpY>mutJ(nAVK_&|sHy9A}e94%U1VBPc5p36q2x?|t$hBZs=XGn=FJH0} z0BY458oYJb*y{SV{gnYk6v4)@gi;8eGo(OWx&oL4o40}wKXj1bZ0c?5Lb z0cK!Zd*|p;!x3Tlh_;Tl!ue;PvF%RVE}Zv8*T$}VK1U!8!(f~>74wrPjbFcEv+s*( zlO~QD)#21@2+csy+uOa}_Ot9}L5ChVWy(ZEA`)sDAOw>cks&h}0p)U5IBY~9C2>x`&@eavv=8qr6pNe*WPzM9 z40kGLfLsY62w(WVU&NEhZYQ7M`iY>$7 zVMxZ%K!ZtgoqDNd#FWWX0Dz6g-XEA`5=&px;HR?|9%jc{G(nrpA?>njH*oGFrmnw3LL)vfTQ zzG5aasfm#p4P8Oj<@r zQ3uC7QB@ck2co%=q)A0wN*r_zp`AL(NuWRUg^(d|=_wV-NFx)oA|?W{aGqJrTxfJ9 z4Y8%dX?pp|%Cg~d*bselvv@s7W80zzhNUI9L5gGJ1i^9PNrB$-mDZi?`6}5Rnxs5E zpc*8JDblmpaV9EERFe?URPogCObTs;&p{lIK(ypgt5>x}1<`SV4U9`Ul`MRcL1FS{ z_&4g!SUVefRijWRf|T?@Y%@TMd&3F<5s0G*ChrDI0E0!afXG>2SMM&n?0WBg|Hv1M z)mjArT~`1ykgPIL-Dc|<*Z=&7BgaofWTn=2;kzWs&gYqtHw|W*+!wjLRn(dpTV2kW z=Xq^ytrwhs{=WO{)zQ&DY4YUO_F;x$oOar2V@8ko&2Rr`b7S(vNv3JlYIQ;;JeP9> zi9!k_=~b#yN|n1N0F2I`NMDheilJVE7$g)l>IL2GN1XwTG2y!-hY$P753g=*?F0gD zSce^UxMA7I3`F~+lfLr)N1s*ej=?#_l`5y5l8IolN|bHaauN|)nkSA#7Ncil!>^vf zhTX*zxgotl0HAGw7L0faDJ|3LALw7OVBSH89NgT}=G5y%3<;~{`arFlF>GyVwR4u| z)|4*@$!DAqV4+aT=kov{L59#sB0~wtNQOO8uhj{mxuvB#&?9_b2*w#}Dir`NAP*2W zZCc~H?lH$4I(GbcU&6!*6V5vAw6z=7tz5Zs`ivPw2qX;4VvIYE>(%S|qFuCdB#1~L zV^aD~tuBO*h!P331!bmf_w^0@`(F>e@X{NGX}n zE93U|=Jw(3mHq)>JXpvYsT4^vEyHGJrBandrop(uNrLnRHw=TJ@Wq-{YkqL$r8nMq zZ9ZS9^!C{~%QlQ#etl!1*yK1>#!Ql)Tdyvd<+q)GSPf7d{{QYlvp1=~PuZE11p zE<@OU_ICgJ=U)sX#~5%#Aez3_)|Xwe6*tV@-i@Ds{@MF)fB3C$er@-?cIsN+)l{&h zBwxs3BS!q`kGFsD;U~j}b*x*xZkw62e9!gk^&^iuY`@w*uInCh&_F(KBS2eQD+%8Z zbsvLi8A_;v`E*JU(o7f4EpgdX~c_|Jdcx83Yn#~gj6X*CJq0U(A)Yw>VjZ6u4c zVyPW~0|)@}oa#VdHz4E-#Zps2_&($)pGXP`oFU`9f1n?c)$6r|ioO53Y z*Kq-nGgfSB6#@YyGt7cz2hX^!2LO^#4kLBs5HPs;-$crIdX=Wh-X|hd7cXhTsbk$U$F!f3@y#9v6g9^;fGCL#IrnIY>xDhExEiaW?J|T{x0`kV5q;qz}KR7m6vIn;HR5 zUC~c^z?QxunuipHsE98E?=vA&w9!`rd?j(Wsv=@{vJ3=G^3w!{fmvdPSWHsf4pmg} z6*bmH&O4wZR{UW1U;u@FqiWLFIHn|OcE)f;GQ7|*L*jR85H+pj1kD&VrcpT4ph9hk z9WO&m2L}-jQAit-t!ywSkb0z{C8<_mLPAsyOZ}QWp~8STa2_IHNhE^QBZ&>!Rofsg zEQ{uN4K;u+>O<*<*0@xOSxS|BD$$P+^kKk;p#te-Sl{qt;>96SJE?#hRP(<~W5c?1 zzX*wNCz7!(6oy%h)8CIC9GoF>cO@#*C%A@YJyRkf>A?pja`39vXEl2x@up4{#vfF} z2QOQHzR{^<8QDxm#&=ULC;Si_2#Ty;k_f$%BjU9ZQMa&C8iuiXQ}>d^i}2t>?OXxK zXWS%`QVIYPN)LXna2r$7Fc01i56-&r%awJmGo z#V)0ww`|i^(yt;19+I&9mdS1k_Gy@tK z43O^l*pMVUICgRg4u|7*zrOVsC!BmHXD*;YU`&`Y6A=I;NqP2p7cE)5{5QY*14XB^ z1|0}-ra93iutn(#=}BAkL9*#7P@=0$wn5TGH6W2Q#@J0a-}>}_pZVHX&)xrk{pzk$ zY;J$#$)|7q)$PlcuK50C-?{XXZvjxfR%R?5*pZSrw{6pS>E&1EeZCL?NJt967=i>~ zl7hX6Ez5fKwbyRE;fDS9-FND=$)iS%a(yAC{OE)C=PmrA?zo?R@>ySh_xb0ZwcGA{ zmiso5M9kApbGHZFaiCm&<<-|VZ0v3-HTMq;SlrxUhiy&M`0Ul!Y%AZ{+2I3i*tnSi z?7qvKV!l|b*BIjj0O8mvamH#+b@}>LLWrDg)gAYaKm6tI|GcMKtsz5Tp}FnrFE5z) z#pKCTT+ao7a1J995OC9~y0vv{*N+-8B3~#_I9)c_r<(|*VHqPjhc~x0F@yWQ-&QQS zu0v8X#%lu=0zgxc1Oma3BOnQAEj70`H!}bseUj2~T_J=dVvL!HAYBA5fdLUp4}g5n zX(<$L_}TUKYOP?Q!Dv)xhvRs`u1B8hj2Sg@{P?j95t-rCYL4RpQK3*M6bb|qM-K-g zA%v6^oYM+~z!(q^G0unxgp>#<-0Cw=zu42$7f47j8VdlvkjVJPO&c%x>bJOIoOI#| z^?D^-N{R@`0GR9fEiIjIzy0bhxBeQ@*mKW4xB=59jo)FX?NH)-@4SP^ja=@%4?kME zZ0Y>Z=5IZ1#>E$3Fk)CocUKQuFmC+Vzy0Ix7k=>Cm@%Vl+wR)jbNb20pMSyGB*Aei z#pc#GpMCz0-~DO*`c11>ud^(hh(d8sm|p^bx8D5Vx#wQqW#?^y*+Tf7g(@eBnwpxP zf9}PbZ@s;%yXWK+j=kj4@0TkML$8!;n)ms~|Gwv*4I4MT^!&?=F<*EjqtIPbon+=z z(`AbOO;D7G3N?++(E8-2nmRN}S&~FG1QJQDrwmRX{qc{kI{CCSe5Ynw1;dgvX3jzY z&#iOA`q58*_~|E~zyHyvrfE`eylEC1(842~R;^mi&L}!F9bLS%havi|`>We;+V7x4 zJgcl6>FioPY4ahyT9oZwDWA011D>J7iwW73kr=ynec%OvU#0r>r zA(0@4a0oPKoy*7 zolb2-RRG!Z%PE=~l=V(nQ#31B)vw#x^+B1?R!cI|e|$FNw&qtTk)bo`3#%r<{7q`RAQ8VnnB` z)sb-|+PH4rXP?bqxMVp>;M{Os&tRPAo22ku*FoU}KudFTp-_~;7?5HF#wJSZ(U2X= zltl(8-pQ6?BZmQ>A)59d&vsK1#~5Rbz4O6G$DeQv&y@hsuk}0iTCuqUxhecQNN1o@ z7D5^ZSH3AZzN)818xuGXNoO2+Dz7rAg`>u#WsD_JyP+KdNJ+=40Rt(dX`0>Lz5n^| zvt!4N-S2<{Iyxu#Uir;8-5m8t`hnH&%ZPzb-ZbJ#m?fAphk zu3xlhv0<1(20>Oh>=T?g;rYU{?5@o{H~r$5_uO;OFK@Z|=r*G1&O1QF#6`PFOIU-|o(ELfBX3?vXCkna;PD%hs)x*qvqIz`Drz2-2-56uB0B1$697g7iUDP?fJYq0P@ zozX*rbHg-^YQ4&U02oIQzW3H!@41f4I1h|?Y^F$BX0BSTE?vCH^MP@j$YqQ%WD-$| z;1pSW=iQH=d-lb0x$?sE&sQt8d+xrovtv9EBfj+8-}&z1#mjwPNGV;{>F(+}`@GY~ zjmdMPH($s*p7>(P^3Ok=H~+H*$hq*n-RI6hWWJQH3xK&w)%)PX&wILiip2sq3`t4b z9bD44EbIOE-u?a+SKj`cTX)-SZg&k*T}tAfj+fHEg?=!g zh9M$1EYqTD#WT3=dtRl#zqzHAa{~azjviwc@`!4rJ+wE20t_wVo5DB{hYA@Djj4>V zW$?t>wQHo1AOV25!5E9xvO)j>002ouK~yjyh)8nNHkkL~i!b;0l{akMeDx20^sl?8 zjvY6px34ds%dc3`br^PnTRVHl_nI|7yZ+|qUwx&wudi!U*SYgg`}vJOD>mn9wQ??>XULqIYuhFvJpAB; zg+gKf{q|>!xvs-FBSK$7Ft^;P)q#M8rzu4~gY>z;I`UL_JpNyT%?%M|!d7dS4nlP3 zpYjeFlN=N46(f%rJg827O_rfbNcxv(2v!ed62K!ZrHx;sap|a>4CIys>S?}YV0cVF z6fLn!v?_^!W8(EL%6v5{LHi{MU@7KP_*BSi6%t^)?i3+9p*8UDTAqQTvf~a;Hy>g# z!02D4_^B(w-E^`nE5wc8gcQ$H52WpxUR0{P)y?z`?cc$JvMkC|MWiUChMH9Epl|Uq z#5D*JgOinPXG2dQ=%XfjY}W9$W@91E%?v^j8sjrecG8d$a=KNag$@@`4qES)uK;K? zQXUht#loq<0;V4rBF&LSQA!pgW04+x#gr<4$qEKZD5S|4gt#v`@E*l9=?WVw&j^XL z${ZxenWQw6>a2H^6{Rh}iSSnkdyGeTD4xS)ttHuNQ^VinQ2*z7A^V1@BZ-e zi!bGJ&E&hSElm>G?|%2!Km7Tw`SZVc>8010Vf&uv`u@sQE4sV7iGVS_XyM|MPC0GK z;>DJ22PX~25n;mN>jSE3mIf*67)T~UJJ4LQDlC){5+n`7{@w5YeBCuS_&x{$_uhZ+ zVMiakVE#NI#PStO_S*M=JMX$18IvT5h%siEMi8=-B>hrkW_Xv(KF!e6WRo&qOtK_` zqskeRW|YFwLJaa;jImrU|KLN99dYD|C!c)sL5Cc5_ucoKmI1&wZQ9(|*9XC{GC(j= z=Xny)e(!^i-v8iZKr~E)F$4)DWH|g4})nWdUHV?wEFA`qtCYH2bS{ z#;x7<+^u88s7keh%%DJc8J7rlu{3V%xVq~KA|a?y%#WQgo^w8F($rZqx9aWbaedDN z**7pyE>{Rh2q_69k(3~Vkxk)ub#-<3_6F-SkpLN*mci5nKSbmP7m_w?+O&C77enrP zzAvQfO2?I+FBUIZ`s}kWBR5UU^nD+J7*eq3Eg~@h=}RF5VQ>dfmCIQ8e;ynu3;=+V zh=O2~VQ>NvQ+lgbCNX5eM9**!B*1XynDBkicL-#(|5R8LAY&}l2xSBqs$wbF4h@5e z+rBSc&v!kyUUvZGBac7&;6snqYYqW;o~Sxrz3u=2kH`v53Uba((*%It-T}AnAR$Rs zcieKV>U%;6-}77|a=jV>HMf);*PS$R!sID45Ct;K=dE(NTrQUl!^jtMobkTC%D}(? z07;^JsqNY4UjFEV4{h5XIeJ7#ds{wl4<9)U(GbEQFaUUP;Im~~jBy}B4Cd~Jp(>Ch z0AET1kW#K%y>9KgO~APDJYSOU3*Q%lNVxUQU0onO0O;%M_gpV$83sc{>Ko|yJ>RrU z!!V>2fdoq_Q(Bx%LM3!o{fm*l4vre)c;L%lDN2Ig=A3iJ13^Y)+~A()-FV}T5B&RH z)6V;%{%7ORrqY)f-A4ScKOPcxm<4k!sWfay$FEd+qsRIGfvVOp-|)oL}Le1`DoBTrm<L zaZA4pSo}W#@^svmEQm6`Wz;iNz1Wz808ET$roL)nC&lB9*;ghi9#Y=)He^deV?Z<{ z_KsMT5wHI5uSg3sxSmrZB|SxW=}E+UZkkDRON}UsSr7}%Xa89;+%~Zc<8$q zLA=U5y{f!1QK3;6*VWJg@%UksXH``s@?gQ|pde6AA!;d6qUuyyBH<1((J4_QP}{y* z>pB>$oJ3J^ax0!W5G#9w6lZ2lw5Ou(h$>3=zgA7c-zWGVt&}IV9Y@9$`O}cWL2fE7 zFrbweZ%YHvm{U~Zn-Z$b=BJsa8j;ywsWP+`(a|emy^R_7xcj2CY-o)rIyOZC1ysgL z-?T7Zo}!`}BmxP9h@R(Mxm@` z#=-d&^PaAr&pw@BcU;rpL?j4Ay&jdqI1eMn z%qAno}wkOULLI_xXn+1Dlh~Xp*@TP zn0UxC$QOWSE-4gL1cG3?rs_pyG>9RQ1R1@pUJIC?9-JT|DIpwB37!EYC^a`RZq(}@ z05q41<^I~ZG2=Ri4VTh$4MDymg|DQFbj^y2uU2Y8GBej~<N_GiFq=skmXo zCW9LsdABDdAu?0Qx?)>s_<~9JQcA_pAhwT#F90x2!?tb2LQDH_%d&`oq(p8qo|nP} zAk(rx{^axb-g|eCJ@*5EC0~5<_+wA=V6wNAL?lH7uo9OV&I&9EDdQY#V)P-3==6gI zlY8P|j5Zb2$y^PS2q_gA1i{%s@xp%FvOp352q|XI+1@mAreSf!WlNT}wzU8h0O-DZ z?r~k$vTc$w!~>eyX@otB)Wmp8U^5jw(?VD6{YK*>gkXppHg-AnDq|f+uI1gg-+1)V z|9tb}Z;Tu@+V`oax2vzOFNpevwKQ{(fSAu)oI^fuuC$NTPSn9A zDRL^1%HVHli~)5IgrLiN_N5`NaQh^k{ece*ehPkt7}n}`KMqkboRtfq08)%of}eC( zrBA`bboi89UOuSr)7#Rxp zQ{b}9Lu@uxM`jKR#V9Z$t}!^&&@d%h6n8WL1V>CDCjCjA)sMSP8|_bSc9IB^8e0{u z$0cpv4WV9{<5L6HQc zwuyWH!%rW5{NdJ8J7Z8R6;NVJOA{bG`P5TiEL;T0yLx+Gc=6fwYgYC2^t85@-g)=! zzWV0P{r!X{Al7QtTrRg_#p<8mbTbi2K$CMIVu;8PfcD&D=U?9Pi|JEmFkqE|o`2na z@2$W2U4LJ{W!oH})?Z$~auopY>D~Onho2anUHh|}_S^SA$De#gf2C{~+;eH!(nT-5 z_)1%IGm=Yac)rJ&f#3x(tKyg1B~xDu5(&ThkPxllAJTgw%MwOh3koIxl7`9O|KP*l z{QBmu?%tPQdjl9;{p0IqY(4$iXP)(Z-?l9TkVL|9rcRx-*S`B8;UkYe(zU6ZF|I31 zWRzoB(&sg+U4b=GN~&jcH!wG`UMBoR1eXW3pt@^^5U&7&Aju8nh865;BP9sm1Az72 zU7Nes4(rHo*wn=sFa%_1GHcy}58iwKeE=Xp>5CZphQU$@)rAoCx>K!G0eCT=2k&a77lOoIpH1RK#30x)CjxN%dbOxm=eXS>^Nu6s4>F< zTuI(;d+c`mZ-3p=T6+AkCti5&l~-STedMT)N~O=>HXbN*s!bmDYI2KM5 z2+&mk%!m-k%oksH@#S)*K7QhO!!)aXZ@>52tFP}gXZE(+&no7db4{gJUwgA$uCi*qR;$)) zH7SW3rtqtircOHUxTD_t@T1Q^TexY%rtNl^b;)Dx_X&{rPWdhLZ70bIecL&F@N-0=4wIS$1Db+uL5O#I-Jo(gr z3OSSn#ipWdnLw1wBUKO2)X9f^mM#(T5*&@IeFR{y+ceuZtHg zwR1Tkgy)MFUw-xNci&sMXyN?3>!L%vU`m2>iOO|odOp*}6Sj`nRWK=c# zszVM);D#ipBGRL;1Z3K#o>#)bG6ep>1Yvb>^980OMVoHZwqy;R0D{1GD^IwA{A=ziD7=b(Z{CNl&MNmm8KtvKy~AsuM|qu z5J2L7#x(>?iHdCq{{|s9>%tJyN0em;U(vx^s){6-Pr#Avy0Y@0(ddB6NM_ZZ(LWJF z3%+P&HV_5?h{29($pYf(@460YqXhaOK&+yXGAG)s|BBkLNy0T6f>Lyv290?enUcB_ z$7Ym4*kBc)3Mo)U2vIUB4n%{-6U1gD84+d1Z$m`yh^X70mrYeD{0BNW6~jRzAbKGd5Y(PkR4H1u5jL&KLmQQ3gpkTX zDy0c4ZP}@w~>h9{=G%!$ZDizvVT9EN_rLuPIdXfYxFhkX_u(1*6wXuRE z_d+d>Ah`By*F`JzsiBa^ z91Ti9B#=NL2@r+w0jQ<9+2DpRBmi;-!B#Jx=k@iMg^(%^Pt(sBL&jXk89R35-uvuz z_@Rd$eDMCZ#eLUBWW7CotJbXU?kkTUGj^-#lU&yYK;#BUBml!Sq=bAv*W1@Sf5C!L zqehP&Gl8Kn!((_DqAevd#y%DS)oOLeaU*_)gsFcK zF@Ts7WK*Gt2ttyS;eRBh>-j|T>Z>mQ(T}d&uzpp}vLKwOh9pUEE&xLKF9I@#NK&Cj zjX6YMaAsPz@71LgzAu6;(1OXvM0yB=7%XWG6qBIz=Q zBz!4lb6dwzN1yWAn{OBLdC!+p2+#Kb(6UU^v@FB4^5*(=8yv?`QW-WTlv@M>625FI z7A?z?1fJ(f;Tx7|nkGli7%NvQ1~-0i)#c;Ijn3ur2OO|}bE#OX^btwNN7KsPddn{! zf8@VE`pK1t9=3mf&j15%S|&+ij9a;!An)_f7WDNF0|sM0yBy5EmluTypzB`I%tVzPoynB#rhtQln7ZlHw@Ddp4ZXQ z_QEqyOr9~@b(|Y+y7rg9_>E=f9H%aYEEEe2(f36}w!yh1@;r}mgGd5VV@Mf+-z^4C zL^0rqmIEqB1`25>$_D@`rC}HoCr+@qS(kpTQrWzzyS1%()QAy=WvpMjaozfLyX>&z zy${?yZsO?LKwq^|?jIOvZtuwFONBz)9l!ha4}W-#^Z+@6^dElYk$v~y-}iCZl6j|} zcG?FYeO4+q`MzIsT?7&$Yh553~D?~WWjyk4pIb@#pd(WgsSEd9?D|9R`p_j36{Fbh3uU?43KR%9#@ zucl&&bTUHYU98+GG?jQi`x(`Dpkpg71rY}ZS`i6i5&%1ft_pf2;ZH_U(M?Jn4xv71+|-iLX^w^{ zPK|GdF-zQFNMOgrh-lU|*l0=|ZX|we6qt~@FeahsojAjyF$a=7%m|JmLEREzY0C8H zQz1qwEJ~Ju@hFa#U`t0XfE10grdgmU4h1$Tni_ooLHQU(nTcb9l2AOR3Boi`{A5&M z2uG4{rj&ZHpfsKkp*JL}h@_w<3P;o=FOoGS#=6vy0-r-$fs~$#gZboFfP6+#MMoO8~ZH{NuE zW#^@+ZN2R*05A+*?(ZHxYScOBo%76@=e+s$JHcp`!HvG&^5(8yAp{T^+yIu*SV|j!t_l5yL^3rlC>Teh?07NGU#}AWwB*ha_S`eP?5jIXU#ew)l9$jfsWVZpr6HbVT zKoSs1l3iWh4XgzK;M`!0X$~f7#1KgeBKpcn$6ouBAEFRQzUO%ikw|p3H;))Tn{np* z!l~C8Ltw%DfG{J$7)l{+!`N#2wD$IP03t+^5)q`3M2_c)Vlh9gqhrjNQD1zq2$4CS z6C52tQUXaKNeTf7oH3nODdQ+hF=i4Iq&iD33`Q&ZFE(W8a$N#B#40|q-i zB1z&534tLJ$zaPdBJu?xfFueQ8S-F?xEkX}1a6oQJ^Ik9NZ3q35+o*ge1WXhKZBRBoP4;N8Z)DxzgV|X4GhA7+$?@7)GhJRH;-e z)f(dnz=PyerCOJ=M$!)s4p9{$hTcrW7Kq&7!MW%8uIG`Yd_G^Plu!Q3 z@n@fT&WKT?NLHnE9H)w$3s-XRNmeet_@aw0`kHC5f&KwR#taU~fB_*o^*UoPYn!d? zoDB%|y6d@~!I00o2vMol80P>GE}kG_h@5dm zARz(4Gz=t8q0Y%rB^1ma(!j<_q-sWtPpm*lWG6Kx)Ny%)g_JXDJdpw#hK7QAoq8Pr zsssI;1A=231huLVvR17kB63!*JBDE}#=b@w)3AZu;1XnCUw>a;{|nE(boLo%jvqfZ*J3{Z;!9Wl z;K!RbZ2~~s&Ovlw5=t2!FRacVS3#^ExN2RdaU+xvi~u2K_ymphkoIo6JgF)&&`A7v zF!h5d266-uwQ*%cF3xiq!*kTYST*uZBRJFR;Iu_#a*6NVd}R=rA}5I6g+fPm-%`I1%no%x2rLP zM#Rj9N6k%C+OTdj(L`*dE#)S^L`$>S8)msw)S56}4M$fE;p5ZA4mIVy@lco8=rxku z@M-V|G;}jGLxyZfitq8W4e@H?ogr=zDHyCWqhS(8l^Vxg(MIK}05yj#I2JLqn!Yc9 zT#KUs^nJ;>!PIWjz9&4lBBa=BkG<~v+g~?yZCJSA<9VMASf=Spavj$;`EEP!dB$01 z?zGExx8Hup-~RHCw)RfTH2Qmco7< zAXbsVPNm2YBmn_T~a0G^28K}WA^WY4?=!xXbjH9zd^$yXs=C!m70S&`YB>(^m|Ah4G@*kDU5P@^< zIDXEyCXbuYWLcXxug}>Q5J=>JD5Uh&PCo|cg3$LR5OD*6z!M%K+O}1z)dyF=5kiBYMTg&Nh0DT$Y8!uLsXgjy(0jDLQg_1c-XI1^{aMZY=67 zA`k$G49azx{_xX-4mtGb3V*)Ko%bwOWm&+C>_kQK?EU4 zN)h#u;y}n`#ME)(2}eID=f5l49T`WqCMp^%21*WxW%g2L0GWU^sT@cW(QF}h7~1@PnTRjCWvK7*AT}yW zGi+AeN6FFDP>Z5hGv@222GBA?g26c+A12%QQ@Zt8K!hM`i1DLHo4lFA^gd<4`i~|r73$|Heh*HR}fAxZEuDx!-yicyY`iF17^`2pw1n4-uk3amZQmz1yX&P5t@!g9rz9eVcxqSYoKklsdRqlQ0 z5e77E+Vo%Da_gRZ?}_Mv?^nv3_uG5lAN}C+A6|3a`gI!)I$+=PF8YS&^mEP#OxLRk zNiFSdmtT2Bf4Qf-zc=4x`K};DV8~5o7+gv;I0L|@=H`yh4j~01i_j#7osO9~FRiyC z-;e4=ig+6&^R$>hWntnRq~^vV{)gNSL`6zc_LhLcd?shyb=>nWIREm?zf&mYn_D^< z1K)FxIP#di_c_S23*Y$0MfczT5D_t!j#(R}MH7RB8pcV=P|vlI^K>DQNT_1AL`QZg zPSl2~8mVBMn-1B^kg4hcF|ZU25l8}}1OSjIQ41niV0P@B-Q3;|rX__(WI%8dPC!{; zA`k`0=9X48TN>8z%fJ5XwiU}({{DBj0f8imgd_ih2URjVtNfwe0(PMI-o@}z0Gd||`-^^y$JFxonX0onkb>xwn2SARNh!Q8pK z16AwgKF{|6q-|TR?H$N4m}0;UkVlyB|UVQWI7jL=w*T)@w-05e1 z1)vFl0BYslULfD%X3Oy5%q$g}mVPpS-ciRM-_km=#Vd2OY3j5ohG~$Lz&TQsmM4NB zuuu46-MMIAm6}D$LjXvKD8s3k!H&nl8L&Kfk|6?TLXht|uIE}-j&ly2Gvq{o3}kO3bU`o3$J7B`J}$!;<$9|~lo4q+?`KupC7gd{=ANVO=O-JNCm1F=bs z=P3D69$E(u+Kn(n68@7KG)Ta>2sM&^V1_CYk z2_V{e?w&i$*`w~bh~^!?{U3%*N@6IHMS~z|ucNC&(yu{+A-a83TW@MlgpF!++ zj%_e0rJb|)-T#2S_c>_$IXhnT^>3bY)>#*P?W=Y!AJl*BF~<(?X#dCEcR%&ibDK79 z*mu7JF8lU3cHess)5=%M1D4G{{NRIcUvkCgpM1_aXPhltzVxN%pPjqQ?57@o^2HaQ zJL~+j7Jk0)owwg977Lv5y5r_d>xWlee&JWo|M?BSxc#?($mMMVd7WIfJPy^yBM1N# z$(uG20<}F8b%Y#oPXWp$5jLXCPP9JN*8_v zNLkqEr@$O5A%?6==~L1x#2F$}T>-nXqZ7Xv=sfCO$nEGB7BLuYnm< zI8-5pnBee-bV!ud{zUt<6i3V0zA*hKH91)ZWj zWWN*>L!H#h7%X6bK@hWU{!%3;^ER0Jv7zv&V+c}WrO`GR|4H+#2|-Ai{D#*Qw;FmR zWj3{PF^oP zS`Rv4|F_Q>9CpNEjFAw|!p{~B^bgD(GxFq9Pd)gM z13&%f(*^SvZ(P5sDR1?5^^TfcEaYu849*MH%GxE1SG@B2TVMa`MZf*+ZFVl_RQr22 zcjfbTQ%f@t^!L>M{;z*M_~2vtLf&;f85^BoA1NSU@tnPcS%@5S!r6yTI~+d!Qi7k( z!{~hxVm%p{EYRRu)YCi9oilmr*2thL`YY7~_>{b;G)K z3L++w5P0kWEJZFZ;C;mEgi(r^ zMGQbfumA;ut&u8~>Ob$gd*j*-E7z_uxN-2odvCY>?5Cf9Y5x2roV>Yn=gyrw$Md{u z-Ffxh_iw-T4+|GAM$US>yGM*3HmtSdh{KQi&J|y)4b*Jgdh_kK@A}vMOBOAB_ucn} z@1A_}89VN{<59;Pa^i7EF>V_++q{15w=Vrbwdz@xi3pr?%gk-P)s&M?II2`Cb$9i= z_3nq2io0&Z+TZ=*uk${e_u`AMKlbF4rRGv|bIU$^?!NCndstRZ2zlc#fBW()FRov` zcGa4-D_3tCGit0)IDPAhU(8>G5(NO0QrmfW%U2xIC=`PjZ!}3kUM<9qQustB0Z1tk zQF4?%2>?a}`C?P6of{~ZUDq=ZB?2;(GMLC79x4+=uu>AB#NgZzAA}$xQSPl&2C9Li zN}^z7m57+yn=qi0Aqxl%)+w`4xB(=A=1Nr1o$&FYvl&FIVh65)8qL+Q&9JM&%uc#< zHIia$8z;{8^5J9Uk`X~G$h#DjikRZ+(0Nnq;6I;#LYV@e#zUx&7YK2k( znIJS6H*fyMFYoyMU;gqxozrJb_x+kvujle5->Lha#~74Kt&_)%0ZGG#kF;|+DQfS% z^UkW}tM=S?{{s#=V%I(QIrqGCUw!5EYkqX~KKt(D*7}iw)zaiS<^2!X?LE{S|9aNz%jC#poUC|oMxE1=t z4diJ#EIn=ae~aicqMP`qWOb_FBbtopIf8`XM-rYHw^004n4i_-lK3~Ru)&rfH}E~8 zJG)iX0Pm8I1;BKO4Y^Sh#>mhRB&9@kGR1>4@sZ8i5)fs=qR)ttztYNy^en6#l@E)X zoIz*?+oSmliRf2V5{HGUr?v9_7m+!n1yrL$+k`L~Vxe_6O4Xjyji|AW5I@@vVQ@9{-gy4m*puIoPg%yS>S`|hrL z?A=$dyKbFxAoA^;wP@k|Ki%=iYOP)<7F^Foh~m1$#5-sZLM=K<$vj23Nol@HT`M1? zFhXN4gpw%()g=_ZjM`(W*asedbgOAoJK8%&kDp-KHUK*1^5&kt-u{KJz50ff(%=Rn zvM_3mg*y@(jd(Ta2eB#9I1qly2v#xL&>@gzP$|tgSAz+D(qKwNk*0)pRdtBQ?dVIS z?7@yTdKFR%%QCCg>Sv!W=;`XWb2-;>gJq@2!flGUZFUco7cO1CaNdG9-hSJ093U`F z0}+J~jPpvl>`K{J?i)3JjLBQ-j_dmfj2j#amRYOzee}s^@4fRO0Fxq^c^3q!2?Y+> zphc$%&Lx;c2*`kfgLb7P0Q7zT@h6^q@~QtyDGSBoHd{~GVb0EvKm4D+-1#rdG|oKj z)a|yP`JIa|f92J;`^x2>o*q>&tJdAm%JVNV4}x_i1Ge)v%-1n2xOfBK&X?)&?J2Oas+%g^2T^BV^S1_Cc;s;aHT1R+<^SyL9zhiDcT%j#DL)Qux3n0y&=F*4Dme-P+YF z=WVm??Dme1{@z{yU<`$?vO++J#1IKU_#PlIgkZxPW(G8nX&ZsO1>`V{*R6znk5>`~ zV+|_C2B2VMCAQTHim2u_7=-i}WmO{S!PHZFrgE?=jNdR;_k_m`%0~u7jIq>SPzdM? zv2xu8+sYy4Iar=sXAD8o=I%`cmC6&3{}+NipOw*zpr|rs5furamAVp0Belmi1W+Mi zo#NYogs};WN(-`e5sr!GK1YX_`9fHh^|w3!F?sBW?_PE(=LVtd-rOaLkC`;-lXqYK z&tw1T>+4&(;)}%#KOR1Ew2-_~sS?QMru-w1JoM5lFFg6gGh;@N-h02jgz$w|?`UZ$ z%`E1NcBQ|!*xb7BKKmgvrfoePk)gpYE9bejo}TW3zMkVwIP!xJKD_DX-}u5m`Lq+i za@3I>9nCxJv{O%S-*5l$r*fs5FBGcPYDas^^vT;Cb;QA?yw%&aV%wS1E_ zgT!+B>!I&O42DcG+E`g9CA;-O$qLv(Xl8>nMkDf#t*Q1#W|>-IKfC)I5$T|9RE!N% zEjkp*c$5?YAxE``(?MT@v`3U{O^bqHt;_VJUi8bLsreLzp|B--CtAxITfzuvNAXT0 zzmf_Rw+mHtN|C-KabaU1nVF8t%>TttsvKA&VbP00{x50Pqqn0_B!h7jE%uF{P0ok_ zNT_|I7*X8b@L@Hq6TPZwS0aK+wOzZJ7+Vbd3nfU3drBiLvztOP8Z|ts1u>nf(DH~% zIZ3rF$-l%6)TK6IgW`XZMj{m?r@zK8MlH>ljExFDkbVym>Cpt7OY9mIc?i-wy5Vb5 zvcg>}m=b)_yIMfx0*U*+Jw(O zod*Erf%2w}>%sRC(5t&d!pyNsWnkmlMax&N92lr1 z`26!PZrZSMSlh52ciz!)9LA85?IAC=Hb3>`lb2laqu##0CCgUiTUz%%U=O!mb3Jdx z@@2zDj2JzB{MfN0)~w!m+%ZRNwaxTerN61zR4NucukJb?5KNx7^_i!g{QVza4*(RN zZyB~cp^B<|Qoau|R5I>GUH&6>#y7RGhnVk4I}({@icMYE=|mDF7>4oeGtYnY!Ne2)WoffZike|8mERY zVnon5nI&RKmfueCQ8O=?U|o_X-6llAB2v_q)pFT$T{~YO;Q$9fhQJ`)!i0qDH|6uw zrcNsrOI4>Lq`!LA`Vk|BjUGL!QW^O8<4+eaT5{N7$Bi5@>^tB4)(KxZp?h7Ioy!?{ z>!F7p{^`$d>ggFM50vxyyyyGMo{_ROA-@A!5fl4AM*XY<2dzD%f9ve*+-Bxhz1_Xr z&YZdX?sJixv(G)fSSq=WIPt_|`}_J|c=`2po4QTg$`y(yf92T24&U$J|9s%N=UzVP zw4Gxm1=qx*DU-td)Z98Y%mtKD3-S<8aj%yi~B$~V9j<#t?;gf*|2fJvO z2Wkcb0LABUmVPi)PAO7CEA9fBO4hHkrkm=zw_4nYu0ZFjw+3kb2>%}qt`f$ z!$d|^ms`?a0ssKl^K!ZTb5B2W^pQt>{rs~JJK`|L(5Y3BQQdLcI)**}(rZ7w>e>Zg zEIjt;qptk^W#cA{tyHVv1)@X@5E&qX6k+;lECyu ziN4kKDB-Oz?(xKxDl$~y=*JW#X~Hyft}9vSXVnBw%w#VpQ-KU5si8VT#$4CE{<<6f zao0aOJ6e8n^$+IkysKNU{p~Mz-ukQG1DEU8ZsMH#!Vl;2tB`;+rBynTXs1e_#ehoD zAGz;T1cr*gQ4OlSjSGEKJc{BWtwhF{=eiTejGaAudywFGZlRE?mdk*Apud0G%&q6{ zw&TJ@OCP)ciLEA07&~qPFr!{`gy#Y_zxUpUfBVbbm1=#jJ$IivbrR>MSM|q?8^?2b zDag(hE9L&zUw!SF=bk(7%yWPEgG*-4oc!j?Z%vs#ZSvIdo7S$|ymp;s8Jshl=TAKL z*b`1XX3erCeyv(C*xq~YwRGjWmCKgxwdZa(-FW@k zEV|d&hAnsAAT%dS8O#=J;Vp=5V}exOBWl~SC2MR5L?gF=I&%5)lnvI(XmCvRAS8Xm zmuY?2oS-Q*Xq%#zKrn?W?oY-55Lx&?A_5O`W^VG7NtJ{#(p9?SJsWJ}@h9F+$gshG7o$_C55#qkp;UA8XgGKmYu*Z@Kl>rgqGEH9KFl zaxJTtFSz%DAXJ zPZ~XC+VsxOwjFlf?Uk3_=&km3b@djTn&$4hM{C=do}SePvwC|rc61IyUvk5e!e8IL zDP}e$Ru||YWo+BF+>@CuKDz@N%WBXPl~T}9Zv;U&=g6?DyT|j~l^ZuTH5CoZdiwbn zRBUr63@Nnrn)}zf?LgC|bqGY9P0f*ulMQLwho9l&;|#v$gz+ZZ@)NYlN@K z9|3_e#9%*?u@lCW+FRUe6%ko*&?q7RGR9q}p0~_zeB-=*_u0Ft&{X$a5_0*Xq3-~*1_w7K_>fBOB7bGBm0rSv^d5P8E#jehK*dysL<;)s|p z<~>Jrw6>7+Jl{j`PCMnqiIc{^|NciGe)P#TKl=brk@TYmT3+i!2`?Ck69diB*e z4m#+-j*hnLetK=aUM)41Zu!N{ay@iF45S~bc zQlbE%&F==#(V4CziJW5SkA#qnAtHb6wKu0u7<2ehhqrc&@|`{@eJNS4IPCGqe){&i z@3wb#{`24WlnS{UZoF~$@bLf+0Qp|Mzpw219uGG;lZ-J4RwoC;8c0IQQroc3;T@W= zqmITK#;>w2&68*?qNt!D9h=SrEv#tpnUolk%$SN6rkDsL5sivT+I&C&Vi2qs4=6M( zt6Zsk`pG;yXLXm$P0hoEUlqvKu3yg>XKH_JQi-o97K%#H10NMU>HtF@2FPS!7-fZx z&KIZt#FT3QFlTTsH0st`KgAd-n z?uHv)c>1|=Wnl5LR=vs8c&#!&?^|w6FKmWp0_t<@xo=xj5 z!vraj;iZ>#6q>!p#~OTgLbtS%BX!X61jT9*znJLR zF9A&>Ui_b;k0@1{713yEh`~aV40@8*gCb~?pg41BU-UpKt=?GA;CyKiPCXtDZ)s~; zF_lMDuZ3njgk}nhCbcM;t5LM7dlXU=>yKizZUHkJ@MXdUJysm-mBtap_$NrNWsi#m zP&PV6xhfMHZ)R4P%p61!)wcKzWf5tfkf422xTQe(P`_*rcDB{kfex{@88#Rxsc2!O%1 zn1;bP=Ru|%kulB?fTXO|YAcqmUAAP^@DZ&b1tWnB9H%~c@|10N*!AtV-(9h4O>0{V z5czf2%;kt=e{X-Gsc`oBr>$JK@;7(<>D5ed<#MKJx~@mT!H)=xbJH{#B1!2Bp+ntNwuK_+Mw(HL^uoTg8?!j$d|s9=I8Sk z-S@yF9UX0l9CCY;W7Je#7Rqz1wU(W9rmNix)3#Z*R9O^Q9MGKkoRGr%aie zE9N}cd-Ju|kOAjh3Q6HI)<&Wr8a5=&4MBRc3HiQ9GK_l&!g;|!$QaA#?cH{t+t${` z7_+$P`92``T@kFxm7Z_gxu#mzK{}t7&idWbv-FOt`cBFjl)FgGsR6^dWBEO zz%-1PUwh|U7hl%i-fkCi0BBi8wNifg;r{@D?|4Fp`O8YAjYC;Ms zRsuD;%g`c)v?xm+Oo4vut#^+;`h;VTI_#p0&iU)#{`v2_A35=aqt8A6+|8RdKmO={ zE0vmMn!olt9hwWzWyWifcSFiogU{LU$KU>*?Qh&g=sYJG8aE70_F{V%dUa%d0{(x3tXNdB@=+ zIybCYozGdojB>fkYn9`UIQX$c5BTqYU-)A2(g~Bs`Mxks6A68vkQ+qq>NRWYuHV+) z&N%aZKg>B2NhyW!JmA+a&`ilvP7A5!5$QY^JD(K8}hK&5dUEE^c7BFjYIXL|{a zoIwMdlt7WdPk1{>-^OYjM;z)sjNi&= z5JayeFnI&M3a6Q*Iib;!E>u~qBr8(wg9P^?wTjMV)h3~9&ze)bMP9zL8o&2MOY=SyAx ztGqx8F$_^@rnC)lg~v=r{yq`V4yvD97zR(6>ga1`ff+1scp$s3qG=@ zzy6J{{_c1Gvt-4}dmnsg--Gsl^PRWuf9P?B$P7+0K4lR>-+nIxbR}HMmik6rNh{OP z3#pYQnzL!VD8ipoO5gX1h%>%w&6-vB+y?*#XN((;o33e(I;=c{@$Sn9K;Sc2wbOHw`{Ymqr=V>Hur2c3?QOv ztpkEnKv8(HBc+%$z3t3g_H&9n-ddf5&azz5Q+NZPoIC6e2k35x|gwYL&W_ z5g}V$49OR_j7K0MOal+1A?9*FVtR(}lo-CCA!Ep0T*a z0ZOvJqgXB2LuuKHRV!AlMs-FdA_^&_FF7}B^_pc_@4WT)S#Q0){kF3YJNlp%t5&`L z_6L_1ESQ`eFz80nOX6DdXniREefL?S{84&fn)=K>@fL)C$*6uxN~hG_=Q z0RVj8lTre*x8HvE-FM#y04XKs-1WS0?JEKSNl>LHOdElQtsA|$p8ispGemnKj#X1c zv`4gRu#r1a!(zx6p#@UD-S-7&eAA}Qn>M}n{`(&;S+eZ4x8DAI!J;*H{OP`j9(L;9 z`VAZHeBLzprj6Yj)^FZ<&h|w3+AFU=_rfcy*KN$%rVzrb*P9B(-S^nbt-JT$^FV8R z+ciJFV#l4gfAih<`uZwBl6)zE+bzRyyXuO9V5n#89TOIsk*MmxB-Ynz!>93u&=f0`aU4Kt{W{NPqrJl!Q;8oL1#DO zjlmsQly=d}YVP;h|{0cmPy~)Z5^>7`j1Y zU+GQ@Q>vbt{gQqmrYxj9N(RK7iv9`Hic0P@- zvx3UfXk|qcObCL_<`jWju#6aPB&k)N9H5Aa58I`;E#Bu}H;Y*}Q>}_V#HHzboJU+D zz50NJRI#aaM#5DjtE8Ai;qQYKsNPN*pUg%L+R~t(LVl{2B(rEy2cq(6qz=P`@ccup zdG(`@KlY^Kk16DA&iR+I7! zpAev4t4m1+XWU@*0gp4@Q>!dnzTEf4x4-?(v(G!r^ZaSkr+@3>Z{!Qb@e`)jefh%c zuQ}!F>8GFe{VOkTZE7pEHt({_E+?OK>eQ`gE?e@&cQ3i@)mL7dI%(<&Cmwy+AqPrP zA30{s_piEQ;ljnmrj{rF`^*!M|A!mKGtWHx=9_O03{(Kwzwf^P<(FUU8z>VIx6CkJ zZD3l=mw02(Flxdu)}ye4LL8<^59z{?=oFRkZ9Ksuh~}alhqX-_m2$*^GXM}tA|b-# z_zZ&sVz3w|*as_s?1)H`2*feR9lP~5Tfg!88}GjTjtu-aOKs7uXVt@y72`!Uachv` zRzTu6CGiRWs$>ZeAY3gJ{SXGvn)lZpj*8S7r8%{Rvq*!(7+5Eo)Qv=7%4D^T{Wlw=Ltb|J=R9cH8@|%Nb{u5zHDe8T55^ZCKw807Cdc zV45Z<2|xhkaqd1)nK0Cc5L7oh-l#K)h#@kDK;(JeK?m)3=bis_oic%N9oH}ogIk7a z)@tqzKfCU4cmC7jjB(Bofw7=)2Ej&8j7V}OXU*J-bB2t3PkNq*$N@vD{3@Hn|W_a{31*ellPEjpu1aNA#9d_6rq#P)h z39(Ws@4L?)vu17G*Eb-9o4516>vGNz5RnOAAR;0&ZJP+Xx;INHciw64?|=WBVI3{K zy*&>;@Ywi?;|@6RV9U-+=^uOaG4Flwk!{$Zt>j8Vkci=-CPw-AP-p=l&;=ks77siU zGR_eR2`t+#5A=^4JLZb3FWqC$1N!fh1%?mBWT?d*f&G#|ESyIgLPFJH7JC%kw{yFMns8=Zd+i32pHPp`kJ zyQlZEOD{d}!2JRER$I;J@9XQW)DJuKV7pXYykyz1j?QV*COMT#u;?a;OG&VSp3R3G zc)+wNQ)X^6tzH>0cyLZNV~qK}2Y^;CC#4)SYTP+jpFV5bZG0as6RWja-p+sU(TBgi z;Y0-I)LgFaROZwEKn)Ut)w47uI-OkPZ^`*is`s6;LL-HC;iRH{O8Inl0$p=nPFZx$sO?mrjJ zvke{${)A>Ab;wHWF$f`^?xPqUu_*CMD#x4Pd{(ETn$e(4TBG$HdX7r!t11LkzbO@u zjiLtURrwhW*D4HYXw*7_)LVnt&X9%45>mTsq85=h787C;{g)7+B-#<)*PMK8Yr<`o zgn#_eN1cB9*>1hxFgZ!lT3oWt)-x`<^y0h!d2gwu)ifB1;M50-lvjFwM{67B%qJfL zu#U(%vvO8GU#Rz1M-FSh>Z(hxzWS#eMZI3l=Zn*(PV;?XS*)p$uk;U$A2;dS7kzu$ z)U9gOfn3g>JZ*ZtGQfzonl^dDm{A|(n{NNjZF}y!2Z);I_7@7)A%`Bh{{dbuU)ph} zofj@#w0O}X#(8gVKQ}nzSgSjWmo5hY#<}oCz%@|%4=Jyh?3g%_m*|r4eeIca=O#*^ zgy5n669m2j04NcnhK4msO5)Hk_(A($b@lg~S~|NoZ)|EE{=uj7fBDNh=FMMl;Qsqg zoiwr3($c%R%gX14FTnSMa~cc9VslHA)<%S23aHBG#MZkpH%!r65zf75iOTrcJYqe&z`ycOvkBl!vqN8Mgqow07!yFlHfWXphPu? zj6enly*hQr^L)m*Vm<_CzE&!=5Jn-3G(Mn=F`g9vSi%DvA_42Qnh-vMWDH4?>$vUB z&BHp{q$J1nkPsOLqsYj4(7hbFFXVQ!X7zNHPdf3~8Pg{siIKyaFTdhDxk3>@2-i3B zqecwxRC!*epkJ603R4@3DrGMdNfsqnK!^t8ao$wf?7&ttjzBPN+JtRpZk@Bux@FJV zX|Fqed&{qHxx=u{zHz z8lgM5q`RQ#o$wHi*es_#9O z@B7V7t=C_B-Oju2^58@FfA##Y779hzbsg6w@YM>Ja2#7o8R7PXd)5An#3-sh9-Gqs zQo@u5JsVkNf^eryOhG`5&~*d?bv9`UwFGT(tD~d=0-$AC!k55^Nn(gO%VG>93C1`O z6biY$_S>g(_=x`gUehv8KJmnV-1YCZYu5q51s9&X|3QcNUd?yivE#-97}aur&NROM z&5JvRjaa{K)2XMQT54_;e*MhzE_9r_Wf+GYIdcC)4y`#3N66(^y;d_#6M%sv&Nw30 ztJU4-?zrDxyGiM}j>8QT84Hf8W{d%defHjKuRV9$afcl)`QEoo({`M?X&SCm&*e(H z?7HixpMG-Ry$@NYA%q`FoOS@UHfWBr&+290(?7@+2v4K-+*9lB!-oKloT|7f-#V`AXoM~8&(Bp*(I6b##z zQiaCN6g09RHZ-K!9PMiWSE3gqElIVI^dqJ-=F%n|3Pp+C7!|}G95gcGDp29(n7A(y zBgADY2?$K32Je#*K?H<{kk!P^*b_unR}-hyj=>EjHY!zMQ3@ujW?p~{e@|8uS`vp~Jzh9?{8i^h?4k)yPzW>(Rt ziwq?V zh=lJszQ>SpZkT8=AaLs*LooC9$1i=utUl`nAh=DLOlc^X}l7@TrELEeeO|UT~y@N0r8!`pqo0v!;#~(tpiMoqu zs4cE4nO{Rm5(q;aiO3oAeOa&f0YGz8VOVEJE|+UA6C{AGKZ#yE62yiC>kq1R|)FJt8qsshY0IQ6fkp2?*#^CQlwW_3P&gukL$3H#h`} z7=t$k42T3kFuoNTA`HS4L?(rhQXu2OIm1$T089!=C=nQAf!z+aiH?#m82hd;0T47M zJXe%RNGX7bNCx}6xPrh7n+1%8@hW3cNDn|j@~ZD&cIo$Ip*+V)~TiP%JdTLy{;=`>Q0A(y(xx-lUvcldk7G z4gnDPvcFPpHk<0TTHemj-DQ`2Q?WWQ5FFJybK7lg+Zq@s=W;n;_^9LG1QJ6PFeTt! ztj$rL1{I!!_`ffGC6ILdcD9XI9Mg1}amE;D3RQ8&f*rsBQ4)EcTOQ~K01(nJc(GV) zE0rA2+qhu^0pxNy1Yj&2H`b9-biPkxGA>C`^4DxjtL|iA867=@=ilf6GbumbxBx0NGfYEaB_bdp0DxGqb+nYi^@zateVZjEZchK)&Ssn z9uccmYL4TXCYK;>yLiT#X9tz|t^+{%oN1cqx*kc$=klde3rJC~_Ic6^hVThNN(qR_ z!1r8|BIvO&%|r+sIXCN--r2Kf-GBeTeb@0_w_d9gf#W#UdcEk0yv5p@TL2)K7D6Z? z5w#LDNX=k4=F13Z1R%A-bPu%!P?x|_89q;SYx0$$i}{k5UP=NsWn$X@w<{{0NI$D7 zt|0Oe`iMefDMLrp%2B1@M;udzFz^45)?_d|6-Q*_*2dkw!q1J}s`;e&dsb0l^qtad zRWia*EkDXNBSPrB=qWhR*bdLy(f+F)CVCm+)qnQB+s2F9QwL6X*2 zI>GUc41<)WC9((!S00x(_{$L`!C+mvTt5ETqp$tR52wwTQm^%!rbSX%w%IwnT}r=F zsUe|daJ4iJ7-JwokOao06y*8LFbp)L5DbAcgNRDarA-?){PnMQz46vtd+)d3q^Vow zizO2N`t|EJu3tBH%&3v$#ut3iIbt+7&Ay(^zVCpEt5&WwnK5RXxk3MYVFG6}M|xn<;t;i`)=eS4s^5f3!xXyz-^1xBWlbJo_;9E7jYNq-nD zmqm0P7f}!ZBGa8p@O)s15E(Fv^2RDF4uC))5g7uq(A@?^N@SA7S|G!TWRb@Kh>ui= z{bv~PNFt!%R8m4Dl2U76ph5^LUJVThN0QR_M9#K~1@wL2_kkN65q#fAB*qL$5|K@w zF~zp+O1WwnCXv+9kYbq85+0CDWMvQQ>!zk&`b z(vfa_)d>L@55f+sd18M{if(YcP#~(j+`iuz^Cjj}D zY4TFDC;USWJ?Q2eet!OiUwi!Vr?%T}`sSlWZ_Uku22AgdacSa2&7p! zEgg^<%on2GUnv%ftf@dG7^08>h@6`~Q6X=(ceDkKKxE+p7i78!KX z5IoaZ;h=13WLiqtH6XNw;wZ6nk0M?Aza-E!+WuGXMrsB+R|!&WNR*isuWsQ|sqU1j zLqaFDdx=0Q#<5{iAUzxrOSDd}9;jz#E|mWWKQo3>%Fbb})22_h?P7m_*)mN4KLR9- z8^ZO32LMb0A%Y+YfWq~Bf~Ha_-`<1_eAjpC9uW#5ea{yXOvX!v;>y))zjx^mUVHtG z6OTW7`t+$UJ^#$&g^RxRor`qY8+OVmU+M4bJMh4RU02$<+?wUf-hSh)&E@j1Zu?!WR?p@0QbWajpz~fAV=2k?{FSTLEuR1JiWMuH+uAIH z|KrZP)~?#n*3v$0@??X{uD-rvp&$ThL6*Krk}J7^B!%y|+{zX5MF?#XFjU9lLCk;@ zL{nBSwe4wIt~6Ev0dWHXJOrPD&@(t!MFm-s1Y=gXnINUv4v3^ywn7k9h8-39W(?*6 zlK@~+3L;?K$lLj9t?UWGIpb&`Q*bQ=>!C#fk_w-OB1=R7l1P%2L?TL7ARuQ5z=#+k z2S5ZCHC!1J=6jCoNI(`G2Tec>7zLZP3Ig!gu36`~9%Iqztf8DFd~=GkDf1TVg7z^A zWf3^%l}hE%gAP38utQA~Yqg4Huz`WT8Qadd=9(*R`1x(0%=>)YxN)|f-_YG_7`#?@ z99Ootw~QG*8UTnS!$v38cqyZv1V8l7WGg@l3v^CWGrwCqjyJ3SbZ`rBp`CH$~C0VHov# z<>p;>g3+EnREo z_%_>(dHTsGfAr&@F8E@B^VV&*-8yah#7{r|XyoWo&8^J~KK|sVKfU4AciuM) z`{y@YbIM7_b#3b6oRdUAZktA}>e!aiIbx(+ckA_f0PY!r?+ZzuY1ysKt)5q}4)k-z zkuk=Jh#2`yFwgVqj;mT1`WoGg4#EipwdtgmDoR@Y#+UxDz%2FcOGT|&lqV7$$zKLT zty{+D=~uS|>ISXq|Lsam%O14n6b-?jXvRlmOEvg_$!7r@0L=fUA$q);CMOjj>WdZ| zqSmy9OoD+Ss!qKXC7>E88dUiqX22Hq$E75px;RD&$>^S;s0>%`1YTR`u5#K*gP08A zBUm51=fE>k%py_;kfsIz^}K;6c5#~FCZ94%Nso7tP7cE)2a?RA~+Y&J%VoFN@IH0uh1v5uZttOE?*Q@lGP1E28 z%jb)mHgEpRFK&M0jkmt~)eBBJ<>X4GCP`X(yI!v~x3zrxl8aWXUGdCwuiXEDyX&0U zvt~@&bGKb~-g(DiBS(Jn$-I|ed3E#V%^jU1zk2?8=bn2GV`h7Md%3T_+}}TG^2Bq` zIepWuxBdODe{5K@`X@iR*2*`P`+9^=9Ua5Ap1Jiees%l81hVZZlng+sYGr1_{TeVO^N}@F;;fS&#j7gVA;T~> ztlL;E_YNC241k1?LJ)y(+j#)FaQ@1At;!AafBy8xJ@?$L?mDjHNfN&BIAAVkpMJ*K zpL{YeIA~Ew5vVRk2}~uFiXhE`LpbcAwv-8VEPAC8mMGh+GWQB8rgGl8{>BMg2s4tX z#4$vk3?valGEMvb`yct}{Z9(TLg$FiQn9dL!F&lYWyZ8U_TF3g;Cn7WjVe@=tgE#jE%iTzHNURIfX>Z6Y@q zfF$repMq__g5gwOB1+RV0HjlQh47IP4`&&Jl!9>v078)K_{f-P**p+;7RHG|z)K{7 zq$G(v+**bJK%zv6@h|}P_w)%V8Rv1nQkN`BNSX$cLdim<*ion&Nl5UFVene5Hh%2* zZ-4jOGiFR3=2W_%Gq2;b+12~tw5d>FVh zk_|RKPF*N(uKlh^PkQudr`{CcCID1>pT*M$74{@Zm6QSkh@dBF1GVMIJ>N69arW8g zUj4%#mizk*%OF6`c@VWe_srAhU-;Ff%N7g2PL|<&o@wQ|VU^2e23Tk+a!$Ryz05Eu z+c_%G6yO+A@~RP=(ui~-KJ;!8KVl>pH!S31G`yZd#6dCPV`16`BGxOU7b~tx+b1U= z>v#7nGKw@HJ=ZUZavLC10|W{kNET*`sE-XpjPw$; zXiZGVxtW+SvjRRxhEOpi(qW=_01}};(dbt5VHAbMBQ| z(-e^=t-8?FBn)I~J|ap&di0)Pdth&(_cd4^zfzMvdgZ>3SLLzl(U7ygL0?o18F@Ie zSt?3~Hgg`B5^o5!J%I`GRC<$0H}t6Uzot-^&*gz!@}pSkIWUrxG0k$t>F({y9NXrGIdl7&QzuP$4Q8Ep z?)MHn{IJ22J!$(L+)AaduYcm?3CDfy#CZ!AP8dJ-jI+NxdhEp2OBZHyH8st(<$-~Q zmf+20B%H`se?RWXwiC=sCiRWF%wMs^|v>2iv4#h%7)z;f*kv1Ab<$%B6xBt*W#^ijQ|BUiCx@eUl@J48vHm zY{?nlKI4YpU4O`7M+1QrM2Ny2cPbMA5v8+N% zOA`Qiv#e4|!VsneQL%3~LwleI4SbvuV!d-=S9AtPx>m&z=@BeY;K)O?p#vibHk>fd zwsds0Z|TZrbNQN@Y{snECBrZlFI@8c^Dk~U!zaRTgE?+Zz*f6_N;f&d~ zGw;hUUwY*=!!Rj;@ct`ibqW-QjpW%Q{wv~D)tV#3gwXg|Ck-z84-tTWC~52ppiDpy z`fJOWKb}fw8DqnmhmRXKu2LS%Wb-Eci(%r<2X6f6hcBIEK!&x@FZ2UqJI1w1sKsX82cf@oshX9Jc!hvtTZ^u zOSwhTL?!}uP#;3_hlap2iJ7+1s@#m&-IXHC8IcJ@?-KFMs*-l~?^@W!w7eZ@%_`gAN(!-!gj4 z*i5#-nK5qqt`}Z%(X5YVHxD1R?|}z0GtXF;ZM)fgVN`v+Y1Qns^PZ-WdHdb>x_Spj zj2SINk6~D@aLSc(Q)}bAFTc9tXID?1G=9(BcdBb_EcFf=mO&%|rIf-z%vo6g5U%u? z76r{Z&ISO_^M%oZW|2Y*he5hFIk@2{Br+OAnlL9~R2`;jDO#_23L1^KqANwvt*B7N zkuU0Gc=xvohILXRf6_?tH6G(d{CFU?4l(H}Qd-v68%7>e7NR2Z}PM&+$idKAl&q@i@3jBr@f;eF5?L}xy$L~1cw^pDlbhH|g9ot{}x zb!j4OcyvUAoQOY&h`uJC)u<0L^x^)@Xxy(OvbdT>)jg)AsL5~mcPaUwMzrMRhMKZ!}zUUar0co z&_wKSvULny@m4KWQmZNMimNLPK{RR|Qn~!{1YU#{KxqUZ2@vKf2>_ZJ8*?wpT5{$y@bL*sTkY?saD7%zSB!TUX(9fuu$P_EFt z>mGX#8`-+1ZM|iho)c9@E*L6+z|v`%+SrLdA?N)uOpPa_m(qCvPqyLA}~Z(xJ`8p#~pj@$dMySx~^~?$K}9!JKHCXpLqDe2d-GYqFgCgoT6=4 zT&GCF0RSPTE1<3(9LH9zGDHa))(p6#7F>Wrcc44NIM57|_lkC%kr*xOb4DMR2v;aJ zI_a19W=L*u39RI}#jb9Yf}ykwqf{Ea>BgI%`p+}xoqN_n5lITh_{53hiJ9Q-N(J=SO(GyN z1jZQ4=X1bo$SFFGZJ3tFGT{nj8D?0Y&ztk+8?*M`caIUnhBr4i+D_3GLb%AdnJ?5V zUcCJ6_damR?bzJCc}quEckjSJ@27LVbZq;OLyybl3dbFL%rAd&nXHIxA-{0pg1_AJ zcZSHA1PO*^NkJ1Qj5_0tQ=96WUwq}ob?ZAOjvG0B+T?u3U1)Rf8#xw$gD4k^10*F$*-%>xmQg7c-Ab8|Il>_=DggirqF5`F;eh@+Hd50HQM{!; z7?GlIUd$h=IG6+5wlh{{-n=h<@Pi+nea2~rA9fIxD}BBF!-tQ1^Uc?9yz$nyw$<5u zuB~nLjlaFoG)xcPN-0Z~5=k;mLrS3wVRG`Px>N_BJ&i%--hxLcTrpcss`W%~^4HL& zX&Qq7#KJ()Q$Cl-uGoVEMcZ*92z9M&o^vFia>ZV?d}S`1X>M#X%}l9e7itQbthr_5 z`VVG($PFGiI8Wh2f)xPKHG;w(YB<*;%`fTWsK8dn`mXC*FyhImDQ-cxYI5}{7sam> z&U*9+ArM))QknDl=bwK$?^|b_n#mRb2Dt(GeCz%9J$Tz4cXn*)Xlq;Z_`m;s@S%rH z7(bR}%uSm%R|L+Ow%x9K?%LSc0IOCnUA5|?k3MW|t(!V^DrfZm+jH91uYLc6cQ$U? zVoUtsgLh2W2LNkp*+5_C!Zn>`*PZ|6+@*^a@l0LcU=h(Yjf`a(`Fw^mV9dxD@)f7t z-q8bK5D6h1L;7!cDi%xmT-~IplTFhom&=xA3X&1K6fiw9OQ~<)LX{dAB1%i;Z_2&o zmOa?2A5E(|In?PWF-=*t8Lz+#MWI%DC0m8eQ8?^B$TBwd(APIj2axsu7VA=z0|;)Lk#L z^*}C4wfEUORz9V(8Vy5C=l&1TS_D==5YmUgMch<^nB-?YF9Jzmr`8OBo?F*}Y?8xT zK|jC>V6!5UQkqjAB8*Z_G(oOvl7M3A;~<+IsaZ2I1S%x)Eo5vZyVh|9(b6O^!Uv5$ zl||F$3w?vEqE^rpA*c`oMe-BSo{p%zG60Yy1n}Ml2>?wkO-;i_12Cj+Aq6rZ3EVL1 z8XLG_+CmaH^R*4kG@6GE%Vez1&Tb;;?%1-bZ5;qS`p9Ez+EyR1|3Uj7wC|X)BOB`L z7cE?T$L)W5^PRUhZrJ3w&hKuzW%k@T%a<*E>&^EjO__M)Td%KNvHHUgKLvntxqSCu z?tb>^r+3?ZmqQOdVD0L48`gJpc5V4;!GfNizFa2r_rE_l_w&y;Zdf;e-lG12{^`>v zw+8=tjm|e}ASvSpK#G2sS1p)Fc>4-w${Xk-t_i%{A!mP^ku_Ng6~)OO0mS zUByz4spcZpwh%JLol@!8V~@VzqRVP)P1kjVD}=BaGjsXujFG#YbB_7glmF>m*E={^ zwycb0A%F`YsO;F13~+^zex*d@9|9W*Sp!oZJpd#xb5$@{Ny|>5C8(gkJiLeprMt*3i&^Xt|P1m ze$_9p8#i{saVH!xcGM_)V34G1TA5rnXFJaFB};#I!yT`__F8RiZGBzCpZ{?CL5Cb* zmwHXBCR@mNcX$5zZ}&g`ucusaOT}`GZwuxx0Dw84d~(*A-<&XE664vnHS6!W`##2) zX&6N0z4&q5go)q({`ZVb{+65mIPc5(BS(#T`^~5GgJuKD#1 z#bWW%NB=!x;soT@_rG)6e*5k3R7$RJ?|JZn6>V!5%wJfO&)#v%4Gm58VrIfGvempyu&1nX%>J|7J-H&_bBLP@L_E8!>N%8rLWg+Y1 zdEV$F!EFdkukw#^P=Ok(rcm%C3C3B@%9o18r~dP7Lv6#B_AMLRH)isgmtKFlV@pRS zllx-+S4*zFA$Rj_=bwM>uYPs?M;|@&yWicO$z_V=;_6jv0OGEw81b8Azj9pl!Oe7Om@$`_t|OJ z9p`@XIp)3Yeyx06|hx(-2N&Bo0` z!tV_&L|eb&_+0;qG#j=RQneT$plC?=kS4CGsh}oMz)A~(y-%*|0>InvesI@ackH;LuGlh3{Ia$S90A(v}zYU&^CU$9^a5pmN%#yQV8NoVzFOeeE&w1y z#tqwXR<3MYyKdc^Z@gt!Y}X}MxPXw!W*pa@J^PbSKK(=p;RTeNH@AB|VhlOsx~mRk z$?te9UXA3NHEso_8pFIOLaI1K>_F1zMZS=KHY^2`x5dYZGvgLIRQNI6@LbHh=zN0C0rB0BNF+ zi!o%E@A@^_h4h|im{GCXOXozKpbr5Mf^EZ9nYWD>0Wbt01d_otv=VJ$S*8@?xo2NE zVROf+-~7gIyYEmbuXuOXd-LXh1puaL2`$+Hknm61RYe>$(#hWftt=il45wV4JNL7` zo{n6hPPz_9KqLY#i3>tz82$Z&4?g_wEawmY^IxMzjy&UAC!KKOG4sBdck^w(U%h61 zu{hY#zC{SJdDG_2n>OEh*B^J=Z3kC4>sKwg|Ne*Go%LQ@+ZxxA^>wwUf9v$oqlTN@ z{ABKDFTeCE5KWml`G@D7Gj`mV=7t7g+Z<_!nbS@=`D<;f*R5T%zEmpZ3z_jF$6R#j z`MGQ!z-$@T)ZgFVzhuc@{`TOH&iPJDYin0Wdu?6ItoJ^=_4Yq?batDjHGB4)IdeZR z4wj}*9=FfF2P0?5=-&GunLqCf$96Lr^O|4&tg&UdD;g2wO)R(FG!s&EkB|6uknuDQ0Usl~PJ_Kr=jz48hoV~hzQ7&3#K!2Jv;N)S?# zBy|N8MtoUR=7*G3t@u#TBu%7-JikyKpal>HbmTcr9~dxnUH9+*xbNLrZ@N-i851Qj zZn&;+Yoa{%X>s$(c;8>pH_*Tcjj)nyt?UKaJ}{&sZR> zlJ9`%z56Imzn2&AJr8LXIE+Sh1F;oN+oo%4AR=bWJQ|3E6rL-&=id9Cc=Actac##2 zgyP_!naMDN5y^qUVpmt!gAe_yp{DMmPiHS&vRF~e7#ryCAL#Gj0&w?V9%7uit^fdJ zoO4DXJ32av;Evn=ynONMxu1PD=Zi0Zz%b2RE+<6s-C6H__W5U%rc8S0z4v}{;Uy=X zbkbEnz2fipKJ@7)a}PV>P|KF;nTw!Q74SNQ zxKyXD3h0d99vYec{{`~Nfs0ifMS=lE|8FlH6m4T{qD>enq7t}EGYn~F`Ttc%Fg1A- zlirvtE5$Gw!W#SYtyZ_ z-2TCbA4);xa{1814!YpS7k~EIS1&&M!e9P8a<{z>Ub1-J=W{;?05g-3LiG0!_V*6} z0Kf{bLDMh*z&o85k!7>FTrMYs7#u8muc8z}FaU0tJev_h4h)nG!?3cZAq@Z!t_uvf zWrCEP8Gyi$5s?rgh*T5G9(9WhB8Ws{CYga0s`sEe6Hs8*WdW(gAbhh!=C`iC;#)W)hpK? zu>U^0?Xja})T~*zu2?Jsz@mkV7sVMAUcz-5V~jEX#W~?5iAMtZQJ@yJVz`VT^x2_? zL{CwmfHnTCwlDL5+SXZhrjjP5en*3xTKGqKXbKLyCjxIjA3})U!GDtv06}MG*NZQ{ z^#1!F)YcZHkb}iyfB&FmSrG0ciXik5@CAdesawNWzNcD|-9-cH3>Y=9Y0&XYh{B&P59sT9(BPZkh%F z+P3}rn{Vy4@1a0YvF(i;H+gAt&W-J7PQUBUTRAfs!#SUS@cQd-Fkrv<uiJB zcDdrZHc5Nbh>?H&>z~V&(l35~^$Rb&e9V!D{q}|%Mvoa)8SFDHlEMDS-{1M?|2+Bh zZ+~;mX{Vnwd-f;io_k^2>NSR8S|&FPE0f9Cm9hk6oLN>giH$uSTL4%#m(66YO2sLa z+_EhUbWKAdNkC+Pt}BUT#c{mghotleDFU0pA9K)_#cS)>LM8``{lnER%4;CHuA9kZ zHgDQ=|2_92V?g9M4gh2_86kw1%aDZ006jQbanOo=DHg$y`*0tz5LQ^ z@4Wf?vBw^D)i1BEEoA2}Si~8Vr1p15`$dX)#HejVKRWOs2V>rrY?ML}5H~pxxQ^pW z85mx5YIMpK=)Pi$=8=ay$Am%(b;}tuQC<_FjZ>DEymjFS#bU8oEULnWX>blwx{Mi| zLnfPPTebS?Yk%tqH`#<=OY1R|aAOG;@`|f|RufMOmv)eEY;R?|51uB(5o*6`4d%O~Ard1u;7)UaP z{6wFH9_;d0630ECHp7+}i?G#j?`7b3^-P6sbt8g-!4RQV)JxzdARmOk`u749jFD2Y zE#&bUG$jqBFZ4_p{u>j-2!sO)^d#!Uhn#%SIH0p79mnd^PH`55qoChVe2lN%twxHU z1WvfOYQ0XK4%C-DC!?V#z}BF0;FhE0X+sm~Ui5wy^8Rm^?}l^;tsx&n$rlBB73_er)p8OoE zFwxs;wS^xv03H6WmGLDn$m)59F2zM9AYdX6h;T;v82_keB1#&+Nc5gQaMgOKH5;Ky z=?#*Wp^QE3>9_Vn+@L`fd9Hr>T};W9B-)1PfP^PDt8gnQ=$G{YPB>=V+Z&C%30661PNCIGpuH*DO4nxK{BSIozi~)iq$q5Z^7@RZCIOhUT zNTFgGh4OSzhzj{ z%<0o6PMR6RJqvC*8A)l-&A4A?tK|8tR31 zj+0W$C0KL7vy}iBOQ`|5->>CVs z+)_m0%T{e;tbpd@5C937VOaHz^@1}-AS7|&?IbrdS<5t#xsJmSni}dSPn`^4*VorI z)YW-pNFjwQr4#@pgj~6@E#N3)j1hnku4x*%oFxQh%nV9&Dh>dQ8$Sxc?(Ob2Op^d4 zF+p}s-fC?f*3{V4+uJ)~{J1e=C)(wHK@5Ob92<~K(<+xMOP4IW_>#-tdF$PeKAE$s zZ8hTtA_(CEfWf8fiud1s_pEQ9lF8+tefGKT?k>l!fN5m&4Z}u_X=xpnFV$IG8jJvm zz?FhZgJmMCwvcCtE_svUlrpyxfv_4kqYPH4E;RLFRO4luq_=p|dmXW1n2a%%OA2Jh zmrgH%mxx#WR^!7T?jiud&+gT)wb$OxX06q0*O`{(3RkBooMH_z zRMac^YcrU_qeLKFNkEJt0CODMbzJUcD1%W@kU()nE!V{evto`c0tr;PtwsX+ND_cP zui`txaMc_lM?l8BE-@CQ?NGR`l!QpGD|&kS0Km#vuInOzVHi>hR|-**fK)1#ZQFHh zn=>Y*WQgdm1_Ev{31CbA9}X?cs7qI~r)sez%;yizcXflCSGNP`a{ zV*^(ZN_7hU!EJccWDL(ofWKBx@;P6|{ilLMPpcSajCqkjK{PTG_Bt*+sQnaET;-6+ zCn>$hN?(G*9Q}4QVc&{dQR9+QEJX!kLxRcMn$A|$71I7{Ckh4ZO9xSU2$MiXDz4rZ zJQgJ-{z`?QV*Q)y%T|5#HeQ-+qd%D!$h;yff({M8WU!(y_*RYNcoY{)@aP}nahXE+ z)shV{p^E8glHnN8N`X672PURzc#Pn9VkxzWDwU)VGSnlw3{-C^das&*r9@QWPYI4v z^2Drk)s05fda>AEvOq|}ha$9Ud0Eu-Ce7&T)uwgEx7>ly1nyLiH8h-?CYAu{!s-1K zguHtCIgDOn;-|Q-XMB8%fk79;`VoU10|9b_BLmxZfY2}u0CHU~q~VBY81mtNJ@MZA zA2u{J6pN)5E86<{2MUE6Z$aIf)$3NSXv^pF-#PoNO2v8dKTk>NpHe=0|4WO z)G$*fn?(R1Nq{5?B#B@RpUzt4)_f6*7~j|!rVY40MXk!kR3NaS5!U)d1cMl$E`^IZ zXPonjU1@4;D%8{z`v=;$v;#n)kOv|mq%Yh-{zVTFb$<~_(}4g$S2~7eu3Nw99}hev zgy5VThOuh(x|J)}7_YzO3c6hZ<>47Qr2 zXU#(_8Rewno0=h2p{)uUAVl;b2gwgx{UHoIeM(>x7z0lV5T#BB5&7#xy*eck5He<2 zmg*QYe$fV94lrmJ2nh^$yF_I9o7?;pryvR)v93^OJtx4dx4 z62`6O*81L#u03|zF_+<$VmC>-^UgCitXa=3WB!6g{?;`F!!QiakumbLKnMa9AUCbw z+_rpqQ%f@y3N0-yzxnmg`v(S^n;R?Tekp|z3=x5$aNSD96~aC7#ABQ4>yJ6+m`b_d zuDFbuAneT>I}p$`P17)ia5r!6xaYoqNFv5LMO zzr4Xfe#{XEeYtSyrcLcHKKH`3X;X^jvR$bdCTGYBHCAm+Z6RA2hpfA+M+hPyNhCq) z?>b7I3QN96FdQ^(a8v~A{ltQ}!!VeF7gDOFtw>CIi@1@gGkyI%$p}hzv?+d_w%E2b z08KzBdM9#)!ZwuWiP|gB-e=(H5$Uc0J(ZV2+P1@(Bti+^q@6@WNo3ohAypvKFbn|J zzNLe6ZklGkrr$;9Bg>VbmY}1(0 zZ7bUtW2s<4^LCn9jB_iSefgDF=gprd?8?!HA2Mb7c5l5stD|#^Wtfg-RVtNAr2+#3KmFM+ zpM3m3o!vdF+ty~XS;H_K$6<_{hRHY+uIsuEBAS*Zi5$oAcKv9nNsVC<0~}zffIVt7 zA@ERVZ)2a{S5kDOr1-B7eA_H7KAPQdUXIa5-V4b6c-BvrlIQmdhvy%o+@WsnbYmF}lwVI2}w9rj2rpR})4F>uv}q6P@H z5s9>>J(%E+Zelb^q2P1^y(SM;`!*=Z944Fei(8fn{;OyLYZ3!DiCzU1N8u}_D-wcs zg1ic4Qh`XaEtM_RBuN9Z(G!N#mYAzCNKKPOsMMZ~KqySPpTv}jDNs;OC0bjw)mU#K z(ylV*v0e>9UQ(QO4y08QR-d3YU4<|JGGQm8Mm24pgleU_t4k=x5E7EsQw^BM0%U(` zGh*Rl{Yq3AxC{y*8bpULZasXL>}iFs_C%5ytWvI|br-$)P2su{#CF?FAJN*{*I%46 zc}ho5*M}c`i~!kOrc^4ID&?R5?59^=@iPLt`kG(fd;dS`>grtEacoDpuI)Ix?7H*s z|M2@M6UJY3(S^@E_exW9lT)#Y$aO`jTsq|7gYN(Py|X|4@X9N%+PHp8ZA}dTluAV- zW1M=*sZ%FSx%cn)ju<)W=RduoZ*btjfBx&k_ddwxa^AEp1=A*KLIgv|1c)*5i*P&? zqo|~*$lpumct(mqWl)vO>wwAs*BcC7oRv*b?FrYFMBn`S@i*OZ7iVU_%NSu0bnRK|}VdFf@B zWiq+BbLal|zfX5}^?2(fz0I6x7(nDYE=g&cCgTP}^^zc+-->NYgngWka~>@aht$Xz z0|IXF(W6FL7IOqKL_p$BS(&}Eo4WJ8tyn{#<91zzf`Pr zcC~-|tRJ?mTF)3KlALo7^lKwRj^pmL=N>P<@Z^%k3mO}nMvfT;L_!MT3eGtZATUIR zoB=U!L>OlVGC~Akgr;E_9ON;_ef|CS-^*k&1mwCxkQA=#r7f5@rOP-Gj2PAW;tNmh zFmt95mCYO0-*f+id+xI99{U`$Wcin8e*4`1zJa=$f&}Tf0s#Tgw76*)hGAr_%;xrv z?!G<*B$BDzi<{%{dkl^w$1beFw*~rdafgnKg(F4)Ai-N4thW@g4B8E-DkMtQ0kq9b z!FLb0ffBqb8MHVQi_spMJ7BhBd-|Kp>+_~p`|MYL4_UW8YetW}> z-CaE%9~fhtF=YOMYefF$RYZ^wEKmrT7V$XhU4elr$1VWi$dJKBmt1hhncwN_?)uSr zKkV%6eBwWkj~F@O&wse-u0Pz*5kWg(GJI0Q{4rmsdLHGHZgyi>B{D!EVvAO#dJH_Ft!BXUq(8bZo~ZdEtfUoPXYr za#?oyl~?`usn=@?1t1_0h}^DJhL0L?#F0lfH#NQR;tR`{uBa^(9M@%x_4W6i@vT#@ zx%ygWU~Nsq`i-kEy5!=IKbSLo`0!1eHZ?Xhe&gg5bJ^^&q_AruHzv$K(7~pf<%-dRl9}+sA?#NcpXjz>qha9{%b%( z73&(PP-w6HtZ?wFnu*Y=NKzgZiO^XGAF4T{NIfw%R3+k(yoVhz{XxAD49UO*F?xl` z4o1&p4H`%t#G!*79m(kBhw_eERYSu2lwO3%l(=F>K1Zt!yn>oYN?PtjxDX0XDoh@t ze_@-R>}qSV0SwKKQ}l_HE9_6$1D%-kA=ko~A!hcgw5VpQwb~+02E~S=b{o=BsS$5# zZIBY-q=#xlr!>4aNr|jpTP!w;wN>4^rADpkR|K7)dRD7EUAGgR)U6Y4{RLw>39&`U z+eEiQy2*DSd3A1EEh*I|6rnmnDj0~|A>T=P+~kHK3G=zkHP`;EwWam?Yi}y#azDQC z$L(Dm5B=kx?VGn`vssel3Q=EE_w%3q?3iPZ@9F7iZ5{K`$M3IMbNR{@ZMj^wQn9B` zntI|1-)LxT1c04(-bFZWe{a9RjZD^RY;3L1HC^_ZCjbD0 zk;8}29KF*i-#l&d@NzUBlq9`55K>&R4Vs$Y#2Uz{3)k? z+b;JnU9@o4+wXD)64Bd|qhFfc0D#~fEU641ayUsZkkSZMtvRaDDrBZ$hotM+jg1Xg zTzcv0XP!Q3(p2fV%rvgL>Q`^S{kk()dGoDzip3)5hD=ePh)RV?Nv-1uk^~a-4od+Q zr+I7Iq$`CKi0HV&b=|%8-0iG0&Z?_#JpHtjX1)8STd|Afit9S2X&HvWO_On$F@3v{ z!-s#h;Hym=H*?NhM@SV~cwWE{=~Ji;KM?o_=_`6sS4pA>um1=2i0nVA{wQfL9t~kJ zDC&dCR4n1wl`bFJJVV+m9HNuAX=t+|Y z`+F+31Hhy!8tUp>8`-E4Ef@djoS**u1_Cm?J>jGzBak`-Zt|vKqed5t!gZx9NJ?gM zLg|Gc1Oy;S_}<-L0nV5g@ghpsv5jozrW>v~=7f`rgM)@?000tj#wAIwhpy`q6CmW_ zhaNCv`m}PX->FoZTUyTf?%6FZBg{;G-#z!c5LQlH-a1Bmr3@tCjLb#q|08>clE5tStr%mlS~py8UmV zj#uXcfd(SI+8AS;b0Ni!JIy@x)YBI%nD^v=o-w&eD8o}g5k`+3e$92iZfR*9J8s;= zk38Dd`GsW~t`LYQiO6-mAPf-z1O~FJTxP7Rq44TKeE44&#fXY?(0&JQKVv2U9DDRp z}WT)cdhWpK4-JIU4vB&)*jg!XUMSF0xye5TMCdB6M6IEYu7 zQfh)?X`m)w5U$+kfPJS-omgMj_>B|4{@l~AZ0;MVRQzQujWrF&9(CN*Y1;v0jy>$? zm!E&Tudfdfve_KxP_9%?KkejS{pvS{VT>Nx^3yAS)i*F$QY=d0Fk7SW40tcp^C3=raf0tr0>UtCR5he$6m*mmq0p~i;?~|*8ml45l_t(K zM$p_h#2yL0`hAF{MN*qnU*i#S+D-lD0&rD$L@<&lu3v4D=dQb}yP?@?}R)|3p|YNe&0F!%xpGmSBiCYbw9oAvY9*Wcg?YZ=y=XP+~7-dB%2`gAsvafQ%51|kqKWP&j+rDJ7Hljpp# zcWp;mA@Db(kxv>T0JuUh&ei@yAi3T4(@oPpHFr1m2<9o+FS_3MrLGgoM`! zvy+~|3r#yJ5eP(zAmWAtBOJ{5ha;RaK$@@Ag;<@tMq%ry#6*MINofh{@R_WR&(nN{ zepsOr-f$O4Fg36h0ELJ|a&WMcwX9Q)Kk3RVf4aJDMNfCvOE10A*w`SY@M5Rt+WH@z z`=geY)}HR3y4t$aPdjDl;>E>MnRA1Pf&-Sc4v@a-PBAL>8BsHii29l{KtLfyu3-K4 zmh1OB@E}Qoq`dIbpENbJIKpwA;<)kCFTUjBpImyS_a12FE0d-{Gc^zl2*%8Aluue% z>B~mcWh#P0=7%E@77R)R5v%_jV+e?LrF8YLesS8Vr`e7eHD;7ya@Q%3A3gTkU;bP$ zch+0)p=He2ZpIGNx8G^!od*Ydk?^<^P8dCAEEzEC-S=<5?JpB&PC5C+6Hh$)_1UmE{Y|%j_0?ye z&6(ZP-D8@jj>HJUEFNewr~5qLW(Sr(hE!t)eX9mM*b^9;>()uqHa97+s(eVK{;(2F zSAt$efUyR~l2=T`LQkX-5MxiW1_)<(5coSEhsXqWYR= zzcCG0gC_o=cL*mbNfiq(Lw!w#+FQ%Y#JU&fT_Q;HI+r4JvGw|~4`JRkbt`ujJ|-!T zQB^Iq;1wb%hseaL8kJ1xA&uq{Ar{$2OhHI`RRc7{5NHTC#MxURnekn< z_{P_dzx2}cM~!Of>+AT_pYE(J)QQSKLqp@Gm;R*U*dKp9N4VmwGf%zX{2z~>FriYm zGns5(Z%0c@%f%P{WJJq|9e3LPu)_`>J!V{EQ*F6iaNd_+0>Ib4 z{`JBBPR3~Rl!>lzUAt_U?Bs8rw%6YK-E`v(k3RlXeQlknR4~}N2)Z8)ziRn}_}N=w zVO`E5r(XL=GDSv$s5Q>&P<=yK>p#u_B!B>!%Vi~zX&44KxWU%9wN02Zxln)&YuAH^ zSf!STiQvSCpy)r&?jwXgMznIHd{T=c2-3_0MMqpix~aP!qJILD&U`Ec{wqHb zBuK^>R?3y(BZr;(t*;{kSr%s2^pYJUB_cC8mniERnufJD0|YR_x2`^-r3~B|A}~PUfC2~%&Ry5pWA|N7 z{Km=UVvit!fXKPQ836;5oN++PWUNZrv28b-5kd$rJ`Xb}9zyjFrcZYyG0}?2NaWY3 z^Gz{>6l!<8nPi*ch=q@WuFRSw#~%!-Ri-D9$E`X)eQ~?@xE9lDRjXV_j`d3#kUAAiZvK0W(*w}dG6_+1-?2!{DOevO1639Sy-nr*B*4O^< zM;Ehjd#{4S`X7y7N%ZX7R2}6bp#P=;LXbi-#=Cxh^W~Ra zw0Tqey0z;kOqwu!Wb;5@uM`A?m11esu+}3EKe%o6DyQu3zwcg09C>habIaj}9CFR& zmmG22ku5ESJ$K&Wx7S_!i>t41Yg=s?hBpIGA=*IHIT8AgRB=~6C$f(bw&_wMOQ`K> z3_e8E&2LBnqr@&k($5LkD9{(@#$&lER0W7CwI4B6uhLV5gfK=yukM|6e4j)Tk#;p; zSfy1+`cMKd0k&1&8YLvQm=W~h@Ljh?S)`r_0@0CbobI6oB}pxXmYd>kASRVtxqP!) zt!R8qAk4@4QmUDt&^Bw888P|wYEt}&vNeT=+ujvLu38-Ie+|zJ4NEE?gxc`{dPYa@ zWb~1M^;+g2+9!a7lKm5!VOv^}Bn@$5 zyZ|>XA|1jW={5NH761S^=aovip{eowpImtGA;%8%t(U^tW7nOflmi3BzTWOb4nBCd zJ@$C`pAW2Dy87ZvFWX_KUF~wWa9lK)W7|%-a_TovIsVwAEh}ec3$ESo2!Y5*A`#Tr z*0!{?3?JUSY{{bb_Kv2edJ-a=F&(+!iAd6Q zE2hEvdfMN3<&DJ)mVM{!GsjGr*w@o;axNX4amZv$$8qXv8@I2oAJ*I=B{9xW(^Zd= zK{70^dVy+3oN~Y)0RN;FE!&{%qd!0?EDk*-`6d+ZuLQP5FGy#x-qQIy(sD-~M**%dfo37*C@20E9t%zNmrrv4t|AK34E&I>SzRjPPQk zAfDj>R8uI77&%HxQ7YQpv_z>S(XDaZn)*6P^4KGf`t9$2H(}z0rsk%>(qL~--wr$P za_1laS}Jv(b=EnvKlwbL&oKfi1F8~daQLiI%Sn{AOS__J7d2|Si3bSIn9$7^1&8~F z>&pDOG7p5J)`YKCs7>NUETOU{YE5962MDZ0u#-K}4b5{U-!ulK=#Oj|QIl>6Kp+S} z0uc~mrDU&NxxQhincOfqV^T;ZP{4_srd_TqUa}Gb=loM%a_Xorjd6lwkt|KogLDVha7x>Wo8V^0w(QBIhzG3 ziKHAgymj2DvCOCikb?tV;i@9-UkrFi5!RA=DOs8@C$CuA z3AK?8#$F#3rRSP%CoX++U!u7bKovNJpxU%YtKeJpT8aQL1lCIX0tw8ZH=r;}TK%Cv z((pXcRu@|O4<}%Gm0oCIJMprQC<4LY9iv|VQaF{E0*rjE28=;teKqJCZ7d8{H7Q6P zImO1b6s12*v{h~@>JxE6yjEW;013(4mml2LXiVaC)UMPbF`lYKueurRP z3_2Lr@0mVdijcIK_fXAK2Pr@mL&U3!wvcSp#x1SasUH9UBdh)+G7)Pc$~V1Oq_x1H zkV?ixdlxP34>u9{h%-J$2qAlYj_MVL!=&m*Z5WjIAA$x=^HpO$TM)xBjaC7%i%9)f zRmxNOnFLiKg(@u3K>!0%s_N zES8G^@aUtD{_5w~7W)S>*$fGXBjs{g#<&#jqJ>{R{oM1PeKzNMp*MO_;qeXt-{Sqg!z3j`x%oo^OmHZGXb4_1*S*c}!G6*`{swNs8b=2$ahdWSQ& z3>z_J+VrO8VTT-YSW|0Lu>Uj(o;0b)P);atBfd;&#z*V1-&rAqX_~9otn2A%N0won z5rG7Wz)jOwyku#)R1xG%m^`kzrNyok889Jat~ z212(~de^j33kBBe9BS&Io+S)lL*b2vAJ!(%hzfveOh=RzB7gKF#z%Qa-z$UwCo;@> zw_}3m`(%w*f$9Z>sV;)2$ta|(IKnV3k|bRv4Bn`71C4?H-et>H8is+W^BsI!28f8> z%ZdzcATSNv>s<6l1&D%0?*3OPNlFsZd)={Ah=O@5f-!U{8#Zha!bL=HudtN7 zkAw^j84DUumDrHxf_#V(cW@eoVOIjc9wt;G1tqjLw@#fpt);n9O2Ii3!Y!2tx0|v3 z1?OKlea7_mEn9wd&985}<#v$Zx~}6?9JkWf+cR(e{J~-w8Pm=t^JJAU>_vn&O_Y+V z9?%p7f&kzOx3RJA2j4&U&?Am0ar%{y$rgO$ku2qB%id~HL0z4x+fj8&oFfo6N7 zHe2JCZkTm%uZ(%%^%QhbebwA({8AjyS?*(e1VC^Fefsh2uJ(4zv`_*v4#)-vivaB7 z*&n|9{(JAudh4%u|84#Hw*HRJVsF29ZqvMZb02!(!8hM}d-m)(-CbQoR4JD^XF#HT zeS4|Dw^HeQ<&{_F&YOpZQ7KoXbUBj@!M2@JvE13Q<-h-Z;)y4p92^|rjCuBlF#rVH z6(d@Q4{L6-6xggFb)pGD+^(ix zDb0mGS|8C6+n~xYXiz7$2E;(AV%1frLC1mHe39PW5K{$FKuC7bT=b^DC_2ov#(L!o z9tEQ6OCq8720-7TVnmKL>8@PrG8Hm?~!}9zG?_U$y3N3S0Ml)%3nfCCbx= z$Z+eAY}18$3-RAlrVc4IVAUvy6b=XCf3QdCo%Xfmv z%yTb%^wI3wZoT8_r=PM+qf)U4`UdTCrBWWOt*u+U_^W&G|NF49qehG#+uhY!t~jnF zA}|cou86}9JM5tc{&>eN*I$0w1(^&-f|e02wRPFjU}@U)?Jm9af^VI9(&+Icq;$B+ zkpnVhj3Z}^b2FRo?dw~+VUuZaZ+WU8&#<^dQeJ@oyfcL*RbhJ-SE_yV@)^fGF2 zG^_5tc;^W6ROUo^bBD=Su&DJ)kgCP=9(rtU|3g zc%-%g`;h7gR+1&ddeRBP^*LHVz z0y8;EgGtV?vwiJveslAp#VZXnD@4$I5RMKZ?4;V3Qfe;+gowrST`>lTvTAi2Q&k*- z;U04e0mA=y;gH&-B98doctc+MX=O;iq5Fs+V)xuM5D*C=2_zu^)1oqDh)fVeBV*=r zk=QAMxjb|!%jHU?VteOhd7-Fl+jiNmR2)~hewKq=Azk6RBm{sY09TUZxMf=iLFI}A zM2vYG_Yf0tB~xU3kQoBBfPjouY}a+6kjr~qQ943ek|*l>G4dZpMr12PTHPrn$4)Ej zxn565<5eiUnHnEeHyLpZ=(UiBB0UP?U`~lb0MSBHBOE~hM8n{M$sdVHK4IxhR_@p zvtoUV2L@i*Ag}?~btg@pboo`kn6cfCoE!Cx!@hainUkkXXGn;2@~LP1^5;Ke$o!Wk z$9NdCs0r?+kfSU^>b;Zm{TPBV$@tsveR%bCH-7ZdY;I;fyIZL^LJ~K)XJN8 z0YMck91Bu3Cp$DHTCvbKMQw0O(IKv6*SE#9SEp+07otXdsP4&U6C=N^;uNbU@a)lF z!sC~MXZ#QkFv69gceVQ7Cz=%i|5gM&fNq`quL#O^6R3JpYD)&j37L$ESu9>n2~pBC zNb_T)*AUAYL|fO3h4uPwCXpu5GY}L#c_<)qsE(vcXCjFZQCUPkmdcty z+Ccd03H>aG@3>F_Zm*bc8T1~81SfoXlzxx41Pv6~m=KWxt-=To)ABvxPY^&Ty{7P2 zjL4N2+gC{p5da7wIp?KPsbh0H03a}u5=;aF;ZQDTA;9uw%ML&6;1f^$8X%D*#u!K` zg)q!axj0bBWe}i$uz$gVMXuv=MwZE$!Ab)q*A;U<{bcT^pB-|@VTGESg5;G-u43CA z?Oio>_4z{0GfzD|Yu5Yc{qWo!ciU&v#+4hp);A3wp0Cf5BS(&#e#vE5{OjQd7A{$` z=f3;9f(H7EhRF>BxJ1V(ajSOPb~Brrn>)93WHMQB1qN$DV@q2QqGK8`Oi#1v@&eIy zJs3X;MjtixH*kss$=wm8f-nFelHNNWg?Rp@7liE=a+%3fr!#I04i2tfwW_|cv2|E$ zS7#>$@9ar4tg&&2u+xER1)wpoQOfI)M*=X(0N|>te)Y#c|HP{BofG&nTmJZV~mDI2msYfbaWta@^yBSJHZythL;%hpocs-v7MvNpb;Rfc58ijtg2fDT z5*4FEULjzyST58ySedL-DM})e!Zev_X1Hm%jx#XOTP`~WNA4wq7$X1#G8j4%q;$z; zLZA?icPMw%Kq4?;i~+zdyY5m`*XWdcfx<4K-+jzvGKOKb4sQhjNx%>Z!W9H+j!}(E zjN|E-5;`56XwE3&+2isWWGmAAT~v_ zl*GBwwr1@U|9VMZ7U@a^K3xS?WhiVF4~t1B`G={Qzl3w zB9a2|QJfm8&=Bd1Nl}*p)fZ(Gf?X(Hq(B^b(Jf8eenz3T)+_7^M@X43h+BfWhZbSgXlmg96%c{0jOBXL2Gir3HXd`2;E3z3t1W5oy zjI+M}z7Ie8WWmBk`yOxzpddtt_HW*}8B{+)j>a>6x~fH7V|Deck`a!A z6J2rC7^w5SHM^LoCyr5LEhbx!`1d4TUtz^)UM3S*rq3FMB$N>@};J2e-kq#sE)M8o)+s>BQ$>(e%HQuS9UB`{E0nd*s~PR)yYwREzU9D#d=s5x>6nHxnmMz3S(`TC;v57)E1j%Z9bzwiJlP67@P{`Njb7Kw5c=pAYetGQ;t5&S&v)${iZLZCmJ%c^G*Jx^)v3bje58nH@ zZQZh4ZoF&yjG13Q@#~y(2{Mz*+IFQg;pnG!-WZme0mZq3?tUK!4i02ntd zDJ4OHtULFx{h*rmK~u+k_E#Z&QwJH#n3B2S1+u$yc8*Vg?I-(2%7U$uPF5z5VTX zUY|66TuW;!0xOjV2M687OP8))ziGslSi_x`t)| z0N|TDI)spbjF5p^(SYEq3gQ=E&R?|PtLf7w5D72U5@ZgTX&BwzTi$v4*@g2L8r%e6 zB&ACAQgppT7_V;4l84``$b2{`)m(D?wi=77V-NaJQS1wVis;e_0|~$)nFVFrNe@{8 z{3rs$S#vGt6+jpa=Cu)-_j=t-*6Qo+`{#p?zVhO$FTVV0YimuZvlDyZqhG+07KNv9{y5NSU6!l^{#MJOC0Z1tr;>Hb|esb~U z!&`^#vG;!S=YMj?9k-o%`e{cWe}a(mmRoPR=iUdTl-|pzH3s@of0UsVG_19VzK4zJ zvwqN?0-fM18hW+{wR85u<&NYXbr#|Pg^9_xSp)zi$>4@??-#lTiw2YT+g(us?XZcfzHH`(>i+tP^FKB;Qlmuz~8tY6a3l+{6P_B7!i! zO(6`UpCi7rs<;hxuud}68ER0{!U2FZC?076wU4H0M(0<YLX7Y+o z7oaYtLsTBAAN*bh-!#4j+NsY4#jA?BA_7Q^5mX%xO8$zfKWbtM0Mtw!MjrvKLJf5! z;)isGPylCQF_IR~dfmsAPH7k+_%|p+VHGjZqjz6*SEZ=cIGCncDwQTpn(*&`Keqd> zJ9c$#woHp8nU)EN43HVj%GLo`0JdE!N+|(BxDEgf4)$lPOl@Ps&wqK{ZMWQ2S692k zjyu#8^4&fC`Fwul=#eJp^FIH4>9XZ^#W74{{J1fhZ1$)lkG$aG^WJ>zt?PbsEG(>?Y-&d+n#>vzqV7^vZZt9op=7%BM(fSGPS2`lS^cp zWEYRI4ya zp-DNa*AlC#0}Y=l-YUUW0uwbMMC9WnKmgZuy&s-@;@{sq_4JQFet*9M4WXyj*N?;s<)pk-!0__#LUcZnr|6CtUhQk*#23A9tWHkc5rPPd( zGLSy{(!PZ99~AMN1$r8WkwK4H43+(%#Gr;(JpZSPQ}nAQTA_w&dKx$|A!Tz*%Tb3P zddp4M<_k4a*Z^LH!gKlBFXqnq=C{AIWpgK?civGDNm3ww1c)d|jvO&8pU;gLHTtN- z4nFdTgIBCvedEoyx2;~2&1QDnedjB$xMbAGk$2y7-^a7(SQfwZf(s5j_>huadgslz zKl}14;ksM4bSz%Dbm5|XdhOp-iczy1FC(B0XL={PnKAOirb*iLiH$WK0g z|A*&Yv~ty2)5;P7qV%^IC)f*V%#X2Mv0ja4kQNB-TB_4m@X8z6GV5YaR(#*icl zSIF>H$^k%vkoo#SFp0%(5t|vc%-Vr)fy#P!Ow%+BgNTId5&&aNl9WOS5qb(Q#$zl@ z8c6AKZnU&CS4!o-{N=9WPW+~28s9ndjOSl|%`$m=`xeX0?6?2keSHHhO-* zrW@d#fBq#8{PQ7hngD2WK55c~+M1eTr999#P^nZ3`Fux5NBfozWURifu254L=pV35 zqoKYwm&^C`_HEp_*>RoYjyvk__x~-I&Ghzm*W~la5CARH5+qiwT$#`3Cr_PP8W?b0 zfs6w%M37RLRxV%D{Kr4ue#s?2t*@^yS8UHtL*N}0-t*54iNdNFtW8s24g6|@5@tEP zRum9}U@?$Bg5Giy&+{tPivpgIoHR_U$%7^$=r5M=&oE2F=#juUk_jOVbH$^(2-!jZ zV^XM>)Os9iRMWC3YSn$W;tU1-iP*=)HFTJej2d*3AcA>PN~S)QUR&Tclo+UvLdXyQ zjyk2+mluB>lA)`mW2NHmFpsj2@;%LoHwE^dKm3yyT6Ik;;XjVMMJK#UURg zV)}Sg<*6qSv7gc&Ng~L|Q<~$f5zl8={={QX0zhA1|A!xZ zlx#hh%jF7rA>0)!S4$~YwXJ#Sl~=a3Z|Usp@>WvW<;oXxzXYHicAoaVn)Bw*pZDm$ z|JBveWmy@+;7gY-ef5=BXI?)2Z};B+^2@K^_4_;b+4tZlp1%9apZ#KRuxMJAkiusI zsrk{62?1MC2!RNafLvEpT!3IEoOzuF(Ctwal0&#IQ}Hx#NT}Ew5#Yc%0uh*|fq;(d z5P)GCMBq9O5qZJ0aK)eg`qza^mVWWsTqNWM_u7|I0ANfWk^@aao?0U(kLSxs$?XGFbFQg{dIkYpGjQGk3t=QySyG#GP*aJ@~g;ES$Do+O4S zd^Rau%b5D=2atM*PN4}@{048NNudZ8T?pMUY?E3dd{hvCD^B{VI|%LowQoX_X2Zd+SZ zQ|m?eNxf14owQ#Uh`qr7>l$`et7CSq;0AT(4jXiz+QzlP*{`prr z+B*Q?+;hI4E7Ui&3@h300}nnt*gxplHWB1=1)t_9#*##a!R%t?voF7_Z*0xw>j40u z0$_SE8UW;LYTCDSlJ761CvZsy#sHiaYUoZQ7=(zCj{e`TEW|I`4?dp)vGThC5ClJ7 z&5<=My7dmpQ0@qnOA0=rzqf!?1gA(*8W%AY0LsCI!jAw7totqxkpLMQ21jIG0LhU7 zk}CuRyDkyYvMdT17X-Z?eDJ%^kbwapfjCJaW$;pK(k84T!$BI`bRE$=Rv0JxD=7R$ zB`OB;y7s_>4}bL0+&ABPmvQ5RkLEu1=pzdj%wM@`oyyt}f$O@i>oCSR=V=?gG=)}8 z>SLmn)C4U8V8UUHn0<5{*L7UOU|u4|aU4VhWXQrUc$`&}(Ig3wOCdIG+*~S`mo8oT z4b$x0xMul^FMd|@$PKt==44qrU?MGg_=U4mN8aWTPLL?0%mY#@MoTS;pSWJJof0r zufF=1nM}rU`-4;r0)S~+1O44AmaPEr4p)oMH|c4>NK~)M2P&;e_fdLH+IZ-?7g#Lc z(Wz8eh>L<@)y!!M60MFuwVwh63XxR~Loa^R&qPj?i|{Op3jIG}w7kvK>Mc>Y^FQ%a zxH3Nc5U(b!6^c(vM@BFfsz9t~T%-wPuqsgQQX6;GSokBxUy0Aro360Paw0V0t=ycNB| zv<8#3SGl}_9O?ibtrm@pt;VZbyXin}NJ9XK5iSj#cS-)LN4&5V7HL05tZM{|hEQ$D zsC9_C<1|p>7C{ggkt$C^4PLaFv>sA?cT@GpwemV(Q^0qK=SiKU7xanzSkySsWGe&q3|pMI7R9CzF?j$N_K70$u2ZM#%q%viT! zdR z;k9w2?pnEOd2df|ZC$N&WyKbyQt6gk?|A&l|1Md&w6~}4uDkxY)0^+yfB*eGy}kKd zo`6V5e|){n6nUWCXN^P>uFDLRl1NBoNRoz)7+o41=0cX84Yxc*pE9DAfj1Wi&ck(X!_}f<8);=)=zdeM%8PdPD>v1vz$aZ#M@R=r00*X_#gGXkRx$F5Wh&&8n|FYG%agjaNq|&ys)OGP_9%A%S1#H zBwTmh`t`Y79)J-E<>EXl{E2jANQB69`GRShm5RN1;gUz6cy9E_VSU}*mX%=~g(E(C zZ}z7j%_&zZ9#wN@e|pSO$2|M=n~(qd3CDJkFrUi{NfNvhgIN%gL6H4GA%&IA6bA>+ zzwna!y1HU%u&=Ktm&<1}R!waK0?eNMQMqE9+>lZzMn&Cp$}nqdowT9Q;fr>&S~by; zR~{i*3If)7N)RtX(GL*_<3T>DrCjn;LX4qWwUEo_NJ?*ZoBV^d0f3~4o@xPv?KzBP7n3R zRQTZ;VIU$<=NEZZ{_9_lTUN$#>`ca5ykO}imtN7=*XKBH5UDdF*LB^Iqel1l_4oJp z1@C7974C$q$0IO+bb_LTrVUn_2lniplq7}7=S|bf^!5yRp2D&W$94#S8-}-S8@%($ z(TCXFYnX^}ZW>IIyyu?#KltFo_RU)sEM8)o1~(0o#2C-#3x;6`>E3qRZO=UQ-_`5Z ztXsFfP@9*+At4NIWNI>?4u5l9Z>fotLLve)Fkmxd2*}A#Xu{$p%a<)(veV8pI=1u| z>S_lEdK>B*H@9~@|Kh7(Em&M%U)R~$F=otYyHqwTlL!Hs6r#4asjI7V>5^rEv`}@P zMdSe#0tyV>0*9(#)@o5kYJjL+zUjckJsA4AWHstzGz3uOQLJ3F zup(GhM^y$ps4C_1iWY{weIt<3O&iLRge62 zvz4O65talnTaV~sL7kRcO;eUYPW%EP98_33>`mld%hjj!BfdSzDJT?GO{7%-kvvGq zgATEzNopk;3889uWxT~_i~+HnWo3X|Gn)Z4u~Z_;0Ps?Ikcet(^OjX0DQatY#V#9G z7LmCwlOzcx0&)+o0U}9Y1mLfS^U$+nR~Tbs$BY(2Zff7cI3MWm1At5}ixP-rE|*)e zqU|@=|5lPKT+!dxZ&?{{)oA;cj`l4b0Kgb~=D8PMeDUSMV#zX1R|sI<@jVOx8ApS2 zDW&7M07OI#K{%pN$X|TPWncT+3BSAX#uuM|;o57jJNcB8=ggV=qaU3c94ezQYp_up zwB42=8-39yZ4`p#2B0)pr3QRSK|1V^gJw*d`S_EMxsLsflTO~;+4;&#FLUlQ43Qa} z*%jO11_2RC-5Erdy+jAPT9P7+2K_(?R1_DFoqSXa-f=|)VXeMK2b-0Gc$EanKwuaF zab{e6(FI2yb$F>*T(Nvb+v@c%zWnl<)oZwE0su)W4i-~{FjRAp63XSWLiw3Y7C~jQ zd~_7E8j-0hzsDFDWJ>S^lg>4kz0&vF#_9C9q(w22v?gexP(A178I81PHtt!JL!}^M z5kh?O>6{e8kmYiDDP65YfsOLR5((ZbEhKqafWg7y?Kj_5DCFDQI{_pB)Hl?VkOKn) zhaPg!amOAt>z(%niJ$%SiWgpaYs;1`*=&|^CcG8hzFG6u^hO-Nlz<3Q(m((Cu(xzI zB$9bU0)}C7#)t$4Gmtty4L?MV_rsXDM&K?6S+^*g^{?Kr2U4BFLjA!&rgRga)vQKE zQ4m^y;D(BJhd={Fe)`67yc?WzAtjK1+PPsErfG7{0^uUhxVgfSK&8Rr#EBDrdDT_9 zeD0-}UwQxi5BJz>kCRXS#+UQHyzSOIEXxEyDWz_`Qmuq?$WWCzibsC_EyPO^LlkjH zVPqa~DG`K_?KrmMc!pX?xn)ZSBJ)ysj4^I-QE`8J{SC(*f2@?^{0lCe^Xc4dHshTb zhnhtAk&GHT<#VIR7(>5~6pMa9f0|3_PM!HG-dj{&p*BN@+*!%=J<<#a?$4t z=KcEW>$Ys^;Fd)}n1&(f@+>Dg!T|w{v(@X?u54=q#&cQAFihb}=^f?6(6&XnTwc0t z+0tdpka5d04bDhN^0Yy?j$@MqAteBs29rb{RFx#jdmD}CyD3a_tZZBL^wUqj{4CGp z3s?T)>XznF0DRH1m7jevk1^KV+>p!Vg`h$qpDolPGMCUPyTC2evI=!IYBZ6+TPhAd z%=1{C3QB!l(S$$=20+vHh+N7J$W# zlvZsN@>5uMf-Sm|hH0bdS*OuzBlY-X_@fp=(bWFNIfhDWQrb$bA*?6%()%j7H%x(R z)yBy1cjY9Wt~L*o!oz5PQ9J%H@?gRuLBjQinB4mo40Lr@5?TZG2lW$!w|@C1JKo>a z?rW>YQV!BcjdO<5qEy_Hgk1pocn1LS|8%8R{y$d{xl%*RAvCipSc}xTO;qa1nA9}M zR-aN0LLzF7Rl69fk9*$P;;0F*0ExiXN?XO}H&`~0(cQzws~IBB9`xPXFy5s(nV8wKI-it@q; z&NwqIvp85j{T{06+qUQpmcxnwxLAdEB^3i|*YD?iG3Sj}U-J&h@Q^NJ%*YttdkB>6 z(yEG&y7yNf;D``nFxBkYKn;KEA3WMofv>2$Ar%(-VBL!a2?2!=j4_hZcAX68C!Tox zfd?H?DVLnXTmoPm@4ow9DMZG~l*{Ggk3HtpQ%~ZC+0)(Qx(;&w&_5rU_r;e0z!)=3 z({b#E+WLtTCXE?8cGC|p9O_Eijp$8MM`>-V z5lbtyt-=(xPvi}dVHg;kQHp_5fsfiLW-!Ueonb8i=(^wq2Hl-qJzd@3{mvP??X}b2 z|MuWl3l}#w)SH&M+s-@v`1}h_{Mreev)gXJxxIahWm&E(0@4YCRlY$-VvZF!XO?Ao z?~n3AWhFC)!NHrc#{l7L`ldO-=s0T7HyU2XVx;P3Gd_mlIg{x?AmusrQ?>Pjx?;tV zL$WY83?bZX)|xtb+VBy>zMMaQFX=;I4DwL9-P$&N_u6m&NmIxD?azPh=;&mOd7c6} zu^$ru0uW6ZADwY7yGpL=faz~GZlKjoCl z8N(2gxM>&wQc|g0`sPU|e&_6OfA;yj2mkr6HETEIa#`DPUB@NQo=XBG8SFtJl8mvz z!NGg(eUMx^YShSqk~4AAL@S$l?e$mNR;`gzHn)x#F?s?(c~gJyign9{D;k>`4Q?Sf z`un=Nd-?(VP1K~XUQ=Emow@OQsVW?U&4H5%kBLc*ZT=VOt$J-s9s0Rkn($WzzIv6> zuEo4hwE#dX5nEkYb=#m$PuweQ1Eb;*Q1z*l|I4NF#JXo3qVmA%4(&!0o+YIoj2iZ8 zmPQ4^A+=$R7%2roJ}#b*hWOCNEPb`W$Gd67hB+WNkN`zYJna_^3!|KkDU$ya#$6|A zN1O*!9Pz}xpAk^$H;+@kF%Le5sZ;G;q^VhlXeuQ&Uln71fafser1w2}Jgp9kLaH>B z996_1CMDJTL^33jP>S$n$eT&o4LaqstXf2us5WL4{C|l^iCBD#Zzy(N{Snind15W& z79rQaMcQ|a(CPbm@4+F|b!)+@FD*(U^zb73V0wyQyW>e|_*1Y56K=WXt_S|{NG5AZ z0gmHjvL+%k4Wpy0t8Mk#Og8)Ef1jEC$tNb~-97!Con1{$4UG-;xqN2znzfa31rQt| z{Nq6=Y?m=G4AbC@akl%Od+xB~t^jb#$tPv=h089#@U_?8c<`ZzB#~uV-}~-a=l<}# zIkP`*Tea%kAD^>$$?{7szN~H4+I(FNM^-A8h7WJP`j@|&IC<=KzrB9W?9VLIVhjPu zFbvZ&%a!sTd+d4bHP^iU+N*c{{?GY*-gZF>;kvFX-P+n(DP==V-N6SQSg6gB6dTsB z>+0%2#)6nm4X8gHYAz_`B7i3>{t*DlnF?~n>%xXC>5ju;F?WV}4UpE8=7aC)h~@X+pnUeERfnM@1T^RFu%984INV~l6 zju0bThaY|9VZ(>F4i5D74-Dq=x%#^Lx|&+f4dJ>7;5g29+s*jyIp+c}yW9`RERL_f z^6KYOnwE)(QcB^9V~;)Vs-OL|b=dHK+<*V?ZoH{jEM_tp#ZU+gU_?9pZmJ;*S)vc6 zQcq<}Rj8ky+$TSo8h^!2V$VpFJ7MgY68#6y=nCsw)QIZ^4M#;RU09okD-i^USfVg= z6Fv&})_r>7#k`RguFTiw&N$sUUki)Wh()owzj|+w6rwkGTCpP z_O1Us@j~A~(L2?N`~x8*Ao~9WrY^)&2q1woPE7h|4FOYF!GqVnnT^hl#=Kh;nFY{5 znP5sEI11j4qyUO04KdstI5AYL1znF-RSEy=xz#XAQXUKfhaMEt@UQ<70SFPKAR&a~ zxO?uo$G!L5)7aE9Yu4LWT=CNl8#bz}(T+1`?6mVvw&UhA8RQ%pSVpGexF5~_Wckvi z$YA4!O`pyA{LrJ0%mB>XZiZo)(k;6cr>>^9TrP3b04bEl4CPkh&W;dR`pQgSDZ&YB z&N=5C5hW36=QgQ|W1NrilK}h^*SvZOI7cbSwrv2&Wh~C2QYo93HGRsIQmIrbl>i`{ z%QB`8b<;;1lD=KF=sU#F`6?nqdq@P1a9ziB>`Jj%BE}gxKfCH@4NZ-e@&GwbrBw1> zC(R7b83JRaVv$^Fnr1eaA(8}=ab}PS0{VLUjyme7Q%*VQ-;Y1>?mO@1@_9~R7>486 z#~**(b-(>>Pfy3XwJY}6bFY(6KJ7QZyY8juUukV^9V`xHjLdPz9e@1SPTyyrJ(n+E z_RmNDGvK%y13`KyR0InH$F7kp`-{a}Z@Z(WCeI9BE|v|$M1VKnc>BZ?PY|x? z= zO;1rQHWWD2HBvV;I;M+Qgyj11B+QC*A*H{m;bQD-_4S=`vb|=L^{D#_>sKS3D8k|R z(?PG)fJchN2P@!GwX>QvTM_&Xfk}knDa;(|(qW83?1Al!I1vq=1t;$jK==|YpZ`&W z7bPHA;HBe%VDFCZ#UkE@AY@)-mNhAqvGG7HNJuA0uPrDR*ibDMN4n=3q6Xyv!Jj0- z*dyWUvJjo55vIrCG2%VvpX^D**62&MLyF=`SFIxu)R3?dIOJ3MPpN7ZoS3w=L>fju zM_3*JbG*@7s+hP0BCw~3d@#80FbJ^Q(z3a8tUzHLv*-WWa zDwawBaKJtX9(mL;BS(#V_POVlE?b$esbNGXe&eKzF8#?aJMTm!cim;D$rHyJ1`1&} z)Yt8^*IsYFGfN;Ej0x?%lT}2Nd|2w)bK;EZ28U_G`|7yJ>0)fZ@h$K0-z1_6!X3pHXucvtU5l7$m zkKymln$^?Yf6NKTN^(krgLb*N^G-XRaq2h!eBVF3sU#v9Vi47lxP=Y=A-`+NaC&)= zP*}s8d{Q4X3EL*W+P1~BLhQ@Qg_k**) z_uan!-dr}vIA@F*+>}y2@W6dn{`41xe17k}_L?zsMx|0JRVo4jp=4#OqmMc67e8D5 zi(mgHZy1P7N>`H(zXL;|W1mo9;as}vN~973@J>Z?T~`Q!h?Zq}ugMA5hA7QUbM!1R zUf$|)MELP}KRo*AqfLYFz3;w;!9j{W_uS(*zrH44Q}dtyJ~i))&(Yu!@_d@&KqYp| zH(U^it50JvvW$^%vR3wo=X~ePvro_Evj|KQPTy_^*L6s`bqy^y{Pw!*Z@g*#f~AaD z#c_b($fJ(>{`bzj?{9y9Yu2o6A%mQe3xk7$mSLUpwbOrj?az1HZ5PgP_D3HN4h$#} zKK#%l>Kht3I6pr3-0gPUdApfAoqEzqAAIof=FOV{;GFM#`|!gLD-Cqi)ifM))G=+V zH`dkH^$+%c`pMklU@1ToO6YtEM8r%s%e+$)iF*3_k-#ub#u=iye*K0uRoprNScb(- z!1dFA@xoj>(V@R5O@ER2Z+nS_AR>LlUB!m~FcBa5^Qqyw$Zi zTVabbIjJNmGl|JtS`82fvGE^uhZ(OB)Gz6Dhw~qCB)qkiERY!1ZAo@SAJHW--WaM) zogq$(h3=y*dlg1Qd@e|^-p^e~yK@kx$0RrLy3Q7yg-YSIQ6 zV=yC~u*A4(XE(=*P2Yl|1I<{jx|*u%VZ44nHZ7n%uH&9?ymjgnz7L$C_DEt5EF24E38^3z4x9pd8%XE&ph*=JMOr1?q~D&+@FPBFi*w#|fh{{{^E72Y`W7iv@ugM6CdUUq_O{w5&%Te)yQ< zj%OSJsAJ2fLOz?z*Ggg=H*WmNr58Q_^mCSFX|H_&6&q^$1%SZNe@_p3FOX5u7y%JE zjw^&KgYt%9DCts#eU*=DR#dP8SdO8ER&t^=0udSKQV7R!X1)LJf%_lS+tWqB48ues zX7F4tcfpUofA_r)%$PCb{(JA+ZTHx?pw)4){Ui<3_ zlP1^J6q;IEEz9cY+}zXMJJ>&P%{AA&@z&clg+lo54FU-=kS_GaGF1CufP8t@#|%_7 zqA|LPZw5cPr?5y2FC^28)qI5Fp7u!S(1KwIY0%woWXKYxAoiF1OeO_`rFSq)6?(!0 zKzH7H+nL|__P}7tG|ieqPKt_7#XP$ZTl1qNt+|+pUO*fr; z-j6nJT%XU^Fov9S)8M9+efmF-oqXyU)2B`Q(;xqE zZya*iF=i%<$ZWfkI%E(Po@hQr`=g;TPxHM_N-2?{_XeHXT(+*hu~;7L>Fu+uOpvZa z0RPw}?~0tg6okzfxqu<_UJ(1-Q_mcA?C}5~gb+e-hTJf1yJA_HYp%QIj$3atI3oa( z-su=Y&7_PQgexS1y}ZhyqL(~~oZUn~fQ$*(wKCSTFZ}0-LyvPDyIgTN1H&F+Kzw69h_u6~UiIXQUUAXXvKlJp1gkPCogR`r3jN!aMAjh)Ixdzx&pQv)&s! zdgO^;|Js-_V~PUk)Ug;t*@QGi7gQW0F+w%!TW!K)f~(`|7>G@qUr7m4s$z10FdGn@v;%%pA_52E zep}u0?NPGhDZxefw6kOwa)a?sMxIYhbp5ctZ-!NsJn?Tk_qttANUVgyG#d8C7y+QlnN9fc&>9?=+DiV#nvnA{9bd7_xlC3{dF-*rUv}x`01`k}DiwpX zlTJQu?3f9^_{GncEpPkPuYa}Ujyrt+d*93E3va&h+Pp93eEam%TSkmtyyUA7KYrhJ zUBfh`vV)|Skzp#Aw4g}W4vdUA0z&}gi0G0uOv7<1!m%6b>&vBbXGce|?6hy$v|-&k zAdt}$JN5BPxv7Rzz0@875nEfEo0?k;!w`RIJzz_uklv3>{*u(qAkAKxfAmLdxcHy?xz65Hbz~m2#=Y zH0qjb0H7{kx6_V0O_(ydueaNK*K1Ql%h)j!iUYm1b+w+{0Sa9q0*?|`5-rG9nx(9h z<|tCw8M{Y7q;L_UKDDt;FixvCa#FAYL{TFexuZ;nXWTGtlcAo~!r){(4L8KRiT_o> z0M7aD`|MU%-&`DA*WWt`L=0pmX9!y`gBb>AXxWZEYm!BlLf2lh$R z=eb6RZoQ_cX%6HtT=1pAwPkK7`$XPBrMu~ zG*I&6SVSNMgYn4|C(qnr$KKv9DUmVLi(W>I7%^$$1ORXycVM8uSQ_l=>ME7WoO8y| zGR?-OmSVXK0OeA-v$Mmt?Q+Gjh&zt!x&na8rNOf8a)T2QYKx?F^rDBU3iIjw572Um zy!}(h1Lb0j2`O^f>|VR=_1$yM-f^d$7A{_J`%SklUbc*J9^YS~ENaM7&0#AyOF#&m zaVhAwJMWzT)c|TimA+SJfA72XbqxRvkOM$>SNChLzy9`H?=a4hBZ-KTM=pvQtl&;G zV$dvw7wbyN8FyUqv!7jk$px#waniT4`GReinFJx6OeVj1^QOQ5{l5P`_mb;~AAIlZ zpI`a&hQ`M3&W?{}y|?c{2cG@C?=D`vth1wQ#`NhI{`e;c9CQ!>bar--5Ooc;BS(#P z?8@{R(;7GT9Dc;%qeqYE+|q7kGMqCZBxiz%jy&w3qYppWG;#<~u9O+$LW-I~u22|< zzzx$FIjj{t#~d8A?)NCjh!6l0NB|H*4P(%M>5X}?@x*(>FKVxYi)8I7+-e@-qH^o8 zND?$9ROuZ6bsNAt^(u;*bR(4#)CImNj=BRu40duQf{mbsm?4VEKwKoER|tWtL^a74 z6EzHh`6DMPB_kIVO=!MDF+ne*dZ7_Xv0_{6st)-P^?`#B$177AZ9WlAgorr+^NEB; zI>VA7eE?eY_9Jo<@Qnfh9QIbpeXMef?jI(taGa7MoqQrNiLp51=Ay?hMY9xXV;{Mq zuq^BkB{U~3X3#&!cTI&2RB10tbtL8)n&#A}s7hYn3%w{g#hG>`!bml5QFXx597HOF z!=$hd5yC+z;t|wUjSh_Dgf#j!E@}KpU9@ zw8Rn8)~{3%s-g~2@C6i8P>-=vglqMc3KIbW$>0s3(QXFRlfJ_Q^tk^zy*qATTDR#Kd?}yx|Z5 zhp&nA#)v4N&s}lZWqaqn#5jW>#i6XbH)f$r*6c;PHHyk4 z5vc{?lcr3{=kobnKK4Y#aRH!QE@w;=5l4&|9dHJ0yOE*M*wADctWaAh)YbrCU0tK& zIIa*@CIbLwChNVc0~w;fqEa=VMq%`d1u7n{^JF_>@zU$kwb8qwf-^`3KUGY4G$e@a zF^UAU$p@9oPa#rIr-pJ8u|hg$jh|llOCZu*Y$1G%VY( z%jKeFG6u$tH{AB-+wb{r^++Q!INKQ2r=;{yu&PR7FwF+03L6GSDS*ONTGyUP{*(e| zy`Pd6T`yFnrbN0n%?~n0-rn5^*o+_^ZoB=?6eUp@AS8Qf5Pd+6e0Oa%e;lqaK zbA>6Br&<|H&8Pvuxbfowpj0ZAOJ&QlMvfd4BV*K)53S64f8$L;H~`OB`ja>M4$%sXf(sF#9mj|8#Q zvC0R5?r0J5vpI9yH*DN_x1A3<@DO0Y7`krdnWvw5Z`OPB=Y1(%VQ|Z5m2bv~D4dXr zd7sdMDd~(X6ZZmYFU8C_W1r9Y{E>e?aQG3&)YsQL6$IeL!QMile#O!yci#D@&dwe{ z`0TUKHf`R}(AbzQejDll@z@l8KYQs1Cq8eg{~p4s^nIi^&xFrM`C^`9X<_7l<%1+aW|T@i51a}j4tjN z*Stu`8k1@NSo-vnmh?b0fC}-jPW32skR###i zLo}vyCBUN*fllxttkA2&PXYQfRqA|+h(Fi60Lr%N)-aybQgnJg)vqA51PQ?d2&2bf zk|ce$TuWb7wF{{dLjGiO0nRYa}j2m%Ndyhj~_bJYl<6nKKpFUW*&L? zVI=h zLEqjSPdFsZIr)TodzbOf+wYt@b*gEarfGVrBBd->%JaUM$2k{5zWT-+Yd5a5Z5tV5 zzz}4)RH?12dGEdVrKCkm7ys$cf3z~$F{4Hud)#ruhL2plc+tn7e!6ni%J~Zx7={r7 ztAi;mdq>^pD2cfl%xFDSkp>~JCZUPtShFKXtA4y`OhKSLCAUzfhhXX1C z+vQmaJ+w~6h5jrsMTRG0nl<)>lp>HM351M2_1|ZgFI{oO5l0+$)L|3Gj0JK(`}Fg( zzkiPMusxj{?!NoJo}OOr4MEJ&ff7}fxCsqZm^4%z475Z~w#GmOY6mC=#+`to2aoFTA*+eM@goH{%Qu81uHf8f`0Ax{g3(Qp#k?QZXMURNqr7-K*Zh=Q>Vom0YllD5FqbMWdAbx)Ce z1H%w($JueljI+=FUVVK-#dZ)G5obIzSSn7MGUdGU&bj{|kJQ)HH`moITfS(_*x}DV z@$B9Q@0YdsnpG={m0~uV71HTy-_pLZ-L-{f7(~=q-#B&Bq)+F3wtU430NA*GoxwSP zs1%FYTmezKc4@n5(>gYF%=+N{qmMqEBMRvPLm-I&9H~&qFI%yC<%%_tf%3)D}tjArD)0K})%kb+*Ki`^o@m+Eg|EA=%1$%}j^ zPQLFBI1`~Q=D#83M?v0bACm#a{?Qm%p1Pu%*dl0dmAy~xVgbA&YxNA@y(JGB$_-&Ar5L5?VCS)KaWj+i& zG>;rxW`PL^@4KOBPm>@)F-05t@cahfiKw&w0U%Y@Vj88lqyfHkq47UsB%sx0Al}@N zhfQggAnjR<71E-J$X8IO6%3K=QIZ?$a)h3QN<<5LLrcMZ9c=lAEEtQVYC)QE#%a*O z3SxY)hImkyyl7X#x)qlZ%{qy?_1VN3-WHSh}1O zd*PXG+B;#>(Tr=rv5btSN733Ka#df2MUVGtxm zt(-pM>SHMR>F-Ha=meC~K;T@I#9;8QOLa`2sw1{gCN3c=qZnfK6zBt>@d8yn$T$On zN~O$@jTtwlp{{Q9n2|l*y)$M^pEP+&K3`*HGqXRM^~fVn`0ou45-=EC8bjg`EbWLN z-MuClt6Y2aRR-FnoRP+MwTK&ooRLB!@!I0RLAQGmo5+dDP)Y)HOA%Sh8}?=X0NV>gkGY2X=xe*zZ8(c{6_ zI(zo)jFoX*2LPDIK4sQ4(N#(j=26HG?!BckDty=FK~sm2c`Ee~6CPdg196I3-4H=KvY9_5lv5)OuHh+Duu=r-iKQD4?N2)>zNAp2QQkRYQ>QH$9+$1m`17fFJ5=er)SkD(D5B*UAA@ zIpkjtS(CpGL3V1)0xF7zl=+6#_p&NdNy<2ho-GSRSz94Z0g8wVder*{-HX~f)o{w5 zkT_A0l!&lA1?Lt~u;POv=Z`_a{uBlCYz~1QXX@>x@HaLpQU1h6f&$5x8h_F+&C(@^ zOrP`A*bpGOm;ut`u4L$xuz)(Sj(`s>0);4J^`3&pG?lYThJ32+s{M`9AISh|?P9Fa zSWi=-TXiD~`eNmzipH>P48Bl|vVdu+ttAG?V}`%?1%efei0JQbB|^rDXjp60uDk7? zv2uN#o2_i#tvJXeBDc$BAh;KPzsX5^#zFlficb`5pvem-CdU&Du3Y3l=Rh4fCUq zKe0@cbAuavU|@iA?ga%>Yfz;)DA0S1ZV&=YT907wLqKq-YeAL)l-p0m3IX~|TM?)s zQ%`a9qdT;t^~B8xrOfZR@8?L3doX835XuEe#uxzrFeCs5%oi2r`FX~< z>x%w?lG{7DY2)TdPY{uz6tcIsHyE&3U(qy8k9sff<0Y*8&G00-VIX+RW|=?jQN?Tc zYy1fG{J-i0W9T>zku*4GoJk=nb_Ef*VIpS;uzJnf2OoIol~-OhO=F<1*wfR)4CV=p zH{2dGP0K()R|v^e$hkLU^pOvwV`mSZi0p$AhZ|&0MEVh`uMSvCrz7dnYrHH zEl)r7^=*rh=4=89VK?&-Ce^5WtrU z7X0nL`vwP!C!hSaj?T`f|NG2I-}u_-Q6oP2Z0^dHYsQZsH)ZM+L?{(Yg_@j{!f~W& z8HQyYboi0QzIMm1n5Ko`ueBf`L^d#3+J5FvyYI2M35t_qU*DO5#HVbLNBg~#;YqtM8EL=^}ZrbZE+>OA?+ z#(KK#myWmN=G13c(B=@33`4Gx!hu@(DuzxsQ0YDhd>8APcP~l;f6hFV_y6?@yBp$X zkAWERQgMQ-TI{siqrrT{-~dGiJ*|~MQsS~5Mm@|EAzw2>&zNFIBl0%X6@%YH^i<2s z1Q7%QA^FDzhcFRB71ff7k=}adO>YuW9f+r}LE=HhK5edFX^75<;6s(}q-a-?O20FS zIzcZVPXnk&wRU4Qq-F);tVmozf=xM>2$kybA)+ZgXjH0@Sc)C?+H<*)-lcIfMso}s zC4TiW3Wc(wC&^Iz8nsPc_Y>`>@uaE{r-q$+Bhls*Y>E@3$^=iv#m{SD8|d-zrCuTF zywFEF!ooNi8n*M|R_)Yp@HNxZJ0BwhRD{c|92j*3n`-MDm{kKnl~S=>8Ytwln>Tdb zbN{24UQyb6k3D*O`;hasD>t;X4j(gd!lREpdDCsTW-{i%2ORk8U;k?AwCz8f^+s=R z|1rlMeed5M`1?Z-tXj2dx7~KR?z$Vxl?pR6+yG!egd<0du9OGb+qZ1m()pMB?yqfb zS~!3HGtWQ2WZ|N3oqp;im;ZFtisctxaM2fE&gYy7DL?@rO>~vD@kc#0v;NGJ&nyaU zly~}+AChoZE|)L+=~WZQ{JC*h)0T}}cHL>0n{T-FmABtCE%VEHUq~W-_g65Gf#D5T z?h#2Um&iGDJ0PO@ZlzsVo&Bq85$&dRfMQKDDq_rL18GpkD7Gp<~!mTc76kuL$L zDMe4MJ>|6kBzOy4C6Od4y(vuqFigW+O{URG03alJTkbjMoS`4%q9?_~fD7_6M?~7t z=$zDDb`XGvU`m;H+b-AD)^NuA`irjXNa2nfJJyl3rF}CIkd)bMmZa=x@62Sfy?s4} zni>F-QUsg^0Ca_G+m#p%0aHWJrF52Y=DP0R|M8Hghl7KIhaYjs(=R^%r@#Jr)$%oq zmM$!nN*OE1IFnKU07w!5LDq^W=BxBfNECP^hu@nBW{ll`&qK4`c=ztV+3TiVvI9x-fK%dp|!Jndv5 zI{Lc$UB@x9=3u|GaOu)TiH(?cmKtdny^s zHwKtY(?kufYY;yY`2 za>e_ba$zWpF;c2NoE)J@o56aatz}1|b^0DR{)o=i7`}}WKzap%!P26&|ACkk(h|h@ zjs7pSZo_E!i0J=FY@&f!WyNKTelEx}lAaH8 zT$gdaxxM|dM;@L&dF-h1V;9U{_{F@%%}vddCXSi5-At!k`f&EAPe1$OqNU3xj2wB) zQAd9N{O@)5c5d9faonWQyC`={hcjzA5Z)_{B38+VCj@=S5Avv?C#)B>xCt#u?{q{`>{= zzgh?ctu4*JyY>1%{_&mw%hKrKl}WRS6^j} zGscB*0nsuuu5ItR_g+_AdHIOpqptbQuRr;4w#f~W1PF-q>uY~`=pl!7cW=4qqRXaF znR51-XAB=T>d$|@`}Nn~6ha_lp2tniN9sO81wVeG0uj;Mx+Vff00h|4|0@ZE6anss z0DlC1_MY_Jy=j^ZIWQtu0D606A%HxD(mQlT5`p*jSs%5iL?Eh#p&p^ZYD_@=3>!oY z_jFNGyaU`+?aVgN97o#abv|Mh5mS&IsM*q?l~>bxH3q2JwbXc3^&upsmwL1OKUThf=q#>iH;3*ZpzjTZ{mSuD=G*}soY1MVeqUEh$j;I zWUC*NeOKtOqxYnwpwS#uAR0{mCbP{=;AX z^{;=e-LS5{v8J!PuTZFQg%CpcmW`vy4dDvM5qijqs8#}aurUsTQ}fgW5)nDz!bM9z zpSSR!gARY>;YZur)<6E_Q(L+_pMB=}&aR$JHtSUEDcfyVQ&V48SHJr{dp5N;F>Y+> zYG1u}wUlD)h%rC@(Rp7#>EvnCri~pn`mgu@wRQNg3};tgedV>+|8DKN^{(s6ik-{m z43l?l?ldif?8-fVy63r9UOVTkGxywk?}}{;S7h^9+phEv6fG-bSk@hP{o$2YUbixq zKi|a=5IM3?#dXUP2pUCu?HPFq$xBV7QPPYM0j8^_n#PRnPaZ;#Bj_ik+A2UYEmGPR z*dHmRSF*J@#BT%xt))ct0GjV0%{r%$5j$2LQFl8L7o*)AfOAgh;Quli6#BBf*0Tqlm2Up)FlY>OX^pW zR0H%;QJkT;#8ib}n)!+;wnhp@n@-nQ0Km8ss``T1KyQ!YkAvzq=vmRQ3$YKWAw(=h z)P-hhaP&?S*J^p($By6+%zqTkZ?=7QWD7LDwH?T?A~z1-6rmMS*>bJys%fr){yS7%oRu=?)D2$farLGnXZq^93!d>JF z1lr=h4mX)tj zxcj(lk1+NxQ}s`o*rqDOoOAFa9@z7hIZ~SeM{XQfmwz0)*LLCA#rPVP0RU&tVm5$# zU=}!Vuow^Vg2!E9#&;P4yCWfvlF)Dd)=cpGPwY~JFv@22(s<;60}ld#etjwr|MK&T zFFsF;R3w_q5n~K-POWSvtI6sKCmqwRd+$rqZ6Ch#5d%&zmQ@8IBxBj&W<07r^2meT zd-U1wfJvWyJdZOjNrW*@DfRYthL?gl#|UxCIB-U->Rvq#pE>jS=b!IvPjbcpW1CBD zpQuHdnN0xz!bDJKzh|9QMJLthjK7mni?(3+TB#An>heD^^}uuxamehq|QW}q9{X#4C!cV zm7_)HU3k&lk3XV-1`iu*SjaSVz!H`qlT20j>ZWK?OH=cf9ow>|SyfhT8cB|5Noje! zs3fObIn!FXc2zQ&EG{X|<#LE%#1RkxK-e``eQ?3u@ENw$@kB$Yp#uB+lgXdI0q?Ze zlOEi1#hJhPR)A#r<%1{_{14t-^i+x<|9tOQpz84BnTx0Z-V3(2(DHBL(tK`o_{0T! z0r4zm%(G?#AM+a}RwuO7{V6OA2JIp-pq-9Y4Oqicb0#EL` zS;C63(35Yv1pX6F8Pc44D>(e?kM1Q8^nQNV{4Z{WE|Yq8sduILA1`z-yS;rxnT|R+a zEXtd@p`jK#A-oOV)!oh+l&<23n>THo_sQIkKmO>eufF?X{=)K-B8-Wl>jV=l zV-6f)w08X_0FWdJfLoUJ#v5<$soyhn*pN&*wQk*pO_3>0%QG{=916(UNsRqj>U5~6)wsPCkO6o29b|NeKm@1)=fIIGGTq|+(2pUUB&ZPXe-9yyK;;5a+|`N&)k4sP>hF=|E(1K5*qHfCm@+LzUeB973SMl0)Tm{kUogVY@QN;MP=Az;jwIoxwN*aZ7D z1lhx#q%OCIbhO_s{*i1uo9$=~nD*TLhx^=X=z8B?Jx)346vmjLCk>rmaQ=m|8ndh{ zR$`}~di*P|y&F-ZQ>Ptv_#uZEmz7g$4d_4UymQWs6%~E`UDT(f-XN?B1A zRpuO2O~V+NMG-=&RQiK=KOB17;Ktp15aHc>^}<+Mu;90b`bGdKE3YI(%49M`Qiwzn z$qtSY0N%M{YioN)GMQ{?Y0)OcKKW#Rx-)g!8D~U_$^f#toQ^P>KYziSZ@l}LznuO4 zd+)sY=DU6S_BrE>Kh2tTd`o*nqN5!E5O?Evc@90Vp{Jc+%{-`@KaZk1Sd z5I6?%fi;Uh^`(+^U-Z@)zdilQ#kBQ$*zbFSBa}ef8ICr48 z{H}1a7OF6WNb|jR-dArNos8k-%0S}6ZFi@o;IZ?a9-%=Oe1qPUv%iW=WD^pQ6XM(# zXBu+vB+Mtwn>itEfIRi+zeL=-(OYDoyhu@QfgqN@SNC3kBYb}(w`;O@3ONB<3iP>< z+0*wPpJ0r|0kqe}TvN_3#MYCPJAOL*Af+P9rKKgNZbYMz_KtKWo024nSxzLPveMFM zG}74I%m4@>hCvls2F~o!u`CDtX^|+Wj8TgNw=8Op6UK;9UQ`q>D=SU3wbShwTRiulQ9C70)s59|RvlNDpEsEQ=XxoozgyyVV1?pU&D z*(-0nu0f06HmSImYe$z=-=AfQdU-mF-aua zw{G1KiIvvv*qP{T9Xn>iz`;W>21+S#lQA$U;*2pyfBt#?x#yhU(%L4;GP7@S6au9R zEWy1Q;l4x#C#f^wp$oFOBVV|XQq1UavU@Pk9tL91a3o=S>=-bh4q)Y!nU-bWJSj;M zu@7DXk`M;$ObSXVV~lff!dAJ}Ge&`PN||Yyj8TM$B+GRYhJFHY@IWd;NEmwVox??et!e=g=kx;-wwVaE+oHt{-xknk+zBk=c3n^lyK)e`*Wy>- z$_#3M4uBCNl7tXqlzRRkB1r^en_&<_Hp2kM2mxTsC5#Zllu^UtjA2X&kpQ?GtrnOa zMVB#3EzSWWEXfifgh<4+EIpHp#-oa&SQcfJ+Lxxz~j2{NO|On>=~HZQFL*j!tS(gs~(^ zx}F<8boiTZy|H}d^2;v0%+O6DNjW`7Ez2$wW8`Qh@TZt3ylr;#q?R{RkR3RV5R8ev z)QgerSzwGaiAaWF6c?AwoH3=fp=HSE;YS`hv%aqWp@$#ex^+8nK6c#L#~yuT%G7B9 z@bb$qV;P-%(kT&Hy7roDpL_9T!!U*o8#;32(8Y_EVT8{;_sl_q2mQS8mp9*jx2>%m z0II601`ipydGnU$rWOF`-@nh~$&+-`{OPBKsm_!l%Qk;HeC$m(*E8WnPPbXpn&|FDse-njvfuig;0pQnFOM{PXhogWR0T;c8(~1RpP?7s?0N0533hH8) z3(spvK{^pazS{D@v*UmBNDY96&=`qB9|YGvZF%O8PnC-%1T`VHCa40svbpv;MqWqq zyg%Fm{aQl3hx|sk*k1Ao1EH-vuQ=r84`X_9hgf(H2ZznAH%PSm+l}=b8fhUF_Yb8N zV9-Ln$py!^Pli{uC{w~&_wjU@A{-2%>)hh*aIbqs)hOCjE{F*b7iycG#mB|KMKVL2 zRQTyy!iL@;pX0rmnn0s=D2H!!?Lo*WY|Qr4Wflj7$z8j4@Ek808q_WHOaZrZ6TEO{2CoYaiM}2qDB6 z!xD)X#Tet3WjSpD1PJ^6E&S!Q8gbzP;O-eVfLu1mSOx%w4jz8-rB|%n|F;)jc{!C# zDzc0TVE}qM4FDLRrgv}7d09zuE~n>mI)H6Wxu@NNq7flXf%Wd$p>H(uorf1ZFN-^lL=b1`Zoa08@)f zMAmaUrIdrj859?nloS_-W<4q(oFGK@?9{jFFqrg}?oh~RhF~R_dF>2_vVDXBg63LEI452CIO(I_c z0dUcmSICv_p#{g>MTOi&0Yu?R{z9QLyg%%o^+X8gKD|ytVaQM*uh=LzKjhh~f#QNx zdSbxs8TZh4pnJmV)?o|}GXS`|8U6CPP&^=?Bo{33yhE$VZz=NDAqArj1EP%PQYkOT z0S6w43HoK>FE$4tOaQp93w(qT5NvA%RZ=8LqL!IXr=ZY-5JCuZ054KnEFK*^Y;Z$; zLwj4hBr6h;Ft#^6Ih}zqFoxVNDs;ZDtCfL227kTO0N}v~ACTL!%}IeU#)f5fW>Q)- zVp*0X5k*xwFw?Z9xD<=3Ev;?SXC2Y2_aM7!&R8T8jYNt7U>G%1$#nPXZcjb;8~^|_ zvY9ksSwb*v`mAZw)od>J{SQB^Ubz;#5xpGHfk|edXw7m892MFMoC5u1#=#yk;GMP!MnnEdCv3&Whx8F8v=5*aO zUV7p6fddCmJ?yYO_1out_E{#A(IVQKHEY+bS!>t(j|U%)Xpz>oc8`qa=H}++W&luB zg)z2$`>yTVciCK`%8Er9#t4D4D>yi~?#5mQ+-|Ah1QlmIcLULdrIU}>1ExZr41>^b zfj@n&;ykqC6ogqQ{3h_&^T0EW1Xb+4;2cDeF4!l&pbPnO1PLT0K>37;34)Rlx#t1I zSW8`?Q{)~t*$aFv_*F2R{CB~>15FVr7af=Zv_lE297H=cY?|%$2_PD8jDqYf%G>-uLM;#m!z09F3=Y8aFS+>x z)&h9*HsBu$;jykBS1}Y&+WY9Nu6Y#&CquX{k7n;>z_Rm-_}`wqnSjCr5u(wluIpBY zT)BZ67%=$V0z*@2pA`RJV>0D;PKcdEB1HnhOT)pnR`N0Y|37qgm4OEdb_qjWPfk}- z3qU#_2>YaVG5tgwlmDHINySeb*#Y-`dxZm$2tvqSdq4;gjCEb#fAWO;@4I*G#Qnbb zV(x?gc(`}pfd?OQ(7?g{S{j-k`PaWYlc|WNG0r7P!US{1EQ?acIZ!}|AR^0hCX*S^ zzu#XkxKNSNrY)P_e1C2>l>>r-GR{DjWK0Ogh!Bhrw(qTBoMR_2y@z@cqqYkJ2qvx( z%262q20Pa_NW9eUcw3fL9E*+}H6{`-zG%*cmSvSyR2+BQ>^*z-Y~NAa*4Bycgf^$M#|YVniXxVv-u!xPHxDcih#{(V-{`rL+ro7ytkZ&Vs_d6p->EVHI?C z3CcC#)^q^`=isdM0@96KMS0o4K?4{9J*!h{*)W$#q;}WtmgW`!=-ao?sF5Qnvw#DZ zFdONNnA@)iA7z@`@v8P489H zE0fI&NNl4-Cg_bx8G+|Sw$g~c}KPaZS@dBS95KzGMa}VwI`8XyTaG3d+l&= zb^{{UX!bLT$i{t{Uzb}Fa{ZuSXcw)buJU zDl$zI5aNhqOro)(OfuQ9XHPbp)gtQjX;XXm?c3Vg4vccnEJhK+yK8ILZ`f#WUhQ68 z)vKm=MOpdjXPiEE{Dc=@e&(}JzQmX`?rETu*#Xr&YOx!jxInLUfosKXaV(B~1q%V2 zPmw3O9EpxR!;u3f*f7mkUU_xm__0SFb26jUG%}e?y11;8V5P2h`<;KgFqmMnVq_h$d#28w;X6488KK*I_{A@PY(%N>%UAN6Rbjsud_NNRXEOXBFtYsS6 zjaxRiwItkT0YVsIKnN3z01(00G|dC{-~Ug4`ct1iy)`X1Watpi*d2G=)^EUo_uqZD zy|V)`&KNsj(gBs-yB~h&p}JwHns&zNr>UBn$r_)2`cW#GMu5P%uM{~VC)j@>w-dM^ z+x;K5PX^lFG|s`BjK^zyC#B|-L-_wK;LO?j<1Y=O--xe)exqNy5etk;I z;!RCWciejCj@oVYjg5+;0Eb8<;#tU+X(bXJvMh7p)N=NvOOj-orlA`)VT!6b2cEed zGXjN#G5062dtfCv4_t+hT&RxIO z+X|HAf$F`>-Jl5+Ix@O@yKgM&Q&3HFPh*aO*n=Xrp@SP1&Yua3JP{PhYa zLJk73gE09fDEWk_V)H8XU%;7{SRbC&E-07yZz38KKgG- zmN?@W6IqcYNwy=I5P})whG|mEBA9Ss2ooYcC-Jq?ZLoPBnxGxhfC?;Lybu>ioRNi8O; zs$DXr^suRiF8+OqEJ>6yf2278aK<^p$kYu0IR5C9-hA&hLI?l{&c6EM+gIOs`P*;4 z@969RfOtH9-{0=K?8>W5(*gttqemWo=!yS4)6~$&fn9&)mG?gQpsHz>ncKNzYxnNm zRV^YBa>}WveDLACNJO(&4?Gcv@*TFWx66|aUC9H_Gsp#Q_tB0&dGnYNxe0{-6GD>7 z)LqNYY)d+n7+9)6T@e)nB>oPYjb4KpW6G9d&I#u!VI^yGj3 z^Y_2sqe$}Yx8M4g^UhCaatI^JOlna{mO2t`4?g(NM{_?pVZb*UC{ zGzuB0zA{FxN)E(}@gG^14PDnF>N{`0J!Q(_x@i^{6$5Yp-qF#XOl9u<```Zi>vS z=Z|`W}xHCeH}d}o@LWtvAEe(+a6{Aih0{mv~LHf=uQ=-G^t zH{W>f?7v(tOOk2oLk9Hw;G_444IgD0Ia!JP_sJ(OyZTy@jGA6O)~s29vC26ps?yw0 zd(E}iu3NWx!^TaR5KJ&|L?q%xTEiFs*tluK$tRy$zkBz! zS6+YN#ea=NBJrYlEUGa^n;M%GRYgQT>+I9N|MmxjZ1rUS5Ba-;UDf9L9eq|q{=r&6 zh&b{`BEXSlS&UJ4peW~HpOIBnMNt(5m@<}5r%cmC2q~(9II=8j>ePdW4jF!*gkzNNd#jIoLkhgDD`w1P@q68b(f50oG@qR{B<-P7h(B`B@H z*MKR!x5C4G@4VeNUlf+o&U=py>?#6f2W)SFN`Z|&o=l|>@Mtt@U!%8t`RauWzMVLJG)8E|;C_U#WGda>-rjd$kHZc* z;888onMxamkx!o_D~4{QQYiqC6;)Q$RV#l_CNno&d;Nk1zb;w4L{n9ZTA6evlu=a_ zuos{>LIBL7StH8n-nH@HI6aZM%vMeha zjSd_*7yx?qs5hx;QM!8FD%)huWHXu;5jd8bhF)NG*T!%N7-yQM9dpzPC!Tm5!pO2r zV4O&}Z{J>14m+$Z(XsHSpD-pBC6%$F65TLNLq{BRnkz3YKIW(+)~wsOYUMKSo^Wbz zZd$W?O<8G~szxnJM~oW#>#s}N+B*OMW8xjC6FDId$;lB4BiCH8Ritm)aiPoGq(Ly}~N9|0+WV8kb!*!Oq|e&tB4c0@Jlhy_y3g zyXB%n5nR2Z!e}p_$RK2MV?hfT#jDTbNTDDHoPn*{feT> z(7<>s3IKzK3_NP~(E!*oa)xPe#;PhRsw%1hpr+;n#u&m92kK!`r?W&Z;ekb0PuP0C zhpu`%a8z2*BTgIgRHbXC0U$sKF^j5-a{8Z6IqU2{bIve9#iiwa`t-3c)EP5o-1Nf_ z{e98m>4zVB+Nr1Xtf@g5v}hcF9d`I(58U_ne?9S3V?%?csRvFzsAtbgKnNoSm|zS! zBUittVe{54m|#o@!q^1~Krpr!5&;25c>cm4PyO>L-MV*^RmIeGJ(HCqYBU<@*SD{t zY5-8*xF;5k^zPfovMkFoWm)YvV4&R`naFNqZ9CjG$ldwo=tp7vIh3;d;Qf{%sBFd&Fg-zDl32I!?~Y)_BH2RCd3{u z%2_IrvWHcXWkr>#V}Wx9j01P}1_wArm?d3;fx-SNHgaly#n@pxC0%a9-dsB z^MJ`3@cDRp*)f(28#1ngK?E57U)((d6Rw-v0V$AhS%L@R3pC>o%^YVu1Lj8_Cm~PJ zfTMQ($t{)x1-vgdB_3@~9Ucd}E-Zm^1R%7%-~favbF1*&OZh1aG`$Nk<8yx@gR(=9z2KzfNV3sIZBHW&SbI^$B&saXHNftL)Ncb{q$2$ ztzEY%7K^G{WXY0c_uq5h(@#C#qer)vJ-aZ*h)886MGduEUVHV8_KuFCqT<;{%^Wvo zq@i2AYN{(M%a$xz`NY#Nc64@>l$9KG@QlIz2Ocr&NYlu@`{o-h9l2+odG^vv&OdMQ zVxq{|&fLTaNoqr=JFStAMV=6aA4P^@#%I0RXI9yFQmm$TFeKl8K}nh9t{+ zu651Y)pn9ZB0;Iy*wDa%ND|?kMYKp&x9YY;8vt08wY0TamX%3&Sd;^YTrOQ%S+V%{ zUw{4OHvnjFPt@<(Gc1>DYim^$jat;CW-m!jB-%TZNsP(fRX6g25P8cq0*eG(Ap$#j zUFXk8L9RQ2$n9T22_#BbuK-6R2$IQObn#+i1XQ|LksuyL$?J*--^pN)yH}IfLU*S4 zFTCaj<2DMrSH%|i+9%jGw$bT(>XApMYqmK82MVnoc)jMK0|tO?bAn(!W3;!nnWoX& z(k4kni^MFG0vN4LwL5n01b_{jHZNPcc=+%^&CRV?RtX}8p?B-veb>&NEiKIekV+;K z?QN!M)z#N2iV6Ufn*I9qOQ+NJnd%K2HY{8E`-F-6r7~$EDH0)iF3W(;|M919zWEko zVp8{fG&o|}!{*!rfI+Jjz`p@V=x#3bo;|_b(s({wlyK4d9?RVbTv31M&7o30m zNyn8Gm*lePmtTIdvZ7+!w(Uz6F987ijy2m>Megz`03Zx@$1p#r9(c0I*+7gqAdCr4 zr<2DYGrOXq;^R*~=}0DJS*4T$AW6ceMH!=WE;?`j$@@38w7l@b3){BslqHE#Mh%8A z2ZZYPG}iBF002$X6jf!^WX#$3o5^H`4jFp+rE~T))<5>|r!(nHBpM-D$z;+K#*e-0 z_FE@U8kg+YmCNZAGuBjQQA#P1@TC1F&6+tQm&<+d(Z{trc50et zaf{m*{fe^1xu+VrGub^nPzV=s&LO-^R9Hms3)%&ki~GAg1Z-Zg1nz8n16MKxxRpC$ zw%s^y{!I;n3<%>P@kPGl6K5MtRC$S9^bryig+-Ms<%3coXc8A}TK*$UazPXnvRD1|F0*=S zUMyVFN}zX{tF;^2sh319_N!KK)wQUGsFa4 za76em_pW^dK(=2Oag2cjNHW2QU<@aoc^Ef4rI*Y(^zg%*cJDAuqo#lVfqe#j^x@}; zMElSoLmv3YLxTqnlvQcRwvCnrGpEl?b|yBh-wGTo%ZzH;DJPzI=@nN2z{#hax?{(V zMT-|)cKHnwArv@ch*ERlfT7Pl{akx8dHI!>#G*z0diVYMyRU)yBHOb)0Ki+ZcBXtl zN;#7V6O0&ib|&Y4_hWTs<+1!&1Z?}3buYg7-|2@>?N(6<3^Yw?ZEC*us_TxJKI4g} zo*;;DgqN>a`oxp}K^Rmef(ZuBxa}Wj6eA4Sx$&J4(%z9EGC~M3#*(RIJRa-pY;WAt z)U&3?@+C{tsZ3o{gRGL$vhocZ*YDiAZPw98Xpz_h4?VDa*|J5y{a#&D)7aeFqoxKE zX;()b(w8n;}RjXDmU%HHOjxqLQzzDnDk_pBlG6}S_QCT618mAnZTbltui$}n9c1W=r4%0JwL06emZ@g~Yg#9#(fMDIU{`=(PPe1kF=C)2nQ7y~j zc5E>K*P{0>4h0ZqlgBoNy3lE+s40+t;0OeFtSi;Hdlyq7UH}e6l1!66@t>y|moB{U zLS4`8+_Bj**s#%Kf%8q9SI__X7Y=;U@+Gr(ZST{kF96=Ybqhi;aL7n4qL!AF003YZ zGGZ72)bH3-(X$F;2_vaQjh2k6T=?q(&h6{GG3VCAN#jpE=E(aVc*HPF&N#KGL^6Mp z+I1T`oxob$-cKPil--$jPudDgbTe`9E8?<5bX^}XV8AW6-8Nvrz|L&y|a33n$nM znDmXM0wI*e))gSfKV_V!KwORJ31|Q=77`MB$WI3Djo%Qk6$P6D0e};FTEN_nh2*3T zj%?8VC{T+8gba``iG}Qi?E?3M(2P*4z$c6ca`<+!ui!iu00=-fFCJR}eei&W%U4LA z2_|qtkYN8Mcr*mnCZN4;3=a7Ux_-RT3Ncy16)lmn0&Euq4&D#Px#gA|Dk@*qc6D0G zH*|5AEYZ~y^!J3VmjE2iL#ThOSX(iOht~H&Viz4Ad{`IY$gd+1t~uWqkl%+k*vv!H zfjaV6mGd5V<`h5fTeoii?4x9QrYLGO9^sT(CIv(g=DLw1L@|uCEGvpC0bov9eSQ63&bi?9(@t)xZ#?(H zb2e_+e$%zLHny}59@Kx~ufKJ4baZrdoOb$IIikFx6gW_3VMGnx8Ze;$v?&Me z+EJUy<_v=piIi6q$+8N7IHimOAy|=|U4ol8ZrQMYjizZBV?~oQ$>gf#E57>j3thJW zAdyJ?^6PJzoYB_aMzCb7x>zi}Y16un_6~$FqxR`#&N=7yy^wiR%Eh~$7KK3PxjMD* z8d|X9{^*R&LtGvuP9eep*h2Wsy~fc`5(aDHuyXg!z9eKmWj4_8_k=qo^Fl54Ad?_P zo%V>R%)PM%cghN?%29z2SSK3 ztEsU$mF`S+rqjtxRrl(MCINtMbLV~d@h1(9&Akiw)$iV+s1aFKs;X=La{l>|Xng$miBCQK)Sf*J z2q7X9MUn}TFvb`o`zj&Im>sJbVRv0ym@oDe#u!H<5yLS0*Yxe(yLVN$Zb!~K>ZkcX zcO=?nS<(%I0~n?`bJ`Ju1`SW8I^yw?>u$IXko3|kFSoX}s){BN$)aY@Zax3;kAE=W zH{5XT?%Lh)cwE)AOg2+mQgX}9HywY{2^-fgwT#^5mtTJ1K?mM;$L*_Dua{-HsiCE{ zxwTt$IkUJH(Nc+2nsrV+V%o1OmNeBjON3aKHDvIR3FF2Bqne`G*WRSlDaHZ7jzn!w zeGY(JbQUyvxx8%>D zFjLw65rUy2`@4f0W+9(i&7Wf_X9m`2XXWov4>@2;&YiWQ9?I|c*IB$JXN={eoV znFwRUFsdp_Dl02Z(<&(`FRv)iWzr?(Wy41gD=9DS)4$*0GpD`x$-Ks}M3RSmmp8MTa@AxQ)igpj0a%0(Ana`@p>+S}Uiz2}}?yK6DRimJ#|`sSN2 z>+5$^mR6j7;ps*35`yuHRV$XSTmb-ffUEWEH>_X3!KUhOcifvuby%huFDjB`OaLug zvGn3gF6O53>8D>ZV6VLV`hNRO{PL@>IueOkJkBTsU=WCd=Q4(W1X5tHLQ*v3HP4fx zZZ4m%JbNU7eFQt!mZz8lj2}Pt^wZBUEhC#vVS*6{T{kMa_2yjq>YE?7Zr%0TE3YnH zwumt%Nit=Onba^XS(3JF*{W%pp39Y%lrU=U+`c;!i|=RZUE<}opI)vag(mS?)o2pTo{i> z3`#w}LKq1N%@3*`v75z?=Ky}Rm0%CMMHU9@-23AA={QH2sH)c1+WO;nUzSx={P^R~ zha7T9j~@Mg`tFO5=Y2(F8A~{wO3(l4=f#Vc_UchBN!t2N8{sRDc*th5ufF_-{R>MP zqwJe6zWCQ;Ph_$gjEE9Zxn-r&X#mKi^;E{Z;JgbupL%lZmTg3mD5EAdd-v|6X+g-JFMvgP+QC)M$AqT~a<1aox zeD|)}_V$D%%fNY5jtm_#6k)RH=bwp$hKw9P<Iq+b_2t|xpH!4p3?DYMrlxl?lTu}ji9BfFps{1erZdUy+jcR=d`9wSzq6q1 zv5CiD-g3M@$NhwRT`+Wu5GF1NW^gd(Wq=v|?W2J5fRA9#1x}6xNea^A@9PeOKmqac z&`c>@Y1d#Z?@d@t`XvbNOs_!h$}}IVjekS#!R0gF@!J>#aa$2OF!FnR}n z7C`U=e^S8Gu~+wOIB zVrlz$@>$4TW$hXv{SVLo$!JFIJP_obi*NtWkFYf;P}AP%aIXF7%3}(`Nbq0+cQ+Jr z)IIWy!;r}+R8^>Pg?cYftb}An9!Uj${eh~%9fHDJ!wQ*aF8&s4b>4>htw0+@nGoup zz5n#fL*lP4y;}t;b|;-6&miAwwaf0Z*#9Y(dVvS|ThutX`;RC92E-UME%TC#|9akE z{#sU1T2WqV7&%RqIj{o{KJcjl&n;d2>#prP`VSmv>1hsJQb;Dn48u|)aw?gwsxF&8 zV@fWUJL8Nqs;aB9sbpD2WmS*vrcMnV#*7&~c+i05D^~UB)=g2hlG2h9V@7FeG?D0x zDAJg*qpY+MkH=;nF@tl~tEShfr=2=v_+UyA6`YG~T?%+vqn0Muj{ zgQ6+L#YG=|_)&4J=;22mN@vo$cGcc=<82I}w5-&QFf6Rc@et!X#-{j7d=Z{f;RPHq zPw*S}Cz*!;T=wSn8XRXp2mmyH;VSr;X zDJv<~bGdkNeDL7Gs-|k1rpO8g)MH}z^&7XCrez0Vwn3_&5fC7bu%s#~#=s~8&h3L@ zw&V|s3*@Rzguvc;f^bj|b8zi3<{72_Av(8L!&Yq}z!bpS;E~~(oId*W^ZLaIIL^t$ zks|^85GY8nR~(IP#2^(0s-DJ>f`bl~aPPDZ%kRN~iU)SAqAA_zE8N>7-5 z+~A=jEyLKjacd^0$K%C-fKrQdIPFiT9ewnX-FsAXKz};(tPVYQ^Ub$N2vJH)ii;k9 z{INcL`o>~v^Pc9S((-g$>fpmiwzVgodHTNyp?^Q|XT zD=W*-JmaihJ-YYn-@m%LdwXm1q{$PXdgiI!yZ3zY)n`i6=C-Eh0}edk(o5%jIQN6^zWed$Sw|gu=wah0O|%*B@Av%e{J);JY}v9G{`*2> zOY@k~BP%N_8MnqvnkdPNZWzqePdxeL(yAVP`}8{Nj6X-?s-b6ztlGipQ^|ButoXqF z4#*|-Kc9B$s4=6vRaM9mVVogmoqg_U#~y!NI@NLiefNJl?+Zzisbzua$`3M>C*|`` z9eL=&UpeUdL9VI@N^bXSp^HGmiw9k}Q3MMvT$C^T@@$yBQ@fYv|APMmM>oN>m+WtU z#Ha!IL#en}951xZxiId9yro(c9vuiY+#~(}@Pr%ORR&|gByO?-@12vUV9r1y-wl=j$uB{CFMjp^_I47AGcd2(yh$s7 zz5oCe&3T^&zY2j8Z}JzcMWA2Mj6r^N9Q>g~?)Q8r7ziC+$Q=bCH<-9u=z8(pnp{7d zgWWhlFd~aUe_qezb!Kn@$NK{bwF`Y2?x+y@bR?$8OQ9!tg4cDT0dPTpdotNR=PXbd zXili5p{9ka2s#n-S3&bh-3#O8RSIB_fy;SztNd;G!d+G_E(8uh5H?LS7K_fFebnUr z_t*6_#uBqENy8YSs`9F;s+zH5#&6oN1Yv|#N!22jZV-gDsKNkE1BYCH!?n!fn4pr1Vl|>zG?L9`%S*f6a?8!{ zeK2=VQ^SxEBZrR~F?`JEWTG{l>MSlT=2*gX>7=7(A7f+Sc;C3)a79sO9y#mk ztFF2H%FD}C4LrqQ^Dzg6K+olR_3U};ZMW6b^u`#QrWuRJfMZ3ImMmIw!DdhVI$DD;kZ+GASyGYSD;AsU%4lV_B2!n4btC8_Qw@oB_2XngB4{)O3NG z=xMhNJ@^0qKh8!Qr(KA14&MDpLG5SD2kx3MdA_zFCI}vG^z6*gYtg^O-Est(LcyMO?HB8=E^yyb=$owA6~|r=b3447+o!J1a9-I3VuW2U zLdaGJ00727h))X$MIuq`G9h#AWcwl$1dvXr^_OjQc;wC{rk7Hwj!bym6SxH zS|**v2&-BoiZMdYUL-qknj}eyjt+!yF01Q$%Fy*_G!iW>M_6iUYff~w%ZL#BLNH*6 zaLxf36j)_-RcxRYo|bVUjElO){|$bmkUU%_sI7dTi#^1g0YVHR%m6lQ*$SIC_pYgV z3a3W=wzJ zf&1c-I3f7Y=bpK7>&|(fe{ESNMxaHsyZ?Uo(4j*q&31OAV?{-S`VEpL1tH8RJ%0Ad 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

Ju$GJ=*F#?c{A{}f$5_8cf9$H)2lEa%w z!%Cd~(iEZU8~sSgl@I)sGlkA1r^p~BoDbyYUlNrql|C~PLQ|yT_zh9P_O@Duxt2gN zk-1_uNnR&DQ(8JMOw5l`t~zT>6Avzkc0#EyfjU>*1h3#OR%hH_HR312oy2Fvjevo# zXI*|EVA!W{vXV&-GgeUmSziYN((nFErXG(EDzSND zx*odMZPj{XF#mbV1O`3P(Y|~`zeW_qZ`43ZgFpK>647@8x!p1Y8?MZ-D_K`}kpIEN z(0#;%M_*^@@%C{bue_$HCOlUQ;(JV4INL<>`-s^Nk)!hY$)GWziUd;ye}8~4pK0jb zLym%MR3zHIp&Kee=i#FJh_mQTU}k6Vfy_QnF!y4*OqC~&szi3>%Y^BNp2CCS%&=7< zR&pj!+EnIsk<#{D_<%OAtBUeTjhHY|gL~GQmxRh8I*g-RyJj#<+VTtL9YYxM-P;Rh z{I`GYSgo?)W5(s(-VdD0FnxOe0vJE}Q%wy5zg2!U+;2WI(W{?$WGjd0=M53=cccxA z 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⪙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

$I_jeHma~fPi^{(ae5@NjAP5N!S-J0MNIbc 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

{XTuTDT=IVR&>UG1VK<0#md8RTz)}; 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Ó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

n$baaR@eDit*4spQw;i9# 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

Wl&^fgQ{)m}VS$?AR)>*4c>zeQ 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 CiA`Mq literal 0 HcmV?d00001 diff --git a/screenshots/02-WDM.png b/screenshots/02-WDM.png new file mode 100755 index 0000000000000000000000000000000000000000..7e93a36dc0875281ae97d940f1863df840c018f4 GIT binary patch literal 46305 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 ZF9as@Hxh)NFiH?7j=FwR{5QX(e*@rF{I&o9 literal 0 HcmV?d00001 diff --git a/screenshots/03-Desktop_VM.png b/screenshots/03-Desktop_VM.png new file mode 100755 index 0000000000000000000000000000000000000000..3a7d9bda348cf51da550000beafe5fe2f7634df7 GIT binary patch literal 131103 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 literal 0 HcmV?d00001 diff --git a/screenshots/04-Desktop_Swift14.png b/screenshots/04-Desktop_Swift14.png new file mode 100755 index 0000000000000000000000000000000000000000..11849bbdd38cf1bed88654cb3863ee282dc2bfb4 GIT binary patch literal 159922 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

aK~mJ%dW>1S{vM7iZQqH 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

R{QrILh;{s1 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 literal 0 HcmV?d00001 diff --git a/vars.sh b/vars.sh new file mode 100644 index 0000000..474670f --- /dev/null +++ b/vars.sh @@ -0,0 +1,4 @@ +VERSION="26.9.26" +BUILD="20260926" +CODENAME="firstbark" +CODENAME_PRETTY="First Bark"

88YeCh#9ouNVFL}3aPUjU6SRei-4_p!Bbj_%u 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�IzYv&`Woqe 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 Zu??Fx9iO#Z|JPCU>SuLS3r<_z`VZ?`Z9)J5 literal 0 HcmV?d00001 diff --git a/screenshots/05-Desktop_HP8000.png b/screenshots/05-Desktop_HP8000.png new file mode 100755 index 0000000000000000000000000000000000000000..b88e22ff4d8fd3bfe9876afed78ab69d5c0a58fc GIT binary patch literal 147399 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 literal 0 HcmV?d00001 diff --git a/screenshots/06-Doom.png b/screenshots/06-Doom.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f65315e098821571a1095e62c262d37d2b6d06 GIT binary patch literal 144921 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