Beyond Linux® From Scratch

Version 8.0

The BLFS Development Team

Copyright © 2001-2017, 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.

2017-02-25

Revision History
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.0 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 (http://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 at irc.linuxfromscratch.org. 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)

My introduction to the [B]LFS project was actually by accident. I was trying to build a GNOME environment using some how-tos and other information I found on the web. A couple of times I ran into some build issues and Googling pulled up some old BLFS mailing list messages. Out for curiosity, I visited the Linux From Scratch web site and shortly thereafter was hooked. I've not used any other Linux distribution for personal use since.

I can't promise anyone will feel the sense of satisfaction I felt after building my first few systems using [B]LFS instructions, but I sincerely hope that your BLFS experience is as rewarding for you as it has been for me.

The BLFS project has grown significantly the last couple of years. There are more package instructions and related dependencies than ever before. The project requires your input for continued success. If you discover that you enjoy building BLFS, please consider helping out in any way you can. BLFS requires hundreds of hours of maintenance to keep it even semi-current. If you feel confident enough in your editing skills, please consider joining the BLFS team. Simply contributing to the mailing list discussions with sound advice and/or providing patches to the book's XML will probably result in you receiving an invitation to join the team.

Randy McMurchy
randy <at> linuxfromscratch.org
BLFS Editor (December 2006–January 2011)

Foreword

This version of the book is intended to be used when building on top of a system built using the LFS book. Every effort has been made to ensure accuracy and reliability of the instructions. Many people find that using the instructions in this book after building the current stable or development version of LFS provides a stable and very modern Linux system.

Enjoy!

Randy McMurchy
August 24th, 2008

Last updated on 2016-04-17 13:16:17 -0700

Who Would Want to Read this Book

This book is mainly aimed at those who have built a system based on the LFS book. It will also be useful for those who are using other distributions, but for one reason or another want to manually build software and are in need of some assistance. Note that the material contained in this book, in particular the dependency listings, is based upon the assumption that you are using a base LFS system with every package listed in the LFS book already installed and configured. BLFS can be used to create a range of diverse systems and so the target audience is probably nearly as wide as that of the LFS book. If you found LFS useful, you should also like this!

Last updated on 2015-09-20 15:38:20 -0700

Organization

This book is divided into the following parts.

Part I - Introduction

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

Part II - Post LFS Configuration and Extra Software

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

Part III - General Libraries and Utilities

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

Part IV - Basic Networking

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

Part V - Servers

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

Part VI - X + Window Managers

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

Part VII - KDE

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

Part VIII - GNOME

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

Part IX - Xfce

Xfce is a lightweight alternative to GNOME and KDE.

Part X - X Software

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

Part XI - Multimedia

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

Part XII - Printing, Scanning and Typesetting (PST)

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

Appendices

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

Last updated on 2015-09-20 15:38:20 -0700

Part I. Introduction

Chapter 1. Welcome to BLFS

The Beyond Linux From Scratch book is designed to carry on from where the LFS book leaves off. But unlike the LFS book, it isn't designed to be followed straight through. Reading the Which sections of the book? part of this chapter should help guide you through the book.

Please read most of this part of the book carefully as it explains quite a few of the conventions used throughout the book.

Which Sections of the Book Do I Want?

Unlike the Linux From Scratch book, BLFS isn't designed to be followed in a linear manner. This is because LFS provides instructions on how to create a base system which is capable of turning into anything from a web server to a multimedia desktop system. BLFS attempts to guide you in the process of going from the base system to your intended destination. Choice is very much involved.

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

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

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

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

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

The next parts of the book principally deal with desktop systems. This portion of the book starts with a part talking about X plus Window and Display Managers. This part also deals with some generic X-based libraries (Chapter 25, X Libraries). After this, KDE and GNOME are given their own parts which are followed by one on X Software.

The book then moves on to deal with Multimedia packages. Note that many people may want to use the ALSA-1.1.3 instructions from this chapter quite near the start of their BLFS journey; they are placed here simply because it is the most logical place for them.

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

We hope you enjoy using BLFS and find it useful.

Last updated on 2012-12-19 11:57:20 -0800

Conventions Used in this Book

Typographical Conventions

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

./configure --prefix=/usr

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

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

This form of text (fixed width text) is showing screen output, probably a result from issuing a command. It is also used to show filenames such as /boot/grub/grub.conf

Emphasis

This form of text is used for several purposes in the book but mainly to emphasize important points or to give examples as to what to type.

http://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.46

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

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

This type of section is used mainly when creating configuration files. The first command (in bold) tells the system to create the file $LFS/etc/group from whatever is typed on the following lines until the sequence EOF is encountered. Therefore, this whole section is generally typed as seen.

<REPLACED TEXT>

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

root

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

Conventions Used for Package Dependencies

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

Required Dependencies

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

Recommended Dependencies

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

Optional Dependencies

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

Conventions Used for Kernel Configuration Options

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

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

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

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

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

SBU values in BLFS

As in LFS, each package in BLFS has a build time listed in Standard Build Units (SBUs). These times are relative to the time it took to build binutils in LFS and are intended to provide some insight into how long it will take to build a package. Most times listed are for a single processor or core to build the package. In some cases, large, long running builds tested on multi-core systems have SBU times listed with comments such as '(parallelism=4)'. These values indicate testing was done using multiple cores. Note that while this speeds up the build on systems with the appropriate hardware, the speedup is not linear and to some extent depends on the individual package and specific hardware used.

Some packages do not support parallel builds and using -j1 for the make command is required. Packages that are known to have such limits are marked as such in the text.

Last updated on 2015-11-13 06:24:57 -0800

Book Version

This is BLFS-BOOK version 8.0 dated February 25th 2017. This is the release branch of the BLFS book, currently targeting the LFS 8.0 book. For development versions, if this version is older than a month, it's likely that your mirror hasn't been synchronized recently and a newer version is probably available for download or viewing. Check one of the mirror sites at http://www.linuxfromscratch.org/mirrors.html for an updated version.

Last updated on 2016-04-17 13:16:17 -0700

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 http://www.linuxfromscratch.org/mirrors.html website for the list of current mirrors.

Last updated on 2007-04-04 12:42:53 -0700

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 http://www.linuxfromscratch.org/blfs/download.html#sources for a list. These sites have all the sources of the exact versions of the packages used in BLFS. If you can't find the BLFS package you need at the listed addresses, get it from these sites.

We would like to ask a favor, however. Although this is a public resource for you to use, please do not abuse it. We have already had one unthinking individual download over 3 GB of data, including multiple copies of the same files that are placed at different locations (via symlinks) to make finding the right package easier. This person clearly did not know what files he needed and downloaded everything. The best place to download files is the site or sites set up by the source code developer. Please try there first.

Last updated on 2017-02-11 20:17:33 -0800

Change Log

Current release: 8.0 – February 25th 2017

Changelog Entries:

  • February 25th, 2017

    • [bdubbs] - Release of BLFS-8.0.

  • February 22nd, 2017

    • [dj] - Update to flash player 24.0.0.221.

    • [bdubbs] - Update to tripwire-2.4.3.3. Fixes #8904.

    • [bdubbs] - Update to gparted-0.28.1. Fixes #8911.

  • February 21st, 2017

    • [bdubbs] - Update to gparted-0.28.0. Fixes #8886.

    • [bdubbs] - Update to QScintilla_gpl-2.10. Fixes #8903.

  • February 19th, 2017

    • [bdubbs] - Update to cups-filters-1.13.4. Fixes #8897.

    • [bdubbs] - Update to php-7.1.2. Fixes #8898.

    • [bdubbs] - Archive xinetd.

    • [renodr] - Update to NetworkManager-1.6.2. Fixes #8888.

    • [renodr] - Update to WebkitGTK+-2.14.5. Fixes #8880.

    • [renodr] - Update to PCRE2-10.23. Fixes #8882.

  • February 18th, 2017

    • [renodr] - Update to v4l-utils-1.12.3. Fixes #8896.

    • [pierre] - Host compface on anduin.

    • [bdubbs] - Update to feh-2.18.2. Fixes #8893.

  • February 17th, 2017

    • [bdubbs] - Update to x265_2.3. Fixes #8890.

  • February 16th, 2017

    • [ken] - Update to libwww-perl-6.19. Fixes #8883.

    • [ken] - Update to gegl-0.3.12. Fixes #8877.

    • [renodr] - Update to xf86-video-intel-20170216. Fixes #5918 (leaving open for future releases).

  • February 15th, 2017

    • [renodr] - Archive Setuptools and force pip to be built with Python 2 and 3.

  • February 14th, 2017

    • [ken] - Update to QupZilla-2.1.1. Fixes #8879.

    • [bdubbs] - Update to plasma5-5.9.2. Fixes #8565.

    • [renodr] - Update to sqlite-3.17.0. Fixes #8878.

    • [pierre] - Update to ImageMagick-7.0.4-8. Keep #7859 open, since releases occur very often.

    • [pierre] - Update to ImageMagick-6.9.7-8. Keep #7859 open, since releases occur very often.

    • [pierre] - Update to x264-20170212-2245. Keep #7555 open, since there are daily releases.

    • [renodr] - Update to Guile-2.0.14. Fixes #8876.

    • [renodr] - Update to Thunar-1.6.11. Fixes #8874.

    • [renodr] - Update to GTK+-3.22.8. Partially fixes #8873.

    • [renodr] - Update to libgudev-231. Partially fixes #8873.

    • [renodr] - Update to gdk-pixbuf-2.36.5. Partially fixes #8873.

    • [renodr] - Update to glib-2.50.3. Partially fixes #8873.

    • [renodr] - Update to gnome-calculator-3.22.3. Partially fixes #8873.

  • February 13th, 2017

    • [bdubbs] - Update to LibRaw-0.18.1. Fixes #8872.

    • [bdubbs] - Update to gnutls-3.5.9. Fixes #8871.

    • [ken] - Update to biber-2.7 with its lowest-level perl dependencies checked as at February 7th. Fixes #8853.

    • [renodr] - Update to cups-filters-1.13.3. Fixes #8773.

  • February 12th, 2017

    • [bdubbs] - Update to btrfs-progs-4.9.1. Fixes #8590.

    • [bdubbs] - Update to kde-apps-16.12.2. Fixes #8650.

    • [renodr] - Update Hexchat for the repacked tarball. Fixes #8868.

    • [bdubbs] - Update to phonon-4.9.1. Fixes #8798.

    • [bdubbs] - Update to kf5-5.31. Fixes #8640.

    • [renodr] - Add patch to GPM for fixing build failures. Thanks to Hazel Russman for reporting.

    • [renodr] - Update to wget-1.19.1. Fixes #8869.

  • February 11th, 2017

    • [ken] - Correct missing perl module dependencies for Params::Validation::Compiler and Text::BibTeX (both are on the dependency chain for biber-2.6).

    • [bdubbs] - Update to ffmpeg-3.2.4. Fixes #8867.

  • February 10th, 2017

    • [renodr] - Update to PostgreSQL-9.6.2. Fixes #8864.

    • [renodr] - Update to WebkitGTK+-2.14.4. Fixes #8865.

  • February 9th, 2017

    • [renodr] - Update to gnome-video-effects-0.4.3. Fixes #8863.

  • February 8th, 2017

    • [renodr] - Update to bind9-9.11.0-P3. Fixes #8861.

    • [renodr] - Update to thunderbird-45.7.1. Fixes #8859.

    • [renodr] - Update to nss-3.29. Fixes #8860.

    • [bdubbs] - Update to libepoxy-1.4.0. Fixes #8855.

    • [bdubbs] - Update to xfce4-terminal-0.8.4. Fixes #8856.

    • [bdubbs] - Update to ffmpeg-3.2.3. Fixes #8857.

    • [bdubbs] - Update to List-AllUtils-0.14 (Perl Module). Fixes #8858.

  • February 7th, 2017

    • [ken] - Update to gutenprint-5.2.12. Fixes #8819.

    • [ken] - Update to QupZilla-2.1.0. Fixes #8850.

    • [pierre] - Update to apache-ant-1.10.1. Fixes #8854.

  • February 6th, 2017

    • [ken] - Use a versioned download of biber-2.6 from github. This partially addresses #8853.

  • February 5th, 2017

    • [renodr] - Add a security patch from upstream to ntfs-3g. Fixes #8851.

    • [bdubbs] - Update to shadow-4.4.

    • [dj] - Update to Chromium-56.0.2924.87. Fixes #8845.

    • [pierre] - Update to libreoffice-5.3.0.3. Fixes #8837.

    • [pierre] - Update to lvm2-2.02.168. Fixes #8589.

  • February 4th, 2017

    • [ken] - Fix cups so that it can start. Fixes #8849.

    • [dj] - Update to Samba-4.5.5. Fixes #8775.

    • [renodr] - Update to epiphany-3.22.6. Fixes #8848.

    • [renodr] - Update to wget-1.19. Fixes #8847.

    • [pierre] - Update to gimp-2.8.20. Fixes #8836.

    • [pierre] - Update to xkeyboard-config-2.20. Fixes #8835.

    • [pierre] - Update to babl-0.1.24. Fixes #8833.

    • [pierre] - Update to tripwire-2.4.3.2. Fixes #8832.

    • [dj] - Update to Thunderbird-45.7.0. Fixes #8806.

  • February 3rd, 2017

    • [ken] - Add test dependencies for libwww-perl >= 6.16 and upgrade it to 6.18. Fixes #8846.

    • [ken] - Update to asymptote-2.39. Fixes #8807.

    • [renodr] - Update to geoclue-2.4.5. Fixes #8817.

    • [bdubbs] - Update to libinput-1.6.1. Fixes #8844.

    • [bdubbs] - Update to git-2.11.1. Fixes #8843.

    • [bdubbs] - Update to ristretto-0.8.2. Fixes #8840.

    • [bdubbs] - Update to mesa-13.0.4. Fixes #8839.

    • [bdubbs] - Update to mercurial-4.1. Fixes #8838.

  • February 2nd, 2017

    • [ken] - Add a patch to ghostscript-9.20. Fixes #8841.

    • [dj] - Update to Chromium-56.0.2924.76. Fixes #8812.

  • Febuary 1st, 2017

    • [bdubbs] - Update to tigervnc-1.7.1. Fixes #8771.

    • [bdubbs] - Update to pulseaudio-10.0. Fixes #8772.

    • [bdubbs] - Update to php-7.1.1. Fixes #8779.

    • [bdubbs] - Update to gstreamer* and gst-plugins v1.10.3. Fixes #8831.

    • [bdubbs] - Update to libwww-perl-6.17. Fixes #8834.

  • January 31st, 2017

    • [bdubbs] - Update to gnumeric-1.12.33. Fixes #8830.

    • [bdubbs] - Update to goffice-0.10.33. Fixes #8829.

    • [bdubbs] - Update to lua-5.3.4. Fixes #8828.

    • [bdubbs] - Update to libwebp-0.6.0. Fixes #8827.

  • January 30th, 2017

    • [bdubbs] - Update to libdiscid-0.6.2. Fixes #8826.

    • [bdubbs] - Update to xauth-1.0.10. Fixes #8825.

    • [bdubbs] - Update to util-macros-1.19.1. Fixes #8824.

    • [bdubbs] - Update to exempi-2.4.2. Fixes #8823.

    • [bdubbs] - Update to v4l-utils-1.12.2. Fixes #8792.

    • [pierre] - Update to libdrm-2.4.75. Fixes #8818.

    • [pierre] - Update to swig-3.0.12. Fixes #8816.

    • [pierre] - Update to libreoffice-5.2.5.1. Fixes #8811.

    • [pierre] - Update to NetworkManagager-1.6.0 and network-manager-applet-1.4.4. Fixes #8803.

  • January 29th, 2017

    • [bdubbs] - Update to check-0.11.0. Fixes #8801.

    • [bdubbs] - Update to OpenSSL-1.0.2k. Fixes #8813.

    • [bdubbs] - Update to stunnel-5.40. Fixes #8822.

    • [bdubbs] - Update to bluefish-2.2.10. Fixes #8815.

    • [bdubbs] - Update to iptables-1.6.1. Fixes #8814.

    • [bdubbs] - Update to nghttp2-1.19.0. Fixes #8805.

    • [bdubbs] - Update to Text-CSV-1.91 (Perl Module). Fixes #8821.

    • [bdubbs] - Update to libevent-2.1.8. Fixes #8804.

    • [bdubbs] - Update to xapian-core-1.4.3. Fixes #8809.

  • January 28th, 2017

    • [bdubbs] - Update to exempi-2.4.1. Fixes #8789.

  • January 27th, 2017

    • [bdubbs] - Update to cups-2.2.2. Fixes #8765.

    • [ken] - Move oxygen fonts and noto fonts into the TTF and OTF fonts page. Fixes #8802.

    • [ken] - Update to firefox-51.0.1. Fixes #8810.

    • [bdubbs] - Update to libwww-perl-6.16. Fixes #8769.

    • [bdubbs] - Update to presentproto-1.1 (xorg protocol header). Fixes #8808.

    • [bdubbs] - Update to audacious and audacious-plugins-3.8.2. Fixes #8784.

    • [bdubbs] - Fix typo in nfs-server bootscript.

    • [bdubbs] - Update to gnupg-2.1.18. Fixes #8793.

    • [bdubbs] - Update to feh-2.18.1. Fixes #8791.

  • January 26th, 2017

    • [bdubbs] - Update to joe-4.4. Fixes #8788.

    • [bdubbs] - Update to opus-1.1.4. Fixes #8787.

    • [bdubbs] - Update to gdb-7.12.1. Fixes #8786.

    • [bdubbs] - Update to gmime-2.6.23. Fixes #8785.

  • January 25th, 2017

    • [bdubbs] - Update to qt-5.8.0. Fixes #8795.

    • [bdubbs] - Update to qtwebkit-5.8.0.

    • [bdubbs] - Add several font files to the Xorg legacy font section to avoid warnings during testing.

    • [bdubbs] - Update to lxpanel-0.9.3. Fixes #8783.

    • [bdubbs] - Update to lxtask-0.1.8. Fixes #8799.

    • [bdubbs] - Update to lxappearance-0.6.3. Fixes #8800.

    • [pierre] - Update to openjdk-1.8.0.121. Fixes #8781.

    • [ken] - Rework coverage of TTF and OTF fonts, add details about tuning fontconfig. Fixes #8796.

  • January 24th, 2017

    • [bdubbs] - Update to libinput-1.6.0. Fixes #8778.

    • [bdubbs] - Update to libXi-1.7.9. Fixes #8790.

    • [bdubbs] - Update to nfs-utils-2.1.1. Fixes #8754.

    • [bdubbs] - Update to harfbuzz-1.4.2. Fixes #8794.

    • [ken] - Update to firefox-51.0 which fixes several security vulnerabilities rated as critical. Fixes #8797.

    • [renodr] - Revert to screen-4.4.0 because of a security vulnerability. Downgrade is suggested.

    • [renodr] - Update to screen-4.5.0. Fixes #8767.

    • [renodr] - Update to hdparm-9.51. Fixes #8777.

    • [renodr] - Update to libgcrypt-1.7.6. Fixes #8768.

  • January 22nd, 2017

    • [renodr] - Update to libxkbcommon-0.7.1. Fixes #8774.

    • [renodr] - Update to xf86-input-evdev-2.10.5. Fixes #8764.

  • January 20th, 2017

    • [renodr] - Update to iso-codes-3.74. Fixes #8763.

    • [renodr] - Update to epiphany-3.22.5. Partially fixes #8757.

    • [renodr] - Update to MariaDB-10.1.21. All users urged to update immediately. Fixes #8770.

    • [renodr] - Update to gtk+-3.22.7. Partially fixes #8757.

    • [renodr] - Update to gdk-pixbuf-2.36.4. Partially fixes #8757.

    • [renodr] - Update to dconf-editor-3.22.3. Partially fixes #8757.

    • [renodr] - Update to libgtop-2.34.2. Partially fixes #8757.

    • [renodr] - Make pyatspi2 available for sysv.

    • [renodr] - Update to pyatspi2-2.20.3. Partially fixes #8757.

  • January 19th, 2017

    • [dj] - Build wget with OpenSSL by default.

    • [dj] - Update to make-ca.sh-20170119.

  • January 18th, 2017

    • [renodr] - Update to WebKitGTK+-2.14.3. Fixes #8766.

  • January 17th, 2017

    • [bdubbs] - Update to libinput-1.5.4. Fixes #8755.

    • [bdubbs] - Update to cmake-3.7.2. Fixes #8753.

    • [bdubbs] - Update to sudo-1.8.19p2. Fixes #8752.

    • [bdubbs] - Update to libtasn1-4.10. Fixes #8762.

    • [bdubbs] - Update to sysstat-11.5.4. Fixes #8761.

    • [bdubbs] - Update to poppler-0.51.0. Fixes #8760.

  • January 16th, 2017

    • [bdubbs] - Update to proftpd-1.3.5d. Fixes #8758 (again).

    • [dj] - Add -archdatadir flag to /usr installation of QT-5.

  • January 15th, 2017

    • [bdubbs] - Update to proftpd-1.3.5c. Fixes #8758.

    • [pierre] - Update to cups-filters-1.13.2. Fixes #8702.

    • [dj] - Fixed release issue with gpgme-1.8.0 that affects kwallet.

    • [dj] - Fixed location of ca-bundle.crt for qca.

  • January 14th, 2017

    • [bdubbs] - Update to lxqt-common-0.11.2. Fixes #8756.

    • [bdubbs] - Revert lmdb to version 0.9.19. Fixes #8750.

    • [dj] - Import system environemnt (/etc/profile) in gnome-session for Wayland session.

  • January 13th, 2017

    • [renodr] - Update to libvpx-1.6.1. Fixes #8751.

  • January 12th, 2017

    • [bdubbs] - Update to bind-9.11.0-P2. Fixes #8747.

    • [bdubbs] - Update to ed-1.14.1. Fixes #8748.

    • [bdubbs] - Update to xorg-server-1.19.1. Fixes #8746.

    • [renodr] - Update to AbiWord-3.0.2. Fixes #8459.

  • January 11th, 2017

    • [bdubbs] - Update to ImageMagick-6.9.7-3. Fixes #8739.

    • [bdubbs] - Update to lxqt-qtplugin-0.11.1. Fixes #8744.

    • [bdubbs] - Update to lxqt-common-0.11.1. Fixes #8743.

    • [bdubbs] - Update to LMDB_0.9.20. Fixes #8742.

    • [bdubbs] - Update to pcre-8.40. Fixes #8738.

    • [bdubbs] - Update to ruby-2.4.0. Fixes #8741.

    • [bdubbs] - Update to fdk-aac-0.1.5. Fixes #8745.

    • [bdubbs] - Update to Text-BibTeX-0.78. Fixes #8737.

  • January 10th, 2017

    • [bdubbs] - Update to xfce4-terminal-0.8.3. Fixes #8735.

    • [bdubbs] - Update to mdadm-4.0. Fixes #8734.

  • January 9th, 2017

    • [bdubbs] - Update to inkscape-0.92. Fixes #8656.

    • [bdubbs] - Update to ImageMagick-7.0.4-3. Fixes #8528.

    • [ken] - Commit the new page for ImageMagick-6.

    • [bdubbs] - Update to nss-3.28.1. Fixes #8731.

    • [bdubbs] - Update to gnutls-3.5.8. Fixes #8733.

  • January 8th, 2017

    • [ken] - Modify ImageMagick-6 so that only the libs can be installed, without overwriting pkgconfig files and manpages, and add ImageMagick-7 for general use. Move to 6.9.6-8 and 7.0.3-10. Use -6 for inkscape and emacs and make it recommended for inkscape, also change sed in xine-lib. Fixes #8528.

    • [renodr] - Update to balsa-2.5.3. Fixes #8634.

    • [renodr] - Update to libgsf-1.14.41. Fixes #8601.

    • [renodr] - Update to gnome-system-monitor-3.22.2. Fully fixes #8425.

    • [renodr] - Update to gucharmap-9.0.2. Partially fixes #8425.

    • [bdubbs] - Update to exempi-2.4.0. Fixes #8730.

    • [dj] - Update to chromium-55.0.2883.87. Fixes #8643.

  • January 7th, 2017

    • [bdubbs] - Update to sqlite-autoconf-3160200. Fixes #8716.

  • January 6th, 2017

    • [renodr] - Update to file-roller-3.22.2. Partially fixes #8425.

    • [renodr] - Update to gnome-calculator-3.22.2. Partially fixes #8425.

    • [bdubbs] - Update to alsa-lib alsa-tools alsa-utils 1.1.3. Fixes #8672.

    • [bdubbs] - Update to nghttp2-1.18.1. Fixes #8728.

    • [bdubbs] - Update to harfbuzz-1.4.1. Fixes #8726.

    • [bdubbs] - Update to xfsprogs-4.9.0. Fixes #8725.

    • [bdubbs] - Update to libpng-1.6.28. Fixes #8727.

    • [renodr] - Update to evince-3.22.1. Partially fixes #8425.

  • January 5th, 2017

    • [renodr] - Update to EOG-3.20.5. Partially fixes #8425.

    • [renodr] - Update to epiphany-3.22.4. Partially fixes #8425.

    • [bdubbs] - Update to gtk+-3.22.6. Fixes #8723.

    • [bdubbs] - Update to gdk-pixbuf-2.36.3. Fixes #8722.

    • [bdubbs] - Update to mercurial-4.0.2. Fixes #8721.

    • [bdubbs] - Update to mesa-13.0.3. Fixes #8724.

    • [bdubbs] - Update to libevdev-1.5.6. Fixes #8718.

    • [renodr] - Update to baobab-3.22.1. Partially fixes #8425.

  • January 4th, 2017

    • [bdubbs] - Update to postfix-3.1.4. Fixes #8712.

    • [bdubbs] - Update to flac-1.3.2. Fixes #8719.

    • [bdubbs] - Update to libass-0.13.6. Fixes #8720.

    • [bdubbs] - Update to iso-codes-3.73. Fixes #8717.

    • [bdubbs] - Update to sqlite-autoconf-3160100. Fixes #8716.

    • [bdubbs] - Update to stunnel-5.39. Fixes #8711.

  • January 3rd, 2017

    • [bdubbs] - Update to lxqt-0.11.1. Fixes #8713.

    • [renodr] - Update to gnome-terminal-3.22.1. Partially fixes #8425.

  • January 2nd, 2017

    • [ken] - Update to libpng-1.6.27. Fixes #8715.

    • [renodr] - Update to gvfs-1.30.3. Partially fixes #8426.

    • [renodr] - Update to nautilus-3.22.2. Partially fixes #8426.

    • [pierre] - Update to mupdf-1.10a. Fixes #8714.

    • [pierre] - Update to apache-ant-1.10.0. Fixes #8708.

    • [pierre] - Update to doxygen-1.8.13. Fixes #8699.

    • [pierre] - Update to swig-3.0.11. Fixes #8691.

    • [pierre] - Update to boost-1.63.0. Fixes #8689.

    • [pierre] - Update to exim-4.88. Fixes #8684.

    • [pierre] - Update to libreoffice-5.2.4.2. Fixes #8674.

  • January 1st, 2017

    • [bdubbs] - Update to lxpanel-0.9.2. Fixes #8709.

    • [bdubbs] - Update to libnl-3.2.29. Fixes #8707.

    • [bdubbs] - Update to jasper-2.0.10. Fixes #8705.

    • [bdubbs] - Update to freetype-2.7.1. Fixes #8704.

    • [bdubbs] - Update to xfce4-terminal-0.8.2. Fixes #8703.

    • [bdubbs] - Update to QScintilla_gpl-2.9.4. Fixes #8701.

  • December 30th, 2016

    • [bdubbs] - Update to qterminal-0.7.1 and qtermwidget-0.7.1. Fixes #8671.

    • [bdubbs] - Update to pavucontrol-qt-0.2.0. Fixes #8683.

    • [bdubbs] - Update to lximage-qt-0.5.1. Partially fixes #8683.

    • [bdubbs] - Update to pcmanfm-qt-0.11.2. Partially fixes #8683.

    • [bdubbs] - Update to libfm-qt-0.11.2. Fixes #8687.

    • [bdubbs] - Update to nghttp2-1.18.0. Fixes #8692.

    • [bdubbs] - Update to whois-5.2.14. Fixes #8700.

    • [bdubbs] - Update to Net::DNS-1.07. Fixes #8698.

    • [bdubbs] - Update to xapian-core-1.4.2. Fixes #8685.

    • [bdubbs] - Update to Python-3.6.0. Fixes #8680.

    • [bdubbs] - Update to opencv-3.2.0. Fixes #8679.

    • [renodr] - Update to Samba-4.5.3. Fixes #8481.

    • [renodr] - Update to NSS-3.28. Fixes #8677.

  • December 29th, 2016

    • [bdubbs] - Update to LibRaw-0.18.0. Fixes #8690.

    • [bdubbs] - Update to LMDB_0.9.19. Fixes #8695.

    • [bdubbs] - Update to x265-2.2. Fixes #8688.

    • [bdubbs] - Update to libass-0.13.5. Fixes #8696.

    • [bdubbs] - Update to elfutils-0.168. Fixes #8694.

    • [bdubbs] - Update to seamonkey-2.46. Fixes #8675.

  • December 28th, 2016

    • [bdubbs] - Update to zsh-5.3.1. Fixes #8668.

    • [bdubbs] - Update to ldns-1.7.0. Fixes #8666.

    • [bdubbs] - Update to nmap-7.40. Fixes #8665.

    • [bdubbs] - Update to thunderbird-45.6.0. Fixes #8673.

    • [bdubbs] - Update to openssh-7.4p1. Fixes #8660.

    • [bdubbs] - Update to apache-2.4.25. Fixes #8658.

    • [pierre] - Update to gcc-6.3.0, gcc-java-6.3.0 and gcc-ada-6.3.0. Fixes #8667.

    • [pierre] - Update to qemu-2.8.0. Fixes #8663. Rework the “Using” part to correspond to recent versions.

    • [pierre] - Update to lxterminal-0.3.0. Fixes #8659.

    • [pierre] - Update to sudo-1.8.19p1. Fixes #8657.

    • [pierre] - Update to llvm-3.9.1. Fixes #8651.

  • December 27th, 2016

    • [dj] - Remove unneeded '-DCMAKE_INSTALL_LIBDIR' commands from Freeglut.

    • [renodr] - Update to dconf-editor-3.22.1. Partially fixes #8426.

  • December 26th, 2016

    • [renodr] - Update to clutter-gst-3.0.22. Fixes #8613.

    • [renodr] - Update to cheese-3.22.1. Partially fixes #8425.

    • [renodr] - Fix the dependencies for jasper. Thanks goes to spiky in IRC.

  • December 24th, 2016

    • [renodr] - Update to gnome-desktop-3.22.2. Partially fixes #8426.

    • [renodr] - Update to vte-0.46.1. Partially fixes #8426.

    • [renodr] - Update to gmime-2.6.22. Fixes #8638.

  • December 23rd, 2016

    • [renodr] - Update to gnupg-2.1.17. Fixes #8662.

    • [renodr] - Update to libgpg-error-1.26. Fixes #8669.

    • [renodr] - Update to libwebp-0.5.2. Fixes #8664.

    • [renodr] - Update to cURL-7.52.1. Fixes #8676.

  • December 22nd, 2016

    • [pierre] - Fix building of gst-plugins-bad when opencv is present.

    • [renodr] - Update to gtk+-3.22.5. Fixes #8631.

    • [renodr] - Update to curl-7.52.0. Fixes #8670.

    • [renodr] - Update to cups-filters-1.13.1. Fixes #8347.

  • December 21st, 2016

    • [renodr] - Update to gdk-pixbuf-2.36.2. Fixes #8661.

  • December 20th, 2016

    • [ken] - Texlive - move ldconfig to correct place.

  • December 19th, 2016

    • [bdubbs] - Update to NetworkManager-1.4.4. Fixes #8652.

    • [bdubbs] - Update to ModemManager-1.6.4. Fixes #8537.

    • [bdubbs] - Update to mariadb-10.1.20. Fixes #8647.

    • [bdubbs] - Add instructions to graphviz and cmake that avoid installing files in /usr/lib64.

    • [bdubbs] - Update to poppler-0.50.0. Fixes #8646.

    • [bdubbs] - Update to libqmi-1.16.2. Fixes #8514.

    • [pierre] - Update to python2-2.7.13. Fixes #8654.

  • December 18th, 2016

    • [pierre] - Update to sshfs-2.8 (replaces sshfs-fuse). Fixes #8653.

    • [pierre] - Update to libXpm-3.5.12. Fixes #8649.

    • [pierre] - Update to unbound-1.6.0. Fixes #8648.

    • [pierre] - Update to libgcrypt-1.7.5. Fixes #8645.

  • December 17th, 2016

    • [dj] - Merge changes from nosym branch. Adjust gcc installation for new library directories. Remove all sed commands for ltmain.sh. Explicitly define libdir for freeglut, libdbusmenuqt, libical, oxygen-fonts, and qca.

  • December 15th, 2016

    • [bdubbs] - Update to qt5 and QtWebkit-5.7.1. Fixes #8644.

    • [renodr] - Update to gdk-pixbuf-2.36.1. Fixes #8642.

  • December 14th, 2016

    • [bdubbs] - Update to audacious{,-plugins}-3.8.1. Fixes #8617.

    • [bdubbs] - Promote ModemManager to recommended in network-manager-applet. Fixes #8569.

    • [bdubbs] - Update to lxsession-0.5.3. Fixes #8637.

    • [bdubbs] - Update to pcmanfm-1.2.5. Fixes #8633.

    • [bdubbs] - Update to libfm and libfn-extra-1.25. Fixes #8632.

    • [bdubbs] - Add lxqt-build-tools-0.3.0 needed for libsysstat-0.3.3.

    • [bdubbs] - Update to libsysstat-0.3.3. Fixes #8636.

    • [pierre] - Update to firefox-50.1.0. Fixes #8641.

    • [pierre] - Update to ffmpeg-3.2.2. Fixes #8614.

  • December 12th, 2016

    • [bdubbs] - Update to hexchat-2.12.4. Fixes #8635.

    • [bdubbs] - Update to zsh-5.3. Fixes #8639.

    • [bdubbs] - Update to jasper-2.0.6. Fixes #8630.

    • [bdubbs] - Update to gsl-2.3. Fixes #8627.

    • [bdubbs] - Update to gnutls-3.5.7. Fixes #8625.

    • [ken] - Reduce the old Xorg fonts to just Type1 and ttf, with (only) the adobe 100dpi bitmap fonts plus old libXfont and bdftopcf moved to new 'x7legacy' page. Fixes #8621.

    • [renodr] - Update to xf86-input-wacom-0.34.0. Fixes #8612.

    • [renodr] - Update to dbus-1.10.14. Fixes #8580.

    • [renodr] - Update to cairo-1.14.8. Fixes #8620.

    • [renodr] - Update to libgcrypt-1.7.4. Fixes #8629.

  • December 11th, 2016

    • [bdubbs] - Update to libevdev-1.5.5. Fixes #8593.

    • [bdubbs] - Update to icu4c-58.2. Fixes #8623.

    • [bdubbs] - Update to iso-codes-3.72. Fixes #8622.

    • [bdubbs] - Update to libinput-1.5.3. Fixes #8616.

    • [bdubbs] - Update to sysstat-11.5.3. Fixes #8615.

    • [bdubbs] - Update to Business-ISSN-1.002 (Perl module). Fixes #8611.

    • [bdubbs] - Update to Business-ISMN-1.131 (perl module). Fixes #8610.

    • [bdubbs] - Update to shared-mime-info-1.8. Fixes #8609.

    • [bdubbs] - Add Linux-PAM configureation to Plasma. Fixes #8597.

  • December 10th, 2016

    • [dj] - Fix PKI directory creation in make-ca.sh-20161210 and add message about --force switch when updating with same version of certdata.txt.

  • December 9th, 2016

    • [renodr] - Update to harfbuzz-1.3.4. Fixes #8608.

  • December 8th, 2016

    • [dj] - Update to chromium-55.0.2883.75. Fixes #8618.

  • December 7th, 2016

    • [ken] - Remove mpost from texlive shell_escape_commands. Fixes #8619.

  • December 5th, 2016

    • [ken] - Update to mutt-1.7.2. Fixes #8607.

    • [bdubbs] - Update to php-7.1.0. Fixes #8596.

    • [bdubbs] - Update to nss-3.27.2. Fixes #8599.

    • [bdubbs] - Update to libunistring-0.9.7. Fixes #8598.

    • [renodr] - Update to vala-0.34.4. Fixes #8605.

    • [renodr] - Update to MIT Kerberos V5-1.15. Fixes #8600.

    • [renodr] - Update to glib-2.50.2. Partially fixes #8426.

  • December 4th, 2016

    • [bdubbs] - Update to mercurial-4.0.1. Fixes #8595.

    • [bdubbs] - Update to rpcbind-0.2.4. Fixes #8592.

    • [bdubbs] - Update to cmake-3.7.1. Fixes #8591.

    • [bdubbs] - Update to babl-0.1.22. Fixes #8586.

  • December 3rd, 2016

    • [pierre] - Update to gstreamer-1.10.2, gst-libav-1.10.2, gst-plugins-bad-1.10.2, gst-plugins-base-1.10.2, gst-plugins-good-1.10.2, gst-plugins-ugly-1.10.2, and gstreamer-vaapi-1.10.2. Fixes #8588.

    • [pierre] - Update to git-2.11.0. Fixes #8587.

    • [pierre] - Update to libdrm-2.4.74. Fixes #8585.

    • [pierre] - Update to mesa-13.0.2. Fixes #8583.

    • [pierre] - Update to sqlite-3.15.2. Fixes #8582.

    • [pierre] - Update to subversion-1.9.5. Fixes #8581.

  • December 2nd, 2016

    • [ken] - Update to firefox-50.0.2. Fixes #8584.

  • November 28th, 2016

    • [pierre] - Update to thunderbird-45.5.0. Fixes #8553.

    • [bdubbs] - Update to gtksourceview-3.22.2. Fixes #8578.

    • [bdubbs] - Update to ncftp-3.2.6. Fixes #8577.

    • [bdubbs] - Update to jasper-2.0.0. Fixes #8576.

  • November 27th, 2016

    • [bdubbs] - Update to nghttp2-1.17.0. Fixes #8575.

    • [bdubbs] - Update to links-2.14. Fixes #8574.

    • [bdubbs] - Update to tunnel-5.38. Fixes #8573.

    • [bdubbs] - Update to ffmpeg-3.2.1. Fixes #8572.

    • [bdubbs] - Update to udisks-2.1.8. Fixes #8571.

    • [bdubbs] - Update to btrfs-progs-v4.8.4. Fixes #8570.

    • [bdubbs] - Update to libdrm-2.4.73. Fixes #8532.

    • [bdubbs] - Update to LVM2.2.02.167. Fixes #7940.

    • [pierre] - Update to mupdf-1.10, and add a patch for generating shared libraries (courtesy of Armin K). Fixes #8562.

    • [pierre] - Update to lxpanel-0.9.1. Fixes #8561.

    • [pierre] - Update to lxde-common-0.99.2. Fixes #8560.

    • [dj] - Update to dbus-1.10.12. Fixes #8424.

  • November 26th, 2016

    • [dj] - Curl uses OpenSSL by default, use --with-ca-path instead of --with-ca-bundle, and remove mk-ca-bundle.pl.

    • [dj] - Use versioned make-ca.sh script and update to make-ca.sh-20161126.

  • November 25th, 2016

    • [bdubbs] - Update to libinput-1.5.2. Fixes #8568.

    • [bdubbs] - Update to tcsh-6.20.00. Fixes #8567.

    • [bdubbs] - Update to gtksourceview-3.22.1. Fixes #8512.

    • [bdubbs] - Update to gtk+-3.22.4. Fixes #8466.

    • [bdubbs] - Update to vala-0.34.3. Fixes #8464.

    • [bdubbs] - Update to gparted-0.27.0. Fixes #8453.

    • [bdubbs] - Update to webkitgtk-2.14.2. Fixes #8429.

  • November 24th, 2016

    • [bdubbs] - Update to nghttp2-1.16.1. Fixes #8566.

    • [dj] - Updated make-ca.sh to 20161124.

  • November 23rd, 2016

    • [bdubbs] - Update to libpaper_1.1.24+nmu5. Fixes #8535.

    • [bdubbs] - Update to ntp-4.2.8p9. Fixes #8559.

    • [bdubbs] - Update to ruby-2.3.3. Fixes #8558.

    • [bdubbs] - Update to gnupg-2.1.16. Fixes #8552.

    • [bdubbs] - Update to gpgme-1.8.0. Fixes #8542.

    • [bdubbs] - Update to npth-1.3. Fixes #8563.

    • [bdubbs] - Update to pinentry-1.0.0. Fixes #8564.

  • November 22nd, 2016

    • [pierre] - Update gstreamer, gstreamer-vaapi, gst-plugins-base, gst-plugins-good, gst-plugins-bad, gst-plugins-ugly, gst-libav to 1.10.1. Fixes #8496.

    • [renodr] - Update to postfix-3.1.3. Fixes #8387.

  • November 21st, 2016

    • [ken] - Disable static library in rarian.

    • [bdubbs] - Update to lxpanel-0.9.0. Fixes #8555.

    • [bdubbs] - Update to slang-2.3.1. Fixes #8551.

    • [bdubbs] - Update to ruby-2.3.2. Fixes #8544.

    • [bdubbs] - Update to mlt-6.4.1. Fixes #8545.

    • [bdubbs] - Update to jasper-1.900.29. Fixes #8543.

    • [bdubbs] - Update to tiff-4.0.7. Fixes #8554.

    • [bdubbs] - Update to cairomm-1.12.2. Fixes #8539.

  • November 20th, 2016

    • [ken] - Update to xorg Synaptics Driver-1.9.0. Fixes #8547.

    • [ken] - Update to xorg WMware Driver-13.2.1. Fixes #8546.

    • [ken] - Update to xorg ATI Driver-7.8.0. Fixes #8541.

  • November 19th, 2016

    • [bdubbs] - Update to perl module Log::Log4perl-1.48. Fixes #8538.

    • [bdubbs] - Update to xorg-server-1.19.0. Fixes #8534.

    • [dj] - Update to Chromium-54.0.2840.100. Fixes #8518.

  • November 18th, 2016

    • [bdubbs] - Update to gegl-0.3.10. Fixes #8509.

    • [bdubbs] - Update to babl-0.1.20. Fixes #8508.

    • [bdubbs] - Add SDL2-2.0.5. Fixes #8490.

    • [pierre] - Update to iso-codes-3.71. Fixes #8536.

    • [pierre] - Revert to ICU-58.1, with a patch to fix a regression preventing the Mozilla applications to run. Fixes #8527.

    • [pierre] - Update to PHP-7.0.13. Fixes #8519.

    • [pierre] - Update to mercurial-4.0. Fixes #8501.

    • [dj] - Update to ninja-1.7.2. Fixes #8515.

    • [dj] - Introduce complete PKI setup for CA Certificates page. Fixes #8507.

  • November 17th, 2016

    • [bdubbs] - Update to kf5-apps-16.08.3. Fixes #8284.

    • [bdubbs] - Update to kf5-5.28. Fixes #8287.

    • [bdubbs] - Update to plasma5-5.8.3. Fixes #8250.

  • November 16th, 2016

    • [bdubbs] - Update to mesa-13.0.1. Fixes #8531.

    • [bdubbs] - Update to poppler-0.49.0. Fixes #8530.

    • [bdubbs] - Update to libgpg-error-1.25. Fixes #8529.

    • [bdubbs] - Update to cmake-3.7.0. Fixes #8524.

  • November 15th, 2016

    • [ken] - Update to firefox-50.0. Fixes #8533.

    • [bdubbs] - Update to mlt-6.4.0. Fixes #8526.

    • [bdubbs] - Update to libusb-1.0.21. Fixes #8525.

    • [bdubbs] - Update to graphite2-1.3.9. Fixes #8523.

    • [bdubbs] - Update to libxkbcommon-0.7.0. Fixes #8522.

    • [bdubbs] - Update to stunnel-5.37. Fixes #8510.

    • [bdubbs] - Update to sysstat-11.5.2. Fixes #8505.

    • [bdubbs] - Update to gnutls-3.5.6. Fixes #8504.

    • [bdubbs] - Update to scons-2.5.1. Fixes #8502.

    • [bdubbs] - Update to feh-2.18. Fixes #8495.

    • [bdubbs] - Update to btrfs-progs-v4.8.3. Fixes #8521.

    • [bdubbs] - Update to menu-cache-1.0.2. Fixes #8513.

    • [bdubbs] - Update to xfce4-terminal-0.8.1. Fixes #8492.

    • [bdubbs] - Update to bluez-5.43. Fixes #8485.

    • [bdubbs] - Update to fltk-1.3.4. Fixes #8445.

  • November 14th, 2016

    • [renodr] - Revert to icu-57.1. This fixes various problems with Firefox, Seamonkey, Thunderbird, Libreoffice, etc.

    • [bdubbs] - Update to libva-1.7.3. Fixes #8517.

    • [bdubbs] - Update to libinput-1.5.1. Fixes #8520.

  • November 13th, 2016

    • [bdubbs] - Update to mesa-13.0.0. Fixes #8452.

    • [bdubbs] - Update to jasper-1.900.28. Fixes #8499.

    • [bdubbs] - Update to sqlite-3.15.1. Fixes #8506.

    • [bdubbs] - Update to vim-8.0.069. Fixes #8511.

    • [bdubbs] - Update to mariadb-10.1.19. Fixes #8513.

    • [ken] - Fix Net-tools build breakage with 4.8 kernel headers, originally reported by John Burrell.

    • [dj] - Add polkit configuration for Network Manager.

  • November 11th, 2016

    • [pierre] - Update to libreoffice-5.2.3. Add a patch to build with ICU-58.1. Recommend to build the Java backends, to allow using lobase with the HSQLDB dirver. Fixes #8503.

  • November 9th, 2016

    • [bdubbs] - Update to git-2.10.2. Fixes #8488.

    • [bdubbs] - Update to xfsprogs-4.8.0. Fixes #8487.

    • [bdubbs] - Update to bridge-utils-1.6. Fixes #8486.

  • November 8th, 2016

    • [bdubbs] - Update to btrfs-progs-v4.8.2. Fixes #8478.

  • November 6th, 2016

    • [pierre] - Update to bind-9.11.0-P1. Fixes #8498.

    • [pierre] - Update to curl-7.51.0. Fixes #8497.

    • [pierre] - Update to dovecot-2.2.26.0. Fixes #8483.

    • [pierre] - Update to neon-0.30.2. Fixes #8491.

  • November 4th, 2016

    • [renodr] - Added MIT Kerberos V5 to the optional dependencies for libsoup.

  • November 2nd, 2016

    • [dj] - Adjust LXDM PAM configuration to use system configuration files.

    • [dj] - Update to nghttp2-1.16.0. Fixes #8472.

    • [dj] - Update to Chromium-54.0.2840.90. Fixes #8494.

  • October 31st, 2016

    • [bdubbs] - Update to valgrind-3.12.0. Fixes #8480.

    • [bdubbs] - Update to taglib-1.11.1. Fixes #8482.

    • [bdubbs] - Update to harfbuzz-1.3.3. Fixes #8479.

    • [bdubbs] - Update to postgresql-9.6.1. Fixes #8484.

    • [bdubbs] - Update to whois-5.2.13. Fixes #8489.

    • [ken] - Firefox-49.0.2 (CVE-2016-528{7,8}). Fixes #8457.

    • [bdubbs] - Update llvm dependencies. Thansk to Samuel for the patch. Fixes #8465.

  • October 30th, 2016

    • [bdubbs] - Update to qupzilla-2.0.2. Fixes #8477.

    • [bdubbs] - Update to xfconf-4.12.1. Fixes #8476.

    • [bdubbs] - Update to xfce4-panel-4.12.1. Fixes #8475.

    • [bdubbs] - Update to libXi-1.7.8. Fixes #8473.

    • [bdubbs] - Update to libpcap-1.8.1. Fixes #8471.

    • [bdubbs] - Update to jasper-1.900.16. Fixes #8469.

    • [bdubbs] - Update to xapian-1.4.1. Fixes #8468.

    • [bdubbs] - Update to libarchive-3.2.2. Fixes #8467.

    • [bdubbs] - Update to ffmpeg-3.2. Fixes #8458.

  • October 29th, 2016

    • [dj] - Update to chromium-54.0.2840.71. Fixes #8433.

    • [dj] - Updated CA Certificates generation method using the mk-ca-bundle.pl script included with curl.

    • [dj] - Fix build error in UDisks1 with newer GLibc.

  • October 23rd, 2016

    • [bdubbs] - Update to libcdio-0.94. Fixes #8463.

    • [bdubbs] - Update to hexchat-2.12.3. Fixes #8462.

    • [bdubbs] - Update to libpng-1.6.26. Fixes #8461.

    • [bdubbs] - Update to nmap-7.31. Fixes #8454.

    • [bdubbs] - Update to nspr-4.13.1. Fixes #8454.

    • [bdubbs] - Update to ICU-58.1. Fixes #8451.

    • [bdubbs] - Update to gpgme-1.7.1. Fixes #8449.

    • [bdubbs] - Update to hdparm-9.50. Fixes #8450.

  • October 22nd,2016

    • [pierre] - Update to lximage-qt-0.5.0, obconf-qt-0.11.0, qterminal-0.7.0, qtermwidget-0.7.0, and add pavucontrol-qt-0.1.0. Fixes #8349.

    • [ken] - Texlive : when I changed the source patch to -2 I forgot to change the command where it is applied.

  • October 20th, 2016

    • [ken] - Firefox : remove Note about gtk3 scrollbars not working properly in BLFS-7.10. It is a theme issue, e.g. with at least one xfce theme. Details in the User Notes. Addresses #8330.

    • [ken] - Update to List::AllUtils-0.12 (perl module). Fixes #8446.

    • [ken] - Update to Text::BibTeX-0.77 (perl module). Fixes #8335.

    • [ken] - Update to biblatex-biber-2.6 with biblatex-3.5 and various changes to required perl modules. Fixes #8290.

    • [pierre] - Update to OpenJDK-18.0.112. Fixes #8448.

  • October 19th, 2016

    • [bdubbs] - Update to hdparm-9.49. Fixes #8444.

    • [bdubbs] - Update to xfce4-terminal-0.8.0. Fixes #8447.

  • October 18th, 2016

    • [pierre] - Add libfm-qt-0.11.1, lxqt-admin-0.11.0, lxqt-kidletime-5.25.0, and lxqt-l10n-0.11.0, as part of #8349.

    • [pierre] - Update to liblxqt-0.11.0, lxqt-about-0.11.0, lxqt-common-0.11.0, lxqt-config-0.11.0, lxqt-globalkeys-0.11.0, lxqt-notificationd-0.11.0, lxqt-panel-0.11.0, lxqt-policykit-0.11.0, lxqt-powermanagement-0.11.0, lxqt-qtplugin-0.11.0, lxqt-runner-0.11.0, lxqt-session-0.11.0, and pcmanfm-qt-0.11.1. Partially fixes #8349.

    • [pierre] - Update to libqtxdg-2.0.0. Fixes #8310.

    • [pierre] - Update to libsysstat-0.3.2. Fixes #8309.

  • October 17th, 2016

    • [bdubbs] - Update to fontforge-dist-20161004. Fixes #8410.

    • [bdubbs] - Update to cups-2.2.1. Fixes #8408.

    • [bdubbs] - Update to sqlite-3.15.0. Fixes #8441.

  • October 16th, 2016

    • [bdubbs] - Update to php-7.0.12. Fixes #8437.

    • [bdubbs] - Update to guile-2.0.13. Fixes #8436.

    • [bdubbs] - Update to jasper-1.900.5. Fixes #8432.

  • October 14th, 2016

    • [ken] - perl modules: remove Encode variants from the listed deps for MIME::Charset (dep for Unicode::LineBreak), they are optional and only allow M::C to process some non UTF-8 encodings previously used for Chinese and Japanese. Fixes #8381.

    • [bdubbs] - Update to libnotify-0.7.7. Fixes #8438.

    • [bdubbs] - Update to xscreensaver-5.36. Fixes #8430.

    • [bdubbs] - Update to ristretto-0.8.1. Fixes #8411.

    • [bdubbs] - Update to sudo-1.8.18p1. Fixes #8428.

    • [bdubbs] - Clarified the location of the discussion about removing unneeded noto fonts. Fixes #8419.

    • [bdubbs] - Update to btrfs-progs-v4.8.1. Fixes #8434.

  • October 11th, 2016

    • [ken] Add wget as a dependency for the testsuite of perl module Unicode::LineBreak.

    • [bdubbs] - Update to libsamplerate-0.1.9. Fixes #8423.

    • [bdubbs] - Update to gnutls-3.5.5. Fixes #8420.

    • [renodr] - Update to Libreoffice-5.2.2.2. Fixes #8378.

  • October 10th, 2016

    • [ken] Because sorting out the dependencies for biblatex-biber-2.6 is taking so long, change the download from /current/, which now gets 2.6, to /2.5/

    • [renodr] - Update to wpa_supplicant-2.6. Fixes #8391.

    • [renodr] - Update to vala-0.34.1. Fixes #8421.

    • [renodr] - Update to network-manager-applet-1.4.2. Partially fixes #8382.

    • [renodr] - Update to NetworkManager-1.4.2. Partially fixes #8382.

    • [renodr] - Update to dhcpcd-6.11.5. Fixes #8422.

    • [renodr] - Update to dhcp-4.3.5. Fixes #8404.

    • [renodr] - Update to thunderbird-45.4.0. Fixes #8379.

    • [renodr] - Update to firefox-49.0.1.This seems to fix the scrollbar issues as well, at least with GTK+-3.22.1. Fixes #8330.

  • October 9th, 2016

    • [bdubbs] - Update to poppler-0.48.0. Fixes #8417.

    • [bdubbs] - Update to dhcpcd-6.11.4. Fixes #8413.

    • [bdubbs] - Update to hexchat-2.12.2. Fixes #8418.

    • [bdubbs] - Update to xterm-327. Fixes #8414.

    • [bdubbs] - Update to btrfs-progs-v4.8. Fixes #8409.

  • October 9th, 2016

    • [pierre] - Add Xdg-user-dirs-0.15. Fixes #8415.

  • October 8th, 2016

    • [ken] - Update to mutt-1.7.1. Fixes #8416.

    • [renodr] - Update to mercurial-3.9.2. Fixes #8386.

    • [renodr] - Update to gdb-7.12. Fixes #8412.

  • October 7th, 2016

    • [renodr] - Update to gnome-themes-standard-3.22.2. Fixes #8392.

    • [renodr] - Update to gtk+-3.22.1. Fixes #8389.

    • [renodr] - Update to Chromium-53.0.2785.143. Fixes #8400.

    • [ken] - Second version of the 2016 texlive source upstream fixes patch. The change from the first version only affects anybody who wishes to use htxetex or htxelatex.

  • October 5th, 2016

    • [bdubbs] - Update to bind-9.11.0. Fixes #8403.

    • [bdubbs] - Update to libdrm-2.4.71. Fixes #8397.

    • [bdubbs] - Update to git-2.10.1. Fixes #8396.

    • [bdubbs] - Update to wireshark-2.2.1. Fixes #8405.

    • [bdubbs] - Update to nss-3.27.1. Fixes #8407.

    • [bdubbs] - Update to libass-0.13.4. Fixes #8406.

    • [bdubbs] - Update to pciutils-3.5.2. Fixes #8395.

  • October 4th, 2016

    • [ken] - Update xorg libraries to libX11-1.6.4, libXfixes-5.0.3, libXi-1.7.7, libXrandr-1.5.1, libXrender-0.9.10, libXtst-1.2.3, libXv-1.0.11, libXvMC-1.0.10 to fix today's announcement of vulnerabilitites. Fixes #8402.

  • October 3rd, 2016

    • [bdubbs] - Update to mc-4.8.18. Fixes #8390.

    • [renodr] - Update to ImageMagick-6.9.6-0. Fixes #8365.

    • [renodr] - Update to ffmpeg-3.1.4. Fixes #8384.

  • October 2nd, 2016

    • [bdubbs] - Update to mariadb-10.1.18. Fixes #8383.

    • [bdubbs] - Update to postgresql-9.6.0. Fixes #8377.

    • [bdubbs] - Update to nettle-3.3. Fixes #8385.

    • [bdubbs] - Update to nmap-7.30. Fixes #8376.

    • [bdubbs] - Update to boost-1.62.0. Fixes #8371.

    • [bdubbs] - Update to mpg123-1.23.8. Fixes #8380.

    • [bdubbs] - Update to openjpeg-2.1.2. Fixes #8372.

    • [bdubbs] - Update to xkeyboard-config-2.19. Fixes #8375.

    • [bdubbs] - Update to xf86-input-evdev-2.10.4. Fixes #8388.

  • September 29th, 2016

    • [ken] - Perl module Business::ISBN now requires Mojolicious. Fixes #8374.

    • [renodr] - Update to bind-9.10.4-P3. Includes bind-utils. Fixes #8362.

    • [dj] - Add File::BaseDir 0.07.

    • [bdubbs] - Update to unbound-1.5.10. Fixes #8369.

    • [dj] - Add Chromium-53.0.2785.116. Fixes #8364.

  • September 28th, 2016

    • [bdubbs] - Update to x265-2.1. Fixes #8370.

    • [bdubbs] - Update to harfbuzz-1.3.2. Fixes #8368.

    • [bdubbs] - Update to nss-3.27. Fixes #8366.

    • [bdubbs] - Update to nspr-4.13. Fixes #8367.

  • September 27th, 2016

    • [dj] - Add ninja-1.7.1.

    • [renodr] - Update to ghostscript-9.20. Fixes #8361.

    • [renodr] - Update to bluez-5.42. Fixes #8360.

    • [dj] - Add Parse-Yapp-1.05.

    • [dj] - Add Parse-Yapp as recommended dependency for Samba to avoid upgrade issue.

  • September 26th, 2016

    • [renodr] - Update to gucharmap-9.0.1 Finishes #8315.

    • [renodr] - Update to gnome-system-monitor-3.22.0. Partially fixes #8315.

    • [renodr] - Update to gnome-screenshot-3.22.0. Partially fixes #8315.

    • [renodr] - Update to at-spi2-core-2.22.0. Partially fixes #8355.

    • [renodr] - Update to at-spi2-atk-2.22.0. Partially fixes #8355.

    • [renodr] - Update to openssl-1.0.2j. Fixes #8359.

    • [renodr] - Update to gtksourceview-3.22.0. Fixes #8314.

    • [renodr] - Update to gnome-calculator-3.22.0. Partially fixes #8315.

    • [renodr] - Update to gedit-3.22.0. Partially fixes #8315.

    • [renodr] - Update to file-roller-3.22.0. Partially fixes #8315.

    • [dj] - Update to nghttp2-1.15.0. Fixes #8351.

    • [bdubbs] - Update to sysstat-11.5.1. Fixes #8358.

    • [bdubbs] - Update to xterm-326. Fixes #8357.

    • [bdubbs] - Revert libsamplerate to 0.1.8. Fixes #8354.

    • [bdubbs] - Updated mesa dependencies. Fixes #8341.

    • [renodr] - Update to yelp-3.22.0. Fixes #8316.

    • [renodr] - Update to evince-3.22.0. Partially fixes #8315.

    • [renodr] - Update to epiphany-3.22.0. Partially fixes #8315.

    • [renodr] - Update to baobab-3.22.0. Partially fixes #8315.

    • [renodr] - Update to gnome-terminal-3.22.0. Partially fixes #8315.

  • September 25th, 2016

    • [renodr] - Update to Cheese-3.22.0. Partially fixes #8315.

    • [ken] - Perl Modules - move XML::SAX to top level.

    • [ken] - Perl Modules - fix Capture::Tiny to correct the description and to again list the download URL now that it has been moved to a top-level module in the page structure. Similarly move XML-LibXML to top-level and add its dependency of libxml2.

    • [bdubbs] - Update to mpg123-1.23.7. Fixes #8353.

    • [bdubbs] - Update to libass-0.13.3. Fixes #8352.

    • [bdubbs] - Update to dash-0.5.9.1. Fixes #8350.

    • [ken] - Commented perl modules Unicode::Collate and Unicode::Normalize, the versions in core perl are good enough for biber.

    • [bdubbs] - Removed startx change in xinit for systemd builds. No ticket.

  • September 24th, 2016

    • [renodr] - Update to nautilus-3.22.0. Partially fixes #8316.

    • [renodr] - Update to gvfs-1.30.0. Partially fixes #8316.

    • [renodr] - Update to dconf-editor-3.22.0. Partially fixes #8316.

    • [renodr] - Added gnome-autoar. Fixes #8348.

  • September 23rd, 2016

    • [renodr] - Update to libpeas-1.20.0. Partially fixes #8316.

    • [renodr] - Update to clutter-gtk-1.8.2. Fixes #8313.

    • [bdubbs] - Update to audacious-3.8. Fixes #8340.

    • [bdubbs] - Update to stunnel-5.36. Fixes #8345.

    • [bdubbs] - Update to xf86-video-nouveau-1.0.13. Fixes #8346.

    • [bdubbs] - Update to xproto-7.0.31. Fixes #8342.

    • [bdubbs] - Update to openssl-1.0.2i. Fixes #8343.

    • [bdubbs] - Update to btrfs-progs-v4.7.3. Fixes #8339.

    • [bdubbs] - Update to gpgme-1.7.0. Fixes #8338.

    • [renodr] - Update to vte-0.46.0. Partially fixes #8316.

    • [ken] - Perl Modules - remove Math::BigInt dependency from Data::Uniqid, it is a core module.

    • [ken] - Perl Modules - where a module is used by more than one other module, but not by other packages in the book, move its entry to the top level, but keep it as a second-class citizen without a specific version.

    • [renodr] - Update to gnome-desktop-3.22.0. Partially fixes #8316.

  • September 22nd, 2016

    • [renodr] - Update to totem-pl-parser-3.10.7. Partially fixes #8316.

    • [renodr] - Fix documentation install directory in libsigc++. Fixes #8344.

    • [renodr] - Update to WebkitGTK+-2.14.0. Fixes #8331.

  • September 21st, 2016

    • [renodr] - Update to wayland-1.12.0. Fixes #8337.

    • [renodr] - Update to gjs-1.46.0. Partially fixes #8316.

    • [renodr] - Update to libsigc++-2.10.0. Partially fixes #8328.

    • [renodr] - Update to gtkmm-3.22.0. Partially fixes #8328.

    • [renodr] - Update to glibmm-2.50.0. Partially fixes #8328.

    • [renodr] - Update to gtk+-3.22.0. Fixes #8324.

    • [renodr] - Update to gdk-pixbuf-2.36.0. Fixes #8322.

    • [renodr] - Update to ATK-2.22.0. Fixes #8318.

    • [renodr] - Update to adwaita-icon-theme-3.22.0. Fixes #8336.

    • [bdubbs] - Update to libjpeg-turbo-1.5.1. Fixes #8333.

    • [bdubbs] - Update to sudo-1.8.18. Fixes #8332.

    • [bdubbs] - Update to Business-ISBN-3.003. Fixes #8326.

  • September 20th, 2016

    • [ken] - Update to firefox-49.0. Fixes #8325.

    • [renodr] - Update to glib-networking-2.50.0. Partially fixes #8321.

    • [renodr] - Update to libsoup-2.56.0. Partially fixes #8321.

    • [renodr] - Update to glib-2.50.0. Fixes #8320.

    • [renodr] - Update to gobject-introspection-1.50.0. Fixes #8327.

    • [renodr] - Update to gsettings-desktop-schemas-3.22.0. Partially fixes #8316.

    • [renodr] - Update to pygobject-3.22.0. Fixes #8319.

    • [renodr] - Update to vala-0.34.0. Fixes #8323.

  • September 19th, 2016

    • [bdubbs] - Update to qemu-2.7.0. Fixes #8090.

    • [renodr] - Update to ModemManager-1.6.2. Fixes #8307.

    • [renodr] - Removed an unneeded sed from WebkitGTK+-2.12.5. Fixes #8312.

    • [bdubbs] - Update to libsamplerate-0.1.9. Fixes #8317.

    • [renodr] - Add PCRE2. Fixes #8269.

    • [renodr] - Update to Samba-4.5.0. Fixes #8276.

  • September 18th, 2016

    • [renodr] - Update to xf86-video-ati-7.7.1. Fixes #8304.

  • September 17th, 2016

    • [bdubbs] - Update to emacs-25.1. No ticket.

    • [bdubbs] - Update to libburn, libisoburn, libisofs version 1.4.6. Fixes #8308.

    • [pierre] - Fix LXQt pre-install instructions and have libsysstat library installed in $LXQT_PREFIX/lib instead of lib64. Fixes #8311.

    • [dj] - Added nghttp2-1.14.1. Fixes #8229.

  • September 16th, 2016

    • [renodr] - Update to PHP-7.0.11. Fixes #8302.

    • [renodr] - Update to krb5-1.14.4. Fixes #8298.

    • [renodr] - Update to gtk+-2.24.31. Fixes #8285.

    • [renodr] - Update to cups-filters-1.11.3. Fixes #8306.

    • [renodr] - Update to cups-2.2.0. Fixes #8294.

    • [renodr] - Update to Mesa-12.0.3. Fixes #8303.

    • [renodr] - Update to Pango-1.40.3. Fixes #8293.

    • [bdubbs] - Update to xfce4-settings-4.12.1. Fixes #8305.

    • [bdubbs] - Update to libinput-1.5.0. Fixes #8299.

    • [bdubbs] - Update to acpid-2.0.28. Fixes #8301.

  • September 15th, 2016

    • [ken] - Reword text on terminus fonts in console-fonts because a few versions such as the XOS4_2 versions (vNNx) do remap quite a lot of codepoints to other similar glyphs. Fixes #8289.

  • September 14th, 2016

    • [renodr] - Update to cifs-utils-6.6. Fixes #8260.

    • [bdubbs] - Update to tigervnc-1.7.0. Fixes #8296.

    • [pierre] - Update to libreoffice-5.2.1.2. Fixes #8279.

    • [bdubbs] - Update to sqlite-3.14.2. Fixes #8295.

    • [bdubbs] - Update to vim-8.0. Fixes #8292.

    • [renodr] - Update to curl-7.50.3. Fixes #8297.

    • [renodr] - Update to gnutls-3.5.4. Fixes #8281.

  • September 11th, 2016

    • [bdubbs] - Re-add k3b and libkcddb. Using git versions until upstream releases stable KF5 versions. Fixes #8261.

    • [bdubbs] - Update to mariadb-10.1.17. Fixes #8244.

    • [bdubbs] - Update to wireshark-2.2.0. Fixes #8277.

    • [bdubbs] - Update to dbus-glib-0.108. Fixes #8286.

  • September 10th, 2016

    • [renodr] - Fix/update Kernel Configuration.

    • [bdubbs] - Update to btrfs-progs-4.7.2. Fixes #8264.

    • [bdubbs] - Update to doxygen-1.8.12. Fixes #8266.

    • [bdubbs] - Update to freetype-2.7. Fixes #8283.

  • September 9th, 2016

    • [bdubbs] - Update to libinput-1.4.2. Fixes #8241.

    • [bdubbs] - Update to shared-mime-info-1.7. Fixes #8265.

    • [bdubbs] - Update to iso-codes-3.70. Fixes #8238.

    • [bdubbs] - Update to libXfont-1.5.2. Fixes #8247.

    • [bdubbs] - Update to libva and libva-intel-driver-1.7.2. Fixes #8262.

    • [bdubbs] - Update to mesa-12.0.2. Fixes #8267.

    • [renodr] - Update to git-2.10.0. Fixes #8256.

    • [renodr] - Update to cmake-3.6.2. Fixes #8275.

    • [renodr] - Update to mercurial-3.9.1. Fixes #8252.

  • September 8th, 2016

    • [renodr] - Update to serf-1.3.9. Fixes #8253.

    • [renodr] - Update to pango-1.40.2. Fixes #8245.

    • [renodr] - Update to harfbuzz-1.3.1. Fixes #8274.

    • [renodr] - Update to gsl-2.2.1. Fixes #8237.

    • [renodr] - Update to cups-filters-1.11.2. Fixes #8233.

    • [renodr] - Update to gtkmm2-2.24.5. Fixes #8242.

    • [renodr] - Update to geoclue-2.4.4. Fixes #8271.

    • [renodr] - Update to clutter-gst-3.0.20. Fixes #8280.

    • [renodr] - Update to LLVM-3.9.0. Fixes #8257.

    • [renodr] - Update to WebkitGTK+-2.12.5. Fixes #8268.

  • September 7th, 2016

    • [renodr] - Update to curl-7.50.2. Fixes #8272.

    • [bdubbs] - Release of BLFS-7.10.

Last updated on 2017-02-25 15:04:01 -0800

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 http://www.linuxfromscratch.org/mail.html.

Last updated on 2007-04-04 12:42:53 -0700

BLFS Wiki

The BLFS Project has created a Wiki for users to comment on pages and instructions at http://wiki.linuxfromscratch.org/blfs/wiki. Comments are welcome from all users.

The following are the rules for posting:

  • Users must register and log in to edit a page.

  • Suggestions to change the book should be made by creating a new ticket, not by making comments in the Wiki.

  • Questions with your specific installation problems should be made by subscribing and mailing to the BLFS Support Mailing List at mailto:blfs-support AT linuxfromscratch D0T org.

  • Discussions of build instructions should be made by subscribing and mailing to the BLFS Development List at mailto:blfs-dev AT linuxfromscratch D0T org.

  • Inappropriate material will be removed.

Last updated on 2007-04-04 12:42:53 -0700

Asking for Help and the FAQ

If you encounter a problem while using this book, and your problem is not listed in the FAQ (http://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 8.0),

  • the package or section giving you problems,

  • the exact error message or symptom you are receiving,

  • whether you have deviated from the book or LFS at all,

  • if you are installing a BLFS package on a non-LFS system.

(Note that saying that you've deviated from the book doesn't mean that we won't help you. It'll just help us to see other possible causes of your problem.)

Expect guidance instead of specific instructions. If you are instructed to read something, please do so. It generally implies that the answer was way too obvious and that the question would not have been asked if a little research was done prior to asking. The volunteers in the mailing list prefer not to be used as an alternative to doing reasonable research on your end. In addition, the quality of your experience with BLFS is also greatly enhanced by this research, and the quality of volunteers is enhanced because they don't feel that their time has been abused, so they are far more likely to participate.

An excellent article on asking for help on the Internet in general has been written by Eric S. Raymond. It is available online at http://www.catb.org/~esr/faqs/smart-questions.html. Read and follow the hints in that document and you are much more likely to get a response to start with and also to get the help you actually need.

Last updated on 2009-09-24 22:43:37 -0700

Credits

Many people have contributed both directly and indirectly to BLFS. This page lists all of those we can think of. We may well have left people out and if you feel this is the case, drop us a line. Many thanks to all of the LFS community for their assistance with this project.

Current Editors

  • Bruce Dubbs

  • Pierre Labastie

  • DJ Lucas

  • Ken Moffat

  • Douglas Reno

Contributors and Past Editors

The list of contributors is far too large to provide detailed information about the contributions for each contributor. Over the years, the following individuals have provided significant inputs to the book:

  • Timothy Bauscher

  • Daniel Bauman

  • Jeff Bauman

  • Andy Benton

  • Wayne Blaszczyk

  • Paul Campbell

  • Nathan Coulson

  • Jeroen Coumans

  • Guy Dalziel

  • Robert Daniels

  • Richard Downing

  • Manuel Canales Esparcia

  • Jim Gifford

  • Manfred Glombowski

  • Ag Hatzimanikas

  • Mark Hymers

  • James Iwanek

  • David Jensen

  • Jeremy Jones

  • Seth Klein

  • Alex Kloss

  • Eric Konopka

  • Larry Lawrence

  • Chris Lynn

  • Andrew McMurry

  • Randy McMurchy

  • Denis Mugnier

  • Billy O'Connor

  • Fernando de Oliveira

  • Alexander Patrakov

  • Olivier Peres

  • Andreas Pedersen

  • Henning Rohde

  • Matt Rogers

  • James Robertson

  • Henning Rohde

  • Chris Staub

  • Jesse Tie-Ten-Quee

  • Ragnar Thomsen

  • Thomas Trepl

  • Tushar Teredesai

  • Jeremy Utley

  • Zack Winkles

  • Christian Wurst

  • Igor Živković

General Acknowledgments

  • Fernando Arbeiza

  • Miguel Bazdresch

  • Gerard Beekmans

  • Oliver Brakmann

  • Jeremy Byron

  • Ian Chilton

  • David Ciecierski

  • Jim Harris

  • Lee Harris

  • Marc Heerdink

  • Steffen Knollmann

  • Eric Konopka

  • Scot McPherson

  • Ted Riley

Last updated on 2016-09-22 03:11:55 -0700

Contact Information

Please direct your emails to one of the BLFS mailing lists. See Mailing lists for more information on the available mailing lists.

Last updated on 2012-02-05 21:15:51 -0800

Chapter 2. Important Information

This chapter is used to explain some of the policies used throughout the book, to introduce important concepts and to explain some issues you may see with some of the included packages.

Notes on Building Software

Those people who have built an LFS system may be aware of the general principles of downloading and unpacking software. Some of that information is repeated here for those new to building their own software.

Each set of installation instructions contains a URL from which you can download the package. The patches; however, are stored on the LFS servers and are available via HTTP. These are referenced as needed in the installation instructions.

While you can keep the source files anywhere you like, we assume that you have unpacked the package and changed into the directory created by the unpacking process (the 'build' directory). We also assume you have uncompressed any required patches and they are in the directory immediately above the 'build' directory.

We can not emphasize strongly enough that you should start from a clean source tree each time. This means that if you have had an error during configuration or compilation, it's usually best to delete the source tree and re-unpack it before trying again. This obviously doesn't apply if you're an advanced user used to hacking 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, you sometimes need to be able to unpack patches which are generally not in .tar format. The best way to do this is to copy the patch file to the parent of the 'build' directory and then run one of the following commands depending on whether the file is a .gz or .bz2 file:

gunzip -v patchname.gz
bunzip2 -v patchname.bz2

Verifying File Integrity Using 'md5sum'

Generally, to verify that the downloaded file is genuine and 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>

Creating Log Files During Installation

For larger packages, it is convenient to create log files instead of staring at the screen hoping to catch a particular error or warning. Log files are also useful for debugging and keeping records. The following command allows you to create an installation log. Replace <command> with the command you intend to execute.

( <command> 2>&1 | tee compile.log && exit $PIPESTATUS )

2>&1 redirects error messages to the same location as standard output. The tee command allows viewing of the output while logging the results to a file. The parentheses around the command run the entire command in a subshell and finally the exit $PIPESTATUS command ensures the result of the <command> is returned as the result and not the result of the tee command.

Using Multiple Processors

For many modern systems with multiple processors (or cores) the compilation time for a package can be reduced by performing a "parallel make" by either setting an environment variable or telling the make program how many processors are available. For instance, a Core2Duo can support two simultaneous processes with:

export MAKEFLAGS='-j2'

or just building with:

make -j2

Generally the number of processes should not exceed the number of cores supported by the CPU. To list the processors on your system, issue: grep processor /proc/cpuinfo.

In some cases, using multiple processors may result in a 'race' condition where the success of the build depends on the order of the commands run by the make program. For instance, if an executable needs File A and File B, attempting to link the program before one of the dependent components is available will result in a failure. This condition usually arises because the upstream developer has not properly designated all the prerequsites 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.

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.

Building the CUPS package is a good example of how redirecting a file as input to prompts can help you automate the build. If you run the test suite, you are asked to respond to a series of questions regarding the type of test to run and if you have any auxiliary programs the test can use. You can create a file with your responses, one response per line, and use a command similar to the one shown below to automate running the test suite:

make check < ../cups-1.1.23-testsuite_parms

This effectively makes the test suite use the responses in the file as the input to the questions. Occasionally you may end up doing a bit of trial and error determining the exact format of your input file for some things, but once figured out and documented you can use this to automate building the package.

Using yes to Automate Input

Sometimes you will only need to provide one response, or provide the same response to many prompts. For these instances, the yes command works really well. The yes command can be used to provide a response (the same one) to one or more instances of questions. It can be used to simulate pressing just the Enter key, entering the Y key or entering a string of text. Perhaps the easiest way to show its use is in an example.

First, create a short Bash script by entering the following commands:

cat > blfs-yes-test1 << "EOF"
#!/bin/bash

echo -n -e "\n\nPlease type something (or nothing) and press Enter ---> "

read A_STRING

if test "$A_STRING" = ""; then A_STRING="Just the Enter key was pressed"
else A_STRING="You entered '$A_STRING'"
fi

echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test1

Now run the script by issuing ./blfs-yes-test1 from the command line. It will wait for a response, which can be anything (or nothing) followed by the Enter key. After entering something, the result will be echoed to the screen. Now use the yes command to automate the entering of a response:

yes | ./blfs-yes-test1

Notice that piping yes by itself to the script results in y being passed to the script. Now try it with a string of text:

yes 'This is some text' | ./blfs-yes-test1

The exact string was used as the response to the script. Finally, try it using an empty (null) string:

yes '' | ./blfs-yes-test1

Notice this results in passing just the press of the Enter key to the script. This is useful for times when the default answer to the prompt is sufficient. This syntax is used in the Net-tools instructions to accept all the defaults to the many prompts during the configuration step. You may now remove the test script, if desired.

File Redirection to Automate Output

In order to automate the building of some packages, especially those that require you to read a license agreement one page at a time, requires using a method that avoids having to press a key to display each page. Redirecting the output to a file can be used in these instances to assist with the automation. The previous section on this page touched on creating log files of the build output. The redirection method shown there used the tee command to redirect output to a file while also displaying the output to the screen. Here, the output will only be sent to a file.

Again, the easiest way to demonstrate the technique is to show an example. First, issue the command:

ls -l /usr/bin | more

Of course, you'll be required to view the output one page at a time because the more filter was used. Now try the same command, but this time redirect the output to a file. The special file /dev/null can be used instead of the filename shown, but you will have no log file to examine:

ls -l /usr/bin | more > redirect_test.log 2>&1

Notice that this time the command immediately returned to the shell prompt without having to page through the output. You may now remove the log file.

The last example will use the yes command in combination with output redirection to bypass having to page through the output and then provide a y to a prompt. This technique could be used in instances when otherwise you would have to page through the output of a file (such as a license agreement) and then answer the question of “do you accept the above?”. For this example, another short Bash script is required:

cat > blfs-yes-test2 << "EOF"
#!/bin/bash

ls -l /usr/bin | more

echo -n -e "\n\nDid you enjoy reading this? (y,n) "

read A_STRING

if test "$A_STRING" = "y"; then A_STRING="You entered the 'y' key"
else A_STRING="You did NOT enter the 'y' key"
fi

echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test2

This script can be used to simulate a program that requires you to read a license agreement, then respond appropriately to accept the agreement before the program will install anything. First, run the script without any automation techniques by issuing ./blfs-yes-test2.

Now issue the following command which uses two automation techniques, making it suitable for use in an automated build script:

yes | ./blfs-yes-test2 > blfs-yes-test2.log 2>&1

If desired, issue tail blfs-yes-test2.log to see the end of the paged output, and confirmation that y was passed through to the script. Once satisfied that it works as it should, you may remove the script and log file.

Finally, keep in mind that there are many ways to automate and/or script the build commands. There is not a single “correct” way to do it. Your imagination is the only limit.

Dependencies

For each package described, BLFS lists the known dependencies. These are listed under several headings, whose meaning is as follows:

  • Required means that the target package cannot be correctly built without the dependency having first been installed.

  • Recommended means that BLFS strongly suggests this package is installed first for a clean and trouble-free build, that won't have issues either during the build process, or at run-time. The instructions in the book assume these packages are installed. Some changes or workarounds may be required if these packages are not installed.

  • Optional means that this package might be installed for added functionality. Often BLFS will describe the dependency to explain the added functionality that will result.

Using the Most Current Package Sources

On occasion you may run into a situation in the book when a package will not build or work properly. Though the Editors attempt to ensure that every package in the book builds and works properly, sometimes a package has been overlooked or was not tested with this particular version of BLFS.

If you discover that a package will not build or work properly, you should see if there is a more current version of the package. Typically this means you go to the maintainer's web site and download the most current tarball and attempt to build the package. If you cannot determine the maintainer's web site by looking at the download URLs, use Google and query the package's name. For example, in the Google search bar type: 'package_name download' (omit the quotes) or something similar. Sometimes typing: 'package_name home page' will result in you finding the maintainer's web site.

Stripping One More Time

In LFS, stripping of debugging symbols was discussed a couple of times. When building BLFS packages, there are generally no special instructions that discuss stripping again. It is probably not a good idea to strip an executable or a library while it is in use, so exiting any windowing environment is a good idea. Then you can do:

find /{,usr/}{bin,lib,sbin} -type f -exec strip --strip-unneeded {} \;

If you install programs in other directories such as /opt or /usr/local, you may want to strip the files there too.

For more information on stripping, see http://www.technovelty.org/linux/stripping-shared-libraries.html.

Libtool files

One of the side effects of packages that use Autotools, including libtool, is that they create many files with an .la extension. These files are not needed in an LFS environment. If there are conflicts with pkgconfig entries, they can actually prevent successful builds. You may want to consider removing these files periodically:

find /lib /usr/lib -not -path "*Image*" -a -name \*.la -delete

The above command removes all .la files with the exception of those that have "Image" as a part of the path. These .la files are used by the ImageMagick programs. There may be other exceptions by packages not in BLFS.

Last updated on 2015-11-13 06:24:57 -0800

The /usr Versus /usr/local Debate

Should I install XXX in /usr or /usr/local?

This is a question without an obvious answer for an LFS based system.

In traditional Unix systems, /usr usually contains files that come with the system distribution, and the /usr/local tree is free for the local administrator to manage. The only really hard and fast rule is that Unix distributions should not touch /usr/local, except perhaps to create the basic directories within it.

With Linux distributions like Red Hat, Debian, etc., a possible rule is that /usr is managed by the distribution's package system and /usr/local is not. This way the package manager's database knows about every file within /usr.

LFS users build their own system and so deciding where the system ends and local files begin is not straightforward. So the choice should be made in order to make things easier to administer. There are several reasons for dividing files between /usr and /usr/local.

  • On a network of several machines all running LFS, or mixed LFS and other Linux distributions, /usr/local could be used to hold packages that are common between all the computers in the network. It can be NFS mounted or mirrored from a single server. Here local indicates local to the site.

  • On a network of several computers all running an identical LFS system, /usr/local could hold packages that are different between the machines. In this case local refers to the individual computers.

  • Even on a single computer, /usr/local can be useful if you have several distributions installed simultaneously, and want a place to put packages that will be the same on all of them.

  • Or you might regularly rebuild your LFS, but want a place to put files that you don't want to rebuild each time. This way you can wipe the LFS file system and start from a clean partition every time without losing everything.

Some people ask why not use your own directory tree, e.g., /usr/site, rather than /usr/local?

There is nothing stopping you, many sites do make their own trees, however it makes installing new software more difficult. Automatic installers often look for dependencies in /usr and /usr/local, and if the file it is looking for is in /usr/site instead, the installer will probably fail unless you specifically tell it where to look.

What is the BLFS position on this?

All of the BLFS instructions install programs in /usr with optional instructions to install into /opt for some specific packages.

Last updated on 2007-04-04 12:42:53 -0700

Optional Patches

As you follow the various sections in the book, you will observe that the book occasionally includes patches that are required for a successful and secure installation of the packages. The general policy of the book is to include patches that fall in one of the following criteria:

  • Fixes a compilation problem.

  • Fixes a security problem.

  • Fixes a broken functionality.

In short, the book only includes patches that are either required or recommended. There is a Patches subproject which hosts various patches (including the patches referenced in the books) to enable you to configure your LFS the way you like it.

Last updated on 2007-04-04 12:42:53 -0700

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/8.0/chapter07/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 http://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/.

Last updated on 2016-08-28 02:28:15 -0700

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 (libfoo.a). On some old operating systems they are the only type available.

On almost all Linux platforms there are also shared libraries (libfoo.so) - one copy of the library is loaded into virtual memory, and shared by all the programs which call any of its functions. This is space efficient.

In the past, essential programs such as a shell were often linked statically so that some form of minimal recovery system would exist even if shared libraries, such as libc.so, became damaged (e.g. moved to lost+found after fsck following an unclean shutdown). Nowadays, most people use an alternative system install or a Live CD if they have to recover. Journaling filesystems also reduce the likelihood of this sort of problem.

Developers, at least while they are developing, often prefer to use static versions of the libraries which their code links to.

Within the book, there are various places where configure switches such as --disable-static are employed, and other places where the possibility of using system versions of libraries instead of the versions included within another package is discussed. The main reason for this is to simplify updates of libraries.

If a package is linked to a dynamic library, updating to a newer library version is automatic once the newer library is installed and the program is (re)started (provided the library major version is unchanged, e.g. going from libfoo.so.2.0 to libfoo.so.2.1. Going to libfoo.so.3 will require recompilation - ldd can be used to find which programs use the old version). If a program is linked to a static library, the program always has to be recompiled. If you know which programs are linked to a particular static library, this is merely an annoyance. But usually you will not know which programs to recompile.

Most libraries are shared, but if you do something unusual, such as moving a shared library to /lib accidentally breaking the .so symlink in /usr/lib while keeping the static library in /lib, the static library will be silently linked into the programs which need it.

One way to identify when a static library is used, is to deal with it at the end of the installation of every package. Write a script to find all the static libraries in /usr/lib or wherever you are installing to, and either move them to another directory so that they are no longer found by the linker, or rename them so that libfoo.a becomes e.g. libfoo.a.hidden. The static library can then be temporarily restored if it is ever needed, and the package needing it can be identified. You may choose to exclude some of the static libraries from glibc if you do this (libc_nonshared.a, libg.a, libieee.a, libm.a, libpthread_nonshared.a, librpcsvc.a, libsupc++.a) to simplify compilation.

If you use this approach, you may discover that more packages than you were expecting use a static library. That was the case with nettle-2.4 in its default static-only configuration: It was required by GnuTLS-3.0.19, but also linked into package(s) which used GnuTLS, such as glib-networking-2.32.3.

Many packages put some of their common functions into a static library which is only used by the programs within the package and, crucially, the library is not installed as a standalone library. These internal libraries are not a problem - if the package has to be rebuilt to fix a bug or vulnerability, nothing else is linked to them.

When BLFS mentions system libraries, it means shared versions of libraries. Some packages such as Firefox-51.0.1 and ghostscript-9.20 include many other libraries. When they link to them, they link statically so this also makes the programs bigger. The version they ship is often older than the version used in the system, so it may contain bugs - sometimes developers go to the trouble of fixing bugs in their included libraries, other times they do not.

Sometimes, deciding to use system libraries is an easy decision. Other times it may require you to alter the system version (e.g. for libpng-1.6.28 if used for Firefox-51.0.1). Occasionally, a package ships an old library and can no longer link to the current version, but can link to an older version. In this case, BLFS will usually just use the shipped version. Sometimes the included library is no longer developed separately, or its upstream is now the same as the package's upstream and you have no other packages which will use it. In those cases, you might decide to use the included static library even if you usually prefer to use system libraries.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libraries

Last updated on 2015-09-20 15:38:20 -0700

Locale Related Issues

This page contains information about locale related problems and issues. In the following paragraphs you'll find a generic overview of things that can come up when configuring your system for various locales. Many (but not all) existing locale related problems can be classified and fall under one of the headings below. The severity ratings below use the following criteria:

  • Critical: The program doesn't perform its main function. The fix would be very intrusive, it's better to search for a replacement.

  • High: Part of the functionality that the program provides is not usable. If that functionality is required, it's better to search for a replacement.

  • Low: The program works in all typical use cases, but lacks some functionality normally provided by its equivalents.

If there is a known workaround for a specific package, it will appear on that package's page. For the most recent information about locale related issues for individual packages, check the User Notes in the BLFS Wiki.

The Needed Encoding is Not a Valid Option in the Program

Severity: Critical

Some programs require the user to specify the character encoding for their input or output data and present only a limited choice of encodings. This is the case for the -X option in a2ps-4.14 and Enscript-1.6.6, the -input-charset option in unpatched Cdrtools, and the character sets offered for display in the menu of Links-2.14. 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-2.6.3 or JOE-4.4 for example, assume that documents are always in the encoding implied by the current locale. While this assumption may be valid for the user-created documents, it is not safe for external ones. When this assumption fails, non-ASCII characters are displayed incorrectly, and the document may become unreadable.

If the external document is entirely text based, it can be converted to the current locale encoding using the iconv program.

For documents that are not text-based, this is not possible. In fact, the assumption made in the program may be completely invalid for documents where the Microsoft Windows operating system has set de facto standards. An example of this problem is ID3v1 tags in MP3 files (see the BLFS Wiki ID3v1Coding page for more details). For these cases, the only solution is to find a replacement program that doesn't have the issue (e.g., one that will allow you to specify the assumed document encoding).

Among BLFS packages, this problem applies to nano-2.6.3, JOE-4.4, and all media players except Audacious-3.8.2.

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.50.3 library, the problem can be corrected by setting the G_FILENAME_ENCODING environment variable to the special "@locale" value. Glib2 based programs that don't respect that environment variable are buggy.

The Zip-3.0 and UnZip-6.0 have this problem because they hard-code the expected filename encoding. UnZip contains a hard-coded conversion table between the CP850 (DOS) and ISO-8859-1 (UNIX) encodings and uses this table when extracting archives created under DOS or Microsoft Windows. However, this assumption only works for those in the US and not for anyone using a UTF-8 locale. Non-ASCII characters will be mangled in the extracted filenames.

The general rule for avoiding this class of problems is to avoid installing broken programs. If this is impossible, the convmv command-line tool can be used to fix filenames created by these broken programs, or intentionally mangle the existing filenames to meet the broken expectations of such programs.

In other cases, a similar problem is caused by importing filenames from a system using a different locale with a tool that is not locale-aware (e.g., OpenSSH-7.4p1). 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.9 and all the shells.

The Package Installs Manual Pages in Incorrect or Non-Displayable Encoding

Severity: Low

LFS expects that manual pages are in the language-specific (usually 8-bit) encoding, as specified on the LFS Man DB page. However, some packages install translated manual pages in UTF-8 encoding (e.g., Shadow, already dealt with), or manual pages in languages not in the table. Not all BLFS packages have been audited for conformance with the requirements put in LFS (the large majority have been checked, and fixes placed in the book for packages known to install non-conforming manual pages). If you find a manual page installed by any of BLFS packages that is obviously in the wrong encoding, please remove or convert it as needed, and report this to BLFS team as a bug.

You can easily check your system for any non-conforming manual pages by copying the following short shell script to some accessible location,

#!/bin/sh
# Begin checkman.sh
# Usage: find /usr/share/man -type f | xargs checkman.sh
for a in "$@"
do
    # echo "Checking $a..."
    # Pure-ASCII manual page (possibly except comments) is OK
    grep -v '.\\"' "$a" | iconv -f US-ASCII -t US-ASCII >/dev/null 2>&1 \
        && continue
    # Non-UTF-8 manual page is OK
    iconv -f UTF-8 -t UTF-8 "$a" >/dev/null 2>&1 || continue
    # Found a UTF-8 manual page, bad.
    echo "UTF-8 manual page: $a" >&2
done
# End checkman.sh

and then issuing the following command (modify the command below if the checkman.sh script is not in your PATH environment variable):

find /usr/share/man -type f | xargs checkman.sh

Note that if you have manual pages installed in any location other than /usr/share/man (e.g., /usr/local/share/man), you must modify the above command to include this additional location.

Last updated on 2013-02-11 10:51:17 -0800

Going Beyond BLFS

The packages that are installed in this book are only the tip of the iceberg. We hope that the experience you gained with the LFS book and the BLFS book will give you the background needed to compile, install and configure packages that are not included in this book.

When you want to install a package to a location other than /, or /usr, you are installing outside the default environment settings on most machines. The following examples should assist you in determining how to correct this situation. The examples cover the complete range of settings that may need updating, but they are not all needed in every situation.

  • Expand the PATH to include $PREFIX/bin.

  • Expand the PATH for root to include $PREFIX/sbin.

  • Add $PREFIX/lib to /etc/ld.so.conf or expand LD_LIBRARY_PATH to include it. Before using the latter option, check out http://xahlee.org/UnixResource_dir/_/ldpath.html. If you modify /etc/ld.so.conf, remember to update /etc/ld.so.cache by executing ldconfig as the root user.

  • Add $PREFIX/man to /etc/man_db.conf or expand MANPATH.

  • Add $PREFIX/info to INFOPATH.

  • Add $PREFIX/lib/pkgconfig to PKG_CONFIG_PATH. Some packages are now installing .pc files in $PREFIX/share/pkgconfig, so you may have to include this directory also.

  • Add $PREFIX/include to CPPFLAGS when compiling packages that depend on the package you installed.

  • Add $PREFIX/lib to LDFLAGS when compiling packages that depend on a library installed by the package.

If you are in search of a package that is not in the book, the following are different ways you can search for the desired package.

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 http://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:

    • Arch http://www.archlinux.org/packages/ - enter the package name in the 'Keywords' box, select the package name, select the 'Source Files' field, and then select the PKGBUILD entry to see how they build this package.

    • Debian ftp://ftp.uk.debian.org/debian/pool (use your country's version if there is one) - the source will be in .tar.gz tarballs (either the original upstream .orig source, or else a dfsg containing those parts which comply with debian's free software guidelines) accompanied by versioned .diff.gz or .tar.gz additions. These additions often show how the package is built, and may contain patches. In the .diff.gz versions, any patches create files in debian/patches.

    • Fedora http://pkgs.fedoraproject.org/cgit/ - this site is still occasionally overloaded, but it is an easy way of looking at .spec files and patches. If you know their name for the package (e.g. mesa.git) you can append that to the URI to get to it. If not, use the search box. If the site is unavailable, try looking for a local mirror of ftp.fedora.com (the primary site is usually unavailable if fedora cgit is not responding) and download a source rpm to see what they do.

    • Gentoo - the mirrors for ebuilds and patches seem to be well-hidden, and they change frequently. Also, if you have found a mirror, you need to know which directory the application has been assigned to. The ebuilds themselves can be found at http://packages.gentoo.org/ - use the search field. If there are any patches, a mirror will have them in the files/ directory. Depending on your browser, or the mirror, you might need to download the ebuild to be able to read it. Treat the ebuild as a sort of pseudo-code / shell combination - look in particular for sed commands and patches, or hazard a guess at the meanings of the functions such as dodoc.

    • openSUSE http://download.opensuse.org/factory/repo/src-oss/suse/src/ - source only seems to be available in source rpms.

    • Slackware - the official package browser is currently broken. The site at http://slackbuilds.org/ has current and previous versions in their unofficial repository with links to homepages, downloads, and some individual files, particularly the .SlackBuild files.

    • Ubuntu ftp://ftp.ubuntu.com/ubuntu/pool/ - see the debian notes above.

    If everything else fails, try the blfs-support mailing-list.

Tip

If you have found a package that is only available in .deb or .rpm format, there are two small scripts, rpm2targz and deb2targz that are available at http://downloads.linuxfromscratch.org/deb2targz.tar.bz2 and http://downloads.linuxfromscratch.org/rpm2targz.tar.bz2 to convert the archives into a simple tar.gz format.

You may also find an rpm2cpio script useful. The Perl version in the linux kernel archives at http://lkml.indiana.edu/hypermail/linux/kernel/0210.2/att-0093/01-rpm2cpio works for most source rpms. The rpm2targz script will use an rpm2cpio script or binary if one is on your path. Note that rpm2cpio will unpack a source rpm in the current directory, giving a tarball, a spec file, and perhaps patches or other files.

Last updated on 2016-08-14 12:25:49 -0700

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, Random number generation, and Autofs-5.1.2 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, Mandrake, and SuSE. One very popular option is Knoppix.

Also, the LFS Community has developed its own LiveCD available at http://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 8.

Creating a Bootable USB Drive

A USB Pen drive, sometimes called a Thumb drive, is recognized by Linux as a SCSI device. Using one of these devices as a rescue device has the advantage that it is usually large enough to hold more than a minimal boot image. You can save critical data to the drive as well as use it to diagnose and recover a damaged system. Booting such a drive requires BIOS support, but building the system consists of formatting the drive, adding GRUB as well as the Linux kernel and supporting files.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/CreatingaCustomBootDevice

Last updated on 2014-01-19 04:43:46 -0800

About Console Fonts

An LFS system can be used without a graphical desktop, and unless or until you install X Window System you will have to work in the console. Most, if not all, PCs boot with an 8x16 font - whatever the actual screen size. There are a few things you can do to alter the display on the console. Most of them involve changing the font, but the first alters the commandline used by grub.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/aboutconsolefonts

Setting a smaller screen size in grub

Modern screens often have a lot more pixels then the screens used in the past. If your screen is 1600 pixels wide, an 8x16 font will give you 200 columns of text - unless your monitor is enormous, the text will be tiny. One of the ways to work around this is to tell grub to use a smaller size, such as 1024x768 or 800x600 or even 640x480. Even if your screen does not have a 4:3 aspect ratio, this should work.

To try this, you can reboot and edit grub's command-line to insert a 'video=' parameter between the 'root=/dev/sdXn' and 'ro', for example root=/dev/sda2 video=1024x768 ro based on the example in LFS section 8.4.4 : ../../../../lfs/view/8.0/chapter08/grub.html .

If you decide that you wish to do this, you can then (as the root user) edit /boot/grub/grub.cfg.

Using the standard psf fonts

In LFS the kbd package is used. The fonts it provides are PC Screen Fonts, usually called PSF, and they were installed into /usr/share/consolefonts. Where these include a unicode mapping table, the file suffix is often changed to .psfu although packages such as terminus-font (see below) do not add the 'u'. These fonts are usually compressed with gzip to save space, but that is not essential.

The initial PC text screens had 8 colours, or 16 colours if the bright versions of the original 8 colours were used. A PSF font can include up to 256 characters (technically, glyphs) while allowing 16 colours, or up to 512 characters (in which case, the bright colours will not be available). Clearly, these console fonts cannot be used to display CJK text - that would need thousands of available glyphs.

Some fonts in kbd can cover more than 512 codepoints ('characters'), with varying degrees of fidelity: unicode contains several whitespace codepoints which can all be mapped to a space, varieties of dashes can be mapped to a minus sign, smart quotes can map to the regular ASCII quotes rather than to whatever is used for "codepoint not present or invalid", and those cyrillic or greek letters which look like latin letters can be mapped onto them, so 'A' can also do duty for cyrillic A and greek Alpha, and 'P' can also do duty for cyrillic ER and greek RHO. Unfortunately, where a font has been created from a BDF file (the method in terminus and debian's console-setup ) such mapping of additional codepoints onto an existing glyph is not always done, although the terminus ter-vXXn fonts do this well.

There are over 120 combinations of font and size in kbd: often a font is provided at several character sizes, and sometimes varieties cover different subsets of unicode. Most are 8 pixels wide, in heights from 8 to 16 pixels, but there are a few which are 9 pixels wide, some others which are 12x22, and even one (latarcyrheb-sun32.psfu) which has been scaled up to 16x32. Using a bigger font is another way of making text on a large screen easier to read.

Testing different fonts

You can test fonts as a normal user. If you have a font which has not been installed, you can load it with :

setfont /path/to/yourfont.ext

For the fonts already installed you only need the name, so using gr737a-9x16.psfu.gz as an example:

setfont gr737a-9x16

To see the glyphs in the font, use:

showconsolefont

If the font looks as if it might be useful, you can then go on to test it more thoroughly.

When you find a font which to wish to use, as the root user) edit /etc/sysconfig/console as described in LFS section 7.6.5 ../../../../lfs/view/8.0/chapter07/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

Last updated on 2016-09-15 19:51:17 -0700

About Firmware

On some recent PCs it can be necessary, or desirable, to load firmware to make them work at their best. There is a directory, /lib/firmware, where the kernel or kernel drivers look for firmware images.

Preparing firmware for multiple different machines, as a distro would do, is outside the scope of this book.

Currently, most firmware can be found at a git repository: http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/. For convenience, the LFS Project has created a mirror, updated daily, where these firmware files can be accessed via wget or a web browser at http://anduin.linuxfromscratch.org/BLFS/linux-firmware/.

To get the firmware, either point a browser to one of the above repositories and then download the item(s) which you need, or install git and clone that repository.

For some other firmware, particularly for Intel microcode and certain wifi devices, the needed firmware is not available in the above repository. Some of this will be addressed below, but a search of the Internet for needed firmware is sometimes necessary.

Firmware files are conventionally referred to as blobs because you cannot determine what they will do. Note that firmware is distributed under various different licenses which do not permit disassembly or reverse-engineering.

Firmware for PCs falls into four categories:

  • Updates to the CPU to work around errata, usually referred to as microcode.

  • Firmware for video controllers. On x86 machines this seems to only apply to ATI devices : Radeons require firmware to be able to use KMS (kernel modesetting - the preferred option) as well as for Xorg. For earlier radeon chips (before the R600), the firmware is still in the kernel.

  • Firmware updates for wired network ports. Mostly they work even without the updates, but one must assume that they will work better with the updated firmware.

  • Firmware for other devices, such as wifi. These devices are not required for the PC to boot, but need the firmware before these devices can be used.

Note

Although not needed to load a firmware blob, the following tools may be useful for determining, obtaining, or preparing the needed firmware in order to load it into the system: cpio-2.12, git-2.11.1, pciutils-3.5.2, and Wget-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/aboutfirmware

Microcode updates for CPUs

In general, microcode can be loaded by the BIOS or UEFI, and it might be updated by upgrading to a newer version of those. On linux, you can also load the microcode from the kernel if you are using an AMD family 10h or later processor (first introduced late 2007), or an Intel processor from 1998 and later (Pentium4, Core, etc), if updated microcode has been released. These updates only last until the machine is powered off, so they need to be applied on every boot.

There are two ways of loading the microcode, described as 'early' and 'late'. Early loading happens before userspace has been started, late loading happens when userspace has started. Not surprisingly, early loading is preferred, (see e.g. an explanatory comment in a kernel commit noted at x86/microcode: Early load microcode on LWN.) Indeed, it is needed to work around one particular erratum in early Intel Haswell processors which had TSX enabled. (See Intel Disables TSX Instructions: Erratum Found in Haswell, Haswell-E/EP, Broadwell-Y.) Without this update glibc can do the wrong thing in uncommon situations.

It is much simpler to begin by building a kernel which boots on your hardware, try late microcode loading to see if there is an update (in many cases the BIOS or UEFI will have already applied any update), and then take the extra steps required for early loading.

This means you will be reconfiguring your kernel if you use early loading, so keep the built source around to minimise what gets rebuilt, and if you are at all uncertain, add your own identifier (A,B, etc) to the end of the EXTRAVERSION in the kernel configuration, e.g. "EXTRAVERSION -A" if nothing was set.

To confirm what processor(s) you have (if more than one, they will be identical) look in /proc/cpuinfo.

Intel Microcode for the CPU

Required Package

http://fedorahosted.org/released/microcode_ctl/

For Intel CPUs an extra package, microcode_ctl, is required. The package chosen is the version hosted at fedora — there is an alternative version at github from the same packager, but that still includes a redundant old version of an AMD microcode container, and also requires the unzip package.

Download the latest version from the link above; when last checked this was 2.1-8 and is updated when Intel releases new microcode.

This package reformats the microcode supplied by Intel into a format which the kernel can apply. The program intel-microcode2ucode is built and invoked by the Makefile to create the individual firmware blobs, so there is no reason to install it.

Begin by extracting the tarball and changing to the directory it created. Then change to the source directory and run:

make

This creates various blobs with names in the form XX-YY-ZZ. Now you need to determine your processor's identity, to see if there is any microcode for it. Determine the decimal values of the cpu family, model and stepping by running:

head -n7 /proc/cpuinfo

Now convert the cpu family, model and stepping to pairs of hexadecimal digits. For a SandyBridge i3-2120 (described as Intel(R) Core(TM) i3-2120 CPU) the relevant values are cpu family 6, model 42, stepping 7 so in this case the required identification is 06-2a-07. A look at the blobs will show that there is one for this CPU (although it might have already been applied by the BIOS). If there is a blob for your system then test if it will be applied by copying it (replace <XX-YY-ZZ> by the identifier for your machine) to where the kernel can find it:

mkdir -pv /lib/firmware/intel-ucode
cp -v <XX-YY-ZZ> /lib/firmware/intel-ucode

Now that the Intel microcode has been prepared, use the following options when you configure the kernel to try late loading of the Intel microcode:

Processor type and features  --->
  <M> CPU microcode loading support  [CONFIG_MICROCODE]
  [*]      Intel microcode loading support [CONFIG_MICROCODE_INTEL]

After you have successfully booted the new system, use the command dmesg | grep microcode and study the results to see if the message new patch_level appears. This example from the SandyBridge i3:

[    0.059906] perf_event_intel: PEBS disabled due to CPU errata, please upgrade microcode
[    2.603083] microcode: CPU0 sig=0x206a7, pf=0x2, revision=0x23
[    2.669378] microcode: CPU0 sig=0x206a7, pf=0x2, revision=0x23
[    2.669994] microcode: CPU0 updated to revision 0x29, date = 2013-06-12
[    2.670069] microcode: CPU1 sig=0x206a7, pf=0x2, revision=0x23
[    2.670139] microcode: CPU1 sig=0x206a7, pf=0x2, revision=0x23
[    2.670501] microcode: CPU1 updated to revision 0x29, date = 2013-06-12
[    2.670509] microcode: CPU2 sig=0x206a7, pf=0x2, revision=0x23
[    2.670540] microcode: CPU2 sig=0x206a7, pf=0x2, revision=0x23
[    2.670917] microcode: CPU2 updated to revision 0x29, date = 2013-06-12
[    2.670955] microcode: CPU3 sig=0x206a7, pf=0x2, revision=0x23
[    2.670988] microcode: CPU3 sig=0x206a7, pf=0x2, revision=0x23
[    2.671348] microcode: CPU3 updated to revision 0x29, date = 2013-06-12
[    2.671356] perf_event_intel: PEBS enabled due to microcode update
[    2.671412] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

If the microcode was not updated, there is no new microcode for this system's processor. If it did get updated, you can now proceed to the section called “Early loading of microcode”.

AMD Microcode for the CPU

Begin by downloading a container of firmware for your CPU family from http://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 and 16h have their own containers. Create the required directory and put the firmware you downloaded into it as the root user:

mkdir -pv /lib/firmware/amd-ucode
cp -v microcode_amd* /lib/firmware/amd-ucode

When you configure the kernel, use the following options to try late loading of AMD microcode:

Processor type and features  --->
  <M> CPU microcode loading support   [CONFIG_MICROCODE]
  [*]   AMD microcode loading support [CONFIG_MICROCODE_AMD]

After you have successfully booted the new system, use the command dmesg | grep microcode and study the results to see if the message new patch_level appears, as in this example from an old Athlon(tm) II X2:

[    4.183907] microcode: CPU0: patch_level=0x010000b6
[    4.184271] microcode: CPU0: new patch_level=0x010000c8
[    4.184278] microcode: CPU1: patch_level=0x010000b6
[    4.184283] microcode: CPU1: new patch_level=0x010000c8
[    4.184359] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

If the microcode was not updated, there is no new microcode for this system's processor. If it did get updated, you can now proceed to the section called “Early loading of microcode”.

Early loading of microcode

If you have established that updated microcode is available for your system, it is time to prepare it for early loading. This requires an additional package, cpio-2.12, as well as changes to the kernel config and the creation of an initrd which will need to be added to grub.cfg.

It does not matter where you prepare the initrd, and once it is working you can apply the same initrd to later LFS systems or newer kernels on this same machine, at least until any newer microcode is released. Use the following commands:

mkdir -p initrd/kernel/x86/microcode
cd initrd

For an AMD machine, use the following command (replace <MYCONTAINER> with the name of the container for your CPU's family):

cp -v /lib/firmware/amd_ucode/<MYCONTAINER> kernel/x86/microcode/AuthenticAMD.bin

Or for an Intel machine copy the appropriate blob using this command:

cp -v /lib/firmware/intel-ucode/<XX-YY-ZZ> kernel/x86/microcode/GenuineIntel.bin

Now prepare the initrd:

find . | cpio -o -H newc > /boot/microcode.img

You will now need to reconfigure and rebuild your kernel. It is safer to either add/change the EXTRAVERSION in the kernel's configuration and install the newer kernel with a new name, or else (unless you have a machine which requires an early firmware update) wait for the next SUBLEVEL kernel release so that you can fall back to the existing kernel in the event that something goes wrong.

You will also 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

You must also change the kernel config:

General Setup --->
  [y] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
  [y] CPU microcode loading support                                  [CONFIG_MICROCODE]

Retain the setting for INTEL or AMD microcode. When you have saved the .config file, either CONFIG_MICROCODE_INTEL_EARLY=y or CONFIG_MICROCODE_AMD_EARLY=y should be set, together with CONFIG_MICROCODE_EARLY=y.

When you have installed and booted this kernel, you should check the output of dmesg to confirm that the early load worked. The places and times where this happens are very different in AMD and Intel machines. First, an Intel example where a development kernel is being tested, showing that the first notification comes before the kernel version is mentioned:

[    0.000000] CPU0 microcode updated early to revision 0x29, date = 2013-06-12
[    0.000000] Linux version 4.0.0-rc6 (ken@jtm1) (gcc version 4.9.2 (GCC) )
               #3 SMP PREEMPT Mon Mar 30 21:26:02 BST 2015
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.0.0-rc6-sda13 root=/dev/sda13 ro
...
[    0.103091] CPU1 microcode updated early to revision 0x29, date = 2013-06-12
[    0.113241]  #2
[    0.134631]  #3
[    0.147821] x86: Booted up 1 node, 4 CPUs
[    0.147936] smpboot: Total of 4 processors activated (26338.66 BogoMIPS)
...
[    0.272643] microcode: CPU0 sig=0x206a7, pf=0x2, revision=0x29
[    0.272709] microcode: CPU1 sig=0x206a7, pf=0x2, revision=0x29
[    0.272775] microcode: CPU2 sig=0x206a7, pf=0x2, revision=0x29
[    0.272842] microcode: CPU3 sig=0x206a7, pf=0x2, revision=0x29
[    0.272941] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

A second AMD example is where the machine was running a stable kernel on an older version of LFS. Note that here there is no mention of the previous microcode version — compare this output to the AMD late loading messages (above) from the same machine:

[    0.000000] Linux version 3.18.11 (ken@milliways) (gcc version 4.9.1 (GCC) )
               #4 SMP Thu Apr 9 21:51:05 BST 2015
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.18.11-sda5 root=/dev/sda5 video=800x600 ro
...
[    0.584009] Trying to unpack rootfs image as initramfs...
[    0.584092] microcode: updated early to new patch_level=0x010000c8
...
[    0.586733] microcode: CPU0: patch_level=0x010000c8
[    0.586778] microcode: CPU1: patch_level=0x010000c8
[    0.586866] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

Firmware for Video Cards

Firmware for ATI video chips (R600 and later)

These instructions do NOT apply to old radeons before the R600 family. For those, the firmware is in the kernel's /lib/firmware/ directory. Nor do they apply if you intend to avoid a graphical setup such as Xorg and are content to use the default 80x25 display rather than a framebuffer.

Early radeon devices only needed a single 2K blob of firmware. Recent devices need several different blobs, and some of them are much bigger. The total size of the radeon firmware directory is over 500K — on a large modern system you can probably spare the space, but it is still redundant to install all the unused files each time you build a system.

A better approach is to install pciutils-3.5.2 and then use lspci to identify which VGA controller is installed.

With that information, check the RadeonFeature page of the Xorg wiki for Decoder ring for engineering vs marketing names to identify the family (you may need to know this for the Xorg driver in BLFS — Southern Islands and Sea Islands use the radeonsi driver) and the specific model.

Now that you know which controller you are using, consult the Radeon page of the Gentoo wiki which has a table listing the required firmware blobs for the various chipsets. Note that Southern Islands and Sea Islands chips use different firmware for kernel 3.17 and later compared to earlier kernels. Identify and download the required blobs then install them:

mkdir -pv /lib/firmware/radeon
cp -v <YOUR_BLOBS> /lib/firmware/radeon

There are actually two ways of installing this firmware. BLFS, in the 'Kernel Configuration for additional firmware' section part of the Xorg ATI Driver-7.8.0 section gives an example of compiling the firmware into the kernel - that is slightly faster to load, but uses more kernel memory. Here we will use the alternative method of making the radeon driver a module. In your kernel config set the following:

Device Drivers --->
  Graphics support --->
      Direct Rendering Manager --->
        <*> Direct Rendering Manager (XFree86 ... support)  [CONFIG_DRM]
      <m> ATI Radeon                                        [CONFIG_DRM_RADEON]

Loading several large blobs from /lib/firmware takes a noticeable time, during which the screen will be blank. If you do not enable the penguin framebuffer logo, or change the console size by using a bigger font, that probably does not matter. If desired, you can slightly reduce the time if you follow the alternate method of specifying 'y' for CONFIG_DRM_RADEON covered in BLFS at the link above — you must specify each needed radeon blob if you do that.

Firmware for Nvidia video chips

Some Nvidia graphics chips need firmware updates to take advantage of all the card's capability. These are generally the GeForce 8, 9, 9300, and 200-900 series chips. For more exact information, see https://nouveau.freedesktop.org/wiki/VideoAcceleration/#firmware.

First, the kernel Nvidia driver must be activated:

Device Drivers --->
  Graphics support --->
      Direct Rendering Manager --->
        <*> Direct Rendering Manager (XFree86 ... support)  [CONFIG_DRM]
      <*/m> Nouveau (NVIDIA) cards                          [CONFIG_DRM_NOUVEAU]

The steps to install the Nvidia firmware are:

wget https://raw.github.com/imirkin/re-vp2/master/extract_firmware.py
wget http://us.download.nvidia.com/XFree86/Linux-x86/325.15/NVIDIA-Linux-x86-325.15.run
sh NVIDIA-Linux-x86-325.15.run --extract-only
python extract_firmware.py 
mkdir -p /lib/firmware/nouveau
cp -d nv* vuc-* /lib/firmware/nouveau/

Firmware for Network Interfaces

The kernel likes to load firmware for some network drivers, particularly those from Realtek (the /lib/linux-firmware/rtl_nic/) directory, but they generally appear to work without it. Therefore, you can boot the kernel, check dmesg for messages about this missing firmware, and if necessary download the firmware and put it in the specified directory in /lib/firmware so that it will be found on subsequent boots. Note that with current kernels this works whether or not the driver is compiled in or built as a module, there is no need to build this firmware into the kernel. Here is an example where the R8169 driver has been compiled in but the firmware was not made available. Once the firmware had been provided, there was no mention of it on later boots.

dmesg | grep firmware | grep r8169
[    7.018028] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168g-2.fw failed with error -2
[    7.018036] r8169 0000:01:00.0 eth0: unable to load firmware patch rtl_nic/rtl8168g-2.fw (-2)

Firmware for Other Devices

Identifying the correct firmware will typically require you to install pciutils-3.5.2, and then use lspci to identify the device. You should then search online to check which module it uses, which firmware, and where to obtain the firmware — not all of it is in linux-firmware.

If possible, you should begin by using a wired connection when you first boot your LFS system. To use a wireless connection you will need to use a network tools such as Wireless Tools-29 and wpa_supplicant-2.6.

Firmware may also be needed for other devices such as some SCSI controllers, bluetooth adaptors, or TV recorders. The same principles apply.

Last updated on 2016-07-24 15:52:11 -0700

About Devices

Although most devices needed by packages in BLFS and beyond are set up properly by udev using the default rules installed by LFS in /etc/udev/rules.d, there are cases where the rules must be modified or augmented.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/aboutdevices

Multiple Sound Cards

If there are multiple sound cards in a system, the "default" sound card becomes random. The method to establish sound card order depends on whether the drivers are modules or not. If the sound card drivers are compiled into the kernel, control is via kernel command line parameters in /boot/grub/grub.cfg. For example, if a system has both an FM801 card and a SoundBlaster PCI card, the following can be appended to the command line:

snd-fm801.index=0 snd-ens1371.index=1

If the sound card drivers are built as modules, the order can be established in the /etc/modprobe.conf file with:

options snd-fm801 index=0
options snd-ens1371 index=1

USB Device Issues

USB devices usually have two kinds of device nodes associated with them.

The first kind is created by device-specific drivers (e.g., usb_storage/sd_mod or usblp) in the kernel. For example, a USB mass storage device would be /dev/sdb, and a USB printer would be /dev/usb/lp0. These device nodes exist only when the device-specific driver is loaded.

The second kind of device nodes (/dev/bus/usb/BBB/DDD, where BBB is the bus number and DDD is the device number) are created even if the device doesn't have a kernel driver. By using these "raw" USB device nodes, an application can exchange arbitrary USB packets with the device, i.e., bypass the possibly-existing kernel driver.

Access to raw USB device nodes is needed when a userspace program is acting as a device driver. However, for the program to open the device successfully, the permissions have to be set correctly. By default, due to security concerns, all raw USB devices are owned by user root and group usb, and have 0664 permissions (the read access is needed, e.g., for lsusb to work and for programs to access USB hubs). Packages (such as SANE and libgphoto2) containing userspace USB device drivers also ship udev rules that change the permissions of the controlled raw USB devices. That is, rules installed by SANE change permissions for known scanners, but not printers. If a package maintainer forgot to write a rule for your device, report a bug to both BLFS (if the package is there) and upstream, and you will need to write your own rule.

There is one situation when such fine-grained access control with pre-generated udev rules doesn't work. Namely, PC emulators such as KVM, QEMU and VirtualBox use raw USB device nodes to present arbitrary USB devices to the guest operating system (note: patches are needed in order to get this to work without the obsolete /proc/bus/usb mount point described below). Obviously, maintainers of these packages cannot know which USB devices are going to be connected to the guest operating system. You can either write separate udev rules for all needed USB devices yourself, or use the default catch-all "usb" group, members of which can send arbitrary commands to all USB devices.

Before Linux-2.6.15, raw USB device access was performed not with /dev/bus/usb/BBB/DDD device nodes, but with /proc/bus/usb/BBB/DDD pseudofiles. Some applications (e.g., VMware Workstation) still use only this deprecated technique and can't use the new device nodes. For them to work, use the "usb" group, but remember that members will have unrestricted access to all USB devices. To create the fstab entry for the obsolete usbfs filesystem:

usbfs  /proc/bus/usb  usbfs  devgid=14,devmode=0660  0  0

Note

Adding users to the "usb" group is inherently insecure, as they can bypass access restrictions imposed through the driver-specific USB device nodes. For instance, they can read sensitive data from USB hard drives without being in the "disk" group. Avoid adding users to this group, if you can.

Udev Device Attributes

Fine-tuning of device attributes such as group name and permissions is possible by creating extra udev rules, matching on something like this. The vendor and product can be found by searching the /sys/devices directory entries or using udevadm info after the device has been attached. See the documentation in the current udev directory of /usr/share/doc for details.

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="05d8", SYSFS{idProduct}=="4002", \
  GROUP:="scanner", MODE:="0660"

Note

The above line is used for descriptive purposes only. The scanner udev rules are put into place when installing SANE-1.0.25.

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 doe not set up the /dev/dvd device properly, it can be installed using the following modification to the default udev rules. As the root user, run:

sed '1d;/SYMLINK.*cdrom/ a\
KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1", SYMLINK+="dvd", OPTIONS+="link_priority=-100"' \
/lib/udev/rules.d/60-cdrom_id.rules > /etc/udev/rules.d/60-cdrom_id.rules

Last updated on 2016-08-31 14:55:52 -0700

Configuring for Adding Users

Together, the /usr/sbin/useradd command and /etc/skel directory (both are easy to set up and use) provide a way to assure new users are added to your LFS system with the same beginning settings for things such as the PATH, keyboard processing and other environmental variables. Using these two facilities makes it easier to assure this initial state for each new user added to the system.

The /etc/skel directory holds copies of various initialization and other files that may be copied to the new user's home directory when the /usr/sbin/useradd program adds the new user.

Useradd

The useradd program uses a collection of default values kept in /etc/default/useradd. This file is created in a base LFS installation by the Shadow package. If it has been removed or renamed, the useradd program uses some internal defaults. You can see the default values by running /usr/sbin/useradd -D.

To change these values, simply modify the /etc/default/useradd file as the root user. An alternative to directly modifying the file is to run useradd as the root user while supplying the desired modifications on the command line. Information on how to do this can be found in the useradd man page.

/etc/skel

To get started, create an /etc/skel directory and make sure it is writable only by the system administrator, usually root. Creating the directory as root is the best way to go.

The mode of any files from this part of the book that you put in /etc/skel should be writable only by the owner. Also, since there is no telling what kind of sensitive information a user may eventually place in their copy of these files, you should make them unreadable by "group" and "other".

You can also put other files in /etc/skel and different permissions may be needed for them.

Decide which initialization files should be provided in every (or most) new user's home directory. The decisions you make will affect what you do in the next two sections, The Bash Shell Startup Files and The vimrc Files. Some or all of those files will be useful for root, any already-existing users, and new users.

The files from those sections that you might want to place in /etc/skel include .inputrc, .bash_profile, .bashrc, .bash_logout, .dircolors, and .vimrc. If you are unsure which of these should be placed there, just continue to the following sections, read each section and any references provided, and then make your decision.

You will run a slightly modified set of commands for files which are placed in /etc/skel. Each section will remind you of this. In brief, the book's commands have been written for files not added to /etc/skel and instead just sends the results to the user's home directory. If the file is going to be in /etc/skel, change the book's command(s) to send output there instead and then just copy the file from /etc/skel to the appropriate directories, like /etc, ~ or the home directory of any other user already in the system.

When Adding a User

When adding a new user with useradd, use the -m parameter, which tells useradd to create the user's home directory and copy files from /etc/skel (can be overridden) to the new user's home directory. For example (perform as the root user):

useradd -m <newuser>

Last updated on 2007-10-16 06:49:09 -0700

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
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
mysql 40 40
postgres 41 41
dovecot 42 42
dovenull 43 43
ftp 45 45
proftpd 46 46
vsftpd 47 47
rsyncd 48 48
sshd 50 50
stunnel 51 51
svn 56 56
svntest 57
games 60 60
kvm 61
wireshark 62
lightdm 63 63
sddm 64 64
scanner 70
colord 71 71
systemd-bus-proxy 72 72
systemd-journal-gateway 73 73
systemd-journal-remote 74 74
systemd-journal-upload 75 75
systemd-network 76 76
systemd-resolve 77 77
systemd-timesync 78 78
systemd-coredump 79 79
ldap 83 83
avahi 84 84
avahi-autoipd 85 85
netdev 86
ntp 87 87
unbound 88 88
plugdev 90
anonymous 98
nobody 99
nogroup 99

One value that is missing is 65534. This value is customarily assigned to the user nobody and group nogroup and is unnecessary.

Last updated on 2016-02-12 01:53:39 -0800

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

/etc/profile

Here is a base /etc/profile. This file starts by setting up some helper functions and some basic parameters. It specifies some bash history parameters and, for security purposes, disables keeping a permanent history file for the root user. It also sets a default user prompt. It then calls small, single purpose scripts in the /etc/profile.d directory to provide most of the initialization.

For more information on the escape sequences you can use for your prompt (i.e., the PS1 environment variable) see info bash -- Node: Printing a Prompt.

cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>

# System wide environment variables and startup programs.

# System wide aliases and functions should go in /etc/bashrc.  Personal
# environment variables and startup programs should go into
# ~/.bash_profile.  Personal aliases and functions should go into
# ~/.bashrc.

# Functions to help us manage paths.  Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}

pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}

pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}

export -f pathremove pathprepend pathappend

# Set the initial path
export PATH=/bin:/usr/bin

if [ $EUID -eq 0 ] ; then
        pathappend /sbin:/usr/sbin
        unset HISTFILE
fi

# Setup some environment variables.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"

# Set some defaults for graphical systems
export XDG_DATA_DIRS=/usr/share/
export XDG_CONFIG_DIRS=/etc/xdg/

# Setup a red prompt for root and a green one for users.
NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done

unset script RED GREEN NORMAL

# End /etc/profile
EOF

The /etc/profile.d Directory

Now create the /etc/profile.d directory, where the individual initialization scripts are placed:

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

/etc/profile.d/dircolors.sh

This script uses the ~/.dircolors and /etc/dircolors files to control the colors of file names in a directory listing. They control colorized output of things like ls --color. The explanation of how to initialize these files is at the end of this section.

cat > /etc/profile.d/dircolors.sh << "EOF"
# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
        eval $(dircolors -b /etc/dircolors)
fi

if [ -f "$HOME/.dircolors" ] ; then
        eval $(dircolors -b $HOME/.dircolors)
fi

alias ls='ls --color=auto'
alias grep='grep --color=auto'
EOF

/etc/profile.d/extrapaths.sh

This script adds some useful paths to the PATH and can be used to customize other PATH related environment variables (e.g. LD_LIBRARY_PATH, etc) that may be needed for all users.

cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
        pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
        pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
        pathprepend /usr/local/sbin
fi

# Set some defaults before other applications add to these paths.
pathappend /usr/share/man  MANPATH
pathappend /usr/share/info INFOPATH
EOF

/etc/profile.d/readline.sh

This script sets up the default inputrc configuration file. If the user does not have individual settings, it uses the global file.

cat > /etc/profile.d/readline.sh << "EOF"
# Setup the INPUTRC environment variable.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC
EOF

/etc/profile.d/umask.sh

Setting the umask value is important for security. Here the default group write permissions are turned off for system users and when the user name and group name are not the same.

cat > /etc/profile.d/umask.sh << "EOF"
# By default, the umask should be set.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
  umask 002
else
  umask 022
fi
EOF

/etc/profile.d/i18n.sh

This script sets an environment variable necessary for native language support. A full discussion on determining this variable can be found on the LFS Bash Shell Startup Files page.

cat > /etc/profile.d/i18n.sh << "EOF"
# Set up i18n variables
export LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

Other Initialization Values

Other initialization can easily be added to the profile by adding additional scripts to the /etc/profile.d directory.

/etc/bashrc

Here is a base /etc/bashrc. Comments in the file should explain everything you need.

cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# System wide aliases and functions.

# System wide environment variables and startup programs should go into
# /etc/profile.  Personal environment variables and startup programs
# should go into ~/.bash_profile.  Personal aliases and functions should
# go into ~/.bashrc

# Provides colored /bin/ls and /bin/grep commands.  Used in conjunction
# with code in /etc/profile.

alias ls='ls --color=auto'
alias grep='grep --color=auto'

# Provides prompt for non-login shells, specifically shells started
# in the X environment. [Review the LFS archive thread titled
# PS1 Environment Variable for a great case study behind this script
# addendum.]

NORMAL="\[\e[0m\]"
RED="\[\e[1;31m\]"
GREEN="\[\e[1;32m\]"
if [[ $EUID == 0 ]] ; then
  PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL"
else
  PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL"
fi

unset RED GREEN NORMAL

# End /etc/bashrc
EOF

~/.bash_profile

Here is a base ~/.bash_profile. If you want each new user to have this file automatically, just change the output of the command to /etc/skel/.bash_profile and check the permissions after the command is run. You can then copy /etc/skel/.bash_profile to the home directories of already existing users, including root, and set the owner and group appropriately.

cat > ~/.bash_profile << "EOF"
# Begin ~/.bash_profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Personal environment variables and startup programs.

# Personal aliases and functions should go in ~/.bashrc.  System wide
# environment variables and startup programs are in /etc/profile.
# System wide aliases and functions are in /etc/bashrc.

if [ -f "$HOME/.bashrc" ] ; then
  source $HOME/.bashrc
fi

if [ -d "$HOME/bin" ] ; then
  pathprepend $HOME/bin
fi

# Having . in the PATH is dangerous
#if [ $EUID -gt 99 ]; then
#  pathappend .
#fi

# End ~/.bash_profile
EOF

~/.bashrc

Here is a base ~/.bashrc. The comments and instructions for using /etc/skel for .bash_profile above also apply here. Only the target file names are different.

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

# End ~/.bashrc
EOF

~/.bash_logout

This is an empty ~/.bash_logout that can be used as a template. You will notice that the base ~/.bash_logout does not include a clear command. This is because the clear is handled in the /etc/issue file.

cat > ~/.bash_logout << "EOF"
# Begin ~/.bash_logout
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>

# Personal items to perform on logout.

# End ~/.bash_logout
EOF

/etc/dircolors

If you want to use the dircolors capability, then run the following command. The /etc/skel setup steps shown above also can be used here to provide a ~/.dircolors file when a new user is set up. As before, just change the output file name on the following command and assure the permissions, owner, and group are correct on the files created and/or copied.

dircolors -p > /etc/dircolors

If you wish to customize the colors used for different file types, you can edit the /etc/dircolors file. The instructions for setting the colors are embedded in the file.

Finally, Ian Macdonald has written an excellent collection of tips and tricks to enhance your shell environment. You can read it online at http://www.caliban.org/bash/index.shtml.

Last updated on 2015-11-13 06:24:57 -0800

The /etc/vimrc and ~/.vimrc Files

The LFS book installs Vim as its text editor. At this point it should be noted that there are a lot of different editing applications out there including Emacs, nano, Joe and many more. Anyone who has been around the Internet (especially usenet) for a short time will certainly have observed at least one flame war, usually involving Vim and Emacs users!

The LFS book creates a basic vimrc file. In this section you'll find an attempt to enhance this file. At startup, vim reads the global configuration file (/etc/vimrc) as well as a user-specific file (~/.vimrc). Either or both can be tailored to suit the needs of your particular system.

Here is a slightly expanded .vimrc that you can put in ~/.vimrc to provide user specific effects. Of course, if you put it into /etc/skel/.vimrc instead, it will be made available to users you add to the system later. You can also copy the file from /etc/skel/.vimrc to the home directory of users already on the system, such as root. Be sure to set permissions, owner, and group if you do copy anything directly from /etc/skel.

" Begin .vimrc

set columns=80
set wrapmargin=8
set ruler

" End .vimrc

Note that the comment tags are " instead of the more usual # or //. This is correct, the syntax for vimrc is slightly unusual.

Below you'll find a quick explanation of what each of the options in this example file means here:

  • set columns=80: This simply sets the number of columns used on the screen.

  • set wrapmargin=8: This is the number of characters from the right window border where wrapping starts.

  • set ruler: This makes vim show the current row and column at the bottom right of the screen.

More information on the many vim options can be found by reading the help inside vim itself. Do this by typing :help in vim to get the general help, or by typing :help usr_toc.txt to view the User Manual Table of Contents.

Last updated on 2007-10-16 06:02:24 -0700

Customizing your Logon with /etc/issue

When you first boot up your new LFS system, the logon screen will be nice and plain (as it should be in a bare-bones system). Many people however, will want their system to display some information in the logon message. This can be accomplished using the file /etc/issue.

The /etc/issue file is a plain text file which will also accept certain escape sequences (see below) in order to insert information about the system. There is also the file issue.net which can be used when logging on remotely. ssh however, will only use it if you set the option in the configuration file and will not interpret the escape sequences shown below.

One of the most common things which people want to do is clear the screen at each logon. The easiest way of doing that is to put a "clear" escape sequence into /etc/issue. A simple way of doing this is to issue the command clear > /etc/issue. This will insert the relevant escape code into the start of the /etc/issue file. Note that if you do this, when you edit the file, you should leave the characters (normally '^[[H^[[2J') on the first line alone.

Note

Terminal escape sequences are special codes recognized by the terminal. The ^[ represents an ASCII ESC character. The sequence ESC [ H puts the cursor in the upper left hand corner of the screen and ESC 2 J erases the screen. For more information on terminal escape sequences see http://rtfm.etla.org/xterm/ctlseq.html

The following sequences are recognized by agetty (the program which usually parses /etc/issue). This information is from man agetty where you can find extra information about the logon process.

The issue file can contain certain character sequences to display various information. All issue sequences consist of a backslash (\) immediately followed by one of the letters explained below (so \d in /etc/issue would insert the current date).

b   Insert the baudrate of the current line.
d   Insert the current date.
s   Insert the system name, the name of the operating system.
l   Insert the name of the current tty line.
m   Insert the architecture identifier of the machine, e.g., i686.
n   Insert the nodename of the machine, also known as the hostname.
o   Insert the domainname of the machine.
r   Insert the release number of the kernel, e.g., 2.6.11.12.
t   Insert the current time.
u   Insert the number of current users logged in.
U   Insert the string "1 user" or "<n> users" where <n> is the
    number of current users logged in.
v   Insert the version of the OS, e.g., the build-date etc.

Last updated on 2007-04-04 12:42:53 -0700

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-20170225 package.

make install-random

Last updated on 2016-06-03 20:04:06 -0700

lsb_release-1.4

Introduction to lsb_release

The lsb_release script gives information about the Linux Standards Base (LSB) status of the distribution.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lsb_release

Installation of lsb_release

First fix a minor display problem:

sed -i "s|n/a|unavailable|" lsb_release

Install lsb_release by running the following commands:

./help2man -N --include ./lsb_release.examples \
              --alt_version_key=program_version ./lsb_release > lsb_release.1

Now, as the root user:

install -v -m 644 lsb_release.1 /usr/share/man/man1/lsb_release.1 &&
install -v -m 755 lsb_release /usr/bin/lsb_release

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
Installed Library: None
Installed Directories: None

Short Descriptions

lsb_release

is a script to give LSB data.

Last updated on 2017-02-14 13:20:57 -0800

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.

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 http://www.heise.de/security heise.de (German) or cert.hr (Croatian). These are not linux-specific. There is also a daily update at lwn.net for subscribers (free access to the data after 2 weeks, but their vulnerabilities database at lwn.net/Vulnerabilities is unrestricted).

For some packages, subscribing to their 'announce' lists will provide prompt news of newer versions.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vulnerabilities

Last updated on 2015-09-20 15:38:20 -0700

Certificate Authority Certificates

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-8.0 platform.

Introduction to Certificate Authorities

Package Information

Additional Downloads

Certificate Authority Certificates Dependencies

Required

OpenSSL-1.0.2k

Optional (runtime)

Java-1.8.0.121 or OpenJDK-1.8.0.121, and NSS-3.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cacerts

Installation of Certificate Authority Certificates

The make-ca.sh script will process the certificates included in the certdata.txt file for use in multiple certificate stores (if the associated applications are present on the system). Additionally, any local certificates stored in /etc/ssl/local will be imported to the certificate stores. Certificates in this directory should be stored as PEM encoded OpenSSL trusted certificates.

To create an OpenSSL trusted certificate from a regular PEM encoded file, provided by a CA not included in Mozilla's certificate distribution, you need to add trust arguments to the openssl command, and create a new certificate. There are three trust types that are recognised by the make-ca.sh script, SSL/TLS, S/Mime, and code signing. For example, to allow a certificate to be trusted for both SSL/TLS and S/Mime, but explicitly rejected for code signing, you could use the following commands to create a new trusted certificate that has those trust attributes:

openssl x509 -in MyRootCA.pem -text -fingerprint -setalias "My Root CA 1"     \
        -addtrust serverAuth -addtrust emailProtection -addreject codeSigning \
        > MyRootCA-trusted.pem

If a trust argument is omitted, the certificate is neither trusted, nor rejected. 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 (used for GnuTLS), it must have serverAuth trust.

To install the various certificate stores, first install the make-ca.sh script into the correct location. As the root user:

install -vm755 make-ca.sh-20170119 /usr/sbin/make-ca.sh

As the root user, make sure that certdata.txt is in the current directory, and update the certificate stores with the following command:

/usr/sbin/make-ca.sh

You should periodically download a copy of certdata.txt and run the make-ca.sh script (as the root user), or as part of a monthly cron job to ensure that you have the latest available version of the certificates.

Note

If running the script a second time with the same version of certdata.txt, for instance, to add additional stores as the requisite software is installed, add the -f switch to the command line. If packaging, run make-ca.sh --help to see all available command line options.

The certdata.txt file provided by BLFS is obtained from the mozilla-release branch, and is modified to provide a simple dated revision. This will be the correct version for most systems. There are, however, 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.29. Additional upstream downloads are available at the links below.

Contents

Installed Programs: make-ca.sh
Installed Libraries: None
Installed Directories: /etc/ssl/{certs,java,local} and /etc/pki/{nssdb,anchors}

Short Descriptions

make-ca.sh

is a shell script that adapts a current version of certdata.txt, and prepares it for use as the system certificate store.

Last updated on 2017-02-14 22:04:32 -0800

ConsoleKit2-1.0.2

Introduction to ConsoleKit

The ConsoleKit package is a framework for keeping track of the various users, sessions, and seats present on a system. It provides a mechanism for software to react to changes of any of these items or of any of the metadata associated with them.

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

Package Information

ConsoleKit Dependencies

Required

dbus-glib-0.108 and Xorg Libraries

Recommended

Warning

If you intend NOT to install polkit, you will need to manually edit the ConsoleKit.conf file to lock down the service. Failure to do so may be a huge SECURITY HOLE.

Optional

xmlto-0.0.28

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/consolekit

Installation of ConsoleKit

Install ConsoleKit by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --enable-udev-acl    \
            --enable-pam-module  \
            --enable-polkit      \
            --with-xinitrc-dir=/etc/X11/app-defaults/xinitrc.d \
            --docdir=/usr/share/doc/ConsoleKit-1.0.2           \
            --with-systemdsystemunitdir=no                     &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&

mv -v /etc/X11/app-defaults/xinitrc.d/90-consolekit{,.sh}

Command Explanations

--enable-udev-acl: This switch enables building of the udev-acl tool, which is used to allow normal users to access device nodes normally only accessible to root.

--enable-pam-module: This switch enables building of the ConsoleKit PAM module which is needed for ConsoleKit to work correctly with PAM. Remove if Linux PAM is NOT installed.

--enable-polkit: Enable PolicyKit support.

--with-xinitrc-dir=/etc/X11/app-defaults/xinitrc.d: Fix the location of the 90-consolekit.sh script. Notice that the script has been renamed after installation, because xinitrc only sources script names ending with extension .sh.

--with-systemdsystemunitdir=no: Disable attempting to build with systemd libraries.

--enable-docbook-docs: Use this switch if xmlto is installed and you wish to build the user and API documentation.

Configuring ConsoleKit

PAM Module Configuration

If you use Linux PAM, it needs to be configured to activate ConsoleKit upon user login. This can be achieved by editing the /etc/pam.d/system-session file as the root user:

cat >> /etc/pam.d/system-session << "EOF"
# Begin ConsoleKit addition

session   optional    pam_loginuid.so
session   optional    pam_ck_connector.so nox11

# End ConsoleKit addition
EOF

You will also need a helper script that creates a file in /var/run/console named as the currently logged in user and that contains the D-Bus address of the session. You can create the script by running the following commands as the root user:

cat > /usr/lib/ConsoleKit/run-session.d/pam-foreground-compat.ck << "EOF"
#!/bin/sh
TAGDIR=/var/run/console

[ -n "$CK_SESSION_USER_UID" ] || exit 1
[ "$CK_SESSION_IS_LOCAL" = "true" ] || exit 0

TAGFILE="$TAGDIR/`getent passwd $CK_SESSION_USER_UID | cut -f 1 -d:`"

if [ "$1" = "session_added" ]; then
    mkdir -p "$TAGDIR"
    echo "$CK_SESSION_ID" >> "$TAGFILE"
fi

if [ "$1" = "session_removed" ] && [ -e "$TAGFILE" ]; then
    sed -i "\%^$CK_SESSION_ID\$%d" "$TAGFILE"
    [ -s "$TAGFILE" ] || rm -f "$TAGFILE"
fi
EOF
chmod -v 755 /usr/lib/ConsoleKit/run-session.d/pam-foreground-compat.ck

See /usr/share/doc/ConsoleKit/spec/ConsoleKit.html for more configuration.

Contents

Installed Programs: ck-history, ck-launch-session, ck-list-sessions, ck-log-system-restart, ck-log-system-start, ck-log-system-stop and console-kit-daemon
Installed Libraries: libck-connector.so and pam_ck_connector.so
Installed Directories: /etc/ConsoleKit, /usr/{include,lib}/ConsoleKit, /usr/share/doc/ConsoleKit-1.0.2, and /var/{log,run}/ConsoleKit

Short Descriptions

ck-history

is a utility that provides information from the ConsoleKit database about what users have logged into the system.

ck-launch-session

is a utility for starting a command in its own ConsoleKit session.

ck-list-sessions

list sessions with respective properties. Also good for debugging purposes.

ck-log-system-restart

write system restart to log.

ck-log-system-start

write system start to log.

ck-log-system-stop

write system stop to log.

console-kit-daemon

is the ConsoleKit daemon.

Last updated on 2017-02-17 12:01:55 -0800

CrackLib-2.9.6

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-8.0 platform.

Package Information

Additional Downloads

There are additional word lists available for download, e.g., from http://www.cotse.com/tools/wordlists.htm. CrackLib can utilize as many, or as few word lists you choose to install.

Important

Users tend to base their passwords on regular words of the spoken language, and crackers know that. CrackLib is intended to filter out such bad passwords at the source using a dictionary created from word lists. To accomplish this, the word list(s) for use with CrackLib must be an exhaustive list of words and word-based keystroke combinations likely to be chosen by users of the system as (guessable) passwords.

The default word list recommended above for downloading mostly satisfies this role in English-speaking countries. In other situations, it may be necessary to download (or even create) additional word lists.

Note that word lists suitable for spell-checking are not usable as CrackLib word lists in countries with non-Latin based alphabets, because of “word-based keystroke combinations” that make bad passwords.

CrackLib Dependencies

Optional

Python-2.7.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cracklib

Installation of CrackLib

Install CrackLib by running the following commands:

sed -i '/skipping/d' util/packer.c &&

./configure --prefix=/usr    \
            --disable-static \
            --with-default-dict=/lib/cracklib/pw_dict &&
make

Now, as the root user:

make install                      &&
mv -v /usr/lib/libcrack.so.* /lib &&
ln -sfv ../../lib/$(readlink /usr/lib/libcrack.so) /usr/lib/libcrack.so

Issue the following commands as the root user to install the recommended word list and create the CrackLib dictionary. Other word lists (text based, one word per line) can also be used by simply installing them into /usr/share/dict and adding them to the create-cracklib-dict command.

install -v -m644 -D    ../cracklib-words-2.9.6.gz \
                         /usr/share/dict/cracklib-words.gz     &&

gunzip -v                /usr/share/dict/cracklib-words.gz     &&
ln -v -sf cracklib-words /usr/share/dict/words                 &&
echo $(hostname) >>      /usr/share/dict/cracklib-extra-words  &&
install -v -m755 -d      /lib/cracklib                         &&

create-cracklib-dict     /usr/share/dict/cracklib-words \
                         /usr/share/dict/cracklib-extra-words

If desired, check the proper operation of the library as an unprivileged user by issuing the following command:

make test

Important

If you are installing CrackLib after your LFS system has been completed and you have the Shadow package installed, you must reinstall Shadow-4.4 if you wish to provide strong password support on your system. If you are now going to install the Linux-PAM-1.3.0 package, you may disregard this note as Shadow will be reinstalled after the Linux-PAM installation.

Command Explanations

sed -i '/skipping/d' util/packer.c: Remove a meaningless warning.

--with-default-dict=/lib/cracklib/pw_dict: This parameter forces the installation of the CrackLib dictionary to the /lib hierarchy.

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

mv -v /usr/lib/libcrack.so.2* /lib and ln -v -sf ../../lib/libcrack.so.2.8.1 ...: These two commands move the libcrack.so.2.9.0 library and associated symlink from /usr/lib to /lib, then recreates the /usr/lib/libcrack.so symlink pointing to the relocated file.

install -v -m644 -D ...: This command creates the /usr/share/dict directory (if it doesn't already exist) and installs the compressed word list there.

ln -v -s cracklib-words /usr/share/dict/words: The word list is linked to /usr/share/dict/words as historically, words is the primary word list in the /usr/share/dict directory. Omit this command if you already have a /usr/share/dict/words file installed on your system.

echo $(hostname) >>...: The value of hostname is echoed to a file called cracklib-extra-words. This extra file is intended to be a site specific list which includes easy to guess passwords such as company or department names, user names, product names, computer names, domain names, etc.

create-cracklib-dict ...: This command creates the CrackLib dictionary from the word lists. Modify the command to add any additional word lists you have installed.

Contents

Installed Programs: cracklib-check, cracklib-format, cracklib-packer, cracklib-unpacker and create-cracklib-dict
Installed Libraries: libcrack.so and the _cracklibmodule.so Python module
Installed Directories: /lib/cracklib, /usr/share/dict and /usr/share/cracklib

Short Descriptions

cracklib-check

is used to determine if a password is strong.

cracklib-format

is used to format text files (lowercases all words, removes control characters and sorts the lists).

cracklib-packer

creates a database with words read from standard input.

cracklib-unpacker

displays on standard output the database specified.

create-cracklib-dict

is used to create the CrackLib dictionary from the given word list(s).

libcrack.so

provides a fast dictionary lookup method for strong password enforcement.

Last updated on 2017-02-15 19:06:46 -0800

Cyrus SASL-2.1.26

Introduction to Cyrus SASL

The Cyrus SASL package contains a Simple Authentication and Security Layer, a method for adding authentication support to connection-based protocols. To use SASL, a protocol includes a command for identifying and authenticating a user to a server and for optionally negotiating protection of subsequent protocol interactions. If its use is negotiated, a security layer is inserted between the protocol and the connection.

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

Package Information

Additional Downloads

Cyrus SASL Dependencies

Required

OpenSSL-1.0.2k

Recommended
Optional

Linux-PAM-1.3.0, MIT Kerberos V5-1.15, MariaDB-10.1.21 or MySQL, OpenJDK-1.8.0.121, OpenLDAP-2.4.44, PostgreSQL-9.6.2, SQLite-3.17.0, krb4 and Dmalloc

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cyrus-sasl

Installation of Cyrus SASL

Install Cyrus SASL by running the following commands:

patch -Np1 -i ../cyrus-sasl-2.1.26-fixes-3.patch &&
autoreconf -fi &&

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --enable-auth-sasldb \
            --with-dbpath=/var/lib/sasl/sasldb2 \
            --with-saslauthd=/var/run/saslauthd &&
make

This package does not come with a test suite. If you are planning on using the GSSAPI authentication mechanism, it is recommended to 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 http://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.26 &&
install -v -m644  doc/{*.{html,txt,fig},ONEWS,TODO} \
    saslauthd/LDAP_SASLAUTHD /usr/share/doc/cyrus-sasl-2.1.26 &&
install -v -dm700 /var/lib/sasl

Command Explanations

--with-dbpath=/var/lib/sasl/sasldb2: This switch forces the sasldb database to be created in /var/lib/sasl instead of /etc.

--with-saslauthd=/var/run/saslauthd: This switch forces saslauthd to use the FHS compliant directory /var/run/saslauthd for variable run-time data.

--enable-auth-sasldb: This switch enables SASLDB authentication backend.

--with-dblib=gdbm: This switch forces GDBM to be used instead of Berkeley DB.

--with-ldap: This switch enables the OpenLDAP support.

--enable-ldapdb: This switch enables the LDAPDB authentication backend. There is a circular dependency with this parameter. See http://wiki.linuxfromscratch.org/blfs/wiki/cyrus-sasl for a solution to this problem.

--enable-java: This switch enables compiling of the Java support libraries.

--enable-login: This option enables unsupported LOGIN authentication.

--enable-ntlm: This option enables unsupported NTLM authentication.

install -v -m644 ...: These commands install documentation which is not installed by the make install command.

install -v -m700 -d /var/lib/sasl: This directory must exist when starting saslauthd or using the sasldb plugin. If you're not going to be running the daemon or using the plugins, you may omit the creation of this directory.

Configuring Cyrus SASL

Config Files

/etc/saslauthd.conf (for saslauthd LDAP configuration) and /etc/sasl2/Appname.conf (where "Appname" is the application defined name of the application)

Configuration Information

See file:///usr/share/doc/cyrus-sasl-2.1.26/sysadmin.html for information on what to include in the application configuration files.

See file:///usr/share/doc/cyrus-sasl-2.1.26/LDAP_SASLAUTHD for configuring saslauthd with OpenLDAP.

See file:///usr/share/doc/cyrus-sasl-2.1.26/gssapi.html 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-20170225 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.26 and /var/lib/sasl

Short Descriptions

pluginviewer

is used to list loadable SASL plugins and their properties.

saslauthd

is the SASL authentication server.

sasldblistusers2

is used to list the users in the SASL password database sasldb2.

saslpasswd2

is used to set and delete a user's SASL password and mechanism specific secrets in the SASL password database sasldb2.

testsaslauthd

is a test utility for the SASL authentication server.

libsasl2.so

is a general purpose authentication library for server and client applications.

Last updated on 2017-02-14 23:25:58 -0800

GnuPG-2.1.18

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-8.0 platform.

Package Information

GnuPG 2 Dependencies

Required

Libassuan-2.4.3, libgcrypt-1.7.6, libgpg-error-1.26, Libksba-1.3.5, and npth-1.3

Recommended
Optional

cURL-7.52.1, libusb-compat-0.1.5, an MTA, OpenLDAP-2.4.44, SQLite-3.17.0, texlive-20160523b (or install-tl-unx), and GNU adns

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnupg2

Installation of GnuPG

Warning

If you are upgrading from gnupg prior to version 2.1, upstream developers recommend to backup ~/.gnupg, because some additional configuration will probably be necessary, and you could lose your keys. You can find instructions at http://jo-ke.name/wp/?p=111 and https://wiki.archlinux.org/index.php/GnuPG#.22Lost.22_keys.2C_upgrading_to_gnupg_version_2.1.

If the top directory path where the source is unpacked contains symbolic links, the openpgp tests might fail. If this is your case and you wish to run the test suite, fix that with:

sed -e '/noinst_SCRIPTS = gpg-zip/c sbin_SCRIPTS += gpg-zip' \
    -i tools/Makefile.in

Some tests will hang infinately. If you will run the tests, comment the failing portions of the tests:

sed -i -e '/^  test_agent_protect/s:^://:' agent/t-protect.c &&
sed -i -e '174,186 s/^/;;/'                tests/openpgp/ecc.scm

Install GnuPG by running the following commands:

./configure --prefix=/usr            \
            --enable-symcryptrun     \
            --enable-maintainer-mode \
            --docdir=/usr/share/doc/gnupg-2.1.18 &&
make &&

makeinfo --html --no-split \
         -o doc/gnupg_nochunks.html doc/gnupg.texi &&
makeinfo --plaintext       \
         -o doc/gnupg.txt           doc/gnupg.texi

If you have texlive-20160523b installed and you wish to create documentation in alternate formats, issue the following commands:

make -C doc pdf ps html

To test the results, issue: make check.

Note that if you have already installed GnuPG, the instructions below will overwrite /usr/share/man/man1/gpg-zip.1. Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/gnupg-2.1.18/html            &&
install -v -m644    doc/gnupg_nochunks.html \
                    /usr/share/doc/gnupg-2.1.18/html/gnupg.html &&
install -v -m644    doc/*.texi doc/gnupg.txt \
                    /usr/share/doc/gnupg-2.1.18

We recommend the creation of symlinks for compatibility with the first version of GnuPG, because some programs or scripts need them. Issue, as root user:

for f in gpg gpgv
do
  ln -svf ${f}2.1 /usr/share/man/man1/$f.1 &&
  ln -svf ${f}2   /usr/bin/$f
done
unset f

If you created alternate formats of the documentation, install it using the following command as the root user:

install -v -m644 doc/gnupg.html/* \
                 /usr/share/doc/gnupg-2.1.18/html &&
install -v -m644 doc/gnupg.{pdf,dvi,ps} \
                 /usr/share/doc/gnupg-2.1.18

Command Explanations

sed ... tools/Makefile.in: This command is needed to build the gpg-zip program.

--docdir=/usr/share/doc/gnupg-2.1.18: This switch changes the default docdir to /usr/share/doc/gnupg-2.1.18.

--enable-symcryptrun: This switch enables building the symcryptrun program.

--enable-maintainer-mode: This switch is needed for proper completion of the tests.

--enable-g13: This switch enables building the g13 program.

Contents

Installed Programs: addgnupghome, applygnupgdefaults, dirmngr, dirmngr-client, g13, gpg-agent, gpg-connect-agent, gpg, gpg2, gpgconf, gpgparsemail, gpgscm, gpgsm, gpgtar, gpgv, gpgv2, igpg-zip, kbxutil, symcryptrun, and watchgnupg
Installed Libraries: None
Installed Directories: /usr/share/doc/gnupg-2.1.18 and /usr/share/gnupg

Short Descriptions

addgnupghome

is used to create and populate 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 gpg2 and gpgsm as well as for a couple of other utilities.

gpg-connect-agent

is a utility used to communicate with a running gpg-agent.

gpg

(optional) is a symlink to gpg2 for compatibility with the first version of GnuPG.

gpg2

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

gpgtar

is a tool to encrypt or sign files into an archive.

gpgv

(optional) is a symlink to gpgv2 for compatibility with the first version of GnuPG.

gpgv2

is a verify only version of gpg2.

gpg-zip

encrypts or signs files into an archive.

kbxutil

is used to list, export and import Keybox data.

symcryptrun

is a simple symmetric encryption tool.

watchgnupg

is used to listen to a Unix Domain socket created by any of the GnuPG tools.

Last updated on 2017-02-18 22:13:39 -0800

GnuTLS-3.5.9

Introduction to GnuTLS

The GnuTLS package contains libraries and userspace tools which provide a secure layer over a reliable transport layer. Currently the GnuTLS library implements the proposed standards by the IETF's TLS working group. Quoting from the TLS protocol specification:

The TLS protocol provides communications privacy over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.

GnuTLS provides support for TLS 1.2, TLS 1.1, TLS 1.0, and SSL 3.0 protocols, TLS extensions, including server name and max record size. Additionally, the library supports authentication using the SRP protocol, X.509 certificates and OpenPGP keys, along with support for the TLS Pre-Shared-Keys (PSK) extension, the Inner Application (TLS/IA) extension and X.509 and OpenPGP certificate handling.

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

Package Information

GnuTLS Dependencies

Required

Nettle-3.3

Recommended
Optional

Doxygen-1.8.13, GTK-Doc-1.25, Guile-2.0.14, libidn-1.33, Net-tools-CVS_20101030 (used during the test suite), texlive-20160523b or install-tl-unx, Unbound-1.6.0 (to build the DANE library), Valgrind-3.12.0 (used during the test suite), autogen, cmocka, datefudge (used during the test suite), and Trousers (Trusted Platform Module support)

Note

Note that if you do not install libtasn1-4.10, an older version shipped in the GnuTLS tarball will be used instead.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnutls

Installation of GnuTLS

Install GnuTLS by running the following commands:

./configure --prefix=/usr \
            --with-default-trust-store-file=/etc/ssl/ca-bundle.crt &&
make

To test the results, issue: make check. If a prior version of GnuTLS (or the same version but without all of the recommended dependencies) has been installed, some tests may fail. If /usr/lib/libgnutls.so and the target of that symlink are moved or renamed so that they cannot be found, all tests should pass and the install procedure will restore libgnutls.so and the versioned library it points to.

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 to the /usr/share/gtk-doc/html/gnutls directory using the following command as the root user:

make -C doc/reference install-data-local

Command Explanations

--with-default-trust-store-file=/etc/ssl/ca-bundle.crt: This switch tells configure where to find the CA Certificates.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--enable-openssl-compatibility: Use this switch if you wish to build the OpenSSL compatibility library.

--without-p11-kit: use this switch if you have not installed p11-kit.

--with-included-unistring: uses the bundled version of libunistring, instead of the system one. Use this switch if you have not installed libunistring-0.9.7.

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, libgnutls-openssl.so, and /usr/lib/guile/2.0/guile-gnutls-v-2.so
Installed Directories: /usr/{include,share/gtk-doc/html,share/guile/site/2.0}/gnutls

Short Descriptions

certtool

is used to generate X.509 certificates, certificate requests, and private keys.

danetool

is a tool used to generate and check DNS resource records for the DANE protocol.

gnutls-cli

is a simple client program to set up a TLS connection to some other computer.

gnutls-cli-debug

is a simple client program to set up a TLS connection to some other computer and produces very verbose progress results.

gnutls-serv

is a simple server program that listens to incoming TLS connections.

ocsptool

is a program that can parse and print information about OCSP requests/responses, generate requests and verify responses.

p11tool

is a program that allows handling data from PKCS #11 smart cards and security modules.

psktool

is a simple program that generates random keys for use with TLS-PSK.

srptool

is a simple program that emulates the programs in the Stanford SRP (Secure Remote Password) libraries using GnuTLS.

libgnutls.so

contains the core API functions and X.509 certificate API functions.

Last updated on 2017-02-23 04:13:28 -0800

GPGME-1.8.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-8.0 platform.

Package Information

  • Download (FTP): ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.8.0.tar.bz2

  • Download MD5 sum: 722a4153904b9b5dc15485a22d29263b

  • Download size: 1.2 MB

  • Estimated disk space required: 134 MB (with all bindings, add 1 MB for tests)

  • Estimated build time: 1.3 SBU (with all bindings, add 1.3 SBU for tests)

GPGME Dependencies

Required

Libassuan-2.4.3

Optional

Doxygen-1.8.13 (for API documentation), GnuPG-2.1.18 (used during the testsuite), and Clisp-2.49, Python-2.7.13, Python-3.6.0, Qt-5.8.0, and/or SWIG-3.0.12 (for language bindings)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gpgme

Installation of GPGME

Fix a minor release error:

sed 's#@libsuffix@#.so#' -i lang/cpp/src/GpgmeppConfig.cmake.in.in

Install GPGME 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: gpgme-config and gpgme-tool
Installed Libraries: libgpgme-pthread.so and libgpgme.so
Installed Directory: /usr/share/common-lisp/source/gpgme

Short Descriptions

gpgme-config

is used to obtain GPGME compilation and linking information.

gpgme-tool

prints fingerprint and keyid with keyservers.

libgpgme-pthread.so

contains the GPGME API functions for applications using pthread.

libgpgme.so

contains the GPGME API functions.

Last updated on 2017-02-19 13:23:34 -0800

Haveged-1.9.1

Introduction to Haveged

The Haveged package contains a daemon that generates an unpredictable stream of random numbers and feeds the /dev/random device.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/haveged

Installation of Haveged

Install Haveged by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install &&
mkdir -pv    /usr/share/doc/haveged-1.9.1 &&
cp -v README /usr/share/doc/haveged-1.9.1

Configuring haveged

Boot Script

If you want the Haveged daemon to start automatically when the system is booted, install the /etc/rc.d/init.d/haveged init script included in the blfs-bootscripts-20170225 package (as the root user):

make install-haveged

Contents

Installed Programs: haveged
Installed Libraries: libhavege.so
Installed Directory: /usr/include/haveged

Short Descriptions

haveged

is a daemon that generates an unpredictable stream of random numbers harvested from the indirect effects of hardware events based on hidden processor states (caches, branch predictors, memory translation tables, etc).

Last updated on 2017-02-15 19:06:46 -0800

Iptables-1.6.1

Introduction to Iptables

The next part of this chapter deals with firewalls. The principal firewall tool for Linux is Iptables. You will need to install Iptables if you intend on using any form of a firewall.

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

Package Information

Iptables Dependencies

Optional

nftables

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/iptables

Kernel Configuration

A firewall in Linux is accomplished through a portion of the kernel called netfilter. The interface to netfilter is Iptables. To use it, the appropriate kernel configuration parameters are found in:

[*] Networking support  --->                                    [CONFIG_NET]
      Networking Options  --->
        [*] Network packet filtering framework (Netfilter) ---> [CONFIG_NETFILTER]

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.

For some non-x86 architectures, the raw kernel headers may be required. In that case, modify the KERNEL_DIR= parameter to point at the Linux source code.

Install Iptables by running the following commands:

./configure --prefix=/usr      \
            --sbindir=/sbin    \
            --disable-nftables \
            --enable-libipq    \
            --with-xtlibdir=/lib/xtables &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
ln -sfv ../../sbin/xtables-multi /usr/bin/iptables-xml &&

for file in ip4tc ip6tc ipq iptc xtables
do
  mv -v /usr/lib/lib${file}.so.* /lib &&
  ln -sfv ../../lib/$(readlink /usr/lib/lib${file}.so) /usr/lib/lib${file}.so
done

Command Explanations

--disable-nftables: This switch disables building nftables compat. Omit this switch if you have installed nftables.

--enable-libipq: This switch enables building of libipq.so which can be used by some packages outside of BLFS.

--with-xtlibdir=/lib/xtables: Ensure all Iptables modules are installed in the /lib/xtables directory.

--enable-nfsynproxy: This switch enables installation of nfsynproxy SYNPROXY configuration tool.

ln -sfv ../../sbin/xtables-multi /usr/bin/iptables-xml: Ensure the symbolic link for iptables-xml is relative.

Configuring Iptables

Introductory instructions for configuring your firewall are presented in the next section: Firewalling

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-20170225 package.

make install-iptables

Contents

Installed Programs: ip6tables, ip6tables-restore, ip6tables-save, iptables, 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-restore

is used to restore IP Tables from data specified on STDIN. Use I/O redirection provided by your shell to read from a file.

iptables-save

is used to dump the contents of an IP Table in easily parseable format to STDOUT. Use I/O-redirection provided by your shell to write to a file.

iptables-xml

is used to convert the output of iptables-save to an XML format. Using the iptables.xslt stylesheet converts the XML back to the format of iptables-restore.

ip6tables*

are a set of commands for IPV6 that parallel the iptables commands above.

nfsynproxy

(optional) configuration tool. SYNPROXY target makes handling of large SYN floods possible without the large performance penalties imposed by the connection tracking in such cases.

xtables-multi

is a binary that behaves according to the name it is called by.

Last updated on 2017-02-15 19:06:46 -0800

Setting Up a Network Firewall

Before you read this part of the chapter, you should have already installed iptables as described in the previous section.

Introduction to Firewall Creation

The general 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 flaws such as buffer overflows or other problems regarding its security. Furthermore, you trust every user accessing your services. In this world, you do not need to have a firewall.

In the real world however, daemons may be misconfigured and exploits against essential services are freely available. You may wish to choose which services are accessible by certain machines or you may wish to limit which machines or applications are allowed external access. Alternatively, you may simply not trust some of your applications or users. You are probably connected to the Internet. In this world, a firewall is essential.

Don't assume however, that having a firewall makes careful configuration redundant, or that it makes any negligent misconfiguration harmless. It doesn't prevent anyone from exploiting a service you intentionally offer but haven't recently updated or patched after an exploit went public. Despite having a firewall, you need to keep applications and daemons on your system properly configured and up to date. A firewall is not a cure all, but should be an essential part of your overall security strategy.

Meaning of the Word "Firewall"

The word firewall can have several different meanings.

This is a hardware device or software program commercially sold (or offered via freeware) by companies such as Symantec which claims that it secures 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.

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.

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.

Firewall with a Demilitarized Zone [Not Further Described Here]

This box performs masquerading or routing, but grants public access to some branch of your network which, because of public IPs and a physically separated structure, 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.

Now You Can Start to Build your Firewall

Caution

This introduction on how to setup a firewall is not a complete guide to securing systems. Firewalling is a complex issue that requires careful configuration. The scripts quoted here are simply intended to give examples of how a firewall works. They are not intended to fit into any particular configuration and may not provide complete protection from an attack.

Customization of these scripts for your specific situation will be necessary for an optimal configuration, but you should make a serious study of the iptables documentation and creating firewalls in general before hacking away. Have a look at the list of links for further reading at the end of this section for more details. There you will find a list of URLs that contain quite comprehensive information about building your own firewall.

The firewall configuration script installed in the iptables section differs from the standard configuration script. It only has two of the standard targets: start and status. The other targets are clear and lock. For instance if you issue:

/etc/rc.d/init.d/iptables start

the firewall will be restarted just as it is upon system startup. The status target will present a list of all currently implemented rules. The clear target turns off all firewall rules and the lock target will block all packets in and out of the computer with the exception of the loopback interface.

The main startup firewall is located in the file /etc/rc.d/rc.iptables. The sections below provide three different approaches that can be used for a system.

Note

You should always run your firewall rules from a script. This ensures consistency and a record of what was done. It also allows retention of comments that are essential for understanding the rules long after they were written.

Personal Firewall

A Personal Firewall is designed to let you access all the services offered on the Internet, but keep your box 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 2.6 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

# Log everything else. What's Windows' latest exploitable vulnerability?
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 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 BusyBox.

Masquerading Router

A true Firewall has two interfaces, one connected to an intranet, in this example eth0, and one connected to the Internet, here ppp0. To provide the maximum security for the firewall itself, make sure that there are no unnecessary servers running on it such as X11 et al. 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 "http://www.linuxfromscratch.org/blfs"
echo

# Insert iptables modules (not needed if built into the kernel).

modprobe nf_conntrack
modprobe nf_conntrack_ftp
modprobe xt_conntrack
modprobe xt_LOG
modprobe xt_state

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable Source Routed Packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# Don't send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

# Drop Spoofed Packets coming in on an interface where responses
# would result in the reply going out a different interface.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

# Log packets with impossible addresses.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# Be verbose on dynamic ip-addresses  (not needed in case of static IP)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr

# Disable Explicit Congestion Notification
# Too many routers are still ignorant
echo 0 > /proc/sys/net/ipv4/tcp_ecn

# Set a known state
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  DROP

# These lines are here in case rules are already in place and the
# script is ever rerun on the fly. We want to remove all rules and
# pre-existing user defined chains before we implement new rules.
iptables -F
iptables -X
iptables -Z

iptables -t nat -F

# Allow local connections
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow forwarding if the initiated on the intranet
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD ! -i ppp+ -m conntrack --ctstate NEW       -j ACCEPT

# Do masquerading
# (not needed if intranet is not using private ip-addresses)
iptables -t nat -A POSTROUTING -o ppp+ -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.

Note

If the interface you're connecting to the Internet doesn't connect via PPP, you will need to change <ppp+> to the name of the interface (e.g., eth1) which you are using.

BusyBox

This scenario isn't too different from the Masquerading Router, 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 a true concept of how to protect a server that offers services on the Internet goes far beyond the scope of this document. See the references at the end of this section 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 Masquerading Router 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 ! ppp+  -j ACCEPT
iptables -A OUTPUT -o ! ppp+  -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 certain delays because some implementations of these daemons have the feature of querying an identd 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':

    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 ppp+ -s 10.0.0.0/8     -j DROP
    iptables -A INPUT -i ppp+ -s 172.16.0.0/12  -j DROP
    iptables -A INPUT -i ppp+ -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 ppp0 -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.

Conclusion

Finally, there is one fact you must not forget: The effort spent attacking a system corresponds to the value the cracker expects to gain from it. If you are responsible for valuable information, you need to spend the time to protect it properly.

Last updated on 2016-06-04 22:57:10 -0700

libcap-2.25 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-8.0 platform.

Package Information

libcap Dependencies

Required

Linux-PAM-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libcap

Installation of libcap

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 /lib/security &&
install -v -m644 pam_cap/capability.conf /etc/security

Contents

Installed Programs: None
Installed Library: pam_cap.so
Installed Directories: None

Last updated on 2017-02-17 16:10:58 -0800

Linux-PAM-1.3.0

Introduction to Linux PAM

The Linux PAM package contains Pluggable Authentication Modules used to enable the local system administrator to choose how applications authenticate users.

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

Package Information

Additional Downloads

Optional Documentation

Linux PAM Dependencies

Optional

Berkeley DB-6.2.23, CrackLib-2.9.6, libtirpc-1.0.1 and Prelude

Optional (To Rebuild the Documentation)

docbook-xml-4.5, docbook-xsl-1.79.1, fop-2.1, libxslt-1.1.29 and either w3m-0.5.3 or elinks (but with a link calling it 'links') and remove the docu switch.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/linux-pam

Installation of Linux PAM

If you downloaded the documentation, unpack the tarball by issuing the following command.

tar -xf ../Linux-PAM-1.2.0-docs.tar.bz2 --strip-components=1

Install Linux PAM by running the following commands:

./configure --prefix=/usr                    \
            --sysconfdir=/etc                \
            --libdir=/usr/lib                \
            --disable-regenerate-docu        \
            --enable-securedir=/lib/security \
            --docdir=/usr/share/doc/Linux-PAM-1.3.0 &&
make

To test the results, a suitable /etc/pam.d/other configuration file must exist.

Reinstallation or upgrade of Linux PAM

If you have a system with Linux PAM installed and working, be careful when modifying the files in /etc/pam.d, since your system may become totally unusable. If you want to run the tests, you do not need to create another /etc/pam.d/other file. The installed one can be used for that purpose.

You should also be aware that make install overwrites the configuration files in /etc/security as well as /etc/environment. In case you have modified those files, be sure to back them up.

For a first installation, create the configuration file by issuing the following commands as the root user:

install -v -m755 -d /etc/pam.d &&

cat > /etc/pam.d/other << "EOF"
auth     required       pam_deny.so
account  required       pam_deny.so
password required       pam_deny.so
session  required       pam_deny.so
EOF

Now run the tests by issuing make check. Ensure there are no errors produced by the tests before continuing the installation. Note that the checks are quite long. It may be useful to redirect the output to a log file in order to inspect it thoroughly.

Only in case of a first installation, remove the configuration file created earlier by issuing the following command as the root user:

rm -fv /etc/pam.d/*

Now, as the root user:

make install &&
chmod -v 4755 /sbin/unix_chkpwd &&

for file in pam pam_misc pamc
do
  mv -v /usr/lib/lib${file}.so.* /lib &&
  ln -sfv ../../lib/$(readlink /usr/lib/lib${file}.so) /usr/lib/lib${file}.so
done

Command Explanations

--enable-securedir=/lib/security: This switch sets install location for the PAM modules.

--disable-regenerate-docu : This switch prevents this version of the package trying to build its documentation, and failing, if the required dependencies except w3m-0.5.3 are present, but Links-2.14 is present. Remove this switch if you have installed w3m (or elinks, with a link so it can be invoked as 'links').

chmod -v 4755 /sbin/unix_chkpwd: The unix_chkpwd helper program must be setuid so that non-root processes can access the shadow file.

Configuring Linux-PAM

Config Files

/etc/security/* and /etc/pam.d/*

Configuration Information

Configuration information is placed in /etc/pam.d/. Below is an example file:

# Begin /etc/pam.d/other

auth            required        pam_unix.so     nullok
account         required        pam_unix.so
session         required        pam_unix.so
password        required        pam_unix.so     nullok

# End /etc/pam.d/other

Now set up some generic files. As root:

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

The remaining generic file depends on whether CrackLib-2.9.6 is installed. If it is installed, use:

cat > /etc/pam.d/system-password << "EOF"
# Begin /etc/pam.d/system-password

# check new passwords for strength (man pam_cracklib)
password  required    pam_cracklib.so   type=Linux retry=3 difok=5 \
                                        difignore=23 minlen=9 dcredit=1 \
                                        ucredit=1 lcredit=1 ocredit=1 \
                                        dictpath=/lib/cracklib/pw_dict
# use sha512 hash for encryption, use shadow, and use the
# authentication token (chosen password) set by pam_cracklib
# above (or any previous modules)
password  required    pam_unix.so       sha512 shadow use_authtok

# End /etc/pam.d/system-password
EOF

Note

In its default configuration, pam_cracklib will allow multiple case passwords as short as 6 characters, even with the minlen value set to 11. You should review the pam_cracklib(8) man page and determine if these default values are acceptable for the security of your system.

If CrackLib-2.9.6 is NOT installed, use:

cat > /etc/pam.d/system-password << "EOF"
# Begin /etc/pam.d/system-password

# use sha512 hash for encryption, use shadow, and try to use any previously
# defined authentication token (chosen password) set by any prior module
password  required    pam_unix.so       sha512 shadow try_first_pass

# End /etc/pam.d/system-password
EOF

Now add a restrictive /etc/pam.d/other configuration file. With this file, programs that are PAM aware will not run unless a configuration file specifically for that application is created.

cat > /etc/pam.d/other << "EOF"
# Begin /etc/pam.d/other

auth        required        pam_warn.so
auth        required        pam_deny.so
account     required        pam_warn.so
account     required        pam_deny.so
password    required        pam_warn.so
password    required        pam_deny.so
session     required        pam_warn.so
session     required        pam_deny.so

# End /etc/pam.d/other
EOF

The PAM man page (man pam) provides a good starting point for descriptions of fields and allowable entries. The Linux-PAM System Administrators' Guide is recommended for additional information.

Refer to http://debian.securedservers.com/kernel/pub/linux/libs/pam/modules.html for a list of various third-party modules available.

Important

You should now reinstall the Shadow-4.4 package.

Contents

Installed Program: mkhomedir_helper, pam_tally, pam_tally2, pam_timestamp_check, unix_chkpwd and unix_update
Installed Libraries: libpam.so, libpamc.so and libpam_misc.so
Installed Directories: /etc/security, /lib/security, /usr/include/security and /usr/share/doc/Linux-PAM-1.3.0

Short Descriptions

mkhomedir_helper

is a helper binary that creates home directories.

pam_tally

is used to interrogate and manipulate the login counter file.

pam_tally2

is used to interrogate and manipulate the login counter file, but does not have some limitations that pam_tally does.

pam_timestamp_check

is used to check if the default timestamp is valid

unix_chkpwd

is a helper binary that verifies the password of the current user.

unix_update

is a helper binary that updates the password of a given user.

libpam.so

provides the interfaces between applications and the PAM modules.

Last updated on 2017-02-15 21:57:41 -0800

libpwquality-1.3.0

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-8.0 platform.

Package Information

libpwquality Dependencies

Required

CrackLib-2.9.6

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libpwquality

Installation of libpwquality

Install libpwquality 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

Contents

Installed Programs: pwscore and pwmake
Installed Libraries: pam_pwquality.so and libpwquality.so
Installed Directories: /etc/security

Short Descriptions

pwmake

is a simple configurable tool for generating random and relatively easily pronounceable passwords.

pwscore

is a simple tool for checking quality of a password.

libpwquality.so

contains API functions for checking the password quality.

pam_pwquality.so

is a Linux PAM module used to perform password quality checking.

Last updated on 2015-09-25 08:48:24 -0500

MIT Kerberos V5-1.15

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-8.0 platform.

Package Information

Additional Downloads

MIT Kerberos V5 Dependencies

Optional

DejaGnu-1.6 (for full test coverage), GnuPG-2.1.18 (to authenticate the package), keyutils-1.5.9, OpenLDAP-2.4.44, Python-2.7.13 (used during the testsuite), rpcbind-0.2.4 (used during the testsuite), and Valgrind-3.12.0 (used during the test suite)

Note

Some sort of time synchronization facility on your system (like ntp-4.2.8p9) is required since Kerberos won't authenticate if there is a time difference between a kerberized client and the KDC server.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mitkrb

Installation of MIT Kerberos V5

If your system is configured to support only IPv4, apply the following patch:

patch -p1 -i ../mitkrb-1.15-fix_ipv4_only-1.patch

Build MIT Kerberos V5 by running the following commands:

cd src &&

sed -e "s@python2.5/Python.h@& python2.7/Python.h@g" \
    -e "s@-lpython2.5]@&,\n  AC_CHECK_LIB(python2.7,main,[PYTHON_LIB=-lpython2.7])@g" \
    -i configure.in &&

sed -e 's@\^u}@^u cols 300}@' \
    -i tests/dejagnu/config/default.exp &&

sed -e '/eq 0/{N;s/12 //}' \
    -i plugins/kdb/db2/libdb2/test/run.test &&

autoconf &&
./configure --prefix=/usr            \
            --sysconfdir=/etc        \
            --localstatedir=/var/lib \
            --with-system-et         \
            --with-system-ss         \
            --with-system-verto=no   \
            --enable-dns-for-realm &&
make

To test the build, issue as the root user: make check. You need at least Tcl-8.6.6, which is used to drive the testsuite. Furthermore, DejaGnu-1.6 must be available for some of the tests to run. If you have a former version of MIT Kerberos V5 installed, it may happen that the test suite pick up the installed versions of the libraries, rather than the newly built ones. If so, it is better to run the tests after the installation.

Now, as the root user:

make install &&

for f in gssapi_krb5 gssrpc k5crypto kadm5clnt kadm5srv \
         kdb5 kdb_ldap krad krb5 krb5support verto ; do

    find /usr/lib -type f -name "lib$f*.so*" -exec chmod -v 755 {} \;    
done          &&

mv -v /usr/lib/libkrb5.so.3*        /lib &&
mv -v /usr/lib/libk5crypto.so.3*    /lib &&
mv -v /usr/lib/libkrb5support.so.0* /lib &&

ln -v -sf ../../lib/libkrb5.so.3.3        /usr/lib/libkrb5.so        &&
ln -v -sf ../../lib/libk5crypto.so.3.1    /usr/lib/libk5crypto.so    &&
ln -v -sf ../../lib/libkrb5support.so.0.1 /usr/lib/libkrb5support.so &&

mv -v /usr/bin/ksu /bin &&
chmod -v 755 /bin/ksu   &&

install -v -dm755 /usr/share/doc/krb5-1.15 &&
cp -vfr ../doc/*  /usr/share/doc/krb5-1.15

Command Explanations

sed -e ...: The first sed fixes Python detection. The second one increases the width of the virtual terminal used for some tests to prevent some spurious text in the output which is taken as a failure. The third sed removes a test that is known to fail.

--localstatedir=/var/lib: This option is used so that the Kerberos variable run-time data is located in /var/lib instead of /usr/var.

--with-system-et: This switch causes the build to use the system-installed versions of the error-table support software.

--with-system-ss: This switch causes the build to use the system-installed versions of the subsystem command-line interface software.

--with-system-verto=no: This switch fixes a bug in the package: it does not recognize its own verto library installed previously. This is not a problem, if reinstalling the same version, but if you are updating, the old library is used as system's one, instead of installing the new version.

--enable-dns-for-realm: This switch allows realms to be resolved using the DNS server.

--with-ldap: Use this switch if you want to compile the OpenLDAP database backend module.

mv -v /usr/lib/libk... /lib and ln -v -sf ../../lib/libk... /usr/lib/libk...: Move critical libraries to the /lib directory so that they are available when the /usr filesystem is not mounted.

find /usr/lib -type f -name "lib$f*.so*" -exec chmod -v 755 {} \;: This command changes the permisison of installed libraries.

mv -v /usr/bin/ksu /bin: Moves the ksu program to the /bin directory so that it is available when the /usr filesystem is not mounted.

Configuring MIT Kerberos V5

Config Files

/etc/krb5.conf and /var/lib/krb5kdc/kdc.conf

Configuration Information

Kerberos Configuration

Tip

You should consider installing some sort of password checking dictionary so that you can configure the installation to only accept strong passwords. A suitable dictionary to use is shown in the CrackLib-2.9.6 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 = <LFS.ORG>
    encrypt = true

[realms]
    <LFS.ORG> = {
        kdc = <belgarath.lfs.org>
        admin_server = <belgarath.lfs.org>
        dict_file = /usr/share/dict/words
    }

[domain_realm]
    .<lfs.org> = <LFS.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 <lfs.org> names.

default_realm should be the name of your domain changed to ALL CAPS. This isn't required, but both Heimdal and MIT recommend it.

encrypt = true provides encryption of all traffic between kerberized clients and servers. It's not necessary and can be left off. If you leave it off, you can encrypt all traffic from the client to the server using a switch on the client program instead.

The [realms] parameters tell the client programs where to look for the KDC authentication services.

The [domain_realm] section maps a domain to a realm.

Create the KDC database:

kdb5_util create -r <LFS.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.lfs.org>

After choosing the defaults when prompted, you will have to export the data to a keytab file:

kadmin.local: ktadd host/<belgarath.lfs.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:

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.

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.15 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-20170225 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, krb5kdc, krb5-send-pr, 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.15,examples/krb5}, /var/lib/krb5kdc, and /var/lib/run/krb5kdc

Short Descriptions

gss-client

is a GSSAPI test client.

gss-server

is a GSSAPI test server.

k5srvutil

is a host keytable manipulation utility.

kadmin

is an utility used to make modifications to the Kerberos database.

kadmin.local

is an utility similar to kadmin, but if the database is db2, the local client kadmin.local, is intended to run directly on the master KDC without Kerberos authentication.

kadmind

is a server for administrative access to a Kerberos database.

kdb5_ldap_util (optional)

allows an administrator to manage realms, Kerberos services and ticket policies.

kdb5_util

is the KDC database utility.

kdestroy

removes the current set of tickets.

kinit

is used to authenticate to the Kerberos server as a principal and acquire a ticket granting ticket that can later be used to obtain tickets for other services.

klist

reads and displays the current tickets in the credential cache.

kpasswd

is a program for changing Kerberos 5 passwords.

kprop

takes a principal database in a specified format and converts it into a stream of database records.

kpropd

receives a database sent by kprop and writes it as a local database.

kproplog

displays the contents of the KDC database update log to standard output.

krb5-config

gives information on how to link programs against libraries.

krb5kdc

is the Kerberos 5 server.

krb5-send-pr

sends a problem report (PR) to a central support site.

ksu

is the super user program using Kerberos protocol. Requires a properly configured /etc/shells and ~/.k5login containing principals authorized to become super users.

kswitch

makes the specified credential cache the primary cache for the collection, if a cache collection is available.

ktutil

is a program for managing Kerberos keytabs.

kvno

prints keyversion numbers of Kerberos principals.

sclient

is used to contact a sample server and authenticate to it using Kerberos 5 tickets, then display the server's response.

sim_client

is a simple UDP-based sample client program, for demonstration.

sim_server

is a simple UDP-based server application, for demonstration.

sserver

is the sample Kerberos 5 server.

uuclient

is another sample client.

uuserver

is another sample server.

libgssapi_krb5.so

contains the Generic Security Service Application Programming Interface (GSSAPI) functions which provides security services to callers in a generic fashion, supportable with a range of underlying mechanisms and technologies and hence allowing source-level portability of applications to different environments.

libkadm5clnt.so

contains the administrative authentication and password checking functions required by Kerberos 5 client-side programs.

libkadm5srv.so

contains the administrative authentication and password checking functions required by Kerberos 5 servers.

libkdb5.so

is a Kerberos 5 authentication/authorization database access library.

libkrad.so

contains the internal support library for RADIUS functionality.

libkrb5.so

is an all-purpose Kerberos 5 library.

Last updated on 2017-02-15 18:28:58 -0800

Nettle-3.3

Introduction to Nettle

The Nettle package contains the 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-8.0 platform.

Package Information

Nettle Dependencies

Optional

OpenSSL-1.0.2k (for examples)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nettle

Installation of Nettle

Install Nettle by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install &&
chmod   -v   755 /usr/lib/lib{hogweed,nettle}.so &&
install -v -m755 -d /usr/share/doc/nettle-3.3 &&
install -v -m644 nettle.html /usr/share/doc/nettle-3.3

Command Explanations

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

Contents

Installed Programs: nettle-hash, nettle-lfib-stream, nettle-pbkdf2, pkcs1-conv and sexp-conv
Installed Libraries: libhogweed.so and libnettle.so
Installed Directory: /usr/include/nettle and /usr/share/doc/nettle-3.3

Short Descriptions

nettle-hash

calculates a hash value using a specified algorithm.

nettle-lfib-stream

outputs a sequence of pseudorandom (non-cryptographic) bytes, using Knuth's lagged fibonacci generator. The stream is useful for testing, but should not be used to generate cryptographic keys or anything else that needs real randomness.

nettle-pbkdf2

password-based key derivation function that take as input a password or passphrase and typically strengthen it and protect against certain pre-computation attacks by using salting and expensive computation.

pkcs1-conv

converts private and public RSA keys from PKCS #1 format to sexp format.

sexp-conv

converts an s-expression to a different encoding.

Last updated on 2017-02-14 19:04:01 -0800

NSS-3.29

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-8.0 platform.

Package Information

Additional Downloads

NSS Dependencies

Required

NSPR-4.13.1

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nss

Installation of NSS

Note

This package does not support parallel build.

Install NSS by running the following commands:

patch -Np1 -i ../nss-3.29-standalone-1.patch &&

cd nss &&

make -j1 BUILD_OPT=1                  \
  NSPR_INCLUDE_DIR=/usr/include/nspr  \
  USE_SYSTEM_ZLIB=1                   \
  ZLIB_LIBS=-lz                       \
  $([ $(uname -m) = x86_64 ] && echo USE_64=1) \
  $([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)

This package does not come with a test suite.

Now, as the root user:

cd ../dist                                                          &&

install -v -m755 Linux*/lib/*.so              /usr/lib              &&
install -v -m644 Linux*/lib/{*.chk,libcrmf.a} /usr/lib              &&

install -v -m755 -d                           /usr/include/nss      &&
cp -v -RL {public,private}/nss/*              /usr/include/nss      &&
chmod -v 644                                  /usr/include/nss/*    &&

install -v -m755 Linux*/bin/{certutil,nss-config,pk12util} /usr/bin &&

install -v -m644 Linux*/lib/pkgconfig/nss.pc  /usr/lib/pkgconfig

Command Explanations

BUILD_OPT=1: This option is passed to make so that the build is performed with no debugging symbols built into the binaries and the default compiler optimizations are used.

NSPR_INCLUDE_DIR=/usr/include/nspr: This option sets the location of the nspr headers.

USE_SYSTEM_ZLIB=1: This option is passed to make to ensure that the libssl3.so library is linked to the system installed zlib instead of the in-tree version.

ZLIB_LIBS=-lz: This option provides the linker flags needed to link to the system zlib.

$([ $(uname -m) = x86_64 ] && echo USE_64=1): The USE_64=1 option is required on x86_64, otherwise make will try (and fail) to create 32-bit objects. The [ $(uname -m) = x86_64 ] test ensures it has no effect on a 32 bit system.

([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1): This tests if sqlite is installed and if so it echos the option NSS_USE_SYSTEM_SQLITE=1 to make so that libsoftokn3.so will link against the system version of sqlite.

Configuring NSS

If p11-kit-0.23.2 is installed, /usr/lib/libp11-kit.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:

readlink /usr/lib/libnssckbi.so || \
mv -v /usr/lib/libnssckbi.so /usr/lib/libnssckbi.so.orig &&
ln -sfv libp11-kit.so /usr/lib/libnssckbi.so

Additionally, for dependent applicaions that do not use the internal database (/usr/lib/libnssckbi.so), the make-ca.sh script, incldued on the Certificate Authority Certificates page, will generate a system wide NSS DB.

Contents

Installed Programs: certutil, nss-config, and pk12util
Installed Libraries: libcrmf.a, libfreebl3.so, libfreeblpriv3.so, libgtest1.so, libnss3.so, libnssckbi.so, libnssdbm3.so, libnsssysinit.so, libnssutil3.so, libsmime3.so, libsoftokn3.so, and libssl3.so
Installed Directories: /usr/include/nss

Short Descriptions

certutil

is the Mozilla Certificate Database Tool. It is a command-line utility that can create and modify the Netscape Communicator cert8.db and key3.db database files. It can also list, generate, modify, or delete certificates within the cert8.db file and create or change the password, generate new public and private key pairs, display the contents of the key database, or delete key pairs within the key3.db file.

nss-config

is used to determine the NSS library settings of the installed NSS libraries.

pk12util

is a tool for importing certificates and keys from pkcs #12 files into NSS or exporting them. It can also list certificates and keys in such files.

Last updated on 2017-02-14 22:04:32 -0800

OpenSSH-7.4p1

Introduction to OpenSSH

The OpenSSH package contains ssh clients and the sshd daemon. This is useful for encrypting authentication and subsequent traffic over a network. The ssh and scp commands are secure implementations of telnet and rcp respectively.

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

Package Information

OpenSSH Dependencies

Required

OpenSSL-1.0.2k or LibreSSL Portable

Optional

Linux-PAM-1.3.0, X Window System, MIT Kerberos V5-1.15, libedit, OpenSC, and libsectok

Optional Runtime (Used only to gather entropy)

OpenJDK-1.8.0.121, Net-tools-CVS_20101030, and Sysstat-11.5.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/OpenSSH

Installation of OpenSSH

OpenSSH runs as two processes when connecting to other computers. The first process is a privileged process and controls the issuance of privileges as necessary. The second process communicates with the network. Additional installation steps are necessary to set up the proper environment, which are performed by issuing the following commands as the root user:

install  -v -m700 -d /var/lib/sshd &&
chown    -v root:sys /var/lib/sshd &&

groupadd -g 50 sshd        &&
useradd  -c 'sshd PrivSep' \
         -d /var/lib/sshd  \
         -g sshd           \
         -s /bin/false     \
         -u 50 sshd

Install OpenSSH by running the following commands:

./configure --prefix=/usr                     \
            --sysconfdir=/etc/ssh             \
            --with-md5-passwords              \
            --with-privsep-path=/var/lib/sshd &&
make

The testsuite requires an installed copy of scp to complete the multiplexing tests. To run the test suite, first copy the scp program to /usr/bin, making sure that you backup any existing copy first.

To test the results, issue: make 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-7.4p1     &&
install -v -m644    INSTALL LICENCE OVERVIEW README* \
                    /usr/share/doc/openssh-7.4p1

Command Explanations

--sysconfdir=/etc/ssh: This prevents the configuration files from being installed in /usr/etc.

--with-md5-passwords: This enables the use of MD5 passwords.

--with-pam: This parameter enables Linux-PAM support in the build.

--with-xauth=/usr/bin/xauth: Set the default location for the xauth binary for X authentication. Change the location if xauth will be installed to a different path. This can also be controlled from sshd_config with the XAuthLocation keyword. You can omit this switch if Xorg is already installed.

--with-kerberos5=/usr: This option is used to include Kerberos 5 support in the build.

--with-libedit: This option enables line editing and history features for sftp.

Configuring OpenSSH

Config Files

~/.ssh/*, /etc/ssh/ssh_config, and /etc/ssh/sshd_config

There are no required changes to any of these files. However, you may wish to view the /etc/ssh/ files and make any changes appropriate for the security of your system. One recommended change is that you disable root login via ssh. Execute the following command as the root user to disable root login via ssh:

echo "PermitRootLogin no" >> /etc/ssh/sshd_config

If you want to be able to log in without typing in your password, first create ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub with ssh-keygen and then copy ~/.ssh/id_rsa.pub to ~/.ssh/authorized_keys on the remote computer that you want to log into. You'll need to change REMOTE_USERNAME and REMOTE_HOSTNAME for the username and hostname of the remote computer and you'll also need to enter your password for the ssh-copy-id command to succeed:

ssh-keygen &&
ssh-copy-id -i ~/.ssh/id_rsa.pub REMOTE_USERNAME@REMOTE_HOSTNAME

Once you've got passwordless logins working it's actually more secure than logging in with a password (as the private key is much longer than most people's passwords). If you would like to now disable password logins, as the root user:

echo "PasswordAuthentication no" >> /etc/ssh/sshd_config &&
echo "ChallengeResponseAuthentication no" >> /etc/ssh/sshd_config

If you added Linux-PAM support and you want ssh to use it then you will need to add a configuration file for sshd and enable use of LinuxPAM. Note, ssh only uses PAM to check passwords, if you've disabled password logins these commands are not needed. If you want to use PAM, issue the following commands as the root user:

sed 's@d/login@d/sshd@g' /etc/pam.d/login > /etc/pam.d/sshd &&
chmod 644 /etc/pam.d/sshd &&
echo "UsePAM yes" >> /etc/ssh/sshd_config

Additional configuration information can be found in the man pages for sshd, ssh and ssh-agent.

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-20170225 package.

make install-sshd

Contents

Installed Programs: scp, sftp, slogin (symlink to ssh), 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-7.4p1, 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.

slogin

is a symlink to ssh.

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 machine using local keys.

ssh-keygen

is a key generation tool.

ssh-keyscan

is a utility for gathering public host keys from a number of hosts.

Last updated on 2017-02-14 13:20:57 -0800

OpenSSL-1.0.2k

Introduction to OpenSSL

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

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

Package Information

OpenSSL Dependencies

Optional

MIT Kerberos V5-1.15

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/OpenSSL

Installation of OpenSSL

Note

This package does not support parallel build.

Install OpenSSL with the following commands:

./config --prefix=/usr         \
         --openssldir=/etc/ssl \
         --libdir=lib          \
         shared                \
         zlib-dynamic &&
make depend           &&
make -j1

To test the results, issue: make -j1 test. The test suite does not support parallel jobs.

If you want to disable installing the static libraries, use this sed:

sed -i 's# libcrypto.a##;s# libssl.a##' Makefile

Now, as the root user:

make MANDIR=/usr/share/man MANSUFFIX=ssl install &&
install -dv -m755 /usr/share/doc/openssl-1.0.2k  &&
cp -vfr doc/*     /usr/share/doc/openssl-1.0.2k

Command Explanations

shared: This parameter forces the creation of shared libraries along with the static libraries.

zlib-dynamic: This parameter adds compression/decompression functionality using the libz library.

no-rc5 no-idea: When added to the ./config command, this will eliminate the building of those encryption methods. Patent licenses may be needed for you to utilize either of those methods in your projects.

make MANDIR=/usr/share/man MANSUFFIX=ssl install: This command installs OpenSSL with the man pages in /usr/share/man instead of /etc/ssl/man and appends "ssl" suffix to the manual page names to avoid conflicts with manual pages installed by other packages.

Configuring OpenSSL

Config Files

/etc/ssl/openssl.cnf

Configuration Information

Most users will want to install Certificate Authority Certificates for validation of downloaded certificates. For example, these certificates can be used by git-2.11.1, cURL-7.52.1 or Wget-1.19.1 when accessing secure (https protocol) sites. To do this, follow the instructions from the Certificate Authority Certificates page.

Users who just want to use OpenSSL for providing functions to other programs such as OpenSSH and web browsers do not need to worry about additional configuration. This is an advanced topic and those who do need it would normally be expected to either know how to properly update /etc/ssl/openssl.cnf or be able to find out how to do it.

Contents

Installed Programs: c_rehash and openssl
Installed Libraries: libcrypto.{so,a} and libssl.{so,a}
Installed Directories: /etc/ssl, /usr/include/openssl, /usr/lib/engines and /usr/share/doc/openssl-1.0.2k

Short Descriptions

c_rehash

is a Perl script that scans all files in a directory and adds symbolic links to their hash values.

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 man 1 openssl.

libcrypto.{so,a}

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,a}

implements the Transport Layer Security (TLS v1) protocol. It provides a rich API, documentation on which can be found by running man 3 ssl.

Last updated on 2017-02-24 10:42:12 -0800

p11-kit-0.23.2

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-8.0 platform.

Package Information

p11-kit Dependencies

Recommended
Optional

NSS-3.29, GTK-Doc-1.25 and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/p11-kit

Installation of p11-kit

Install p11-kit by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --with-trust-paths=/etc/pki/anchors &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--with-trust-paths=/etc/pki/anchors: this switch sets the location of trusted certificates used by libp11-kit.so.

--with-hash-impl=freebl: Use this switch if you want to use the Freebl library from NSS for SHA1 and MD5 hashing.

--enable-doc: Use this switch if you have installed GTK-Doc-1.25 and libxslt-1.1.29 and wish to rebuild the documentation and generate manual pages.

Configuring p11-kit

If NSS-3.29 is installed, /usr/lib/libp11-kit.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:

readlink /usr/lib/libnssckbi.so || \
mv -v /usr/lib/libnssckbi.so /usr/lib/libnssckbi.so.orig &&
ln -sfv libp11-kit.so /usr/lib/libnssckbi.so

Contents

Installed Program: p11-kit and trust
Installed Libraries: libp11-kit.so and p11-kit-proxy.so
Installed Directories: /etc/pkcs11, /usr/include/p11-kit-1, /usr/lib/{p11-kit,pkcs11}, /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.

libp11-kit.so

contains functions used to coordinate initialization and finalization of any PKCS#11 module.

p11-kit-proxy.so

is the PKCS#11 proxy module.

Last updated on 2017-02-14 22:04:32 -0800

Polkit-0.113

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-8.0 platform.

Package Information

Polkit Dependencies

Required

GLib-2.50.3, and JS-17.0.0

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

docbook-xml-4.5, docbook-xsl-1.79.1, GTK-Doc-1.25, libxslt-1.1.29, and Linux-PAM-1.3.0

Note

If libxslt-1.1.29 is installed, then docbook-xml-4.5 and docbook-xsl-1.79.1 are required. If you have installed libxslt-1.1.29, but you do not want to install any of the DocBook packages mentioned, you will need to use --disable-man-pages in the instructions below.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/polkit

Installation of Polkit

There should be a dedicated user and group to take control of the polkitd daemon after it is started. Issue the following commands as the root user:

groupadd -fg 27 polkitd &&
useradd -c "PolicyKit Daemon Owner" -d /etc/polkit-1 -u 27 \
        -g polkitd -s /bin/false polkitd

Install Polkit by running the following commands:

./configure --prefix=/usr                    \
            --sysconfdir=/etc                \
            --localstatedir=/var             \
            --disable-static                 \
            --enable-libsystemd-login=no     \
            --with-authfw=shadow             &&
make

To test the results, issue: make check. Note that system D-Bus daemon must be running for the testsuite to complete. There is also a warning about ConsoleKit database not present, but that one can be safely ignored.

Now, as the root user:

make install

Command Explanations

--enable-libsystemd-login=no: This parameter fixes building without systemd, which is not part of LFS/BLFS. If you use systemd, replace "no" by "yes".

--with-authfw=shadow: This parameter configures the package to use the Shadow rather than the Linux-PAM Authentication framework. Remove it if you would like to use Linux-PAM.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Configuring Polkit

PAM Configuration

Note

If you did not build Polkit with Linux PAM support, you can skip this section.

If you have built Polkit with Linux PAM support, you need to modify the default PAM configuration file which was installed by default to get Polkit to work correctly with BLFS. Issue the following commands as the root user to create the configuration file for Linux PAM:

cat > /etc/pam.d/polkit-1 << "EOF"
# Begin /etc/pam.d/polkit-1

auth     include        system-auth
account  include        system-account
password include        system-password
session  include        system-session

# End /etc/pam.d/polkit-1
EOF

Contents

Installed Programs: pkaction, pkcheck, pk-example-frobnicate, pkexec, pkttyagent and polkitd
Installed Libraries: libpolkit-agent-1.so and libpolkit-gobject-1.so
Installed Directories: /etc/polkit-1, /usr/include/polkit-1, /usr/lib/polkit-1, /usr/share/gtk-doc/html/polkit-1 and /usr/share/polkit-1

Short Descriptions

pkaction

is used to obtain information about registered PolicyKit actions.

pkcheck

is used to check whether a process is authorized for action.

pk-example-frobnicate

is an example program to test the pkexec command.

pkexec

allows an authorized user to execute a command as another user.

pkttyagent

is used to start a textual authentication agent for the subject.

polkitd

provides the org.freedesktop.PolicyKit1 D-Bus service on the system message bus.

libpolkit-agent-1.so

contains the Polkit authentication agent API functions.

libpolkit-gobject-1.so

contains the Polkit authorization API functions.

Last updated on 2017-02-15 21:57:41 -0800

Shadow-4.4

Introduction to Shadow

Shadow was indeed installed in LFS and there is no reason to reinstall it unless you installed CrackLib or Linux-PAM after your LFS system was completed. If you have installed CrackLib after LFS, then reinstalling Shadow will enable strong password support. If you have installed Linux-PAM, reinstalling Shadow will allow programs such as login and su to utilize PAM.

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

Package Information

Shadow Dependencies

Required

Linux-PAM-1.3.0 or CrackLib-2.9.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/shadow

Installation of Shadow

Important

The installation commands shown below are for installations where Linux-PAM has been installed (with or without a CrackLib installation) and Shadow is being reinstalled to support the Linux-PAM installation.

If you are reinstalling Shadow to provide strong password support using the CrackLib library without using Linux-PAM, ensure you add the --with-libcrack parameter to the configure script below and also issue the following command:

sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs

Reinstall Shadow by running the following commands:

sed -i 's/groups$(EXEEXT) //' src/Makefile.in &&

find man -name Makefile.in -exec sed -i 's/groups\.1 / /'   {} \; &&
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; &&
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /'   {} \; &&

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
       -e 's@/var/spool/mail@/var/mail@' etc/login.defs &&

sed -i 's/1000/999/' etc/useradd                           &&
sed -i -e '/snprintf/s@_msg,@_msg, 256,@' src/su.c         &&
sed -i -e '47 d' -e '60,65 d'             libmisc/myname.c &&

echo '--- src/useradd.c   (old)
+++ src/useradd.c   (new)
@@ -2027,6 +2027,8 @@
        is_shadow_grp = sgr_file_present ();
 #endif
 
+       get_defaults ();
+
        process_flags (argc, argv);
 
 #ifdef ENABLE_SUBIDS
@@ -2036,8 +2038,6 @@
            (!user_id || (user_id <= uid_max && user_id >= uid_min));
 #endif                         /* ENABLE_SUBIDS */
 
-       get_defaults ();
-
 #ifdef ACCT_TOOLS_SETUID
 #ifdef USE_PAM
        {' | patch -p0 -l &&

./configure --sysconfdir=/etc --with-group-name-max-length=32 &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
mv -v /usr/bin/passwd /bin

Command Explanations

sed -i 's/groups$(EXEEXT) //' src/Makefile.in: This sed is used to suppress the installation of the groups program as the version from the Coreutils package installed during LFS is preferred.

find man -name Makefile.in -exec ... {} \;: This command is used to suppress the installation of the groups man pages so the existing ones installed from the Coreutils package are not replaced.

sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' -e 's@/var/spool/mail@/var/mail@' etc/login.defs: Instead of using the default 'DES' method, this command modifies the installation to use the more secure 'SHA512' method of hashing passwords, which also allows passwords longer than eight characters. It also changes the obsolete /var/spool/mail location for user mailboxes that Shadow uses by default to the /var/mail location.

sed -i 's/1000/999/' etc/useradd: Make a minor change to make the default useradd consistent with the LFS groups file.

sed -i -e '/snprintf/s@_msg,@_msg, 256,@' src/su.c: Fix a build error that only occurs if Linux-PAM-1.3.0 is detected by configure.

sed -i '47 d' -e '60,65 d' libmisc/myname.c: Apply a security fix from upstream.

echo '--- ...: This command illustrates another way to apply patches. Without the patch, useradd does not use the defaults in /etc/default/useradd.

--with-group-name-max-length=32: The maximum user name is 32 characters. Make the maximum group name the same.

mv -v /usr/bin/passwd /bin: The passwd program may be needed during times when the /usr filesystem is not mounted so it is moved into the root partition.

Configuring Shadow

Shadow's stock configuration for the useradd utility may not be desirable for your installation. One default parameter causes useradd to create a mailbox file for any newly created user. useradd will make the group ownership of this file to the mail group with 0660 permissions. If you would prefer that these mailbox files are not created by useradd, issue the following command as the root user:

sed -i 's/yes/no/' /etc/default/useradd

Configuring Linux-PAM to Work with Shadow

Note

The rest of this page is devoted to configuring Shadow to work properly with Linux-PAM. If you do not have Linux-PAM installed, and you reinstalled Shadow to support strong passwords via the CrackLib library, no further configuration is required.

Config Files

/etc/pam.d/* or alternatively /etc/pam.conf, /etc/login.defs and /etc/security/*

Configuration Information

Configuring your system to use Linux-PAM can be a complex task. The information below will provide a basic setup so that Shadow's login and password functionality will work effectively with Linux-PAM. Review the information and links on the Linux-PAM-1.3.0 page for further configuration information. For information specific to integrating Shadow, Linux-PAM and CrackLib, 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            \
                CRACKLIB_DICTPATH        \
                PASS_CHANGE_TRIES        \
                PASS_ALWAYS_WARN         \
                CHFN_AUTH ENCRYPT_METHOD \
                ENVIRON_FILE
do
    sed -i "s/^${FUNCTION}/# &/" /etc/login.defs
done
Configuring the /etc/pam.d/ Files

As mentioned previously in the Linux-PAM instructions, Linux-PAM has two supported methods for configuration. The commands below assume that you've chosen to use a directory based configuration, where each program has its own configuration file. You can optionally use a single /etc/pam.conf configuration file by using the text from the files below, and supplying the program name as an additional first field for each line.

As the root user, replace 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 the default auth settings
auth      include     system-auth

# check access for the user
account   required    pam_access.so

# include the default account settings
account   include     system-account

# Set default environment variables for the user
session   required    pam_env.so

# Set resource limits for the user
session   required    pam_limits.so

# Display date of last login - Disabled by default
#session   optional    pam_lastlog.so

# Display the message of the day - Disabled by default
#session   optional    pam_motd.so

# Check user's mail - Disabled by default
#session   optional    pam_mail.so      standard quiet

# include the default 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
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/su
EOF
'chage'
cat > /etc/pam.d/chage << "EOF"
# Begin /etc/pam.d/chage

# always allow root
auth      sufficient  pam_rootok.so

# include system defaults for auth account and session
auth      include     system-auth
account   include     system-account
session   include     system-session

# Always permit for authentication updates
password  required    pam_permit.so

# End /etc/pam.d/chage
EOF
Other common programs
for PROGRAM in chfn chgpasswd chpasswd chsh groupadd groupdel \
               groupmems groupmod newusers useradd userdel usermod
do
    install -v -m644 /etc/pam.d/chage /etc/pam.d/${PROGRAM}
    sed -i "s/chage/$PROGRAM/" /etc/pam.d/${PROGRAM}
done

Warning

At this point, you should do a simple test to see if Shadow is working as expected. Open another terminal and log in as a user, then su to root. If you do not see any errors, then all is well and you should proceed with the rest of the configuration. If you did receive errors, stop now and double check the above configuration files manually. You can also run the test suite from the Linux-PAM package to assist you in determining the problem. If you cannot find and fix the error, you should recompile Shadow adding the --without-libpam switch to the configure command in the above instructions (also move the /etc/login.defs.orig backup file to /etc/login.defs). If you fail to do this and the errors remain, you will be unable to log into your system.

Configuring Login Access

Instead of using the /etc/login.access file for controlling access to the system, Linux-PAM uses the pam_access.so module along with the /etc/security/access.conf file. Rename the /etc/login.access file using the following command:

[ -f /etc/login.access ] && mv -v /etc/login.access{,.NOUSE}
Configuring Resource Limits

Instead of using the /etc/limits file for limiting usage of system resources, Linux-PAM uses the pam_limits.so module along with the /etc/security/limits.conf file. Rename the /etc/limits file using the following command:

[ -f /etc/limits ] && mv -v /etc/limits{,.NOUSE}

Caution

Be sure to test the login capabilities of the system before logging out. Errors in the configuration can cause a permanent lockout requiring a boot from an external source to correct the problem.

Contents

A list of the installed files, along with their short descriptions can be found at ../../../../lfs/view/8.0/chapter06/shadow.html#contents-shadow .

Last updated on 2017-02-19 14:24:01 -0800

ssh-askpass-7.4p1

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-8.0 platform.

Package Information

ssh-askpass Dependencies

Required

GTK+-2.24.31, Sudo-1.8.19p2 (runtime), Xorg Libraries, and X Window System (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ssh-askpass

Installation of ssh-askpass

Install ssh-askpass by running the following commands:

cd contrib &&
make gnome-ssh-askpass2

Now, as the root user:

install -v -d -m755 /usr/libexec/openssh/contrib  &&
install -v -m755    gnome-ssh-askpass2 \
                    /usr/libexec/openssh/contrib  &&
ln -sv -f contrib/gnome-ssh-askpass2 \
                    /usr/libexec/openssh/ssh-askpass

The use of /usr/libexec/openssh/contrib and a symlink is justified by the eventual necessity of a different program for that service.

Configuring ssh-askpass

Configuration Information

As the root user, configure Sudo-1.8.19p2 to use ssh-askpass:

cat >> /etc/sudo.conf << "EOF" &&
# Path to askpass helper program
Path askpass /usr/libexec/openssh/ssh-askpass
EOF
chmod -v 0644 /etc/sudo.conf

If a given graphical <application> requires administrative privileges, use sudo -A <application> from an x-terminal, from a Window Manager menu and/or replace "Exec=<application> ..." by "Exec=sudo -A <application> ..." in the <application>.desktop file.

Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/libexec/openssh/contrib

Last updated on 2017-02-21 14:52:57 -0800

stunnel-5.40

Introduction to stunnel

The stunnel package contains a program that allows you to encrypt arbitrary TCP connections inside SSL (Secure Sockets Layer) so you can easily communicate with clients over secure channels. stunnel can be used to add SSL functionality to commonly used Inetd daemons such as POP-2, POP-3, and IMAP servers, along with standalone daemons such as NNTP, SMTP, and HTTP. stunnel can also be used to tunnel PPP over network sockets without changes to the server package source code.

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

Package Information

stunnel Dependencies

Required

OpenSSL-1.0.2k

Optional

tcpwrappers and TOR

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/stunnel

Installation of stunnel

The stunnel daemon will be run in a chroot jail by an unprivileged user. Create the new user and group using the following commands as the root user:

groupadd -g 51 stunnel &&
useradd -c "stunnel Daemon" -d /var/lib/stunnel \
        -g stunnel -s /bin/false -u 51 stunnel

Note

A signed SSL Certificate and a Private Key is necessary to run the stunnel daemon. After the package is installed, there are instructions to generate them. However, if you own or have already created a signed SSL Certificate you wish to use, copy it to /etc/stunnel/stunnel.pem before starting the build (ensure only root has read and write access). The .pem file must be formatted as shown below:

-----BEGIN PRIVATE KEY-----
<many encrypted lines of private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<many encrypted lines of certificate>
-----END CERTIFICATE-----
-----BEGIN DH PARAMETERS-----
<encrypted lines of dh parms>
-----END DH PARAMETERS-----

Install stunnel by running the following commands:

Note

For some systems with binutils versions prior to 2.25, configure may fail. If necessary, fix it either with:

sed -i '/LDFLAGS.*static_flag/ s/^/#/' configure

or, if LLVM-3.9.1 with Clang is installed, you can replace ./configure ... with CC=clang ./configure ... in the first command below.

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-systemd    &&
make

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc/stunnel-5.40 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>

If you use stunnel to encrypt a daemon started from [x]inetd, you may need to disable that daemon in the /etc/[x]inetd.conf file and enable a corresponding <service>_stunnel service. You may have to add an appropriate entry in /etc/services as well.

For a full explanation of the commands and syntax used in the configuration file, issue man stunnel.

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-20170225 package.

make install-stunnel

Contents

Installed Programs: stunnel and stunnel3
Installed Library: libstunnel.so
Installed Directories: /{etc,usr/lib,var/lib}/stunnel and /usr/share/doc/stunnel-5.40

Short Descriptions

stunnel

is a program designed to work as an SSL encryption wrapper between remote clients and local ({x}inetd-startable) or remote servers.

stunnel3

is a Perl wrapper script to use stunnel 3.x syntax with stunnel >=4.05.

libstunnel.so

contains the API functions required by stunnel.

Last updated on 2017-02-21 14:52:57 -0800

Sudo-1.8.19p2

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-8.0 platform.

Package Information

Sudo Dependencies

Optional

Linux-PAM-1.3.0, MIT Kerberos V5-1.15, OpenLDAP-2.4.44, MTA (that provides a sendmail command), AFS, FWTK, and Opie

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sudo

Installation of Sudo

Install Sudo by running the following commands:

./configure --prefix=/usr              \
            --libexecdir=/usr/lib      \
            --with-secure-path         \
            --with-all-insults         \
            --with-env-editor          \
            --docdir=/usr/share/doc/sudo-1.8.19p2 \
            --with-passprompt="[sudo] password for %p" &&
make

To test the results, issue: env LC_ALL=C make check 2>&1 | tee ../make-check.log. Check the results with grep failed ../make-check.log.

Now, as the root user:

make install &&
ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0

Command Explanations

--libexecdir=/usr/lib: This switch controls where private programs are installed. Everything in that directory is a library, so they belong under /usr/lib instead of /usr/libexec.

--with-secure-path: This switch transparently adds /sbin and /usr/sbin directories to the PATH environment variable.

--with-all-insults: This switch includes all the sudo insult sets.

--with-env-editor: This switch enables use of the environment variable EDITOR for visudo.

--with-passprompt: This switch sets the prompt.

--without-pam: This switch avoids building Linux-PAM support when Linux-PAM is installed on the system.

Note

There are many options to sudo's configure command. Check the configure --help output for a complete list.

ln -sfv libsudo_util...: Works around a bug in the installation process, which links to the previously installed version (if there is one) instead of the new one.

Configuring Sudo

Config File

/etc/sudoers

Configuration Information

The sudoers file can be quite complicated. It is composed of two types of entries: aliases (basically variables) and user specifications (which specify who may run what). The installation installs a default configuration that has no privileges installed for any user.

One example usage is to allow the system administrator to execute any program without typing a password each time root privileges are needed. This can be configured as:

# User alias specification
User_Alias  ADMIN = YourLoginId

# Allow people in group ADMIN to run all commands without a password
ADMIN       ALL = NOPASSWD: ALL

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: sudo, sudoedit (symlink), sudoreplay, and visudo
Installed Libraries: group_file.so, libsudo_util.so, sudoers.so, sudo_noexec.so, and system_group.so
Installed Directories: /etc/sudoers.d, /usr/lib/sudo, /usr/share/doc/sudo-1.8.19p2, and /var/{lib,run}/sudo

Short Descriptions

sudo

executes a command as another user as permitted by the /etc/sudoers configuration file.

sudoedit

is a symlink to sudo that implies the -e option to invoke an editor as another user.

sudoreplay

is used to play back or list the output logs created by sudo.

visudo

allows for safer editing of the sudoers file.

Last updated on 2017-02-14 13:20:57 -0800

Tripwire-2.4.3.3

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-8.0 platform.

Package Information

Note

The tripwire source tarball shown above downloads with the correct name, tripwire-open-source-2.4.3.3.tar.gz, if using a browser such as Firefox. If you prefer to use a command line program such as wget, you normally would obtain 2.4.3.3.tar.gz. To obtain this package with the proper filename, run:

wget -c https://github.com/Tripwire/tripwire-open-source/archive/2.4.3.3.tar.gz \
     -O tripwire-open-source-2.4.3.3.tar.gz

.

Tripwire Dependencies

Recommended
Optional

An MTA

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tripwire

Installation of Tripwire

Compile Tripwire by running the following commands:

sed -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.3|' \
    -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

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

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.

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.3: This command installs the tripwire sample policy files with the other tripwire documentation.i

Configuring Tripwire

Config Files

/etc/tripwire/*

Configuration Information

Tripwire uses a policy file to determine which files are integrity checked. The default policy file (/etc/tripwire/twpol.txt) is for a default installation and will need to be updated for your system.

Policy files should be tailored to each individual distribution and/or installation. Some example policy files can be found in /usr/share/doc/tripwire/.

If desired, copy the policy file you'd like to try into /etc/tripwire/ instead of using the default policy file, twpol.txt. It is, however, recommended that you edit your policy file. Get ideas from the examples above and read /usr/share/doc/tripwire/policyguide.txt for additional information. twpol.txt is a good policy file for learning about Tripwire as it will note any changes to the file system and can even be used as an annoying way of keeping track of changes for uninstallation of software.

After your policy file has been edited to your satisfaction you may begin the configuration steps (perform as the root) user:

twadmin --create-polfile --site-keyfile /etc/tripwire/site.key \
    /etc/tripwire/twpol.txt &&
tripwire --init

Depending on your system and the contents of the policy file, the initialization phase above can take a relatively long time.

Usage Information

Tripwire will identify file changes in the critical system files specified in the policy file. Using Tripwire while making frequent changes to these directories will flag all these changes. It is most useful after a system has reached a configuration that the user considers stable.

To use Tripwire after creating a policy file to run a report, use the following command:

tripwire --check > /etc/tripwire/report.txt

View the output to check the integrity of your files. An automatic integrity report can be produced by using a cron facility to schedule the runs.

Reports are stored in binary and, if desired, encrypted. View reports, as the root user, with:

twprint --print-report -r /var/lib/tripwire/report/<report-name.twr>

After you run an integrity check, you should examine the report (or email) and then modify the Tripwire database to reflect the changed files on your system. This is so that Tripwire will not continually notify you that 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.3

Short Descriptions

siggen

is a signature gathering utility that displays the hash function values for the specified files.

tripwire

is the main file integrity checking program.

twadmin

administrative and utility tool used to perform certain administrative functions related to Tripwire files and configuration options.

twprint

prints Tripwire database and report files in clear text format.

Last updated on 2017-02-22 10:21:38 -0800

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 > /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=/lib:/usr/lib type -p $1)
  else
    file=$(type -p $1)
  fi

  if [ -n $file ] ; then
    cp $file $WDIR/$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 "/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"

# Systemd installs udevadm in /bin. Other udev implementations have it in /sbin
if [ -x /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 /sbin/$f ] ; then sbinfiles="$sbinfiles $f"; fi
done

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/{bin,dev,lib/firmware,run,sbin,sys,proc}
mkdir -p $WDIR/etc/{modprobe.d,udev/rules.d}
touch $WDIR/etc/modprobe.d/modprobe.conf
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 /lib/firmware $WDIR/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 /bin/kmod ] ; then
    binfiles="$binfiles kmod"
  else
    binfiles="$binfiles lsmod"
    sbinfiles="$sbinfiles insmod"
  fi
fi

# Install basic binaries
for f in $binfiles ; do
  ldd /bin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
  copy $f bin
done

# Add lvm if present
if [ -x /sbin/lvm ] ; then sbinfiles="$sbinfiles lvm dmsetup"; fi

for f in $sbinfiles ; do
  ldd /sbin/$f | sed "s/\t//" | cut -d " " -f1 >> $unsorted
  copy $f sbin
done

# Add udevd libraries if not in /sbin
if [ -x /lib/udev/udevd ] ; then
  ldd /lib/udev/udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
elif [ -x /lib/systemd/systemd-udevd ] ; then
  ldd /lib/systemd/systemd-udevd | sed "s/\t//" | cut -d " " -f1 >> $unsorted
fi

# Add module symlinks if appropriate
if [ -n "$KERNEL_VERSION" ] && [ -x /bin/kmod ] ; then
  ln -s kmod $WDIR/bin/lsmod
  ln -s kmod $WDIR/bin/insmod
fi

# Add lvm symlinks if appropriate
# Also copy the lvm.conf file
if  [ -x /sbin/lvm ] ; then
  ln -s lvm $WDIR/sbin/lvchange
  ln -s lvm $WDIR/sbin/lvrename
  ln -s lvm $WDIR/sbin/lvextend
  ln -s lvm $WDIR/sbin/lvcreate
  ln -s lvm $WDIR/sbin/lvdisplay
  ln -s lvm $WDIR/sbin/lvscan

  ln -s lvm $WDIR/sbin/pvchange
  ln -s lvm $WDIR/sbin/pvck
  ln -s lvm $WDIR/sbin/pvcreate
  ln -s lvm $WDIR/sbin/pvdisplay
  ln -s lvm $WDIR/sbin/pvscan

  ln -s lvm $WDIR/sbin/vgchange
  ln -s lvm $WDIR/sbin/vgcreate
  ln -s lvm $WDIR/sbin/vgscan
  ln -s lvm $WDIR/sbin/vgrename
  ln -s lvm $WDIR/sbin/vgck
  # Conf file(s)
  cp -a /etc/lvm $WDIR/etc
fi

# Install libraries
sort $unsorted | uniq | while read library ; do
  if [ "$library" == "linux-vdso.so.1" ] ||
     [ "$library" == "linux-gate.so.1" ]; then
    continue
  fi

  copy $library lib
done

if [ -d /lib/udev ]; then
  cp -a /lib/udev $WDIR/lib
fi
if [ -d /lib/systemd ]; then
  cp -a /lib/systemd $WDIR/lib
fi

# Install the kernel modules if requested
if [ -n "$KERNEL_VERSION" ]; then
  find                                                                        \
     /lib/modules/$KERNEL_VERSION/kernel/{crypto,fs,lib}                      \
     /lib/modules/$KERNEL_VERSION/kernel/drivers/{block,ata,md,firewire}      \
     /lib/modules/$KERNEL_VERSION/kernel/drivers/{scsi,message,pcmcia,virtio} \
     /lib/modules/$KERNEL_VERSION/kernel/drivers/usb/{host,storage}           \
     -type f 2> /dev/null | cpio --make-directories -p --quiet $WDIR

  cp /lib/modules/$KERNEL_VERSION/modules.{builtin,order}                     \
            $WDIR/lib/modules/$KERNEL_VERSION

  depmod -b $WDIR $KERNEL_VERSION
fi

( cd $WDIR ; find . | cpio -o -H newc --quiet | gzip -9 ) > $INITRAMFS_FILE

# Remove the temporary directory and file
rm -rf $WDIR $unsorted
printf "done.\n"

EOF

chmod 0755 /sbin/mkinitramfs
mkdir -p /usr/share/mkinitramfs &&
cat > /usr/share/mkinitramfs/init.in << "EOF"
#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/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"  ;;
      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
}

init=/sbin/init
root=
rootdelay=
rootfstype=auto
ro="ro"
rootflags=
device=

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=}   ;;
    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_mount_root

killall -w ${UDEVD##*/}

exec switch_root /.root "$init" "$@"

EOF

Using an initramfs

Required Runtime Dependency

cpio-2.12

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/initramfs

To build an initramfs, run the following as the root user:

mkinitramfs [KERNEL VERSION]

The optional argument is the directory where the appropriate kernel modules are located. This must be a subdirectory of /lib/modules. If no modules are specified, then the initramfs is named initrd.img-no-kmods. If a kernel version is specified, the initrd is named initrd.img-$KERNEL_VERSION and is only appropriate for the specific kernel specified. The output file will be placed in the current directory.

After generating the initrd, copy it to the /boot directory.

Now edit /boot/grub/grub.cfg and add a new menuentry. Below are several examples.

# Generic initramfs and root fs identified by UUID
menuentry "LFS Dev (LFS-7.0-Feb14) initrd, Linux 3.0.4"
{
  linux  /vmlinuz-3.0.4-lfs-20120214 root=UUID=54b934a9-302d-415e-ac11-4988408eb0a8 ro
  initrd /initrd.img-no-kmods
}
# Generic initramfs and root fs on LVM partition
menuentry "LFS Dev (LFS-7.0-Feb18) initrd lvm, Linux 3.0.4"
{
  linux  /vmlinuz-3.0.4-lfs-20120218 root=/dev/mapper/myroot ro
  initrd /initrd.img-no-kmods
}
# Specific initramfs and root fs identified by LABEL
menuentry "LFS Dev (LFS-7.1-Feb20) initrd label, Linux 3.2.6"
{
  linux  /vmlinuz-3.2.6-lfs71-120220 root=LABEL=lfs71 ro
  initrd /initrd.img-3.2.6-lfs71-120220
}

Finally, reboot the system and select the desired system.

Last updated on 2016-06-01 12:21:44 -0700

btrfs-progs-4.9.1

Introduction to btrfs-progs

The btrfs-progs package contains administration and debugging tools for the B-tree file system (btrfs).

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

Package Information

Btrfs-progs Dependencies

Required

LZO-2.09

Recommended
Optional

LVM2-2.02.168 (dmsetup is used in tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfs

Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

File systems --->
  <*/M> Btrfs filesystem support [CONFIG_BTRFS_FS]

Note

CONFIG_BTRFS_FS_POSIX_ACL is required for the tests. Other Btrfs options in the kernel are optional.

Installation of btrfs-progs

Install btrfs-progs by running the following commands:

sed -i '1,106 s/\.gz//g' Documentation/Makefile.in &&

./configure --prefix=/usr \
            --bindir=/bin \
            --libdir=/lib &&
make

This package does not come with a working test suite.

Now, as the root user:

make install &&

ln -sfv ../../lib/$(readlink /lib/libbtrfs.so) /usr/lib/libbtrfs.so &&
rm -v /lib/libbtrfs.{a,so}

Command Explanations

sed ... Documentation/Makefile.in: Disables compressing man pages to be consistent with the rest of BLFS.

--disable-documentation: This option is needed if the recommended dependencies are not installed.

ln -s ... /usr/lib/libbtrfs.so: Creates a symbolic link in the directory where it is expected.

rm /lib/libbtrfs.{a,so}: Removes unneeded library entries.

Contents

Installed Programs: btrfs, btrfs-convert, btrfs-debug-tree, btrfs-find-root, btrfs-image, btrfs-map-logical, btrfs-select-super, btrfs-show-super, btrfs-zero-log, btrfsck (link to btrfs), btrfstune, fsck.btrfs, and mkfs.btrfs
Installed Libraries: libbtrfs.so
Installed Directories: /usr/include/btrfs

Short Descriptions

btrfs

is the main interface into btrfs filesystem operations.

btrfs-convert

converts from ext2/3/4 filesystem to btrfs.

btrfs-debug-tree

queries various internal information.

btrfs-find-root

is a filter to find btrfs root.

btrfs-map-logical

maps btrfs logical extent to physical extent.

btrfs-select-super

overwrites primary superblock with a backup copy.

btrfs-show-super

queries various internal information.

btrfs-zero-log

recovers a damaged btrfs filesystem.

btrfstune

tunes various filesystem parameters.

fsck.btrfs

does nothing, but is present for consistency with fstab.

mkfs.btrfs

creates a btrfs file system.

Last updated on 2017-02-15 19:06:46 -0800

Fuse-2.9.7

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-8.0 platform.

Package Information

Fuse Dependencies

Optional

Doxygen-1.8.13 (to build the API documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fuse

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

File systems  --->
  <*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]

Installation of Fuse

Note

After the configure script has finished you will see a warning shown below. You can safely disregard this warning.

configure: WARNING:
******************************************************************
* Please install util-linux version 2.18 or later which supports *
* --fake and --no-canonicalize options in mount and umount       *
******************************************************************

Install Fuse by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            INIT_D_PATH=/tmp/init.d &&

make

If you have Doxygen-1.8.13 installed and wish to build the API documentation, issue doxygen doc/Doxyfile.

This package does not come with a test suite.

Now, as the root user:

make install &&

mv -v   /usr/lib/libfuse.so.* /lib &&
ln -sfv ../../lib/libfuse.so.2.9.7 /usr/lib/libfuse.so &&
rm -rf  /tmp/init.d &&

install -v -m755 -d /usr/share/doc/fuse-2.9.7 &&
install -v -m644    doc/{how-fuse-works,kernel.txt} \
                    /usr/share/doc/fuse-2.9.7

If you built the API documentation, install it as the root user by issuing the following commands:

install -v -m755 -d /usr/share/doc/fuse-2.9.7/api &&
install -v -m644    doc/html/* \
                    /usr/share/doc/fuse-2.9.7/api

Command Explanations

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

INIT_D_PATH=/tmp/init.d: This parameter installs the bootscript into /tmp/init.d as a bootscript is not required.

mv -v /usr/lib/libfuse.so.* /lib: This moves the FUSE library to the root filesystem so that it is available early in the boot process in case /usr is mounted on a separate partition and ntfs-3g-2016.2.22 is built with a system-installed version of FUSE.

rm -rf /tmp/init.d: This removes the unneeded bootscript.

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: fusermount, mount.fuse, and ulockmgr_server
Installed Libraries: libfuse.so and libulockmgr.so
Installed Directory: /usr/include/fuse and /usr/share/doc/fuse-2.9.7

Short Descriptions

fusermount

is a set users ID root program to mount and unmount Fuse filesystems.

mount.fuse

is the command mount would call to mount a Fuse filesystem.

ulockmgr_server

is the Userspace Lock Manager Server for Fuse filesystems.

libfuse.so

contains the FUSE API functions.

libulockmgr.so

contains the Userspace Lock Manager API functions.

Last updated on 2017-02-14 13:20:57 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/jfs

Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

File systems  --->
  <*/M> JFS filesystem support [CONFIG_JFS_FS]

Installation of jfsutils

Install jfsutils by running the following commands:

sed "s@<unistd.h>@&\n#include <sys/types.h>@g" -i fscklog/extract.c &&
./configure &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed "s@<unistd.h>@&\n#include <sys/types.h>@g" -i fscklog/extract.c: Fixes building with Glibc 2.17.

Contents

Installed Programs: fsck.jfs, jfs_debugfs, jfs_fsck, jfs_fscklog, jfs_logdump, jfs_mkfs, jfs_tune, mkfs.jfs
Installed Libraries: None
Installed Directories: None

Short Descriptions

fsck.jfs

is used to replay the JFS transaction log, check a JFS formatted device for errors, and fix any errors found.

jfs_fsck

is a hard link to fsck.jfs.

mkfs.jfs

constructs an JFS file system.

jfs_mkfs

is a hard link to mkfs.jfs.

jfs_debugfs

is a program which can be used to perform various low-level actions on a JFS formatted device.

jfs_fscklog

extracts a JFS fsck service log into a file and/or formats and displays the extracted file.

jfs_logdump

dumps the contents of the journal log from the specified JFS formatted device into output file ./jfslog.dmp.

jfs_tune

adjusts tunable file system parameters on JFS file systems.

Last updated on 2017-02-15 19:06:46 -0800

LVM2-2.02.168

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-8.0 platform.

Package Information

  • Download (FTP): ftp://sources.redhat.com/pub/lvm2/releases/LVM2.2.02.168.tgz

  • Download MD5 sum: 00209bdd6befe9a7330f162909313ae8

  • Download size: 2.1 MB

  • Estimated disk space required: 35 MB (add 15 MB for tests, however transient files can grow up to around 500 MB)

  • Estimated build time: 0.4 SBU (add 19 SBU for tests)

LVM2 Dependencies

Optional

mdadm-4.0, reiserfsprogs-3.6.25, Valgrind-3.12.0, Which-2.21, xfsprogs-4.9.0 (all five may be used, but are not required, for tests), and thin-provisioning-tools

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lvm2

Caution

Kernel versions between 4.1 and 4.4.1 have a broken RAID implementation. If you want to use RAID type LV's, you should install kernel version 4.4.2 or above. Note that several tests use RAID logical volumes, and can generate a “kernel oops” with the faulty kernel version, which usually renders the system unusable.

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel:

Note

There are several other Device Mapper options in the kernel beyond those listed below. In order to get reasonable results if running the regression tests, all must be enabled either internally or as a module. The tests will all time out if Magic SysRq key is not enabled.

Device Drivers --->
  [*] Multiple devices driver support (RAID and LVM) ---> [CONFIG_MD]
    <*/M>   Device mapper support                         [CONFIG_BLK_DEV_DM]
    <*/M/ >   Crypt target support                        [CONFIG_DM_CRYPT]
    <*/M/ >   Snapshot target                             [CONFIG_DM_SNAPSHOT]
    <*/M/ >   Thin provisioning target                    [CONFIG_DM_THIN_PROVISIONING]
    <*/M/ >   Mirror target                               [CONFIG_DM_MIRROR]
Kernel hacking --->
  [*] Magic SysRq key                                     [CONFIG_MAGIC_SYSRQ]

Installation of LVM2

Install LVM2 by running the following commands:

SAVEPATH=$PATH                  &&
PATH=$PATH:/sbin:/usr/sbin      &&
./configure --prefix=/usr       \
            --exec-prefix=      \
            --enable-applib     \
            --enable-cmdlib     \
            --enable-pkgconfig  \
            --enable-udev_sync  &&
make                            &&
PATH=$SAVEPATH                  &&
unset SAVEPATH

The tests use udev for logical volume synchronization, so that 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_dmsetup_dynamic &&
make -C udev  install                 &&
make -C libdm install

To test the results, issue: make check_local as the root user. 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.

Those 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 may explain some failures. 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 with kernel versions in the 4.1 and 4.2 series (see above). They can be removed if necessary, for example: rm test/shell/lvcreate-large-raid.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).

Now, as the root user:

make install

Command Explanations

PATH=$PATH:/sbin:/usr/sbin: The path must contain /sbin and /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-applib: This switch enables building of the shared application library.

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

--enable-lvmetad: This switch enables building of the LVM metadata daemon, which avoids scanning all the filesystems when an lvm command is run.

Contents

Installed Programs: blkdeactivate, dmeventd (optional), dmsetup, fsadm, lvm, lvmconf, lvmdump, and lvmetad (optional). There are also numerous symbolic links to lvm that implement specific functionalities
Installed Libraries: libdevmapper.so, liblvm2app.so, and liblvm2cmd.so; optional: libdevmapper-event.so, libdevmapper-event-lvm2.so, libdevmapper-event-lvm2mirror.so, libdevmapper-event-lvm2snapshot.so, libdevmapper-event-lvm2raid.so, and libdevmapper-event-lvm2thin.so
Installed Directories: /etc/lvm and /lib/device-mapper (optional)

Short Descriptions

blkdeactivate

is a utility to deactivate block device.

dmeventd

(optional) is the Device Mapper event daemon.

dmsetup

is a low level logical volume management tool.

fsadm

is a utility used to resize or check filesystem on a device.

lvm

provides the command-line tools for LVM2. Commands are implemented via sympolic links to this program to manage physical devices (pv*), volume groups (vg*) and logical volumes (lv*).

lvmconf

is a script that modifies the locking configuration in the LVM2 configuration file.

lvmdump

is a tool used to dump various information concerning LVM2.

lvmetad

(optional) is the LVM metadata daemon.

vgimportclone

is used to import a duplicated VG (e.g. hardware snapshot).

libdevmapper.so

contains the Device Mapper API functions.

Last updated on 2017-02-15 19:06:46 -0800

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

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

The LFS boot scripts automatically make these file systems available to the system in the checkfs 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) and is not discussed here.

For a more information about LVM, see the LVM HOWTO and the lvm man pages.

Last updated on 2013-02-11 10:51:17 -0800

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

There are three major types of RAID implementation: Hardware RAID, BIOS-based RAID, and Software RAID.

Hardware RAID

Hardware based RAID provides capability through proprietary hardware and data layouts. The control and configuration is generally done via firmware in conjunction with executable programs made available by the device manufacturer. The capabilities are generally supplied via a PCI card, although there are some instances of RAID components integrated in to the motherboard. Hardware RAID may also be available in a stand-alone enclosure.

One advantage of hardware-based RAID is that the drives are offered to the operating system as a logical drive and no operating system dependent configuration is needed.

Disadvantages include difficulties in transferring drives from one system to another, updating firmware, or replacing failed RAID hardware.

BIOS-based RAID

Some computers offter a hardware-like RAID implementation in the system BIOS. Sometime this is referred to as 'fake' RAID as the capabilites are generally incorporated into firmware without any hardware acceleration.

The advantages and disadvantages of BIOS-based RAID are generally the same as hardware RAID with the additional disadvantage that there is no hardware acceleration.

In some cases, BIOS-based RAID firmware is enabled by default (e.g. some DELL systems). If software RAID is desired, this option must be explicitly disabled in the BIOS.

Software RAID

Software based RAID is the most flexible form of RAID. It is easy to install and update and provides full capability on all or part of any drives available to the system. In BLFS, the RAID software is found in mdadm-4.0.

Configuring a RAID device is straight forward using mdadm. Generally devices are created in the /dev directory as /dev/mdx where x is an integer.

The first step in creating a RAID array is to use partitioning software such as fdisk or parted-3.2 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 

Is 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 botih reading and writing large files. Finally, a fourth array is created that concatenates two partitions into a larger device.

Note

All mdadm commands must be run as the root user.

To create these RAID arrays the commands are:

/sbin/mdadm -Cv /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
/sbin/mdadm -Cv /dev/md1 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
/sbin/mdadm -Cv /dev/md3 --level=0 --raid-devices=2 /dev/sdc1 /dev/sdd1
/sbin/mdadm -Cv /dev/md2 --level=5 --raid-devices=4 \
        /dev/sda4 /dev/sdb4 /dev/sdc2 /dev/sdd2 

The devices created can be examined by device. For example, to see the details of /dev/md1, use /sbin/mdadm --detail /dev/md1:

        Version : 1.2
  Creation Time : Tue Feb  7 17:08:45 2012
     Raid Level : raid1
     Array Size : 10484664 (10.00 GiB 10.74 GB)
  Used Dev Size : 10484664 (10.00 GiB 10.74 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Feb  7 23:11:53 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : core2-blfs:0  (local to host core2-blfs)
           UUID : fcb944a4:9054aeb2:d987d8fe:a89121f8
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

From this point, the partitions can be formated with the filesystem of choice (e.g. ext3, ext4, xfsprogs-4.9.0, reiserfsprogs-3.6.25, etc). The formatted partitions can then be mounted. The /etc/fstab file can use the devices created for mounting at boot time and the linux command line in /boot/grub/grub.cfg can specify root=/dev/md1.

Note

The swap devices should be specified in the /etc/fstab file as normal. The kernel normally stripes swap data across multiple swap files and should not be made part of a RAID array.

For further options and management details of RAID devices, refer to man mdadm.

Additional details for monitoring RAID arrays and dealing with problems can be found at the Linux RAID Wiki.

Last updated on 2016-01-30 14:15:21 -0800

mdadm-4.0

Introduction to mdadm

The mdadm package contains administration tools for software RAID.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mdadm

Caution

Kernel versions in series 4.1 through 4.4.1 have a broken RAID implementation. Use a kernel with version at or above 4.4.2.

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel, if necessary. Only the RAID types desired are required.

Device Drivers --->
  [*] Multiple devices driver support (RAID and LVM) ---> [CONFIG_MD]
    <*> RAID support                                      [CONFIG_BLK_DEV_MD]
    [*]   Autodetect RAID arrays during kernel boot       [CONFIG_MD_AUTODETECT]
    <*/M>  Linear (append) mode                           [CONFIG_MD_LINEAR]
    <*/M>  RAID-0 (striping) mode                         [CONFIG_MD_RAID0]
    <*/M>  RAID-1 (mirroring) mode                        [CONFIG_MD_RAID1]
    <*/M>  RAID-10 (mirrored striping) mode               [CONFIG_MD_RAID10]
    <*/M>  RAID-4/RAID-5/RAID-6 mode                      [CONFIG_MD_RAID456]

Installation of mdadm

Install mdadm by running the following commands:

make

If you wish to run the tests, ensure that your kernel supports RAID and that a version of mdadm is not already running. As many as 9 out of 124 tests may fail.

First fix the test script to avoid a bogus error message when tests fail and build the supporting programs:

sed -i 's# if.* == "1"#& -a -e $targetdir/log#' test &&
make test

Run the tests as the root user:

./test --keep-going --logdir=test-logs --save-logs

Now, as the root user:

make install

Command Explanations

make everything: This optional target creates extra programs, particularly a statically-linked version of mdadm and also versions of mdassemble. These all need to be manually installed.

--keep-going: Run the tests to the end, even if one or more tests fail.

--logdir=test-logs: Defines that the directory where test logs are saved.

--save-logs: Instructs the test suite to save the logs.

--tests=<test1,test2,...>: Optional comma separated list of tests to be executed (all tests, if this option is not passed).

Contents

Installed Programs: mdadm, mdmon and optionally mdassemble
Installed Libraries: None
Installed Directory: None

Short Descriptions

mdadm

manages MD devices aka Linux Software RAID.

mdmon

monitors MD external metadata arrays.

mdassemble

is a tiny program that can be used to assemble MD devices inside an initial ramdisk (initrd) or initramfs.

Last updated on 2017-02-15 19:06:46 -0800

ntfs-3g-2016.2.22

Introduction to Ntfs-3g

The Ntfs-3g package contains a stable, read-write open source driver for NTFS partitions. NTFS partitions are used by most Microsoft operating systems. Ntfs-3g allows you to mount NTFS partitions in read-write mode from your Linux system. It uses the FUSE kernel module to be able to implement NTFS support in user space.

This package contains both the NTFS-3g driver itself and various utilities useful for manipulating NTFS partitions.

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

Package Information

Additional Downloads

Ntfs-3g Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ntfs-3g

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

File systems  --->
  <*/M> FUSE (Filesystem in Userspace) support [CONFIG_FUSE_FS]

Installation of Ntfs-3g

Install Ntfs-3g by running the following commands:

patch -Np1 -i ../ntfs-3g-2016.2.22-security_fix-1.patch &&
./configure --prefix=/usr --disable-static --with-fuse=external &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
ln -sv ../bin/ntfs-3g /sbin/mount.ntfs &&
ln -sv ntfs-3g.8 /usr/share/man/man8/mount.ntfs.8

If you want ordinary users to be able to mount NTFS partitions you'll need to set mount.ntfs with the root user ID. Note: it is probably unsafe to do this on a computer that needs to be secure (like a server). As the root user:

chmod -v 4755 /sbin/mount.ntfs

Command Explanations

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

patch -Np1 -i ...: This command applies a security patch from upstream to fix ntfs-3g on systems that use setuid for the executable.

--with-fuse=external: This switch dynamically links lowntfs-3g and ntfs-3g to external libfuse. Omit it if you have not installed Fuse-2.9.7 or if you want to use internal statically compiled libfuse.

--disable-ntfsprogs: Disables installation of various utilities used to manipulate NTFS partitions.

ln -sv ../bin/ntfs-3g /sbin/mount.ntfs: Creating /sbin/mount.ntfs makes mount default to using Ntfs-3g to mount NTFS partitions.

chmod -v 4755 /sbin/mount.ntfs: 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, ntfs-3g.secaudit, ntfs-3g.usermap, 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.

ntfs-3g.secaudit

audits NTFS Security Data.

ntfs-3g.usermap

creates the file defining the mapping of Windows accounts to Linux logins for users who owns files which should be visible from both Windows and Linux.

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 tells the differences.

ntfsinfo

dumps a file's attributes.

ntfslabel

displays or changes the label on an ntfs file system.

ntfsresize

resizes an NTFS filesystem without data loss.

ntfsundelete

recovers a deleted file from an NTFS volume.

libntfs-3g.so

contains the Ntfs-3g API functions.

Last updated on 2017-02-15 18:28:58 -0800

gptfdisk-1.0.1

Introduction to gptfdisk

The gptfdisk package is a set of programs for creation and maintenance of GUID Partition Table (GPT) disk drives. A GPT partitioned disk is required for drives greater than 2 TB and is a modern replacement for legacy PC-BIOS partitioned disk drives that use a Master Boot Record (MBR). The main program, gdisk, has an inteface similar to the classic fdisk program.

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

Package Information

Additional Downloads

gptfdisk Dependencies

Optional

popt-1.16 (required to build sgdisk) and ICU-58.2 (for Unicode partition names)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gptdisk

Installation of gptfdisk

The gptfdisk package comes with a rudimentary Makefile. First we update it to provide a simple build and install interface. Install gptfdisk by running the following commands:

patch -Np1 -i ../gptfdisk-1.0.1-convenience-1.patch &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

ICU=1: Adding this option to the make command allows use of Unicode characters in partition names.

POPT=1: Adding this option to the make command is required to build sgdisk. If used, this option needs to be on both the make and the make install line.

Contents

Installed Programs: cgdisk, gdisk, fixparts, and sgdisk

Short Descriptions

cgdisk

is an is a curses-based text-mode tool for manipulating GPT partitions.

gdisk

is an interactive text-mode tool for manipulating GPT partitions.

fixparts

repairs mis-formatted MBR based disk partitions.

sgdisk

is a partition manipulation program for GPT partitions similar to sfdisk.

Last updated on 2017-02-15 18:28:58 -0800

parted-3.2

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-8.0 platform.

Package Information

  • Download (HTTP): http://ftp.gnu.org/gnu/parted/parted-3.2.tar.xz

  • Download MD5 sum: 0247b6a7b314f8edeb618159fa95f9cb

  • Download size: 1.6 MB

  • Estimated disk space required: 27 MB (additional 2 MB for the tests and additional 1 MB for optional PDF and Postscript documentation)

  • Estimated build time: 0.4 SBU (additional 0.6 SBU for the tests)

Additional Downloads

Parted Dependencies

Recommended
Optional

Pth-2.0.7 and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/parted

Installation of parted

If you want to build without device mapper support, a fix is necessary:

patch -Np1 -i ../parted-3.2-devmapper-1.patch

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-20160523b installed and wish to create PDF and Postcript documentation issue the following commands:

texi2pdf             -o doc/parted.pdf doc/parted.texi &&
texi2dvi             -o doc/parted.dvi doc/parted.texi &&
dvips                -o doc/parted.ps  doc/parted.dvi

If you wish to run the test suite, first remove a test that normally fails in BLFS, because it needs a locale C.UTF-8:

sed -i '/t0251-gpt-unicode.sh/d' tests/Makefile

To test the results, issue: make check. Note that 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.2/html &&
install -v -m644    doc/html/* \
                    /usr/share/doc/parted-3.2/html &&
install -v -m644    doc/{FAT,API,parted.{txt,html}} \
                    /usr/share/doc/parted-3.2

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

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

Short Descriptions

parted

is a partition manipulation program.

partprobe

informs the OS of partition table changes.

libparted.so

contains the Parted API functions.

Last updated on 2017-02-15 19:06:46 -0800

reiserfsprogs-3.6.25

Introduction to reiserfsprogs

The reiserfsprogs package contains various utilities for use with the Reiser file system.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/reiser

Kernel Configuration

Enable the following option in the kernel configuration and recompile the kernel:

File systems --->
  <*/M> Reiserfs support [CONFIG_REISERFS_FS]

Installation of reiserfsprogs

Install reiserfsprogs by running the following commands:

CFLAGS="$CFLAGS -std=gnu89" \
./configure --prefix=/usr   \
            --sbindir=/sbin &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

CFLAGS="$CFLAGS -std=gnu89": This environment variable fixes a build error with GCC 5.

--sbindir=/sbin: This switch ensures that the reiserfsprogs utilities are installed in /sbin.

Contents

Installed Programs: debugreiserfs, mkreiserfs, reiserfsck, reiserfstune, and resize_reiserfs
Installed Libraries: libreiserfscore.so
Installed Directories: None

Short Descriptions

debugreiserfs

can sometimes help to solve problems with ReiserFS file systems. If it is called without options, it prints the super block of any ReiserFS file system found on the device.

mkreiserfs

creates a ReiserFS file system.

reiserfsck

is used to check or repair a ReiserFS file system.

reiserfstune

is used for tuning the ReiserFS journal. WARNING: Don't use this utility without first reading the man page thoroughly.

resize_reiserfs

is used to resize an unmounted ReiserFS file system.

Last updated on 2017-02-15 19:06:46 -0800

smartmontools-6.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-8.0 platform.

Package Information

smartmontools Dependencies

Optional (runtime)

cURL-7.52.1 or Lynx-2.8.8rel.2 or Wget-1.19.1 (download tools)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gptdisk

Installation of smartmontools

Install smartmontools by running the following commands:

./configure --prefix=/usr           \
            --sysconfdir=/etc       \
            --with-initscriptdir=no \
            --docdir=/usr/share/doc/smartmontools-6.5 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Configuring smartmontools

Config File

/etc/smartd.conf

Configuration Information

See the embedded comments in /etc/smartd.conf for detailed instructions on customizing the smartd darmon.

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-20170225 package.

make install-smartd

Command Explanations

--with-initscriptdir=no: This switch suppresses the default initialization script. See above for the BLFS script.

Contents

Installed Programs: smartctl, smartd, and update-smart-drivedb
Installed Libraries: None
Installed Directories: /usr/share/smartmontools, /usr/share/doc/smartmontools-6.4, and /etc/smartd_warning.d

Short Descriptions

smartctl

is the control and monitor utility for SMART Disks.

smartd

is the SMART disk monitoring daemon.

update-smart-drivedb

is the update tool for the smartmontools drive database.

Last updated on 2017-02-18 13:51:19 -0800

sshfs-2.8

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-8.0 platform.

Package Information

Sshfs Dependencies

Required

Fuse-2.9.7, GLib-2.50.3, and OpenSSH-7.4p1.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sshfs

Installation of Sshfs

Install Sshfs by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Using Sshfs

To mount an ssh server you need to be able to log into the server. For example, to mount your home folder on the computer called THINGY on the folder ~/MOUNTPATH (the directory must exist and you must have permissions to write to it):

sshfs THINGY:~ ~/MOUNTPATH

When you've finished work and want to unmount it again:

fusermount -u ~/MOUNTPATH

Contents

Installed Program: sshfs
Installed Libraries: None
Installed Directories: None

Short Descriptions

sshfs

mounts an ssh server as a local file system.

Last updated on 2016-08-27 23:14:16 +0200

xfsprogs-4.9.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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfs

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel:

File systems --->
  <*/M> XFS filesystem support [CONFIG_XFS_FS]

Installation of xfsprogs

Install xfsprogs by running the following commands:

make DEBUG=-DNDEBUG     \
     INSTALL_USER=root  \
     INSTALL_GROUP=root \
     LOCAL_CONFIGURE_OPTIONS="--enable-readline"

This package does not come with a test suite.

Now, as the root user:

make PKG_DOC_DIR=/usr/share/doc/xfsprogs-4.9.0 install     &&
make PKG_DOC_DIR=/usr/share/doc/xfsprogs-4.9.0 install-dev &&

rm -rfv /usr/lib/libhandle.a                               &&
rm -rfv /lib/libhandle.{a,la,so}                           &&
ln -sfv ../../lib/libhandle.so.1 /usr/lib/libhandle.so     &&
sed -i "s@libdir='/lib@libdir='/usr/lib@" /usr/lib/libhandle.la

Command Explanations

make DEBUG=-DNDEBUG: Turns off debugging symbols.

INSTALL_USER=root INSTALL_GROUP=root: This sets the owner and group of the installed files.

LOCAL_CONFIGURE_OPTIONS="...": This passes extra configuration options to the configure script. The example --enable-readline parameter enables linking the XFS programs with the libreadline.so library, in order to allow editing interactive commands.

OPTIMIZER="...": Adding this parameter to the end of the make command overrides the default optimization settings.

Contents

Installed Programs: fsck.xfs, mkfs.xfs, xfs_admin, xfs_bmap, xfs_copy, xfs_db, xfs_estimate, xfs_freeze, xfs_fsr, xfs_growfs, xfs_info, xfs_io, xfs_logprint, xfs_mdrestore, xfs_metadump, xfs_mkfile, xfs_ncheck, xfs_quota, xfs_repair, and xfs_rtcp
Installed Libraries: libhandle.so
Installed Directories: /usr/include/xfs and /usr/share/doc/xfsprogs-4.9.0

Short Descriptions

fsck.xfs

simply exits with a zero status, since XFS partitions are checked at mount time.

mkfs.xfs

constructs an XFS file system.

xfs_admin

changes the parameters of an XFS file system.

xfs_bmap

prints block mapping for an XFS file.

xfs_copy

copies the contents of an XFS file system to one or more targets in parallel.

xfs_estimate

for each directory argument, estimates the space that directory would take if it were copied to an XFS filesystem (does not cross mount points).

xfs_db

is used to debug an XFS file system.

xfs_freeze

suspends access to an XFS file system.

xfs_fsr

applicable only to XFS filesystems, improves the organization of mounted filesystems, the reorganization algorithm operates on one file at a time, compacting or othewise improving the layout of the file extents (contiguous blocks of file data).

xfs_growfs

expands an XFS file system.

xfs_info

is equivalent to invoking xfs_growfs, but specifying that no change to the file system is to be made.

xfs_io

is a debugging tool like xfs_db, but is aimed at examining the regular file I/O path rather than the raw XFS volume itself.

xfs_logprint

prints the log of an XFS file system.

xfs_mdrestore

restores an XFS metadump image to a filesystem image.

xfs_metadump

copies XFS filesystem metadata to a file.

xfs_mkfile

creates an XFS file, padded with zeroes by default.

xfs_ncheck

generates pathnames from inode numbers for an XFS file system.

xfs_quota

is a utility for reporting and editing various aspects of filesystem quota.

xfs_repair

repairs corrupt or damaged XFS file systems.

xfs_rtcp

copies a file to the real-time partition on an XFS file system.

libhandle.so

contains XFS-specific functions that provide a way to perform certain filesystem operations without using a file descriptor to access filesystem objects.

Last updated on 2017-02-15 19:06:46 -0800

Chapter 6. Editors

This chapter is referenced in the LFS book for those wishing to use other editors on their LFS system. You're also shown how some LFS installed programs benefit from being recompiled after GUI libraries have been installed.

Bluefish-2.2.10

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-8.0 platform.

Package Information

Bluefish Dependencies

Required

GTK+-2.24.31 or GTK+-3.22.8 (If both are installed, configure defaults to using GTK+ 3)

Recommended
Optional

enchant-1.6.0 (for spell checking), Gucharmap-9.0.2, PCRE-8.40 and Jing

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/bluefish

Installation of Bluefish

Install Bluefish by running the following commands:

./configure --prefix=/usr --docdir=/usr/share/doc/bluefish-2.2.10 &&
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.23 (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.10, and /usr/share/xml/bluefish

Short Descriptions

bluefish

is a GTK+ text editor for markup and programming.

Last updated on 2017-02-21 11:59:18 -0800

Ed-1.14.1

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-8.0 platform.

Package Information

Ed Dependencies

Required to uncompress the tarball

libarchive-3.2.2 (for bsdtar)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ed

Installation of Ed

Install Ed by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: ed and red
Installed Libraries: None
Installed Directories: None

Short Descriptions

ed

is a line-oriented text editor.

red

is a restricted ed—it can only edit files in the current directory and cannot execute shell commands.

Last updated on 2017-02-15 19:06:46 -0800

Emacs-25.1

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-8.0 platform.

Package Information

Emacs Dependencies

Recommended
Optional

X Window System, alsa-lib-1.1.3, dbus-1.10.14, GConf-3.2.6, GnuTLS-3.5.9, gobject-introspection-1.50.0, gsettings-desktop-schemas-3.22.0, GPM-1.20.7, GTK+-2.24.31 or GTK+-3.22.8, ImageMagick-6.9.7-8 libraries (see command explanations), libjpeg-turbo-1.5.1, libpng-1.6.28, librsvg-2.40.16, LibTIFF-4.0.7, libxml2-2.9.4, MIT Kerberos V5-1.15, Valgrind-3.12.0, intlfonts, libungif, libotf and m17n-lib - to correctly display such complex scripts as Indic and Khmer, and also for scripts that require Arabic shaping support (Arabic and Farsi), and libXaw3d

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/emacs

Installation of Emacs

Install Emacs by running the following commands:

./autogen.sh                                   &&
./configure --prefix=/usr --localstatedir=/var &&
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/25.1

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 GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (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

Command Explanations

--localstatedir=/var: Create game score files in /var/games/emacs instead of /usr/var/games/emacs.

IMAGEMAGICK_CFLAGS=-I/usr/include/ImageMagick-6 IMAGEMAGICK_LIBS="-lMagickCore-6.Q16HDRI -lMagick++-6.Q16HDRI -lMagickWand-6.Q16HDRI" : use these when you invoke configure if you have installed ImageMagick-6.9.7-8 libraries and wish to link to them (the normal unversioned pkgconfig files collide with ImageMagick-7.0.4-8 which this package cannot use).

--with-giflib=no: Use this if you have not installed giflib-5.1.4 or libungif.

Contents

Installed Programs: ctags, ebrowse, emacs (symlink), emacs-25.1, emacsclient, etags, and grep-changelog
Installed Libraries: None
Installed Directories: /usr/libexec/emacs, /usr/share/emacs, and /var/games/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.

grep-changelog

prints entries in Change Logs matching various criteria.

Last updated on 2017-02-18 22:38:48 -0800

JOE-4.4

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/joe

Installation of JOE

Install JOE by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --docdir=/usr/share/doc/joe-4.4 &&
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 &&

install -vdm755 /usr/share/joe/util &&
install -vm 644 joe/util/{*.txt,README} /usr/share/joe/util

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

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/joe/util/README).

termidx

is a program used by joe to generate the termcap index file (see /usr/share/joe/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/joe/util; see /usr/share/joe/util/README).

Last updated on 2017-02-15 19:06:46 -0800

Nano-2.6.3

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-8.0 platform.

Package Information

Nano Dependencies

Optional

slang-2.3.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Nano

Installation of Nano

Install Nano by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --enable-utf8     \
            --docdir=/usr/share/doc/nano-2.6.3 &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m644 doc/nanorc.sample /etc &&
install -v -m644 doc/texinfo/nano.html /usr/share/doc/nano-2.6.3

Command Explanations

--enable-utf8: This switch enables unicode support in Nano.

--with-slang: This forces Nano to use S-Lang. Use this if installed.

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 const
set fill 72
set historylog
set multibuffer
set nohelp
set regexp
set smooth
set suspend

Another example is the nanorc.sample file in the /etc 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.

Contents

Installed Programs: nano and rnano (symlink)
Installed Libraries: None
Installed Directories: /usr/share/nano and /usr/share/doc/nano-2.6.3

Short Descriptions

nano

is a small, simple text editor which aims to replace Pico, the default editor in the Pine package.

rnano

is a restricted mode for nano.

Last updated on 2017-02-15 19:06:46 -0800

Vim-8.0.069

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.

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

Package Information

Vim Dependencies

Recommended
Optional

GPM-1.20.7, Lua-5.3.4, Python-2.7.13, Ruby-2.4.0, Tcl-8.6.6, and LessTif

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vim

Installation of Vim

Note

If you recompile Vim to link against X and your X libraries are not on the root partition, you will no longer have an editor for use in emergencies. You may choose to install an additional editor, not link Vim against X, or move the current vim executable to the /bin directory under a different name such as vi.

Install Vim by running the following commands:

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 \
            --with-tlib=ncursesw &&
make

To test the results, issue: make test. The vim test suite outputs a lot of binary data to the screen, which can cause issues with the settings of the current terminal. This can be resolved by redirecting the output to a log file. Even if one of the tests fails to produce the file test.out in src/testdir, the remaining tests will still be executed. If all goes well,the final message in the log file will be ALL DONE. Note: Some color tests expect to be executed under the xterm terminal emulator.

Now, as the root user:

make install

By default, Vim's documentation is installed in /usr/share/vim. The following symlink allows the documentation to be accessed via /usr/share/doc/vim-8.0.069, making it consistent with the location of documentation for other packages:

ln -snfv ../vim/vim80/doc /usr/share/doc/vim-8.0.069

If you wish to update the runtime files, issue the following command (requires rsync-3.1.2):

rsync -avzcP --delete --exclude="/dos/" --exclude="/spell/" \
    ftp.nluug.nl::Vim/runtime/ ./runtime/

To install the runtime files and regenerate the tags file, as the root user issue:

make -C src installruntime &&
vim -c ":helptags /usr/share/doc/vim-8.0.069" -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-perlinterp, --enable-pythoninterp, --enable-tclinterp, --enable-rubyinterp: These options include the Perl, Python, Tcl, or Ruby interpreters that allow using other application code in vim scripts.

Configuring Vim

Config Files

/etc/vimrc and ~/.vimrc

Desktop File

If desired, create a menu entry for graphical vim, gvim.desktop, as the root user

cat > /usr/share/applications/gvim.desktop << "EOF"
[Desktop Entry]
Name=GVim Text Editor
Comment=Edit text files
Comment[pt_BR]=Edite arquivos de texto
TryExec=gvim
Exec=gvim -f %F
Terminal=false
Type=Application
Icon=gvim.png
Categories=Utility;TextEditor;
StartupNotify=true
MimeType=text/plain;
EOF

Configuration Information

Vim has an integrated spell checker which you can enable it if you issue 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/vim80/spell/.

To find out what's new in Vim-8.0.069 issue the following command:

:help version-8.0.069

For additional information on setting up Vim configuration files, see The vimrc Files and http://vim.wikia.com/wiki/Example_vimrc.

Contents

A list of the reinstalled files, along with their short descriptions can be found in the LFS Vim Installation Instructions

Installed Programs: gview, gvim, gvimdiff, 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.

rgview

is a restricted version of gview.

rgvim

is a restricted version of gvim.

Last updated on 2017-02-21 11:59:18 -0800

Other Editors

  • Geany is a text editor using the GTK+2 toolkit with basic features of an integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It supports many filetypes and has some nice features.

  • Leafpad is a very simple text editor using the GTK+2 toolkit.

  • mcedit is a text editor installed as part of MC-4.8.18.

  • pico is a text editor installed as a part of Re-alpine-2.03.

Last updated on 2015-07-23 15:14:29 -0700

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

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-8.0 platform.

Package Information

Dash Dependencies

Optional

libedit (command line editor library)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dash

Installation of Dash

Install Dash by running the following commands:

./configure --bindir=/bin --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install

If you would like to make dash the default sh, recreate the /bin/sh symlink as the root user:

Note

If you create the symbolic link from dash to sh, you will need to reset the link to bash to build LFS.

ln -svf dash /bin/sh

Command Explanations

--bindir=/bin: This parameter places the dash binary into the root filesystem.

--with-libedit: To compile Dash with libedit support.

Configuring Dash

Config Files

Dash sources /etc/profile and ~/.profile

Configuration Information

Update /etc/shells to include the Dash shell by issuing the following command as the root user:

cat >> /etc/shells << "EOF"
/bin/dash
EOF

Contents

Installed Program: dash
Installed Libraries: None
Installed Directories: None

Short Description

dash

is a POSIX compliant shell.

Last updated on 2017-02-15 19:06:46 -0800

Tcsh-6.20.00

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tcsh

Installation of Tcsh

First, fix the package for tool chain changes:

sed -i 's|SVID_SOURCE|DEFAULT_SOURCE|g' config/linux  &&
sed -i 's|BSD_SOURCE|DEFAULT_SOURCE|g'  config/linux

Install Tcsh by running the following commands:

./configure --prefix=/usr --bindir=/bin &&

make &&
sh ./tcsh.man2html

To test the results, issue: make check.

Now, as the root user:

make install install.man &&

ln -v -sf tcsh   /bin/csh &&
ln -v -sf tcsh.1 /usr/share/man/man1/csh.1 &&

install -v -m755 -d          /usr/share/doc/tcsh-6.20.00/html &&
install -v -m644 tcsh.html/* /usr/share/doc/tcsh-6.20.00/html &&
install -v -m644 FAQ         /usr/share/doc/tcsh-6.20.00

Command Explanations

--bindir=/bin: This installs the tcsh program in /bin instead of /usr/bin.

sh ./tcsh.man2html: This creates HTML documentation from the formatted man page.

ln -v -sf tcsh /bin/csh: The FHS states that if there is a C shell installed, there should be a symlink from /bin/csh to it. This creates that symlink.

Configuring Tcsh

Config Files

There are numerous configuration files for the C shell. Examples of these are /etc/csh.cshrc, /etc/csh.login, /etc/csh.logout, ~/.tcshrc, ~/.cshrc, ~/.history, ~/.cshdirs, ~/.login, and ~/.logout. More information on these files can be found in the tcsh(1) man page.

Configuration Information

Update /etc/shells to include the C shell program names (as the root user):

cat >> /etc/shells << "EOF"
/bin/tcsh
/bin/csh
EOF

The following ~/.cshrc provides two alternative colour prompts and coloured ls output. If you prefer a global modification, issue the command as the root user, replacing ~/.cshrc by /etc/csh.cshrc.

cat > ~/.cshrc << "EOF"
# Original at:
# https://www.cs.umd.edu/~srhuang/teaching/code_snippets/prompt_color.tcsh.html

# Modified by the BLFS Development Team.

# Add these lines to your ~/.cshrc (or to /etc/csh.cshrc).

# Colors!
set     red="%{\033[1;31m%}"
set   green="%{\033[0;32m%}"
set  yellow="%{\033[1;33m%}"
set    blue="%{\033[1;34m%}"
set magenta="%{\033[1;35m%}"
set    cyan="%{\033[1;36m%}"
set   white="%{\033[0;37m%}"
set     end="%{\033[0m%}" # This is needed at the end...

# Setting the actual prompt.  Two separate versions for you to try, pick
# whichever one you like better, and change the colors as you want.
# Just don't mess with the ${end} guy in either line...  Comment out or
# delete the prompt you don't use.

set prompt="${green}%n${blue}@%m ${white}%~ ${green}%%${end} "
set prompt="[${green}%n${blue}@%m ${white}%~ ]${end} "

# This was not in the original URL above
# Provides coloured ls
alias ls ls --color=always

# Clean up after ourselves...
unset red green yellow blue magenta cyan yellow white end
EOF

Contents

Installed Program: tcsh
Installed Libraries: None
Installed Directory: /usr/share/doc/tcsh-6.20.00

Short Descriptions

tcsh

is an enhanced but completely compatible version of the Berkeley Unix C shell, csh. It is usable as both an interactive shell and a script processor.

Last updated on 2017-02-15 19:06:46 -0800

zsh-5.3.1

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-8.0 platform.

Package Information

  • Download (HTTP): http://www.zsh.org/pub/zsh-5.3.1.tar.xz

  • Download MD5 sum: 67d3e5ed99de68340c16aef613b0ecf7

  • Download size: 2.8 MB

  • Estimated disk space required: 44 MB (includes documentation and tests)

  • Estimated build time: 1.0 SBU (includes documentation and tests)

Additional Downloads

Note

When there is a new zsh release, the old files shown above are moved to a new server directory: http://www.zsh.org/pub/old/.

zsh Dependencies

Optional

libcap-2.25 with PAM, PCRE-8.40, and Valgrind-3.12.0,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/zsh

Installation of zsh

If you downloaded the optional documentation, unpack it with the following command:

tar --strip-components=1 -xvf ../zsh-5.3.1-doc.tar.xz

Install zsh by running the following commands:

./configure --prefix=/usr         \
            --bindir=/bin         \
            --sysconfdir=/etc/zsh \
            --enable-etcdir=/etc/zsh                  &&
make                                                  &&

makeinfo  Doc/zsh.texi --plaintext -o Doc/zsh.txt     &&
makeinfo  Doc/zsh.texi --html      -o Doc/html        &&
makeinfo  Doc/zsh.texi --html --no-split --no-headers -o Doc/zsh.html

If you have texlive-20160523b installed, you can build PDF format of the documentation by issuing the following command:

texi2pdf  Doc/zsh.texi -o Doc/zsh.pdf

To test the results, issue: make check.

Now, as the root user:

make install                              &&
make infodir=/usr/share/info install.info &&

install -v -m755 -d                 /usr/share/doc/zsh-5.3.1/html &&
install -v -m644 Doc/html/*         /usr/share/doc/zsh-5.3.1/html &&
install -v -m644 Doc/zsh.{html,txt} /usr/share/doc/zsh-5.3.1

If you downloaded the optional documentation, install it by issuing the following commands as the root user:

make htmldir=/usr/share/doc/zsh-5.3.1/html install.html &&
install -v -m644 Doc/zsh.dvi /usr/share/doc/zsh-5.3.1

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

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.

--bindir=/bin: This parameter places the zsh binaries into the root filesystem.

--enable-cap: This option enables POSIX capabilities.

--disable-gdbm: This option disables the use of the GDBM library.

--enable-pcre: This option allows zsh to use the PCRE regular expression library in shell builtins.

Multiple partitions

Linking zsh dynamically against pcre and/or gdbm produces runtime dependencies on libpcre.so and/or libgdbm.so respectively, which both reside in /usr hierarchy. If /usr is a separate mount point and zsh needs to be available in boot time, then its supporting libraries should be in /lib too. You can move the libraries as follows:

mv -v /usr/lib/libpcre.so.* /lib &&
ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so

mv -v /usr/lib/libgdbm.so.* /lib &&
ln -v -sf ../../lib/libgdbm.so.3 /usr/lib/libgdbm.so

Alternatively you can statically link zsh against pcre and gdbm if you modify the config.modules file (you need first to run configure to generate it).

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.3.1/functions/zsh-newuser-install -f.

There are several built-in advanced prompts. In the zsh shell, start advanced prompt support with autoload -U promptinit, then promptinit. Available prompt names are listed with prompt -l. Select a particular one with prompt <prompt-name>. Display all available prompts with prompt -p. Except for the list and display commands above, you can insert the other ones in ~/.zshrc to be automatically executed at shell start, with the prompt you chose.

Configuration Information

Update /etc/shells to include the zsh shell program names (as the root user):

cat >> /etc/shells << "EOF"
/bin/zsh
EOF

Contents

Installed Programs: zsh and zsh-5.3.1 (hardlinked to each other)
Installed Libraries: Numerous plugin helper modules under /usr/lib/zsh/5.3.1/
Installed Directories: /usr/{lib,share}/zsh and /usr/share/doc/zsh-5.3.1

Short Description

zsh

is a shell which has command-line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and a host of other features.

Last updated on 2017-02-15 19:06:46 -0800

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

Introduction to qemu

qemu is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V).

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

Package Information

  • Download (HTTP): http://wiki.qemu.org/download/qemu-2.8.0.tar.bz2

  • Download MD5 sum: 17940dce063b6ce450a12e719a6c9c43

  • Download size: 27 MB

  • Estimated disk space required: 435 MB (add 315 MB for tests)

  • Estimated build time: 2.1 SBU (add 1.6 SBU for tests)

Qemu Dependencies

Required

GLib-2.50.3, Python-2.7.13, and X Window System

Recommended
Optional

Depending on the sound system, various packages in ALSA-1.1.3, BlueZ-5.43, Check-0.11.0, cURL-7.52.1, Cyrus SASL-2.1.26, GnuTLS-3.5.9, GTK+-2.24.31, GTK+-3.22.8, libusb-1.0.21, libgcrypt-1.7.6, LZO-2.09, Nettle-3.3, Mesa-13.0.4, SDL-1.2.15, VTE-0.46.1 or Vte-0.28.2, libcacard, and libssh2

Note

This optional dependencies list is not comprehensive. See the output of ./configure --help for a more complete list.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qemu

KVM Prerequisites

Before building qemu, check to see if your processor supports Virtualization Technology (VT):

egrep '^flags.*(vmx|svm)' /proc/cpuinfo

If you get any output, you have VT technology (vmx for Intel processors and svm for AMD processors). You then need to go into your system BIOS and ensure it is enabled. After enabing, reboot back to your LFS instance.

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

[*] Virtualization:  --->                            [CONFIG_VIRTUALIZATION]
  <*/M>   Kernel-based Virtual Machine (KVM) support [CONFIG_KVM]
  <*/M>     KVM for Intel processors support         [CONFIG_KVM_INTEL]
  <*/M>     KVM for AMD processors support           [CONFIG_KVM_AMD]

The Intel or AMD settings are not both required, but the one matching your system processor is required.

To use the “bridge” network device, as explained below, check that bridge-utils-1.6 is installed and the following options in the kernel configuration are enabled:

[*] Networking support  --->                         [CONFIG_NET]
  Networking options  --->
    <*/M> 802.1d Ethernet Bridging                   [CONFIG_BRIDGE]
Device Drivers  --->
  [*] Network device support  --->                   [CONFIG_NETDEVICES]
    <*/M>    Universal TUN/TAP device driver support [CONFIG_TUN]

Installation of qemu

You will need a dedicated group that will contain users (other than root) allowed to access the KVM device. Create this group by running the following command as the root user:

groupadd -g 61 kvm

Add any users that might use the KVM device to that group:

usermod -a -G kvm <username>

Install qemu by running the following commands:

Note

Qemu is capable of running many targets. The build process is also capable of building multiple targets at one time in a comma delimited list assigned to --target-list. Run ./configure --help to get a complete list of available targets.

if [ $(uname -m) = i686 ]; then
   QEMU_ARCH=i386-softmmu
else
   QEMU_ARCH=x86_64-softmmu
fi

mkdir -vp build &&
cd        build &&

../configure --prefix=/usr               \
             --sysconfdir=/etc           \
             --target-list=$QEMU_ARCH    \
             --audio-drv-list=alsa       \
             --with-sdlabi=2.0           \
             --docdir=/usr/share/doc/qemu-2.8.0 &&

unset QEMU_ARCH &&

make

To run the built in tests, run make V=1 -k check.

Now, as the root user:

make install

You will also need to add an Udev rule so that the KVM device gets correct permissions:

cat > /lib/udev/rules.d/65-kvm.rules << "EOF"
KERNEL=="kvm", GROUP="kvm", MODE="0660"
EOF

Change the permissions and ownership of a helper script, which is needed when using the “bridge” network device (see below):

chgrp kvm  /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper

Note

For convenience you may want to create a symbolic link to run the installed program. For instance:

ln -sv qemu-system-`uname -m` /usr/bin/qemu

Command Explanations

--audio-drv-list=alsa: This switch sets the audio driver to ALSA. For other drivers see the --audio-drv-list list in configure's help output. The default audio driver is OSS.

--with-sdlabi=2.0: Chooses to build with SDL-2 if both SDL and SDL-2 are installed.

--with-gtkabi=3.0: builds with GTK+-3 if both GTK+-2 and GTK+-3 are installed.

Using Qemu

Since using qemu means using a virtual computer, the steps to set up the virtual machine are in close analogy with those to set up a real computer. You'll need to decide about CPU, memory, disk, USB devices, network card(s), screen size, etc. Once the “hardware” is decided, you'll have for example to choose how to connect the machine to internet, and/or to install an OS. In the following, we show basic ways of performing those steps. But qemu is much more than this, and it is strongly advised to read the qemu documentation in /usr/share/doc/qemu-2.8.0/qemu-doc.html.

Note

It is standard practice to name the computer running qemu “host” and the emulated machine running under qemu the “guest”. We'll use those notations in the following.

Note

The following instructions assume the optional symbolic link, qemu, has been created. Additionally, qemu must be run from an X Window System based terminal (either locally or over ssh).

Disk

A virtual disk may be set up in the following way:

VDISK_SIZE=50G
VDISK_FILENAME=vdisk.img
qemu-img create -f qcow2 $VDISK_FILENAME $VDISK_SIZE

The virtual disk size and filename should be ajusted 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 prefered Linux distribution. For the purposes of this example, we'll use Fedora-16-x86_64-Live-LXDE.iso in the current directory. Run the following:

qemu -enable-kvm                           \
     -drive file=$VDISK_FILENAME           \
     -cdrom Fedora-16-x86_64-Live-LXDE.iso \
     -boot d                               \
     -m 1G

Follow the normal installation procedures for the chosen distribution. The -boot option specifies the boot order of drives as a string of drive letters. Valid drive letters are: a, b (floppy 1 and 2), c (first hard disk), d (first CD-ROM). The -m option is the amount of memory to use for the virtual machine. The choice depends on the load of the host. Modern distributions should be comfortable with 1GB. The -enable-kvm option allows hardware acceleration. Without this switch, the emulation is much slower.

Defining the virtual hardware

The virtual machine hardware is defined by the qemu command line. An example command is given below:

qemu -enable-kvm                     \
     -smp 4                          \
     -cpu host                       \
     -m 1G                           \
     -drive file=$VDISK_FILENAME     \
     -cdrom grub-img.iso             \
     -boot order=c,once=d,menu=on    \
     -net nic,netdev=net0            \
     -netdev user,id=net0            \
     -soundhw ac97                   \
     -vga std                        \
     -serial mon:stdio               \
     -name "fedora-16"

Meaning of the command line options

-enable-kvm: enable full KVM virtualization support. On some hardware, it may be necessary to add the undocumented -machine smm=off option in order to enable KVM.

-smp <N>: enable symmetric multiprocessing with <N> CPUs.

-cpu <model>: simulate CPU <model>. the list of supported models can be obtained with -cpu help.

-drive file=<filename>: defines a virtual disk whose image is stored in <filename>.

-cdrom grub-img.iso: defines an iso formated file to use as a cdrom. Here we use a grub rescue disk, which may turn handy when something goes wrong at boot time.

-boot order=c,once=d,menu=on: defines the boot order for the virtual BIOS.

-net nic,netdev=<netid>: defines a network card connected to the network device with id <netid>.

-netdev user,id=<netid>: defines the network “user” device. This is a virtual local network with addresses 10.0.2.0/24, where the host has address 10.0.2.2 and acts as a gateway to internet, and with a name server at address 10.0.2.3, and an smb server at address 10.0.2.4. A builtin DHCP server can allocate addresses between 10.0.2.15 and 10.0.2.31.

-soundhw <model>: defines the soundcard model. The list may be obtained with -soundhw help.

-vga <type>: defines the type of vga card to emulate.

-serial mon:stdio: sends the serial port of the guest (/dev/ttyS0 on linux guests), multiplexed with the qemu monitor, to the standard input and output of the qemu process.

-name <name>: sets the name of the guest. This name is displayed in the guest window caption. It may be useful if you run several guests at the same time.

Controling the Emulated Display

It may happen that the guest window displayed by qemu does not correspond to the full capability of the emulated vga card. For example, the vmware card is 1600x900 capable, but only 1024x768 is displayed by default. A suitable Xorg configuration on the guest allows to use the full size (Note that the Xorg video driver to use is Xorg VMware Driver-13.2.1):

cat > /usr/share/X11/xorg.conf.d/20-vmware.conf << "EOF"
Section         "Monitor"
  Identifier    "Monitor0"
  # cvt 1600 900
  # 1600x900 59.95 Hz (CVT 1.44M9) hsync: 55.99 kHz; pclk: 118.25 MHz
  Modeline      "1600x900"  118.25  1600 1696 1856 2112  900 903 908 934 -hsync +vsync
  Option        "PreferredMode" "1600x900"
  HorizSync     1-200
  VertRefresh   1-200
EndSection

Section         "Device"
  Identifier    "VMware SVGA II Adapter"
  Option        "Monitor" "default"
  Driver        "vmware"
EndSection

Section         "Screen"
  Identifier    "Default Screen"
  Device        "VMware SVGA II Adapter"
  Monitor       "Monitor0"

  SubSection    "Display"
    Depth       24
    Modes       "1600x900" "1440x900" "1366x768" "1280x720" "800x480"
  EndSubSection

EndSection
EOF

New sizes will be available besides the native ones. You need to restart X in order to have the new sizes available.

Networking

The above solution for networking allows the guest to access the local network through the host (and possibly to access internet through the local routers), but the converse is not true. Not even the host can access the guest, unless port forwarding is enabled. And in the case several guests are running, they cannot communicate with each other. Other network devices can be used for this purpose. For example, there is the “socket” device, which allows several guests to share a common virtual network. In the following, we describe in more details how to set up the “bridge” device, which allows the guests to appear as if connected to the local network. All the commands below should be run as the root user.

Set up bridging with bridge-utils-1.6. 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 command above, replace the switch -netdev user,... with -netdev bridge,id=net0.

Contents

Installed Programs: ivshmem-client, ivshmem-server, qemu (symlink), qemu-ga, qemu-img, qemu-io, qemu-nbd, qemu-system-<arch>, and virtfs-proxy-helper
Installed Library: None
Installed Directories: /usr/share/qemu and /usr/share/doc/qemu-2.8.0

Short Description

ivshmem-client

is a standalone client for using the ivshmem device.

ivshmem-server

is an example server for the ivshmem device.

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

exports Qemu disk images using the QEMU Disk Network Block Device (NBD) protocol.

qemu-system-x86_64

is the QEMU PC System emulator.

virtfs-proxy-helper

creates a socket pair or a named socket. QEMU and proxy helper communicate using this socket. QEMU proxy fs driver sends filesystem request to proxy helper and receives the response from it.

Last updated on 2017-02-21 14:52:57 -0800

Part III. General Libraries and Utilities

Chapter 9. General Libraries

Libraries contain code which is often required by more than one program. This has the advantage that each program doesn't need to duplicate code (and risk introducing bugs), it just has to call functions from the libraries installed on the system. The most obvious example of a set of libraries is Glibc which is installed during the LFS book. This contains all of the C library functions which programs use.

There are two types of libraries: static and shared. Shared libraries (usually libXXX.so) are loaded into memory from the shared copy at runtime (hence the name). Static libraries (libXXX.a ) are actually linked into the program executable file itself, thus making the program file larger. Quite often, you will find both static and shared copies of the same library on your system.

Generally, you only need to install libraries when you are installing software that needs the functionality they supply. In the BLFS book, each package is presented with a list of (known) dependencies. Thus, you can figure out which libraries you need to have before installing that program. If you are installing something without using BLFS instructions, usually the README or INSTALL file will contain details of the program's requirements.

There are certain libraries which nearly everyone will need at some point. In this chapter these and some others are listed and it is explained why you may want to install them.

Apr-1.5.2

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/apr

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.

Last updated on 2017-02-14 19:04:01 -0800

Apr-Util-1.5.4

Introduction to Apr Util

The Apache Portable Runtime Utility Library provides a predictable and consistent interface to underlying client library interfaces. This application programming interface assures predictable if not identical behaviour regardless of which libraries are available on a given platform.

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

Package Information

Apr Util Dependencies

Required

Apr-1.5.2

Recommended
Optional

Berkeley DB-6.2.23, FreeTDS, MariaDB-10.1.21 or MySQL, OpenLDAP-2.4.44, PostgreSQL-9.6.2, SQLite-3.17.0 and unixODBC-2.3.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/apr-util

Installation of Apr Util

Install Apr Util by running the following commands:

./configure --prefix=/usr       \
            --with-apr=/usr     \
            --with-gdbm=/usr    \
            --with-openssl=/usr \
            --with-crypto &&
make

To test the results, issue: make test.

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. Remove them if you have not installed OpenSSL-1.0.2k.

--with-berkeley-db=/usr: If you have installed Berkeley DB-6.2.23, use this switch to compile the apr_dbm_db-1.so plugin.

--with-ldap: If you have installed OpenLDAP-2.4.44, use this switch to compile the apr_ldap.so plugin.

Contents

Installed Program: apu-1-config
Installed Library: libaprutil-1.so
Installed Directory: /usr/lib/apr-util-1

Short Descriptions

apu-1-config

is an APR-util script designed to allow easy command line access to APR-util configuration parameters.

libaprutil-1.so

contains functions that provide a predictable and consistent interface to underlying client library interfaces.

Last updated on 2017-02-14 19:04:01 -0800

Aspell-0.60.6.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-8.0 platform.

Package Information

Additional Downloads

You'll need to download at least one dictionary. The link below will take you to a page containing links to dictionaries in many languages.

Aspell Dependencies

Required

Which-2.21 (for the dictionaries)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/aspell

Installation of Aspell

Install Aspell by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
ln -svfn aspell-0.60 /usr/lib/aspell &&

install -v -m755 -d /usr/share/doc/aspell-0.60.6.1/aspell{,-dev}.html &&

install -v -m644 manual/aspell.html/* \
    /usr/share/doc/aspell-0.60.6.1/aspell.html &&

install -v -m644 manual/aspell-dev.html/* \
    /usr/share/doc/aspell-0.60.6.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-1.6.0.

Configuring Aspell

Configuration Information

After Aspell is installed, you must set up at least one dictionary. Install one or more dictionaries by running the following commands:

./configure &&
make

Now, as the root user:

make install

Contents

Installed Programs: aspell, aspell-import, precat, preunzip, prezip, prezip-bin, pspell-config, run-with-aspell, word-list-compress and optionally, ispell and spell.
Installed Libraries: libaspell.so and libpspell.so
Installed Directories: /usr/include/pspell and /usr/lib/aspell-0.60

Short Descriptions

aspell

is a utility that can function as an ispell -a replacement, as an independent spell checker, as a test utility to test out Aspell features, and as a utility for managing dictionaries.

ispell

is a wrapper around aspell to invoke it in ispell compatible mode.

spell

is a wrapper around aspell to invoke it in spell compatible mode.

aspell-import

imports old personal dictionaries into Aspell.

precat

decompresses a prezipped file to stdout.

preunzip

decompresses a prezipped file.

prezip

is a prefix delta compressor, used to compress sorted word lists or other similar text files.

prezip-bin

is called by the various wrapper scripts to perform the actual compressing and decompressing.

pspell-config

displays information about the libpspell installation, mostly for use in build scripts.

run-with-aspell

is a script to help use Aspell as an ispell replacement.

word-list-compress

compresses or decompresses sorted word lists for use with the Aspell spell checker.

libaspell.so

contains spell checking API functions.

libpspell.so

is an interface to the libaspell library. All the spell checking functionality is now in libaspell but this library is included for backward compatibility.

Last updated on 2017-02-16 19:24:14 -0800

Boost-1.63.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-8.0 platform.

Package Information

Boost Dependencies

Recommended
Optional

ICU-58.2, Python-2.7.13 or Python-3.6.0, and Open MPI

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/boost

Installation of Boost

First, fix a bug with the header files path, when Python3 is used:

sed -e '/using python/ s@;@: /usr/include/python${PYTHON_VERSION/3*/${PYTHON_VERSION}m} ;@' \
    -i bootstrap.sh

Install Boost by running the following commands:

./bootstrap.sh --prefix=/usr &&
./b2 stage threading=multi link=shared

To run the Boost.Build's regression test (Python-2.7.13 is required), issue pushd tools/build/test; python test_all.py; popd. All 131 tests should pass.

To run every library's regression tests, issue pushd status; ../b2; popd. A few tests may fail. They take very long (over 120 SBU at -j1, 50 SBU at -j4) and use a very large amount of disk space (up to 40 GB). You can use the -jN switch to speed them up.

Now, as the root user:

./b2 install threading=multi link=shared

Command Explanations

threading=multi: This parameter ensures that Boost is built with multithreading support.

link=shared: This parameter ensures that only shared libraries are created, except for libboost_exception and libboost_test_exec_monitor which are created as static. Most people will not need the static libraries. Indeed most programs using Boost only use the headers. Omit this parameter if you do need static libraries.

-jN: This switch may be added to the b2 command lines, to run up to N processes in parallel.

--with-python=python3: Add this switch to the bootstrap command, if you want Boost to use Python3 instead of Python2.

Contents

Installed Programs: None
Installed Libraries: libboost_atomic.so, libboost_chrono.a, libboost_chrono.so, libboost_container.so, libboost_context.so, libboost_coroutine.so, libboost_date_time.so, libboost_exception.a, libboost-fiber.so, libboost_filesystem.so, libboost_graph.so, libboost_iostreams.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_prg_exec_monitor.so, libboost_program_options.so, libboost_python.so, libboost_python3.so, libboost_random.so, libboost_regex.so, libboost_serialization.so, libboost_signals.so, libboost_system.a, libboost_system.so, libboost_test_exec_monitor.a, libboost_thread.so, libboost_timer.a, libboost_timer.so, libboost_type_erasure.so, libboost_unit_test_framework.so, libboost_wave.so, and libboost_wserialization.so
Installed Directory: /usr/include/boost

Last updated on 2017-02-14 16:20:11 -0800

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-8.0 platform.

Package Information

Additional Downloads

CLucene Dependencies

Required

CMake-3.7.2

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/clucene

Installation of CLucene

Install CLucene by running the following commands:

patch -Np1 -i ../clucene-2.3.3.4-contribs_lib-1.patch &&

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DBUILD_CONTRIBS_LIB=ON .. &&
make

Now, as the root user:

make install

Command Explanations

-DBUILD_CONTRIBS_LIB=ON: This cmake variable enables building the CLucene contribs library necessary for running applications that use language specific text analyzers like LibreOffice for example.

Contents

Installed Programs: None
Installed Libraries: libclucene-contribs-lib.so, libclucene-core.so, and libclucene-shared.so
Installed Directories: /usr/include/CLucene and /usr/lib/CLuceneConfig.cmake

Last updated on 2017-02-21 16:50:06 -0800

dbus-glib-0.108

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-8.0 platform.

Package Information

D-Bus GLib Dependencies

Required

dbus-1.10.14 and GLib-2.50.3

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dbus-glib

Installation of D-Bus GLib

Install D-Bus GLib by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static &&
make

To test the results, issue: make check. Note that more comprehensive tests can be run by following the same method used in D-Bus instructions, which requires building the package twice.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: dbus-binding-tool
Installed Library: libdbus-glib-1.so
Installed Directories: /usr/share/gtk-doc/html/dbus-glib and /usr/share/doc/dbus-glib-0.108

Short Descriptions

dbus-binding-tool

is a tool used to interface with the D-Bus API.

libdbus-glib-1.so

contains GLib interface functions to the D-Bus API.

Last updated on 2017-02-16 19:05:12 -0800

enchant-1.6.0

Introduction to enchant

The enchant package provide a generic interface into various existing spell checking libraries.

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

Package Information

enchant Dependencies

Required

GLib-2.50.3

Recommended
Optional

dbus-glib-0.108, Hspell, Hunspell, and Voikko

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/enchant

Installation of enchant

Install enchant 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.

Configuring enchant

Config Files

~/.enchant and /usr/share/enchant/enchant.ordering

Configuration Information

If you wish to use the Aspell-0.60.6.1 backend, create a symlink, as the root user:

ln -svfn ../../lib/aspell /usr/share/enchant/aspell

You can test your installation and configuration by creating a test file and running the commands in the following (you can replace the en_GB dictionary by any other downloaded when installing Aspell-0.60.6.1):

cat > /tmp/test-enchant.txt << "EOF"
Tel me more abot linux
Ther ar so many commads
EOF

enchant -d en_GB -l /tmp/test-enchant.txt &&
enchant -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 and enchant-lsmod
Installed Libraries: libenchant.so and various backend libraries
Installed Directories: /usr/{include,lib,share}/enchant

Short Descriptions

enchant

is a spellchecker

enchant-lsmod

lists available backends, languages, and dictionaries.

libenchant.so

contains spell checking interface API functions.

Last updated on 2017-02-18 16:02:40 -0800

Exempi-2.4.2

Introduction to Exempi

Exempi is an implementation of XMP (Adobe's Extensible Metadata Platform).

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

Package Information

Exempi Dependencies

Required

Boost-1.63.0

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/exempi

Installation of Exempi

Install Exempi by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Program: exempi
Installed Library: libexempi.so
Installed Directory: /usr/include/exempi-2.0

Short Descriptions

exempi

is a command line tool to manipulate XMP metadata.

libexempi.so

is a library used to parse XMP metadata.

Last updated on 2017-02-20 11:43:55 -0800

GLib-2.50.3

Introduction to GLib

The GLib package contains low-level libraries useful for providing data structure handling for C, portability wrappers and interfaces for such runtime functionality as an event loop, threads, dynamic loading and an object system.

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

Package Information

GLib Dependencies

Required

libffi-3.2.1 and Python-2.7.13 or Python-3.6.0

Recommended
Optional

dbus-1.10.14 (required for some tests), elfutils-0.168, GTK-Doc-1.25, FAM library, and GNU Indent

Additional Runtime Dependencies

Quoted directly from the INSTALL file: “Some of the mimetype-related functionality in GIO requires the update-mime-database and update-desktop-database utilities”, which are part of shared-mime-info-1.8 and desktop-file-utils-0.23, respectively.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/glib2

Installation of GLib

Install GLib by running the following commands:

./configure --prefix=/usr --with-pcre=system &&
make

The GLib test suite requires desktop-file-utils for some tests. However, desktop-file-utils requires GLib in order to compile; therefore, you must first install GLib and then run the test suite.

Now, as the root user:

make install

You should now install desktop-file-utils-0.23 and proceed to run the test suite.

To test the results, after having installed the package, issue: make -k check.

Command Explanations

--with-pcre=system: This switch causes the build to use a system-provided version of the PCRE library instead of an internal version.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--with-python=/usr/bin/python3: Add this switch if you want GLib to use Python3 instead of Python2.

Contents

Installed Programs: gapplication, gdbus, gdbus-codegen, gio, gio-querymodules, glib-compile-resources, glib-compile-schemas, glib-genmarshal, glib-gettextize, glib-mkenums, gobject-query, gresource, gsettings, gtester, and gtester-report
Installed Libraries: libgio-2.0.so, libglib-2.0.so, libgmodule-2.0.so, libgobject-2.0.so, and libgthread-2.0.so
Installed Directories: /usr/include/gio-unix-2.0, /usr/{include,lib,share}/glib-2.0, /usr/lib/gio, and /usr/share/gtk-doc/html/g{io,lib,object}

Short Descriptions

gapplication

can be used to start applications and to send messages to already-running instances of other applications.

gdbus

is a simple tool used for working with D-Bus objects.

gdbus-codegen

is used to generate code and/or documentation for one or more D-Bus interfaces.

gio

is a utility that makes many GIO features available from the command line.

gio-querymodules

is used to create a giomodule.cache file in the listed directories. This file lists the implemented extension points for each module that has been found.

glib-compile-resources

is used to read the resource description from a file and the files that it references to create a binary resource bundle that is suitable for use with the GResource API.

glib-compile-schemas

is used to compile all the GSettings XML schema files in directory into a binary file with the name gschemas.compiled that can be used by GSettings.

glib-genmarshal

is a C code marshaller generation utility for GLib closures.

glib-gettextize

is a variant of the gettext internationalization utility.

glib-mkenums

is a C language enum description generation utility.

gobject-query

is a small utility that draws a tree of types.

gresource

offers a simple command line interface to GResource.

gsettings

offers a simple command line interface to GSettings.

gtester

is a test running utility.

gtester-report

is a test report formatting utility.

GLib libraries

contain low-level core libraries for the GIMP Toolkit.

Last updated on 2017-02-15 14:01:44 -0800

GLibmm-2.50.0

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-8.0 platform.

Package Information

GLibmm Dependencies

Required

GLib-2.50.3 and libsigc++-2.10.0

Optional

Doxygen-1.8.13, glib-networking-2.50.0 (for tests), GnuTLS-3.5.9 (for tests), and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/glibmm

Installation of GLibmm

First, fix the documents directory name:

sed -e '/^libdocdir =/ s/$(book_name)/glibmm-2.50.0/' \
    -i docs/Makefile.in

Install GLibmm 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: libgiomm-2.4.so, libglibmm-2.4.so and libglibmm_generate_extra_defs-2.4.so
Installed Directories: /usr/{include,lib}/g{io,lib}mm-2.4 and /usr/share/{devhelp/books/glibmm-2.4,doc/glibmm-2.50.0}

Short Descriptions

libgiomm-2.4.so

contains the Gio API classes.

libglibmm-2.4.so

contains the GLib API classes.

Last updated on 2017-02-16 19:24:14 -0800

GMime-2.6.23

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-8.0 platform.

Package Information

GMime Dependencies

Required

GLib-2.50.3 and libgpg-error-1.26

Recommended
Optional

DocBook-utils-0.6.14, GPGME-1.8.0, GTK-Doc-1.25 and Gtk# (requires Mono)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gmime

Installation of GMime

Install GMime by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-smime: Use this switch if you have installed GPGME-1.8.0 and wish to enable S/MIME support in GMime.

--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-2.6.so
Installed Directories: /usr/include/gmime-2.6 and /usr/share/gtk-doc/html/gmime-2.6

Short Descriptions

libgmime-2.6.so

contains API functions used by programs that need to comply to the MIME standards.

Last updated on 2017-02-19 13:23:34 -0800

gobject-introspection-1.50.0

Introduction to GObject Introspection

The GObject Introspection is used to describe the program APIs and collect them in a uniform, machine readable format.

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

Package Information

Required

GLib-2.50.3 and Python-2.7.13

Optional

Cairo-1.14.8 (required for the tests), GTK-Doc-1.25 and Mako

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gobject-introspection

Installation of GObject Introspection

Install GObject Introspection 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: g-ir-annotation-tool, g-ir-compiler, g-ir-doc-tool, g-ir-inspect, g-ir-generate, and g-ir-scanner
Installed Libraries: libgirepository-1.0.so and /usr/lib/gobject-introspection/giscanner/_giscanner.so
Installed Directories: /usr/include/gobject-introspection-1.0, /usr/lib/girepository-1.0, /usr/lib/gobject-introspection, /usr/share/gir-1.0, and /usr/share/gobject-introspection-1.0

Short Descriptions

g-ir-compiler

converts one or more GIR files into one or more typelib.

g-ir-doc-tool

generates Mallard files that can be viewed with yelp or rendered to HTML with yelp-build from yelp-tools.

g-ir-inspect

is a utility that gives information about a GI typelib.

g-ir-scanner

is a tool which generates GIR XML files by parsing headers and introspecting GObject based libraries.

g-ir-generate

is a GIR generator that uses the repository API.

libgirepository-1.0.so

provides an API to access the typelib metadata.

Last updated on 2017-02-15 14:01:44 -0800

Grantlee-5.1.0

Introduction to grantlee

Grantlee is a set of free software libraries written using the Qt framework. Currently two libraries are shipped with Grantlee: Grantlee Templates and Grantlee TextDocument. The goal of Grantlee Templates is to make it easier for application developers to separate the structure of documents from the data they contain, opening the door for theming.

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

Package Information

Grantlee Dependencies

Required

CMake-3.7.2 and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/grantlee

Installation of Grantlee

Install Grantlee by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: none
Installed Libraries: libgrantlee_core.so and libgrantlee_gui.so
Installed Directories: /usr/lib/cmake/grantlee, /usr/lib/grantlee/0.4, and /usr/include/grantlee

Last updated on 2017-02-20 15:49:32 -0800

Gsl-2.3

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-8.0 platform.

Package Information

Gsl Dependencies

Optional

texlive-20160523b or install-tl-unx

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gsl

Installation of Gsl

Install Gsl by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install &&

mkdir /usr/share/doc/gsl-2.3 &&
cp doc/gsl-ref.html/* /usr/share/doc/gsl-2.3

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

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

contains functions that provide a collection of numerical routines for scientific computing.

Last updated on 2017-02-16 19:24:14 -0800

ICU-58.2

Introduction to ICU

The International Components for Unicode (ICU) package is a mature, widely used set of C/C++ libraries providing Unicode and Globalization support for software applications. ICU is widely portable and gives applications the same results on all platforms.

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

Package Information

Additional Downloads

ICU Dependencies

Optional

LLVM-3.9.1 (with Clang), and Doxygen-1.8.13 (for documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/icu

Installation of ICU

First, fix a regression in version 58.1:

patch -p1 -i ../icu4c-58.2-fix_enumeration-1.patch

Install ICU by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

CC=gcc CXX=g++: If you prefer to use gcc and/or g++ instead of clang and/or clang++, if they are installed, use one or both variables in the configure line.

Contents

Installed Programs: derb, genbrk, genccode, gencfu, gencmn, gencnval, gendict, gennorm2, genrb, gensprep, icu-config, icuinfo, icupkg, makeconv, pkgdata, and uconv
Installed Libraries: libicudata.so, libicui18n.so, libicuio.so, libicule.so, libiculx.so, libicutest.so, libicutu.so, and libicuuc.so
Installed Directories: /usr/include/layout, /usr/include/unicode, /usr/lib/icu, and /usr/share/icu

Short Descriptions

derb

disassembles a resource bundle.

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.

libicule.so

is the layout engine.

libiculx.so

is the layout extensions engine.

libicutest.so

is the test library.

libicutu.so

is the tool utility library.

libicuuc.so

is the common library.

Last updated on 2017-02-14 23:25:58 -0800

JS-17.0.0

Introduction to JS

JS is Mozilla's JavaScript engine written in C/C++.

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

Package Information

JS Dependencies

Required

libffi-3.2.1, NSPR-4.13.1, Python-2.7.13 and Zip-3.0

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/JS

Installation of JS

Install JS by running the following commands:

cd js/src &&

sed -i 's/(defined\((@TEMPLATE_FILE)\))/\1/' config/milestone.pl &&

./configure --prefix=/usr       \
            --enable-readline   \
            --enable-threadsafe \
            --with-system-ffi   \
            --with-system-nspr &&
make

To test the results, issue: make check.

Now, as the root user:

make install &&

find /usr/include/js-17.0/            \
     /usr/lib/libmozjs-17.0.a         \
     /usr/lib/pkgconfig/mozjs-17.0.pc \
     -type f -exec chmod -v 644 {} \;

Command Explanations

sed ... config/milestone.pl: Fix an issue caused by perl-5.22.0 and later.

--enable-threadsafe: This switch enables support for multiple threads.

--enable-readline: This switch enables Readline support in JS shell.

--with-system-ffi: This switch forces the package to link to the system version of libffi instead of using its included, and now old, version.

--with-system-nspr: This switch forces the package to link to the system version of NSPR instead of using its included, and now old, version.

Contents

Installed Programs: js17 and js17-config
Installed Libraries: libmozjs-17.0.a and libmozjs-17.0.so
Installed Directory: /usr/include/js-17.0

Short Descriptions

js17

provides a command line interface to the JavaScript engine.

js17-config

is used to find out JS compiler and linker flags.

libmozjs-17.0.so

contains the Mozilla JavaScript API functions.

Last updated on 2017-02-15 21:57:41 -0800

JS-24.2.0

Introduction to JS

JS is Mozilla's JavaScript engine written in C/C++.

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

Package Information

JS Dependencies

Required

libffi-3.2.1, NSPR-4.13.1, Python-2.7.13 and Zip-3.0

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/JS2

Installation of JS

Note

This package can be installed without problems, if you have installed JS-17.0.0. It is necessary to set SHELL=/bin/bash if you are working in chroot.

Install JS by running the following commands:

cd js/src &&

sed -i 's/(defined\((@TEMPLATE_FILE)\))/\1/' config/milestone.pl &&

./configure --prefix=/usr       \
            --enable-readline   \
            --enable-threadsafe \
            --with-system-ffi   \
            --with-system-nspr &&
make

To test the results, issue: make check.

Now, as the root user:

make install &&
find /usr/include/mozjs-24/         \
     /usr/lib/libmozjs-24.a         \
     /usr/lib/pkgconfig/mozjs-24.pc \
     -type f -exec chmod -v 644 {} \;

Command Explanations

sed ... config/milestone.pl: Fix an issue caused by perl-5.22.0 and later.

--enable-threadsafe: This switch enables support for multiple threads.

--enable-readline: This switch enables Readline support in JS shell.

--with-system-ffi: This switch forces the package to link to the system version of libffi instead of using its included, and now old, version.

--with-system-nspr: This switch forces the package to link to the system version of NSPR instead of using its included, and now old, version.

Contents

Installed Programs: js24 and js24-config
Installed Libraries: libmozjs-24.a and libmozjs-24.so
Installed Directory: /usr/include/mozjs-24

Short Descriptions

js24

provides a command line interface to the JavaScript engine.

js24-config

is used to find out JS compiler and linker flags.

libmozjs-24.so

contains the Mozilla JavaScript API functions.

Last updated on 2017-02-18 22:13:39 -0800

JSON-C-0.12.1

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/json-c

Installation of JSON-C

Note

This package does not support parallel build.

Install JSON-C by running the following commands:

sed -i s/-Werror// Makefile.in tests/Makefile.in &&
./configure --prefix=/usr --disable-static       &&
make -j1

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed ...: This instruction removes a flag that prevents one file from compiling.

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

Contents

Installed Programs: None
Installed Libraries: libjson-c.so and libjson.so
Installed Directories: /usr/include/json and /usr/include/json-c

Short Descriptions

libjson.so

contains the JSON-C API functions.

libjson-c.so

contains the JSON-C API functions.

Last updated on 2017-02-17 16:10:58 -0800

JSON-GLib-1.2.2

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-8.0 platform.

Package Information

JSON-GLib Dependencies

Required

GLib-2.50.3

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/json-glib

Installation of JSON GLib

Install JSON GLib by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: json-glib-format and json-glib-validate
Installed Library: libjson-glib-1.0.so
Installed Directories: /usr/include/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.

Last updated on 2017-02-16 19:05:12 -0800

keyutils-1.5.9

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/keyutils

Installation of keyutils

Install keyutils by running the following commands:

make

This package does not come with a test suite.

Now, as the root user:

make NO_ARLIB=1 install

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/request-key.d and /usr/share/keyutils

Short Descriptions

keyctl

is to control the key management facility in various ways using a variety of subcommands.

key.dns_resolver

is invoked by request-key on behalf of the kernel when kernel services (such as NFS, CIFS and AFS) need to perform a hostname lookup and the kernel does not have the key cached. It is not ordinarily intended to be called directly.

request-key

is invoked by the kernel when the kernel is asked for a key that it doesn't have immediately available. The kernel creates a temporary key and then calls out to this program to instantiate it. It is not intended to be called directly.

libkeyutils.so

contains the keyutils library API instantiation.

Last updated on 2017-02-15 18:28:58 -0800

libarchive-3.2.2

Introduction to libarchive

The libarchive library provides a single interface for reading/writing various compression formats.

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

Package Information

libarchive Dependencies

Optional

libxml2-2.9.4, LZO-2.09, and Nettle-3.3 or OpenSSL-1.0.2k

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libarchive

Installation of libarchive

Install libarchive by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--without-xml2: This switch sets expat for xar archive format support instead of preferred libxml2 if both packages are installed.

--without-nettle: This switch sets OpenSSL for crypto support instead of preferred Nettle if both packages are installed.

Contents

Installed Programs: bsdcat, bsdcpio, and bsdtar
Installed Libraries: libarchive.so
Installed Directories: None

Short Descriptions

bsdcat

expands files to standard output.

bsdcpio

is a tool similar to cpio.

bsdtar

is a tool similar to GNU tar.

libarchive.so

is a library that can create and read several streaming archive formats.

Last updated on 2017-02-14 16:20:11 -0800

libassuan-2.4.3

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-8.0 platform.

Package Information

libassuan Dependencies

Required

libgpg-error-1.26

Optional

texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libassuan

Installation of libassuan

Install libassuan by running the following commands:

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

If you wish to build documentation, you must have texlive-20160523b 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

If you built the documentation, install it by running the following commands as the root user:

install -v -dm755 /usr/share/doc/libassuan-2.4.3 &&
install -v -m644  doc/assuan.{pdf,ps,dvi} \
                  /usr/share/doc/libassuan-2.4.3

Contents

Installed Program: libassuan-config
Installed Library: libassuan.so
Installed Directory: /usr/share/doc/libassuan-2.4.3

Short Descriptions

libassuan-config

is a libassuan build information script.

libassuan.so

is an inter process communication library which implements the Assuan protocol.

Last updated on 2017-02-15 19:06:46 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libatasmart

Installation of libatasmart

Install libatasmart by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc/libatasmart-0.19 install

Command Explanations

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

Contents

Installed Programs: skdump and sktest
Installed Library: libatasmart.so
Installed Directory: /usr/share/doc/libatasmart-0.19

Short Descriptions

skdump

is a utility that reports on the status of the disk.

sktest

is a utility to issue disks tests.

libatasmart.so

contains the ATA S.M.A.R.T API functions.

Last updated on 2017-02-17 12:01:55 -0800

libatomic_ops-7.4.4

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libatomic_ops

Installation of libatomic_ops

Install libatomic_ops by running the following commands:

sed -i 's#pkgdata#doc#' doc/Makefile.am &&
autoreconf -fi &&
./configure --prefix=/usr    \
            --enable-shared  \
            --disable-static \
            --docdir=/usr/share/doc/libatomic_ops-7.4.4 &&
make

To check the results, issue LD_LIBRARY_PATH=../src/.libs make check.

Now, as the root user:

make install &&
mv -v   /usr/share/libatomic_ops/* \
        /usr/share/doc/libatomic_ops-7.4.4 &&
rm -vrf /usr/share/libatomic_ops

Command Explanations

sed -i ...: This sed makes the docs to be installed in an appropriate directory.

autoreconf -fi: This regenerates the configure script and the Makefile.in.

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

Short Descriptions

libatomic_ops.so

contains functions for atomic memory operations.

Last updated on 2017-02-14 16:20:11 -0800

libcroco-0.6.11

Introduction to libcroco

The libcroco package contains a standalone CSS2 parsing and manipulation library.

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

Package Information

libcroco Dependencies

Required

GLib-2.50.3 and libxml2-2.9.4

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libcroco

Installation of libcroco

Install libcroco by running the following commands:

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

To execute the test suite, run make -k test. Some tests fail: searching files in wrong location, locale problems (character codes compared to characters), float point numbers not properly rounded to the same number of places are some of the reasons.

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: croco-0.6-config and csslint-0.6
Installed Library: libcroco-0.6.so
Installed Directories: /usr/include/libcroco-0.6 and /usr/share/gtk-doc/html/libcroco

Short Descriptions

croco-0.6-config

is a helper script for building with libcroco-0.6.so.

csslint-0.6

is used to parse one or more CSS files specified on the command line.

libcroco-0.6.so

contains the API functions for CSS2 parsing and manipulation.

Last updated on 2017-02-16 19:24:14 -0800

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-8.0 platform.

Package Information

libdaemon Dependencies

Optional

Doxygen-1.8.13 and Lynx-2.8.8rel.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdaemon

Installation of libdaemon

Install libdaemon by running the following commands:

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

If you have Doxygen installed and wish to build the API documentation, issue the following command:

make -C doc doxygen

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc/libdaemon-0.14 install

If you built the API documentation, install it using the following commands as the root user:

install -v -m755 -d /usr/share/doc/libdaemon-0.14/api &&
install -v -m644 doc/reference/html/* /usr/share/doc/libdaemon-0.14/api &&
install -v -m644 doc/reference/man/man3/* /usr/share/man/man3

Command Explanations

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

Contents

Installed Programs: None
Installed Library: libdaemon.so
Installed Directories: /usr/include/libdaemon and /usr/share/doc/libdaemon-0.14

Short Descriptions

libdaemon.so

contains the libdaemon API functions.

Last updated on 2017-02-18 22:13:39 -0800

libESMTP-1.0.6

Introduction to libESMTP

The libESMTP package contains the libESMTP libraries which are used by some programs to manage email submission to a mail transport layer.

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

Package Information

libESMTP Dependencies

Optional

OpenSSL-1.0.2k

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libesmtp

Installation of libESMTP

Install libESMTP 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: libesmtp-config
Installed Libraries: libesmtp.{so,a} and libESMTP SASL plugins
Installed Directory: /usr/lib/esmtp-plugins

Short Descriptions

libesmtp-config

displays version information and the options used to compile libESMTP.

libesmtp.{so,a}

is used to manage submission of electronic mail to a Mail Transport Agent.

libesmtp SASL plugins

are used to integrate libesmtp with SASL authentication.

Last updated on 2017-02-21 13:10:36 -0800

libffi-3.2.1

Introduction to libffi

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.

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

Package Information

  • Download (FTP): ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz

  • Download MD5 sum: 83b89587607e3eb65c70d361f13bab43

  • Download size: 920 KB

  • Estimated disk space required: 6.1 MB (additional 1.7 MB for the tests)

  • Estimated build time: less than 0.1 SBU (additional 0.4 SBU for the tests)

libffi Dependencies

Optional

DejaGnu-1.6 (required to run the testsuite)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libffi

Installation of libffi

Install libffi by running the following commands:

sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \
    -i include/Makefile.in &&

sed -e '/^includedir/ s/=.*$/=@includedir@/' \
    -e 's/^Cflags: -I${includedir}/Cflags:/' \
    -i libffi.pc.in        &&

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed ... include/Makefile.in and sed ... libffi.pc.in: Makes the package install headers into the standardized /usr/include instead of /usr/lib/libffi-3.2.1/include..

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

Contents

Installed Programs: None
Installed Library: libffi.so
Installed Directories: None

Short Descriptions

libffi.so

contains the libffi API functions.

Last updated on 2017-02-14 16:20:11 -0800

libgcrypt-1.7.6

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-8.0 platform.

Package Information

libgcrypt Dependencies

Required

libgpg-error-1.26

Optional

Pth-2.0.7 and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgcrypt

Installation of libgcrypt

Install libgcrypt by running the following commands:

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

Only info documentation is shipped in the package tarball. If you wish to build alternate formats of the documentation, (you must have texlive-20160523b installed to build the PDF and PostScript documentation), then issue the following commands:

make -C doc pdf ps 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.7.6 &&
install -v -m644    README doc/{README.apichanges,fips*,libgcrypt*} \
                    /usr/share/doc/libgcrypt-1.7.6

If you built the additional documentation, install it by issuing the following commands as the root user:

install -v -dm755   /usr/share/doc/libgcrypt-1.7.6/html &&
install -v -m644 doc/gcrypt.html/* \
                    /usr/share/doc/libgcrypt-1.7.6/html &&
install -v -m644 doc/gcrypt_nochunks.html \
                    /usr/share/doc/libgcrypt-1.7.6 &&
install -v -m644 doc/gcrypt.{pdf,ps,dvi,txt,texi} \
                    /usr/share/doc/libgcrypt-1.7.6

Command Explanations

--with-capabilities: This option enables libcap2 support. Note that this breaks Cryptsetup.

Contents

Installed Programs: dumpsexp, hmac256, libgcrypt-config, and mpicalc
Installed Library: libgcrypt.so
Installed Directory: /usr/share/doc/libgcrypt-1.7.6

Short Descriptions

dumpsexp

is a debug tool for S-expressions.

hmac256

is a standalone HMAC-SHA-256 implementation used to compute an HMAC-SHA-256 authentication code.

libgcrypt-config

determines the compile and linker flags that should be used to compile and link programs that use libgcrypt.

mpicalc

is a RPN (Reverse Polish Notation) calculator.

libgcrypt.so

contains the cryptographic API functions.

Last updated on 2017-02-22 16:35:47 -0800

libgpg-error-1.26

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgpg-error

Installation of libgpg-error

Install libgpg-error by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install &&
install -v -m644 -D README /usr/share/doc/libgpg-error-1.26/README

Contents

Installed Programs: gpg-error and gpg-error-config
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.26

Short Descriptions

gpg-error

is used to determine libgpg-error error codes.

gpg-error-config

is a utility used to configure and build applications based on the libgpg-error library. It can be used to query the C compiler and linker flags which are required to correctly compile and link the application against the libgpg-error library.

libgpg-error.so

contains the libgpg-error API functions.

Last updated on 2017-02-15 14:01:44 -0800

libgsf-1.14.41

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-8.0 platform.

Package Information

libgsf Dependencies

Required

GLib-2.50.3 and libxml2-2.9.4

Recommended
Optional

gobject-introspection-1.50.0 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgsf

Installation of libgsf

Install libgsf by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: gsf, gsf-office-thumbnailer, and gsf-vba-dump
Installed Library: libgsf-1.so
Installed Directories: /usr/include/libgsf-1, /usr/share/gtk-doc/html/gsf and /usr/share/thumbnailers

Short Descriptions

gsf

is a simple archive utility, somewhat similar to tar(1).

gsf-office-thumbnailer

is used internally by GNOME applications such as Nautilus to generate thumbnails of several types of office application files.

gsf-vba-dump

is used to extract Visual Basic for Applications macros from files.

libgsf-1.so

contains the libgsf API functions.

Last updated on 2017-02-17 12:01:55 -0800

libgudev-231

Introduction to libgudev

The libgudev package contains GObject bindings for libudev.

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

Package Information

Required

GLib-2.50.3

Optional

gobject-introspection-1.50.0 (for gir-data, needed for GNOME), GTK-Doc-1.25, and umockdev

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgudev

Installation of libgudev

Install libgudev by running the following commands:

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

This package does not come with a testsuite.

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 Program: None
Installed Libraries: libgudev-1.0.so
Installed Directories: /usr/include/gudev-1.0 and /usr/share/gtk-doc/html/gudev

Short Descriptions

libgudev-1.0.so

is a GObject-based wrapper library for libudev.

Last updated on 2017-02-16 19:24:14 -0800

libgusb-0.2.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-8.0 platform.

Package Information

libgusb Dependencies

Required

libusb-1.0.21

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgusb

Installation of libgusb

Install libgusb by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libgusb.so
Installed Directories: /usr/include/gusb-1 and /usr/share/gtk-doc/html/gusb

Short Descriptions

libgusb.so

contains the libgusb API functions.

Last updated on 2017-02-16 19:24:14 -0800

libical-2.0.0

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-8.0 platform.

Package Information

libical Dependencies

Required

CMake-3.7.2

Optional

Berkeley DB-6.2.23, Doxygen-1.8.13 (for the API documentation), gobject-introspection-1.50.0, and ICU-58.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libical

Installation of libical

Install libical by running the following commands:

mkdir build &&
cd build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr      \
      -DCMAKE_BUILD_TYPE=Release       \
      -DSHARED_ONLY=yes                \
      .. &&
make

If you have Doxygen-1.8.13 installed and wish to build the API documentation, issue:

make docs

To test the results, issue: make test.

Now, as the root user:

make install

If you have built the API documentation, install by issuing, as root user:

install -vdm755 /usr/share/doc/libical-2.0.0/html &&
cp -vr apidocs/html/* /usr/share/doc/libical-2.0.0/html

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-DSHARED_ONLY=yes: This switch is used in order to only build the shared libraries.

-DUSE_BUILTIN_TZDATA=yes: This switch is used in order to build using your own timezone data.

Contents

Installed Programs: None
Installed Libraries: libical_cxx.so, libical.so, libicalss_cxx.so, libicalss.so, and libicalvcal.so
Installed Directory: /usr/include/libical, /usr/lib/cmake/LibIcal and /usr/share/doc/libical-2.0.0/html

Short Descriptions

libical.so

contains the libical API functions.

libical_cxx.so

contains the libical C++ bindings.

libicalss.so

is a library that allows you to store iCal component data to disk in a variety of ways.

libicalss_cxx.so

contains the libicalss C++ bindings.

libicalvcal.so

is a vCard/vCalendar C interface.

Last updated on 2017-02-18 16:02:40 -0800

libidn-1.33

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-8.0 platform.

Package Information

libidn Dependencies

Optional

Pth-2.0.7, Emacs-25.1, GTK-Doc-1.25, OpenJDK-1.8.0.121, Valgrind-3.12.0, and DotGNU Portable.NET or Mono

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libidn

Installation of libidn

Install libidn by running the following commands:

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

To test the results, issue: make check.

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.33     &&
cp -r -v doc/* /usr/share/doc/libidn-1.33

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: idn
Installed Library: libidn.so
Installed Directories: /usr/share/doc/libidn-1.33 and /usr/share/gtk-doc/html/libidn

Short Descriptions

idn

is a command line interface to the internationalized domain name library.

libidn.so

contains a generic Stringprep implementation that does Unicode 3.2 NFKC normalization, mapping and prohibition of characters, and bidirectional character handling. Profiles for Nameprep, iSCSI, SASL and XMPP are included as well as support for Punycode and ASCII Compatible Encoding (ACE) via IDNA. A mechanism to define Top-Level Domain (TLD) specific validation tables, and to compare strings against those tables, as well as default tables for some TLDs are included.

Last updated on 2017-02-14 16:20:11 -0800

libiodbc-3.52.12

Introduction to libiodbc

libiodbc is an API to ODBC compatible databases.

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

Package Information

libiodbc Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libiodbc

Installation of libiodbc

Install libiodbc by running the following commands:

./configure --prefix=/usr                   \
            --with-iodbc-inidir=/etc/iodbc  \
            --includedir=/usr/include/iodbc \
            --disable-libodbc               \
            --disable-static                &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-iodbc-inidir=/etc/iodbc: libiodbc will install configuration files in this directory.

--includedir=/usr/include/iodbc: This installs the interface headers to a private directory to avoid a conflict with headers installed by unixODBC.

--disable-libodbc: This prevents the installation of the libodbc.so symbolic link to avoid a conflict with unixODBC.

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

Contents

Installed Programs: iodbc-config, iodbctest, iodbctestw, and iodbcadm-gtk
Installed Libraries: libdrvproxy.so, libiodbc.so, libiodbcinst.so, and libiodbcadm.so
Installed Directory: /usr/include/iodbc, /usr/share/libiodbc, and /etc/iodbc

Short Descriptions

iodbc-config

is a utility for retrieving the installation options of libiodbc.

iodbctest{,w}

are interactive SQL processors.

iodbcadm-gtk

is a graphical administration utility.

Last updated on 2017-02-21 17:57:55 -0800

Libksba-1.3.5

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-8.0 platform.

Package Information

Libksba Dependencies

Required

libgpg-error-1.26

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libksba

Installation of Libksba

Install Libksba by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Program: ksba-config
Installed Library: libksba.so
Installed Directory: None

Short Descriptions

ksba-config

is a utility used to configure and build applications based on the libksba(3) library. It can be used to query the C compiler and linker flags which are required to correctly compile and link the application against the libksba(3) library.

libksba.{so,a}

contains the cryptographic API functions.

Last updated on 2017-02-18 18:01:35 -0800

liblinear-210

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-8.0 platform.

Note

After updating this package from liblinear-1.96 or earlier, you need to reinstall Nmap-7.40, in order to link to the new library.

Package Information

Note

The liblinear source tarball shown above downloads with the correct name, liblinear-210.tar.gz, if using a browser such as Firefox. If you prefer to use a command line program such as wget, you normally would obtain v210.tar.gz. To obtain this package with the proper filename, run:

wget -c https://github.com/cjlin1/liblinear/archive/v210.tar.gz \
     -O liblinear-210.tar.gz

.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/liblinear

Installation of liblinear

Install liblinear by running the following commands:

make lib

This package does not come with a test suite.

Now, as the root user:

install -vm644 linear.h /usr/include &&
install -vm755 liblinear.so.3 /usr/lib &&
ln -sfv liblinear.so.3 /usr/lib/liblinear.so

Contents

Installed Programs: None
Installed Library: liblinear.so
Installed Directories: None

Short Descriptions

liblinear.so

is a large linear classification library.

Last updated on 2017-02-21 11:59:18 -0800

libmbim-1.14.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-8.0 platform.

Package Information

libmbim Dependencies

Required

libgudev-231

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmbim

Installation of libmbim

Install libmbim by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: mbimcli and mbim-network
Installed Libraries: libmbim-glib.so
Installed Directories: /usr/include/libmbim-glib and /usr/share/gtk-doc/html/libmbim-glib

Short Descriptions

mbimcli

is an utility used to control MBIM devices.

mbim-network

is an utility used for simple network management of MBIM devices.

libmbim-glib.so

contains API functions for talking to WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol.

Last updated on 2017-02-18 22:13:39 -0800

libpaper-1.1.24+nmu5

Introduction to libpaper

This package is intended to provide a simple way for applications to take actions based on a system or user-specified paper size.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libpaper

Installation of libpaper

Install libpaper by running the following commands:

autoreconf -fi                &&
./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
mkdir -vp /etc/libpaper.d &&

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

Command Explanations

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

mkdir -pv /etc/libpaper.d: libpaper expects that packages will install files into this directory.

cat > /usr/bin/run-parts << "EOF" : paperconfig is a script which will invoke run-parts if /etc/libpaper.d exists. No other BLFS package installs this, so we create it here.

Configuring libpaper

Configuration Information

Create /etc/papersize to set the default system paper size. Issue the following command as the root user to set this to 'A4' (libpaper prefers the lowercase form). You may wish to use a different size, such as letter.

cat > /etc/papersize << "EOF"
a4
EOF

Contents

Installed Programs: paperconf, paperconfig, run-parts
Installed Library: libpaper.so
Installed Directories: /etc/libpaper.d

Short Descriptions

paperconf

prints paper configuration information.

paperconfig

configures the system default paper size.

run-parts

runs all the scripts found in a directory.

libpaper.so

contains functions for interrogating the paper library.

Last updated on 2017-02-16 20:33:09 -0800

libqmi-1.16.2

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-8.0 platform.

Package Information

libqmi Dependencies

Required

GLib-2.50.3

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libqmi

Installation of libqmi

Install libqmi 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.

--disable-mbim-qmux: This switch disables support for using a MBIM control device for QMI messages. Use this switch if you did not install libmbim.

Contents

Installed Programs: qmicli and qmi-network
Installed Libraries: libqmi-glib.so
Installed Directories: /usr/include/libqmi-glib and /usr/share/gtk-doc/html/libqmi-glib

Short Descriptions

qmicli

is an utility used to control QMI devices.

qmi-network

is an utility used for simple network management of QMI devices.

libqmi-glib.so

contains API functions for talking to WWAN modems and devices which speak the Qualcomm MSM Interface (QMI) protocol.

Last updated on 2017-02-18 22:13:39 -0800

libsigc++-2.10.0

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsigc++

Installation of libsigc++

First, fix the documentation directory name:

sed -e '/^libdocdir =/ s/$(book_name)/libsigc++-2.10.0/' -i docs/Makefile.in

Install libsigc++ by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libsigc-2.0.so
Installed Directories: /usr/{include,lib}/sigc++-2.0 and /usr/share/{devhelp/books,doc}/libsigc++-2.0

Short Descriptions

libsigc-2.0.so

contains the libsigc++ API functions.

Last updated on 2017-02-16 19:24:14 -0800

libsigsegv-2.10

Introduction to libsigsegv

This 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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsigsegv

Installation of libsigsegv

Install libsigsegv by running the following commands:

./configure --prefix=/usr   \
            --enable-shared \
            --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-shared: This switch ensures that shared libraries are compiled.

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

Contents

Installed Programs: None
Installed Library: libsigsegv.so
Installed Directories: None

Short Descriptions

libsigsegv.so

is a library for handling page faults in user mode.

Last updated on 2017-02-16 20:33:09 -0800

libstatgrab-0.91

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libstatgrab

Installation of libstatgrab

Install libstatgrab by running the following commands:

./configure --prefix=/usr   \
            --disable-static \
            --docdir=/usr/share/doc/libstatgrab-0.91 &&
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.91

Short Descriptions

saidar

is a curses-based tool for viewing system statistics.

statgrab

is a sysctl-style interface to system statistics.

statgrab-make-mrtg-config

generates MRTG configuration.

statgrab-make-mrtg-index

generates an XHTML index page from MRTG configuration files or stdin.

libstatgrab.so

contains the libstatgrab API functions.

Last updated on 2017-02-21 12:13:57 -0800

libtasn1-4.10

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-8.0 platform.

Package Information

libtasn1 Dependencies

Optional

GTK-Doc-1.25 and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libtasn1

Installation of libtasn1

Install libtasn1 by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

If you did not pass the --enable-gtk-doc parameter to the configure script, you can install the API documentation using the following command as the root user:

make -C doc/reference install-data-local

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: asn1Coding, asn1Decoding and asn1Parser
Installed Library: libtasn1.so
Installed Directory: /usr/share/gtk-doc/html/libtasn1

Short Descriptions

asn1Coding

is an ASN.1 DER encoder.

asn1Decoding

is an ASN.1 DER decoder.

asn1Parser

is an ASN.1 syntax tree generator for libtasn1.

libtasn1.so

is a library for Abstract Syntax Notation One (ASN.1) and Distinguish Encoding Rules (DER) manipulation.

Last updated on 2017-02-14 22:04:32 -0800

libunique-1.1.6

Introduction to libunique

The libunique package contains a library for writing single instance applications.

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

Package Information

Additional Downloads

libunique Dependencies

Required

GTK+-2.24.31

Optional

gobject-introspection-1.50.0 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libunique

Installation of libunique

Install libunique by running the following commands:

patch -Np1 -i ../libunique-1.1.6-upstream_fixes-1.patch &&
autoreconf -fi &&

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-dbus: This switch disables D-Bus backend in favor of the GDBus backend.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libunique-1.0.so
Installed Directories: /usr/include/unique-1.0 and /usr/share/gtk-doc/html/unique

Short Descriptions

libunique-1.0.so

contains the libunique API functions for single instance support.

Last updated on 2017-02-20 16:33:44 -0800

libunistring-0.9.7

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-8.0 platform.

Package Information

libunistring Dependencies

Optional

texlive-20160523b (or install-tl-unx) (to rebuild the documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libunistring

Installation of libunistring

Install libunistring by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libunistring-0.9.7 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: None
Installed Libraries: libunistring.so
Installed Directory: /usr/include/unistring and /usr/share/doc/libunistring-0.9.7

Short Descriptions

libunistring.so

provides the unicode string library API.

Last updated on 2017-02-14 16:20:11 -0800

libusb-1.0.21

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-8.0 platform.

Package Information

libusb Dependencies

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libusb

Installation of libusb

Note

This package does not support parallel build.

Install libusb by running the following commands:

sed -i "s/^PROJECT_LOGO/#&/" doc/doxygen.cfg.in &&

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

If Doxygen is installed and you wish to build the API documentation, issue the following command:

make -C doc docs

This package does not come with a test suite.

Now, as the root user:

make install

If you built the API documentation, install it using the following commands as the root user:

install -v -d -m755 /usr/share/doc/libusb-1.0.21/apidocs &&
install -v -m644    doc/html/* \
                    /usr/share/doc/libusb-1.0.21/apidocs

Command Explanations

sed -i ...: This sed prevents a warning when building the documentation.

Configuring Libusb

To access raw USB devices (those not treated as a disk by the mass-storage driver), appropriate support must be available in the kernel. Check your kernel configuration:

Device Drivers --->
  [*] USB support --->                   [CONFIG_USB_SUPPORT]
    <*/M> Support for Host-side USB      [CONFIG_USB]
    (Select any USB hardware device drivers you may need on the same page)

For more details on setting up USB devices, see the section called “USB Device Issues”.

Contents

Installed Programs: None
Installed Library: libusb-1.0.so
Installed Directories: /usr/include/libusb-1.0 and /usr/share/doc/libusb-1.0.21

Short Descriptions

libusb-1.0.so

contains API functions used for accessing USB hardware.

Last updated on 2017-02-14 23:25:58 -0800

libusb-compat-0.1.5

Introduction to libusb-compat

The libusb-compat package aims to look, feel and behave exactly like libusb-0.1. It is a compatibility layer needed by packages that have not been upgraded to the libusb-1.0 API.

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

Package Information

libusb-compat Dependencies

Required

libusb-1.0.21

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libusb-compat

Installation of libusb-compat

Install libusb-compat 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

Contents

Installed Program: libusb-config
Installed Library: libusb.so
Installed Directories: None

Short Descriptions

libusb-config

determines the compile and linker flags that should be used to compile and link programs that use libusb.

libusb.so

is a library that is compatible with libusb-0.1, but uses libusb-1.0 to provide functionality.

Last updated on 2017-02-18 22:13:39 -0800

libxkbcommon-0.7.1

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-8.0 platform.

Package Information

libxkbcommon Dependencies

Required

xkeyboard-config-2.20

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxkbcommon

Installation of libxkbcommon

Install libxkbcommon by running the following commands:

./configure $XORG_CONFIG     \
            --docdir=/usr/share/doc/libxkbcommon-0.7.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.

--disable-x11: Use this switch if you have not installed libxcb-1.12 and don't need the libxkbcommon-x11.so library.

Contents

Installed Programs: None
Installed Libraries: libxkbcommon.so and libxkbcommon-x11.so
Installed Directories: /usr/include/xkbcommon and /usr/share/doc/libxkbcommon-0.7.1

Short Descriptions

libxkbcommon.so

contains the libxkbcommon API functions.

libxkbcommon-x11.so

contains the libxkbcommon X11 specific API functions.

Last updated on 2017-02-15 21:57:41 -0800

libxml2-2.9.4

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-8.0 platform.

Package Information

Additional Downloads

libxml2 Dependencies

Recommended

Note

Some packages which utilize libxml2 (such as GNOME Doc Utils) need the Python module installed to function properly and some packages will not build properly if the Python module is not available.

Valgrind-3.12.0 (may be used in the tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxml2

Installation of libxml2

Install libxml2 by running the following commands:

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

If you downloaded the testsuite, issue the following command:

tar xf ../xmlts20130923.tar.gz

To test the results, issue: make check > check.log. A summary of the results can be obtained with grep -E '^Total|expected' check.log. If Valgrind-3.12.0 is installed and you want to check memory leaks, replace check with check-valgrind.

Now, as the root user:

make install

Command Explanations

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

--with-history: This switch enables Readline support when running xmlcatalog or xmllint in shell mode.

--with-python=/usr/bin/python3: Add this switch if you want libxml2 to use Python3 instead of Python2.

Contents

Installed Programs: xml2-config, xmlcatalog and xmllint
Installed Libraries: libxml2.so and optionally, the libxml2mod.so Python module
Installed Directories: /usr/include/libxml2, /usr/lib/cmake/libxml2, /usr/share/doc/libxml2-2.9.4, /usr/share/doc/libxml2-python-2.9.4, 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.

Last updated on 2017-02-14 16:20:11 -0800

libxslt-1.1.29

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-8.0 platform.

Package Information

libxslt Dependencies

Required

libxml2-2.9.4

Recommended
Optional

libgcrypt-1.7.6 and Python-2.7.13

Note

Although it is not a direct dependency, many applications using libxslt will expect docbook-xml-4.5 and docbook-xsl-1.79.1 to be present.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxslt

Installation of libxslt

Install libxslt 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

sed -i ...: This command silences some meaningless warnings from libtool.

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

Contents

Installed Programs: xslt-config and xsltproc
Installed Libraries: libexslt.so, libxslt.so and optionally, libxsltmod.so Python modules
Installed Directories: /usr/include/libexslt, /usr/include/libxslt, /usr/lib/libxslt-plugins, /usr/share/doc/libxslt-1.1.29, and /usr/share/doc/libxslt-python-1.1.29

Short Descriptions

xslt-config

is used to find out the pre-processor, linking and compiling flags necessary to use the libxslt libraries in 3rd-party programs.

xsltproc

is used to apply XSLT stylesheets to XML documents.

libexslt.so

is used to provide extensions to XSLT functions.

libxslt.so

provides extensions to the libxml2 libraries to parse files that use the XSLT format.

Last updated on 2017-02-14 19:04:01 -0800

LZO-2.09

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lzo

Installation of LZO

Install LZO by running the following commands:

./configure --prefix=/usr                    \
            --enable-shared                  \
            --disable-static                 \
            --docdir=/usr/share/doc/lzo-2.09 &&
make

To test the results, issue: make check. All the checks should pass. Now issue make test to run the full suite of tests.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: None
Installed Libraries: liblzo2.so
Installed Directories: /usr/include/lzo and /usr/share/doc/lzo

Short Descriptions

liblzo2.so

is a data compression and decompression library.

Last updated on 2017-02-14 16:20:11 -0800

mtdev-1.1.5

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mtdev

Installation of mtdev

Install mtdev by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Program: mtdev-test
Installed Library: libmtdev.so
Installed Directories: None

Short Descriptions

mtdev-test

is a tool to test libmtdev.

libmtdev.so

contains Multitouch Protocol Translation API functions.

Last updated on 2017-02-15 14:01:44 -0800

npth-1.3

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-8.0 platform.

Package Information

  • Download (FTP): ftp://ftp.gnupg.org/gcrypt/npth/npth-1.3.tar.bz2

  • Download MD5 sum: efe1524c53670b5755dc27893d2d68a0

  • Download size: 292 KB

  • Estimated disk space required: 2.5 MB (with checks)

  • Estimated build time: less than 0.1 SBU (with checks)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/npth

Installation of NPth

Install NPth by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Program: npth-config
Installed Library: libnpth.so
Installed Directory: None

Short Descriptions

npth-config

is a utility used to configure and build applications based on the npth library. It can be used to query the C compiler and linker flags which are required to correctly compile and link the application against the npth library.

libnpth.so

contains the API functions used by the New Portable Threads Library.

Last updated on 2017-02-18 18:01:35 -0800

NSPR-4.13.1

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nspr

Installation of NSPR

Install NSPR by running the following commands:

cd nspr                                                     &&
sed -ri 's#^(RELEASE_BINS =).*#\1#' 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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed -ri 's#^(RELEASE_BINS =).*#\1#' pr/src/misc/Makefile.in: This sed disables installing two unneeded scripts.

sed -i 's#$(LIBRARY) ##' config/rules.mk: This sed disables installing the static libraries.

--with-mozilla: This parameter adds Mozilla support to the libraries (required if you want to build any other Mozilla products and link them to these libraries).

--with-pthreads: This parameter forces use of the system pthread library.

$([ $(uname -m) = x86_64 ] && echo --enable-64bit): The --enable-64bit parameter is required on an x86_64 system to prevent configure failing with a claim that this is a system without pthread support. The [ $(uname -m) = x86_64 ] test ensures it has no effect on a 32 bit system.

Contents

Installed Programs: nspr-config
Installed Libraries: libnspr4.so, libplc4.so and libplds4.so
Installed Directories: /usr/include/nspr

Short Descriptions

nspr-config

provides compiler and linker options to other packages that use NSPR.

libnspr4.so

contains functions that provide platform independence for non-GUI operating system facilities such as threads, thread synchronization, normal file and network I/O, interval timing and calendar time, basic memory management and shared library linking.

libplc4.so

contains functions that implement many of the features offered by libnspr4

libplds4.so

contains functions that provide data structures.

Last updated on 2017-02-14 22:04:32 -0800

OpenOBEX-1.7.2

Introduction to OpenOBEX

The OpenOBEX package contains a library that implements Object Exchange Protocol used for binary file transfers between devices.

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

Package Information

OpenOBEX Dependencies

Required

CMake-3.7.2 and libusb-1.0.21

Recommended
Optional

Doxygen-1.8.13, libxslt-1.1.29, OpenJDK-1.8.0.121, and xmlto-0.0.28

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openobex

Installation of OpenOBEX

OpenOBEX installs a udev rule that requires a group named plugdev. Create that group as the root user:

groupadd -g 90 plugdev

Install OpenOBEX by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr      \
      -DCMAKE_INSTALL_LIBDIR=/usr/lib  \
      -DCMAKE_BUILD_TYPE=Release       \
      -Wno-dev                         \
      .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
if [ -d /usr/share/doc/openobex ]; then
  mv -fv /usr/share/doc/{openobex,openobex-1.7.2}
fi

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-Wno-dev: This switch is used to suppress warnings that are meant for the author of the CMakeLists.txt files.

mv -fv ...: Moves the documentation to a versioned directory, if it has been created.

Contents

Installed Program: obex-check-device
Installed Library: libopenobex.so
Installed Directory: /usr/include/openobex, /usr/lib/cmake/OpenObex-1.7.1, and /usr/share/doc/openobex-1.7.1

Short Descriptions

obex-check-device

is a tool that helps udev find connectable OBEX USB devices.

libopenobex.so

contains the OpenOBEX API functions.

Last updated on 2017-02-20 11:43:55 -0800

PCRE-8.40

Introduction to PCRE

The PCRE package contains Perl Compatible Regular Expression libraries. These are useful for implementing regular expression pattern matching using the same syntax and semantics as Perl 5.

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

Package Information

PCRE Dependencies

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pcre

Installation of PCRE

Install PCRE by running the following commands:

./configure --prefix=/usr                     \
            --docdir=/usr/share/doc/pcre-8.40 \
            --enable-unicode-properties       \
            --enable-pcre16                   \
            --enable-pcre32                   \
            --enable-pcregrep-libz            \
            --enable-pcregrep-libbz2          \
            --enable-pcretest-libreadline     \
            --disable-static                 &&
make

To test the results, issue: make check.

Now, as the root user:

make install                     &&
mv -v /usr/lib/libpcre.so.* /lib &&
ln -sfv ../../lib/$(readlink /usr/lib/libpcre.so) /usr/lib/libpcre.so

Command Explanations

--enable-unicode-properties: This switch enables Unicode properties support and includes the code for handling UTF-8/16/32 character strings in the library. You need this switch if you are going to build GLib-2.50.3 with the --with-pcre=system switch.

--enable-pcre16: This switch enables 16 bit character support.

--enable-pcre32: This switch enables 32 bit character support.

--enable-pcregrep-libz: This switch adds support to pcregrep to read .gz compressed files.

--enable-pcregrep-libbz2: This switch adds support to pcregrep to read .bz2 compressed files.

--enable-pcretest-libreadline: This switch adds line editing and history features to pcretest program.

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

mv -v /usr/lib/libpcre.so.* /lib: Moves the PCRE library on the root filesystem so that it is available in case grep gets reinstalled with PCRE support.

Contents

Installed Programs: pcregrep, pcretest and pcre-config
Installed Libraries: libpcre.so, libpcre16.so, libpcre32.so, libpcrecpp.so and libpcreposix.so
Installed Directory: /usr/share/doc/pcre-8.40

Short Descriptions

pcregrep

is a grep that understands Perl compatible regular expressions.

pcretest

can test a Perl compatible regular expression.

pcre-config

is used during the compile process of programs linking to the PCRE libraries.

Last updated on 2017-02-14 22:04:32 -0800

PCRE2-10.23

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-8.0 platform.

Package Information

PCRE2 Dependencies

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pcre2

Installation of PCRE2

Install PCRE2 by running the following commands:

./configure --prefix=/usr                       \
            --docdir=/usr/share/doc/pcre2-10.23 \
            --enable-unicode                    \
            --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.

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

Short Descriptions

pcre2grep

is a version of grep that understands Perl compatible regular expressions..

pcre2test

can test a Perl compatible regular expression.

pcre2-config

outputs compilation information to programs linking against the PCRE2 libraries.

Last updated on 2017-02-19 13:23:34 -0800

Popt-1.16

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/popt

Installation of Popt

Install popt by running the following commands:

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

If you have Doxygen-1.8.13 installed and wish to build the API documentation, issue 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.16 &&
install -v -m644 doxygen/html/* /usr/share/doc/popt-1.16

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

Short Descriptions

libpopt.so

is used to parse command-line options.

Last updated on 2017-02-15 12:04:59 -0800

Pth-2.0.7

Introduction to Pth

The Pth package contains a very portable POSIX/ANSI-C based library for Unix platforms which provides non-preemptive priority-based scheduling for multiple threads of execution (multithreading) inside event-driven applications. All threads run in the same address space of the server application, but each thread has its own individual program-counter, run-time stack, signal mask and errno variable.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pth

Installation of Pth

Caution

Don't add the --enable-pthread parameter to the configure command below else you will overwrite the pthread library and interface header installed by the Glibc package in LFS.

Install Pth by running the following commands:

sed -i 's#$(LOBJS): Makefile#$(LOBJS): pth_p.h Makefile#' Makefile.in &&
./configure --prefix=/usr           \
            --disable-static        \
            --mandir=/usr/share/man &&
make

To test the results, issue: make test.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/pth-2.0.7 &&
install -v -m644    README PORTING SUPPORT TESTS \
                    /usr/share/doc/pth-2.0.7

Command Explanations

sed -i 's#$(LOBJS) ...: This sed fixes a race condition in the Makefile. It allows you to run make with multiple jobs (e.g., make -j4) .

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

--mandir=/usr/share/man: This switch puts the man pages in /usr/share/man instead of /usr/man.

Contents

Installed Program: pth-config
Installed Library: libpth.so
Installed Directory: /usr/share/doc/pth-2.0.7

Short Descriptions

pth-config

is a utility used to configure and build applications based on the pth(3) library. It can be used to query the C compiler and linker flags which are required to correctly compile and link the application against the pth(3) library.

libpth.so

contains the API functions used by the GNU Portable Threads Library.

Last updated on 2017-02-14 23:25:58 -0800

Ptlib-2.10.11

Introduction to Ptlib

The Ptlib (Portable Tools Library) package contains a class library that has its genesis many years ago as PWLib (portable Windows Library), a method to produce applications to run on various platforms.

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

Package Information

Additional Downloads

Ptlib Dependencies

Recommended
Optional

Cyrus SASL-2.1.26, Lua-5.3.4, OpenLDAP-2.4.44, PulseAudio-10.0, SDL-1.2.15, unixODBC-2.3.4, v4l-utils-1.12.3, libdc1394, and libraw1394,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ptlib

Installation of Ptlib

Install Ptlib by running the following commands:

patch -Np1 -i ../ptlib-2.10.11-bison_fixes-2.patch &&

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

This package does not come with a test suite.

Now, as the root user:

make install &&
chmod -v 755 /usr/lib/libpt.so.2.10.11

Contents

Installed Program: ptlib-config
Installed Libraries: libpt.so and libpt_s.a
Installed Directories: /usr/include/ptclib, /usr/include/ptlib, /usr/lib/ptlib-2.10.11, and /usr/share/ptlib

Short Descriptions

ptlib-config

determines the compile and linker flags that should be used to compile and link programs that use libpt.

libpt.so

contains the Ptlib API functions.

Last updated on 2017-02-18 18:01:35 -0800

Qca-2.1.1

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-8.0 platform.

Package Information

Qca Dependencies

Required

Certificate Authority Certificates, CMake-3.7.2, Qt-5.8.0, and Which-2.21

Optional

Cyrus SASL-2.1.26, GnuPG-2.1.18, libgcrypt-1.7.6, libgpg-error-1.26, NSS-3.29, NSPR-4.13.1, OpenSSL-1.0.2k, p11-kit-0.23.2, Doxygen-1.8.13, and Which-2.21

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qca

Installation of Qca

If desired, remove a lot of irritating warnings when building:

sed -i 's/BSD/DEFAULT/' CMakeLists.txt

Fix the location of the CA certificates:

sed -i 's@ca-bundle.pem@ca-bundle.crt@' CMakeLists.txt

Install Qca by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$QT5DIR            \
      -DCMAKE_INSTALL_LIBDIR=lib                \
      -DCMAKE_BUILD_TYPE=Release                \
      -DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man \
      ..                                        &&

make

To test the results, issue make test.

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply a higher level of compiler optimizations.

-DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man: Install the qca man page in the normal location.

Contents

Installed Programs: mozcerts-qt5 and qcatool-qt5
Installed Libraries: libqca-qt5.so
Installed Directories: $QT5DIR/include/Qca-qt5, $QT5DIR/lib/cmake/Qca-qt5, and $QT5DIR/lib/qca-qt5

Short Descriptions

mozcerts-qt5

is a command line tool for converting certdata.txt into outfile.pem files.

qcatool-qt5

is a command line tool for performing various cryptographic operations with Qca.

libqca-qt5.so

is the Qt Cryptography Architecture (Qca) library.

Last updated on 2017-02-20 12:59:39 -0800

Talloc-2.1.8

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-8.0 platform.

Package Information

Talloc Dependencies

Optional

docbook-xml-4.5, docbook-xsl-1.79.1 and libxslt-1.1.29 (To generate man pages), Python-2.7.13 (To build Python-2 module) and Python-3.6.0 (To build Python-3 module)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/talloc

Installation of Talloc

Install Talloc by running the following commands:

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

To check the results, issue make check. The python tests fail due to missing files.

Now, as the root user:

make install

Command Explanations

--extra-python=PYTHON: This switch enables building selected libraries for the specified additional version of Python (example: --extra-python=/usr/bin/python3).

Contents

Installed Programs: None
Installed Libraries: libpytalloc-util.cpython-35m-x86-64-linux-gnu.so, libpytalloc-util.so, libtalloc.so, talloc.so (Python-2 Module) and talloc.cpython-35m-x86_64-linux-gnu.so (Python-3 Module)
Installed Directories: None

Short Descriptions

libtalloc.so

contains a replacement for the Glibc malloc function.

Last updated on 2017-02-20 11:43:55 -0800

Wayland-1.12.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-8.0 platform.

Package Information

Wayland Dependencies

Required

libffi-3.2.1 and libxml2-2.9.4

Optional

Doxygen-1.8.13, Graphviz-2.38.0 and xmlto-0.0.28 (to build the API documentation) and docbook-xml-4.5, docbook-xsl-1.79.1 and libxslt-1.1.29 (to build the manual pages)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wayland

Installation of Wayland

Install Wayland by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --disable-documentation &&
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-documentation: This switch is used to disable building of the API documentation. Remove it if you have installed optional dependencies.

Contents

Installed Programs: wayland-scanner
Installed Libraries: libwayland-client.so, libwayland-cursor.so, 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-server.so

contains API functions for writing Wayland compositors.

Last updated on 2015-07-31 23:26:22 -0500

Wayland-Protocols-1.7

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-8.0 platform.

Package Information

Wayland-protocols Dependencies

Required

Wayland-1.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wayland-protocols

Installation of Wayland-protocols

Install Wayland-protocols 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: None
Installed Directories: /usr/share/wayland-protocols

Last updated on 2017-02-15 21:57:41 -0800

wv-1.2.9

Introduction to wv

This package contains tools for reading information from an MS Word document.

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

Package Information

wv Dependencies

Required

libgsf-1.14.41 and libpng-1.6.28

Optional

libwmf

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wv

Installation of wv

Install wv by running the following commands:

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

This package does not have a testsuite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: wvSummary and several other wv* programs which are deprecated in favour of abiword: see http://wvware.sourceforge.net/
Installed Library: libwv-1.2.so
Installed Directory: /usr/share/wv

Short Descriptions

wvSummary

displays the summary information from an MS Word document.

libwv-1.2.so

provides functions to access MS Word documents.

Last updated on 2017-02-21 13:10:36 -0800

Xapian-1.4.3

Introduction to xapian

Xapian is an open source search engine library.

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

Package Information

Xapian Dependencies

Optional

Valgrind-3.12.0 (for tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xapian

Installation of Xapian

Install Xapian by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/xapian-core-1.4.3 &&
make

The regression tests are not recommended. On a fast (3.2 GHz i7) system they took over five hours and two of four tests (the valgrind tests) failed. To run the test suite anyway, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: copydatabase, delve, quest, simpleexpand, simpleindex, simplesearch, xapian-check, xapian-chert-update, xapian-compact, xapian-config, xapian-inspect, xapian-metadata, xapian-progsrv, xapian-replicate, xapian-replicate-server and xapian-tcpsrv
Installed Libraries: libxapian.so
Installed Directories: /usr/include/xapian, /usr/lib/cmake/xapian, and /usr/share/doc/xapian-core-1.4.3

Short Descriptions

copydatabase

perform a document-by-document copy of one or more Xapian databases.

delve

inspect the contents of a Xapian database.

quest

is a search command line tool.

simpleexpand

is a simple example program demonstrating query expansion.

simpleindex

index each paragraph of a text file as a Xapian document.

simplesearch

is a simple command line search utility.

xapian-check

check the consistency of a database or table.

xapian-chert-update

update a chert database to the new format keys.

xapian-compact

compact a database, or merge and compact several.

xapian-config

report information about the installed xapian.

xapian-inspect

inspect the contents of a flint table for development or debugging.

xapian-metadata

read and write user metadata.

xapian-progsrv

remote server for use with ProgClient.

xapian-replicate

replicate a database from a master server to a local copy.

xapian-replicate-server

service database replication requests from clients.

xapian-tcpsrv

is the TCP daemon for use with Xapian's remote backend.

Last updated on 2017-02-18 18:01:35 -0800

YAML-0.1.6

Introduction to YAML

The YAML package contains a C library for parsing and emitting YAML (YAML Ain't Markup Language).

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

Package Information

YAML Dependencies

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/yaml

Installation of YAML

Install YAML 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.

Last updated on 2017-02-15 16:04:09 -0800

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-8.0 platform.

Package Information

AAlib Dependencies

Optional

X Window System, slang-2.3.1, and GPM-1.20.7

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/aalib

Installation of AAlib

Fix a minor problem with the included m4 file:

sed -i -e '/AM_PATH_AALIB,/s/AM_PATH_AALIB/[&]/' aalib.m4

Install AAlib by running the following commands:

./configure --prefix=/usr             \
            --infodir=/usr/share/info \
            --mandir=/usr/share/man   \
            --disable-static          &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: aafire, aainfo, aalib-config, aasavefont, and aatest
Installed Library: libaa.{so,a}
Installed Directories: None

Short Descriptions

aafire

is little toy of AAlib, rendering an animated fire in ASCII Art.

aainfo

provides information for your current settings related to AAlib.

aalib-config

provides configuration info for AAlib.

aasavefont

saves a font to a file.

aatest

shows the abilities of AAlib in a little test.

libaa.{so,a}

is a collection of routines to render any graphical input in portable format to ASCII Art. It can be used through many programs and has a very well documented API, so you can easily put it into your own programs.

Last updated on 2017-02-17 16:10:58 -0800

babl-0.1.24

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-8.0 platform.

Package Information

Babl Dependencies

Optional

gobject-introspection-1.50.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/babl

Installation of Babl

Install Babl by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make 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,png,svg} /usr/share/gtk-doc/html/babl/graphics

Command Explanations

--disable-docs: This switch disables BablFishPath.html and index.html generation. Remove it, if you want them. Note that generating the docs takes a long time, up to as much as 2.8 SBU.

install -v -m755 -d /usr/share/gtk-doc/html/babl/graphics: This and the subsequent commands install the library html documentation under /usr/share/gtk-doc/html where other gtk packages put the programmer-oriented documentation.

Contents

Installed Programs: None
Installed Libraries: libbabl-0.1.so and libraries in /usr/lib/babl-0.1
Installed Directories: /usr/{include,lib}/babl-0.1 and /usr/share/gtk-doc/html/babl

Short Descriptions

libbabl-0.1.so

contains functions to access BablFishes to convert between formats.

Last updated on 2017-02-16 19:05:12 -0800

Exiv2-0.25

Introduction to Exiv2

Exiv2 is a C++ library and a command line utility for managing image and video metadata.

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

Package Information

  • Download (HTTP): http://www.exiv2.org/exiv2-0.25.tar.gz

  • Download MD5 sum: 258d4831b30f75a01e0234065c6c2806

  • Download size: 5.2 MB

  • Estimated disk space required: 46 MB

  • Estimated build time: 1 SBU

Exiv2 dependencies

Recommended
Optional

libssh

Optional for documentation

Doxygen-1.8.13, Graphviz-2.38.0, Python-3.6.0, and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/exiv2

Installation of Exiv2

Install Exiv2 by running the following commands:

./configure --prefix=/usr     \
            --enable-video    \
            --enable-webready \
            --without-ssh     \
            --disable-static  &&

make

This package does not come with a test suite.

Now, as the root user:

make install &&
chmod -v 755 /usr/lib/libexiv2.so

Command Explanations

--enable-video: This switch enables managing video metadata.

--enable-webready: This switch enables managing web image metadata.

--without-ssh: This switch is necessary when webready is enabled and libssh is not installed. Libssh is required for ssh.

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

--without-curl: This switch is necessary when webready is enabled and cURL-7.52.1 is not installed. Libcurl is required for http.

Contents

Installed Program: exiv2
Installed Library: libexiv2.so
Installed Directory: /usr/include/exiv2

Short Descriptions

exiv2

is a utility used to dump Exif data.

Last updated on 2017-02-16 19:05:12 -0800

FreeType-2.7.1

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-8.0 platform.

Package Information

Additional Downloads

Additional Documentation

FreeType2 Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/freetype2

Installation of FreeType2

If you downloaded the additional documentation, unpack it into the source tree using the following command:

tar -xf ../freetype-doc-2.7.1.tar.bz2 --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 --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/freetype-2.7.1 &&
cp -v -R docs/*     /usr/share/doc/freetype-2.7.1

Command Explanations

sed -ri ...: First command enables GX/AAT and OpenType table validation and second command enables Subpixel Rendering. Note that Subpixel Rendering may have patent issues. Be sure to read the 'Other patent issues' part of http://www.freetype.org/patents.html before enabling this option.

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

Short Descriptions

freetype-config

is used to get FreeType compilation and linking information.

libfreetype.so

contains functions for rendering various font types, such as TrueType and Type1.

Last updated on 2017-02-15 14:01:44 -0800

Fontconfig-2.12.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-8.0 platform.

Package Information

Fontconfig Dependencies

Required

FreeType-2.7.1

Optional

DocBook-utils-0.6.14 and libxml2-2.9.4, texlive-20160523b (or install-tl-unx)

Note

If you have DocBook Utils installed and you remove the --disable-docs parameter from the configure command below, you must have SGMLSpm-1.1 and texlive-20160523b installed also, or the Fontconfig build will fail.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig

Installation of Fontconfig

Install Fontconfig by running the following commands:

sed -e '/FC_CHAR_WIDTH/s/CHAR_WIDTH/CHARWIDTH/'             \
    -e '/FC_CHARWIDTH/a #define FC_CHAR_WIDTH FC_CHARWIDTH' \
    -i fontconfig/fontconfig.h                &&
sed 's/CHAR_WIDTH/CHARWIDTH/' -i src/fcobjs.h &&

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-docs       \
            --docdir=/usr/share/doc/fontconfig-2.12.1 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

If you did not remove the --disable-docs parameter from the configure command, you can install the pre-generated documentation by using the following commands as the root user:

install -v -dm755 \
        /usr/share/{man/man{3,5},doc/fontconfig-2.12.1/fontconfig-devel} &&
install -v -m644 fc-*/*.1         /usr/share/man/man1 &&
install -v -m644 doc/*.3          /usr/share/man/man3 &&
install -v -m644 doc/fonts-conf.5 /usr/share/man/man5 &&
install -v -m644 doc/fontconfig-devel/* \
                                  /usr/share/doc/fontconfig-2.12.1/fontconfig-devel &&
install -v -m644 doc/*.{pdf,sgml,txt,html} \
                                  /usr/share/doc/fontconfig-2.12.1

Command Explanations

sed ...: Fix a conflict in names caused by changes to a glibc-2.25 header file.

--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.12.1/fontconfig-user.html

Contents

Installed Programs: fc-cache, fc-cat, 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.12.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-list

is used to create font lists.

fc-match

is used to match available fonts, or find fonts that match a given pattern.

fc-pattern

is used to parse pattern (empty pattern by default) and show the parsed result.

fc-query

is used to query fonts files and print resulting patterns.

fc-scan

is used to scan font files and directories, and print resulting patterns.

fc-validate

is used to validate font files.

libfontconfig.so

contains functions used by the Fontconfig programs and also by other programs to configure or customize font access.

Last updated on 2017-02-17 10:03:14 -0800

FriBidi-0.19.7

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-8.0 platform.

Package Information

FriBidi Dependencies

Optional

GLib-2.50.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fribidi

Installation of FriBidi

Install FriBidi 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: fribidi
Installed Library: libfribidi.so
Installed Directory: /usr/include/fribidi

Short Descriptions

fribidi

is a command-line interface to the libfribidi library and can be used to convert a logical string to visual output.

libfribidi.so

contains functions used to implement the Unicode Bidirectional Algorithm.

Last updated on 2017-02-17 16:10:58 -0800

gegl-0.3.12

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-8.0 platform.

Package Information

gegl Dependencies

Required

babl-0.1.24 and JSON-GLib-1.2.2

Optional

asciidoc-8.6.9, Cairo-1.14.8, Enscript-1.6.6, Exiv2-0.25, FFmpeg-3.2.4, gdk-pixbuf-2.36.5, Graphviz-2.38.0, libjpeg-turbo-1.5.1, libpng-1.6.28, librsvg-2.40.16, libwebp-0.6.0, Lua-5.3.4, Pango-1.40.3, Python-2.7.13, Ruby-2.4.0, SDL-1.2.15, gobject-introspection-1.50.0, Vala-0.34.4, w3m-0.5.3, gexiv2, lensfun, libopenraw, libspiro, libumfpack, MRG, OpenCL (for tests), and OpenEXR

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gegl

Installation of gegl

Install gegl by running the following commands:

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

To test the results, issue: make -k check. One test is known to fail.

Now, as the root user:

make install &&
install -v -m644 docs/*.{css,html} /usr/share/gtk-doc/html/gegl &&
install -d -v -m755 /usr/share/gtk-doc/html/gegl/images &&
install -v -m644 docs/images/*.{png,ico,svg} /usr/share/gtk-doc/html/gegl/images

Command Explanations

install -v -m644/docs/*/{css,html} ...: This and the subsequent commands install all the provided documentation instead of only operations.html and the stylesheet gegl.css.

--without-vala: Do not create a vala API - use this if vapigen breaks the build.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

LC_ALL=en_US: In some locales with Ruby-2.4.0 installed, one build component fails and prevents completion of the procedure. Using this variable avoids the problem.

Contents

Installed Programs: gegl
Installed Libraries: libgegl-0.2.so and libraries in /usr/lib/gegl-0.2
Installed Directories: /usr/include/gegl-0.2

Short Descriptions

gegl

is a commandline tool for working with the XML data model.

libgegl-0.2.so

provides infrastructure to do demand based cached non destructive image editing on larger than RAM buffers.

Last updated on 2017-02-20 15:27:17 -0800

giflib-5.1.4

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-8.0 platform.

Package Information

giflib Dependencies

Optional

xmlto-0.0.28 (for html documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/giflib

Installation of giflib

Install giflib by running the following commands:

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

To test the results, issue: make check-TESTS. Test suite results are kept in test.sh.log.

Now, as the root user:

make install

If xmlto-0.0.28 is installed, then the API documentation has been built. If you wish to install the distributed and the just built documentations, issue, as the root user:

find doc \( -name Makefile\* -o -name \*.1 \
         -o -name \*.xml \) -exec rm -v {} \; &&

install -v -dm755 /usr/share/doc/giflib-5.1.4 &&
cp -v -R doc/* /usr/share/doc/giflib-5.1.4

Command Explanations

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.

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

Contents

Installed Programs: gif2rgb, gifbuild, gifclrmp, gifecho, giffix, gifinto, giftext and giftool
Installed Library: libgif.so
Installed Directory: /usr/share/doc/giflib-5.1.4

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.

gifecho

generates a GIF from ASCII text.

giffix

clumsily attempts to fix truncated GIF images.

gifinto

is an end-of-pipe fitting for GIF-processing pipelines.

giftext

prints (text only) general information about a GIF file.

giftool

is a GIF transformation tool.

libgif.so

contains API functions required by the giflib programs and any other programs needing library functionality to read, write and manipulate GIF images.

Last updated on 2017-02-17 12:01:55 -0800

Graphite2-1.3.9

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-8.0 platform.

Package Information

Graphite2 Dependencies

Required

CMake-3.7.2

Optional

FreeType-2.7.1, Python-2.7.13, and silgraphite to build the comparerender test and benchmarking tool, and if that is present, HarfBuzz-1.4.2 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-8.6.9, Doxygen-1.8.13, texlive-20160523b (or install-tl-unx), and dblatex (for PDF docs)

To execute the test suite you will need FontTools (Python 2 module), otherwise, the "cmp" tests fail.

Optional (at runtime)

You will need at least one suitable graphite font for the package to be useful.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/graphite2

Installation of Graphite2

Some tests fail if FontTools (Python 2 module) is not installed. These tests can be removed with:

sed -i '/cmptest/d' tests/CMakeLists.txt

Install Graphite2 by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr .. &&
make

If you wish to build the documentation, issue:

make docs

To test the results, issue: make test.

Now, as the root user:

make install

If you built the documentation, install, as the root user:

install -v -d -m755 /usr/share/doc/graphite2-1.3.9/api &&
cp      -v -r -f    doc/doxygen/{html,latex/refman.pdf} \
                    /usr/share/doc/graphite2-1.3.9/api &&
cp      -v -r -f    doc/{GTF,manual}.html \
                    /usr/share/doc/graphite2-1.3.9

Command Explanations

-DCMAKE_VERBOSE_MAKEFILE=ON: This switch turns on build verbose mode.

Contents

Installed Programs: gr2fonttest, and optionally comparerender
Installed Libraries: libgraphite2.so
Installed Directories: /usr/{include,share}/graphite2 and optionally /usr/share/doc/graphite2-1.3.9

Short Descriptions

comparerender

is a test and benchmarking tool.

gr2fonttest

is a diagnostic console tool for graphite fonts.

libgraphite2.so

is a rendering engine for graphite fonts.

Last updated on 2017-02-15 21:57:41 -0800

HarfBuzz-1.4.2

Introduction to Harfbuzz

The HarfBuzz package contains an OpenType text shaping engine.

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

Package Information

HarfBuzz Dependencies

Recommended
Optional

Cairo-1.14.8, gobject-introspection-1.50.0, GTK-Doc-1.25, and Graphite2-1.3.9

Warning

Recommended dependencies are not strictly required to build the package. However, you might not get expected results at runtime if you don't install them. Please do not report bugs with this package if you have not installed the recommended dependencies.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/harfbuzz

Installation of HarfBuzz

Install HarfBuzz by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--with-gobject: This switch enables building of the HarfBuzz GObject wrapper. Remove it if you did not install GLib.

--with-graphite2: This switch enables Graphite2 support.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: hb-ot-shape-closure, hb-shape, and hb-view (only if cairo is installed)
Installed Libraries: libharfbuzz.so, libharfbuzz-gobject.so and libharfbuzz-icu.so
Installed Directories: /usr/{include,share/gtk-doc/html}/harfbuzz

Short Descriptions

hb-ot-shape-closure

gives the set of characters contained in a string, represented as single characters and/or single character names. Example: hb-ot-shape-closure /usr/share/fonts/dejavu/DejaVuSans.ttf "Hello World.".

hb-shape

is used for the conversion of text strings into positioned glyphs.

hb-view

may be used for a graphical view of a string shape, using a particular font, as a set of glyphs. Output format is automatically defined by the file extension, the supported ones being ansi/png/svg/pdf/ps/eps. Example: hb-view --output-file=hello.png /usr/share/fonts/dejavu/DejaVuSans.ttf "Hello World.".

libharfbuzz.so

HarfBuzz text shaping library.

libharfbuzz-gobject.so

HarfBuzz text shaping library GObject integration.

libharfbuzz-icu.so

HarfBuzz text shaping library ICU integration.

Last updated on 2017-02-15 14:01:44 -0800

IJS-0.35

Introduction to IJS

The IJS package contains a library which implements a protocol for transmission of raster page images.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ijs

Installation of IJS

Install IJS by running the following commands:

./configure --prefix=/usr \
            --mandir=/usr/share/man \
            --enable-shared \
            --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: ijs_client_example, ijs-config and ijs_server_example
Installed Library: libijs.so
Installed Directory: /usr/include/ijs

Short Descriptions

ijs-config

is a program that is used to determine the compiler and linker flags that should be used to compile and link programs that use IJS.

libijs.so

contains the IJS API functions.

Last updated on 2017-02-20 15:27:17 -0800

JasPer-2.0.10

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-8.0 platform.

Package Information

JasPer Dependencies

Required

CMake-3.7.2

Recommended
Optional

Freeglut-3.0.0 (required for jiv), Doxygen-1.8.13 (needed for generating html documentation), and texlive-20160523b (needed to regnerate the pdf documention)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/jasper

Installation of JasPer

mkdir BUILD &&
cd    BUILD &&

cmake -DCMAKE_INSTALL_PREFIX=/usr    \
      -DCMAKE_BUILD_TYPE=Release     \
      -DCMAKE_SKIP_INSTALL_RPATH=YES \
      -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-2.0.10 \
      ..  &&
make

To test the results, issue: make test.

Now, as the root user:

make install

Command Explanations

-DCMAKE_SKIP_INSTALL_RPATH=YES: This option removes embedded library search paths.

Contents

Installed Programs: imgcmp, imginfo, jasper, and jiv
Installed Library: libjasper.so
Installed Directories: /usr/include/jasper and /usr/share/doc/jasper-2.0.10

Short Descriptions

imgcmp

compares two images of the same geometry.

imginfo

displays information about an image.

jasper

converts images between formats (BMP, JPS, JPC, JPG, PGX, PNM, MIF, and RAS).

jiv

displays images.

libjasper.so

is a library used by programs for reading and writing JPEG2000 format files.

Last updated on 2017-02-16 20:11:03 -0800

Little CMS-1.19

Introduction to Little CMS

The Little CMS library is used by other programs to provide color management facilities.

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

Package Information

Additional Downloads

Little CMS Dependencies

Optional

LibTIFF-4.0.7, libjpeg-turbo-1.5.1, and Python-2.7.13 (with SWIG-3.0.12 also)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lcms

Installation of Little CMS

Install Little CMS by running the following commands:

patch -Np1 -i ../lcms-1.19-cve_2013_4276-1.patch &&

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

To test the results, issue: make check.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/lcms-1.19 &&
install -v -m644    README.1ST doc/* \
                    /usr/share/doc/lcms-1.19

Command Explanations

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

--with-python: Use this parameter if Python and SWIG are installed.

Contents

Installed Programs: icc2ps, icclink, icctrans, wtpt and optionally, jpegicc, tiffdiff and tifficc
Installed Libraries: liblcms.so and the optional _lcms.so Python module
Installed Directory: /usr/share/doc/lcms-1.19

Short Descriptions

icc2ps

generates PostScript CRD or CSA from ICC profiles.

icclink

links two or more profiles into a single device link profile.

icctrans

is a color space conversion calculator.

jpegicc

is an ICC profile applier for JPEG files.

tifficc

is an ICC profile applier for TIFF files.

tiffdiff

A TIFF compare utility

wtpt

shows media white of profiles, identifying black body locus.

liblcms.so

is used by the lcms programs as well as other programs to provide color management facilities.

Last updated on 2017-02-21 18:24:39 -0800

Little CMS-2.8

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-8.0 platform.

Package Information

Little CMS2 Dependencies

Optional

libjpeg-turbo-1.5.1 and LibTIFF-4.0.7

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lcms2

Installation of Little CMS2

Install Little CMS2 by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: jpgicc, linkicc, psicc, tificc, and transicc
Installed Library: liblcms2.so
Installed Directories: None

Short Descriptions

jpgicc

is the Little CMS ICC profile applier for JPEG.

linkicc

is the Little CMS ICC device link generator

psicc

is the Little CMS ICC PostScript generator.

tificc

is the Little CMS ICC tiff generator.

transicc

is the Little CMS ColorSpace conversion calculator.

liblcms2.so

contains functions implement the lcms2 API.

Last updated on 2017-02-16 19:24:14 -0800

libexif-0.6.21

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-8.0 platform.

Package Information

libexif Dependencies

Optional (to Build Documentation)

Doxygen-1.8.13 and Graphviz-2.38.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libexif

Installation of libexif

Install libexif by running the following commands:

./configure --prefix=/usr \
            --with-doc-dir=/usr/share/doc/libexif-0.6.21 \
            --disable-static &&
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.21.

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

Short Descriptions

libexif.so

contains functions used for parsing, editing, and saving EXIF data.

Last updated on 2017-02-16 19:05:12 -0800

libjpeg-turbo-1.5.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-8.0 platform.

Package Information

libjpeg-turbo Dependencies

Required

NASM-2.12.02 or yasm-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libjpeg-turbo

Installation of libjpeg-turbo

Install libjpeg-turbo by running the following commands:

./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-jpeg8            \
            --disable-static        \
            --docdir=/usr/share/doc/libjpeg-turbo-1.5.1 &&
make

To test the results, issue: make test.

Note

If installing libjpeg-turbo over an older jpeg installation, not all library symbolic links are updated properly. To fix this before installation, run the following as the root user:

rm -f /usr/lib/libjpeg.so*

Now, as the root user:

make install

Command Explanations

--with-jpeg8: This switch enables compatibility with libjpeg version 8.

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

Contents

Installed Programs: cjpeg, djpeg, jpegtran, rdjpgcom, tjbench, and wrjpgcom
Installed Libraries: libjpeg.so and libturbojpeg.so
Installed Directories: /usr/share/doc/libjpeg-turbo-1.5.1

Short Descriptions

cjpeg

compresses image files to produce a JPEG/JFIF file on the standard output. Currently supported input file formats are: PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, and Targa.

djpeg

decompresses image files from JPEG/JFIF format to either PPM (PBMPLUS color format), PGM (PBMPLUS gray-scale format), BMP, or Targa format.

jpegtran

is used for lossless transformation of JPEG files.

rdjpgcom

displays text comments from within a JPEG file.

tjbench

is used to benchmark the performance of libjpeg-turbo.

wrjpgcom

inserts text comments into a JPEG file.

libjpeg.so

contains functions used for reading and writing JPEG images.

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

libmng Dependencies

Required

libjpeg-turbo-1.5.1 and Little CMS-2.8

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmng

Installation of libmng

Install libmng by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&

install -v -m755 -d        /usr/share/doc/libmng-2.0.3 &&
install -v -m644 doc/*.txt /usr/share/doc/libmng-2.0.3

Command Explanations

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

Contents

Installed Programs: None
Installed Library: libmng.so
Installed Directory: /usr/share/doc/libmng-2.0.3

Short Descriptions

libmng.so

provides functions for programs wishing to read and write MNG files which are animation files without the patent problems associated with certain other formats.

Last updated on 2017-02-18 16:02:40 -0800

libpng-1.6.28

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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libpng

Installation of libpng

If you want to patch libpng to support apng files, apply it here:

gzip -cd ../libpng-1.6.28-apng.patch.gz | patch -p0

Install libpng by running the following commands:

LIBS=-lpthread ./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.28 &&
cp -v README libpng-manual.txt /usr/share/doc/libpng-1.6.28

Command Explanations

LIBS=-lhptread: Ensure the libpthread library is used to allow parallelism on systems with multiple cores.

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

Short Descriptions

pngfix

tests, optimizes and optionally fixes the zlib header in PNG files. Optionally, when fixing, strips ancillary chunks from the file.

png-fix-itxt

fixes PNG files that have an incorrect length field in the iTXt chunks.

libpng-config

is a shell script that provides configuration information for applications wanting to use libpng.

libpng.so

contain routines used to create and manipulate PNG format graphics files.

Last updated on 2017-02-24 10:42:12 -0800

libraw-0.18.1

Introduction to libraw

Libraw is a library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others).

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

Package Information

libraw Dependencies

Recommended
Optional

LibRaw-demosaic-pack-GPL2 and LibRaw-demosaic-pack-GPL3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libraw

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.18.1 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

CXX="g++ -Wno-narrowing": This environment variable disables a warning that prevents the package from compiling.

--enable-jpeg: This switch enables support for jpeg. Remove if you don't have libjpeg-turbo-1.5.1 installed.

--enable-jasper: This switch enables support for jasper. Remove if you don't have JasPer-2.0.10 installed.

--enable-lcms: This switch enables support for Little CMS2. Remove if you don't have Little CMS-2.8 installed.

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

Contents

Note

All the installed programs are examples of libraw use.

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

Short Descriptions

4channels

generates four TIFF files from RAW data, one file per channel.

dcraw_half

emulates "dcraw -h" (see DCRAW manpage).

mem_image

emulates "dcraw [-4] [-6] [-e]" (see DCRAW manpage).

postprocessing_benchmark

creates eight different renderings from one source file. The first and fourth one should be identical.

simple_dcraw

emulates call to "dcraw [-D] [-T] [-v] [-e] [-4]" (see DCRAW manpage).

dcraw_emu

is an almost complete dcraw emulator (see DCRAW manpage).

half_mt

emulates call to "dcraw -h [-w] [-a] [-v]" (see DCRAW manpage).

multirender_test

creates eight different renderings from one source file. The first and fourth one should be identical.

raw-identify

emulates call to "dcraw -i [-v]" (see DCRAW manpage).

unprocessed_raw

generates unprocessed raw image: with masked pixels and without black subtraction.

Last updated on 2017-02-20 15:49:32 -0800

librsvg-2.40.16

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-8.0 platform.

Package Information

librsvg Dependencies

Required

gdk-pixbuf-2.36.5, libcroco-0.6.11 and Pango-1.40.3

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/librsvg

Installation of librsvg

Install librsvg by running the following commands:

./configure --prefix=/usr    \
            --enable-vala    \
            --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-vala: This switch enables building of the Vala bindings. Remove this switch if you don't have Vala-0.34.4 installed.

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

--disable-introspection: Use this switch if you have not installed Gobject Introspection.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: rsvg-convert and rsvg-view-3
Installed Library: librsvg-2.so and libpixbufloader-svg.so
Installed Directories: /usr/include/librsvg-2.0 and /usr/share/gtk-doc/html/rsvg-2.0

Short Descriptions

rsvg-convert

is used to convert images into PNG, PDF, PS, SVG and other formats.

rsvg-view-3

is a simple GTK+ 3 application that can be used to view an SVG file.

librsvg-2.so

provides the functions to render Scalable Vector Graphics.

libpixbufloader-svg.so

is the Gdk Pixbuf plugin that allows GTK+ applications to render Scalable Vector Graphics images.

Last updated on 2017-02-16 19:24:14 -0800

LibTIFF-4.0.7

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-8.0 platform.

Package Information

LibTIFF Dependencies

Optional

Freeglut-3.0.0 (required for tiffgt), libjpeg-turbo-1.5.1 and JBIG-KIT

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libtiff

Installation of LibTIFF

Install LibTIFF 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: bmp2tiff, fax2ps, fax2tiff, gif2tiff, pal2rgb, ppm2tiff, ras2tiff, raw2tiff, rgb2ycbcr, thumbnail, tiff2bw, tiff2pdf, tiff2ps, tiff2rgba, tiffcmp, tiffcp, tiffcrop, tiffdither, tiffdump, tiffgt, tiffinfo, tiffmedian, tiffset and tiffsplit
Installed Libraries: libtiff.so and libtiffxx.so
Installed Directory: /usr/share/doc/tiff-4.0.7

Short Descriptions

bmp2tiff

converts a Microsoft Windows Device Independent Bitmap image file to a TIFF image.

fax2ps

converts a TIFF facsimile to compressed PostScript file.

fax2tiff

creates a TIFF Class F fax file from raw fax data.

gif2tiff

creates a TIFF file from a GIF87 format image file.

pal2rgb

converts a palette color TIFF image to a full color image.

ppm2tiff

creates a TIFF file from a PPM image file.

ras2tiff

creates a TIFF file from a Sun rasterfile.

raw2tiff

converts a raw byte sequence into TIFF.

rgb2ycbcr

converts non-YCbCr TIFF images to YCbCr TIFF images.

thumbnail

creates a TIFF file with thumbnail images.

tiff2bw

converts a color TIFF image to grayscale.

tiff2pdf

converts a TIFF image to a PDF document.

tiff2ps

converts a TIFF image to a PostScript file.

tiff2rgba

converts a wide variety of TIFF images into an RGBA TIFF image.

tiffcmp

compares two TIFF files.

tiffcp

copies (and possibly converts) a TIFF file.

tiffcrop

selects, copies, crops, converts, extracts and/or processes one or more TIFF files.

tiffdither

converts a grayscale image to bilevel using dithering.

tiffdump

prints verbatim information about TIFF files.

tiffgt

displays an image stored in a TIFF file.

tiffinfo

prints information about TIFF files.

tiffmedian

applies the median cut algorithm to data in a TIFF file.

tiffset

sets the value of a TIFF header to a specified value.

tiffsplit

splits a multi-image TIFF into single-image TIFF files.

libtiff.so

contains the API functions used by the libtiff programs as well as other programs to read and write TIFF files.

libtiffxx.so

contains the C++ API functions used by programs to read and write TIFF files.

Last updated on 2017-02-15 14:01:44 -0800

libwebp-0.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-8.0 platform.

Package Information

libwebp Dependencies

Recommended
Optional

Freeglut-3.0.0 and giflib-5.1.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libwebp

Installation of libwebp

Install libwebp by running the following commands:

Note

If you are updating from libwebp-0.4.x or 0.5.x, and wish that installed applications link to the new version 0.6.x, they need to be reinstalled.

./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, vwebp, and webpmux
Installed Library: libwebpdecoder.so, libwebpdemux.so, libwebpextras.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.

vwebp

decompress a WebP file and display it in a window.

webpmux

creates animated WebP files from non-animated WebP images, extracts frames from animated WebP images, and manages XMP/EXIF metadata and ICC profile.

libwebp.so

contains the API functions for WebP encoding and decoding.

Last updated on 2017-02-17 16:10:58 -0800

newt-0.52.19

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-8.0 platform.

Package Information

Newt Dependencies

Required

popt-1.16 and slang-2.3.1

Recommended
Optional

Python-2.7.13 and Python-3.6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/newt

Installation of newt

Install newt by running the following command:

sed -e 's/^LIBNEWT =/#&/' \
    -e '/install -m 644 $(LIBNEWT)/ s/^/#/' \
    -e 's/$(LIBNEWT)/$(LIBNEWTSONAME)/g' \
    -i Makefile.in                           &&

./configure --prefix=/usr --with-gpm-support &&
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.

Contents

Installed Programs: whiptail
Installed Library: libnewt.so, whiptcl.so, and /usr/lib/python{2.7,3.6}/site-packages/_snack.so
Installed Directories: None

Short Descriptions

whiptail

displays dialog boxes from shell scripts.

libnewt.so

is the library for color text mode, widget based user interfaces.

Last updated on 2017-02-18 22:13:39 -0800

opencv-3.2.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-8.0 platform.

Package Information

Additional Downloads

Note

Download the additional modules via wget as:

wget https://github.com/opencv/opencv_contrib/archive/3.2.0.tar.gz \
     -O opencv_contrib-3.2.0.tar.gz

opencv Dependencies

Required

CMake-3.7.2 and UnZip-6.0

Recommended
Optional

apache-ant-1.10.1, Doxygen-1.8.13, Java-1.8.0.121, Python-3.6.0, Cuda, Eigen, OpenEXR, GCD, GDAL, GigEVisionSDK, JACK, libdc1394, libgphoto2, NumPy, OpenNI, PlanetUML, PvAPI, Threading Building Blocks (TBB), UniCap, VTK - The Visualization Toolkit, and XIMEA

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/opencv

Installation of opencv

If the optional Integrated Performance Primitives (IPP) package has been downloaded, put it in place so the cmake script does not try to download it again:

ipp_file=../ippicv_linux_20151201.tgz             &&
ipp_hash=$(md5sum $ipp_file | cut -d" " -f1)      &&
ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash &&

mkdir -p $ipp_dir &&
cp $ipp_file $ipp_dir

If needed, unpack the additional modules package:

tar xf ../opencv_contrib-3.2.0.tar.gz

Install opencv by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr      \
      -DWITH_XINE=ON                   \
      -DBUILD_TESTS=OFF                \
      -DENABLE_PRECOMPILED_HEADERS=OFF \
      -Wno-dev  ..                     &&
make

The package does not come with an operable test suite.

Now, as the root user:

make install             &&

case $(uname -m) in
  x86_64) ARCH=intel64 ;;
       *) ARCH=ia32    ;;
esac                     &&

cp -v 3rdparty/ippicv/ippicv_lnx/lib/$ARCH/libippicv.a /usr/lib &&
unset ARCH

Command Explanations

-DWITH_XINE=ON: This option instructs the make procedure to use xine-lib-1.2.6.

-DENABLE_PRECOMPILED_HEADERS=OFF: This option is needed for compatibiiity with gcc-6.1 and later.

-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.2.0/modules: instructs the build system to build the additional modules.

cp -v 3rdparty/.../libippicv.a /usr/lib: This command installs a 3rdparty library.

Contents

Installed Programs: opencv_annotation, opencv_createsamples, and opencv_traincascade
Installed Libraries: libippicv.a, libopencv_calib3d.so, libopencv_core.so, libopencv_features2d.so, libopencv_flann.so, libopencv_highgui.so, libopencv_imgcodecs.so, libopencv_imgproc.so, libopencv_ml.so, libopencv_objdetect.so, libopencv_photo.so, libopencv_shape.so, libopencv_stitching.so, libopencv_superres.so, libopencv_ts.a, libopencv_video.so, libopencv_videoio.so, and libopencv_videostab.so
Installed Directories: /usr/include/opencv{,2} and /usr/share/OpenCV

Last updated on 2017-02-19 17:09:49 -0800

OpenJPEG-1.5.2

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-8.0 platform.

Package Information

OpenJPEG Dependencies

Optional

Little CMS-2.8, libpng-1.6.28, LibTIFF-4.0.7 and Doxygen-1.8.13 (to build the API documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openjpeg

Installation of OpenJPEG

Install OpenJPEG by running the following commands:

autoreconf -f -i &&
./configure --prefix=/usr --disable-static &&
make

This package does not come with a testsuite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: image_to_j2k, j2k_dump and j2k_to_image
Installed Libraries: libopenjpeg.so
Installed Directories: /usr/include/openjpeg-1.5 and /usr/share/doc/openjpeg-1.5

Short Descriptions

image_to_j2k

converts various image formats to the jpeg2000 format.

j2k_dump

reads in a jpeg2000 image and dumps the contents to stdout.

j2k_to_image

converts jpeg2000 images to other image types.

Last updated on 2017-02-17 12:01:55 -0800

OpenJPEG-2.1.2

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-8.0 platform.

Package Information

Note

The OpenJPEG 2 source tarball shown above downloads with the correct name, openjpeg-2.1.2.tar.gz, if using a browser such as Firefox. If you prefer to use a command line program such as wget, you normally would obtain v2.1.2.tar.gz. To obtain this package with the proper filename, run:

wget -c https://github.com/uclouvain/openjpeg/archive/v2.1.2.tar.gz \
     -O openjpeg-2.1.2.tar.gz

OpenJPEG Dependencies

Required

CMake-3.7.2

Optional

Little CMS-2.8, libpng-1.6.28, LibTIFF-4.0.7, and Doxygen-1.8.13 (to build the API documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openjpeg2

Installation of OpenJPEG

Install OpenJPEG by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .. &&
make

This package does not come with a working test suite.

Now, as the root user:

make install &&

pushd ../doc &&
for man in man/man?/* ; do
    install -v -D -m 644 $man /usr/share/$man
done         &&
popd

Contents

Installed Programs: opj_compress, opj_decompress, and opj_dump
Installed Libraries: libopenjp2.so
Installed Directories: /usr/include/openjpeg-2.1 and /usr/lib/openjpeg-2.1

Short Descriptions

opj_compress

converts various image formats to the jpeg2000 format.

opj_decompress

converts jpeg2000 images to other image types.

opj_dump

reads in a jpeg2000 image and dumps the contents to stdout.

Last updated on 2017-02-17 12:01:55 -0800

Pixman-0.34.0

Introduction to Pixman

The Pixman package contains a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.

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

Package Information

Pixman Dependencies

Optional

GTK+-2.24.31 and libpng-1.6.28 (for tests and demos)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pixman

Installation of Pixman

Install Pixman 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: libpixman-1.so
Installed Directory: /usr/include/pixman-1

Short Descriptions

libpixman-1.so

contains functions that provide low-level pixel manipulation features.

Last updated on 2017-02-15 14:01:44 -0800

Poppler-0.51.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-8.0 platform.

Package Information

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

Fontconfig-2.12.1

Recommended
Optional

cURL-7.52.1, gobject-introspection-1.50.0, GTK-Doc-1.25, GTK+-2.24.31, Little CMS-1.19 or Little CMS-2.8, LibTIFF-4.0.7, OpenJPEG-2.1.2 (preference is for OpenJPEG1, due to regressions with OpenJPEG2), and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/poppler

Installation of Poppler

Note

This package can be optionally built with support for only one version of Qt4 or Qt5 or without any Qt support. You can selectively disable support for one or both, see "Command Explanations" section, below.

Install Poppler by running the following commands:

./configure --prefix=/usr               \
            --sysconfdir=/etc           \
            --disable-static            \
            --enable-build-type=release \
            --enable-cmyk               \
            --enable-xpdf-headers       \
            --with-testdatadir=$PWD/testfiles &&
make

In order to run the test suite, some testcases are needed and can be obtained only from a git repository. The command to download them is: git clone git://git.freedesktop.org/git/poppler/test testfiles. Then issue: LC_ALL=en_US.UTF-8 make check. It seems that only the Qt4/5 libraries are tested.

Now, as the root user:

make install

To install the documentation, run the following commands as root:

install -v -m755 -d        /usr/share/doc/poppler-0.51.0 &&
install -v -m644 README*   /usr/share/doc/poppler-0.51.0 &&
cp -vr glib/reference/html /usr/share/doc/poppler-0.51.0

Poppler Data

If you downloaded the additional encoding data package, install it by issuing the following commands:

tar -xf ../poppler-data-0.4.7.tar.gz &&
cd poppler-data-0.4.7

Now, as the root user:

make prefix=/usr install

Command Explanations

--enable-build-type=release: This switch is used to apply a higher level of compiler optimizations. Other options are: [relwithdebinfo/debug/debugfull/profile]

--enable-cmyk: Include support for CMYK rasterization.

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

--enable-xpdf-headers: Install some old Xpdf headers required by certain programs (e.g. Okular, LibreOffice and Inkscape).

--with-testdatadir=$PWD/testfiles: Tell the test programs where the auxiliary files are located.

--enable-libcurl: Use libcurl for HTTP support.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--disable-poppler-qt4: Don't compile poppler Qt4 wrapper.

--disable-poppler-qt5: Don't compile poppler Qt5 wrapper.

LC_ALL=en_US.UTF-8 make check: Run 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: pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdfsig, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, pdfunite, and poppler-glib-demo
Installed Libraries: libpoppler.so, libpoppler-cpp.so, libpoppler-glib.so, and libpoppler-qt5.so
Installed Directories: /usr/{include,share,share/gtk-doc/html}/poppler and /usr/share/doc/poppler-0.51.0

Short Descriptions

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.

poppler-glib-demo

is a tool to demonstrate the API, and for use when debugging and testing Poppler.

libpoppler.so

contains the API functions to render PDF files.

libpoppler-cpp.so

is a C++ backend for rendering PDF files.

libpoppler-glib.so

is a wrapper library used to interface the PDF rendering functions with GTK+.

libpoppler-qt5.so

is a wrapper library used to interface the PDF rendering functions with Qt5.

Last updated on 2017-02-22 06:22:59 -0800

Qpdf-6.0.0

Introduction to Qpdf

The Qpdf package contains command-line programs and library that do structural, content-preserving transformations on PDF files.

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

Package Information

Qpdf Dependencies

Required

PCRE-8.40

Optional

fop-2.1 and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qpdf

Installation of Qpdf

Install Qpdf by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/qpdf-6.0.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.

Contents

Installed Programs: fix-qdf, qpdf, and zlib-flate
Installed Library: libqpdf.so
Installed Directories: /usr/include/qpdf and /usr/share/doc/qpdf-6.0.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.

Last updated on 2017-02-19 14:24:01 -0800

Chapter 11. General Utilities

This chapter contains various utilities that do not fit conveniently into other chapters. Programs include a command line calculator, several utilities for manipulating text and graphics, a program to interface with a palm-pilot, a program for entering PIN numbers and pass-phrases, and a hash generator.

Asciidoc-8.6.9

Introduction to Asciidoc

The Asciidoc package is a text document format for writing notes, documentation, articles, books, ebooks, slideshows, web pages, man pages and blogs. AsciiDoc files can be translated to many formats including HTML, PDF, EPUB, and man page.

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

Package Information

Asciidoc Dependencies

Required

Python-2.7.13 or Python-3.6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/asciidoc

Installation of Asciidoc

Install Asciidoc by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --docdir=/usr/share/doc/asciidoc-8.6.9 &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
make docs

Contents

Installed Programs: a2x (symlink to a2x.py), a2x.py, asciidoc (symlink to asciidoc.py), and asciidoc.py
Installed Libraries: None
Installed Directories: /etc/asciidoc

Short Descriptions

a2x

is a toolchain manager for AsciiDoc (converts Asciidoc text files to other file formats).

asciidoc

converts an AsciiDoc text file to HTML or DocBook

Last updated on 2017-02-15 19:06:46 -0800

chrpath-0.16

Introduction to chrpath

The chrpath modify the dynamic library load path (rpath and runpath) of compiled programs and libraries.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/chrpath

Installation of chrpath

Install chrpath by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc/chrpath-0.16 install

Contents

Installed Program: chrpath
Installed Libraries: None
Installed Directory: /usr/share/doc/chrpath-0.16

Short Descriptions

chrpath

changes the rpath or runpath in ELF files.

Last updated on 2017-02-20 15:27:17 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/compface

Installation of Compface

Install Compface by running the following commands:

./configure --prefix=/usr --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -m755 -v xbm2xface.pl /usr/bin

Contents

Installed Programs: compface, uncompface and xbm2xface.pl
Installed Library: libcompface.{so,a}
Installed Directories: None

Short Descriptions

compface

is a filter for generating highly compressed representations of 48x48x1 face image files.

uncompface

is an inverse filter which performs an inverse transformation with no loss of data.

xbm2xface.pl

is a script to generate xfaces.

libcompface.{so,a}

allows the compression and decompression algorithms to be used in other programs such as MTAs.

Last updated on 2017-02-18 11:34:36 -0800

desktop-file-utils-0.23

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-8.0 platform.

Package Information

Desktop File Utils Dependencies

Required

GLib-2.50.3

Optional

Emacs-25.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/desktop-file-utils

Installation of Desktop File Utils

Install Desktop File 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

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:

update-desktop-database /usr/share/applications

Contents

Installed Programs: desktop-file-edit, desktop-file-install, desktop-file-validate and update-desktop-database
Installed Libraries: None
Installed Directories: None

Short Descriptions

desktop-file-edit

is used to modify an existing desktop file entry.

desktop-file-install

is used to install a new desktop file entry. It is also used to rebuild or modify the MIME-types application database.

desktop-file-validate

is used to verify the integrity of a desktop file.

update-desktop-database

is used to update the MIME-types application database.

Last updated on 2017-02-15 16:04:09 -0800

Graphviz-2.38.0

Introduction to Graphviz

The Graphviz package contains graph visualization software. Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. Graphviz has several main graph layout programs. It also has web and interactive graphical interfaces, auxiliary tools, libraries, and language bindings.

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

Package Information

Additional Downloads

Graphviz Dependencies

Recommended
Optional

libglade-2.6.4, ghostscript-9.20, GTK+-2.24.31, Qt-5.8.0, DevIL, Electric Fence, libLASi, GD Library, and glitz

Optional (To Build Language Bindings)

SWIG-3.0.12 (SWIG must be installed or no bindings will be built), Guile-2.0.14, OpenJDK-1.8.0.121, Lua-5.3.4, PHP-7.1.2, Python-2.7.13, Ruby-2.4.0, Tcl-8.6.6, Tk-8.6.6, Io, Mono, OCaml, and R

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/graphviz

Installation of Graphviz

Install Graphviz by running the following commands:

patch -Np1 -i ../graphviz-2.38.0-consolidated_fixes-1.patch &&

sed -i '/LIBPOSTFIX="64"/s/64//' configure.ac &&

autoreconf                               &&
./configure --prefix=/usr --disable-php  &&
make

This package does not come with a test suite that provides meaningful results.

Now, as the root user:

make install

If desired, create a symbolic link in the system documents directory to the documentation installed in /usr/share/graphviz/doc using the following command as the root user:

ln -v -s /usr/share/graphviz/doc \
         /usr/share/doc/graphviz-2.38.0

Command Explanations

sed ... configure.ac: This command is needed to avoid installing files in /usr/lib64.

--disable-php: This version of graphviz does not support php version 7.

Configuring Graphviz

Config Files

/usr/lib/graphviz/config

Configuration Information

There are no specific configuration requirements for Graphviz. You may consider installing the additional plugins and tools available from the download page at http://www.graphviz.org/Download_source.php for additional capabilities. If additional plugins are installed, you can run dot -c (as the root user) to update the config file in /usr/lib/graphviz.

Contents

Installed Programs: acyclic, bcomps, ccomps, circo, cluster, diffimg, dijkstra, dot, dot2gxl, dot_builtins, dotty, edgepaint, fdp, gc, gml2gv, graphml2gv, gv2gml, gv2gxl, gvcolor, gvedit, gvgen, gvmap, gvmap.sh, gvpack, gvpr, gxl2dot, gxl2gv, lefty, lneato, mm2gv, neato, nop, osage, patchwork, prune, sccmap, sfdp, tred, twopi, unflatten, and vimdot
Installed Libraries: libcdt.so, libcgraph.so, libgvc.so, libgvpr.so, libpathplan.so, libxdot.so, and several plugins in /usr/lib/graphviz. There are also several in subdirectories of /usr/lib/{lua,perl5,php,python2.7,tcl8.6}. Unfortunately, some libraries are duplicated.
Installed Directories: /usr/include/graphviz, /usr/lib/graphviz, /usr/lib/tcl8.6/graphviz, /usr/share/doc/graphviz-2.38.0, and /usr/share/graphviz

Short Descriptions

acyclic

is a filter that takes a directed graph as input and outputs a copy of the graph with sufficient edges reversed to make the graph acyclic.

bcomps

decomposes graphs into their biconnected components, printing the components to standard output.

ccomps

decomposes graphs into their connected components, printing the components to standard output.

circo

draws graphs using a circular layout.

cluster

takes as input a graph in DOT format, finds node clusters and augments the graph with this information.

diffimg

(needs GD Library) generates an image where each pixel is the difference between the corresponding pixel in each of the two source images.

dijkstra

reads a stream of graphs and for each computes the distance of every node from sourcenode.

dot

draws directed graphs. It works well on DAGs and other graphs that can be drawn as hierarchies. It reads attributed graph files and writes drawings. By default, the output format dot is the input file with layout coordinates appended.

dot2gxl

converts between graphs represented in GXL and in the DOT language. Unless a conversion type is specified using a flag, gxl2dot will deduce the type of conversion from the suffix of the input file, a .dot suffix causing a conversion from DOT to GXL, and a .gxl suffix causing a conversion from GXL to DOT.

dotty

is a graph editor for the X Window System. It may be run as a standalone editor, or as a front end for applications that use graphs. It can control multiple windows viewing different graphs.

edgepaint

edge coloring to disambiguate crossing edges.

fdp

draws undirected graphs using a “spring” model. It relies on a force-directed approach in the spirit of Fruchterman and Reingold.

gc

is a graph analogue to wc in that it prints to standard output the number of nodes, edges, connected components or clusters contained in the input files. It also prints a total count for all graphs if more than one graph is given.

gml2gv

converts a graph specified in the GML format to a graph in the GV (formerly DOT) format.

graphml2gv

converts a graph specified in the GRAPHML format to a graph in the GV (formerly DOT) format.

gv2gml

converts a graph specified in the GV format to a graph in the GML format.

gv2gxl

converts a graph specified in the GV format to a graph in the GXL format.

gvcolor

is a filter that sets node colors from initial seed values. Colors flow along edges from tail to head, and are averaged (as HSB vectors) at nodes.

gvedit

provides a simple graph editor and viewer. It allows many graphs to be viewed at the same time. The text of each graph is displayed in its own text window.

gvgen

generates a variety of simple, regularly-structured abstract graphs.

gvmap

takes as input a graph in DOT format, finds node clusters and produces a rendering of the graph as a geographic-style map, with clusters highlighted, in xdot format.

gvmap.sh

is a pipeline for running gvmap.

gvpack

reads in a stream of graphs, combines the graphs into a single layout, and produces a single graph serving as the union of the input graphs.

gvpr

is a graph stream editor inspired by awk. It copies input graphs to its output, possibly transforming their structure and attributes, creating new graphs, or printing arbitrary information.

gxl2dot

converts between graphs represented in GXL and in the DOT language. Unless a conversion type is specified using a flag, gxl2dot will deduce the type of conversion from the suffix of the input file, a .dot suffix causing a conversion from DOT to GXL, and a .gxl suffix causing a conversion from GXL to DOT.

gxl2gv

converts between graphs represented in GXL and in the GV language.

lefty

is a two-view graphics editor for technical pictures.

lneato

is a graph editor for the X Window System. It may be run as a standalone editor, or as a front end for applications that use graphs. It can control multiple windows viewing different graphs.

mm2gv

converts a sparse matrix of the Matrix Market format to a graph in the GV (formerly DOT) format.

neato

draws undirected graphs using “spring” models. Input files must be formatted in the dot attributed graph language. By default, the output of neato is the input graph with layout coordinates appended.

nop

reads a stream of graphs and prints each in pretty-printed (canonical) format on stdout. If no files are given, it reads from stdin.

osage

draws clustered graphs. As input, it takes any graph in the DOT format.

patchwork

draws clustered graphs using a squarified treemap layout. As input, it takes any graph in the DOT format.

prune

reads directed graphs in the same format used by dot and removes subgraphs rooted at nodes specified on the command line via options.

sccmap

decomposes digraphs into strongly connected components and an auxiliary map of the relationship between components. In this map, each component is collapsed into a node. The resulting graphs are printed to stdout.

sfdp

draws undirected graphs using the “spring” model, but it uses a multi-scale approach to produce layouts of large graphs in a reasonably short time.

tred

computes the transitive reduction of directed graphs, and prints the resulting graphs to standard output. This removes edges implied by transitivity. Nodes and subgraphs are not otherwise affected.

twopi

draws graphs using a radial layout. Basically, one node is chosen as the center and put at the origin. The remaining nodes are placed on a sequence of concentric circles centered about the origin, each a fixed radial distance from the previous circle.

unflatten

is a preprocessor to dot that is used to improve the aspect ratio of graphs having many leaves or disconnected nodes. The usual layout for such a graph is generally very wide or tall.

vimdot

is a simple script which launches the gvim or vim editor along with a GUI window showing the dot output of the edited file.

libcdt.so

manages run-time dictionaries using standard container data types: unordered set/multiset, ordered set/multiset, list, stack, and queue.

libcgraph.so

supports graph programming by maintaining graphs in memory and reading and writing graph files. Graphs are composed of nodes, edges, and nested subgraphs.

libgvc.so

provides a context for applications wishing to manipulate and render graphs. It provides a command line parsing, common rendering code, and a plugin mechanism for renderers.

libpathplan.so

contains functions to find the shortest path between two points in a simple polygon.

libxdot.so

provides support for parsing and deparsing graphical operations specificed by the xdot language.

Last updated on 2017-02-18 18:01:35 -0800

GTK-Doc-1.25

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-8.0 platform.

Package Information

GTK-Doc Dependencies

Required

docbook-xml-4.5, docbook-xsl-1.79.1, itstool-2.0.2 and libxslt-1.1.29

Optional

dblatex or fop-2.1 (XML PDF support), GLib-2.50.3 (for the test suite), GNOME Doc Utils and Which-2.21 (required for the test suite and gtk-doc documentation), OpenJade-1.3.2 with docbook-4.5 and docbook-dsssl-1.79 (SGML support, not actively maintained any more), Python-2.7.13 (builds gtkdoc-depscan), and Rarian-0.8.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtk-doc

Installation of GTK-Doc

Install GTK-Doc 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: gtkdoc-check, gtkdoc-depscan, gtkdoc-fixxref, gtkdocize, gtkdoc-mkdb, gtkdoc-mkhtml, gtkdoc-mkman, gtkdoc-mkpdf, gtkdoc-mktmpl, gtkdoc-rebase, gtkdoc-scan, and gtkdoc-scangobj
Installed Libraries: None
Installed Directories: /usr/share/{gtk-doc,help/*/gtk-doc-manual,sgml/gtk-doc}

Short Descriptions

gtkdoc*

these are all shell, Perl, or Python scripts used by package Makefile scripts to generate documentation for the package being built.

Last updated on 2017-02-15 14:01:44 -0800

Hd2u-1.0.3

Introduction to Hd2u

The hd2u package contains an any to any text format converter.

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

Package Information

Hd2u Dependencies

Required

popt-1.16

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/hd2u

Installation of Hd2u

Install hd2u by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: dos2unix
Installed Libraries: None
Installed Directories: None

Short Descriptions

dos2unix

converts text between various OS formats (such as converting from DOS format to Unix).

Last updated on 2017-02-15 12:04:59 -0800

ImageMagick-6.9.7-8

Introduction to ImageMagick-6 libraries

ImageMagick underwent many changes in its libraries between versions 6 and 7. Most packages in BLFS which use ImageMagick can use version 7, but for the others this page will install only the libraries, headers and general documentation (not programs, manpages, perl modules), and it will rename the unversioned pkgconfig files so that they do not overwrite the same-named files from version 7.

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

Package Information

Additional Downloads

Note

The ImageMagick source releases are updated frequently and the version shown above may no longer be available from the download locations. You can download a more recent version and use the existing BLFS instructions to install it. Chances are that it will work just fine, but this has not been tested by the BLFS team. If the package version shown above is not available from the locations shown above, or from the legacy/ directory at ftp.ImageMagick.org/pub/ImageMagick you can download it from the BLFS package server at Oregon State University: ftp://ftp.osuosl.org/pub/blfs/conglomeration/ImageMagick/.

ImageMagick-6 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. Many of the dependencies' capabilities and uses are described in the “MAGICK DELEGATES” section of the README.txt file located in the source tree. 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 http://www.imagemagick.org/script/advanced-unix-installation.php.

Optional System Utilities

Cups-2.2.2, cURL-7.52.1, FFmpeg-3.2.4, p7zip-16.02 (LZMA), SANE-1.0.25, Wget-1.19.1, xdg-utils-1.1.1, xterm-327, Dmalloc, Electric Fence, FFTW, PGP or GnuPG-2.1.18 (you'll have to do some hacking to use GnuPG), Profiles, and ufraw (for raw formats listed in http://www.imagemagick.org/www/formats.html)

Optional Graphics Libraries

JasPer-2.0.10, Little CMS-1.19 or Little CMS-2.8, libexif-0.6.21, libjpeg-turbo-1.5.1, libpng-1.6.28, librsvg-2.40.16, LibTIFF-4.0.7, libwebp-0.6.0, OpenJPEG-2.1.2, Pango-1.40.3, DjVuLibre, FlashPIX (libfpx), FLIF, JBIG-KIT, libgxps, libraqm, Liquid Rescale, OpenEXR, and RALCGM (or ralcgm)

Optional Graphics Utilities

Dejavu fonts, ghostscript-9.20, Gimp-2.8.20, Graphviz-2.38.0, Inkscape-0.92.0, Blender, corefonts, GhostPCL, Gnuplot, POV-Ray, and Radiance

Optional Conversion Tools

Enscript-1.6.6, texlive-20160523b (or install-tl-unx) AutoTrace, GeoExpress Command Line Utilities, AKA MrSID Utilities (binary package), hp2xx, html2ps, libwmf, UniConvertor, and Utah Raster Toolkit (or URT-3.1b)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/imagemagick

Installation of ImageMagick-6 libraries

Install ImageMagick by running the following commands:

patch -Np1 -i ../ImageMagick-6.9.7-8-libs_only-1.patch &&
./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --enable-hdri     \
            --with-modules    \
            --disable-static  &&
make

Now, as the root user:

make DOCUMENTATION_PATH=/usr/share/doc/imagemagick-6.9.7 install-libs-only

To test the installation, issue: make check. A more comprehensive test is the ImageMagick validation suite. If make check has not been executed, run make tests/validate to compile it. Issue tests/validate 2>&1 | tee validate.log to run the validation suite. The result summary may be obtained with grep "validation suite" validate.log. Note that the EPS, PS, and PDF tests require a working Ghostscript. One test in 'make check' needs “Helvetica” from “Ghostscript Standard Fonts”, which are optionally installed in ghostscript-9.20 - that test, and one other, might fail, but all the validation can still pass.

Command Explanations

patch -Np1 -i ../ImageMagick-6.9.7-imagemagick6_libs_only-1.patch: Move unversioned pkgconfig files to versioned names and provide an option to only install libraries and associated files.

--enable-hdri: Enables building of a high dynamic range version of ImageMagick.

--with-modules: Enables support for dynamically loadable modules.

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

--with-gslib: Enables support to use the Ghostscript shared library.

--with-rsvg: Enables support to use the librsvg library.

--with-autotrace: Enables support to use the Autotrace library.

--with-wmf: Enables support to use the libwmf library.

--with-gvc: Enables support to use GraphViz.

--with-windows-font-dir= <Some/Directory>: This option specifies the directory where the Windows CoreFonts are installed.

--with-dejavu-font-dir= <Some/Directory>: This option specifies the directory where the DejaVu fonts are installed.

The options and parameters listed above are the only ones you should have to pass to the configure script to activate all the delegate dependencies. All other dependencies will be automatically detected and utilized in the build if they are installed.

Contents

Installed Programs: None
Installed Libraries: libMagickCore-6.Q16HDRI.so, libMagickWand-6.Q16HDRI.so and libMagick++-6.Q16HDRI.so
Installed Directories: /etc/ImageMagick-6, /usr/include/ImageMagick-6, /usr/lib/ImageMagick-6.9.7, /usr/share/doc/ImageMagick-6.9.7, and /usr/share/ImageMagick-6

Short Descriptions

libMagickCore-6.Q16HDRI.so

provides the C API for ImageMagick.

libMagickWand-6.Q16HDRI.so

is the recommended C API for ImageMagick. Unlike the MagickCore API it uses only a few opaque types.

libMagick++-6.Q16HDRI.so

provides the C++ API for ImageMagick.

Last updated on 2017-02-17 19:16:56 -0800

ImageMagick-7.0.4-8

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-8.0 platform.

Package Information

Note

The ImageMagick source releases are updated frequently and the version shown above may no longer be available from the download locations. You can download a more recent version and use the existing BLFS instructions to install it. Chances are that it will work just fine, but this has not been tested by the BLFS team. If the package version shown above is not available from the locations shown above, or from the legacy/ directory at ftp.ImageMagick.org/pub/ImageMagick you can download it from the BLFS package server at Oregon State University: ftp://ftp.osuosl.org/pub/blfs/conglomeration/ImageMagick/.

ImageMagick Dependencies

Recommended

The optional dependencies listed below should be installed if you need support for the specific format or the conversion tool the dependency provides. Many of the dependencies' capabilities and uses are described in the “MAGICK DELEGATES” section of the README.txt file located in the source tree. 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 http://www.imagemagick.org/script/advanced-unix-installation.php.

Optional System Utilities

Cups-2.2.2, cURL-7.52.1, FFmpeg-3.2.4, p7zip-16.02 (LZMA), SANE-1.0.25, Wget-1.19.1, xdg-utils-1.1.1, xterm-327, Dmalloc, Electric Fence, FFTW, PGP or GnuPG-2.1.18 (you'll have to do some hacking to use GnuPG), Profiles, and ufraw (for raw formats listed in http://www.imagemagick.org/www/formats.html)

Optional Graphics Libraries

JasPer-2.0.10, Little CMS-1.19 or Little CMS-2.8, libexif-0.6.21, libjpeg-turbo-1.5.1, libpng-1.6.28, librsvg-2.40.16, LibTIFF-4.0.7, libwebp-0.6.0, OpenJPEG-2.1.2, Pango-1.40.3, DjVuLibre, FlashPIX (libfpx), FLIF, JBIG-KIT, libgxps, libraqm, Liquid Rescale, OpenEXR, and RALCGM (or ralcgm)

Optional Graphics Utilities

Dejavu fonts, ghostscript-9.20, Gimp-2.8.20, Graphviz-2.38.0, Inkscape-0.92.0, Blender, corefonts, GhostPCL, Gnuplot, POV-Ray, and Radiance

Optional Conversion Tools

Enscript-1.6.6, texlive-20160523b (or install-tl-unx) AutoTrace, GeoExpress Command Line Utilities, AKA MrSID Utilities (binary package), hp2xx, html2ps, libwmf, UniConvertor, and Utah Raster Toolkit (or URT-3.1b)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/imagemagick

Installation of ImageMagick

Install ImageMagick by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --enable-hdri     \
            --with-modules    \
            --with-perl       \
            --disable-static  &&
make

Now, as the root user:

make DOCUMENTATION_PATH=/usr/share/doc/imagemagick-7.0.4 install

To test the installation, issue: make check. A more comprehensive test is the ImageMagick validation suite. If make check has not been executed, run make tests/validate to compile it. Issue tests/validate 2>&1 | tee validate.log to run the validation suite. The result summary may be obtained with grep "validation suite" validate.log. Note that the EPS, PS, and PDF tests require a working Ghostscript. One test in 'make check' needs “Helvetica” from “Ghostscript Standard Fonts”, which are optionally installed in ghostscript-9.20 - that test, and one other, might fail, but all the validation can still pass.

Command Explanations

--enable-hdri: Enables building of a high dynamic range version of ImageMagick.

--with-modules: Enables support for dynamically loadable modules.

--with-perl: Enables building and installing of PerlMagick.

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

--with-gslib: Enables support to use the Ghostscript shared library.

--with-rsvg: Enables support to use the librsvg library.

--with-autotrace: Enables support to use the Autotrace library.

--with-wmf: Enables support to use the libwmf library.

--with-gvc: Enables support to use GraphViz.

--with-windows-font-dir= <Some/Directory>: This option specifies the directory where the Windows CoreFonts are installed.

--with-dejavu-font-dir= <Some/Directory>: This option specifies the directory where the DejaVu fonts are installed.

The options and parameters listed above are the only ones you should have to pass to the configure script to activate all the delegate dependencies. All other dependencies will be automatically detected and utilized in the build if they are installed.

Contents

Installed Programs: magick, Magick++-config, MagickCore-config, and MagickWand-config. (animate, compare, composite, conjure, convert, display, identify, import, magick-script, mogrify, montage, and stream are all symbolic links to magick)
Installed Libraries: libMagickCore-7.Q16HDRI.so, libMagickWand-7.Q16HDRI.so and libMagick++-7.Q16HDRI.so
Installed Directories: /etc/ImageMagick-7, /usr/include/ImageMagick-7, /usr/lib/ImageMagick-7.0.4, /usr/lib/perl5/site_perl/<5.x.y>/<arch-linux>/{,auto}/Image/Magick, /usr/share/doc/ImageMagick-7.0.4, 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{++,Core,Wand}-config

show information about the installed versions of the ImageMagick libraries.

mogrify

transforms an image.

montage

composites various images into a new image.

stream

streams one or more pixel components of an image or portion of the image to your choice of storage formats.

Image::Magick

allows the reading, manipulation and writing of a large number of image file formats using the ImageMagick library. Run make in the PerlMagick/demo directory of the package source tree after the package is installed to see a nice demo of the module's capabilities.

libMagickCore-7.Q16HDRI.so

provides the C API for ImageMagick.

libMagickWand-7.Q16HDRI.so

is the recommended C API for ImageMagick. Unlike the MagickCore API it uses only a few opaque types.

libMagick++-7.Q16HDRI.so

provides the C++ API for ImageMagick.

Last updated on 2017-02-17 19:16:56 -0800

ISO Codes-3.74

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-8.0 platform.

Package Information

ISO Codes Dependencies

Required

Python-3.6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/iso-codes

Installation of ISO Codes

Install ISO Codes by running the following commands:

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

To test the results, issue: make check.

Note

If you install ISO codes over a previous installed version, the install step will fail when creating some symlinks. In order to properly update them, run:

sed -i '/^LN_S/s/s/sfvn/' */Makefile

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/iso-codes, /usr/share/xml/iso-codes

Last updated on 2017-02-16 19:05:12 -0800

lsof-4.89

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-8.0 platform.

Package Information

lsof Dependencies

Required

libtirpc-1.0.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lsof

Installation of lsof

The contents of the lsof tarball include another tarball with the source code, which needs, in turn, to be unpacked. Install lsof by running the following commands:

tar -xf lsof_4.89_src.tar  &&
cd lsof_4.89_src           &&
./Configure -n linux       &&
make CFGL="-L./lib -ltirpc"

This package does not come with a working test suite.

Now, as the root user:

install -v -m0755 -o root -g root lsof /usr/bin &&
install -v lsof.8 /usr/share/man/man8

Command Explanations

./Configure -n linux: Avoid AFS, customization, and inventory checks, and use the linux dialect.

make CFGL="-L./lib -ltirpc": Add the libtirpc libraries location to the make command.

Contents

Installed Program: lsof
Installed Libraries: None
Installed Directories: None

Short Descriptions

lsof

lists open files for running processes.

Last updated on 2017-02-15 12:04:59 -0800

pinentry-1.0.0

Introduction to PIN-Entry

The PIN-Entry package contains a collection of simple PIN or pass-phrase entry dialogs which utilize the Assuan protocol as described by the Ägypten project. PIN-Entry programs are usually invoked by the gpg-agent daemon, but can be run from the command line as well. There are programs for various text-based and GUI environments, including interfaces designed for Ncurses (text-based), and for the common GTK and Qt toolkits.

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

Package Information

PIN-Entry Dependencies

Required

Libassuan-2.4.3 and libgpg-error-1.26

Optional

Emacs-25.1, Gcr-3.20.0, GTK+-2.24.31, GTK+-3.22.8, libsecret-0.18.5, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pinentry

Installation of PIN-Entry

Install PIN-Entry 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-emacs=yes/no: Default is no.

--enable-pinentry-qt=yes/no: Default is yes.

--enable-pinentry-gtk2=yes/no: Default is yes. Even if other pinentry-* is installed, pinentry will be a symlink to pinentry-gtk-2.

--enable-pinentry-gnome3=yes/no: Default is yes. Actually, it is the gtk3 pinentry.

Contents

Installed Programs: pinentry (symlink), pinentry-curses, pinentry-emacs, pinentry-gnome3, pinentry-gtk-2, pinentry-qt, and pinentry-tty
Installed Libraries: None
Installed Directory: None

Short Descriptions

pinentry

is a symbolic link to the default PIN-Entry program.

pinentry-curses

is an Ncurses text-based PIN-Entry helper program.

pinentry-emacs

is an Emacs version of the PIN-Entry helper program.

pinentry-gnome3

is a GNOME-3 PIN-Entry helper program.

pinentry-gtk-2

is a GTK+2 PIN-Entry program program.

pinentry-qt

is a Qt4 or 5 PIN-Entry helper program.

pinentry-tty

is a tty PIN-Entry helper program.

Last updated on 2017-02-19 11:02:29 -0800

Rarian-0.8.1

Introduction to Rarian

The Rarian package is a documentation metadata library based on the proposed Freedesktop.org spec. Rarian is designed to be a replacement for ScrollKeeper.

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

Package Information

Rarian Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rarian

Installation of Rarian

Install Rarian by running the following commands:

./configure --prefix=/usr        \
            --disable-static     \
            --localstatedir=/var &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: rarian-example, rarian-sk-config, rarian-sk-extract, rarian-sk-gen-uuid, rarian-sk-get-cl, rarian-sk-get-content-list, rarian-sk-get-extended-content-list, rarian-sk-get-scripts, rarian-sk-install, rarian-sk-migrate, rarian-sk-preinstall, rarian-sk-rebuild, and rarian-sk-update
Installed Library: librarian.so
Installed Directories: /usr/include/rarian, /usr/share/help, /usr/share/librarian/manual, /usr/share/librarian/Templates/C, and /var/lib/rarian

Short Descriptions

rarian-example

prints a nice list of all available documents found by the library.

rarian-sk-config

emulates scrollkeeper-config.

rarian-sk-extract

is a wrapper around xsltproc to mimic scrollkeeper-extract.

rarian-sk-gen-uuid

generates a unique (random) uuid.

rarian-sk-get-cl

gets a content list (category tree).

rarian-sk-get-content-list

is a simple wrapper to make calling scrollkeeper-get-cl easier.

rarian-sk-get-extended-content-list

is a simple wrapper to make calling scrollkeeper-get-cl (extended) easier.

rarian-sk-get-scripts

emulates scrollkeeper-get-index-from-index-from-docpath, scrollkeeper-get-toc-from-docpath, and scrollkeeper-get-toc-from-id.

rarian-sk-install

emulates scrollkeeper-install and scrollkeeper-uninstall.

rarian-sk-migrate

takes in a directory full of omf's, reads and parses them and spews out an equivalent scroll file.

rarian-sk-preinstall

creates the omf file by reading an existing omf file and replacing the url for a resource with the url.

rarian-sk-rebuild

is a simple wrapper script to emulate scrollkeeper-rebuilddb.

rarian-sk-update

is compatible with the scrollkeeper-update script that's required to be run when installing new omf files. It converts the omf files into new-style scrolls.

librarian.{so,a}

is the API to build a list of available meta data files and allows access to these.

Last updated on 2017-02-21 13:10:36 -0800

Rep-gtk-0.90.8.3

Introduction to Rep-gtk

The rep-gtk package contains a Lisp and GTK binding. This is useful for extending GTK-2 and GDK libraries with Lisp. Starting at rep-gtk-0.15, the package contains the bindings to GTK and uses the same instructions. Both can be installed, if needed.

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

Package Information

Rep-gtk Dependencies

Required

GTK+-2.24.31 and librep-0.92.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rep-gtk

Installation of Rep-gtk

Install rep-gtk by running the following commands:

./autogen.sh --prefix=/usr &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: Lisp bindings
Installed Directory: /usr/include/rep-gtk and /usr/lib/rep/gui

Short Descriptions

Lisp bindings

are libraries stored in /usr/lib/rep/gui/ that assist communication between Lisp and the GTK libraries.

Last updated on 2017-02-16 16:10:58 -0800

Screen-4.4.0

Introduction to Screen

Screen is a terminal multiplexor that runs several separate processes, typically interactive shells, on a single physical character-based terminal. Each virtual terminal emulates a DEC VT100 plus several ANSI X3.64 and ISO 2022 functions and also provides configurable input and output translation, serial port support, configurable logging, multi-user support, and many character encodings, including UTF-8. Screen sessions can be detached and resumed later on a different terminal.

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

Package Information

Screen Dependencies

Optional

Linux-PAM-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/screen

Installation of Screen

Install Screen by running the following commands:

./configure --prefix=/usr                     \
            --infodir=/usr/share/info         \
            --mandir=/usr/share/man           \
            --with-socket-dir=/run/screen     \
            --with-pty-group=5                \
            --with-sys-screenrc=/etc/screenrc &&

sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/* &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -m 644 etc/etcscreenrc /etc/screenrc

Command Explanations

--with-socket-dir=/run/screen: This option places the per-user sockets in a standard location.

--with-sys-screenrc=/etc/screenrc: This option places the global screenrc file in /etc.

--with-pty-group=5: This option sets the gid to the value used by LFS.

Note

Older versions of LFS use the value 4 for the tty group. If you are using LFS version 7.1 or older, change the pty-group option to 4.

sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/*: This command corrects the configuration and documentation files to the location that is used here for the global screenrc file.

Configuring Screen

Config Files

/etc/screenrc and ~/.screenrc

Configuration Information

You may want to look at the example configuration file that was installed and customize it for your needs.

Contents

Installed Program: screen (symlink) and screen-4.4.0
Installed Libraries: None
Installed Directory: /usr/share/screen and /run/screen

Short Descriptions

screen

is a terminal multiplexor with VT100/ANSI terminal emulation.

Last updated on 2017-02-14 13:20:57 -0800

shared-mime-info-1.8

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-8.0 platform.

Package Information

Shared Mime Info Dependencies

Required

GLib-2.50.3 and libxml2-2.9.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/shared-mime-info

Installation of Shared Mime Info

Note

If your processor is not a very recent Intel, you may need to use make -j1 for this package.

Install Shared Mime Info 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: update-mime-database
Installed Library: None
Installed Directory: /usr/share/mime

Short Descriptions

update-mime-database

assists in adding MIME data to the database.

Last updated on 2017-02-15 16:04:09 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sharutils

Installation of Sharutils

Install Sharutils 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: shar, unshar, uudecode and uuencode
Installed Libraries: None
Installed Directories: None

Short Descriptions

shar

creates "shell archives" (or shar files) which are in text format and can be mailed.

unshar

unpacks a shar file.

uudecode

reads a file (or by default the standard input) and writes an encoded version to the standard output. The encoding uses only printing ASCII characters.

uuencode

reads a file (or by default the standard input) and decodes the uuencoded version to the standard output.

Last updated on 2017-02-15 12:04:59 -0800

tidy-html5-5.2.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-8.0 platform.

Package Information

Note

The Tidy HTML5 source tarball shown above downloads with the correct name, tidy-html5-5.2.0.tar.gz, if using a browser such as Firefox. If you prefer to use a command line program such as wget, you normally would obtain 5.2.0.tar.gz. To obtain this package with the proper filename, run:

wget -c https://github.com/htacg/tidy-html5/archive/5.2.0.tar.gz \
     -O tidy-html5-5.2.0.tar.gz

Tidy HTML5 Dependencies

Required

CMake-3.7.2

Recommended
Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tidy

Installation of Tidy HTML5

Install Tidy HTML5 by running the following commands:

cd build/cmake &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      -DBUILD_TAB2SPACE=ON        \
      ../..    &&

make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m755 tab2space /usr/bin

If you wish to install the API documentation you must have Doxygen-1.8.13 installed, then change directories into the documentation directory of the source tree and issue the command doxygen doxygen.cfg. Then as the root user copy the documentation/temp/tidylib_api directory to /usr/share/doc/tidy-5.2.0.

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to build the release library without any debug `assert` in the code.

-DBUILD_TAB2SPACE=ON: This switch is used to enable building the tab2space utility.

Configuring Tidy HTML5

Config Files

The absolute path of the file specified in $HTML_TIDY.

Configuration Information

The default configuration options can be set in the file defined in $HTML_TIDY. Additional configuration options can be passed to tidy via command line parameters or the -config <file> parameter.

Contents

Installed Programs: tab2space and tidy
Installed Library: libtidy.so and libtidys.a
Installed Directory: /usr/share/doc/tidy-5.2.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 and libtidys.a

library provides the Tidy HTML5 API functions to tidy and can also be called by other programs.

Last updated on 2017-02-14 19:04:01 -0800

Time-1.7

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 reuired by the LSB.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/time

Installation of Time

Install Time by running the following commands:

sed -i 's/$(ACLOCAL)//' Makefile.in                                            &&
sed -i 's/lu", ptok ((UL) resp->ru.ru_maxrss)/ld", resp->ru.ru_maxrss/' time.c &&

./configure --prefix=/usr --infodir=/usr/share/info                            &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: time

Short Descriptions

time

reports various statistics about an executed command.

Last updated on 2017-02-15 12:04:59 -0800

tree-1.7.0

Introduction to tree

The tree application, as the name suggests, is useful to display, in a terminal, directory contents, including directories, files, links.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tree

Installation of tree

Install tree by running the following commands:

make

This package does not come with a test suite.

Now, as the root user:

make MANDIR=/usr/share/man/man1 install &&
chmod -v 644 /usr/share/man/man1/tree.1

Contents

Installed Program: tree
Installed Libraries: None
Installed Directories: None

Short Descriptions

tree

displays a directory tree in a terminal.

Last updated on 2017-02-15 12:04:59 -0800

unixODBC-2.3.4

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-8.0 platform.

Package Information

unixODBC Dependencies

Optional

Mini SQL and Pth-2.0.7

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/unixodbc

Installation of unixODBC

Install unixODBC by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc/unixODBC &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&

find doc -name "Makefile*" -delete                &&
chmod 644 doc/{lst,ProgrammerManual/Tutorial}/*   &&

install -v -m755 -d /usr/share/doc/unixODBC-2.3.4 &&
cp      -v -R doc/* /usr/share/doc/unixODBC-2.3.4

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.4, 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.4

Short Descriptions

dltest

is a utility used to check a share library to see if it can be loaded and if a given symbol exists in it.

isql

is a utility which can be used to submit SQL to a data source and to format/output results. It can be used in batch or interactive mode.

iusql

provides the same functionality as the isql program.

odbc_config

is used to find out details about the installation of the unixODBC package.

odbcinst

is a utility created for install script/RPM writers. It is a command line interface to key functionality in the libodbcinst library. It does not copy any files (i.e., libraries) but it will modify the ODBC System Information for the user.

slencheck

is a utility which attempts to check whether an ODBC driver was built with 32-bit or 64-bit SQLLEN types.

Last updated on 2017-02-14 23:25:58 -0800

Xdg-user-dirs-0.15

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xdg-user-dirs

Installation of Xdg-user-dirs

Install xdg-user-dirs by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program(s): xdg-user-dir and xdg-user-dirs-update.
Installed Librar(y,ies): None.
Installed Director(y,ies): None.

Short Descriptions

xdg-user-dir

looks up the current path for one of the XDG user directories.

xdg-user-dirs-update

creates localized versions of the user directories.

Last updated on 2017-02-21 12:13:57 -0800

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.

acpid-2.0.28

Introduction to acpid

The acpid (Advanced Configuration and Power Interface event daemon) is a completely flexible, totally extensible daemon for delivering ACPI events. It listens on netlink interface and when an event occurs, executes programs to handle the event. The programs it executes are configured through a set of configuration files, which can be dropped into place by packages or by the user.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/acpid

Installation of acpid

Install acpid by running the following commands:

./configure --prefix=/usr \
            --docdir=/usr/share/doc/acpid-2.0.28 &&
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.28

Configuring acpid

acpid is configured by user defined events. Place event files under /etc/acpi/events directory. If an event occurs, acpid recurses through the event files in order to see if the regex defined after "event" matches. If they do, action is executed.

The following brief example will suspend the system when the laptop lid is closed (it requires pm-utils-1.4.1):

cat > /etc/acpi/events/lid << "EOF"
event=button/lid
action=/etc/acpi/lid.sh
EOF

cat > /etc/acpi/lid.sh << "EOF"
#!/bin/sh
/bin/grep -q open /proc/acpi/button/lid/LID/state && exit 0
/usr/sbin/pm-suspend
EOF
chmod +x /etc/acpi/lid.sh

Unfortunately, not every computer labels ACPI events in the same way. To determine how your buttons are recognized, use the acpi_listen tool. Also, look in package documentation's samples directory 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-20170225 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.28

Short Descriptions

acpid

is a program that listens for ACPI events and executes the rules that match the received event.

acpi_listen

is a simple tool which connects to acpid and listens for events.

kacpimon

is a monitor program that connects to three sources of ACPI events (events file, netlink and input layer) and then reports on what it sees while it is connected.

Last updated on 2017-02-14 23:25:58 -0800

at-3.1.20

Introduction to at

The at package provide delayed job execution and batch processing. It is required for Linux Standards Base (LSB) conformance.

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

Package Information

at Dependencies

Required

An MTA

Optional

Linux-PAM-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/at

Installation of at

Before building at, as the root user you should create the group and user atd which will run the atd daemon. Also ensure the working directory for the daemon exists:

groupadd -g 17 atd                                                  &&
useradd -d /dev/null -c "atd daemon" -g atd -s /bin/false -u 17 atd &&
mkdir -p /var/spool/cron

Fix Makefile.in so that the documentation directory is installed in the specified docdir:

sed -i '/docdir/s/=.*/= @docdir@/' Makefile.in

Regenerate the build files to be consistent with this package version:

autoreconf

Install at with the following commands:

./configure --with-daemon_username=atd        \
            --with-daemon_groupname=atd       \
            SENDMAIL=/usr/sbin/sendmail       &&

make -j1

This package does not come with a test suite.

Now, as the root user:

make install \
        docdir=/usr/share/doc/at-3.1.20 \
      atdocdir=/usr/share/doc/at-3.1.20 

Configuring at

Config Files

/etc/at.allow and /etc/at.deny determines who can submit jobs via at or batch.

Boot Script

Install the /etc/init.d/atd init script from the blfs-bootscripts-20170225 package.

make install-atd

Contents

Installed Programs: at, atd, atq (symlink), atrm (symlink), atrun, and batch
Installed Libraries: None
Installed Directories: /var/spool/cron/at{jobs,spool} and /usr/share/doc/at-3.1.20

Short Descriptions

at

queues, examines or deletes jobs for later execution.

atd

is the daemon that runs jobs queued for later execution.

atq

lists the user's pending jobs, or all jobs, if superuser.

atrm

deletes jobs, identified by their job number.

atrun

runs jobs queued for later execution.

batch

is a script that executes commands when system load levels permit.

Last updated on 2017-02-18 14:36:22 -0800

autofs-5.1.2

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-8.0 platform.

Package Information

Autofs Dependencies

Optional

libtirpc-1.0.1, nfs-utils-2.1.1, libxml2-2.9.4, MIT Kerberos V5-1.15, OpenLDAP-2.4.44 (client only), and Cyrus SASL-2.1.26

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/autofs

Kernel Configuration

Verify that automounter kernel support has been enabled:

File systems --->
  <*/M> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]

Optionally, enable the following options in the kernel configuration:

File systems  --->
  [*] Network File Systems  --->                                      [CONFIG_NETWORK_FILESYSTEMS]
    <*/M> NFS client support                                          [CONFIG_NFS_FS]
    <*/M> CIFS support (advanced network filesystem, SMBFS successor) [CONFIG_CIFS]

Recompile and install the new kernel, if necessary.

Installation of Autofs

Install Autofs by running the following commands:

./configure --prefix=/         \
            --without-openldap \
            --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--with-libtirpc: This switch enables libtirpc support if available.

Configuring Autofs

Config Files

/etc/sysconfig/autofs.conf, /etc/auto.master, /etc/auto.misc, and /etc/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/auto.master /etc/auto.master.bak &&
cat > /etc/auto.master << "EOF"
# Begin /etc/auto.master

/media/auto  /etc/auto.misc  --ghost
#/home        /etc/auto.home

# End /etc/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/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.

Install the /etc/init.d/autofs mount script included with the blfs-bootscripts-20170225 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: lookup_dir.so, lookup_file.so, lookup_files.so, lookup_hosts.so, lookup_ldap.so, lookup_multi.so, lookup_nis.so, lookup_nisplus.so, lookup_program.so, lookup_userhome.so, lookup_yp.so, mount_afs.so, mount_autofs.so, mount_bind.so, mount_changer.so, mount_ext2.so, mount_ext3.so, mount_ext4.so, mount_generic.so, mount_nfs.so, mount_nfs4.so, parse_amd.so, and parse_sun.so
Installed Directories: /lib/autofs

Short Descriptions

automount

is the daemon that performs the mounting when a request is made for the device.

Last updated on 2017-02-22 11:24:59 -0800

BlueZ-5.43

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-8.0 platform.

Package Information

Additional Downloads

BlueZ Dependencies

Required

dbus-1.10.14, GLib-2.50.3, and libical-2.0.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/bluez

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

[*] Networking support --->                [CONFIG_NET]
  </M> Bluetooth subsystem support --->    [CONFIG_BT]
    <*/M> RFCOMM protocol support          [CONFIG_BT_RFCOMM]
    [*]   RFCOMM TTY support               [CONFIG_BT_RFCOMM_TTY]
    <*/M> BNEP protocol support            [CONFIG_BT_BNEP]
    [*]   Multicast filter support         [CONFIG_BT_BNEP_MC_FILTER]
    [*]   Protocol filter support          [CONFIG_BT_BNEP_PROTO_FILTER]
    <*/M> HIDP protocol support            [CONFIG_BT_HIDP]
        Bluetooth device drivers --->
          (Select the appropriate drivers for your Bluetooth hardware)

  <*/M> RF switch subsystem support --->   [CONFIG_RFKILL]

Installation of BlueZ

If you are going to use BlueZ with gnome-bluetooth and/or kde bluedevil, apply the following patch:

patch -Np1 -i ../bluez-5.43-obexd_without_systemd-1.patch

Install BlueZ by running the following commands:

./configure --prefix=/usr         \
            --sysconfdir=/etc     \
            --localstatedir=/var  \
            --enable-library      \
            --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.43 &&
install -v -m644 doc/*.txt /usr/share/doc/bluez-5.43

Command Explanations

--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-20170225 package.

make install-bluetooth

Contents

Installed Programs: bccmd, bluemoon, bluetoothctl, bluetoothd (symlink), btmon, ciptool, hciattach, hciconfig, hcidump, hcitool, hex2hcd, l2ping, l2test, mpris-proxy, rctest, rfcomm, and sdptool
Installed Library: libbluetooth.so
Installed Directories: /etc/bluetooth, /usr/{include,libexec}/bluetooth, and /usr/share/doc/bluez-5.43

Short Descriptions

bccmd

is used to issue BlueCore commands to Cambridge Silicon Radio devices.

bluemoon

is a Bluemoon configuration utility.

bluetoothctl

is the interactive Bluetooth control program.

bluetoothd

is the Bluetooth daemon.

btmon

provides access to the Bluetooth subsystem monitor infrastructure for reading HCI traces.

ciptool

is used to set up, maintain, and inspect the CIP configuration of the Bluetooth subsystem in the Linux kernel.

hciattach

is used to attach a serial UART to the Bluetooth stack as HCI transport interface.

hciconfig

is used to configure Bluetooth devices.

hcidump

reads raw HCI data coming from and going to a Bluetooth device and prints to screen commands, events and data in a human-readable form.

hcitool

is used to configure Bluetooth connections and send some special command to Bluetooth devices.

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 L2CAP testing program.

rctest

is used to test RFCOMM communications on the Bluetooth stack.

rfcomm

is used to set up, maintain, and inspect the RFCOMM configuration of the Bluetooth subsystem in the Linux kernel.

sdptool

is used to perform SDP queries on Bluetooth devices.

libbluetooth.so

contains the BlueZ 4 API functions.

Last updated on 2017-02-18 16:02:40 -0800

Colord-1.2.12

Introduction to Colord

Colord is a system activated daemon that maps devices to color profiles. It is used by GNOME Color Manager for system integration and use when there are no users logged in.

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

Package Information

Colord Dependencies

Required

dbus-1.10.14, GLib-2.50.3, Little CMS-2.8, and SQLite-3.17.0

Required (for the tests)

Valgrind-3.12.0

Recommended
Optional

DocBook-utils-0.6.14, gnome-desktop-3.22.2 and colord-gtk-0.1.26 (to build the example tools), GTK-Doc-1.25, libxslt-1.1.29, SANE-1.0.25, ArgllCMS, and Bash Completion,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/colord

Installation of Colord

There should be a dedicated user and group to take control of the colord daemon after it is 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:

./configure --prefix=/usr                \
            --sysconfdir=/etc            \
            --localstatedir=/var         \
            --with-daemon-user=colord    \
            --enable-vala                \
            --enable-systemd-login=no    \
            --disable-argyllcms-sensor   \
            --disable-bash-completion    \
            --disable-static             \
            --with-systemdsystemunitdir=no &&
make

Now, as the root user:

make install

To test the results, issue: make -k check. For unknown reasons, some tests may fail. Note that the system-wide D-Bus daemon must be running or the tests will fail.

Command Explanations

--with-daemon-user=colord: This switch is used so the colord daemon will run as an unprivileged user instead of root user.

--enable-vala: This switch enables building of the Vala bindings. Remove if you don't have Vala-0.34.4 installed.

--enable-systemd-login=no: This parameter fixes building without systemd, which is not part of LFS/BLFS. If you use systemd, replace "no" by "yes".

--disable-argyllcms-sensor: Disables ArgllCMS sensor driver.

--disable-bash-completion: This switch disables Bash Completion support for Colord apps.

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

--with-systemdsystemunitdir=no: Disables attempting to build with systemd libraries.

--enable-gtk-doc: Use this switch if GTK-Doc is installed and you wish to build and install the API documentation.

--disable-gusb: Use this switch if you don't have libgusb installed.

--disable-udev: Use this switch if you don't have GUdev installed.

--disable-polkit: Use this switch if you don't have Polkit installed.

Contents

Installed Programs: cd-create-profile, cd-fix-profile, cd-iccdump, cd-it8, and colormgr
Installed Libraries: libcolord.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 a 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 a 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.

Last updated on 2017-02-16 19:24:14 -0800

cpio-2.12

Introduction to cpio

The cpio package contains tools for archiving.

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

Package Information

CPIO Dependencies

Optional

texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cpio

Installation of cpio

Install cpio by running the following commands:

./configure --prefix=/usr \
            --bindir=/bin \
            --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-20160523b 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.12/html &&
install -v -m644    doc/html/* \
                    /usr/share/doc/cpio-2.12/html &&
install -v -m644    doc/cpio.{html,txt} \
                    /usr/share/doc/cpio-2.12

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

Command Explanations

--bindir=/bin: This parameter installs cpio to /bin instead of /usr/bin as recommended by the FHS guidelines.

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

Short Descriptions

cpio

copies files to and from archives.

mt

controls magnetic tape drive operations.

Last updated on 2017-02-15 12:04:59 -0800

dbus-1.10.14

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-8.0 platform.

Package Information

D-Bus Dependencies

Recommended
Optional

For the tests: dbus-glib-0.108, D-Bus Python-1.2.4, PyGObject-2.28.6, and Valgrind-3.12.0; for documentation: Doxygen-1.8.13, xmlto-0.0.28, Ducktype, and Yelp Tools

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dbus

Installation of D-Bus

If they do not already exist, as the root user, create a system user and group to handle the system message bus activity:

groupadd -g 18 messagebus &&
useradd -c "D-Bus Message Daemon User" -d /var/run/dbus \
        -u 18 -g messagebus -s /bin/false messagebus

Install D-Bus by running the following commands (you may wish to review the output from ./configure --help first and add any desired parameters to the configure command shown below):

./configure --prefix=/usr                  \
            --sysconfdir=/etc              \
            --localstatedir=/var           \
            --disable-doxygen-docs         \
            --disable-xml-docs             \
            --disable-static               \
            --disable-systemd              \
            --without-systemdsystemunitdir \
            --with-console-auth-dir=/run/console/ \
            --docdir=/usr/share/doc/dbus-1.10.14   &&
make

See below for test instructions.

Now, as the root user:

make install

If you are using a DESTDIR install, dbus-daemon-launch-helper needs to be fixed afterwards. Issue, as root user:

chown -v root:messagebus /usr/libexec/dbus-daemon-launch-helper &&
chmod -v      4750       /usr/libexec/dbus-daemon-launch-helper

If you are still building your system in chroot or you did not start the daemon yet, but you want to compile some packages that require D-Bus, generate D-Bus UUID to avoid warnings when compiling some packages with the following command as the root user:

dbus-uuidgen --ensure

The dbus tests cannot be run until after dbus-glib-0.108 has been installed. They must be run as an unprivileged user from a local session with bus address. Tests fail through ssh. If you want to run only the unit tests, replace, below, --enable-tests by --enable-embedded-tests, otherwise, D-Bus Python-1.2.4 has to be installed, before. The tests require passing additional parameters to configure and exposing additional functionality in the binaries. These interfaces are not intended to be used in a production build of D-Bus. If you would like to run the tests, issue the following commands (for the tests, you don't need to build the docs):

make distclean                     &&
./configure --enable-tests         \
            --enable-asserts       \
            --disable-doxygen-docs \
            --disable-xml-docs     &&
make                               &&
make check

The “estimated disk space required” reported above is obtained in a build using the switches disabling documents generation. This and the use of the make distclean command implies that the build directory size is smaller than the one for a full build with documents generated. There is one error, for unknown reasons.

There has been a report that the tests may fail if running inside a Midnight Commander shell. You may get out-of-memory error messages when running the tests. These are normal and can be safely ignored.

Command Explanations

--disable-doxygen-docs: This switch disables doxygen documentation build and install, if you have doxygen installed. If doxygen is installed, and you wish to build them, remove this parameter.

--disable-xml-docs: This switch disables html documentation build and install, if you have xmlto installed. If xmlto is installed, and you wish to build them, remove this parameter.

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

--disable-systemd: This switch disables systemd support in D-Bus.

--without-systemdsystemunitdir: This switch prevents installation of systemd unit files.

--with-console-auth-dir=/run/console/: This parameter specifies location of the ConsoleKit auth dir.

--enable-tests: Build extra parts of the code to support all tests. Configure will end with a NOTE warning about increased size of libraries and decreased security.

--enable-embedded-tests: Build extra parts of the code to support only unit tests. Configure will end with a NOTE warning about increased size of libraries and decreased security.

--enable-asserts: Enable debugging code to run assertions for statements normally assumed to be true. This prevents a warning that '--enable-tests' on its own is only useful for profiling and might not give true results for all tests, but adds its own NOTE that this should not be used in a production build.

Configuring D-Bus

Config Files

/etc/dbus-1/session.conf, /etc/dbus-1/system.conf and /etc/dbus-1/system.d/*

Configuration Information

The configuration files listed above should probably not be modified. If changes are required, you should create /etc/dbus-1/session-local.conf and/or /etc/dbus-1/system-local.conf and make any desired changes to these files.

If any packages install a D-Bus .service file outside of the standard /usr/share/dbus-1/services directory, that directory should be added to the local session configuration. For instance, /usr/local/share/dbus-1/services can be added by performing the following commands as the root user:

cat > /etc/dbus-1/session-local.conf << "EOF"
<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- Search for .service files in /usr/local -->
  <servicedir>/usr/local/share/dbus-1/services</servicedir>

</busconfig>
EOF

D-Bus Session Daemon

To automatically start dbus-daemon when the system is rebooted, install the /etc/rc.d/init.d/dbus bootscript from the blfs-bootscripts-20170225 package.

make install-dbus

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 xdm or some other display manager that calls the ~/.xsession file, you can add dbus-launch to the line in your ~/.xsession file that starts your graphical desktop environment. The syntax would be similar to the example in the ~/.xinitrc file.

  • The examples shown previously use dbus-launch to specify a program to be run. This has the benefit (when also using the --exit-with-session parameter) of stopping the session daemon when the specified program is stopped. You can also start the session daemon in your system or personal startup scripts by adding the following lines:

    # Start the D-Bus session daemon
    eval `dbus-launch`
    export DBUS_SESSION_BUS_ADDRESS
    

    This method will not stop the session daemon when you exit your shell, therefore you should add the following line to your ~/.bash_logout file:

    # Kill the D-Bus session daemon
    kill $DBUS_SESSION_BUS_PID
    
  • A hint has been written that provides ways to start scripts using the KDM session manager of KDE. The concepts in this hint could possibly be used with other session managers as well. The hint is located at http://www.linuxfromscratch.org/hints/downloads/files/execute-session-scripts-using-kdm.txt.

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/share/dbus-1, /usr/share/doc/dbus-1.10.14, 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

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

Last updated on 2017-02-22 06:22:59 -0800

Fcron-3.2.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-8.0 platform.

Package Information

Fcron Dependencies

Optional

An MTA, text editor (default is vi from the Vim-8.0.069 package), Linux-PAM-1.3.0, and DocBook-utils-0.6.14

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fcron

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

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.

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.

Boot Script

Install the /etc/rc.d/init.d/fcron init script from the blfs-bootscripts-20170225 package.

make install-fcron

Contents

Installed Programs: fcron, fcrondyn, fcronsighup, and fcrontab
Installed Libraries: None
Installed Directories: /usr/share/doc/fcron-3.2.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.

Last updated on 2017-02-14 23:25:58 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/GPM

Installation of GPM

Install GPM by running the following commands:

sed -i -e 's:<gpm.h>:"headers/gpm.h":' src/prog/{display-buttons,display-coords,get-versions}.c &&
./autogen.sh                                &&
./configure --prefix=/usr --sysconfdir=/etc &&
make

This package does not come with a test suite.

Now, as the root user:

make install                                          &&

install-info --dir-file=/usr/share/info/dir           \
             /usr/share/info/gpm.info                 &&

ln -sfv libgpm.so.2.1.0 /usr/lib/libgpm.so            &&
install -v -m644 conf/gpm-root.conf /etc              &&

install -v -m755 -d /usr/share/doc/gpm-1.20.7/support &&
install -v -m644    doc/support/*                     \
                    /usr/share/doc/gpm-1.20.7/support &&
install -v -m644    doc/{FAQ,HACK_GPM,README*}        \
                    /usr/share/doc/gpm-1.20.7

Command Explanations

./autogen.sh: This command creates the missing configure script.

install-info ...: This package installs an .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-20170225 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.a}
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.a}

contains the API functions to access the GPM daemon.

Last updated on 2017-02-14 23:25:58 -0800

Hdparm-9.51

Introduction to Hdparm

The Hdparm package contains a utility that is useful for controlling ATA/IDE controllers and hard drives both to increase performance and sometimes to increase stability.

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

Warning

As well as being useful, incorrect usage of Hdparm can destroy your information and in rare cases, drives. Use with caution and make sure you know what you are doing. If in doubt, it is recommended that you leave the default kernel parameters alone.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/hdparm

Installation of Hdparm

Build Hdparm by running the following command:

make

This package does not come with a test suite.

Now, as the root user:

make install

Note

Note that by default, hdparm is installed in /sbin as some systems may require it during the boot process before /usr is mounted. If you wish to install hdparm under the /usr hierarchy, then replace the above command with the following:

make binprefix=/usr install

Contents

Installed Program: hdparm
Installed Libraries: None
Installed Directories: None

Short Descriptions

hdparm

provides a command-line interface to various hard disk ioctls supported by the stock Linux ATA/IDE device driver subsystem.

Last updated on 2017-02-14 23:25:58 -0800

Initd-tools-0.1.3

Introduction to initd-tools

The initd-tools package contains programs to install and remove LSB based bootscripts.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/initd_tools

Installation of initd-tools

Install initd-tools by running the following commands:

./configure --prefix=/ --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: install_initd and remove_initd
Installed Libraries:
Installed Directories: /usr/lib/lsb

Short Descriptions

install_initd

installs a boot script and the necessary symbolic links using LSB methodology.

remove_initd

removes a boot script and the necessary symbolic links using LSB methodology.

Last updated on 2017-02-22 11:24:59 -0800

lm_sensors-3.4.0

Introduction to lm_sensors

The lm_sensors package provides user-space support for the hardware monitoring drivers in the Linux kernel. This is useful for monitoring the temperature of the CPU and adjusting the performance of some hardware (such as cooling fans).

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

Package Information

lm_sensors Dependencies

Required

Which-2.21

Optional

RRDtool (required to build the sensord program)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lm_sensors

Kernel Configuration

Getting your kernel config right is an iterative process that may require that you recompile your kernel a couple of times. The simplest way to go about it is to start by enabling modules and then compile everything that may be needed by Lm Sensors as a module:

[*] Enable loadable module support  --->  [CONFIG_MODULES]

Bus options (PCI etc.)  --->
  [*] PCI support                         [CONFIG_PCI]

Device Drivers  --->
  I2C support --->
    <*/M> I2C device interface            [CONFIG_I2C_CHARDEV]
    I2C Hardware Bus support  --->
      <M> (configure all of them as modules)
  <*/M> Hardware Monitoring support  ---> [CONFIG_HWMON]
    <M> (configure all of them as modules)

Recompile your kernel and reboot into the new kernel. Don't forget to make modules_install We will come back to the kernel in the Configuring section below.

Installation of lm_sensors

Install lm_sensors by running the following commands:

make PREFIX=/usr        \
     BUILD_STATIC_LIB=0 \
     MANDIR=/usr/share/man

This package does not come with a test suite.

Now, as the root user:

make PREFIX=/usr        \
     BUILD_STATIC_LIB=0 \
     MANDIR=/usr/share/man install &&

install -v -m755 -d /usr/share/doc/lm_sensors-3.4.0 &&
cp -rv              README INSTALL doc/* \
                    /usr/share/doc/lm_sensors-3.4.0

Command Explanations

BUILD_STATIC_LIB=0: This parameter disables compiling and installing the static version of libsensors.

PROG_EXTRA=sensord: This parameter enables compiling sensord, a daemon that can monitor your system at regular intervals. Compiling sensord requires RRDtool. Compiling RRDtool 1.4.6 requires a sed: sed -i '/ sv_undef/d' bindings/perl-shared/RRDs.xs.

Configuring Lm Sensors

Config File

/etc/sensors3.conf

Configuration Information

To find out what hardware sensors your system has, issue the following command as the root user:

sensors-detect

The appropriate modules should have been loaded and a summary is displayed at the end. Now you know what is needed and you can recompile your kernel to enable just the options you need (i.e., don't enable the modules you cannot use).

Contents

Installed Programs: fancontrol, isadump, isaset, pwmconfig, sensors, sensors-conf-convert, sensors-detect, and optionally, sensord
Installed Library: libsensors.so
Installed Directories: /etc/sensors.d, /usr/include/sensors and /usr/share/doc/lm_sensors-3.4.0

Short Descriptions

fancontrol

is a shell script for use with lm_sensors. It reads its configuration from a file, then calculates fan speeds from temperatures and sets the corresponding PWM outputs to the computed values.

isadump

is a small helper program to examine registers visible through the ISA bus. It is intended to probe any chip that lives on the ISA bus working with an address register and a data register (I2C-like access) or a flat range (of up to 256 bytes).

isaset

is a small helper program to set registers visible through the ISA bus.

pwmconfig

tests the pulse width modulation (PWM) outputs of sensors and configures fancontrol.

sensors

prints the current readings of all sensor chips.

sensors-conf-convert

is a Perl script to convert lm-sensors version 2 configuration files to work with version 3.

sensors-detect

is a Perl script that will walk you through the process of scanning your system for various hardware monitoring chips (sensors) supported by libsensors, or more generally by the lm_sensors tool suite.

sensord

(optional) is a daemon that can be used to periodically log sensor readings.

libsensors.so

contains the lm_sensors API functions.

Last updated on 2017-02-15 12:04:59 -0800

Logrotate-3.9.1

Introduction to Logrotate

The logrotate package allows automatic rotation, compression, removal, and mailing of log files.

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

Package Information

Logrotate Dependencies

Required

popt-1.16

Recommended
Optional

An MTA (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/logrotate

Installation of Logrotate

Install logrotate by running the following command:

sed -i 's/-Werror//' Makefile.am &&
./autogen.sh                     &&
./configure --prefix=/usr        &&
make

To test the results, issue: make test.

Now, as the root user:

make install

Command Explanations

sed 's/-Werror//' Makefile.am: Prevents the compiler to stop with error when a warning is issued, since GCC 6 has introduced a lot more warnings, which are triggered by the code.

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 of /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 644
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 of /etc/logrotate.conf
EOF

chmod -v 0644 /etc/logrotate.conf

Now create the /etc/logrotate.d directory as the root user:

 mkdir -p /etc/logrotate.d

At this point additional log rotation commands can be entered, typically in the /etc/logrotate.d directory. For example:

cat > /etc/logrotate.d/sys.log << EOF
/var/log/sys.log {
   # If the log file is larger than 100kb, rotate it
   size   100k
   rotate 5
   weekly
   postrotate
      /bin/killall -HUP syslogd
   endscript
}
EOF

chmod -v 0644 /etc/logrotate.d/sys.log

You can designate multiple files in one entry:

cat > /etc/logrotate.d/example.log << EOF
file1
file2
file3 {
   ...
   postrotate
    ...
   endscript
}
EOF

chmod -v 0644 /etc/logrotate.d/example.log

You can use in the same line the list of files: file1 file2 file3. See the logrotate man page or http://www.techrepublic.com/article/manage-linux-log-files-with-logrotate/ for more examples.

The command logrotate /etc/logrotate.conf can be run manually, however, the command should be run daily. Other useful commands are logrotate -d /etc/logrotate.conf for debugging purposes and logrotate -f /etc/logrotate.conf forcing the logrotate commands to be run immediately. Combining the previous options -df, you can debug the effect of the force command. When debugging, the command is only simulated, not really run, thus, eventual non-existing errors appear, when some intermediate files are expected, because they are not actually created.

To set up Fcron-3.2.0 to run logrotate ... at 3AM daily, root's crontab should be edited to add:

0 3 * * *   /usr/sbin/logrotate /etc/logrotate.conf

Contents

Installed Programs: logrotate
Installed Library: None
Installed Directories: None

Short Descriptions

logrotate

performs the log maintenance functions defined in the configuration files.

Last updated on 2017-02-22 11:24:59 -0800

MC-4.8.18

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-8.0 platform.

Package Information

MC Dependencies

Required

GLib-2.50.3 and PCRE-8.40

Recommended
Optional

Doxygen-1.8.13, GPM-1.20.7, Samba-4.5.5, UnZip-6.0, X Window System, and Zip-3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/MC

Installation of MC

Install MC by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --enable-charset &&
make

To test the results, issue: make check.

Now, as the root user:

make install &&
cp -v doc/keybind-migration.txt /usr/share/mc

Command Explanations

--sysconfdir=/etc: This switch places the global configureation directory in /etc.

--enable-charset: This switch adds support to mcedit for editing files in encodings different from the one implied by the current locale.

Configuring MC

Config Files

~/.config/mc/*

Configuration Information

The ~/.config/mc directory and its contents are created when you start mc for the first time. Then you can edit the main ~/.config/mc/ini configuration file manually or through the MC shell. Consult the mc(1) man page for details.

Note

On 8.x versions of mc, keybind names used in mc.keymap.* files are changed. This is described in keybind-migration.txt.

Contents

Installed Programs: mc and the symlinks mcdiff, mcedit and mcview
Installed Libraries: None
Installed Directories: /etc/mc and /usr/{libexec,share}/mc

Short Descriptions

cons.saver

is used internally by mc for saving and restoring the text behind the panels on Linux text console.

mc

is a visual shell.

mcdiff

is an internal visual diff tool.

mcedit

is an internal file editor.

mcview

is an internal file viewer.

Last updated on 2017-02-21 17:57:55 -0800

ModemManager-1.6.4

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-8.0 platform.

Package Information

ModemManager Dependencies

Required

libgudev-231

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ModemManager

Installation of ModemManager

Install ModemManager by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --enable-more-warnings=no \
            --disable-static     &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: mmcli and ModemManager
Installed Libraries: libmm-glib.so
Installed Directories: /usr/include/libmm-glib, /usr/include/ModemManager, /usr/lib/ModemManager, /usr/share/gtk-doc/html/libmm-glib, and /usr/share/gtk-doc/html/ModemManager

Short Descriptions

mmcli

is an utility used to control and monitor the ModemManager.

ModemManager

is a D-Bus service used to communicate with modems.

libmm-glib.so

contains API functions for communicating with mobile broadband modems, regardless of the protocol used to communicate with the actual device.

Last updated on 2017-02-18 22:13:39 -0800

obex-data-server-0.4.6

Introduction to OBEX Data Server

OBEX Data Server package contains D-Bus service providing high-level OBEX client and server side functionality.

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

Package Information

Additional Downloads

OBEX Data Server Dependencies

Required

BlueZ-5.43, dbus-glib-0.108, ImageMagick-7.0.4-8 or gdk-pixbuf-2.36.5, libusb-compat-0.1.5, and OpenOBEX-1.7.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/obex-data-server

Installation of OBEX Data Server

Install OBEX Data Server by running the following commands:

patch -Np1 -i ../obex-data-server-0.4.6-build-fixes-1.patch &&

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: obex-data-server
Installed Libraries: None
Installed Directory: /etc/obex-data-server

Short Descriptions

obex-data-server

is a D-Bus service providing OBEX functionality.

Last updated on 2017-02-20 11:43:55 -0800

p7zip-16.02

Introduction to p7zip

p7zip is the Unix command-line port of 7-Zip, a file archiver that archives with high compression ratios. It handles 7z, ZIP, GZIP, BZIP2, XZ, TAR, APM, ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, LZMA2, MBR, MSI, MSLZ, NSIS, NTFS, RAR RPM, SquashFS, UDF, VHD, WIM, XAR and Z formats.

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

Package Information

p7zip Dependencies

Optional

wxWidgets

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/p7zip

Installation of p7zip

Install p7zip by running the following commands:

make all3

To test the results, issue: make test.

Now, as the root user:

make DEST_HOME=/usr \
     DEST_MAN=/usr/share/man \
     DEST_SHARE_DOC=/usr/share/doc/p7zip-16.02 install

Note

If using DESTDIR techniques, use DEST_DIR instead.

Contents

Installed Programs: 7z, 7za, and 7zr
Installed Libraries: None
Installed Directory: /usr/lib/p7zip and /usr/share/doc/p7zip-16.02

Short Descriptions

7z

is a file archiver utility.

7za

is a stand-alone executable handling less archive formats than 7z.

7zr

is a minimal version of 7za that handles only 7z archives.

Last updated on 2017-02-15 12:04:59 -0800

Pax-070715

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pax

Installation of Pax

This package has somewhat unusual installation instructions, because pax is part of a larger set of utilities included in the same tarball. Issue the following commands:

sed -i build/mk.config                   \
    -e '/LIBZ/s@ -Wl[^ ]*@@g'            \
    -e '/LIBBZ2/{s@^#@@;s@ -Wl[^ ]*@@g}' \
    -e '/BZLIB/s@0@1@'                   &&

make makefiles                           &&
make -C libcommon                        &&
make -C libuxre                          &&
make -C cpio

Now, as the root user:

install -v -m755 cpio/pax_su3 /usr/bin/pax &&
install -v -m644 cpio/pax.1 /usr/share/man/man1

Command Explanations

sed ...: This changes the configuration file build/mk.config so that the system zlib and libbz2 are used and linked as shared libraries.

make makefiles: This command builds all the makefiles.

make -C lib...: First builds the necessary libraries.

make -C cpio: Then builds the archive utilities.

Contents

Installed Program: pax.

Short Descriptions

pax

copies files to and from archives in several formats.

Last updated on 2017-02-22 11:24:59 -0800

pciutils-3.5.2

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pciutils

Installation of PCI Utils

Install PCI Utils by running the following commands:

make PREFIX=/usr                \
     SHAREDIR=/usr/share/hwdata \
     SHARED=yes

This package does not come with a test suite.

Now, as the root user:

make PREFIX=/usr                \
     SHAREDIR=/usr/share/hwdata \
     SHARED=yes                 \
     install install-lib        &&

chmod -v 755 /usr/lib/libpci.so

Command Explanations

SHARED=yes: This parameter enables building of the shared library instead of the static one.

ZLIB=no: This option prevents compression of the pci.ids file.

Configuring PCI Utils

The pci.ids data file is constantly being updated. To get a current version of this file, run update-pciids as the root user. This program requires the Which-2.21 script or program to find cURL-7.52.1, Lynx-2.8.8rel.2 or Wget-1.19.1 which are used to download the most current file, and then replace the existing file in /usr/share/hwdata.

You may wish to add an entry to root's (or any other user who has write privilege to /usr/share/hwdata) crontab to automatically update the pci.ids file periodically.

Contents

Installed Programs: lspci, setpci and update-pciids
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.

setpci

is a utility for querying and configuring PCI devices.

update-pciids

fetches the current version of the PCI ID list. Requires cURL-7.52.1, Lynx-2.8.8rel.2 or Wget-1.19.1.

libpci.so

is library that allows applications to access the PCI subsystem.

Last updated on 2017-02-14 23:25:58 -0800

pm-utils-1.4.1

Introduction to Power Management Utilities

The Power Management Utilities is a small collection of scripts to suspend and hibernate computer that can be used to run user supplied scripts on suspend and resume.

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

Package Information

Power Management Utilities Dependencies

Optional

xmlto-0.0.28 (to generate man pages)

Optional (runtime)

Hdparm-9.51, Wireless Tools-29, ethtool, and vbetool

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pm-utils

Kernel Configuration

If needed, enable the following options in the kernel configuration and recompile the kernel:

Power management and ACPI options --->
    <*> Suspend to RAM and standby            [CONFIG_SUSPEND]
    <*> Hibernation (aka 'suspend to disk')   [CONFIG_HIBERNATION]

Suspend to RAM allows the system to enter sleep states in which main memory is powered and thus its contents are preserved. The method cuts power to most parts of the machine aside from the RAM. Because of the large power savings, it is advisable for laptops to automatically enter this mode when the computer is running on batteries and the lid is closed (or the user is inactive for some time).

Suspend to disk (Hibernation) saves the machine's state into swap space and completely powers off the machine. When the machine is powered on, the state is restored. Until then, there is zero power consumption. Suspend to RAM and hibernation are normally appropriate for portable devices such as laptops, but can be used on workstations. The capability is not really appropriate for servers.

To use hibernation, the kernel parameter resume=/dev/<swap_partition> has to be used on the kernel command line (in grub.cfg). The swap partition should be at least the size of the physical RAM on the system.

Installation of Power Management Utilities

Install Power Management Utilities by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --docdir=/usr/share/doc/pm-utils-1.4.1 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

If you don't have xmlto-0.0.28 installed, copy pregenerated man pages:

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 (i.e. resume=/dev/sda1) to the kernel line in the /boot/grub/grub.cfg configuration file.

Contents

Installed Programs: on_ac_power, pm-hibernate, pm-is-supported, pm-powersave, pm-suspend and pm-suspend-hybrid
Installed Libraries: None
Installed Directories: /etc/pm, /usr/lib/pm-utils and /usr/share/doc/pm-utils-1.4.1

Short Descriptions

on_ac_power

is a script that determines whether the system is running on AC power (rather than a battery).

pm-hibernate

is a symlink to pm-action script that puts the computer into hibernate mode (the system is fully powered off and system state is saved to disk).

pm-is-supported

is a script that checks whether power management features such as suspend and hibernate are supported.

pm-powersave

is a script that puts the computer into powersaving (low power) mode.

pm-suspend

is a symlink to pm-action script that puts the computer into suspend mode (most devices are shut down and system state is saved in RAM).

pm-suspend-hybrid

is a symlink to pm-action script that puts the computer into hybrid-suspend mode (the system does everything it needs to hibernate, but suspends instead of shutting down).

Last updated on 2017-02-14 23:25:58 -0800

Raptor-2.0.15

Introduction to Raptor

Raptor is a C library that provides a set of parsers and serializers that generate Resource Description Framework (RDF) triples.

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

Package Information

  • Download (HTTP): http://download.librdf.org/source/raptor2-2.0.15.tar.gz

  • Download MD5 sum: a39f6c07ddb20d7dd2ff1f95fa21e2cd

  • Download size: 1.9 MB

  • Estimated disk space required: 28 MB (additional 1 MB for the tests)

  • Estimated build time: 0.2 SBU (additional 0.5 SBU for the tests)

Raptor Dependencies

Required

cURL-7.52.1 and libxslt-1.1.29

Optional

GTK-Doc-1.25, ICU-58.2 and libyajl

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/raptor

Installation of Raptor

Install Raptor 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.

--with-icu-config=/usr/bin/icu-config: Use this switch if you have installed ICU-58.2 and wish to build Raptor with its support.

Contents

Installed Programs: rapper
Installed Libraries: libraptor2.so
Installed Directories: /usr/include/raptor2 and /usr/share/gtk-doc/html/raptor2

Short Descriptions

rapper

is a RDF parsing and serializing utility.

libraptor2.so

contains the Raptor API functions.

Last updated on 2017-02-21 13:10:36 -0800

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-8.0 platform.

Package Information

  • Download (HTTP): http://download.librdf.org/source/rasqal-0.9.33.tar.gz

  • Download MD5 sum: 1f5def51ca0026cd192958ef07228b52

  • Download size: 1.6 MB

  • Estimated disk space required: 22 MB (additional 4 MB for the tests)

  • Estimated build time: 0.3 SBU (additional 0.7 SBU for the tests)

Rasqal Dependencies

Required

Raptor-2.0.15

Optional

PCRE-8.40 and libgcrypt-1.7.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rasqal

Installation of Rasqal

Install Rasqal by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: rasqal-config and roqet
Installed Library: librasqal.so
Installed Directories: /usr/include/rasqal and /usr/share/gtk-doc/html/rasqal

Short Descriptions

rasqal-config

is an utility for retrieving the installation options of Rasqal.

roqet

is an RDF query utility.

Last updated on 2017-02-17 19:16:56 -0800

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-8.0 platform.

Package Information

Redland Dependencies

Required

Rasqal-0.9.33

Optional

Berkeley DB-6.2.23, libiodbc-3.52.12, SQLite-3.17.0, MariaDB-10.1.21 or MySQL, PostgreSQL-9.6.2, virtuoso, and 3store

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/redland

Installation of Redland

Install Redland by running the following commands:

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

To test the results, issue make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: rdfproc, redland-config and redland-db-upgrade
Installed Libraries: librdf.so and /usr/lib/redland/librdf_storage_*.so
Installed Directories: /usr/lib/redland, /usr/share/gtk-doc/html/redland and /usr/share/redland

Short Descriptions

rdfproc

is the Redland RDF processor utility.

redland-config

is a script to get information about the installed version of Redland.

redland-db-upgrade

upgrades older Redland databases to 0.9.12 format.

Last updated on 2017-02-17 19:16:56 -0800

sg3_utils-1.42

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sg3_utils

Installation of sg3_utils

Install sg3_utils by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: scsi_logging_level, scsi_mandat, scsi_readcap, scsi_ready, scsi_satl, scsi_start, scsi_stop, scsi_temperature, 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_block_limits, sg_read_buffer, sg_read_long, sg_readcap, sg_reassign, sg_referrals, 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_senddiag, sg_ses, sg_ses_microcode, sg_start, sg_stpg, sg_sync, sg_test_rwbuf, sg_turs, sg_unmap, sg_verify, sg_vpd, sg_wr_mode, sg_write_buffer, sg_write_long, sg_write_same, sg_write_verify, sg_xcopy, sginfo, sgm_dd, and sgp_dd
Installed Library: libsgutils2.so
Installed Directories: None

Short Descriptions

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_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_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 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 SCSI READ BUFFER command.

sg_rdac

displays or modifies RDAC Redundant Controller Page.

sg_read

reads blocks of data continually from the same offset.

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 the SCSI REPORT REFERRALS command.

sg_rep_zones

sends a SCSI REPORT ZONES command.

sg_requests

sends one or more SCSI REQUEST SENSE commands.

sg_reset

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

uses 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_senddiag

performs a SCSI SEND DIAGNOSTIC command.

sg_ses

sends controls and fetch 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_sync

sends the scsi command synchronize cache.

sg_test_rwbuf

tests the SCSI host adapter by issuing write and read operations on a device's buffer and calculating checksums.

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 the SCSI WRITE LONG command.

sg_write_same

sends the SCSI WRITE SAME command.

sg_write_verify

sends the SCSI WRITE AND VERIFY command.

sg_wr_mode

writes mode page.

sg_xcopy

copies data to and from files and devices using SCSI EXTENDED COPY (XCOPY).

libsgutils2.so

contains the sg3_utils API functions.

Last updated on 2017-02-14 23:25:58 -0800

Sysstat-11.5.4

Introduction to Sysstat

The Sysstat package contains utilities to monitor system performance and usage activity. Sysstat contains the sar utility, common to many commercial Unixes, and tools you can schedule via cron to collect and historize performance and activity data.

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

Package Information

Sysstat Dependencies

There are no build-time requirements for this package; however, it is designed to be controlled by a cron daemon such as Fcron-3.2.0.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sysstat

Installation of Sysstat

Install Sysstat by running the following commands:

sa_lib_dir=/usr/lib/sa    \
sa_dir=/var/log/sa        \
conf_dir=/etc/sysconfig   \
./configure --prefix=/usr \
            --disable-file-attr &&
make

This package does not come with a test suite.

Now, as the root user:

make install

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-20170225 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-11.5.4 and /var/log/sa

Short Descriptions

cifsiostat

displays statistics about read and write operations on CIFS filesystems.

iostat

reports CPU statistics and input/output statistics for devices and partitions.

mpstat

writes activities for each available processor.

pidstat

is used for monitoring individual tasks currently being managed by the Linux kernel.

sadf

is used for displaying the contents of data files created by the sar command. But unlike sar, sadf can write its data in many different formats.

sar

is used for displaying the contents of elected cumulative activity counters in the operating system.

tapestat

is used for monitoring the activity of tape drives connected to a system.

Last updated on 2017-02-25 11:22:16 -0800

UDisks-1.0.5

Introduction to UDisks

The UDisks package provides a storage daemon that implements well-defined D-Bus interfaces that can be used to query and manipulate storage devices.

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

Package Information

udisks Dependencies

Required

dbus-glib-0.108, libatasmart-0.19, libgudev-231, LVM2-2.02.168, parted-3.2, Polkit-0.113, and sg3_utils-1.42

Optional

GTK-Doc-1.25, libxslt-1.1.29 and Sudo-1.8.19p2 (to run the test)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/udisks

Installation of UDisks

Fix a build issue with glibc-2.24:

sed 's@#include <stdio\.h>@#include <sys/stat.h>\n#include <stdio.h>@' \
    -i src/helpers/job-drive-detach.c

Install UDisks by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var &&
make

To test the results, issue: make check.

Now, as the root user:

make profiledir=/etc/bash_completion.d 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: udisks, udisks-daemon, udisks-tcp-bridge, and umount.udisks
Installed Libraries: None
Installed Directories: /usr/share/gtk-doc/html/udisks and /var/lib/udisks

Short Descriptions

udisks

is a simple command line interface for the UDisks Daemon.

udisks-tcp-bridge

is the UDisks TCP/IP bridge.

udisks-daemon

is the UDisks Daemon.

Last updated on 2017-02-17 12:01:55 -0800

UDisks-2.1.8

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-8.0 platform.

Package Information

UDisks Dependencies

Required

libatasmart-0.19, libgudev-231, libxslt-1.1.29, and Polkit-0.113

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

gptfdisk-1.0.1, GTK-Doc-1.25, ntfs-3g-2016.2.22, parted-3.2, and dosfstools

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/udisks2

Installation of UDisks

Install UDisks by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: udisksctl, udisksd and umount.udisks2
Installed Library: libudisks2.so
Installed Directories: /etc/udisks2, /usr/include/udisks2, /usr/lib/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.

udisksd

is the UDisks daemon itself.

libudisks2.so

contains the UDisks API functions.

Last updated on 2017-02-20 11:43:55 -0800

UnRar-5.4.5

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/unrar

Installation of UnRar

Install UnRar by running the following commands:

make -f makefile

This package does not come with a test suite.

Now, as the root user:

install -v -m755 unrar /usr/bin

Contents

Installed Program: unrar
Installed Libraries: None
Installed Directories: None

Short Descriptions

unrar

uncompresses a RAR archive.

Last updated on 2017-02-15 12:04:59 -0800

UnZip-6.0

Introduction to UnZip

The UnZip package contains ZIP extraction utilities. These are useful for extracting files from ZIP archives. ZIP archives are created with PKZIP or Info-ZIP utilities, primarily in a DOS environment.

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

Caution

The previous version of the UnZip package had some locale related issues. Currently there are no BLFS editors capable of testing these local issues. Therefore, the locale related information is left on this page, but has not been tested. A more general discussion of these problems can be found in the Program Assumes Encoding section of the Locale Related Issues page.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/unzip

UnZip Locale Issues

Note

Use of UnZip in the JDK, Mozilla, DocBook or any other BLFS package installation is not a problem, as BLFS instructions never use UnZip to extract a file with non-ASCII characters in the file's name.

The UnZip package assumes that filenames stored in the ZIP archives created on non-Unix systems are encoded in CP850, and that they should be converted to ISO-8859-1 when writing files onto the filesystem. Such assumptions are not always valid. In fact, inside the ZIP archive, filenames are encoded in the DOS codepage that is in use in the relevant country, and the filenames on disk should be in the locale encoding. In MS Windows, the OemToChar() C function (from User32.DLL) does the correct conversion (which is indeed the conversion from CP850 to a superset of ISO-8859-1 if MS Windows is set up to use the US English language), but there is no equivalent in Linux.

When using unzip to unpack a ZIP archive containing non-ASCII filenames, the filenames are damaged because unzip uses improper conversion when any of its encoding assumptions are incorrect. For example, in the ru_RU.KOI8-R locale, conversion of filenames from CP866 to KOI8-R is required, but conversion from CP850 to ISO-8859-1 is done, which produces filenames consisting of undecipherable characters instead of words (the closest equivalent understandable example for English-only users is rot13). There are several ways around this limitation:

1) For unpacking ZIP archives with filenames containing non-ASCII characters, use WinZip while running the Wine Windows emulator.

2) After running unzip, fix the damage made to the filenames using the convmv tool (http://j3e.de/linux/convmv/). The following is an example for the ru_RU.KOI8-R locale:

Step 1. Undo the conversion done by unzip:

convmv -f iso-8859-1 -t cp850 -r --nosmart --notest \
    </path/to/unzipped/files>

Step 2. Do the correct conversion instead:

convmv -f cp866 -t koi8-r -r --nosmart --notest \
    </path/to/unzipped/files>

Installation of UnZip

make -f unix/Makefile generic

The test suite does not work for present target “generic”.

Now, as the root user:

make prefix=/usr MANDIR=/usr/share/man/man1 \
 -f unix/Makefile install

Command Explanations

make -f unix/Makefile generic: This target begins by running a configure script (unlike the older targets such as linux and linux_noasm) which creates a flags file that is then used in the build. This ensures that the 32-bit x86 build receives the right flags to unzip files which which are larger than 2GB when extracted.

Contents

Installed Programs: funzip, unzip, unzipfsx, zipgrep, and zipinfo
Installed Libraries: None
Installed Directories: None

Short Descriptions

funzip

allows the output of unzip commands to be redirected.

unzip

lists, tests or extracts files from a ZIP archive.

unzipfsx

is a self-extracting stub that can be prepended to a ZIP archive. Files in this format allow the recipient to decompress the archive without installing UnZip.

zipgrep

searches files in a ZIP archive for lines matching a pattern.

zipinfo

produces technical information about the files in a ZIP archive, including file access permissions, encryption status, type of compression, etc.

Last updated on 2017-02-14 19:04:01 -0800

UPower-0.99.4

Introduction to UPower

The UPower package provides an interface to enumerating power devices, listening to device events and querying history and statistics. Any application or service on the system can access the org.freedesktop.UPower service via the system message bus.

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

Package Information

UPower Dependencies

Required

dbus-glib-0.108, libgudev-231, libusb-1.0.21, and Polkit-0.113

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

GTK-Doc-1.25 and Python-3.6.0 (used only in the testsuite).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/upower

Installation of UPower

Install UPower by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --enable-deprecated  \
            --disable-static     &&
make

To test the results, issue: make check. Some checks may not pass due to missing files. Test suite should be run from a local GUI session started with dbus-launch.

Now, as the root user:

make install

Command Explanations

--enable-deprecated: This switch enables deprecated functionality which is still needed by some applications.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Configuring your kernel for UPower

To use the command upower -w for information about processor wakeups (this command is used by gnome-power-manager) you need to enable CONFIG_TIMER_STATS. This is achieved in make menuconfig by going to the 'kernel-hacking' menu and selecting 'Collect kernel timers statistics'.

Contents

Installed Program: upower
Installed Libraries: libupower-glib.so
Installed Directories: /etc/UPower, /usr/include/libupower-glib, and /var/lib/upower

Short Descriptions

upower

is the UPower command line tool.

libupower-glib.so

contains the UPower API functions.

Last updated on 2017-02-17 12:01:55 -0800

usbutils-008

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-8.0 platform.

Package Information

USB Utils Dependencies

Required

libusb-1.0.21

Required Runtime

Python-2.7.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/usbutils

Installation of USB Utils

Install USB Utils by running the following commands:

sed -i '/^usbids/ s:usb.ids:hwdata/&:' lsusb.py &&

./configure --prefix=/usr --datadir=/usr/share/hwdata &&
make

This package does not come with a test suite.

Now, as the root user:

make install

To install the usb.ids data file, using Wget-1.19.1, run, as the root user:

install -dm755 /usr/share/hwdata/ &&
wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids

The script lsusb.py displays information in a more easily readable form than lsusb. To find the options, use lsusb.py -h. One form of use recommended by the developer is lsusb.py -ciu.

Command Explanations

sed ... lsusb.py: Instructs lsusb.py where to search usb.ids.

Configuring USB Utils

The usb.ids data file is constantly being updated. To get a current version of this file, using Wget-1.19.1, periodically run again, as the root user:

wget http://www.linux-usb.org/usb.ids -O /usr/share/hwdata/usb.ids

You may wish to add an entry to root's (or any other user who has write privilege to /usr/share/hwdata) crontab to automatically update the usb.ids file periodically.

Contents

Installed Programs: lsusb, lsusb.py, usb-devices, and usbhid-dump
Installed Libraries: None
Installed Directories: None

Short Descriptions

lsusb

is a utility for displaying information about all USB buses in the system and all devices connected to them, but not in human friendly form.

lsusb.py

displays information about all USB buses in the system and all devices connected to them in reasonable human friendly form.

usb-devices

is a shell script that displays details of USB buses and devices connected to them. It is designed to be used if /proc/bus/usb/devices is not available on your system.

usbhid-dump

is used to dump report descriptors and streams from HID (human interface device) interfaces of USB devices.

Last updated on 2017-02-15 12:04:59 -0800

Which-2.21 and Alternatives

The presence or absence of the which program in the main LFS book is probably one of the most contentious issues on the mailing lists. It has resulted in at least one flame war in the past. To hopefully put an end to this once and for all, presented here are two options for equipping your system with which. The question of which “which” is for you to decide.

The first option is to install the actual GNU which package.

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

Introduction to Which

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/which

Installation of Which

Install which by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: which
Installed Libraries: None
Installed Directories: None

Short Descriptions

which

shows the full path of (shell) commands installed in your PATH.

The 'which' Script

The second option (for those who don't want to install the package) is to create a simple script (execute as the root user):

cat > /usr/bin/which << "EOF"
#!/bin/bash
type -pa "$@" | head -n 1 ; exit ${PIPESTATUS[0]}
EOF
chmod -v 755 /usr/bin/which
chown -v root:root /usr/bin/which

This should work OK and is probably the easiest solution for most cases, but is not the most comprehensive implementation.

Last updated on 2017-02-14 16:20:11 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/zip

Installation of Zip

Install Zip by running the following commands:

make -f unix/Makefile generic_gcc

This package does not come with a test suite.

Now, as the root user:

make prefix=/usr MANDIR=/usr/share/man/man1 -f unix/Makefile install

Command Explanations

make prefix=/usr -f unix/Makefile install: This command overrides the prefix variable that is set to /usr/local in the unix/Makefile. Alternatives to generic_gcc can be seen with a make -f unix/Makefile list command.

Contents

Installed Programs: zip, zipcloak, zipnote, and zipsplit
Installed Libraries: None
Installed Directories: None

Short Descriptions

zip

compresses files into a ZIP archive.

zipcloak

is a utility to encrypt and decrypt a ZIP archive.

zipnote

reads or writes comments stored in a ZIP file.

zipsplit

is a utility to split ZIP files into smaller files.

Last updated on 2017-02-14 16:20:11 -0800

Chapter 13. Programming

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

Autoconf-2.13

Introduction to Autoconf-2.13

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

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

Package Information

Additional Downloads

Autoconf-2.13 Dependencies

Optional

DejaGnu-1.6 (Required for the tests)

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

Installation of Autoconf-2.13

Install Autoconf by running the following commands:

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

To test the installation, if you have installed DejaGnu-1.6, issue make check (all 253 tests should pass).

Now, as the root user:

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

Command Explanations

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

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

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

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

Contents

Installed Programs: autoconf-2.13, autoheader-2.13, autoreconf-2.13, autoscan-2.13, autoupdate-2.13, ifnames-2.13
Installed Library: None
Installed Directory: /usr/share/autoconf-2.13

Short Descriptions

autoconf-2.13

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

autoheader-2.13

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

autoreconf-2.13

This automatically runs autoconf-2.13, autoheader-2.13, aclocal, automake, gettextize and libtoolize in the right order when changes have been made to autoconf or automake template files.

autoscan-2.13

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

autoupdate-2.13

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

ifnames-2.13

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

Last updated on 2017-02-15 19:06:46 -0800

Check-0.11.0

Introduction to Check

Check is a unit testing framework for C. It was installed by LFS in the temporary /tools directory. These instructions install it permanently.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/check

Installation of Check

Install Check by running the following commands:

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

To test the installation, issue make check.

Now, as the root user:

make docdir=/usr/share/doc/check-0.11.0 install

Command Explanations

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

Contents

Installed Program: checkmk
Installed Library: libcheck.so
Installed Directory: /usr/share/doc/check-0.11.0

Short Descriptions

checkmk

is an Awk script used for generating C unit tests for use with the Check unit testing framework.

libcheck.so

contains the Check API functions.

Last updated on 2017-02-14 16:20:11 -0800

Clisp-2.49

Introduction to Clisp

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

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

Package Information

Recommended
Optional

libffcall

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

Installation of Clisp

Note

This package does not support parallel build.

Remove two tests, which fail for unknown reasons:

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

Install Clisp by running the following commands:

mkdir build &&
cd    build &&

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

ulimit -s 16384 &&
make -j1

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: clisp, clisp-link
Installed Libraries: various static libraries in /usr/lib/clisp-$clisp-version;/base/
Installed Directories: /usr/lib/clisp-2.49 /usr/share/doc/clisp-2.49 /usr/share/emacs/site-lisp;

Short Descriptions

clisp

is an ANSI Common Lisp compiler, interpreter, and debugger

clisp-link

is used to link an external module to clisp

Last updated on 2017-02-16 20:33:09 -0800

CMake-3.7.2

Introduction to CMake

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

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

Package Information

  • Download (HTTP): http://www.cmake.org/files/v3.7/cmake-3.7.2.tar.gz

  • Download MD5 sum: 79bd7e65cd81ea3aa2619484ad6ff25a

  • Download size: 7.0 MB

  • Estimated disk space required: 293 MB (add 341 MB for tests)

  • Estimated build time: 2.6 SBU (add 8.2 SBU for tests)

CMake Dependencies

Recommended
Optional

Qt-5.8.0 (for the Qt-based GUI), Subversion-1.9.5 (for testing), libuv, and Sphinx (for building documents)

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

Installation of CMake

Install CMake by running the following commands:

sed -i '/CMAKE_USE_LIBUV 1/s/1/0/' CMakeLists.txt     &&
sed -i '/"lib64"/s/64//' Modules/GNUInstallDirs.cmake &&

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

To test the results, issue: bin/ctest -j<N> -O cmake-3.7.2-test.log, where <N> is an integer between 1 and the number of system cores.

Now, as the root user:

make install

Command Explanations

sed ... CMakeLists.txt: This command disables the attempt to use the external libuv library.

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

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

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

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

Contents

Installed Programs: ccmake, cmake, cmake-gui (optional), cpack and ctest
Installed Libraries: None
Installed Directories: /usr/share/cmake-3.7 and /usr/share/doc/cmake-3.7.2

Short Descriptions

ccmake

is a curses based interactive frontend to cmake.

cmake

is the makefile generator.

cmake-gui

(optional) is the Qt-based frontent to cmake.

cpack

is the CMake packaging program.

ctest

is a testing utility for cmake-generated build trees.

Last updated on 2017-02-14 16:20:11 -0800

DejaGnu-1.6

Introduction to DejaGnu

DejaGnu is a framework for running test suites on GNU tools. It is written in expect, which uses Tcl (Tool command language). It was installed by LFS in the temporary /tools directory. These instructions install it permanently.

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

Package Information

DejaGnu Dependencies

Required

Expect-5.45

Optional

DocBook-utils-0.6.14 and docbook2X (both looked for by the configure script but not used in the build)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dejagnu

Installation of DejaGnu

Install DejaGnu by running the following commands:

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

Now, as the root user:

make install &&
install -v -dm755   /usr/share/doc/dejagnu-1.6 &&
install -v -m644    doc/dejagnu.{html,txt} \
                    /usr/share/doc/dejagnu-1.6

Contents

Installed Program: runtest
Installed Libraries: None
Installed Directory: /usr/share/dejagnu

Short Descriptions

runtest

is the DejaGnu test driver program. It is used to control what tests to run, and variations on how to run them.

Last updated on 2017-02-14 16:20:11 -0800

Doxygen-1.8.13

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-8.0 platform.

Package Information

Doxygen Dependencies

Required

CMake-3.7.2

Optional

Graphviz-2.38.0, ghostscript-9.20, libxml2-2.9.4 (required for the tests), LLVM-3.9.1 (with clang), Python-2.7.13 or Python-3.6.0, Qt-5.8.0 (for doxywizard), texlive-20160523b (or install-tl-unx), and xapian-1.4.3 (for doxyindexer)

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

Installation of Doxygen

Install Doxygen by running the following commands:

mkdir -v build &&
cd       build &&

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

make

To test the results, issue: make tests.

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

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

make docs

Now, as the root user:

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

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

Command Explanations

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

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

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

Configuring Doxygen

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

Contents

Installed Programs: doxygen and optionally, doxywizard, doxyindexer and doxysearch.cgi
Installed Libraries: None
Installed Directory: /usr/share/doc/doxygen-1.8.13

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. http://www.stack.nl/~dimitri/doxygen/manual/extsearch.html.

doxysearch.cgi

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

Last updated on 2017-02-18 18:01:35 -0800

elfutils-0.168

Introduction to elfutils

The elfutils package contains a set of utilities and libraries for handling ELF (Executable and Linkable Format) files.

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

Package Information

elfutils Dependencies

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/elfutils

Installation of elfutils

Install elfutils by running the following commands:

./configure --prefix=/usr --program-prefix="eu-" &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--program-prefix="eu-": This switch renames installed programs to avoid conflict with Binutils programs installed in LFS.

--enable-valgrind: Run all tests under valgrind.

Contents

Installed Programs: eu-addr2line, eu-ar, eu-elfcmp, eu-elfcompress, eu-elflint, eu-findtextrel, eu-make-debug-archive, eu-nm, eu-objdump, eu-ranlib, eu-readelf, eu-size, eu-stack, eu-strings, eu-strip, and eu-unstrip
Installed Libraries: libasm.{a,so}, libdw.{a,so}, libebl.a, libelf.{a,so}, and some for different architectures under /usr/lib/elfutils
Installed Directories: /usr/include/elfutils and /usr/lib/elfutils

Short Descriptions

eu-addr2line

converts addresses into file names and line numbers.

eu-ar

creates, modifies, and extracts from archives.

eu-elfcmp

compares relevant parts of two ELF files for equality.

eu-elfcompress

compresses or decompresses sections in an ELF file.

eu-elflint

does pedantic checking of ELF files compliance with gABI/psABI spec.

eu-findtextrel

locates the source of text relocations in FILEs (a.out by default).

eu-nm

lists symbols from FILEs (a.out by default).

eu-objdump

shows information from FILEs (a.out by default).

eu-ranlib

generates an index to speed up access to archives.

eu-readelf

prints information from ELF files in human-readable form.

eu-size

lists section sizes of FILEs (a.out by default).

eu-stack

prints a stack for each thread in a process or core file.

eu-strings

prints the strings of printable characters in files.

eu-strip

discards symbols from object files.

eu-unstrip

combines stripped files with separate symbols and debug information.

Last updated on 2017-02-15 12:04:59 -0800

Expect-5.45

Introduction to Expect

The Expect package was installed in the LFS temporary tools directory for testing other packages. These procedures install it in a permanent location. It contains tools for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect is also useful for testing these same applications as well as easing all sorts of tasks that are prohibitively difficult with anything else.

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

Package Information

Expect Dependencies

Required

Tcl-8.6.6

Optional

Tk-8.6.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/expect

Installation of Expect

Install Expect by running the following commands:

./configure --prefix=/usr           \
            --with-tcl=/usr/lib     \
            --enable-shared         \
            --mandir=/usr/share/man \
            --with-tclinclude=/usr/include &&
make

To test the results, issue: make test.

Now, as the root user:

make install &&
ln -svf expect5.45/libexpect5.45.so /usr/lib

Command Explanations

-with-tcl=/usr/lib: This parameter is used to tell the configure script where the tclConfig.sh is located.

--enable-shared: This option enables building the shared library.

ln -sf ...: This command creates a required link to the shared library.

Configuring Expect

Config Files

$exp_library/expect.rc and ~/.expect.rc

Configuration Information

Reference the expect man page for information about utilizing the expect.rc configuration files. Additionally, many of the tools contained in the Expect package will use their own configuration files. Reference the respective man page, or examine the script directly for configuration file information.

Contents

Installed Programs: autoexpect, autopasswd, cryptdir, decryptdir, dislocate, expect, ftp-rfc, kibitz, lpunlock, mkpasswd, passmass, rftp, rlogin-cwd, timed-read, timed-run, unbuffer, weather, and optionally (if Expect was linked against Tk), multixterm, tknewsbiff, tkpasswd, xkibitz, and xpstat
Installed Library: libexpect5.45.so
Installed Directory: /usr/lib/expect5.45

Short Descriptions

autoexpect

generates an Expect script from watching a session.

autopasswd

is a wrapper to make passwd(1) be non-interactive.

cryptdir

encrypts all files in a directory.

decryptdir

decrypts all files in a directory.

dislocate

allows processes to be disconnected and reconnected to a terminal.

expect

is a program that “talks” to other interactive programs according to a script.

ftp-rfc

retrieves an RFC (or the index) from UUNET.

kibitz

allows two (or more) people to interact with one shell (or any arbitrary program).

lpunlock

unhangs a printer which claims it is “waiting for lock”.

mkpasswd

generates passwords and can apply them automatically to users.

passmass

changes a password on multiple machines.

rftp

is much like ftp except it uses ~g and ~p instead of mget and mput.

rlogin-cwd

is rlogin except it uses the local current directory as the current working directory on the remote machine.

timed-read

reads a complete line from stdin and aborts after a given number of seconds.

timed-run

runs a program for a given amount of time.

unbuffer

disables the output buffering that occurs when program output is redirected.

weather

retrieves a weather report (courtesy University of Michigan) for a given city or geographical area.

multixterm

creates multiple xterms that can be driven together or separately.

tknewsbiff

pops up a window when there is unread news in your favorite newsgroups and removes the window after you've read the news.

tkpasswd

is a script to change passwords using expect and Tk.

xkibitz

allows users in separate xterms to share one shell (or any program that runs in an xterm).

xpstat

is a script that acts as a front-end for xpilot.

libexpect5.45.so

contains functions that allow Expect to be used as a Tcl extension or to be used directly from C or C++ (without Tcl).

Last updated on 2017-02-14 16:20:11 -0800

GCC-6.3.0

Introduction to GCC

The GCC package contains the GNU Compiler Collection. This page describes the installation of compilers for the following languages: C, C++, Fortran, Objective C, Objective C++, and Go. Two additional languages , Ada and Java are available in the collection. They have specific requirements, so they are described in separate pages (GCC-Ada-6.3.0 and GCC-Java-6.3.0). Since C and C++ are installed in LFS, this page is either for upgrading C and C++, or for installing additional compilers.

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

Caution

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

The 5.1.0 version of GCC introduces an incompatible ABI change in the C++ library libstdc++.so. This does not prevent using programs compiled with the previous version of GCC , since both old and new symbols are available in the library. But compiling, with the new version, programs which use libraries compiled with the old version is likely to give errors. So, if you are upgrading from any previous version prior to 5.1.0, you have two solutions: recompile all the libraries with the new version, or use the --with-default-libstdcxx-abi switch to configure.

Package Information

GCC Dependencies

Recommended

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

Installation of GCC

Important

Even if you specify only languages other than C and C++ to the ./configure command below, the installation process will overwrite your existing GCC C and C++ compilers and libraries. Having the Tcl, Expect and DejaGnu packages installed before beginning the build is highly recommended so you can run the full suite of tests.

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 http://gcc.gnu.org/ml/gcc-testresults/. You may also want to refer to the information found in the GCC section of Chapter 6 in the LFS book (../../../../lfs/view/8.0/chapter06/gcc.html).

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

Install GCC by running the following commands:

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

mkdir build                                          &&
cd    build                                          &&

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

If you have installed additional packages such as Valgrind and GDB, the GCC part of the testsuite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). To run the tests, issue:

ulimit -s 32768 &&
make -k check

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

../contrib/test_summary

Now, as the root user:

make install &&

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

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

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

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

Command Explanations

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

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

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

--enable-languages=c,c++,fortran,go,objc,obj-c++: This command identifies which languages to build. You may modify this command to remove undesired languages.

--with-default-libstdcxx-abi=gcc4-compatible: Use this switch if you are upgrading from a GCC version prior to 5.1.0, and you do not want to recompile all the libraries written in C++.

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

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

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

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

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

Contents

Some program and library names and descriptions are not listed here, but can be found at ../../../../lfs/view/8.0/chapter06/gcc.html#contents-gcc as they were initially installed during the building of LFS.

Installed Programs: gccgo, go, gofmt and gfortran, hard-linked to architecture specific names
Installed Libraries: libgfortran.{so,a}, libgo.{so,a}, libgobegin.a, libgolibbegin.a, libnetgo.a, libobjc.{so,a}, and numerous other run-time libraries and executables
Installed Directories: /usr/lib/go/6.3.0

Short Descriptions

gccgo

is a GCC-based compiler for the Go language.

go

is a tool for managing Go source code.

gofmt

is a tool for formatting Go source code.

gfortran

is a GCC-based compiler for the Fortran language.

Last updated on 2017-02-22 09:52:51 -0800

GCC-Java-6.3.0

Introduction to GCC-Java

See the introduction to the Java language and system at Java-1.8.0.121. The GNU Compiler Collection (GCC) contains a Java compiler to native code. Together with the ecj Java compiler from Eclipse (to bytecode), it provides a way to build an acceptable JVM from source. However, since the release of OpenJDK, the development of GCC-Java has almost stopped, and the built JVM is an old version, which cannot be used for building OpenJDK-1.8.0.121.

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

Caution

Using the instructions on this page will have the effect that the C and C++ compiler and libraries will be reinstalled, overwriting the ones on your system. This may lead to some issues. Please read the note and caution on the GCC-6.3.0 page.

Package Information

Additional Downloads

GCC Java Dependencies

Required

UnZip-6.0, Which-2.21, and Zip-3.0

Recommended
Optional

GTK+-2.24.31 and Libart for building the AWT peer

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gcc-java

Installation of GCC Java

The instructions below assume that the C and C++ compilers have the same version as the one you are installing, so that a “bootstrap” is not necessary. If you are upgrading the GCC version, then remove the --disable-bootstrap from the ./configure options below.

Install GCC Java by running the following commands:

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

sed -i 's/\(install.*:\) install-.*recursive/\1/' libffi/Makefile.in         &&
sed -i 's/\(install-data-am:\).*/\1/'             libffi/include/Makefile.in &&
sed -i 's/absolute/file normalize/' libjava/testsuite/lib/libjava.exp &&
sed -i 's/major.*1000.*minor/major/' gcc/java/decl.c &&

cp ../ecj-4.9.jar ./ecj.jar &&

mkdir build &&
cd    build &&

../configure                     \
    --prefix=/usr                \
    --disable-multilib           \
    --with-system-zlib           \
    --disable-bootstrap          \
    --enable-java-home           \
    --with-jvm-root-dir=/opt/gcj \
    --with-antlr-jar=$(pwd)/../../antlr-4.6-complete.jar \
    --enable-languages=java &&
make

If you have installed additional packages such as Valgrind and GDB, the GCC part of the testsuite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). To run the tests, issue:

ulimit -s 32768 &&
make -k check

The tests are very long, and the results may be hard to find in the logs, specially if you use job control 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/6.3.0/include{,-fixed} &&

gcj -o ecj ../../ecj-4.9.jar \
    --main=org.eclipse.jdt.internal.compiler.batch.Main &&
mv ecj /usr/bin &&
ln -sfv ../../../usr/bin/ecj /opt/gcj/bin/javac

Command Explanations

The first two sed commands prevent the installation of the libffi library bundled with GCC, since it is outdated compared to libffi-3.2.1.

The next two sed commands implement upstream fixes to the GCC Java compiler and tests.

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.

--disable-bootstrap: Prevents the C and C++ compilers to recompile themselves. You should use this switch only if the installed C and C++ compilers are the same version as the ones you install.

--enable-java-home: Creates a directory layout similar to that of a JVM.

--with-jvm-root-dir=/opt/gcj: Installs the JVM in the specified location.

--with-antlr-jar=...: Specifies the location of ANTLR, which is needed to build gjdoc. Remove if you have not downloaded antlr.

--enable-languages=java: This command identifies which language to build. Note it is unavoidable that the C and C++ compilers be built too.

--enable-java-awt=gtk: Allows to build the Java AWT GTK+2 peer. Needed to have a fully functional JVM.

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

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

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

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.

gcj -o ecj ...: compiles the eclipse compiler to native code, which is much faster than bytecode. This compiler is then used as a javac replacement in the JVM.

Configuring GCC-Java

Configuration Information

The configuration is the same as Configuring the JAVA environment, replacing /opt/jdk with /opt/gcj.

Contents

Installed Programs: aot-compile, ecj, gappletviewer, gc-analyze, gcj, gcj-dbtool, gcjh, gij, gjar, gjarsigner, gjavah, gjdoc, gkeytool, gnative2ascii, gorbd, grmic, grmid, grmiregistry, gserialver, gtnameserv, jcf-dump, jv-convert, rebuild-gcj-db. Symbolic links to these files are located in /opt/gcj/bin
Installed Libraries: libgcj_bc.so, libgcj.so, libgcj-tools.so, and libgij.so
Installed Directories: /usr/include/c++/6.3.0/{gcj,gnu,java,javax,org,sun}, /usr/lib/gcj-6.3.0-17, /usr/lib/jvm-exports, /usr/lib/security, /opt/gcj, and /usr/share/java

Some programs, libraries, and descriptions are not listed here, but can be found at ../../../../lfs/view/8.0/chapter06/gcc.html#contents-gcc as they were initially installed during the building of LFS.

Short Descriptions

aot-compile

searches a directory for Java bytecode and uses gcj to compile it to native code.

ecj

is the Eclipse Java compiler.

gappletviewer

loads and run a Java applet.

gc-analyze

analyzes garbage collector (GC) memory dumps from Java code.

gcj

is an ahead-of-time compiler for the Java language.

gcj-dbtool

is a tool for creating and manipulating class file mapping databases.

gcjh

generates header files from Java class files.

gij

is the GNU interpreter for Java bytecode.

gjar

is an (partial) implementation of the jar utility that comes with Sun's JDK.

gjarsigner

is a Java ARchive (JAR) file signing and verification tool.

gjavah

generates header files from Java class files.

gjdoc

is a documentation tool similar to javadoc.

gkeytool

manages private keys and public certificates in a Java environment.

gnative2ascii

is an encoding converter for Java.

gorbd

is an object request broker daemon.

grmic

generates stubs for Remote Method Invocation.

grmid

RMI activation system daemon.

grmiregistry

starts a remote object registry on the current host.

gserialver

prints the serialVersionUID of the specified class.

gtnameserv

starts a naming service.

jcf-dump

prints information about Java class files.

jv-convert

converts files from one encoding to another.

rebuild-gcj-db

Merge the per-solib databases made by aot-compile into one system-wide database.

Last updated on 2017-02-22 09:52:51 -0800

GCC-Ada-6.3.0

Introduction to the GCC Ada compiler

Ada is a modern programming language designed for large, long-lived applications — and embedded systems in particular — where reliability and efficiency are essential. It has a set of unique technical features that make it highly effective for use in large, complex and safety-critical projects.

The compiler and associated tools on this page are known as the GNAT technology, developed by the Adacore company, using the GCC backend. Since parts of the Ada compiler are written in Ada, there is a circular dependency on an Ada compiler. The instructions below first install a binary compiler. You do not need to do that if you already have built GNAT tools.

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

Caution

Using the instructions on this page will have the effect that the C and C++ compiler and libraries will be reinstalled, overwriting the ones on your system. This may lead to some issues. Please read the notes and caution on the GCC-6.3.0 page.

Note

If you want to install other compilers in the GCC collection, do that first, or specify ada in the --enable-languages switch to configure. If you rebuild GCC without enabling ada after running the instructions on this page, the new compiler will not be able to compile ADA anymore.

Package Information

Additional Downloads

Note

You will need to install GNAT temporarily to satisfy the circular dependency. You may point your browser to the AdaCore download page, choose your platform and 2016 (64 bit machines) or 2014 (32 bit machines), then select the file to download. Alternatively, direct links to the 64 bit and 32 bit linux versions are given below.

GCC Ada Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gcc-ada

Installation of the GNAT binary

Before unpacking and changing into the GCC source directory, first unpack the GNAT tarball, and change to the GNAT directory. Then, install the GNAT binary by running the following command as the root user:

make ins-all prefix=/opt/gnat

The GNAT compiler can be invoked by executing the gcc binary installed in /opt/gnat/bin.

You may now remove the GNAT source directory if desired.

Prepare to compile GCC by placing the GNAT version of gcc at the beginning of the PATH variable by using the following commands:

PATH_HOLD=$PATH &&
export PATH=/opt/gnat/bin:$PATH_HOLD

Doing so has the drawback that the GCC and Binutils executables are taken from the just installed GNAT package, but the versions of those executables are outdated compared to those installed in LFS. This is not important for the GCC compilers, since they recompile themselves during the bootstrap process. On the other hand, the outdated ld and as tools are used all along. In order to use the LFS tools, issue as the root user:

find /opt/gnat -name ld -exec mv -v {} {}.old \;
find /opt/gnat -name as -exec mv -v {} {}.old \;

Installation of GCC Ada

Install GCC Ada by running the following commands:

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

mkdir build &&
cd    build &&

../configure               \
    --prefix=/usr          \
    --disable-multilib     \
    --with-system-zlib     \
    --enable-languages=ada &&
make

If you have installed additional packages such as Valgrind and GDB, the GCC part of the testsuite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). To run the tests, issue:

ulimit -s 32768 &&
make -k check

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

../contrib/test_summary

Now, as the root user:

make install &&

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

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

You should now remove the GNAT installation and perform other cleanups. First, as the root user:

rm -rf /opt/gnat

Then, as a normal user:

export PATH=$PATH_HOLD &&
unset PATH_HOLD

Command Explanations

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

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

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

--enable-languages=ada: Instructs the build system to build the Ada tools and compiler. It is unavoidable that the C and C++ compilers be built too.

--with-default-libstdcxx-abi=gcc4-compatible: Use this switch if you are building GNAT tools using a GCC version prior to 5.1.0, and you do not want to recompile all the libraries written in C++.

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

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

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

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 and adalib directories (and their contents) will be incorrect. These commands change the ownership to the root user and group.

Contents

Installed Programs: gnat, gnatbind, gnatchop, gnatclean, gnatfind, gnatkr, gnatlink, gnatls, gnatmake, gnatname, gnatprep, gnatxref
Installed Libraries: libgnarl.{so,a}, libgnat.{so,a} in /usr/lib/gcc/<arch-triplet>/6.3.0/adalib
Installed Directories: /usr/lib/gcc/<arch-triplet>/6.3.0/ada{include,lib} and /usr/lib/gcc/<arch-triplet>/6.3.0/plugin/include/ada

Only the Ada specific files are listed here. Others can be found at ../../../../lfs/view/8.0/chapter06/gcc.html#contents-gcc as they were initially installed during the building of LFS.

Short Descriptions

gnat

is a wrapper that accepts a number of commands and calls the corresponding tool from the list below.

gnatbind

is used to bind compiled objects.

gnatchop

is useful for renaming files to meet the standard Ada default file naming conventions.

gnatclean

is used to remove files associated with a GNAT project.

gnatfind

is intended for locating definition and/or references to specified entities in a GNAT project.

gnatkr

is used to determine the crunched name for a given file, when crunched to a specified maximum length.

gnatlink

is used to link programs and build an executable file.

gnatls

is the compiled unit browser.

gnatmake

is the Ada compiler, which performs compilation, binding and linking.

gnatname

will list the files associated with a GNAT project.

gnatprep

is the GNAT external preprocessor.

gnatxref

is similar to gnatfind, but generates a full report of all cross-references.

Last updated on 2017-02-22 09:52:51 -0800

GC-7.6.0

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-8.0 platform.

Package Information

Required

libatomic_ops-7.4.4

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

Installation of GC

Install GC by running the following commands:

sed -i 's#pkgdata#doc#' doc/doc.am &&
autoreconf -fi  &&
./configure --prefix=/usr      \
            --enable-cplusplus \
            --disable-static   \
            --docdir=/usr/share/doc/gc-7.6.0 &&
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 &&
ln -sfv gc_malloc.3 /usr/share/man/man3/gc.3

Command Explanations

sed -i 's#pkgdata#doc#' doc/doc.am and --docdir=/usr/share/doc/gc-7.6.0: These commands are used so the package will install the documentation in a versioned directory.

autoreconf -fi: This regenerates the configure script and the Makefile.in files.

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

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

Contents

Installed Programs: None
Installed Libraries: libcord.so, libgc.so and libgccpp.so
Installed Directories: /usr/include/gc and /usr/share/doc/gc-7.6.0

Short Descriptions

libgc.so

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

libgccpp.so

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

Last updated on 2017-02-14 16:20:11 -0800

GDB-7.12.1

Introduction to GDB

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

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

Package Information

GDB Dependencies

Optional

DejaGnu-1.6 (for tests), Doxygen-1.8.13, Guile-2.0.14, Python-2.7.13, Valgrind-3.12.0, and SystemTap (run-time dependency, also used in a few tests)

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

Installation of GDB

Install GDB by running the following commands:

./configure --prefix=/usr --with-system-readline &&
make

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

make -C gdb/doc doxy

To test the results, issue:

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

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

  • Clean directories are needed if re-running the tests. For that reason, it is recommended to make a copy of the compiled source code directory before the tests in case you need to run the tests again.

  • Results depend on installed compilers.

  • There are a large number of timeouts (there is a variable that can be set to increase time for timeout, but changing it will result in a different number of tests being run).

  • There are failures associated with system readline 6.x.

  • A few tests assume that the header file <sys/sdt.h>, part of SystemTap, is present.

  • About 3% of the tests fail (out of over 35000 tests).

Now, as the root user:

make -C gdb install

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

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

Contents

Installed Programs: gcore, gdb and gdbserver
Installed Library: libinproctrace.so
Installed Directories: /usr/{include,share}/gdb and /usr/share/doc/gdb-7.12.1

Short Descriptions

gcore

generates a core dump of a running program.

gdb

is the GNU Debugger.

gdbserver

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

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.

Last updated on 2017-02-14 16:20:11 -0800

Git-2.11.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-4.1, Bazaar, Subversion-1.9.5, CVS, Perforce, and Team Foundation Server.

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

Package Information

Additional Downloads

Git Dependencies

Recommended
Optional

PCRE-8.40, Subversion-1.9.5 with Perl bindings (for git svn), Tk-8.6.6 (gitk, a simple Git repository viewer, uses Tk at runtime), and Valgrind-3.12.0

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

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

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

Installation of Git

Install Git by running the following commands:

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

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

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

make html

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

make man

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

Now, as the root user:

make install

If you created the man pages and/or html docs

Install the man pages as root user:

make install-man

Install the html docs as root user:

make htmldir=/usr/share/doc/git-2.11.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.11.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.11.1 &&
tar   -xf   ../git-htmldocs-2.11.1.tar.xz \
      -C    /usr/share/doc/git-2.11.1 --no-same-owner --no-overwrite-dir &&

find        /usr/share/doc/git-2.11.1 -type d -exec chmod 755 {} \; &&
find        /usr/share/doc/git-2.11.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.11.1/man-pages/{html,text}         &&
mv        /usr/share/doc/git-2.11.1/{git*.txt,man-pages/text}     &&
mv        /usr/share/doc/git-2.11.1/{git*.,index.,man-pages/}html &&

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

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

Command Explanations

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

--without-python: Use this switch if Python is not installed.

--with-libpcre: Use this switch if PCRE is installed.

tar -xf ../git-manpages-2.11.1.tar.gz -C /usr/share/man --no-same-owner: This untars git-manpages-2.11.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.11.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 and git-upload-archive (hardlinked to each other), git-cvsserver, git-shell, git-upload-pack, and gitk
Installed Libraries: None
Installed Directories: /usr/lib/perl5/site_perl/<5.x.y>{,<arch>-linux/auto}/Git, /usr/libexec/git-core and /usr/share/{doc/git-2.11.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.6).

git-receive-pack

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

git-shell

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

git-upload-archive

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

git-upload-pack

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

Last updated on 2017-02-15 18:28:58 -0800

Guile-2.0.14

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-8.0 platform.

Package Information

Guile Dependencies

Required

GC-7.6.0, libffi-3.2.1 and libunistring-0.9.7

Optional

Emacs-25.1 and GDB-7.12.1 (run-time only dependencies).

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

Installation of Guile

Install Guile by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/guile-2.0.14 &&
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

This package does not come with a test suite.

Now, as the root user:

make install      &&
make install-html &&

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

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

for DIRNAME in r5rs ref; do
  install -v -m644  doc/${DIRNAME}/*.txt \
                    /usr/share/doc/guile-2.0.14/${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-2.0.so and libguilereadline-v-18.so
Installed Directories: /usr/include/guile, /usr/lib/guile, /usr/share/doc/guile-2.0.14 and /usr/share/guile

Short Descriptions

guile

is a stand-alone Scheme interpreter for Guile.

guile-config

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

guile-snarf

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

guild

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

guile-tools

is a symlink to guild.

Last updated on 2017-02-14 16:20:11 -0800

Librep-0.92.6

Introduction to Librep

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

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

Package Information

Librep Dependencies

Optional

libffi-3.2.1

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

Installation of Librep

Install librep by running the following commands:

./autogen.sh --prefix=/usr --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: rep, rep-remote, rep-xgettext, and repdoc
Installed Libraries: librep.so and numerous modules installed in the /usr/lib/rep hierarchy
Installed Directories: /usr/lib/rep, /usr/share/emacs/site-lisp, and /usr/share/rep

Short Descriptions

rep

is the Lisp interpreter.

librep.so

contains the functions necessary for the Lisp interpreter.

Last updated on 2017-02-16 16:10:58 -0800

LLVM-3.9.1

Introduction to LLVM

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

The optional Clang and Compiler RT packages provide new C, C++, Objective C and Objective C++ front-ends and runtime libraries for the LLVM.

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

Package Information

  • Download (HTTP): http://llvm.org/releases/3.9.1/llvm-3.9.1.src.tar.xz

  • Download MD5 sum: 3259018a7437e157f3642df80f1983ea

  • Download size: 17 MB

  • Estimated disk space required: 2.2 GB (with Clang, add 7.3 GB for tests)

  • Estimated build time: 20 SBU (with Clang and parallelism=4, add 5 SBU for tests)

Optional Downloads

Clang
Compiler RT

LLVM Dependencies

Required

CMake-3.7.2

Recommended
Optional

Doxygen-1.8.13, Graphviz-2.38.0, libxml2-2.9.4, texlive-20160523b (or install-tl-unx), Valgrind-3.12.0, Zip-3.0, OCaml, and Sphinx

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

Installation of LLVM

If you have downloaded the optional packages, install them into the source tree by running the following commands:

tar -xf ../cfe-3.9.1.src.tar.xz -C tools &&
tar -xf ../compiler-rt-3.9.1.src.tar.xz -C projects &&

mv tools/cfe-3.9.1.src tools/clang &&
mv projects/compiler-rt-3.9.1.src projects/compiler-rt

Install LLVM by running the following commands:

mkdir -v build &&
cd       build &&

CC=gcc CXX=g++                              \
cmake -DCMAKE_INSTALL_PREFIX=/usr           \
      -DLLVM_ENABLE_FFI=ON                  \
      -DCMAKE_BUILD_TYPE=Release            \
      -DLLVM_BUILD_LLVM_DYLIB=ON            \
      -DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \
      -Wno-dev ..                           &&
make

If you have installed Sphinx and wish to generate the html documentation and manual pages, issue the following commands:

cmake -DLLVM_ENABLE_SPHINX=ON         \
      -DSPHINX_WARNINGS_AS_ERRORS=OFF \
      -Wno-dev ..                     &&
make docs-llvm-html  docs-llvm-man

If you have downloaded the optional packages, the clang documentation can be built too:

make docs-clang-html docs-clang-man

To test the results, issue: make check-all. Tests are run using the maximum number of processors/threads available. Note that the Address Sanitizer tests are known to fail currently.

Now, as the root user:

make install

If you have built the documentation, install it by running the following command as the root user:

install -v -m644 docs/man/* /usr/share/man/man1             &&
install -v -d -m755 /usr/share/doc/llvm-3.9.1/llvm-html     &&
cp -Rv docs/html/* /usr/share/doc/llvm-3.9.1/llvm-html

The clang documentation can be installed in the same way (again as the root user):

install -v -m644 tools/clang/docs/man/* /usr/share/man/man1 &&
install -v -d -m755 /usr/share/doc/llvm-3.9.1/clang-html    &&
cp -Rv tools/clang/docs/html/* /usr/share/doc/llvm-3.9.1/clang-html

Command Explanations

-DLLVM_ENABLE_FFI=ON: This switch enables LLVM to use libffi. Remove if you did not install libffi.

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

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

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

-DLLVM_LINK_LLVM_DYLIB=ON: Used in conjunction with -DLLVM_BUILD_LLVM_DYLIB=ON, this switch enables linking the tools against the shared library instead of the static ones.

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

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

Contents

Installed Programs: bugpoint, c-index-test, clang, clang++ (symlinks to clang-<version>), clang-<version>, clang-check, clang-cl, clang-format, git-clang-format, llc, lli, llvm-ar, llvm-as, llvm-bcanalyzer, llvm-config, llvm-cov, llvm-c-test, llvm-cxxdump, llvm-diff, llvm-dis, llvm-dsymutil, llvm-dwarfdump, llvm-dwp, llvm-extract, llvm-lib (symlink to llvm-ar), llvm-link, llvm-lto, llvm-mc, llvm-mcmarkup, llvm-nm, llvm-objdump, llvm-pdbdump, llvm-profdata, llvm-ranlib (symlink to llvm-ar), llvm-readobj, llvm-rtdyld, llvm-size, llvm-split, llvm-stress, llvm-symbolizer, llvm-tblgen, obj2yaml, opt, sancov, sanstats, scan-build, scan-view, verify-uselistorder, and yaml2obj
Installed Libraries: BugpointPasses.so, LLVMHello.so, libLLVM.so, libLLVM*.a (57 libraries), libLTO.so, libclang.so and libclang*.a (24 libraries)
Installed Directories: /usr/include/{clang,clang-c,llvm,llvm-c}, /usr/lib/{clang,cmake/{clang,llvm}} and /usr/share/{clang,scan-build,scan-view,doc/llvm-3.9.1}

Short Descriptions

bugpoint

is the automatic test case reduction tool.

clang

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

clang-format

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

llc

is the LLVM static compiler.

lli

is used to directly execute programs from LLVM bitcode.

llvm-ar

is the LLVM archiver.

llvm-as

is the LLVM assembler.

llvm-bcanalyzer

is the LLVM bitcode analyzer.

llvm-config

Prints LLVM compilation options.

llvm-cov

is used to emit coverage information.

llvm-c-test

is a bytecode disassembler.

llvm-cxxdump

is used as a C++ ABI Data Dumper.

llvm-diff

is the LLVM structural 'diff'.

llvm-dis

is the LLVM disassembler.

llvm-dsymutil

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

llvm-dwarfdump

prints the content of DWARF sections in object files.

llvm-dwp

merges split DWARF files.

llvm-extract

is used to extract a function from an LLVM module.

llvm-link

is the LLVM linker.

llvm-lto

is the LLVM LTO (link time optimization) linker.

llvm-mc

is a standalone machine code assembler/disassembler.

llvm-nm

is used to list LLVM bitcode and object file's symbol table.

llvm-objdump

is an LLVM object file dumper.

llvm-pdbdump

is used as PDB Dumper.

llvm-profdata

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

llvm-ranlib

is used to generate an index for a LLVM archive.

llvm-readobj

displays low-level format-specific information about object 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-symbolizer

converts adresses into source code locations.

llvm-tblgen

is the LLVM Target Description To C++ Code Generator.

obj2yaml

takes an object file,and produces a YAML representation of the file.

opt

is the LLVM optimizer.

sancov

is the sanitizer coverage processing tool.

sanstats

is the sanitizer statistics processing tool.

scan-build

is a Perl script that invokes the Clang static analyzer.

scan-view

is a viewer for Clang static analyzer results.

verify-uselistorder

is the LLVM tool to verify use-list order.

yaml2obj

takes a YAML representation of an object file and converts it to an binary file.

Last updated on 2017-02-14 22:04:32 -0800

Lua-5.3.4

Introduction to Lua

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

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

Package Information

  • Download (HTTP): http://www.lua.org/ftp/lua-5.3.4.tar.gz

  • Download MD5 sum: 53a9c68bcc0eda58bdc2095ad5cdfc63

  • Download size: 300 KB

  • Estimated disk space required: 2.8 MB (with Basic tests)

  • Estimated build time: less than 0.1 SBU (with Basic tests)

Additional Downloads

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

Installation of Lua

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

cat > lua.pc << "EOF"
V=5.3
R=5.3.4

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

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

Install Lua by running the following commands:

patch -Np1 -i ../lua-5.3.4-shared_library-1.patch &&
sed -i '/#define LUA_ROOT/s:/usr/local/:/usr/:' src/luaconf.h &&

make MYCFLAGS="-DLUA_COMPAT_5_2 -DLUA_COMPAT_5_1" 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.3 liblua.so.5.3.4" \
     install &&

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

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

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

Command Explanations

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

MYCFLAGS="-DLUA_COMPAT_5_2 -DLUA_COMPAT_5_1": This environment variable includes compatibility layers with Lua 5.1 and 5.2 in the build.

Contents

Installed Programs: lua and luac
Installed Library: liblua.so
Installed Directories: /usr/{lib,share}/lua and /usr/share/doc/lua-5.3.4

Short Descriptions

lua

is the standalone Lua interpreter.

luac

is the Lua compiler.

liblua.so

contains the Lua API functions.

Last updated on 2017-02-15 12:04:59 -0800

Mercurial-4.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 and Vim.

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

Package Information

Mercurial Dependencies

Required

Python-2.7.13

Optional

git-2.11.1, GnuPG-2.1.18 (gpg2 with Python bindings), OpenSSH-7.4p1 (runtime, to access ssh://... repositories), Subversion-1.9.5 (with Python bindings), Bazaar, CVS, Docutils (required to build the documentation), pyflakes, pygments, and pyOpenSSL

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

Installation of Mercurial

Build Mercurial by issuing the following command:

make build

To build the documentation (requires Docutils), issue:

make doc

To run the test suite, issue:

rm -rf tests/tmp &&

TESTFLAGS="-j<N> --tmpdir tmp --blacklist blacklists/failed-tests" \
make check

where <N> is an integer between one and the number of ( processor X threads ), inclusive. One test, test-largefiles-update.t, is known to fail.

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

make PREFIX=/usr install-bin

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

make PREFIX=/usr install-doc

After installed, two very quick and simple tests should run correctly. First one needs some configuration:

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

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

Configuring Mercurial

Config Files

/etc/mercurial/hgrc and ~/.hgrc

The great majority of extensions are disabled by default. Run hg help extensions if you need to enable any, e.g. when investigating test failures. You will obtain the lists of enabled and disabled extensions, and more information, such as how to enable or disable them using configuration files.

If you have installed the Certificate Authority Certificates and want Mercurial to use them, as the root user, issue:

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

Contents

Installed Programs: hg
Installed Libraries: several internal modules under /usr/lib/python2.7/site-packages/mercurial
Installed Directories: /etc/mercurial and /usr/lib/python2.7/site-packages/{hgext,hgext3rd,mercurial}

Short Descriptions

hg

is the program file for mercurial.

Last updated on 2017-02-22 11:24:59 -0800

NASM-2.12.02

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-8.0 platform.

Package Information

Additional Downloads

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

Installation of NASM

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

tar -xf ../nasm-2.12.02-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.12.02/html  &&
cp -v doc/html/*.html    /usr/share/doc/nasm-2.12.02/html  &&
cp -v doc/*.{txt,ps,pdf} /usr/share/doc/nasm-2.12.02       &&
cp -v doc/info/*         /usr/share/info                   &&
install-info /usr/share/info/nasm.info /usr/share/info/dir

Contents

Installed Programs: nasm and ndisasm
Installed Libraries: None
Installed Directory: /usr/share/doc/nasm-2.12.02

Short Descriptions

nasm

is a portable 80x86 assembler.

ndisasm

is an 80x86 binary file disassembler.

Last updated on 2017-02-15 14:01:44 -0800

Ninja-1.7.2

Introduction to Ninja

Ninja is a small build system with a focus on speed.

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

Note

Download this file via wget as:

wget https://github.com/ninja-build/ninja/archive/v1.7.2.tar.gz \
     -O ninja-1.7.2.tar.gz

Package Information

Ninja Dependencies

Required

Python-2.7.13

Optional

re2c (only needed to modify the build), Emacs-25.1 (to generate lisp files), asciidoc-8.6.9 (to build the manual), and Doxygen-1.8.13 (to build API documenatation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ninja

Installation of Ninja

Install Ninja by running the following commands:

./configure.py --bootstrap

If Emacs is installed and you wish to build lisp files:

emacs -Q --batch -f batch-byte-compile misc/ninja-mode.el

To test the results, issue the following commands:

./configure.py &&
./ninja ninja_test &&
./ninja_test --gtest_filter=-SubprocessTest.SetWithLots

Now, as the root user:

install -vm755 ninja /usr/bin/ &&
install -vDm644 misc/ninja.vim \
                /usr/share/vim/vim74/syntax/ninja.vim &&
install -vDm644 misc/bash-completion \
                /usr/share/bash-completion/completions/ninja &&
install -vDm644 misc/zsh-completion \
                /usr/share/zsh/site-functions/_ninja

If Emacs is installed, while still the root user:

install -vDm644 misc/ninja-mode.el \
                /usr/share/emacs/site-lisp/ninja-mode.el
install -vDm644 misc/ninja-mode.elc \
                /usr/share/emacs/site-lisp/ninja-mode.elc

If you have asciidoc-8.6.9 installed and wish to build the HTML manual, execute the following commands (as the root user):

ninja manual &&
install -vDm644 doc/manual.html /usr/share/doc/ninja-1.7.2/manual.html

If you have Doxygen-1.8.13 installed and wish to build the API documentation, execute the following commands (as the root user):

ninja doxygen &&
install -vDdm644 doc/doxygen/html/* /usr/share/doc/ninja-1.7.2/

Command Explanations

emacs -Q --batch -f batch-byte-compile misc/ninja-mode.el: regenerates the emacs lisp files.

Contents

Installed Programs: ninja
Installed Library: none
Installed Directories: /usr/share/doc/ninja-1.7.2

Short Descriptions

ninja

is the Ninja build system.

Last updated on 2017-02-22 11:24:59 -0800

NPAPI-SDK-0.27.2

Introduction to NPAPI-SDK

NPAPI-SDK is a bundle of Netscape Plugin Application Programming Interface headers by Mozilla. This package provides a clear way to install those headers and depend on them.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/NPAPI-SDK

Installation of NPAPI-SDK

Install NPAPI-SDK by running the following commands:

./configure --prefix=/usr

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/include/npapi-sdk

Last updated on 2017-02-22 11:24:59 -0800

Perl Modules

Introduction to Perl Modules

The Perl module packages add useful objects to the Perl language. Modules utilized by packages throughout BLFS are listed here, along with their dependencies. Installation of the modules shown on this page should be accomplished by installing the dependencies in the order listed. The Perl Module standard build and installation instructions are shown at the bottom of this page.

If a module is used by more than one other module on this page, but not by other packages in the book, it is listed by name here at the top level (but without a version) to slightly reduce the complexity of the XML source for this page.

Where a module is shown as '(for the testsuite)' it is required if you wish to run the test for the module which uses it. In these 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

For unversioned modules on this page, if you are building without using the CPAN automated install you should check when the current version was released. If it is recent you should review the 'Changes' link for it at http://search .cpan.org in case the dependencies have altered.

Archive::Zip-1.59

The Archive::Zip module allows a Perl program to create, manipulate, read, and write Zip archive files. This module uses the standard build and installation instructions.

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

autovivification-0.16

The autovivification module allows you to lexically disable autovivification. This module uses the standard build and installation instructions.

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

  • autovivification-0.16

  • http://www.cpan.org/authors/id/V/VP/VPIT/autovivification-0.16.tar.gz
    MD5 sum: 7e20817f6034910c1bc23351d81a0658

Business::ISBN-3.003

The Business::ISBN module is for work with International Standard Book Numbers. This module and its dependencies use the standard build and installation instructions.

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

Business::ISMN-1.131

The Business::ISMN module is for work with International Standard Music Numbers. This module uses the standard build and installation instructions.

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

  • Business::ISMN-1.131

  • http://search.cpan.org/CPAN/authors/id/B/BD/BDFOY/Business-ISMN-1.131.tar.gz
    MD5 sum: 87e36c8ccc9a9434494a849b7cf2fcc5

    • Tie::Cycle
      (http://search.cpan.org/~bdfoy/Tie-Cycle/)

Business::ISSN-1.002

The Business::ISSN module is for work with International Standard Serial Numbers. This module uses the standard build and installation instructions.

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

  • Business::ISSN-1.002

  • http://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISSN-1.002.tar.gz
    MD5 sum: c226db6cdb9dfe77d17ad1d540b49f47

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 module uses the standard build and installation instructions.

Class::Accessor-0.34

This module generators accessors/mutators for your class. It uses the standard build and installation instructions.

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

  • Class::Accessor-0.34

  • http://www.cpan.org/authors/id/K/KA/KASEI/Class-Accessor-0.34.tar.gz
    MD5 sum: 0d9640d237a13276145f7e44b4855b89

Data::Compare-1.25

The Data::Compare module compares two perl data structures. This module and its dependencies use the standard build and installation instructions.

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

  • Data::Compare-1.25

  • http://www.cpan.org/authors/id/D/DC/DCANTRELL/Data-Compare-1.25.tar.gz
    MD5 sum: 6a397ab5833237f3ca05ed7277b19a7a

Data::Dump-1.23

This module provides pretty printing of data structures. It uses the standard build and installation instructions.

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

  • Data::Dump-1.23

  • http://www.cpan.org/authors/id/G/GA/GAAS/Data-Dump-1.23.tar.gz
    MD5 sum: 762c111e525c82ff23d62c90821b26e9

Data::Uniqid-0.12

This module provides three simple routines for generating unique IDs. It uses the standard build and installation instructions but requires a patch because one of its tests fails in recent builds.

Additional Download

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

  • Data::Uniqid-0.12

  • http://www.cpan.org/authors/id/M/MW/MWX/Data-Uniqid-0.12.tar.gz
    MD5 sum: 6bab3b5da09fedfdf60ce2629a7367db

DateTime

DateTime provides a date and time object for perl. It and its dependencies use the standard build and installation instructions unless noted.

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

DateTime::Calendar::Julian-0.04

DateTime::Calendar::Julian implements the Julian Calendar. This module and its dependencies use the standard build and installation instructions unless noted.

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

DateTime::Format::Builder-0.81

DateTime::Format::Builder creates DateTime parser classes and objects. This module and its dependencies use the standard build and installation instructions unless noted.

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

Encode::EUCJPASCII-0.03

Encode::EUCJPASCII provides an eucJP-open (Extended Unix Code, Japanese) mapping. This module uses the standard build and installation instructions.

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

  • Encode::EUCJPASCII-0.03

  • http://www.cpan.org/authors/id/N/NE/NEZUMI/Encode-EUCJPASCII-0.03.tar.gz
    MD5 sum: 5daa65f55b7c2050bb0713d9e95f239d

Encode::HanExtra-0.23

The Encode::HanExtra module provides extra sets of Chinese Encodings. This module uses the standard build and installation instructions.

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

  • Encode::HanExtra-0.23

  • http://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz
    MD5 sum: e1d3bc32c1c8ee304235a06fbcd5d5a4

Encode::JIS2K-0.03

The Encode::JIS2K module provides JIS X 0212 (aka JIS 2000) Encodings. This module uses the standard build and installation instructions.

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

  • Encode::JIS2K-0.03

  • http://www.cpan.org/authors/id/D/DA/DANKOGAI/Encode-JIS2K-0.03.tar.gz
    MD5 sum: 60539471aa408a2b793cd45a6ce651db

File::BaseDir-0.07

The File::BaseDir module compares two perl data structures. This module and its dependencies use the standard build and installation instructions.

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

File::Slurp-9999.19

The File::Slurp module provides Simple and Efficient Reading/Writing/Modifying of Complete Files. This module uses the standard build and installation instructions.

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

  • File::Slurp-9999.19

  • http://www.cpan.org/authors/id/U/UR/URI/File-Slurp-9999.19.tar.gz
    MD5 sum: 7d584cd15c4f8b9547765eff8c4ef078

File::Which-1.21

File::Which provides a portable implementation of the 'which' utility. This module and its dependencies use the standard build and installation instructions.

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

  • File::Which-1.21

  • http://cpan.metacpan.org/authors/id/P/PL/PLICEASE/File-Which-1.21.tar.gz
    MD5 sum: 115a6efe5d7e9621237fcb655c7a0980

HTML::Parser-3.72

The HTML::Parser distribution is a collection of modules that parse and extract information from HTML documents. This module and the dependency modules use the standard build and installation instructions.

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

  • HTML::Parser-3.72

  • http://www.cpan.org/authors/id/G/GA/GAAS/HTML-Parser-3.72.tar.gz
    MD5 sum: eb7505e5f626913350df9dd4a03d54a8

    • HTML::Tagset
      (http://search.cpan.org/~petdance/HTML-Tagset/)

    • libwww-perl-6.19 (circular; howevever, it can be installed after HTML::Parser as it is only a run-time requirement for the included HTML::HeadParser module)

IPC::Run3-0.048

The IPC::Run3 module is used to run a subprocess with input/ouput redirection. This module uses the standard build and installation instructions.

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

  • IPC::Run3-0.048

  • http://www.cpan.org/authors/id/R/RJ/RJBS/IPC-Run3-0.048.tar.gz
    MD5 sum: 5a8cec571c51a118b265cf6e24e55761

libwww-perl-6.19 (a.k.a. Bundle::LWP)

The libwww-perl (Bundle::LWP) collection is a set of Perl modules which provide a simple and consistent application programming interface 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. The LWP collection and all its dependency modules use the standard build and installation instructions. The dependencies should be installed in the order listed below. Ensure you install the dependency chain for each module before installing the modules.

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

After the LWP installation, if you want HTTPS protocol support, install LWP::Protocol::https-6.06

Lingua::Translit-0.26 (Lingua::Translit)

Lingua::Translit and its translit program transliterate text between writing systems. This module uses the standard build and installation instructions.

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

  • Lingua::Translit-0.26

  • http://www.cpan.org/authors/id/A/AL/ALINKE/Lingua-Translit-0.26.tar.gz
    MD5 sum: fa13fd95053cafd590fef213477196d7

List::AllUtils-0.14

The List::Allutils module combines List::Util and List::MoreUtils in one bite-sized package. This module and its dependencies use the standard build and installation instructions.

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

List::MoreUtils-0.416

List::MoreUtils provides the stuff missing in List::Util. This module uses the standard build and installation instructions.

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

  • List::MoreUtils-0.416

  • http://www.cpan.org/authors/id/R/RE/REHSACK/List-MoreUtils-0.416.tar.gz
    MD5 sum: 0c5c4650eb52ed58cac67d81be1004f3

    • XSLoader
      (http://search.cpan.org/dist/XSLoader/)

      XSLoader is a core perl module, but the version in perl-5.24.1 is not new enough.

    • Exporter::Tiny
      (http://search.cpan.org/dist/Exporter-Tiny/) (for the testsuite)

Log::Log4perl-1.48

Log::Log4perl provides a Log4j implementation for perl. This module uses the standard build and installation instructions.

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

  • Log::Log4perl-1.48

  • http://www.cpan.org/authors/id/M/MS/MSCHILLI/Log-Log4perl-1.48.tar.gz
    MD5 sum: 3ebac0d6451886018857c9965f7726ed

LWP::Protocol::https-6.06

LWP::Protocol::https provides https support for LWP::UserAgent (i.e. for LWP). This module uses the standard build and installation instructions.

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

Module::Build-0.4220

Module::Build allows perl modules to be built without a make command being present. This module uses the standard build and installation instructions. If your version of perl is 5.20.2 or earlier, a version of this module was installed as part of the core perl distribution and you do not need to install a newer version.

Note

When creating the Makefile, this module will report

inc_bundling_support....disabled
  requires:
    ! inc::latest is not installed

but inc::latest is experimental and not needed.

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

  • Module::Build-0.4220

  • http://www.cpan.org/authors/id/L/LE/LEONT/Module-Build-0.4220.tar.gz
    MD5 sum: 9df204e188462a4410d496f316c2c531

Module::Implementation

Module::Implementation loads one of several alternate underlying implementation of a module (e.g. eXternal Subroutine or pure Perl, or an implementation for a given OS). This module and its dependencies use the standard build and installation instructions except where noted.

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

Module::Runtime

Module::Runtime provides functions to deal with runtime handling of Perl modules. This module itself uses the standard build and installation instructions.

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

Net::DNS-1.07

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. The Net::DNS module and all its dependencies are installed using the standard build and installation instructions.

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

  • Net::DNS-1.07

  • http://www.cpan.org/authors/id/N/NL/NLNETLABS/Net-DNS-1.07.tar.gz
    MD5 sum: 96c1a801cab92b81696a037c7c326e59

    • Digest::HMAC
      (http://search.cpan.org/~gaas/Digest-HMAC/) (for the testsuite)

    • IO::Socket::INET6
      (http://search.cpan.org/~shlomif/IO-Socket-INET6-2.72/) (required for IPv6 support)

      • Socket6
        (http://search.cpan.org/~umemoto/Socket6/)

    • IO
      (http://search.cpan.org/~gbarr/IO/)
      (for the IO::Socket module, which is a core module, but whose version is too old in 5.24.1)

Parse::Yapp-1.05

Parse::Yapp is a Perl extension for generating and using LALR parsers.. This module uses the standard build and installation instructions.

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

  • Parse::Yapp-1.05

  • http://www.cpan.org/authors/id/F/FD/FDESAR/Parse-Yapp-1.05.tar.gz
    MD5 sum: 7bfca736d6af36c51edf7a97111a8f3b

Regexp::Common-2016060801

Regexp::Common provides commonly requested regular expressions. This module uses the standard build and installation instructions.

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

  • Regexp::Common-2016060801

  • http://www.cpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2016060801.tar.gz
    MD5 sum: 566c7c851b6a1cbf1a82a5d3bc7d5d11

Scalar::List::Utils

Scalar::List::Utils provides a selection of list and scalar subroutines. This module uses the standard build and installation instructions.

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

  • Scalar::List::Utils
    (http://search.cpan.org/dist/Scalar-List-Utils/)

    This is a core module, but the version in perl-5.24.1 is not new enough for the packages which link to this module.

SGMLSpm-1.1

The SGMLSpm module is a Perl library used for parsing the output from James Clark's SGMLS and NSGMLS parsers. This modules uses the standard build and installation instructions.

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

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

chmod -v 644 MYMETA.yml

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

ln -sv sgmlspl.pl /usr/bin/sgmlspl
  • SGMLSpm-1.1

  • http://anduin.linuxfromscratch.org/BLFS/perl-modules/SGMLSpm-1.1.tar.gz
    MD5 sum: 746c74ae969992cedb1a2879b4168090

Sort::Key-1.33

Sort::Key provides a set of functions to sort lists of values by some calculated key value. This module uses the standard build and installation instructions.

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

  • Sort::Key-1.33

  • http://www.cpan.org/authors/id/S/SA/SALVA/Sort-Key-1.33.tar.gz
    MD5 sum: a37ab0da0cfdc26e57b4c79e39f6d98f

Sub::Identify

Sub::Identify allows you to retrieve the real names of code references. It uses the standard build and installation instructions.

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

Test::Command-0.11

This module tests the exit status, STDOUT, or STDERR, of an external command. This module uses the standard build and installation instructions.

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

  • Test::Command-0.11

  • http://www.cpan.org/authors/id/D/DA/DANBOO/Test-Command-0.11.tar.gz
    MD5 sum: 9ab83c4695961dbe92cd86efe08f0634

Test::Differences-0.64

Test::Differences - Test strings and data structures and show differences if not ok. This module and its dependency modules use the standard build and installation instructions.

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

Test::Fatal

The Test::Fatal module provides simple helpers for testing code which throws exceptions. This module uses the standard build and installation instructions.

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

Test::Requires

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

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

Test::Warnings

The Test::Warnings module tests for warnings and the lack of them. This module uses the standard build and installation instructions.

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

Text::BibTeX-0.78

Text::BibTeX provides an interface to read and parse BibTeX files. This module uses the instructions for packages using Build.PL, but except where noted, its dependencies are installed using the standard build and installation instructions.

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

Text::CSV-1.91

Text::CSV is a comma-separated values manipulator, using XS (eXternal Subroutine - for subroutines written in C or C++) or pure perl. This module uses the standard build and installation instructions.

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

  • Text::CSV-1.91

  • http://www.cpan.org/authors/id/I/IS/ISHIGAKI/Text-CSV-1.91.tar.gz
    MD5 sum: 2b8758372573c5488afa0f44bd584cc6

    • Text::CSV_XS
      (http://search.cpan.org/dist/Text-CSV_XS/)

      This is Recommended by Text-CSV but Required for biber-2.7.

      Note

      GNU tar dislikes Text-CSV_XS-1.26.tar.gz and reports it does not look like a tar file : decompress it with gunzip before extracting it.

Text::Roman-3.5

Text::Roman allows conversion between Roman and Arabic algorisms (number systems, e.g. MCMXLV and 1945). This module uses the standard build and installation instructions.

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

  • Text::Roman-3.5

  • http://www.cpan.org/authors/id/S/SY/SYP/Text-Roman-3.5.tar.gz
    MD5 sum: 1f6b09c0cc1f4425b565ff787a39fd83

Try::Tiny

The Try::Tiny module provides minimal try/catch with proper preservation of $0. This module uses the standard build and installation instructions.

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

  • Try::Tiny
    (http://search.cpan.org/dist/Try-Tiny/)

Unicode::Collate-1.19

Unicode::Collate provides a Unicode collation algorithm. This is a core perl module, but biber-2.7 needs a newer version. This module uses the standard build and installation instructions.

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

  • Unicode::Collate-1.19

  • http://www.cpan.org/authors/id/S/SA/SADAHIRO/Unicode-Collate-1.19.tar.gz
    MD5 sum: 6f9dcc7801fa2516993dcb59f8b61f6d

Unicode::LineBreak-2016.003

Unicode::LineBreak provides a UAX #14 Unicode Line Breaking Algorithm. This module and its dependencies use the standard build and installation instructions.

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

  • Unicode::LineBreak-2016.003

  • http://www.cpan.org/authors/id/N/NE/NEZUMI/Unicode-LineBreak-2016.003.tar.gz
    MD5 sum: 57dc12ff0511f9db95a2dbb6304342ca

    • MIME::Charset
      (http://search.cpan.org/dist/MIME-Charset/)
      When scripting, pipe the perl Makefile.PL command through yes "" |, since some user input is seeked

    • Wget-1.19.1 (to download two files from unicode.org in the testsuite)

URI-1.71

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 module uses the standard build and installation instructions.

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

  • URI-1.71

  • http://www.cpan.org/authors/id/E/ET/ETHER/URI-1.71.tar.gz
    MD5 sum: 247c3da29a794f72730e01aa5a715daf

XML::LibXML

The XML::LibXML is a perl binding for libxml2-2.9.4. This module uses the standard build and installation instructions.

Upstream blacklists the current version of libxml2-2.9.4 on the grounds of "schema regression" and the build will warn that the version of libxml2 is incompatible, but it appears to work.

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

XML::LibXML::Simple-0.97

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 module and all dependency modules use the standard build and installation instructions.

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

XML::LibXSLT-1.95

The XML::LibXSLT module provides an interface to libxslt. This module uses the standard build and installation instructions.

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

XML::SAX

XML::SAX provides a simple API for XML. This module uses the standard build and installation instructions.

Note: this module does not support parallel builds.

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

XML::Simple-2.22

The XML::Simple module is a Perl extension that provides an easy API to read and write XML (especially config files). This module and all dependency modules use the standard build and installation instructions.

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

  • XML::Simple-2.22

  • http://cpan.org/authors/id/G/GR/GRANTM/XML-Simple-2.22.tar.gz
    MD5 sum: 0914abddfce749453ed89b54029f2643

    • XML::SAX

    • XML::SAX::Expat
      (http://search.cpan.org/~bjoern/XML-SAX-Expat/)
      (Note: this package does not support parallel build)

    • XML::LibXML (recommended for faster parsing)

    • Tie::IxHash
      (http://search.cpan.org/~chorny/Tie-IxHash/)
      (optionally used in the test suite)

XML::Writer-0.625

XML::Writer provides a Perl extension for writing XML documents. This module uses the standard build and installation instructions.

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

  • XML::Writer-0.625

  • http://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-0.625.tar.gz
    MD5 sum: b9c2420c243c6a36ce45a008740fcede

Standard Installation of Perl Modules

Install Perl modules by running the following commands:

For Data::Uniqid-0.12, first apply the required patch with:

patch -Np1 -i ../Data-Uniqid-0.12-disable_failing_test-1.patch

Then, or for all other modules using the standard installation, proceed with:

perl Makefile.PL &&
make &&
make test

Now, as the root user:

make install

Note

When reinstalling a Perl module, sometimes older versions of the module being reinstalled are in other directories specified in @INC. To delete all other versions of the module being reinstalled (not simply older ones) set the UNINST variable:

make install UNINST=1

Installation of Perl Modules which use Build.PL

Before perl-5.22, Module::Build was part of the core distribution. Now it must be installed separately (see above) before any of the modules which use it can be built.

Install Perl modules which use Build.PL by running the following commands:

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

Now, as the root user:

./Build install

(Alternate) Auto Installation of Perl Modules.

There is an alternate way of installing the modules using the cpan shell install command. The command automatically downloads the source from the CPAN archive, extracts it, runs the compilation, testing and installation commands mentioned above, and removes the build source tree. You may still need to install dependent library packages before running the automated installation method.

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

Contents

Most of these modules only install into the perl directories, but a few will also install programs (mostly, perl scripts), or even a library, into /usr

Installed Programs: Archive::Zip: crc32 File::Find::Rule: findrule libwww-perl: lwp-download, lwp-dump, lwp-mirror, lwp-request Lingua::Translit: translit Log::Log4perl: l4p-tmpl Module::Build config_data Mojolicious hypnotoad, mojo, morbo Text::BibTeX: biblex, bibparse, dumpnames
Installed Libraries: Text::BibTeX: libbtparse.so

Short Descriptions

crc32

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

findrule

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

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.

translit

transliterates text between writing systems using various standards.

l4p-templ

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

config_data

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

hypnotoad

is an HTTP and WebSocket server.

mojo

is used to list and run Mojolicious commands.

morbo

is an HTTP and WebSocket development server.

biblex

performs lexical analysis on a BibTeX file.

bibparse

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

dumpnames

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

libbtparse.so

is a library for parsing and processing BibTeX data files.

Last updated on 2017-02-18 23:36:52 -0800

PHP-7.1.2

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-8.0 platform.

Package Information

  • Download (HTTP): http://www.php.net/distributions/php-7.1.2.tar.xz

  • Download MD5 sum: d79afea1870277c86fac903566fb6c5d

  • Download size: 12.2 MB

  • Estimated disk space required: 450 MB (add 2 MB for tests, add 106 MB for docs)

  • Estimated build time: 4.4 SBU (add 3.9 SBU for tests)

Additional Downloads

PHP Dependencies

Recommended
Optional System Utilities and Libraries

Aspell-0.60.6.1, enchant-1.6.0, libxslt-1.1.29, an MTA (that provides a sendmail command), PCRE-8.40, Pth-2.0.7, Dmalloc, Net-SNMP, OSSP mm, re2c, and XMLRPC-EPI

Optional Graphics Utilities and Libraries

FreeType-2.7.1, libexif-0.6.21, libjpeg-turbo-1.5.1, libpng-1.6.28, LibTIFF-4.0.7, X Window System, FDF Toolkit, GD, and t1lib

Optional Web Utilities

cURL-7.52.1, tidy-html5-5.2.0, Caudium, Hyperwave, mnoGoSearch, Roxen WebServer, and WDDX

Optional Data Management Utilities and Libraries

Berkeley DB-6.2.23 (Note that PHP does not officially support versions above 5.3), MariaDB-10.1.21 or MySQL, OpenLDAP-2.4.44, PostgreSQL-9.6.2, SQLite-3.17.0, unixODBC-2.3.4, Adabas, Birdstep, cdb, DBMaker, Empress, FrontBase, 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

OpenSSL-1.0.2k, Cyrus SASL-2.1.26, MIT Kerberos V5-1.15, libmcrypt, and mhash

User Notes: http://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 http://anduin.linuxfromscratch.org/BLFS/files/php_configure.txt.

If, for whatever reason, you don't have libxml2-2.9.4 installed, you need to add --disable-libxml to the configure command in the instructions below. Note that this will prevent the pear command from being built.

Install PHP by running the following commands:

./configure --prefix=/usr                \
            --sysconfdir=/etc            \
            --localstatedir=/var         \
            --datadir=/usr/share/php     \
            --mandir=/usr/share/man      \
            --enable-fpm                 \
            --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            \
            --with-readline              &&
make

To test the results, issue: make test. A few tests 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     &&
mv -v /etc/php-fpm.conf{.default,}                   &&

install -v -m755 -d /usr/share/doc/php-7.1.2 &&
install -v -m644    CODING_STANDARDS EXTENSIONS INSTALL NEWS README* UPGRADING* php.gif \
                    /usr/share/doc/php-7.1.2 &&
ln -v -sfn          /usr/lib/php/doc/Archive_Tar/docs/Archive_Tar.txt \
                    /usr/share/doc/php-7.1.2 &&
ln -v -sfn          /usr/lib/php/doc/Structures_Graph/docs \
                    /usr/share/doc/php-7.1.2

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-7.1.2 &&
gunzip -v /usr/share/doc/php-7.1.2/php_manual_en.html.gz

For the “Many HTML files” tarball:

tar -xvf ../php_manual_en.tar.gz \
    -C /usr/share/doc/php-7.1.2 --no-same-owner

Command Explanations

--datadir=/usr/share/php: This works around a bug in the build machinery, which installs some data to a wrong location.

--enable-fpm: This parameter allows building the fastCGI Process Manager.

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

Without the file /etc/php-fpm.d/www.conf, the process manager does not start. However, it is the file /etc/php-fpm.d/www.conf.default, that is installed. To solve this, issue as the root user:

cp -v /etc/php-fpm.d/www.conf.default /etc/php-fpm.d/www.conf

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.

You may have noticed the following from the output of the make install command:

You may want to add: /usr/lib/php to your php.ini include_path

If desired, add the entry using the following command as the root user:

sed -i 's@php/includes"@&\ninclude_path = ".:/usr/lib/php"@' \
    /etc/php.ini

To enable fastCGI support in the Apache web server, two LoadModule directives must be added to the httpd.conf file. They are commented out, so just issue the following command as root user:

sed -i -e '/proxy_module/s/^#//'      \
       -e '/proxy_fcgi_module/s/^#//' \
       /etc/httpd/httpd.conf

Those modules accept various ProxyPass directives. One possibility is (as the root user):

echo \
'ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/srv/www/$1' >> \
/etc/httpd/httpd.conf

Additionally, it may be useful to add an entry for index.php to the DirectoryIndex directive of the httpd.conf file. Lastly, adding a line to setup the .phps extension to show highlighted PHP source may be desirable:

AddType application/x-httpd-php-source .phps

You'll need to restart the Apache web server after making any modifications to the httpd.conf file.

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-20170225 package as the root user:

make install-php

Contents

Installed Programs: pear, peardev, pecl, phar (symlink), phar.phar, php, php-cgi, php-config, php-fpm, phpdbg, and phpize
Installed Libraries: dba.{so,a} and opcache.{so,a} in /usr/lib/php/extensions/no-debug-non-zts-20151012
Installed Directories: /etc/php-fpm.d, /usr/{include,lib,share}/php and /usr/share/doc/php-7.1.2

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.

php-fpm

is the fastCGI process manager for PHP.

phpdbg

is the interactive PHP debugger.

Last updated on 2017-02-19 11:32:33 -0800

Python-2.7.13

Introduction to Python 2

The Python 2 package contains the Python development environment. It is useful for object-oriented programming, writing scripts, prototyping large programs or developing entire applications. This version is for backward compatibility with other dependent packages.

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

Package Information

Additional Downloads

Optional HTML Documentation

Python 2 Dependencies

Recommended
Optional

BlueZ-5.43 and Valgrind-3.12.0

Optional (For Additional Modules)

OpenSSL-1.0.2k, SQLite-3.17.0 and Tk-8.6.6

Note

If you are building Thunderbird-45.7.1 or Firefox-51.0.1 you must install openssl before you build Python 2.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Python

Installation of Python 2

Install Python 2 by running the following commands:

./configure --prefix=/usr       \
            --enable-shared     \
            --with-system-expat \
            --with-system-ffi   \
            --with-ensurepip=yes \
            --enable-unicode=ucs4 &&
make

To test the results, issue: make -k test. One test fails for unknown reasons.

Now, as the root user:

make install &&
chmod -v 755 /usr/lib/libpython2.7.so.1.0

Since Python 2 is in maintenance mode, and Python 3 is recommended by upstream for development, you probably do not need to install the documentation. However, if you still want to install documentation for both Python versions, be sure to define the PYTHONDOCS variable for the version you want to use, each time you need to consult the documentation. If you have downloaded the preformatted documentation from http://docs.python.org/download.html, install it as the root user:

install -v -dm755 /usr/share/doc/python-2.7.13 &&

tar --strip-components=1                     \
    --no-same-owner                          \
    --directory /usr/share/doc/python-2.7.13 \
    -xvf ../python-2.7.13-docs-html.tar.bz2 &&

find /usr/share/doc/python-2.7.13 -type d -exec chmod 0755 {} \; &&
find /usr/share/doc/python-2.7.13 -type f -exec chmod 0644 {} \;

Command Explanations

--with-system-expat: This switch enables linking against system version of Expat.

--with-system-ffi: This switch enables linking against system version of libffi. Remove if you have not installed libffi-3.2.1.

--enable-unicode=ucs4: This switch enables 32bit Unicode support in Python.

--with-dbmliborder=bdb:gdbm:ndbm: Use this switch if you want to build Python DBM Module against Berkeley DB instead of GDBM.

chmod ...: Fix permissions for libraries to be consistent with other libraries.

Configuring Python 2

In order for python to find the installed documentation, you must add the following environment variable to individual user's or the system's profile:

export PYTHONDOCS=/usr/share/doc/python-2.7.13

Contents

Installed Programs: 2to3, pydoc, python (symlink), python-config (symlink), python2 (symlink), python2-config (symlink), python2.7, python2.7-config, smtpd.py, and idle
Installed Library: libpython2.7.so
Installed Directories: /usr/{include,lib}/python2.7 and /usr/share/doc/python-2.7.13

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.

idle

is a wrapper script that opens a Python aware GUI editor. For this script to run, you must have installed Tk before Python so that the Tkinter Python module is built.

pydoc

is the Python documentation tool.

python

is an interpreted, interactive, object-oriented programming language.

python2.7

is a version-specific name for the python program.

smtpd.py

is an SMTP proxy implemented in Python.

Last updated on 2017-02-15 16:04:09 -0800

Python-3.6.0

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.

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

Package Information

Additional Downloads

Optional HTML Documentation

Python 3 Dependencies

Recommended
Optional

BlueZ-5.43, GDB-7.12.1 (required for some tests), and Valgrind-3.12.0

Optional (For Additional Modules)

Berkeley DB-6.2.23, OpenSSL-1.0.2k, SQLite-3.17.0 and Tk-8.6.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Python3

Installation of Python 3

Install Python 3 by running the following commands:

CXX="/usr/bin/g++"              \
./configure --prefix=/usr       \
            --enable-shared     \
            --with-system-expat \
            --with-system-ffi   \
            --with-ensurepip=yes &&
make

The test suite must be run separately, using an X terminal (see below).

Now, as the root user:

make install &&
chmod -v 755 /usr/lib/libpython3.6m.so &&
chmod -v 755 /usr/lib/libpython3.so

If you have downloaded the preformatted documentation from http://docs.python.org/download.html, install it as the root user:

install -v -dm755 /usr/share/doc/python-3.6.0/html &&
tar --strip-components=1 \
    --no-same-owner \
    --no-same-permissions \
    -C /usr/share/doc/python-3.6.0/html \
    -xvf ../python-3.6.0-docs-html.tar.bz2

The test suite must be run separately from the build, either before or after the package is built and installed. Do not run make install, after running the test suite. To build and install the package, you need to start with a fresh or clean source tree. For the test, you also need a clean source code, so either start by removing the source code directory and starting over, by uncompressing the source tarball or by running make clean. Then configure again, adding “--with-pydebug” to the configure switches above, run make, then make test. Remember that tests must be executed using an X terminal. One test fails for unknown reasons.

Command Explanations

CXX="/usr/bin/g++" ./configure ...: Avoid an annoying message during configuration.

--with-system-expat: This switch enables linking against the system version of Expat.

--with-system-ffi: This switch enables linking against system version of libffi. Remove if you have not installed libffi-3.2.1.

--with-dbmliborder=bdb:gdbm:ndbm: Use this switch if you want to build Python DBM Module against Berkeley DB instead of GDBM.

chmod ...: Fix permissions for shared libraries to be consistent with other libraries.

Configuring Python 3

In order for python3 to find the installed documentation, create the following version independent symlink:

ln -svfn python-3.6.0 /usr/share/doc/python-3

and add the following environment variable to the individual user's or system's profile:

export PYTHONDOCS=/usr/share/doc/python-3/html

Contents

Installed Programs: 2to3 (symlink), 2to3-3.6, pydoc3 (symlink), pydoc3.6, python3 (symlink); python3.6 and python3.6m (hardlinked); python3-config (symlink), python3.6-config (symlink), python3.6m-config, pyvenv (symlink), pyvenv-3.6, idle3 (symlink), and idle3.6
Installed Libraries: libpython3.6m.so and libpython3.so
Installed Directories: /usr/include/python3.6m, /usr/lib/python3.6, and /usr/share/doc/python-3.6.0

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

is a version-specific name for the python program.

pyvenv

creates virtual Python environments in one or more target directories.

Last updated on 2017-02-15 16:04:09 -0800

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. Installation of the modules shown on this page is meant to follow from top to bottom to handle optional dependencies in each module.

D-Bus Python

Introduction to D-Bus Python Module

D-Bus Python provides Python bindings to the D-Bus.

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

Package Information
D-Bus Python Dependencies
Required

dbus-glib-0.108 and Python-2.7.13 and/or Python-3.6.0

Optional (Required to build the API and HTML Documentation)

Epydoc and Docutils

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dbus-python

Installation of D-Bus Python

Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To build D-Bus Python as the Python 2 module, run the following commands:

mkdir python2 &&
pushd python2 &&
PYTHON=/usr/bin/python     \
../configure --prefix=/usr --docdir=/usr/share/doc/dbus-python-1.2.4 &&
make &&
popd

To test the results, issue: make -C python2 check.

To build D-Bus Python as the Python 3 module, run the following commands:

mkdir python3 &&
pushd python3 &&
PYTHON=/usr/bin/python3    \
../configure --prefix=/usr --docdir=/usr/share/doc/dbus-python-1.2.4 &&
make &&
popd

To test the results, issue: make -C python3 check.

To install the Python 2 module, run the following command as the root user:

make -C python2 install

To install the Python 3 module, run the following command as the root user:

make -C python3 install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/doc/dbus-python-1.2.4 and /usr/lib/python2.7/site-packages/dbus and/or /usr/lib/python3.6/site-packages/dbus

PyAtSpi2-2.20.3

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-8.0 platform.

Package Information
PyAtSpi2 Dependencies
Required

PyGObject-3.22.0

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pyatspi2

Installation of PyAtSpi2

Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To build PyAtSpi2 as the Python 2 module, run the following commands:

mkdir python2 &&
pushd python2 &&
../configure --prefix=/usr --with-python=/usr/bin/python &&
make &&
popd

To build PyAtSpi2 as the Python 3 module, run the following commands:

mkdir python3 &&
pushd python3 &&
../configure --prefix=/usr --with-python=/usr/bin/python3 &&
make &&
popd

This package does not come with a testsuite.

To install the Python 2 module, run the following command as the root user:

make -C python2 install

To install the Python 3 module, run the following command as the root user:

make -C python3 install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/lib/python2.7/site-packages/pyatspi and/or /usr/lib/python3.6/site-packages/pyatspi

Py2cairo-1.10.0

Introduction to Py2cairo Module

Py2cairo provides Python 2 bindings to Cairo.

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

Package Information
Py2cairo Dependencies
Required

Python-2.7.13 and Cairo-1.14.8

Optional

pytest

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/py2cairo

Installation of Py2cairo

Install Py2cairo by running the following commands:

./waf configure --prefix=/usr &&
./waf build

The test suite must be run after the package is installed.

Now, as the root user:

./waf install

The test suite requires the optional pytest package. If installed, it is run by changing to the test directory and running py.test as an unprivileged user.

Contents

Installed Programs: None
Installed Library: _cairo.so
Installed Directory: /usr/include/pycairo and /usr/lib/python2.7/site-packages/cairo

PyCairo-1.10.0

Introduction to PyCairo Module

PyCairo provides Python 3 bindings to Cairo.

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

Package Information
Additional Downloads
PyCairo Dependencies
Required

Cairo-1.14.8 and Python-3.6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pycairo

Installation of PyCairo

Install PyCairo by running the following commands:

patch -Np1 -i ../pycairo-1.10.0-waf_unpack-1.patch     &&
wafdir=$(./waf unpack) &&
pushd $wafdir          &&
patch -Np1 -i ../../pycairo-1.10.0-waf_python_3_4-1.patch &&
popd                   &&
unset wafdir           &&
PYTHON=/usr/bin/python3 ./waf configure --prefix=/usr  &&
./waf build

This package does not come with a test suite.

Now, as the root user:

./waf install

Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/include/pycairo and /usr/lib/python3.6/site-packages/cairo

PyGObject-2.28.6

Introduction to PyGObject Module

PyGObject-2.28.6 provides Python 2 bindings to the GObject class from GLib.

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

Package Information
Additional Downloads
PyGObject Dependencies
Required

GLib-2.50.3 and Py2cairo-1.10.0

Optional

gobject-introspection-1.50.0 and libxslt-1.1.29 (to Build Documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pygobject2

Installation of PyGObject

Install PyGObject by running the following commands:

patch -Np1 -i ../pygobject-2.28.6-fixes-1.patch   &&
./configure --prefix=/usr --disable-introspection &&
make

This package does not have a working testsuite.

Now, as the root user:

make install

Command Explanations

--disable-introspection: Omit this switch if you have installed gobject-introspection-1.50.0. Note that it conflicts with PyGObject-3.22.0.

--disable-docs: This option disables the rebuilding of the html documentation if libxslt-1.1.29 is installed.

Contents

Installed Programs: pygobject-codegen-2.0
Installed Libraries: libpyglib-2.0-python.so, _gio.so, unix.so, _glib.so and _gobject.so.
Installed Directories: /usr/include/pygtk-2.0, /usr/lib/python2.7/site-packages/gtk-2.0/{gio,glib,gobject}, /usr/share/gtk-doc/html/pygobject and /usr/share/pygobject/2.0

PyGObject-3.22.0

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-8.0 platform.

Package Information
PyGObject3 Dependencies
Required

gobject-introspection-1.50.0 and Py2cairo-1.10.0 (for Python 2 bindings) and/or PyCairo-1.10.0 (for Python 3 bindings)

Optional (for the tests)

pep8 and pyflakes

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pygobject3

Installation of PyGObject3

Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To build PyGObject3 as the Python 2 module, run the following commands:

mkdir python2 &&
pushd python2 &&
../configure --prefix=/usr --with-python=/usr/bin/python &&
make &&
popd

To test the results, issue: make -C python2 check. An already active graphical session with bus address is necessary to run the tests.

To build PyGObject3 as the Python 3 module, run the following commands:

mkdir python3 &&
pushd python3 &&
../configure --prefix=/usr --with-python=/usr/bin/python3 &&
make &&
popd

To test the results, issue: make -C python3 check. An already active graphical session with bus address is necessary to run the tests.

To install the Python 2 module, run the following command as the root user:

make -C python2 install

To install the Python 3 module, run the following command as the root user:

make -C python3 install

Contents

Installed Programs: None
Installed Library: /usr/lib/python2.7/site-packages/gi/_gi{,_cairo}.so and/or /usr/lib/python3.6/site-packages/gi/_gi{,_cairo}.cpython-35m-<arch>-linux-gnu.so
Installed Directories: /usr/include/pygobject-3.0, and /usr/lib/python2.7/site-packages/{gi,pygtkcompat} and/or /usr/lib/python3.6/site-packages/{gi,pygtkcompat}

PyGTK-2.24.0

Introduction to PyGTK Module

PyGTK lets you to easily create programs with a graphical user interface using the Python programming language.

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

Package Information
PyGTK Dependencies
Required

PyGObject-2.28.6

Required (atk module)

ATK-2.22.0

Required (pango module)

Pango-1.40.3

Required (pangocairo module)

Py2cairo-1.10.0 and Pango-1.40.3

Required (gtk and gtk.unixprint modules)

Py2cairo-1.10.0 and GTK+-2.24.31.

Required (gtk.glade module)

Py2cairo-1.10.0 and libglade-2.6.4.

Optional

NumPy

Optional (to Build Documentation)

libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pygtk

Installation of PyGTK

Install PyGTK by running the following commands:

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

The tests must be run from an active X display. If this is so, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-docs: This option enables rebuilding the html documentation if libxslt-1.1.29 is installed.

Contents

Installed Programs: pygtk-codegen-2.0 and pygtk-demo.
Installed Libraries: atk.so, _gtk.so, glade.so, gtkunixprint.so, pango.so and pangocairo.so.
Installed Directories: /usr/include/pygtk-2.0, /usr/lib/pygtk, /usr/lib/python2.7/site-packages/gtk-2.0, /usr/share/gtk-doc/html/pygtk and /usr/share/pygtk.
Short Descriptions

pygtk-codegen-2.0

is a wrapper script to run the PyGTK codegen module.

pygtk-demo

is a Python wrapper to run the PyGTK demo program.

PyXDG-0.25

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-8.0 platform.

Package Information
PyXDG Dependencies
Required

Python-2.7.13 and/or Python-3.6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pyxdg

Installation of PyXDG

Note

Both Python 2 and Python 3 modules can be built and installed without any conflicts.

To install the Python 2 module, run the following command as the root user:

python setup.py install --optimize=1

To install the Python 3 module, run the following command as the root user:

python3 setup.py install --optimize=1

Contents

Installed Directory: /usr/lib/python2.7/site-packages/xdg and/or /usr/lib/python3.6/site-packages/xdg

Last updated on 2017-02-15 16:04:09 -0800

Ruby-2.4.0

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-8.0 platform.

Package Information

  • Download (HTTP): http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.xz

  • Download MD5 sum: 6a2ab52f161bb9e10596ab4330c50564

  • Download size: 9.4 MB

  • Estimated disk space required: 335 MB, with checks (add 247 MB for C API docs)

  • Estimated build time: 2.4 SBU, with checks (add 0.5 SBU for C API docs)

Ruby Dependencies

Optional

Berkeley DB-6.2.23, Doxygen-1.8.13, Graphviz-2.38.0, libffi-3.2.1, OpenSSL-1.0.2k, Tk-8.6.6, Valgrind-3.12.0, and YAML-0.1.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ruby

Installation of Ruby

Install Ruby by running the following command:

./configure --prefix=/usr   \
            --enable-shared \
            --docdir=/usr/share/doc/ruby-2.4.0 &&
make

Optionally, build the CAPI documents by running the following commands:

make capi

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-shared: This switch enables building of the libruby shared library.

--disable-install-doc: This switch disables building and installing rdoc indexes and C API documents.

--disable-install-rdoc: This switch disables building and installing rdoc indexes.

--disable-install-capi: This switch disables building and installing C API documents.

Contents

Installed Programs: erb, gem, irb, rake, rdoc, ri, and ruby
Installed Libraries: libruby.so and libruby-static.a
Installed Directories: /usr/include/ruby-2.4.0 /usr/lib/ruby, /usr/share/doc/ruby-2.4.0 and /usr/share/ri

Short Descriptions

erb

is Tiny eRuby. It interprets a Ruby code embedded text file.

gem

command for RubyGems - a sophisticated package manager for Ruby.

irb

is the interactive interface for Ruby.

rake

a make-like build utility for Ruby.

rdoc

generates Ruby documentation.

ri

displays documentation from a database on Ruby classes, modules, and methods.

ruby

is an interpreted scripting language for quick and easy object-oriented programming.

libruby.so

contains the API functions required by Ruby.

Last updated on 2017-02-15 18:28:58 -0800

SCons-2.5.1

Introduction to SCons

SCons is a tool for building software (and other files) implemented in Python.

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

Package Information

SCons Dependencies

Required

Python-2.7.13

Optional

docbook-xsl-1.79.1, libxml2-2.9.4, and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/scons

Installation of SCons

Install SCons by running the following commands as the root user:

python setup.py install --prefix=/usr  \
                        --standard-lib \
                        --optimize=1   \
                        --install-data=/usr/share

Contents

Installed Programs: scons, scons-2.5.1, sconsign, sconsign-2.5.1, scons-time, and scons-time-2.5.1
Installed Libraries: None
Installed Directory: /usr/lib/python2.7/site-packages/SCons

Short Descriptions

scons

is a software construction tool.

sconsign

prints SCons .sconsign file information.

scons-time

generates and displays SCons timing information.

Last updated on 2017-02-14 19:04:01 -0800

slang-2.3.1

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-8.0 platform.

Package Information

Slang Dependencies

Optional

libpng-1.6.28, PCRE-8.40, and Oniguruma

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/slang

Installation of Slang

Note

This package does not support parallel build.

Install slang by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --with-readline=gnu &&
make -j1

To test the results, issue: make check. Note that this will also create a static version of the library which will then be installed in the next step.

Now, as the root user:

make install_doc_dir=/usr/share/doc/slang-2.3.1   \
     SLSH_DOC_DIR=/usr/share/doc/slang-2.3.1/slsh \
     install-all &&

chmod -v 755 /usr/lib/libslang.so.2.3.1 \
             /usr/lib/slang/v2/modules/*.so

Command Explanations

--with-readline=gnu: This parameter sets GNU Readline to be used by the parser interface instead of the slang internal version.

make install_doc_dir=/usr/share/doc/slang-2.3.1 SLSH_DOC_DIR=/usr/share/doc/slang-2.3.1/slsh install-all: This command installs the static library as well as the dynamic shared version and related modules. It also changes the documentation installation directories to a versioned directory.

Configuring slang

Config Files

~/.slshrc and /etc/slsh.rc

Contents

Installed Program: slsh
Installed Libraries: libslang.{so,a} and numerous support modules
Installed Directories: /usr/lib/slang, /usr/share/doc/slang-2.3.1 and /usr/share/slsh

Short Descriptions

slsh

is a simple program for interpreting slang scripts. It supports dynamic loading of slang modules and includes a Readline interface for interactive use.

Last updated on 2017-02-15 19:06:46 -0800

Subversion-1.9.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-8.0 platform.

Package Information

  • Download (HTTP): http://www.apache.org/dist/subversion/subversion-1.9.5.tar.bz2

  • Download MD5 sum: 9fcbae352a5efe73d46a88c97c6bba14

  • Download size: 7.5 MB

  • Estimated disk space required: 177 MB (add 173 MB for bindings, 24 MB for docs, 1 GB for tests)

  • Estimated build time: 1.3 SBU (add 1.4 SBU for bindings, 24 SBU for tests)

Subversion Dependencies

Required

Apr-Util-1.5.4 and SQLite-3.17.0

Recommended
Optional

Apache-2.4.25, Cyrus SASL-2.1.26, dbus-1.10.14, Python-2.7.13 (with sqlite support for the tests), Ruby-2.4.0, and SWIG-3.0.12 (for building Perl, Python and Ruby bindings)

Optional (for the Java Bindings)

One of OpenJDK-1.8.0.121, Dante or Jikes, and JUnit-4.11 (to test the Java bindings)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/subversion

Installation of Subversion

Note

This package may fail during the make phase when using multiple processors. If this occurs try continuing with make -j1 or redo the entire build process with fresh sources using -j1.

Install Subversion by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --with-apache-libexecdir &&
make

If you have Doxygen-1.8.13 installed and you wish to build the API documentation, issue: doxygen doc/doxygen.conf.

If you passed the --enable-javahl parameter to configure and wish to build the Java bindings, issue the following command:

make javahl

If you want to compile Perl, Python2, or Ruby bindings, issue any of the following command:

make swig-pl # for Perl
make swig-py \
     swig_pydir=/usr/lib/python2.7/site-packages/libsvn \
     swig_pydir_extra=/usr/lib/python2.7/site-packages/svn # for Python
make swig-rb # for Ruby

To test the results, issue: make check.

To test the results of the Java bindings build, issue make check-javahl. The JUnit testing framework must be installed, and the location of the JUnit jar has to be specified by passing the --with-junit=<path to junit jar> parameter to configure.

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.9.5 &&
cp      -v -R       doc/* \
                    /usr/share/doc/subversion-1.9.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, Python2, 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/python2.7/site-packages/libsvn \
      swig_pydir_extra=/usr/lib/python2.7/site-packages/svn
make install-swig-rb

Command Explanations

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

--with-apache-libexecdir: If Apache-2.4.25 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.

--enable-javahl: enables compilation of Java high level bindings. Running make javahl is necessary to do the compilation.

--with-junit=<location of the junit jar file>: gives the location of the junit jar, otherwise the javahl tests cannot be run.

--disable-gmock: Do not use the Googlemock testing framework.

Configuring Subversion

Config Files

~/.subversion/config and /etc/subversion/config

Configuration Information

/etc/subversion/config is the Subversion system-wide configuration file. This file is used to specify defaults for different svn commands.

~/.subversion/config is the user's personal configuration file. It is used to override the system-wide defaults set in /etc/subversion/config.

Contents

Installed Programs: svn, svnadmin, svnbench, svndumpfilter, svnfsfs, svnlook, svnmucc, svnrdump, svnserve, svnsync, and svnversion
Installed Libraries: libsvn_*-1.so and optionally, a Java library, the mod_dav_svn.so and and mod_authz_svn.so Apache HTTP DSO modules and various Perl, Python and Ruby modules.
Installed Directories: /usr/include/subversion-1, /usr/lib/perl5/site_perl/<5.x.y>/<arch-linux>/{,auto/}SVN, /usr/lib/python2.7/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.9.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.

Last updated on 2017-02-14 19:04:01 -0800

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.9.5 and OpenSSH-7.4p1

Setting up a Subversion Server.

The following instructions will install a Subversion server, which will be set up to use OpenSSH as the secure remote access method, with svnserve available for anonymous access.

Configuration of the Subversion server consists of the following steps:

1. Setup Users, Groups, and Permissions

You'll need to be user root for the initial portion of configuration. Create the svn user and group with the following commands:

groupadd -g 56 svn &&
useradd -c "SVN Owner" -d /home/svn -m -g svn -s /bin/false -u 56 svn

If you plan to have multiple repositories, you should have a group dedicated to each repository for ease of administration. Create the svntest group for the test repository and add the svn user to that group with the following commands:

groupadd -g 57 svntest &&
usermod -G svntest -a svn

Additionally you should set umask 002 while working with a repository so that all new files will be writable by owner and group. This is made mandatory by creating a wrapper script for svn and svnserve:

mv /usr/bin/svn /usr/bin/svn.orig &&
mv /usr/bin/svnserve /usr/bin/svnserve.orig &&
cat >> /usr/bin/svn << "EOF"
#!/bin/sh
umask 002
/usr/bin/svn.orig "$@"
EOF
cat >> /usr/bin/svnserve << "EOF"
#!/bin/sh
umask 002
/usr/bin/svnserve.orig "$@"
EOF
chmod 0755 /usr/bin/svn{,serve}

Note

If you use Apache for working with the repository over HTTP, even for anonymous access, you should wrap /usr/sbin/httpd in a similar script.

2. Create a Subversion repository.

There are several ways to set up a subversion repository. It is recommended to have a look at the SVN Book corresponding chapter. A basic repository can be set up with the instructions below.

Create a new Subversion repository with the following commands (as the root user):

install -v -m 0755 -d /srv/svn &&
install -v -m 0755 -o svn -g svn -d /srv/svn/repositories &&
svnadmin create /srv/svn/repositories/svntest

Now that the repository is created, it should be populated with something useful. You'll need to have a predefined directory layout set up exactly as you want your repository to look. For example, here is a sample BLFS layout setup with a root of svntest/. You'll need to setup a directory tree similar to the following:

svntest/            # The name of the repository
   trunk/           # Contains the existing source tree
      BOOK/
      bootscripts/
      edguide/
      patches/
      scripts/
   branches/        # Needed for additional branches
   tags/            # Needed for tagging release points

Once you've created your directory layout as shown above, you are ready to do the initial import:

svn import -m "Initial import." \
    </path/to/source/tree>      \
    file:///srv/svn/repositories/svntest

Now change owner and group information on the repository, and add an unprivileged user to the svn and svntest groups:

chown -R svn:svntest /srv/svn/repositories/svntest    &&
chmod -R g+w         /srv/svn/repositories/svntest    &&
chmod g+s            /srv/svn/repositories/svntest/db &&
usermod -G svn,svntest -a <username>

svntest is the group assigned to the svntest repository. As mentioned earlier, this eases administration of multiple repositories when using OpenSSH for authentication. Going forward, you'll need to add your unprivileged user, and any additional users that you wish to have write access to the repository, to the svn and svntest groups.

In addition, you'll notice that the new repository's db directory is set-groupID. If the reasoning is not immediately obvious, when using any external authentication method (such as ssh), the sticky bit is set so that all new files will be owned by the user, but group of svntest. Anyone in the svntest group can create files, but still give the entire group write access to those files. This avoids locking out other users from the repository.

Now, return to an unprivileged user account, and take a look at the new repository using svnlook:

svnlook tree /srv/svn/repositories/svntest/

Note

You may need to log out and back in again to refresh your group memberships. 'su <username>' should work as well.

3. Configure the Server

As mentioned previously, these instructions will configure the server to use only ssh for write access to the repository and to provide anonymous access using svnserve. There are several other ways to provide access to the repository. These additional configurations are best explained at http://svnbook.red-bean.com/.

Access configuration needs to be done for each repository. Create the svnserve.conf file for the svntest repository using the following commands:

cp /srv/svn/repositories/svntest/conf/svnserve.conf \
   /srv/svn/repositories/svntest/conf/svnserve.conf.default &&

cat > /srv/svn/repositories/svntest/conf/svnserve.conf << "EOF"
[general]
anon-access = read
auth-access = write
EOF

There is not a lot to the configuration file at all. You'll notice that only the general section is required. Take a look at the svnserve.conf.default file for information on using svnserve's built-in authentication method.

4. Starting the Server

To start the server at boot time, install the svn bootscript included in the blfs-bootscripts-20170225 package.

make install-svn

Last updated on 2016-06-08 20:56:23 -0700

SWIG-3.0.12

Introduction to SWIG

SWIG (Simplified Wrapper and Interface Generator) is a compiler that integrates C and C++ with languages including Perl, Python, Tcl, Ruby, PHP, Java, C#, D, Go, Lua, Octave, R, Scheme, Ocaml, Modula-3, Common Lisp, and Pike. 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-8.0 platform.

Package Information

SWIG Dependencies

Required

PCRE-8.40

Optional

Boost-1.63.0 for tests, and any of the languages mentioned in the introduction, as run-time dependencies

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/swig

Installation of SWIG

Install SWIG by running the following commands:

./configure --prefix=/usr                      \
            --without-clisp                    \
            --without-maximum-compile-warnings &&
make

To test the results, issue: make -k check TCL_INCLUDE= GOGCC=true. The (un)setting of the two variables GOGCC and TCL_INCLUDE is necessary, since they are 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. If you have both Python-2.7.13 and Python-3.6.0 installed, the Python-3 tests are not run. You can run tests for Python-3 by issuing PY3=1 make check-python-examples followed by PY3=1 make check-python-test-suite. According to SWIG's documentation, the failure of some tests should not be considered harmful.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/swig-3.0.12 &&
cp -v -R Doc/* /usr/share/doc/swig-3.0.12

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. We use it for Clisp, because the SWIG implementation is very incomplete and a lot of tests fail.

Contents

Installed Programs: swig and ccache-swig
Installed Library: None
Installed Directories: /usr/share/doc/swig-3.0.12 and /usr/share/swig

Short Descriptions

swig

takes an interface file containing C/C++ declarations and SWIG special instructions, and generates the corresponding wrapper code needed to build extension modules.

ccache-swig

is a compiler cache, which speeds up re-compilation of C/C++/SWIG code.

Last updated on 2017-02-15 18:28:58 -0800

Tcl-8.6.6

Introduction to Tcl

The Tcl package contains the Tool Command Language, a robust general-purpose scripting language.

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

Package Information

Additional Downloads

Optional Documentation

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tcl

Installation of Tcl

This package is also installed in LFS during the bootstrap phase. As it is not installed during Chapter 6 of LFS, installation instructions are included here in BLFS.

If you downloaded the optional documentation, unpack the tarball by issuing the following command:

tar -xf ../tcl8.6.6-html.tar.gz --strip-components=1

Install Tcl by running the following commands:

export SRCDIR=`pwd` &&

cd unix &&

./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&
make &&

sed -e "s#$SRCDIR/unix#/usr/lib#" \
    -e "s#$SRCDIR#/usr/include#"  \
    -i tclConfig.sh               &&

sed -e "s#$SRCDIR/unix/pkgs/tdbc1.0.4#/usr/lib/tdbc1.0.4#" \
    -e "s#$SRCDIR/pkgs/tdbc1.0.4/generic#/usr/include#"    \
    -e "s#$SRCDIR/pkgs/tdbc1.0.4/library#/usr/lib/tcl8.6#" \
    -e "s#$SRCDIR/pkgs/tdbc1.0.4#/usr/include#"            \
    -i pkgs/tdbc1.0.4/tdbcConfig.sh                        &&

sed -e "s#$SRCDIR/unix/pkgs/itcl4.0.5#/usr/lib/itcl4.0.5#" \
    -e "s#$SRCDIR/pkgs/itcl4.0.5/generic#/usr/include#"    \
    -e "s#$SRCDIR/pkgs/itcl4.0.5#/usr/include#"            \
    -i pkgs/itcl4.0.5/itclConfig.sh                        &&

unset SRCDIR

To test the results, issue: make test.

Now, as the root user:

make install &&
make install-private-headers &&
ln -v -sf tclsh8.6 /usr/bin/tclsh &&
chmod -v 755 /usr/lib/libtcl8.6.so

If you downloaded the optional documentation, install it by issuing the following commands as the root user:

mkdir -v -p /usr/share/doc/tcl-8.6.6 &&
cp -v -r  ../html/* /usr/share/doc/tcl-8.6.6

Command Explanations

$([ $(uname -m) = x86_64 ] && echo --enable-64bit): This switch is used to enable 64 bit support in Tcl on 64 bit operating systems.

make install-private-headers: This command is used to install the Tcl library interface headers used by other packages if they link to the Tcl library.

ln -v -sf tclsh8.6 /usr/bin/tclsh: This command is used to create a compatibility symbolic link to the tclsh8.6 file as many packages expect a file named tclsh.

sed -e ...: The Tcl package expects that its source tree is preserved so that packages depending on it for their compilation can utilize it. These sed remove the references to the build directory and replace them with saner system-wide locations.

Contents

Installed Programs: tclsh and tclsh8.6
Installed Libraries: libtcl8.6.so and libtclstub8.6.a
Installed Directories: /usr/lib/itcl4.0.1, /usr/lib/sqlite3.8.6 /usr/lib/tcl8, /usr/lib/tcl8.6, /usr/lib/tdbc1.0.1, /usr/lib/tdbcmysql1.0.1, /usr/lib/tdbcodbc1.0.1, /usr/lib/tdbcpostgres1.0.1, /usr/lib/thread2.7.1, /usr/share/doc/tcl-8.6.6, and /usr/share/man/mann

Short Descriptions

tclsh

is a symlink to the tclsh8.6 program.

tclsh8.6

is a simple shell containing the Tcl interpreter.

libtcl8.6.so

contains the API functions required by Tcl.

Last updated on 2017-02-14 16:20:11 -0800

Tk-8.6.6

Introduction to Tk

The Tk package contains a TCL GUI Toolkit.

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

Package Information

Tk Dependencies

Required

Tcl-8.6.6 and Xorg Libraries

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tk

Installation of Tk

Install Tk by running the following commands:

cd unix &&
./configure --prefix=/usr \
            --mandir=/usr/share/man \
            $([ $(uname -m) = x86_64 ] && echo --enable-64bit) &&

make &&

sed -e "s@^\(TK_SRC_DIR='\).*@\1/usr/include'@" \
    -e "/TK_B/s@='\(-L\)\?.*unix@='\1/usr/lib@" \
    -i tkConfig.sh

Running the tests is not recommended. Failures will be reported during the tests, depending on the screen resolution/capabilities, fonts installed and other X related parameters, but the end report can show 0 failures. Some tests will steal focus and some might crash your X Server. To test the results anyway, issue: make test. Ensure you run it from an X Window display device with the GLX extensions loaded, but even so, tests might hang.

Now, as the root user:

make install &&
make install-private-headers &&
ln -v -sf wish8.6 /usr/bin/wish &&
chmod -v 755 /usr/lib/libtk8.6.so

Command Explanations

$([ $(uname -m) = x86_64 ] && echo --enable-64bit): This switch is used to enable 64 bit support in Tk on 64 bit operating systems.

make install-private-headers: This command is used to install the Tk library interface headers used by other packages if they link to the Tk library.

ln -v -sf wish8.6 /usr/bin/wish: This command is used to create a compatibility symbolic link to the wish8.6 file as many packages expect a file named wish.

sed -e ... tkConfig.sh: The Tk package expects that its source tree is preserved so that packages depending on it for their compilation can utilize it. This sed removes the references to the build directory and replaces them with saner system-wide locations.

Contents

Installed Programs: wish and wish8.6
Installed Libraries: libtk8.6.so and libtkstub8.6.a
Installed Directory: /usr/lib/tk8.6

Short Descriptions

wish

is a symlink to the wish8.6 program.

wish8.6

is a simple shell containing the Tk toolkit that creates a main window and then processes Tcl commands.

libtk8.6.so

contains the API functions required by Tk.

Last updated on 2017-02-15 19:06:46 -0800

Vala-0.34.4

Introduction to Vala

Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.

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

Package Information

Vala Dependencies

Required

GLib-2.50.3

Optional

dbus-1.10.14 (Required for the tests) and libxslt-1.1.29 (Required for generating the documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vala

Installation of Vala

Install Vala by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: vala, valac, vala-gen-introspect, vapicheck, and vapigen (symlinks); vala-0.34, valac-0.34, vala-gen-introspect-0.34, vapicheck-0.34, and vapigen-0.34
Installed Library: libvala-0.34.so
Installed Directories: /usr/include/vala-0.34, /usr/lib/vala-0.34, /usr/share/devhelp/books/vala-0.34, /usr/share/vala, and /usr/share/vala-0.34

Short Descriptions

valac

is a compiler that translates Vala source code into C source and header files.

vala-gen-introspect

generates a GI file for GObject and GLib based packages.

vapicheck

verifies the generated bindings.

vapigen

is an utility which generates Vala API (VAPI) files from GI files.

libvala-0.34.so

contains the Vala API functions.

Last updated on 2017-02-15 18:28:58 -0800

Valgrind-3.12.0

Introduction to Valgrind

Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile programs in detail. Valgrind can also be used to build new tools.

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

Package Information

  • Download (HTTP): http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2

  • Download MD5 sum: 6eb03c0c10ea917013a7622e483d61bb

  • Download size: 12 MB

  • Estimated disk space required: 344 MB (additional 228 MB for tests)

  • Estimated build time: 1.2 SBU (additional 5.1 SBU for tests)

Valgrind Dependencies

Optional

Boost-1.63.0, LLVM-3.9.1 (with Clang), GDB-7.12.1 (for tests), Which-2.21 (for tests), BIND-9.11.0-P3 or BIND Utilities-9.11.0-P3 (for tests), and OpenMP

Optional for regenerating the documentation

libxslt-1.1.29 and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/valgrind

Installation of Valgrind

Install Valgrind by running the following commands:

sed -i 's|/doc/valgrind||' docs/Makefile.in &&

./configure --prefix=/usr \
            --datadir=/usr/share/doc/valgrind-3.12.0 &&
make

Note

To run the tests for this package, valgrind requires a version of the /lib/ld-2.24.so (or later) library with debugging symbols present. Normally in LFS these debugging symbols are stripped at the end of Chapter 6. To get this library, glibc must be rebuilt with the current glibc version using the same compiler that was used to build LFS. The ld.so can then be renamed to ld-2.24.so.dbg and copied to /lib. Then a symlink needs to be changed:

ln -sfv ld-2.24.so.dbg /lib/ld-linux-x86-64.so.2

Adjust the above instruction as needed for a 32-bit system or for a different version of glibc.

In addition, other glibc libraries with debugging symbols present may be needed for some tests.

To test the results, issue: make regtest. The tests may hang forever if GDB-7.12.1 is not installed.

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.

Contents

Installed Programs: callgrind_annotate, callgrind_control, cg_annotate, cg_diff, cg_merge, ms_print, valgrind, valgrind-di-server, valgrind-listener, and vgdb
Installed Library: libcoregrind-<Arch>-linux.a, libreplacemalloc_toolpreload-<Arch>-linux.a, libvex-<Arch>-linux.a, libvexmultiarch-amd64-linux.a, vgpreload_core-<Arch>-linux.so, vgpreload_drd-<Arch>-linux.so, vgpreload_exp-dhat-<Arch>-linux.so, vgpreload_exp-sgcheck-<Arch>-linux.so, vgpreload_helgrind-<Arch>-linux.so, vgpreload_massif-<Arch>-linux.so, and vgpreload_memcheck-<Arch>-linux.so, where <Arch> is x86 or amd64
Installed Directories: /usr/lib/valgrind, /usr/include/valgrind, and /usr/share/doc/valgrind-3.12.0

Short Descriptions

valgrind

is a program for debugging and profiling Linux executables.

callgrind_annotate

takes an output file produced by the Valgrind tool Callgrind and prints the information in an easy-to-read form.

callgrind_control

controls programs being run by the Valgrind tool Callgrind.

cg_annotate

is a post-processing tool for the Valgrind tool Cachegrind.

cg_diff

compares two Cachegrind output files.

cg_merge

merges multiple Cachegrind output files into one.

ms_print

takes an output file produced by the Valgrind tool Massif and prints the information in an easy-to-read form.

valgrind-di-server

is a server that reads debuginfo from objects stored on a different machine.

valgrind-listener

listens on a socket for Valgrind commentary.

vgdb

is an intermediary between Valgrind and GDB or a shell.

Last updated on 2017-02-14 22:04:32 -0800

yasm-1.3.0

Introduction to yasm

Yasm is a complete rewrite of the NASM-2.12.02 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-8.0 platform.

Package Information

yasm Dependencies

Optional

Python-2.7.13 or Python-3.6.0, and Cython

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/yasm

Installation of yasm

Install yasm by running the following commands:

sed -i 's#) ytasm.*#)#' Makefile.in &&

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed -i 's#) ytasm.*#)#' Makefile.in: This sed prevents it compiling 2 programs (vsyasm and ytasm) that are only of use on Microsoft Windows.

Contents

Installed Program: yasm
Installed Library: libyasm.a
Installed Directory: /usr/include/libyasm

Short Descriptions

yasm

is a portable, retargetable assembler that supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binaries in ELF32 and ELF64 object formats.

libyasm.a

provides all of the core functionality of yasm, for manipulating machine instructions and object file constructs.

Last updated on 2017-02-15 14:01:44 -0800

Other Programming Tools

Introduction

This section is provided to show you some additional programming tools for which instructions have not yet been created in the book or for those that are not appropriate for the book. Note that these packages may not have been tested by the BLFS team, but their mention here is meant to be a convenient source of additional information.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/OtherProgrammingTools

Programming Frameworks, Languages and Compilers

A+

A+ is a powerful and efficient programming language. It is freely available under the GNU General Public License. It embodies a rich set of functions and operators, a modern graphical user interface with many widgets and automatic synchronization of widgets and variables, asynchronous execution of functions associated with variables and events, dynamic loading of user compiled subroutines, and many other features. Execution is by a rather efficient interpreter. A+ was created at Morgan Stanley. Primarily used in a computationally-intensive business environment, many critical applications written in A+ have withstood the demands of real world developers over many years. Written in an interpreted language, A+ applications tend to be portable.

ABC

ABC is an interactive programming language and environment for personal computing, originally intended as a good replacement for BASIC. It was designed by first doing a task analysis of the programming task. ABC is easy to learn (an hour or so for someone who has already programmed), and yet easy to use. Originally intended as a language for beginners, it has evolved into a powerful tool for beginners and experts alike. Some features of the language include: a powerful collection of only five data types that easily combines strong typing, yet without declarations, no limitations (such as max int), apart from sheer exhaustion of memory refinements to support top-down programming, nesting by indentation and programs typically are one fourth or one fifth the size of the equivalent Pascal or C program.

ALF

ALF is a language which combines functional and logic programming techniques. The foundation of ALF is Horn clause logic with equality which consists of predicates and Horn clauses for logic programming, and functions and equations for functional programming. The ALF system is an efficient implementation of the combination of resolution, narrowing, rewriting and rejection. Similarly to Prolog, ALF uses a backtracking strategy corresponding to a depth-first search in the derivation tree.

ASM

ASM is a Java bytecode manipulation framework. It can be used to dynamically generate stub classes or other proxy classes, directly in binary form, or to dynamically modify classes at load time, i.e., just before they are loaded into the Java Virtual Machine. ASM offers similar functionalities as BCEL or SERP, but is much smaller (33KB instead of 350KB for BCEL and 150KB for SERP) and faster than these tools (the overhead of a load time class transformation is of the order of 60% with ASM, 700% or more with BCEL, and 1100% or more with SERP). Indeed ASM was designed to be used in a dynamic way (though it works statically as well) and was therefore designed and implemented to be as small and as fast as possible.

BCPL

BCPL is a simple typeless language that was designed in 1966 by Martin Richards and implemented for the first time at MIT in the Spring of 1967.

BETA

BETA is developed within the Scandinavian School of object-orientation, where the first object-oriented language, Simula, was developed. BETA is a modern language in the Simula tradition. The resulting language is smaller than Simula in spite of being considerably more expressive. BETA is a strongly typed language like Simula, Eiffel and C++, with most type checking being carried out at compile-time. It is well known that it is not possible to obtain all type checking at compile time without sacrificing the expressiveness of the language. BETA has optimum balance between compile-time type checking and run-time type checking.

<bigwig>

<bigwig> is a high-level programming language for developing interactive Web services. Programs are compiled into a conglomerate of lower-level technologies such as C code, HTTP, HTML, JavaScript, and SSL, all running on top of a runtime system based on an Apache Web server module. It is a descendant of the Mawl project but is a completely new design and implementation with vastly expanded ambitions. The <bigwig> language is really a collection of tiny domain-specific languages focusing on different aspects of interactive Web services. These contributing languages are held together by a C-like skeleton language. Thus, <bigwig> has the look and feel of C-programs but with special data and control structures.

Bigloo

Bigloo is a Scheme implementation devoted to one goal: enabling Scheme based programming style where C(++) is usually required. Bigloo attempts to make Scheme practical by offering features usually presented by traditional programming languages but not offered by Scheme and functional programming. Bigloo compiles Scheme modules and delivers small and fast stand-alone binary executables. It enables full connections between Scheme and C programs, between Scheme and Java programs, and between Scheme and C# programs.

C--

C-- is a portable assembly language that can be generated by a front end and implemented by any of several code generators. It serves as an interface between high-level compilers and retargetable, optimizing code generators. Authors of front ends and code generators can cooperate easily.

Caml

Caml is a general-purpose programming language, designed with program safety and reliability in mind. It is very expressive, yet easy to learn and use. Caml supports functional, imperative, and object-oriented programming styles. It has been developed and distributed by INRIA, France's national research institute for computer science, since 1985. The Objective Caml system is the main implementation of the Caml language. It features a powerful module system and a full-fledged object-oriented layer. It comes with a native-code compiler that supports numerous architectures, for high performance; a bytecode compiler, for increased portability; and an interactive loop, for experimentation and rapid development.

Ch

Ch is an embeddable C/C++ interpreter for cross-platform scripting, shell programming, 2D/3D plotting, numerical computing, and embedded scripting.

Clean

Clean is a general purpose, state-of-the-art, pure and lazy functional programming language designed for making real-world applications. Clean is the only functional language in the world which offers uniqueness typing. This type system makes it possible in a pure functional language to incorporate destructive updates of arbitrary data structures (including arrays) and to make direct interfaces to the outside imperative world. The type system makes it possible to develop efficient applications.

Cyclone

Cyclone is a programming language based on C that is safe, meaning that it rules out programs that have buffer overflows, dangling pointers, format string attacks, and so on. High-level, type-safe languages, such as Java, Scheme, or ML also provide safety, but they don't give the same control over data representations and memory management that C does (witness the fact that the run-time systems for these languages are usually written in C.) Furthermore, porting legacy C code to these languages or interfacing with legacy C libraries is a difficult and error-prone process. The goal of Cyclone is to give programmers the same low-level control and performance of C without sacrificing safety, and to make it easy to port or interface with legacy C code.

D

D is a general purpose systems and applications programming language. It is a higher level language than C++, but retains the ability to write high performance code and interface directly with the operating system APIs and with hardware. D is well suited to writing medium to large scale million line programs with teams of developers. It is easy to learn, provides many capabilities to aid the programmer, and is well suited to aggressive compiler optimization technology. D is not a scripting language, nor an interpreted language. It doesn't come with a VM, a religion, or an overriding philosophy. It's a practical language for practical programmers who need to get the job done quickly, reliably, and leave behind maintainable, easy to understand code. D is the culmination of decades of experience implementing compilers for many diverse languages, and attempting to construct large projects using those languages. It draws inspiration from those other languages (most especially C++) and tempers it with experience and real world practicality.

DMDScript

DMDScript is Digital Mars' implementation of the ECMA 262 scripting language. Netscape's implementation is called JavaScript, Microsoft's implementation is called JScript. DMDScript is much faster than other implementations, which you can verify with the included benchmark.

DotGNU Portable.NET

DotGNU Portable.NET goal is to build a suite of free software tools to build and execute .NET applications, including a C# compiler, assembler, disassembler, and runtime engine. While the initial target platform was GNU/Linux, it is also known to run under Windows, Solaris, NetBSD, FreeBSD, and MacOS X. The runtime engine has been tested on the x86, PowerPC, ARM, Sparc, PARISC, s390, Alpha, and IA-64 processors. DotGNU Portable.NET is part of the DotGNU project, built in accordance with the requirements of the GNU Project. DotGNU Portable.NET is focused on compatibility with the ECMA specifications for CLI. There are other projects under the DotGNU meta-project to build other necessary pieces of infrastructure, and to explore non-CLI approaches to virtual machine implementation.

Dylan

Dylan is an advanced, object-oriented, dynamic language which supports rapid program development. When needed, programs can be optimized for more efficient execution by supplying more type information to the compiler. Nearly all entities in Dylan (including functions, classes, and basic data types such as integers) are first class objects. Additionally, Dylan supports multiple inheritance, polymorphism, multiple dispatch, keyword arguments, object introspection, macros, and many other advanced features... --Peter Hinely.

E

E is a secure distributed Java-based pure-object platform and p2p scripting language. It has two parts: ELib and the E Language. Elib provides the stuff that goes on between objects. As a pure-Java library, ELib provides for inter-process capability-secure distributed programming. Its cryptographic capability protocol enables mutually suspicious Java processes to cooperate safely, and its event-loop concurrency and promise pipelining enable high performance deadlock free distributed pure-object computing. The E Language can be used to express what happens within an object. It provides a convenient and familiar notation for the ELib computational model, so you can program in one model rather than two. Under the covers, this notation expands into Kernel-E, a minimalist lambda-language much like Scheme or Smalltalk. Objects written in the E language are only able to interact with other objects according to ELib's semantics, enabling object granularity intra-process security, including the ability to safely run untrusted mobile code (such as caplets).

elastiC

elastiC is a portable high-level object-oriented interpreted language with a C like syntax. Its main characteristics are: open source, interpreted, has portable bytecode compilation, dynamic typing, automatic real very fast garbage collection, object oriented with meta-programming support (a la Smalltalk), functional programming support (Scheme-like closures with lexical scoping, and eval-like functionality), hierarchical namespaces, a rich set of useful built-in types (dynamic arrays, dictionaries, symbols, ...), extensible with C (you can add functions, types, classes, methods, packages, ...), embeddable in C. elastiC has been strongly influenced by C, Smalltalk, Scheme and Python and tries to merge the best characteristics of all these languages, while still coherently maintaining its unique personality.

Erlang/OTP

Erlang/OTP is a development environment based on Erlang. Erlang is a programming language which has many features more commonly associated with an operating system than with a programming language: concurrent processes, scheduling, memory management, distribution, networking, etc. The initial open-source Erlang release contains the implementation of Erlang, as well as a large part of Ericsson's middleware for building distributed high-availability systems. Erlang is characterized by the following features: robustness, soft real-time, hot code upgrades and incremental code loading.

Euphoria

Euphoria is a simple, flexible, and easy-to-learn programming language. It lets you quickly and easily develop programs for Windows, DOS, Linux and FreeBSD. Euphoria was first released in 1993. Since then Rapid Deployment Software has been steadily improving it with the help of a growing number of enthusiastic users. Although Euphoria provides subscript checking, uninitialized variable checking and numerous other run-time checks, it is extremely fast. People have used it to develop high-speed DOS games, Windows GUI programs, and X Window System programs. It is also very useful for CGI (Web-based) programming.

Felix

Felix is an advanced Algol like procedural programming language with a strong functional subsystem. It features ML style static typing, first class functions, pattern matching, garbage collection, polymorphism, and has built in support for high performance microthreading, regular expressions and context free parsing. The system provides a scripting harness so the language can be used like other scripting languages such as Python and Perl, but underneath it generates native code to obtain high performance. A key feature of the system is that it uses the C/C++ object model, and provides an advanced binding sublanguage to support integration with C/C++ at both the source and object levels, both for embedding C/C++ data types and functions into Felix, and for embedding Felix into existing C++ architectures. The Felix compiler is written in Objective Caml, and generates ISO C++ which should compile on any platform.

ferite

ferite is a scripting language and engine all in one manageable chunk. It is designed to be easily extended in terms of API, and to be used within other applications making them more configurable and useful to the end user. It has a syntax similar to a number of other languages but remains clean and its own language.

Forth

Forth is a stack-based, extensible language without type-checking. It is probably best known for its "reverse Polish" (postfix) arithmetic notation, familiar to users of Hewlett-Packard calculators. Forth is a real-time programming language originally developed to control telescopes. Forth has many unique features and applications: it can compile itself into a new compiler, reverse-polish coding, edit time error checking and compiling (similar to BASIC), extremely efficient thread based language, can be used to debug itself, extensible; thus can become what ever you need it to be. The links below lead to the website of the Forth Interest Group (FIG), a world-wide, non-profit organization for education in and the promotion of the Forth computer language. Another worthwhile website dedicated to the Forth community is http://wiki.forthfreak.net/.

GNU Smalltalk

GNU Smalltalk is a free implementation of the Smalltalk-80 language which runs on most versions on Unix and, in general, everywhere you can find a POSIX-compliance library. An uncommon feature of it is that it is well-versed to scripting tasks and headless processing. See http://www.gnu.org/software/smalltalk/manual/html_node/Overview.html for a more detailed explanation of GNU Smalltalk.

Haskell

Haskell is a computer programming language. In particular, it is a polymorphicly typed, lazy, purely functional language, quite different from most other programming languages. The language is named for Haskell Brooks Curry, whose work in mathematical logic serves as a foundation for functional languages. Haskell is based on lambda calculus. There are many implementations of Haskell, among them:

HLA (High Level Assembly)

The HLA language was developed as a tool to help teach assembly language programming and machine organization to University students at the University of California, Riverside. The basic idea was to teach students assembly language programming by leveraging their knowledge of high level languages like C/C++ and Pascal/Delphi. At the same time, HLA was designed to allow advanced assembly language programmers write more readable and more powerful assembly language code.

Icon

Icon is a high-level, general-purpose programming language with a large repertoire of features for processing data structures and character strings. It is an imperative, procedural language with a syntax reminiscent of C and Pascal, but with semantics at a much higher level.

Io

Io is a small, prototype-based programming language. The ideas in Io are mostly inspired by Smalltalk (all values are objects), Self (prototype-based), NewtonScript (differential inheritance), Act1 (actors and futures for concurrency), LISP (code is a runtime inspectable/modifiable tree) and Lua (small, embeddable).

J

J is a modern, high-level, general-purpose, high-performance programming language. It is portable and runs on Windows, Unix, Mac, and PocketPC handhelds, both as a GUI and in a console. True 64-bit J systems are available for XP64 or Linux64, on AMD64 or Intel EM64T platforms. J systems can be installed and distributed for free.

Jamaica

Jamaica, the JVM Macro Assembler, is an easy-to-learn and easy-to-use assembly language for JVM bytecode programming. It uses Java syntax to define a JVM class except for the method body that takes bytecode instructions, including Jamaica's built-in macros. In Jamaica, bytecode instructions use mnemonics and symbolic names for all variables, parameters, data fields, constants and labels.

Joy

Joy is a purely functional programming language. Whereas all other functional programming languages are based on the application of functions to arguments, Joy is based on the composition of functions. All such functions take a stack as an argument and produce a stack as a value. Consequently much of Joy looks like ordinary postfix notation. However, in Joy a function can consume any number of parameters from the stack and leave any number of results on the stack. The concatenation of appropriate programs denotes the composition of the functions which the programs denote.

Judo

Judo is a practical, functional scripting language. It is designed to cover the use cases of not only algorithmic/object-oriented/multi-threaded programming and Java scripting but also a number of major application domain tasks, such as scripting for JDBC, WSDL, ActiveX, OS, multiple file/data formats, etc. Despite its rich functionality, the base language is extremely simple, and domain support syntax is totally intuitive to domain experts, so that even though you have never programmed in Judo, you would have little trouble figuring out what the code does.

JWIG

JWIG is a Java-based high-level programming language for development of interactive Web services. It contains an advanced session model, a flexible mechanism for dynamic construction of XML documents, in particular XHTML, and a powerful API for simplifying use of the HTTP protocol and many other aspects of Web service programming. To support program development, JWIG provides a unique suite of highly specialized program analysers that at compile time verify for a given program that no runtime errors can occur while building documents or receiving form input, and that all documents being shown are valid according to the document type definition for XHTML 1.0. The main goal of the JWIG project is to simplify development of complex Web services, compared to alternatives, such as, Servlets, JSP, ASP, and PHP. JWIG is a descendant of the <bigwig> research language.

Lava

Lava is a name unfortunately chosen for several unrelated software development languages/projects. So it doesn't appear as though BLFS has a preference for one over another, the project web sites are listed below, without descriptions of the capabilities or features for any of them.

Mercury

Mercury is a new logic/functional programming language, which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features. Its highly optimized execution algorithm delivers efficiency far in excess of existing logic programming systems, and close to conventional programming systems. Mercury addresses the problems of large-scale program development, allowing modularity, separate compilation, and numerous optimization/time trade-offs.

Mono

Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix. Sponsored by Novell, the Mono open source project has an active and enthusiastic contributing community and is positioned to become the leading choice for development of Linux applications.

MPD

MPD is a variant of the SR programming language. SR has a Pascal-like syntax and uses guarded commands for control statements. MPD has a C-like syntax and C-like control statements. However, the main components of the two languages are the same: resources, globals, operations, procs, procedures, processes, and virtual machines. Moreover, MPD supports the same variety of concurrent programming mechanisms as SR: co statements, semaphores, call/send/forward invocations, and receive and input statements.

Nemerle

Nemerle is a high-level statically-typed programming language for the .NET platform. It offers functional, object-oriented and imperative features. It has a simple C#-like syntax and a powerful meta-programming system. Features that come from the functional land are variants, pattern matching, type inference and parameter polymorphism (aka generics). The meta-programming system allows great compiler extensibility, embedding domain specific languages, partial evaluation and aspect-oriented programming.

Octave

GNU Octave is a high-level language, primarily intended for numerical computations. It provides a convenient command line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with Matlab. It may also be used as a batch-oriented language. Octave has extensive tools for solving common numerical linear algebra problems, finding the roots of nonlinear equations, integrating ordinary functions, manipulating polynomials, and integrating ordinary differential and differential-algebraic equations. It is easily extensible and customizable via user-defined functions written in Octave's own language, or using dynamically loaded modules written in C++, C, Fortran, or other languages.

OO2C (Optimizing Oberon-2 Compiler)

OO2C is an Oberon-2 development platform. It consists of an optimizing compiler, a number of related tools, a set of standard library modules and a reference manual. Oberon-2 is a general-purpose programming language in the tradition of Pascal and Modula-2. Its most important features are block structure, modularity, separate compilation, static typing with strong type checking (also across module boundaries) and type extension with type-bound procedures. Type extension makes Oberon-2 an object-oriented language.

Ordered Graph Data Language (OGDL)

OGDL is a structured textual format that represents information in the form of graphs, where the nodes are strings and the arcs or edges are spaces or indentation.

Pike

Pike is a dynamic programming language with a syntax similar to Java and C. It is simple to learn, does not require long compilation passes and has powerful built-in data types allowing simple and really fast data manipulation. Pike is released under the GNU GPL, GNU LGPL and MPL.

Pyrex

Pyrex is a language specially designed for writing Python extension modules. It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python and the messy, low-level world of C. Pyrex lets you write code that mixes Python and C data types any way you want, and compiles it into a C extension for Python.

Q

Q is a functional programming language based on term rewriting. Thus, a Q program or “script” is simply a collection of equations which are used to evaluate expressions in a symbolic fashion. The equations establish algebraic identities and are interpreted as rewriting rules in order to reduce expressions to “normal forms”.

R

R is a language and environment for statistical computing and graphics. It is a GNU project similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. R can be considered as a different implementation of S. There are some important differences, but much code written for S runs unaltered under R. R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, ...) and graphical techniques, and is highly extensible. The S language is often the vehicle of choice for research in statistical methodology, and R provides an Open Source route to participation in that activity.

Regina Rexx

Regina is a Rexx interpreter that has been ported to most Unix platforms (Linux, FreeBSD, Solaris, AIX, HP-UX, etc.) and also to OS/2, eCS, DOS, Win9x/Me/NT/2k/XP, Amiga, AROS, QNX4.x, QNX6.x BeOS, MacOS X, EPOC32, AtheOS, OpenVMS, SkyOS and OpenEdition. Rexx is a programming language that was designed to be easy to use for inexperienced programmers yet powerful enough for experienced users. It is also a language ideally suited as a macro language for other applications.

Small Device C Compiler (SDCC)

SDCC is a Freeware, retargetable, optimizing ANSI-C compiler that targets the Intel 8051, Maxim 80DS390 and the Zilog Z80 based MCUs. Work is in progress on supporting the Motorola 68HC08 as well as Microchip PIC16 and PIC18 series. The entire source code for the compiler is distributed under GPL.

SmartEiffel (The GNU Eiffel Compiler)

SmartEiffel claims to be “the fastest and the slimmest multi-platform Eiffel compiler on Earth”. Eiffel is an object-oriented programming language which emphasizes the production of robust software. Its syntax is keyword-oriented in the ALGOL and Pascal tradition. Eiffel is strongly statically typed, with automatic memory management (typically implemented by garbage collection). Distinguishing characteristics of Eiffel include Design by contract (DbC), liberal use of inheritance including multiple inheritance, a type system handling both value and reference semantics, and generic classes. Eiffel has a unified type system—all types in Eiffel are classes, so it is possible to create subclasses of the basic classes such as INTEGER. Eiffel has operator overloading, including the ability to define new operators, but does not have method overloading.

Squeak

Squeak is an open, highly-portable Smalltalk implementation whose virtual machine is written entirely in Smalltalk, making it easy to debug, analyze, and change. To achieve practical performance, a translator produces an equivalent C program whose performance is comparable to commercial Smalltalks. Other noteworthy aspects of Squeak include: real-time sound and music synthesis written entirely in Smalltalk, extensions of BitBlt to handle color of any depth and anti-aliased image rotation and scaling, network access support that allows simple construction of servers and other useful facilities, it runs bit-identical on many platforms (Windows, Mac, Unix, and others), a compact object format that typically requires only a single word of overhead per object and a simple yet efficient incremental garbage collector for 32-bit direct pointers efficient bulk-mutation of objects.

SR (Synchronizing Resources)

SR is a language for writing concurrent programs. The main language constructs are resources and operations. Resources encapsulate processes and variables they share; operations provide the primary mechanism for process interaction. SR provides a novel integration of the mechanisms for invoking and servicing operations. Consequently, all of local and remote procedure call, rendezvous, message passing, dynamic process creation, multicast, and semaphores are supported. SR also supports shared global variables and operations.

Standard ML

Standard ML is a safe, modular, strict, functional, polymorphic programming language with compile-time type checking and type inference, garbage collection, exception handling, immutable data types and updatable references, abstract data types, and parametric modules. It has efficient implementations and a formal definition with a proof of soundness. There are many implementations of Standard ML, among them:

Steel Bank Common Lisp (SBCL)

SBCL is an open source (free software) compiler and runtime system for ANSI Common Lisp. It provides an interactive environment including an integrated native compiler, a debugger, and many extensions. SBCL runs on a number of platforms.

Tiny C Compiler (TCC)

Tiny C Compiler is a small C compiler that can be used to compile and execute C code everywhere, for example on rescue disks (about 100KB for x86 TCC executable, including C preprocessor, C compiler, assembler and linker). TCC is fast. It generates optimized x86 code, has no byte code overhead and compiles, assembles and links several times faster than GCC. TCC is versatile, any C dynamic library can be used directly. It is heading toward full ISOC99 compliance and can compile itself. The compiler is safe as it includes an optional memory and bound checker. Bound checked code can be mixed freely with standard code. TCC compiles and executes C source directly. No linking or assembly necessary. A full C preprocessor and GNU-like assembler is included. It is C script supported; just add “#!/usr/local/bin/tcc -run” on the first line of your C source, and execute it directly from the command line. With libtcc, you can use TCC as a backend for dynamic code generation.

TinyCOBOL

TinyCOBOL is a COBOL compiler being developed by members of the free software community. The mission is to produce a COBOL compiler based on the COBOL 85 standards. TinyCOBOL is available for the Intel architecture (IA32) and compatible processors on the following platforms: BeOS, FreeBSD, Linux and MinGW on Windows.

Yorick

Yorick is an interpreted programming language, designed for postprocessing or steering large scientific simulation codes. Smaller scientific simulations or calculations, such as the flow past an airfoil or the motion of a drumhead, can be written as standalone yorick programs. The language features a compact syntax for many common array operations, so it processes large arrays of numbers very efficiently. Unlike most interpreters, which are several hundred times slower than compiled code for number crunching, Yorick can approach to within a factor of four or five of compiled speed for many common tasks. Superficially, Yorick code resembles C code, but Yorick variables are never explicitly declared and have a dynamic scoping similar to many Lisp dialects. The “unofficial” home page for Yorick can be found at http://www.maumae.net/yorick.

ZPL

ZPL is an array programming language designed from first principles for fast execution on both sequential and parallel computers. It provides a convenient high-level programming medium for supercomputers and large-scale clusters with efficiency comparable to hand-coded message passing. It is the perfect alternative to using a sequential language like C or Fortran and a message passing library like MPI.

Programming Libraries and Bindings

Byte Code Engineering Library (BCEL)

BECL is intended to give users a convenient possibility to analyze, create, and manipulate (binary) Java class files (those ending with .class). Classes are represented by objects which contain all the symbolic information of the given class: methods, fields and byte code instructions, in particular. Such objects can be read from an existing file, be transformed by a program (e.g., a class loader at run-time) and dumped to a file again. An even more interesting application is the creation of classes from scratch at run-time. The Byte Code Engineering Library may be also useful if you want to learn about the Java Virtual Machine (JVM) and the format of Java .class files. BCEL is already being used successfully in several projects such as compilers, optimizers, obfuscators, code generators and analysis tools.

Choco

Choco is a Java library for constraint satisfaction problems (CSP), constraint programming (CP) and explanation-based constraint solving (e-CP). It is built on a event-based propagation mechanism with backtrackable structures.

FFTW (Fastest Fourier Transform in the West)

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

GOB (GObject Builder)

GOB (GOB2 anyway) is a preprocessor for making GObjects with inline C code so that generated files are not edited. Syntax is inspired by Java and Yacc or Lex. The implementation is intentionally kept simple, and no C actual code parsing is done.

GTK+/GNOME Language Bindings (wrappers)

GTK+/GNOME language bindings allow GTK+ to be used from other programming languages, in the style of those languages.

Java-GNOME

Java-GNOME is a set of Java bindings for the GNOME and GTK+ libraries that allow GNOME and GTK+ applications to be written in Java. The Java-GNOME API has been carefully designed to be easy to use, maintaining a good OO paradigm, yet still wrapping the entire functionality of the underlying libraries. Java-GNOME can be used with the Eclipse development environment and Glade user interface designer to create applications with ease.

gtk2-perl

gtk2-perl is the collective name for a set of Perl bindings for GTK+ 2.x and various related libraries. These modules make it easy to write GTK and GNOME applications using a natural, Perlish, object-oriented syntax.

KDE Language Bindings

KDE and most KDE applications are implemented using the C++ programming language, however there are number of bindings to other languages are available. These include scripting languages like Perl, Python and Ruby, and systems programming languages such as Java and C#.

Numerical Python (Numpy)

Numerical Python adds a fast array facility to the Python language.

Perl Scripts and Additional Modules

There are many Perl scripts and additional modules located on the Comprehensive Perl Archive Network (CPAN) web site. Here you will find “All Things Perl”.

Integrated Development Environments

A-A-P

A-A-P makes it easy to locate, download, build and install software. It also supports browsing source code, developing programs, managing different versions and distribution of software and documentation. This means that A-A-P is useful both for users and for developers.

Anjuta

Anujuta is a versatile Integrated Development Environment (IDE) for C and C++ on GNU/Linux. It has been written for GTK/GNOME and features a number of advanced programming facilities. These include project management, application wizards, an on-board interactive debugger, and a powerful source editor with source browsing and syntax highlighting.

Eclipse

Eclipse is an open source community whose projects are focused on providing an extensible development platform and application frameworks for building software. Eclipse contains many projects, including an Integrated Development Environment (IDE) for Java.

Mozart

The Mozart Programming System is an advanced development platform for intelligent, distributed applications. Mozart is based on the Oz language, which supports declarative programming, object-oriented programming, constraint programming, and concurrency as part of a coherent whole. For distribution, Mozart provides a true network transparent implementation with support for network awareness, openness, and fault tolerance. Security is upcoming. It is an ideal platform for both general-purpose distributed applications as well as for hard problems requiring sophisticated optimization and inferencing abilities.

Other Development Tools

cachecc1

cachecc1 is a GCC cache. It can be compared with the well known ccache package. It has some unique features including the use of an LD_PRELOADed shared object to catch invocations to cc1, cc1plus and as, it transparently supports all build methods, it can cache GCC bootstraps and it can be combined with distcc to transparently distribute compilations.

ccache

ccache is a compiler cache. It acts as a caching pre-processor to C/C++ compilers, using the -E compiler switch and a hash to detect when a compilation can be satisfied from cache. This often results in 5 to 10 times faster speeds in common compilations.

DDD (GNU Data Display Debugger)

GNU DDD is a graphical front-end for command-line debuggers such as GDB, DBX, WDB, Ladebug, JDB, XDB, the Perl debugger, the Bash debugger, or the Python debugger. Besides “usual” front-end features such as viewing source texts, DDD has an interactive graphical data display, where data structures are displayed as graphs..

distcc

distcc is a program to distribute builds of C, C++, Objective C or Objective C++ code across several machines on a network. distcc should always generate the same results as a local build, is simple to install and use, and is usually much faster than a local compile. distcc does not require all machines to share a filesystem, have synchronized clocks, or to have the same libraries or header files installed. They can even have different processors or operating systems, if cross-compilers are installed.

Exuberant Ctags

Exuberant Ctags generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object). Tag generation is supported for the following languages: Assembler, AWK, ASP, BETA, Bourne/Korn/Zsh Shell, C, C++, COBOL, Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, Python, REXX, Ruby, S-Lang, Scheme, Tcl, Vim, and YACC. A list of editors and tools utilizing tag files may be found at http://ctags.sourceforge.net/tools.html.

gocache (GNU Object Cache)

ccache is a clone of ccache, with the goal of supporting compilers other than GCC and adding additional features. Embedded compilers will especially be in focus.

OProfile

OProfile is a system-wide profiler for Linux systems, capable of profiling all running code at low overhead. OProfile is released under the GNU GPL. It consists of a kernel driver and a daemon for collecting sample data, and several post-profiling tools for turning data into information. OProfile leverages the hardware performance counters of the CPU to enable profiling of a wide variety of interesting statistics, which can also be used for basic time-spent profiling. All code is profiled: hardware and software interrupt handlers, kernel modules, the kernel, shared libraries, and applications. OProfile is currently in alpha status; however it has proven stable over a large number of differing configurations. It is being used on machines ranging from laptops to 16-way NUMA-Q boxes.

strace

strace is a system call tracer, i.e., a debugging tool which prints out a trace of all the system calls made by another process or program.

Last updated on 2016-09-18 23:17:50 -0700

Java

Last updated on 2015-09-20 15:38:20 -0700

Java-1.8.0.121

About Java

Java is different from most of the packages in LFS and BLFS. It is a programming language that works with files of byte codes to obtain instructions and executes then 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-8.0 platform.

Binary Package Information

Java Binary Runtime Dependencies

alsa-lib-1.1.3, Cups-2.2.2, giflib-5.1.4, 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-1.8.0.121-bin &&
mv -v * /opt/OpenJDK-1.8.0.121-bin         &&
chown -R root:root /opt/OpenJDK-1.8.0.121-bin

The binary version is now installed. You may create a symlink to that version by issuing, as the root user:

ln -sfn OpenJDK-1.8.0.121-bin /opt/jdk

You may now proceed to Configuring the JAVA environment, where the instructions assume that the above link exists.

Last updated on 2017-02-21 14:52:57 -0800

OpenJDK-1.8.0.121

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-8.0 platform.

Note

A browser plugin and webstart implementation is provided by the Icedtea project. To provide a complete implementation, you will need to later install IcedTea-Web-1.6.2.

OpenJDK is GPL'd code, with a special exception made for non-free projects to use these classes in their proprietary products. In similar fashion to the LGPL, which allows non-free programs to link to libraries provided by free software, the GNU General Public License, version 2, with the Classpath Exception allows third party programs to use classes provided by free software without the requirement that the third party software also be free. As with the LGPL, any modifications made to the free software portions of a third party application, must also be made freely available.

Note

The OpenJDK source includes a very thorough, open source test suite using the JTreg test harness. The testing instructions below allow to test the just built JDK for reasonable compatibility with the proprietary Oracle JDK. However, in order for an independent implementation to claim compatibility, it must pass a proprietary JCK/TCK test suite. No claims of compatibility, even partial compatibility, may be made without passing an approved test suite.

Oracle does provide free community access, on a case by case basis, to a closed toolkit to ensure 100% compatibility with its proprietary JDK. Neither the binary version provided on the Java-1.8.0.121 page nor the JVM built with the instructions below have been tested against the TCK. Any version that is built using the instructions given, cannot claim to be compatible with the proprietary JDK, without the user applying for, and completing the compatibility tests themselves.

With that in mind, the binaries produced using this build method are regularly tested against the TCK by the members listed on the site above. In addition to the community license above, an educational, non-commercial license for the TCK can be obtained from here.

Source Package Information

  • OpenJDK Root Package
    Download: http://hg.openjdk.java.net/jdk8u/jdk8u/archive/jdk8u121-b13.tar.bz2
    Download MD5 sum: 5f3def798fa3a0b2c60ae891856dc9c5
    Download Size: 401 KB

  • In addition to the root package, the instructions below first download seven subproject tarballs, whose total size is 63 MB.

  • Estimated disk space required: 3.5 GB (additional 420 MB for tests)

  • Estimated build time: 5 SBU with 4 jobs in parallel (up to 120 SBU for tests, see below)

Additional Downloads

OpenJDK Dependencies

Required Dependencies

An existing binary (Java-1.8.0.121 or an earlier built version of this package. The instructions below assume that you are using Configuring the JAVA environment), alsa-lib-1.1.3, cpio-2.12, Cups-2.2.2, UnZip-6.0, Which-2.21, Xorg Libraries, and Zip-3.0

Recommended
Optional

Mercurial-4.1 and an X Window manager such as twm-1.0.9 (for the tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openjdk

Installation of OpenJDK

Unlike other packages in BLFS, the OpenJDK source packages are distributed in multiple tar balls. You need to first extract the source root from jdk8u121-b13.tar.bz2, change into the extracted directory, then proceed with the following instructions:

cat > subprojects.md5 << EOF &&
9c052259b93646687fdcfb71643b69b4  corba.tar.bz2
0ca6e85dcbd96dfa24ac1bdd833aab2e  hotspot.tar.bz2
c2b5c1947c4aef684b27a463e4149d06  jaxp.tar.bz2
5a83842eca3881c7bf6abeaccac8f05d  jaxws.tar.bz2
4dbe002af94423cbe382dda03e3e6a9d  langtools.tar.bz2
0325b88a2b39d7d72ef0726e91ea4a1d  jdk.tar.bz2
c87f96bc7ba9596fb5587e307a8f1ec6  nashorn.tar.bz2
EOF

for subproject in corba hotspot jaxp jaxws langtools jdk nashorn; do
  wget -c http://hg.openjdk.java.net/jdk8u/jdk8u/${subproject}/archive/jdk8u121-b13.tar.bz2 \
       -O ${subproject}.tar.bz2
done &&

md5sum -c subprojects.md5 &&

for subproject in corba hotspot jaxp jaxws langtools jdk nashorn; do
  mkdir -pv ${subproject} &&
  tar -xf ${subproject}.tar.bz2 --strip-components=1 -C ${subproject}
done

If you have downloaded the optional test harness, unpack it too:

tar -xf ../jtreg-4.2-b05-747.tar.gz

Note

Before proceeding, you should ensure that your environment PATH variable contains the location of the Java compilers used for bootstrapping OpenJDK. This is the only requirement for the environment. Modern Java installations do not need JAVA_HOME and CLASSPATH is not used here. Furthermore, OpenJDK developers recommend to unset JAVA_HOME.

The build system does not support the -j switch in MAKEFLAGS.

Configure and build the package with the following commands (--with-milestone value can be modified to fit user preferences):

unset JAVA_HOME               &&
sh ./configure                \
   --with-update-version=121   \
   --with-build-number=b13    \
   --with-milestone=BLFS      \
   --enable-unlimited-crypto  \
   --with-zlib=system         \
   --with-giflib=system       \
   --with-extra-cflags="-std=c++98 -Wno-error -fno-delete-null-pointer-checks -fno-lifetime-dse" \
   --with-extra-cxxflags="-std=c++98 -fno-delete-null-pointer-checks -fno-lifetime-dse" &&
make DEBUG_BINARIES=true SCTP_WERROR= all  &&
find build/*/images/j2sdk-image -iname \*.diz -delete

Note

Testing will involve the interplay of pairs of JVMs using the networking interface, so networking must be started. If it isn't, not only will these tests fail, but the test cleanup will leave orphaned JVMs running. There will be many of them. Rebooting may be the easiest recovery.

Testing the newly built JVM involves several steps. First, it is better to run the test suite in a frame buffer on a different display, using Xvfb:

if [ -n "$DISPLAY" ]; then
  OLD_DISP=$DISPLAY
fi
export DISPLAY=:20
nohup Xvfb $DISPLAY                              \
           -fbdir $(pwd)                         \
           -pixdepths 8 16 24 32 > Xvfb.out 2>&1 &
echo $! > Xvfb.pid
echo Waiting for Xvfb to initialize; sleep 1
nohup twm -display $DISPLAY \
          -f /dev/null > twm.out 2>&1            &
echo $! > twm.pid
echo Waiting for twm to initialize; sleep 1
xhost +

Then, it is necessary to modify some files:

echo -e "
jdk_all = :jdk_core           \\
          :jdk_svc            \\
          :jdk_beans          \\
          :jdk_imageio        \\
          :jdk_sound          \\
          :jdk_sctp           \\
          com/sun/awt         \\
          javax/accessibility \\
          javax/print         \\
          sun/pisces          \\
          com/sun/java/swing" >> jdk/test/TEST.groups &&
sed -e 's/all:.*jck.*/all: jtreg/'      \
    -e '/^JTREG /s@\$(JT_PLATFORM)/@@'  \
    -i langtools/test/Makefile

Some variables have to be set:

JT_JAVA=$(type -p javac | sed 's@/bin.*@@') &&
JT_HOME=$(pwd)/jtreg                        &&
PRODUCT_HOME=$(echo $(pwd)/build/*/images/j2sdk-image)

The tests are run as follows:

LANG=C make -k -C test                      \
            JT_HOME=${JT_HOME}              \
            JT_JAVA=${JT_JAVA}              \
            PRODUCT_HOME=${PRODUCT_HOME} all
LANG=C ${JT_HOME}/bin/jtreg -a -v:fail,error \
                -dir:$(pwd)/hotspot/test     \
                -k:\!ignore                  \
                -jdk:${PRODUCT_HOME}         \
                :jdk

Tests duration depends on various factors such as the network speed and the number of concurrent VM, which is computed from the number of cores and threads, and the amount of RAM installed. A maximum of 120 SBU has been observed, but it may be as “low” as 80 SBU.

The test results can be compared to these results, although they usually are run on a newer version. Some failures can be expected, the number of which depends on various conditions, like whether the computer is connected to network. Also, some tests may timeout if the machine is under load. Those are the reasons for considering the tests optional, although we would rather recommend them.

Next some cleanup has to be done. The instructions below only stop the frame buffer, but it has been reported that some java VM may be left running after the tests, so it is necessary to check orphaned processes:

kill -9 `cat twm.pid`  &&
kill -9 `cat Xvfb.pid` &&
rm -f Xvfb.out twm.out &&
rm -f Xvfb.pid twm.pid &&
if [ -n "$OLD_DISP" ]; then
  DISPLAY=$OLD_DISP
fi

Install the package with the following commands as the root user:

cp -RT build/*/images/j2sdk-image /opt/OpenJDK-1.8.0.121 &&
chown -R root:root /opt/OpenJDK-1.8.0.121

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 OpenJDK-1.8.0.121 /opt/jdk

If desired, you may install a .desktop file corresponding to an entry in a desktop menu for policytool. First, you need to obtain an icon from IcedTea-Web-1.6.2:

tar -xf ../icedtea-web-1.6.2.tar.gz  \
        icedtea-web-1.6.2/javaws.png \
        --strip-components=1

Now, as root user:

mkdir -pv /usr/share/applications &&

cat > /usr/share/applications/openjdk-8-policytool.desktop << "EOF" &&
[Desktop Entry]
Name=OpenJDK Java Policy Tool
Name[pt_BR]=OpenJDK Java - Ferramenta de Política
Comment=OpenJDK Java Policy Tool
Comment[pt_BR]=OpenJDK Java - Ferramenta de Política
Exec=/opt/jdk/bin/policytool
Terminal=false
Type=Application
Icon=javaws
Categories=Settings;
EOF

install -v -Dm0644 javaws.png /usr/share/pixmaps/javaws.png

The choice of pt_BR is just an example. You can add any translation by adding lines corresponding to your locale, e.g. for fr_FR, “Name[fr_FR]=” and “Comment[fr_FR]=” with the appropriate text as values.

Command Explanations

sh configure...: the top level configure is a wrapper around the autotools one. It is not executable and must be run through sh.

--with-boot-jdk: This switch provides the location of the temporary JDK. It is normally not needed if java is found in the PATH.

--with-update-version: Currently, the build system does not include the update number in the version string. It has to be specified here.

--with-build-number: Again, the build system does not include the build number in the version string. It has to be specified here too.

--with-milestone: Used to customize the version string.

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

--with-zlib=system, --with-giflib=system: Allows to use the system libraries instead of the bundled ones.

--with-extra-cflags=... --with-extra-cxxflags=...: Works around some defects in the code brought to light by the GCC 6 more rigorous checking of the C/C++ constructs. Remove those switches if compiling with GCC 5.

--with-jobs=N: Allows setting the number of jobs for make equal to N. The default is the result of a calculation involving the available memory and the number of processors. Note that even if you specify N=1, some parallelization may be used during the build. The SBU given above are with N=4, on a single processor, 4-core, virtual machine, with 4 GB of memory.

--with-cacerts-file=...: Specifies where to find a cacerts file, typically /opt/jdk/jre/lib/security. Otherwise, an empty one is created. You can get it from an earlier version of the package, or use the script below to generate one.

make DEBUG_BINARIES=true SCTP_WERROR= all: The build fails on 32 bit machines if DEBUG_BINARIES is not set to true. Unsetting SCTP_WERROR is part of the workarounds needed to use GCC 6. You may omit that part of the command if using GCC 5.

find ... -iname '*.diz' -delete: This command removes redundant files.

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.

Install or update the JRE Certificate Authority Certificates (cacerts) file

OpenJDK uses its own format for the CA certificates. Those certificates are located in a file named /etc/ssl/java/cacerts. That file should be generated using the system PKI trust store. The instructions on the Certificate Authority Certificates page should be used to update the file located in /etc/ssl/java. Setup a symlink in the default location as the root user:

ln -sfv /etc/ssl/java/cacerts /opt/jdk/jre/lib/security/cacerts

Use the following commands to check if the cacerts file has been successfully installed:

cd /opt/jdk
bin/keytool -list -keystore /etc/ssl/java/cacerts

At the prompt "Enter keystore password:", enter "changeit" (the default). 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: appletviewer, extcheck, idlj, jar, jarsigner, java, javac, javadoc, javah, javap, java-rmi.cgi, jcmd, jconsole, jdb, jdeps, jhat, jinfo, jjs, jmap, jps, jrunscript, jsadebugd, jstack, jstat, jstatd, keytool, native2ascii, orbd, pack200, policytool, rmic, rmid, rmiregistry, schemagen, serialver, servertool, tnameserv, unpack200, wsgen, wsimport, and xjc
Installed Libraries: /opt/OpenJDK-1.8.0.121/lib/*, and /opt/OpenJDK-1.8.0.121/jre/lib/*
Installed Directory: /opt/OpenJDK-1.8.0.121

Short Descriptions

appletviewer

allows to run applets outside of a web browser.

extcheck

checks a specified jar file for title and version conflicts with any extensions installed in the OpenJDK software.

idlj

generates Java bindings from a given IDL file.

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.

javah

generates C header and source files that are needed to implement native methods.

javap

disassembles a Java class file.

java-rmi.cgi

is the Java RMI client.

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.

jdeps

shows the package-level or class-level dependencies of Java class files.

jhat

parses a java heap dump file and allows viewing it in a web browser.

jinfo

prints Java configuration information for a given Java process, core file, or a remote debug server.

jjs

is a command-line tool used to invoke the Nashorn engine. It can be used to interpret one or several script files, or to run an interactive shell.

jmap

prints shared object memory maps or heap memory details of a given process, core file, or a remote debug server.

jps

lists the instrumented JVMs on the target system.

jrunscript

is a command line script shell.

jsadebugd

attaches to a Java process or core file and acts as a debug server.

jstack

prints Java stack traces of Java threads for a given Java process, core file, or a remote debug server.

jstat

displays performance statistics for an instrumented JVM.

jstatd

is an RMI server application that monitors for the creation and termination of instrumented JVMs.

keytool

is a key and certificate management utility.

native2ascii

converts files that contain non-supported character encoding into files containing Latin-1 or Unicode-encoded characters.

orbd

is used to enable clients to transparently locate and invoke persistent objects on servers in the CORBA environment.

pack200

is a Java application that transforms a jar file into a compressed pack200 file using the Java gzip compressor.

policytool

creates and manages a policy file graphically.

rmic

generates stub and skeleton class files for remote objects from the names of compiled Java classes that contain remote object implementations.

rmid

starts the activation system daemon.

rmiregistry

creates and starts a remote object registry on the specified port on the current host.

schemagen

is a Java XML binding schema generator.

serialver

returns the serialVersionUID for one or more classes in a form suitable for copying into an evolving class.

servertool

provides an ease-of-use interface for application programmers to register, unregister, startup and shutdown a server.

tnameserv

starts the Java IDL name server.

unpack200

is a native implementation that transforms a packed file produced by pack200 into a jar file.

wsgen

generates JAX-WS portable artifacts used in JAX-WS web services.

wsimport

generates JAX-WS portable artifacts.

xjc

is a Java XML binding compiler.

Last updated on 2017-02-22 09:52:51 -0800

Configuring the JAVA environment

After the package installation is complete, the next step is to make sure that the system can properly find the files. If you set up your login scripts as recommended in The Bash Shell Startup Files, update the environment by creating the openjdk.sh script, as the root user:

cat > /etc/profile.d/openjdk.sh << "EOF"
# Begin /etc/profile.d/openjdk.sh

# Set JAVA_HOME directory
JAVA_HOME=/opt/jdk

# Adjust PATH
pathappend $JAVA_HOME/bin

# Add to MANPATH
pathappend $JAVA_HOME/man MANPATH

# Auto Java CLASSPATH: Copy jar files to, or create symlinks in, the
# /usr/share/java directory. Note that having gcj jars with OpenJDK 8
# may lead to errors.

AUTO_CLASSPATH_DIR=/usr/share/java

pathprepend . CLASSPATH

for dir in `find ${AUTO_CLASSPATH_DIR} -type d 2>/dev/null`; do
    pathappend $dir CLASSPATH
done

for jar in `find ${AUTO_CLASSPATH_DIR} -name "*.jar" 2>/dev/null`; do
    pathappend $jar CLASSPATH
done

export JAVA_HOME
unset AUTO_CLASSPATH_DIR dir jar

# End /etc/profile.d/openjdk.sh
EOF

For allowing mandb to include the OpenJDK man pages in its database, issue, as the root user:

cat >> /etc/man_db.conf << "EOF" &&
# Begin Java addition
MANDATORY_MANPATH     /opt/jdk/man
MANPATH_MAP           /opt/jdk/bin     /opt/jdk/man
MANDB_MAP             /opt/jdk/man     /var/cache/man/jdk
# End Java addition
EOF

mkdir -p /var/cache/man
mandb -c /opt/jdk/man

The installation of the JRE Certificate Authority Certificates (cacerts) is described in the JRE Certificate Authority Certificates section. If you are using the binary version, those certificates may already be installed.

Last updated on 2016-08-28 02:28:15 -0700

apache-ant-1.10.1

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-8.0 platform.

Package Information

Additional Downloads

Apache Ant Dependencies

Required

A JDK (Java Binary or OpenJDK-1.8.0.121) and GLib-2.50.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/apache-ant

Installation of Apache Ant

Note

You may need additional libraries to satisfy the build requirements of various packages installed using Apache Ant. Review the table at http://ant.apache.org/manual/install.html#librarydependencies for any prerequisite libraries you may need. Place any needed libraries in lib/optional.

Unpack and copy the junit and hamcrest jar files to the local directory tree.

cp -v ../junit-4.11.jar \
      ../hamcrest-core-1.3.jar lib/optional

Install Apache Ant by running the following commands:

The unit regression tests are performed during the build step below unless JUnit is not installed. Now, as the root user:

./build.sh -Ddist.dir=/opt/ant-1.10.1 dist &&
ln -v -sfn ant-1.10.1 /opt/ant

Note

Make sure the JAVA_HOME environment variable is set for the root user.

Command Explanations

cp -v ... lib/optional: This command copies the JUnit and hamcrest jar files into the directory where Apache Ant will look for them.

./build.sh -Ddist.dir=/opt/ant-1.10.1 dist: This command does everything. It builds, tests, then installs the package into /opt/ant-1.10.1.

ln -v -sfn ant-1.10.1 /opt/ant: This command is optional, and creates a convenience symlink.

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 instrutions 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: ant*.jar
Installed Directories: /opt/ant-1.10.1

Short Descriptions

ant

is a Java based build tool used by many packages instead of the conventional make program.

antRun

is a support script used to start ant build scripts in a given directory.

antRun.pl

is a Perl script that provides similar functionality offered by the antRun script.

complete-ant-cmd.pl

is a Perl script that allows Bash to complete an ant command-line.

runant.pl

is a Perl wrapper script used to invoke ant.

runant.py

is a Python wrapper script used to invoke ant.

ant*.jar

files are the Apache Ant Java class libraries.

Last updated on 2017-02-21 14:52:57 -0800

JUnit-4.11

Introduction to JUnit

The JUnit package contains a simple, open source framework to write and run repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks. JUnit features include assertions for testing expected results, test fixtures for sharing common test data, and test runners for running tests.

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

Package Information

Additional Downloads

JUnit Dependencies

Required

apache-ant-1.10.1 and UnZip-6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/junit

Installation of JUnit

The javadoc command coming with OpenJDK 8 has become much stricter than before regarding the conformance of the Javadoc comments in source code to HTML. The Junit documentation does not meet that standard, so the conformance checks have to be disabled. This can be done with the following command:

sed -i '\@/docs/@a<arg value="-Xdoclint:none"/>' build.xml

Now place the required hamcrest jar files where needed and build the package:

cp -v ../hamcrest-core-1.3{,-sources}.jar lib/ &&
ant populate-dist

Test the package by issuing ant dist. One test fails for unknown reason.

Install the files in the final location as the root user:

install -v -m755 -d /usr/share/{doc,java}/junit-4.11 &&
chown -R root:root .                                 &&

cp -v -R junit*/javadoc/*             /usr/share/doc/junit-4.11  &&
cp -v junit*/junit*.jar               /usr/share/java/junit-4.11 &&
cp -v hamcrest-1.3/hamcrest-core*.jar /usr/share/java/junit-4.11

If you have followed the instructions in Configuring the JAVA environment, there is nothing more to do: the CLASSPATH variable would be automatically updated.

Contents

Installed Programs: None
Installed Libraries: hamcrest-core and junit jar files
Installed Directories: /usr/share/doc/junit-4.11 and /usr/share/java/junit-4.11

Short Descriptions

junit jar files

contains java classes to support the xUnit framework testing architecture.

Last updated on 2017-02-21 14:52:57 -0800

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.

PPP stands for Point-to-Point Protocol. It is a data link protocol commonly used for establishing authenticated IP connections over a phone line with a modem, or over radio waves with a cellular phone. There is also a variant (PPPoE) that works over Ethernet and is used by cable providers to authenticate the Internet connections.

dhcpcd-6.11.5

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-8.0 platform.

Package Information

dhcpcd Dependencies

Optional

LLVM-3.9.1 (with Clang)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dhcpcd

Installation of dhcpcd

Install dhcpcd by running the following commands:

./configure --libexecdir=/lib/dhcpcd \
            --dbdir=/var/lib/dhcpcd  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--libexecdir=/lib/dhcpcd: The default /libexec is not FHS-compliant. Since this directory may need to be available early in the boot, /usr/libexec cannot be used either.

--dbdir=/var/lib/dhcpcd: The default /var/db is not FHS-compliant

--with-hook=...: You can optionally install more hooks, for example to install some configuration files such as ntp.conf. The set of hooks is in the dhcpcd-hooks directory in the build tree.

Configuring dhcpcd

Config Files

/etc/dhcpcd.conf

General Configuration Information

To configure dhcpcd, you need to first install the network service script, /lib/services/dhcpcd included in the blfs-bootscripts-20170225 package (as user root):

make install-service-dhcpcd

Whenever dhcpcd configures or shuts down a network interface, it executes hook scripts. For more details about those scripts, see the dhcpcd-run-hooks and dhcpcd man pages.

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

Note

The default behavior of dhcpcd sets the hostname and mtu settings. It also overwrites /etc/resolv.conf and /etc/ntp.conf. These modifications to system files and settings on system configuration files are done by hooks which are stored in /lib/dhcpcd/dhcpcd-hooks. Setup dhcpcd by removing or adding hooks from/to that directory. The execution of hooks can be disabled by using the --nohook (-C) command line option or by the nohook option in the /etc/dhcpcd.conf file.

Review the dhcpcd man page for switches to add to the DHCP_START value.

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: /lib/dhcpcd/dev/udev.so
Installed Directory: /{,var/}lib/dhcpcd and /usr/share/dhcpcd

Short Descriptions

dhcpcd

is an implementation of the DHCP client specified in RFC2131.

udev.so

add udev support for interface arrival and departure; this is because udev likes to rename the interface, which it can't do if dhcpcd grabs it first.

Last updated on 2017-02-18 22:13:39 -0800

DHCP-4.3.5

Introduction to ISC DHCP

The ISC DHCP package contains both the client and server programs for DHCP. dhclient (the client) is used for connecting to a network which uses DHCP to assign network addresses. dhcpd (the server) is used for assigning network addresses on private networks.

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

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dhcp

Kernel Configuration

You must have Packet Socket support:

[*] Networking support --->          [CONFIG_NET]
      Networking options --->
        <*> Packet socket            [CONFIG_PACKET]

If you do not have IPv6 support:

[*] Networking support --->          [CONFIG_NET]
      Networking Options --->
        <*> The IPv6 Protocol --->   [CONFIG_IPV6]

compiled in, then you must use the “missing_ipv6” patch.

Installation of ISC DHCP

Note

This package does not support parallel build.

If you have not compiled IPv6 support into the kernel, apply the missing_ipv6 patch:

patch -Np1 -i ../dhcp-4.3.5-missing_ipv6-1.patch

Note

Be careful with the instructions below. The single and double quotes are important because the defined variables are used verbatim in the code.

Install ISC DHCP by running the following commands:

patch -Np1 -i ../dhcp-4.3.5-client_script-1.patch &&
CFLAGS="-D_PATH_DHCLIENT_SCRIPT='\"/sbin/dhclient-script\"'         \
        -D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"'               \
        -D_PATH_DHCLIENT_CONF='\"/etc/dhcp/dhclient.conf\"'"        &&
./configure --prefix=/usr                                           \
            --sysconfdir=/etc/dhcp                                  \
            --localstatedir=/var                                    \
            --with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases       \
            --with-srv6-lease-file=/var/lib/dhcpd/dhcpd6.leases     \
            --with-cli-lease-file=/var/lib/dhclient/dhclient.leases \
            --with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases &&
make -j1

This package does not come with a test suite.

If you only want to install the ISC DHCP client, issue the following commands as the root user:

make -C client install         &&
mv -v /usr/sbin/dhclient /sbin &&
install -v -m755 client/scripts/linux /sbin/dhclient-script

Skip to the section called “Client Configuration” in order to configure the client

If you only want to install the ISC DHCP server, issue the following command as the root user:

make -C server install

Skip to the section called “Server Configuration” in order to configure the server.

Alternatively, you can install whole package which includes the client, server, relay, static libraries and development headers by running the following commands as the root user:

make install                   &&
mv -v /usr/sbin/dhclient /sbin &&
install -v -m755 client/scripts/linux /sbin/dhclient-script

Configuring ISC DHCP

Config Files

/etc/dhcp/dhclient.conf and /etc/dhcp/dhcpd.conf

Client Configuration

Create a basic /etc/dhcp/dhclient.conf by running the following command as the root user:

install -vdm755 /etc/dhcp &&
cat > /etc/dhcp/dhclient.conf << "EOF"
# Begin /etc/dhcp/dhclient.conf
#
# Basic dhclient.conf(5)

#prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        netbios-name-servers, netbios-scope, interface-mtu,
        ntp-servers;
require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;

# End /etc/dhcp/dhclient.conf
EOF

See man 5 dhclient.conf for additional options.

Now create the /var/lib/dhclient directory which will contain DHCP Client leases by running the following command as the root user:

install -v -dm 755 /var/lib/dhclient

At this point you can test if dhclient is behaving as expected by running the following command as the root user:

dhclient <eth0>

Replace <eth0> with your desired interface. If you want more verbose output, add the -v parameter to the command above.

If you want to configure network interfaces at boot using dhclient, you need to install the /lib/services/dhclient script included in blfs-bootscripts-20170225 package:

make install-service-dhclient

Next, create the /etc/sysconfig/ifconfig.eth0 configuration file with the following commands as the root user:

cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
ONBOOT="yes"
IFACE="eth0"
SERVICE="dhclient"
DHCP_START=""
DHCP_STOP=""

# Set PRINTIP="yes" to have the script print
# the DHCP assigned IP address
PRINTIP="no"

# Set PRINTALL="yes" to print the DHCP assigned values for
# IP, SM, DG, and 1st NS. This requires PRINTIP="yes".
PRINTALL="no"
EOF

Adjust the file to suit your needs.

For more information on the appropriate DHCP_START and DHCP_STOP values see man 8 dhclient.

Server Configuration

Note that you only need the DHCP server if you want to issue LAN addresses over your network. The DHCP client doesn't need the server in order to function properly.

Start with creating /etc/dhcp/dhcpd.conf by running the following command as the root user:

cat > /etc/dhcp/dhcpd.conf << "EOF"
# Begin /etc/dhcp/dhcpd.conf
#
# Example dhcpd.conf(5)

# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# End /etc/dhcp/dhcpd.conf
EOF

Adjust the file to suit your needs. See man 5 dhcpd.conf for additional options.

Now create the /var/lib/dhcpd directory which will contain DHCP Server leases by running the following command as the root user:

install -v -dm 755 /var/lib/dhcpd

If you want to start the DHCP Server at boot, install the /etc/rc.d/init.d/dhcpd inti script included in the blfs-bootscripts-20170225 package:

make install-dhcpd

You will need to edit the /etc/sysconfig/dhcpd in order to set the interface on which dhcpd will serve the DHCP requests.

Contents

Installed Programs: dhclient, dhclient-script, dhcpd, dhcrelay and omshell
Installed Libraries: libdhcpctl.a and libomapi.a
Installed Directories: /etc/dhcp, /usr/include/dhcpctl, /usr/include/isc-dhcp, /usr/include/omapip, /var/lib/dhclient and /var/lib/dhcpd

Short Descriptions

dhclient

is the implementation of the DHCP client.

dhclient-script

is used by dhclient to (re)configure interfaces. It can make extra changes by invoking custom dhclient-{entry,exit}-hooks.

dhcpd

implements Dynamic Host Configuration Protocol (DHCP) and Internet Bootstrap Protocol (BOOTP) requests for network addresses.

dhcrelay

provides a means to accept DHCP and BOOTP requests on a subnet without a DHCP server and relay them to a DHCP server on another subnet.

omshell

provides an interactive way to connect to, query and possibly change the ISC DHCP Server's state via OMAPI, the Object Management API.

Last updated on 2017-02-23 12:46:49 -0800

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

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-8.0 platform.

Package Information

bridge-utils Dependencies

Optional (to run tests)

Net-tools-CVS_20101030

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/bridge

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

[*] Networking support --->            [CONFIG_NET]
      Networking options --->
        <*/M> 802.1d Ethernet Bridging [CONFIG_BRIDGE]

Installation of bridge-utils

Install bridge-utils by running the following commands:


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

Testing the results requires running the six shell scripts in the tools/ directory. Two of the tests require two ethernet ports. Some tests will not preserve the current network configuration. See tests/README for details.

Now, as the root user:

make install

Configuring bridge-utils

Configuration Information

To automate bridge creation and configuration, install the /lib/services/etc/bridge service script included in the blfs-bootscripts-20170225 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, SERVICES="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
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.

Last updated on 2017-02-21 14:52:57 -0800

cifs-utils-6.6

Introduction to cifs-utils

The cifs-utils provides a means for mounting SMB/CIFS shares on a Linux system.

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

Package Information

cifs-utils Dependencies

Optional

keyutils-1.5.9, Linux-PAM-1.3.0, MIT Kerberos V5-1.15, Talloc-2.1.8, Samba-4.5.5, and libcap-ng or libcap-2.25 with PAM

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cifsutils

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

File systems  --->
  [*] Network File Systems  --->                                      [CONFIG_NETWORK_FILESYSTEMS]
    <*/M> CIFS support (advanced network filesystem, SMBFS successor) [CONFIG_CIFS]

Installation of cifs-utils

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.3.0 is installed and you wish PAM support.

--disable-systemd: Disable systemd specific behavior for mount.cifs. Remove it for systems running with systemd.

--with-pamdir=/lib/security: Install the PAM module in /lib/security.

Contents

Installed Programs: getcifsacl, mount.cifs and setcifsacl; optional: cifs.idmap, cifs.upcall and cifscreds
Installed Library: /usr/lib/cifs-utils/idmapwb.so and optionally PAM module /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.

setcifsacl

is intended to alter an ACL of a security descriptor for a file system object.

Last updated on 2017-02-15 18:28:58 -0800

NcFTP-3.2.6

Introduction to NcFTP

The NcFTP package contains a powerful and flexible interface to the Internet standard File Transfer Protocol. It is intended to replace or supplement the stock ftp program.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ncftp

Installation of NcFTP

There are two ways to build NcFTP. The first (and optimal) way builds most of the functionality as a shared library and then builds and installs the program linked against this library. The second method simply links all of the functionality into the binary statically. This doesn't make the dynamic library available for linking by other applications. You need to choose which method best suits you. Note that the second method does not create an entirely statically linked binary; only the libncftp parts are statically linked in, in this case. Be aware that building and using the shared library is covered by the Clarified Artistic License; however, developing applications that utilize the shared library is subject to a different license.

To install NcFTP using the first (and optimal) method, run the following commands:

./configure --prefix=/usr --sysconfdir=/etc &&
make -C libncftp shared &&
make

This package does not come with a test suite.

Now, as the root user:

make -C libncftp soinstall &&
make install

To install NcFTP using the second method (with the libncftp functionality linked in statically) run the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

make -C ... && make -C ...: These commands make and install the dynamic library libncftp which is then used to link against when compiling the main program.

Configuring NcFTP

Config Files

/etc/ncftp.* and ~/.ncftp/*; especially /etc/ncftp.prefs_v3 and ~/.ncftp/prefs_v3

Configuration Information

Most NcFTP configuration is done while in the program, and the configuration files are dealt with automatically. One exception to this is ~/.ncftp/prefs_v3. There are various options to alter in there, including:

yes-i-know-about-NcFTPd=yes

This disables the splash screen advertising the NcFTPd server.

There are other options in the prefs_v3 file. Most of these are self-explanatory. Global defaults can be set in /etc/ncftp.prefs_v3.

Contents

Installed Programs: ncftp, ncftpbatch, ncftpbookmarks, ncftpget, ncftpls, ncftpput, and ncftpspooler
Installed Library: libncftp.so
Installed Directories: None

Short Descriptions

ncftp

is a browser program for File Transfer Protocol.

ncftpbatch

is an individual batch FTP job processor.

ncftpbookmarks

is the NcFTP Bookmark Editor (NCurses-based).

ncftpget

is an internet file transfer program for scripts used to retrieve files.

ncftpls

is an internet file transfer program for scripts used to list files.

ncftpput

is an internet file transfer program for scripts used to transfer files.

ncftpspooler

is a global batch FTP job processor daemon.

Last updated on 2017-02-15 18:28:58 -0800

Net-tools-CVS_20101030

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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/net-tools

Installation of Net-tools

The instructions below automate the configuration process by piping yes to the make config command. If you wish to run the interactive configuration process (by changing the instruction to just make config), 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'.

The patch below cleans up the installation so that it does not overwrite the ifconfig and hostname programs that were installed in LFS.

Install Net-tools by running the following commands:

patch -Np1 -i ../net-tools-CVS_20101030-remove_dups-1.patch &&
sed -i '/#include <netinet\/ip.h>/d'  iptunnel.c &&

yes "" | make config &&
make

This package does not come with a test suite.

Now, as the root user:

make update

Command Explanations

sed -i '/#include <netinet\/ip.h>/d' iptunnel.c: This fixes build breakage with linux-4.8 headers.

yes "" | make config: Piping yes to make config skips the interactive configuration and accepts the defaults.

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 other computers.

Last updated on 2017-02-14 22:04:32 -0800

NFS-Utils-2.1.1

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-8.0 platform.

Package Information

NFS Utilities Dependencies

Required

libtirpc-1.0.1

Optional

SQLite-3.17.0 and libnfsidmap (for NFSv4 support), MIT Kerberos V5-1.15 or libgssapi, and librpcsecgss (for GSS and RPC security support) and libcap-2.25 with PAM

Required (runtime)

rpcbind-0.2.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nfs-utils

Kernel Configuration

Enable the following options in the kernel configuration (choose client and/or server support as appropriate) and recompile the kernel if necessary:

File systems  --->
  [*] Network File Systems  --->         [CONFIG_NETWORK_FILESYSTEMS]
    <*/M> NFS client support             [CONFIG_NFS_FS]
    <*/M> NFS server support             [CONFIG_NFSD]

Select the appropriate sub-options that appear when the above options are selected.

Note

In BLFS we assume that nfs v3 will be used. If the server offers nfs v4 (for linux, CONFIG_NFSD_V4) then auto-negotiation for v3 will fail and you will need to add nfsver=3 to the mount options. This also applies if that option is enabled in the client's kernel, for example in a distro trying to mount from a BLFS v3 server.

Installation of NFS Utilities

Before you compile the program, ensure that the nobody user and nogroup group have been created as done in the current LFS book. You can add them by running the following commands as the root user:

groupadd -g 99 nogroup &&
useradd -c "Unprivileged Nobody" -d /dev/null -g nogroup \
    -s /bin/false -u 99 nobody

Note

The classic uid and gid values are 65534 which is also -2 when interpreted as a signed 16-bit number. These values impact other files on some filesystems that do not have support for sparse files. The nobody and nogroup values are relatively arbitrary. The impact on a server is nil if the exports file is configured correctly. If it is misconfigured, an ls -l or ps listing will show a uid or gid number of 65534 instead of a name. The client uses nobody only as the user running rpc.statd.

Install NFS Utilities by running the following commands:

./configure --prefix=/usr          \
            --sysconfdir=/etc      \
            --without-tcp-wrappers \
            --disable-nfsv4        \
            --disable-gss &&
make

If your /usr directory is NFS mounted, you should install the executables in /sbin by passing an additional parameter --sbindir=/sbin to the above ./configure command.

Now, as the root user:

make install &&
chmod u+w,go+r /sbin/mount.nfs

The tests for this package require that the package be installed and configured as specified below. In addition, the the daemon from rpcbind-0.2.4 needs to be running and the tests need to be run as the root user.

To test the results, issue, as root: make check.

Command Explanations

--without-tcp-wrappers: This option is needed because TCP Wrappers is not in BLFS.

--disable-nfsv4: This allows the package to be built when libnfsidmap has not been installed.

--disable-gss: Disables support for RPCSEC GSS (RPC Security).

Configuring NFS Utilities

Server Configuration

/etc/exports contains the exported directories on NFS servers. Refer to the exports.5 manual page for the syntax of this file. Also refer to the "NFS HowTo" available at http://nfs.sourceforge.net/nfs-howto/ for information on how to configure the servers and clients in a secure manner. For example, for sharing the /home directory over the local network, the following line may be added:

/home 192.168.0.0/24(rw,subtree_check,anonuid=99,anongid=99)

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-20170225 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"
QUOTAS="no"
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. You can specify either rw or ro, _netdev if the filesystem is to be automatically mounted at boot, or noauto (and perhaps user) for other filesystems.

If the fileserver is not running a recent version of linux, you may need to specifiy other options.

If you are using systemd, you may need to enable autofs v4 in your kernel, and add the option comment=systemd.automount. Some machines need this, because systemd tries to mount the external fs's before the network is up, others do not need it. An alternative is for root to run mount -a.

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-20170225 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, mountstats, mount.nfs, mount.nfs4 (link to mount.nfs), nfsiostat, nfsstat, osd_login, rpc.mountd, rpc.nfsd, rpc.statd, rpcdebug, showmount, sm-notify, start-statd, umount.nfs (link to mount.nfs), and umount.nfs4 (link to mount.nfs)
Installed Libraries: None
Installed Directories: /var/lib/nfs

Short Descriptions

exportfs

maintains a list of NFS exported file systems.

mountstats

displays NFS client per-mount statistics.

mount.nfs

is used to mount a network share using NFS

mount.nfs4

is used to mount a network share using NFSv4

nfsiostat

reports input/output statistics for network filesystems.

nfsstat

displays statistics kept about NFS client and server activity.

osd_login

is a script that is a part of the autologin feature mandated by the pnfs-objects standard.

rpc.mountd

implements the NFS mount protocol on an NFS server.

rpc.nfsd

implements the user level part of the NFS service on the server.

rpc.statd

is used by the NFS file locking service. Run on both sides, client as well as server, when you want file locking enabled.

rpcdebug

sets or clears the kernel's NFS client and server debug flags.

showmount

displays mount information for an NFS server.

sm-notify

is used to send Network Status Monitor reboot messages.

start-statd

is a script called by nfsmount when mounting a filesystem with locking enabled, if statd does not appear to be running. It can be customised with whatever flags are appropriate for the site.

umount.nfs

is used to unmount a network share using NFS

umount.nfs4

is used to unmount a network share using NFSv4

Last updated on 2017-02-14 19:04:01 -0800

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-20170225 package.

make install-netfs

Last updated on 2016-06-10 22:26:20 -0700

ntp-4.2.8p9

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-8.0 platform.

Package Information

ntp Dependencies

Required

Wget-1.19.1 (runtime, for update-leap) and Which-2.21

Optional

libcap-2.25 with PAM, libevent-2.1.8, OpenSSL-1.0.2k, libedit, and libopts from AutoGen

User Notes: http://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

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.8p9 &&
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 capabilites will be compiled.

Configuring ntp

Config Files

/etc/ntp.conf

Configuration Information

The following configuration file first defines various ntp servers with open access from different continents. Second, it creates a drift file where ntpd stores the frequency offset and a pid file to store the ntpd process ID. Third, it defines the location for the leap-second definition file /etc/ntp.leapseconds, that the update-leap script checks and updates, when necessary. This script can be run as a cron job and the ntp developers recommend a frequency of about three weeks for the updates. Since the documentation included with the package is sparse, visit the ntp website at http://www.ntp.org/ and http://www.pool.ntp.org/ for more information.

cat > /etc/ntp.conf << "EOF"
# Asia
server 0.asia.pool.ntp.org

# Australia
server 0.oceania.pool.ntp.org

# Europe
server 0.europe.pool.ntp.org

# North America
server 0.north-america.pool.ntp.org

# South America
server 2.south-america.pool.ntp.org

driftfile /var/lib/ntp/ntp.drift
pidfile   /var/run/ntpd.pid

leapfile  /etc/ntp.leapseconds
EOF

You may wish to add a “Security session”. For explanations, see https://www.eecis.udel.edu/~mills/ntp/html/accopt.html#restrict.

cat >> /etc/ntp.conf << "EOF"
# Security session
restrict    default limited kod nomodify notrap nopeer noquery
restrict -6 default limited kod nomodify notrap nopeer noquery

restrict 127.0.0.1
restrict ::1
EOF

Synchronizing the Time

There are two options. Option one is to run ntpd continuously and allow it to synchronize the time in a gradual manner. The other option is to run ntpd periodically (using cron) and update the time each time ntpd is scheduled.

If you choose Option one, then install the /etc/rc.d/init.d/ntp init script included in the blfs-bootscripts-20170225 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.

Last updated on 2017-02-14 19:04:01 -0800

rpcbind-0.2.4

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-8.0 platform.

Package Information

rpcbind Dependencies

Required

libtirpc-1.0.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rpcbind

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=/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-20170225 package.

make install-rpcbind

Contents

Installed Program: rpcbind and rpcinfo
Installed Libraries: None
Installed Directories: None

Short Descriptions

rpcbind

is a server that converts RPC program numbers into universal addresses. It must be running on the host to be able to make RPC calls on a server on that machine.

rpcinfo

makes an RPC call to an RPC server and reports data according to the requested options.

Last updated on 2017-02-14 19:04:01 -0800

rsync-3.1.2

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-8.0 platform.

Package Information

  • Download (HTTP): https://www.samba.org/ftp/rsync/src/rsync-3.1.2.tar.gz

  • Download MD5 sum: 0f758d7e000c0f7f7d3792610fad70cb

  • Download size: 872 KB

  • Estimated disk space required: 11 MB (with tests - additional 45 MB for HTML API documentation)

  • Estimated build time: 0.5 SBU (with tests)

rsync Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rsync

Installation of rsync

For security reasons, running the rsync server as an unprivileged user and group is encouraged. If you intend to run rsync as a daemon, create the rsyncd user and group with the following commands issued by the root user:

groupadd -g 48 rsyncd &&
useradd -c "rsyncd Daemon" -d /home/rsync -g rsyncd \
    -s /bin/false -u 48 rsyncd

Install rsync by running the following commands:

./configure --prefix=/usr --without-included-zlib &&
make

If you have Doxygen-1.8.13 installed and wish to build HTML API documentation, issue doxygen.

To test the results, issue: make check.

Now, as the root user:

make install

If you built the documentation, install it using the following commands as the root user:

install -v -m755 -d          /usr/share/doc/rsync-3.1.2/api &&
install -v -m644 dox/html/*  /usr/share/doc/rsync-3.1.2/api

Command Explanations

--without-included-zlib: This switch enables compilation with 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-7.4p1 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 http://rsync.samba.org/documentation.html.

Boot Script

Note that you only want 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-20170225 package.

make install-rsyncd

Contents

Installed Program: rsync
Installed Libraries: None
Installed Directories: Optionally, /usr/share/doc/rsync-3.1.2

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.

Last updated on 2017-02-16 19:05:12 -0800

Samba-4.5.5

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-8.0 platform.

Package Information

  • Download (HTTP): https://download.samba.org/pub/samba/stable/samba-4.5.5.tar.gz

  • Download MD5 sum: b6d784970333387cbafdd172d914bed2

  • Download size: 20 MB

  • Estimated disk space required: 515 MB (add 364 MB for quicktest, and up to 1.6 GB additional for developer tests)

  • Estimated build time: 5.2 SBU, using parallelism=4 (add 6.0 SBU for quicktest, and up to 100 SBU to run developer tests)

Samba Dependencies

Required

Python-2.7.13

Recommended
Optional

Avahi-0.6.32, Cups-2.2.2, Cyrus SASL-2.1.26, GDB-7.12.1, git-2.11.1, GnuTLS-3.5.9, libarchive-3.2.2, libcap-2.25 with PAM, libgcrypt-1.7.6, Linux-PAM-1.3.0, MIT Kerberos V5-1.15, NSS-3.29, popt-1.16, Python-3.6.0, Talloc-2.1.8 (included), Vala-0.34.4, Valgrind-3.12.0 (optionally used by the test suite), xfsprogs-4.9.0, ctdb (included), Gamin, Heimdal (currently not working), libaio, libunwind, ldb (included), M2Crypto (required for ADS), OpenAFS, PyCrypto (required for ADS), PyGPGME (recommended for ADS), tevent (included), and tdb (included)

Optional (for the Developer Test Suite)

Install in listed order: six, argparse, extras, py, enum34, hypothesis, pytest, coverage, pytest-cov, doctools, unittest2, testtools, fixtures, python-mimeparse, contextlib2, traceback2, linecache2, testscenarios, testresources, virtualenv, pbr, and python-subunit

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/samba4

Installation of Samba

Install Samba by running the following commands:

./configure                            \
    --prefix=/usr                      \
    --sysconfdir=/etc                  \
    --localstatedir=/var               \
    --with-piddir=/run/samba           \
    --with-pammodulesdir=/lib/security \
    --enable-fhs                       \
    --without-ad-dc                    \
    --without-systemd                  \
    --enable-selftest                  &&
make

To test the results, as the root user, issue: make quicktest. The test suite will produce lines that look like failures, but these are innocuous. The summary should report "ALL OK" for a good test run.

Note

Additionally, developer test suites are available. If you've installed the optional python modules above, you can run these tests with make test. It is not recommended for the average builder at nearly 100 SBU, and you should expect ~80 errors and ~30 failures from the 3000+ tests.

Now, as the root user:

make install &&

mv -v /usr/lib/libnss_win{s,bind}.so*   /lib                       &&
ln -v -sf ../../lib/libnss_winbind.so.2 /usr/lib/libnss_winbind.so &&
ln -v -sf ../../lib/libnss_wins.so.2    /usr/lib/libnss_wins.so    &&

install -v -m644    examples/smb.conf.default /etc/samba &&

mkdir -pv /etc/openldap/schema                        &&

install -v -m644    examples/LDAP/README              \
                    /etc/openldap/schema/README.LDAP  &&

install -v -m644    examples/LDAP/samba*              \
                    /etc/openldap/schema              &&

install -v -m755    examples/LDAP/{get*,ol*} \
                    /etc/openldap/schema

Command Explanations

--enable-fhs: Assigns all other file paths in a manner compliant with the Filesystem Hierarchy Standard (FHS).

--without-systemd: Disable systemd integration, since it is not built in the SYS V version of LFS/BLFS.

--without-ad-dc: Disable Active Directory Domain Controller functionality. See Setup a Samba Active Directory Domain Controller for detailed information. Remove this switch if you've installed the Python modules needed for ADS support. Note that BLFS does not provide a samba bootscript for an Active Directory domain controller.

--with-selftest-prefix=SELFTEST_PREFIX: This option specifies the test suite work directory (default=./st).

mv -v /usr/lib/libnss_win{s,bind}.so* /lib: The nss libraries are installed in /usr/lib by default. Move them to /lib.

ln -v -sf ../../lib/libnss_winbind.so.2 /usr/lib/libnss_winbind.so and ln -v -sf ../../lib/libnss_wins.so.2 /usr/lib/libnss_wins.so: These symlinks are required when applications build against these libraries.

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:

ln -v -sf /usr/bin/smbspool /usr/lib/cups/backend/smb

Configuration Information

Due to the complexity and the many various uses for Samba, complete configuration for all the package's capabilities is well beyond the scope of the BLFS book. This section provides instructions to configure the /etc/samba/smb.conf file for two common scenarios. The complete contents of /etc/samba/smb.conf will depend on the purpose of Samba installation.

Note

You may find it easier to copy the configuration parameters shown below into an empty /etc/samba/smb.conf file instead of copying and editing the default file as mentioned in the “Command Explanations” section. How you create/edit the /etc/samba/smb.conf file will be left up to you. Do ensure the file is only writeable by the root user (mode 644).

Scenario 1: Minimal Standalone Client-Only Installation

Choose this variant if you only want to transfer files using smbclient, mount Windows shares and print to Windows printers, and don't want to share your files and printers to Windows machines.

A /etc/samba/smb.conf file with the following three parameters is sufficient:

[global]
    workgroup = MYGROUP
    dos charset = cp850
    unix charset = ISO-8859-1

The values in this example specify that the computer belongs to a Windows workgroup named “MYGROUP”, uses the “cp850” character set on the wire when talking to MS-DOS and MS Windows 9x, and that the filenames are stored in the “ISO-8859-1” encoding on the disk. Adjust these values appropriately for your installation. The “unix charset” value must be the same as the output of locale charmap when executed with the LANG variable set to your preferred locale, otherwise the ls command may not display correct filenames of downloaded files.

There is no need to run any Samba servers in this scenario, thus you don't need to install the provided 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 add “dos charset” and “unix charset” parameters to the “[global]” section as described in Scenario 1 in order to prevent filename corruption. For security reasons, you may wish to define path = /home/alice/shared-files, assuming your user name is alice and you only want to share the files in that directory, instead of your entire home. Then, replace homes by shared-files and change also the “comment” if used the configuration file below or the /etc/samba/smb.conf.default to create yours.

The following configuration file creates a separate share for each user's home directory and also makes all printers available to Windows machines:

[global]
    workgroup = MYGROUP
    dos charset = cp850
    unix charset = ISO-8859-1

[homes]
    comment = Home Directories
    browseable = no
    writable = yes

[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    printable = yes

Other parameters you may wish to customize in the “[global]” section include:

    server string =
    security =
    hosts allow =
    load printers =
    log file =
    max log size =
    socket options =
    local master =

Reference the comments in the /etc/samba/smb.conf.default file for information regarding these parameters.

Since the smbd and nmbd daemons are needed in this case, install the samba 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.

There is quite a bit of documentation available which covers many of these advanced configurations. Point your web browser to the links below to view some of the documentation included with the Samba package:

Boot Script

For your convenience, boot scripts have been provided for Samba. There are two included in the blfs-bootscripts-20170225 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.

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. To use the default user, issue the following commands as the root user:

groupadd -g 99 nogroup &&
useradd -c "Unprivileged Nobody" -d /dev/null -g nogroup \
    -s /bin/false -u 99 nobody

Install the samba script with the following command issued as the root user:

make install-samba

If you also need the winbindd script to resolve names from Windows clients, run:

make install-winbindd

Contents

Installed Programs: cifsdd, dbwrap_tool, eventlogadm, gentest, ldbadd, ldbdel, ldbedit, ldbmodify, ldbrename, ldbsearch, locktest, masktest, ndrdump, net, nmbd, nmblookup, ntlm_auth, oLschema2ldif, pdbedit, pidl, profiles, regdiff, regpatch, regshell, regtree, rpcclient, samba, samba_dnsupdate, samba_kcc, samba-regedit, samba_spnupdate, samba-tool, samba_upgradedns, sharesec, smbcacls, smbclient, smbcontrol, smbcquotas, smbd, smbget, smbpasswd, smbspool, smbstatus, smbtar, smbtorture, smbtree, tdbbackup, tdbdump, tdbrestore, tdbtool, testparm, wbinfo, and winbindd
Installed Libraries: libdcerpc-binding.so, libdcerpc-samr.so, libdcerpc-server.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.so, libsamba-util.so, libsamdb.so, libsmbclient.so, libsmbconf.so, libsmbldap.so, libtevent-util.so, libwbclient.so, and winbind_krb5_locator.so; the pam_winbind.so PAM library; and assorted character set, filesystem and support modules under /usr/lib/{python2.7,samba}
Installed Directories: /etc/samba, /run/samba, /usr/include/samba-4.0, /usr/lib/perl5/vendor_perl/5.x.y/Parse/Pidl/{Samba{3,4},Wireshark}, /usr/lib/python2.7/site-packages/samba, /usr/{lib,share}/samba, and /var/{cache,lib,lock,log,run}/samba

Short Descriptions

cifsdd

is the dd command for SMB.

dbwrap_tool

is used to read and manipulate TDB/CTDB databases using the dbwrap interface.

eventlogadm

is used to write records to eventlogs from STDIN, add the specified source and DLL eventlog registry entries and display the active eventlog names (from smb.conf).

gentest

is used to run random generic SMB operations against two SMB servers and show the differences in behavior.

ldbadd

is a command-line utility for adding records to an LDB database.

ldbdel

is a command-line program for deleting LDB database records.

ldbedit

allows you to edit LDB databases using your preferred editor.

ldbmodify

allows you to modify records in an LDB database.

ldbrename

allows you to edit LDB databases using your preferred editor.

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.

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.

pidl

is an IDL (Interface Definition Language) compiler written in Perl.

profiles

is a utility that reports and changes SIDs in Windows registry files. It currently only supports Windows NT.

regdiff

is a Diff program for Windows registry files.

regpatch

applies registry patches to registry files.

regshell

is a Windows registry file browser using readline.

regtree

is a text-mode registry viewer.

rpcclient

is used to execute MS-RPC client side functions.

samba

is a server to provide AD and SMB/CIFS services to clients.

samba_dnsupdate

is used to update our DNS names using TSIG-GSS.

samba_kcc

is a script used to compute your KCC (Knowledge Consistency Checker) topology.

samba-regedit

is a ncurses based tool to manage the Samba registry.

samba_spnupdate

is a script to update the servicePrincipalName names from spn_update_list.

samba-tool

is the main Samba administration tool.

samba_upgradedns

is a Unix SMB/CIFS implementation.

sharesec

manipulates share ACL permissions on SMB file shares.

smbcacls

is used to manipulate Windows NT access control lists.

smbclient

is a SMB/CIFS access utility, similar to FTP.

smbcontrol

is used to control running smbd, nmbd and winbindd daemons.

smbcquotas

is used to manipulate Windows NT quotas on SMB file shares.

smbd

is the main Samba daemon which provides SMB/CIFS services to clients.

smbget

is a simple utility with wget-like semantics, that can download files from SMB servers. You can specify the files you would like to download on the command-line.

smbpasswd

changes a user's Samba password.

smbspool

sends a print job to an SMB printer.

smbstatus

reports current Samba connections.

smbtar

is a shell script used for backing up SMB/CIFS shares directly to Linux tape drives or a file.

smbtorture

is a testsuite that runs several tests against a SMB server.

smbtree

is a text-based SMB network browser.

tdbbackup

is a tool for backing up or validating the integrity of Samba .tdb files.

tdbdump

is a tool used to print the contents of a Samba .tdb file.

tdbrestore

is a tool for creating a Samba .tdb file out of a ntdbdump.

tdbtool

is a tool which allows simple database manipulation from the command line.

testparm

checks an smb.conf file for proper syntax.

wbinfo

queries a running winbindd daemon.

winbindd

resolves names from Windows NT servers.

libnss_winbind.so

provides Name Service Switch API functions for resolving names from NT servers.

libnss_wins.so

provides API functions for Samba's implementation of the Windows Internet Naming Service.

libnetapi.so

provides the API functions for the administration tools used for Samba and remote CIFS servers.

libsmbclient.so

provides the API functions for the Samba SMB client tools.

libwbclient.so

provides API functions for Windows domain client services.

Last updated on 2017-02-20 11:43:55 -0800

Wget-1.19.1

Introduction to Wget

The Wget package contains a utility useful for non-interactive downloading of files from the Web.

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

Package Information

Wget Dependencies

Recommended
Optional

GnuTLS-3.5.9, GPGME-1.8.0, libidn-1.33, PCRE-8.40, Valgrind-3.12.0 (optional for the test suite), IO::Socket::SSL, HTTP::Daemon (both required for the test suite), and libpsl

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wget

Installation of Wget

Install Wget by running the following commands:

./configure --prefix=/usr      \
            --sysconfdir=/etc  \
            --with-ssl=openssl &&
make

To test the results, issue: make check. The HTTPS tests fail if valgrind is 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-1.0.2k instead of GnuTLS-3.5.9.

--enable-valgrind-tests: This allows the tests to be run under valgrind.

Configuring Wget

Config Files

/etc/wgetrc and ~/.wgetrc

If you have installed the Certificate Authority Certificates and you want Wget to use them, as the root user:

echo ca-directory=/etc/ssl/certs >> /etc/wgetrc

Contents

Installed Program: wget
Installed Libraries: None
Installed Directories: None

Short Descriptions

wget

retrieves files from the Web using the HTTP, HTTPS and FTP protocols. It is designed to be non-interactive, for background or unattended operations.

Last updated on 2017-02-15 14:01:44 -0800

Wireless Tools-29

Introduction to Wireless Tools

The Wireless Extension (WE) is a generic API in the Linux kernel allowing a driver to expose configuration and statistics specific to common Wireless LANs to user space. A single set of tools can support all the variations of Wireless LANs, regardless of their type as long as the driver supports Wireless Extensions. WE parameters may also be changed on the fly without restarting the driver (or Linux).

The Wireless Tools (WT) package is a set of tools allowing manipulation of the Wireless Extensions. They use a textual interface to support the full Wireless Extension.

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

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/WirelessTools

Kernel Configuration

To use Wireless Tools, the kernel must have the appropriate drivers and other support available. The appropriate bus must also be available. For many laptops, the PCMCIA bus (CONFIG_PCCARD) needs to be built. In some cases, this bus support will also need to be built for embedded wireless cards. The appropriate bridge support also needs to be built. For many modern laptops, the CardBus host bridge (CONFIG_YENTA) will be needed.

In addition to the bus, the actual driver for the specific wireless card must also be available. There are many wireless cards and they don't all work with Linux. The first place to look for card support is the kernel. The drivers are located in Device Drivers → Network Device Support → Wireless LAN (non-hamradio). There are also external drivers available for some very common cards. For more information, look at the user notes.

After the correct drivers are loaded, the interface will appear in /proc/net/wireless.

Installation of Wireless Tools

First, apply a patch that fixes a problem when numerous networks available:

patch -Np1 -i ../wireless_tools-29-fix_iwlist_scanning-1.patch

To install Wireless Tools, use the following commands:

make

This package does not come with a test suite.

Now, as the root user:

make PREFIX=/usr INSTALL_MAN=/usr/share/man install

Command Explanations

INSTALL_MAN=/usr/share/man: Install manual pages in /usr/share/man instead of /usr/man

Contents

Installed Programs: ifrename, iwconfig, iwevent, iwgetid, iwlist, iwpriv, and iwspy
Installed Library: libiw.so
Installed Directories: None

Short Descriptions

ifrename

renames network interfaces based on various static criteria.

iwconfig

configures a wireless network interface.

iwevent

displays wireless events generated by drivers and setting changes.

iwgetid

reports ESSID, NWID or AP/Cell Address of wireless networks.

iwlist

gets detailed wireless information from a wireless interface.

iwpriv

configures optional (private) parameters of a wireless network interface.

iwspy

gets wireless statistics from specific node.

libiw.so

contains functions required by the wireless programs and provides an API for other programs.

Last updated on 2017-02-20 16:33:44 -0800

wpa_supplicant-2.6

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-8.0 platform.

Package Information

WPA Supplicant Dependencies

Recommended
Optional

dbus-1.10.14, libxml2-2.9.4, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wpa_supplicant

Kernel Configuration

Enable the following options in the kernel configuration as well as specific device drivers for your hardware and recompile the kernel if necessary:

[*] Networking support  --->                              [CONFIG_NET]
  [*] Wireless  --->                                      [CONFIG_WIRELESS]
    <*/M> cfg80211 - wireless configuration API           [CONFIG_CFG80211]
    [*]     cfg80211 wireless extensions compatibility    [CONFIG_CFG80211_WEXT]
    <*/M> Generic IEEE 802.11 Networking Stack (mac80211) [CONFIG_MAC80211]
Device Drivers  --->
  [*] Network device support  --->                        [CONFIG_NETDEVICES]
    [*] Wireless LAN  --->                                [CONFIG_WLAN]

Open the submenu and select the options that support your hardware: lspci from pciutils-3.5.2 can be used to view your hardware configuration.

Installation of WPA Supplicant

First you will need to create an initial configuration file for the build process. You can read wpa_supplicant/README and wpa_supplicant/defconfig for the explanation of the following options as well as other options that can be used. Create a build configuration file that should work for standard WiFi setups by running the following command:

cat > wpa_supplicant/.config << "EOF"
CONFIG_BACKEND=file
CONFIG_CTRL_IFACE=y
CONFIG_DEBUG_FILE=y
CONFIG_DEBUG_SYSLOG=y
CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON
CONFIG_DRIVER_NL80211=y
CONFIG_DRIVER_WEXT=y
CONFIG_DRIVER_WIRED=y
CONFIG_EAP_GTC=y
CONFIG_EAP_LEAP=y
CONFIG_EAP_MD5=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_OTP=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_TLS=y
CONFIG_EAP_TTLS=y
CONFIG_IEEE8021X_EAPOL=y
CONFIG_IPV6=y
CONFIG_LIBNL32=y
CONFIG_PEERKEY=y
CONFIG_PKCS12=y
CONFIG_READLINE=y
CONFIG_SMARTCARD=y
CONFIG_WPS=y
CFLAGS += -I/usr/include/libnl3
EOF

If you wish to use WPA Supplicant with NetworkManager-1.6.2, make sure that you have installed dbus-1.10.14 and libxml2-2.9.4, 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=/sbin LIBDIR=/lib

If you have installed Qt-5.8.0 and wish to build the WPA Supplicant GUI program, run the following commands:

Note

The following directory name is labelled qt4, but is compatible with Qt-5.8.0.

pushd wpa_gui-qt4 &&
qmake wpa_gui.pro &&
make &&
popd

This package does not come with a test suite.

Now, as the root user:

install -v -m755 wpa_{cli,passphrase,supplicant} /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.{epitest.hostap.WPASupplicant,w1.wpa_supplicant1}.service \
                 /usr/share/dbus-1/system-services/ &&
install -v -m644 dbus/dbus-wpa_supplicant.conf \
                 /etc/dbus-1/system.d/wpa_supplicant.conf

If you have built the WPA Supplicant GUI program, install it by running the following commands as the root user:

install -v -m755 wpa_gui-qt4/wpa_gui /usr/bin/ &&
install -v -m644 doc/docbook/wpa_gui.8 /usr/share/man/man8/ &&
install -v -m644 wpa_gui-qt4/wpa_gui.desktop /usr/share/applications/ &&
install -v -m644 wpa_gui-qt4/icons/wpa_gui.svg /usr/share/pixmaps/

Note

You will need to restart the system D-Bus daemon before you can use the WPA Supplicant D-Bus interface.

Note

This package installs desktop files into the /usr/share/applications hierarchy and you can improve system performance and memory usage by updating /usr/share/applications/mimeinfo.cache. To perform the update you must have desktop-file-utils-0.23 installed and issue the following command as the root user:

update-desktop-database

Configuring wpa_supplicant

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 SECRET_PASSWORD > /etc/sysconfig/wpa_supplicant-wifi0.conf

/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 or GUI, but it must be done via a privileged user. To do that, add the following to the configuration file:

ctrl_interface=DIR=/run/wpa_supplicant GROUP=<privileged group>
update_config=1

Replace the <privileged group> above with a system group where members have the ability to connect to a wireless access point.

There are many options that you could use to tweak how you connect to each access point. They are described in some detail in the wpa_supplicant/wpa_supplicant.conf file in the source tree.

Connecting to an Access Point

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-20170225 package:

make install-service-wpa

If your router/access point uses DHCP to allocate IP addresses, you can install DHCP-4.3.5 client 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="dhclient"
DHCP_START=""
DHCP_STOP=""

# Set PRINTIP="yes" to have the script print
# the DHCP assigned IP address
PRINTIP="no"

# Set PRINTALL="yes" to print the DHCP assigned values for
# IP, SM, DG, and 1st NS. This requires PRINTIP="yes".
PRINTALL="no"
EOF

If you prefer dhcpcd-6.11.5 instead of DHCP-4.3.5 client, 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="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_gui, wpa_supplicant, wpa_passphrase and wpa_cli
Installed Libraries: None
Installed Directories: None

Short Descriptions

wpa_gui

is a graphical frontend program for interacting with wpa_supplicant.

wpa_supplicant

is a daemon that can connect to a password protected wireless access point.

wpa_passphrase

takes an SSID and a password and generates a simple configuration that wpa_supplicant can understand.

wpa_cli

is a command line interface used to control a running wpa_supplicant daemon.

Last updated on 2017-02-20 12:59:39 -0800

Other Networking Programs

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/othernetprogs

NCPFS contains client and administration tools for use with Novell networks. See the User Notes for details.

Last updated on 2007-04-04 12:42:53 -0700

Chapter 16. Networking Utilities

This chapter contains some tools that come in handy when the network needs investigating.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/basicnetworkingutilities

Avahi-0.6.32

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-8.0 platform.

Package Information

Avahi Dependencies

Required

GLib-2.50.3

Recommended
Optional

D-Bus Python-1.2.4 and PyGTK-2.24.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/avahi

Installation of Avahi

There should be a dedicated user and group to take control of the avahi-daemon daemon after it is started. Issue the following commands as the root user:

groupadd -fg 84 avahi &&
useradd -c "Avahi Daemon Owner" -d /var/run/avahi-daemon -u 84 \
        -g avahi -s /bin/false avahi

There should also be a dedicated priviliged access group for Avahi clients. Issue the following command as the root user:

groupadd -fg 86 netdev

Install Avahi by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-static     \
            --disable-mono       \
            --disable-monodoc    \
            --disable-python     \
            --disable-qt3        \
            --disable-qt4        \
            --enable-core-docs   \
            --with-distro=none   \
            --with-systemdsystemunitdir=no &&
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-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.

--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-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-20170225 package.

make install-avahi

Contents

Installed Programs: avahi-autoipd, avahi-bookmarks, avahi-browse, avahi-browse-domains, avahi-daemon, avahi-discover, 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-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/{corby,discovery,rendezvous,salt}, avahi-compat-libdns_sd,avahi-core,avahi-glib,avahi-gobject,avahi-ui}, lib/{avahi,python2.7/site-packages/{avahi, avahi_discover}},share/{avahi/interfaces,locale/en_NZ/LC_MESSAGES}}

Short Descriptions

avahi-autoipd

is a IPv4LL network address configuration daemon.

avahi-bookmarks

is a Web service showing mDNS/DNS-SD announced HTTP services using the Avahi 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

browses for mDNS/DNS-SD services using the Avahi daemon.

avahi-discover-standalone

browses for mDNS/DNS-SD services using the Avahi daemon.

avahi-dnsconfd

is a Unicast DNS server from mDNS/DNS-SD configuration daemon.

avahi-publish

registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon.

avahi-publish-address

registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon.

avahi-publish-service

registers a mDNS/DNS-SD service or host name or address mapping using the Avahi daemon.

avahi-resolve

resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon.

avahi-resolve-address

resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon.

avahi-resolve-host-name

resolves one or more mDNS/DNS host name(s) to IP address(es) (and vice versa) using the Avahi daemon.

avahi-set-host-name

changes the mDNS host name.

bssh

browses for SSH servers on the local network.

bvnc

browses for VNC servers on the local network.

Last updated on 2017-02-18 22:13:39 -0800

BIND Utilities-9.11.0-P3

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.11.0-P3. 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-8.0 platform.

Package Information

BIND Utilities Dependencies

Optional

libcap-2.25 with PAM, libxml2-2.9.4, and OpenSSL-1.0.2k

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/bind-utils

Installation of BIND Utilities

Install BIND Utilities by running the following commands:

./configure --prefix=/usr &&
make -C lib/dns &&
make -C lib/isc &&
make -C lib/bind9 &&
make -C lib/isccfg &&
make -C lib/lwres &&
make -C bin/dig

This portion of the package does not come with a test suite.

Now, as the root user:

make -C bin/dig install

Command Explanations

make -C lib/...: These commands build the libraries that are needed for the client programs.

make -C bin/dig: This command builds the client programs.

Contents

Installed Programs: dig, host, and nslookup
Installed Libraries: None
Installed Directories: None

Short Descriptions

See the program descriptions in the BIND-9.11.0-P3 section.

Last updated on 2017-02-14 22:04:32 -0800

NetworkManager-1.6.2

Introduction to NetworkManager

NetworkManager is a set of co-operative tools that make networking simple and straightforward. Whether 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-8.0 platform.

Package Information

NetworkManager Dependencies

Required

dbus-glib-0.108, libgudev-231, libndp-1.6, libnl-3.2.29, and NSS-3.29

Recommended
Optional

BlueZ-5.43, GTK-Doc-1.25, Qt-5.8.0 (for examples), ModemManager-1.6.4, Valgrind-3.12.0, dnsmasq, Jansson, libteam, PPP, and RP-PPPoE

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/NetworkManager

Installation of NetworkManager

If Qt-5.8.0 is installed and the Qt based examples are desired, fix the configure script:

sed -e '/Qt[CDN]/s/Qt/Qt5/g'       \
    -e 's/moc_location/host_bins/' \
    -i configure

Install NetworkManager by running the following commands:

CXXFLAGS="-O2 -fPIC"                       \
./configure --prefix=/usr                  \
            --sysconfdir=/etc              \
            --localstatedir=/var           \
            --with-nmtui                   \
            --disable-ppp                  \
            --disable-json-validation      \
            --with-systemdsystemunitdir=no \
            --docdir=/usr/share/doc/network-manager-1.6.2 &&
make

An already active graphical session with bus address is necessary to run the tests. To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

CXXFLAGS="-O2 -fPIC": These compiler options are necessary to build the Qt5 based examples.

--with-nmtui: This parameter enables build of nmtui.

--with-systemdsystemunitdir=no: This parameter is used for sysv init systems. If you use systemd, replace "no" by the proper directory.

--disable-ppp: This parameter disables parameteral PPP support in NetworkManager.

--disable-json-validation: This parameter allows building without Jansson, which is needed for “team” configuration validation (team is one way of bonding network interfaces for increased throughput).

--enable-gtk-doc: Use this switch if you have installed GTK-Doc-1.25 and wish to build the API manuals.

--without-iptables: Use this switch if you don't have Iptables installed.

Configuring NetworkManager

Config Files

/etc/NetworkManager/NetworkManager.conf

Configuration Information

For NetworkManager to work, at least a minimal configuration file must be present. Such file is not installed with make install. Issue the following command as the root user to create minimal NetworkManager.conf file:

cat >> /etc/NetworkManager/NetworkManager.conf << "EOF"
[main]
plugins=keyfile
EOF

You can add dns=none to suppress changes to /etc/resolv.conf. See man 5 NetworkManager.conf for any additional options.

To allow regular users permission 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-20170225 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.

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-glib.so, libnm-glib-vpn.so, libnm.so, libnm-util.so, and modules under /usr/lib/NetworkManager
Installed Directories: /etc/NetworkManager, /usr/include/{libnm,libnm-glib,NetworkManager}, /usr/lib/NetworkManager, /usr/share/doc/NetworkManager-1.6.2, /usr/share/gtk-doc/html/{libnm,libnm-glib,libnm-util,NetworkManager} (if the documentation is built), and /var/{lib,run}/NetworkManager

Short Descriptions

nmcli

is a command-line tool for controlling NetworkManager and getting its status.

nm-online

is a utility to find out whether you are online.

nmtui

is an interactive ncurses based interface for nmcli.

nmtui-connect

is an interactive ncurses based interface connection to activate/deactivate connections.

nmtui-edit

is an interactive ncurses based interface connection editor.

nmtui-hostname

is an interactive ncurses based interface hostname editor.

NetworkManager

is the network management daemon.

libnm-glib.so

contains functions used by NetworkManager.

libnm-glib-vpn.so

contains functions used by NetworkManager VPN plugins.

libnm-util.so

contains functions used by NetworkManager utils.

Last updated on 2017-02-24 10:42:12 -0800

Nmap-7.40

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-8.0 platform.

Package Information

  • Download (HTTP): http://nmap.org/dist/nmap-7.40.tar.bz2

  • Download MD5 sum: 9c5a28bfb46228bade82b238408c065e

  • Download size: 8.6 MB

  • Estimated disk space required: 101 MB (add 22 MB for tests)

  • Estimated build time: 0.8 SBU (add 0.2 SBU for tests)

Nmap Dependencies

Recommended

Note

These packages are recommended because if they're not installed, the build process will compile and link against its own (often older) version.

Optional

OpenSSL-1.0.2k, PyGTK-2.24.0 (required for zenmap), Python-2.7.13 (required for ndiff) and Subversion-1.9.5 (required for nmap-update)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nmap

Installation of Nmap

Install Nmap by running the following commands:

./configure --prefix=/usr --with-liblua=included &&
make

If you wish to run the test suite, run the following command:

sed -i 's/lib./lib/' zenmap/test/run_tests.py

To test the results, issue: make check as the root user. Tests need a graphical session.

Now, as the root user:

make install

Command Explanations

--with-liblua=included: This switch is required to fix compilation with lua 5.3.

Contents

Installed Programs: ncat, ndiff, nmap, nmapfe, nmap-update, nping, uninstall_ndiff, uninstall_zenmap, xnmap and zenmap
Installed Libraries: None
Installed Directories: /usr/lib/python2.7/site-packages/{radialnet,zenmapCore,zenmapGUI}, and /usr/share/{ncat,nmap,zenmap}

Short Descriptions

ncat

is a utility for reading and writing data across networks from the command line.

ndiff

is a tool to aid in the comparison of Nmap scans.

nmap

is a utility for network exploration and security auditing. It supports ping scanning, port scanning and TCP/IP fingerprinting.

nmapfe

is a symbolic link to zenmap.

nmap-update

is an updater for Nmap architecture-independent files.

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.

xnmap

is a symbolic link to zenmap.

zenmap

is a Python based graphical nmap frontend viewer.

Last updated on 2017-02-21 11:59:18 -0800

Traceroute-2.1.0

Introduction to Traceroute

The Traceroute package contains a program which is used to display the network route that packets take to reach a specified host. This is a standard network troubleshooting tool. If you find yourself unable to connect to another system, traceroute can help pinpoint the problem.

Note

This package overwrites the version of traceroute that was installed in the inetutils package in LFS. This version is more powerful and allows many more options than the standard version.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/traceroute

Installation of Traceroute

Install Traceroute by running the following commands:

make

This package does not come with a test suite.

Now, as the root user:

make prefix=/usr install                                 &&
mv /usr/bin/traceroute /bin                              &&
ln -sv -f traceroute /bin/traceroute6                    &&
ln -sv -f traceroute.8 /usr/share/man/man8/traceroute6.8 &&
rm -fv /usr/share/man/man1/traceroute.1

The traceroute.1 file that was installed in LFS by inetutils is no longer relevant. This package overwrites that version of traceroute and installs the man page in man chapter 8.

Contents

Installed Program: traceroute and traceroute6 (symlink)
Installed Libraries: None
Installed Directories: None

Short Descriptions

traceroute

does basically what it says: it traces the route your packets take from the host you are working on to another host on a network, showing all the intermediate hops (gateways) along the way.

traceroute6

is equivalent to traceroute -6.

Last updated on 2017-02-15 18:28:58 -0800

Whois-5.2.14

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-5.45 package.

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

Package Information

Whois Dependencies

Optional

libidn-1.33

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/whois

Installation of Whois

Build the application with:

make

You can install the whois program, the mkpasswd program, and the locale files independently. Control your choice of what is installed with the following commands issued as the root user:

Note

Installing this version of mkpasswd will overwrite the same command installed by Expect-5.45.

make prefix=/usr install-whois
make prefix=/usr install-mkpasswd
make prefix=/usr install-pos

Command Explanations

HAVE_LIBIDN=1: This make variable adds internationalized string handling support to whois.

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

generate new password, optionally apply it to a user.

Last updated on 2017-02-15 18:28:58 -0800

Wicd-1.7.4

Introduction to Wicd

Wicd is a network manager written in Python. It simplifies network setup by automatically detecting and connecting to wireless and wired networks. Wicd includes support for WPA authentication and DHCP configuration. It provides Curses- and GTK-based graphical frontends for user-friendly control. An excellent KDE-based frontend is also available http://projects.kde.org/projects/extragear/network/wicd-kde.

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

Package Information

Wicd Dependencies

Required

Python-2.7.13, D-Bus Python-1.2.4, Wireless Tools-29, and Net-tools-CVS_20101030 (Wicd needs mii-tool from this package)

Recommended
Optional

pm-utils-1.4.1 (for suspend/resume integration), Urwid (for the Curses-based frontend), and Babel (for internationalization)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wicd

Installation of Wicd

Install Wicd by running the following commands:

sed -e "/wpath.logrotate\|wpath.systemd/d" \
    -e "/detection failed/ a\                self.init=\'init\/default\/wicd\'" \
    -i.orig setup.py &&

rm po/*.po           &&

python setup.py configure --no-install-kde     \
                          --no-install-acpi    \
                          --no-install-pmutils \
                          --no-install-init    \
                          --no-install-gnome-shell-extensions \
                          --docdir=/usr/share/doc/wicd-1.7.4

This package does not come with a test suite.

Now, as the root user, install the package:

python setup.py install

Command Explanations

sed -e ... -i setup.py: The first expression in this sed command prevents installation of logrotate and systemd configuration files. You may omit it if you use these utilities. The second one fixes building with BLFS.

rm po/*.po: This command removes the international messages associated with this package. The command is required unless Babel is installed. If it is installed, po/ast.po still needs to be removed in order for the build to complete.

--no-install-kde: Prevent installation of an autostart desktop file for KDE. If you use KDE, you should instead install the Wicd KDE Client.

--no-install-acpi: Prevent installation of suspend and resume scripts for acpid. Omit this option if you use acpid.

--no-install-pmutils: Prevent installation of hooks for pm-utils. Omit this option if you use pm-utils.

--no-install-init: Prevent installation of any init scripts, as a bootscript is installed later in the instructions.

--no-install-gnome-shell-extensions: Prevent installation of the respective extensions. Remove this switch, if you are using Gnome Shell.

--wicdgroup=<group>: The group that will have permission to use the Wicd client (default is the users group).

Configuring Wicd

Config Files

/etc/wicd/manager-settings.conf, /etc/wicd/wired-settings.conf and /etc/wicd/wireless-settings.conf

Configuration Information

To automatically start Wicd at boot time, you need to first install the Wicd bootscript, /etc/rc.d/init.d/wicd , included in the blfs-bootscripts-20170225 package (as user root):

make install-wicd

Since Wicd will now handle all configuration of network devices, the network bootscript installed by LFS should be disabled. This can be achieved by either removing any S*network and K*network symlinks in the /etc/rc*.d directories or by setting ONBOOT=no in any /etc/sysconfig/ifconfig.* files.

No manual configuration of Wicd is needed if you use the graphical frontends. If you are only going to use Wicd from command-line, you can configure it using the configuration files in /etc/wicd. For a list of available options, look at the man-pages for: wicd-manager-settings.conf, wicd-wired-settings.conf and wicd-wireless-settings.conf.

Be sure to add all users who are to have rights to open and close network connections with Wicd to the users group (or the group specified with the --wicdgroup configuration option).

Contents

Installed Programs: wicd, wicd-cli, wicd-client, wicd-curses (not functional if Urwid is not installed), and wicd-gtk
Installed Libraries: None
Installed Directories: /{etc,usr/share,var/lib,var/log,var/run}/wicd, /usr/lib/python2.7/site-packages/wicd and /usr/share/doc/wicd-1.7.4

Short Descriptions

wicd

is the wicd daemon.

wicd-cli

is a command line interface for configuring the wicd daemon.

wicd-client

is the wicd client. This script attempts to automatically choose the relevant configuration interface.

wicd-curses

is a curses interface for configuring the wicd daemon.

wicd-gtk

is a GTK interface for configuring the wicd daemon

Last updated on 2017-02-24 09:33:07 -0800

Wireshark-2.2.1

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-8.0 platform.

Package Information

Additional Downloads

Wireshark dependencies

Required

GLib-2.50.3

Recommended
Optional

GnuTLS-3.5.9, libgcrypt-1.7.6, libnl-3.2.29, Lua-5.3.4, MIT Kerberos V5-1.15, OpenSSL-1.0.2k, SBC-1.3, adns, c-ares, libsmi, GeoIP, and PortAudio (for GTK+ RTP player)

Optional (for GUI front-ends)

GTK+-2.24.31

Note

The GTK+ GUI needs one of GTK+-2.24.31 or GTK+-3.22.8. If both are installed, GTK+3 is used by default.

The Qt GUI needs Qt-5.8.0.

Both GTK+ and Qt GUI front-ends are built, as recommended by the upstream developers. If you want to override the defaults, some configure switches have to be set (see “Command Explanations”).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/wireshark

Kernel Configuration

The kernel must have the Packet protocol enabled for Wireshark to capture live packets from the network:

[*] Networking support --->          [CONFIG_NET]
      Networking options --->
        <*/M> Packet socket          [CONFIG_PACKET]

If built as a module, the name is af_packet.ko.

Installation of Wireshark

Wireshark is a very large and complex application. These instructions provide additional security measures to ensure that only trusted users are allowed to view network traffic. First, set up a system group for wireshark. As the root user:

groupadd -g 62 wireshark

Continue to install Wireshark by running the following commands:

patch -Np1 -i ../wireshark-2.2.1-lua_5_3_1-1.patch  &&

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

This package does not come with a test suite.

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/wireshark-2.2.1 &&
install -v -m644    README{,.linux} doc/README.* doc/*.{pod,txt} \
                    /usr/share/doc/wireshark-2.2.1 &&

pushd /usr/share/doc/wireshark-2.2.1 &&
   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-2.2.1

Now, set ownership and permissions of sensitive applications to only allow authorized users. As the root user:

chown -v root:wireshark /usr/bin/{tshark,dumpcap} &&
chmod -v 6550 /usr/bin/{tshark,dumpcap}

Finally, add any users to the wireshark group (as root user):

usermod -a -G wireshark <username>

If you are installing wireshark for the first time, it will be necessary to leave the session and login again, thus you will now have wireshark between your groups, otherwise, it will not run properly.

Command Explanations

--with-gtk2=[yes/no]: For the Gtk+2 GUI. If both Gtk+2 and 3 are installed, default is no. Notice that the GUI for only one Gtk+ version (either 2 or 3) can be built.

--with-gtk3=[yes/no]: For the Gtk+3 GUI. If both Gtk+2 and 3 are installed, default is yes.

--with-qt=[yes/no/4/5]: For the Qt GUI. Default is yes.

--disable-wireshark: Use this switch if you have GTK+ installed but do not want to build any of the GUIs.

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.6.1. 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: androiddump, capinfos, captype, dftest, dumpcap, editcap, idl2wrs, mergecap, randpkt, rawshark, reordercap, text2pcap, tshark, wireshark, and wireshark-gtk
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-2.2.1

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.

dftest

is a display-filter-compiler test program.

dumpcap

is a network traffic dump tool. It lets you capture packet data from a live network and write the packets to a file.

editcap

edits and/or translates the format of capture files. It knows how to read libpcap capture files, including those of tcpdump, Wireshark and other tools that write captures in that format.

mergecap

combines multiple saved capture files into a single output file.

randpkt

creates random-packet capture files.

rawshark

dump and analyze raw libpcap data.

reordercap

reorder timestamps of input file frames into output file.

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.

wireshark-gtk

is the Gtk+ GUI network protocol analyzer. It lets you interactively browse packet data from a live network or from a previously saved capture file.

libwireshark.so

contains functions used by the Wireshark programs to perform filtering and packet capturing.

libwiretap.so

is a library being developed as a future replacement for libpcap, the current standard Unix library for packet capturing. For more information, see the README file in the source wiretap directory.

Last updated on 2017-02-22 13:57:24 -0800

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.

cURL-7.52.1

Introduction to cURL

The cURL package contains an utility and a library used for transferring files with URL syntax to any of the following protocols: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. Its ability to both download and upload files can be incorporated into other programs to support functions like streaming media.

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

Package Information

  • Download (HTTP): https://curl.haxx.se/download/curl-7.52.1.tar.lzma

  • Download MD5 sum: ddbd157359bc8a9174e11b151254b264

  • Download size: 2.0 MB

  • Estimated disk space required: 39 MB (additional 11 MB for tests)

  • Estimated build time: 0.4 SBU (additional 2.8 SBU for tests)

Additional Downloads

cURL Dependencies

Recommended
Optional

MIT Kerberos V5-1.15, nghttp2-1.19.0, OpenLDAP-2.4.44, Samba-4.5.5, c-ares, libidn2, libmetalink, libpsl, librtmp, libssh2, mbed TLS (formerly known as PolarSSL), and SPNEGO

Optional for Running the Test Suite

stunnel-5.40 (for the HTTPS and FTPS tests) and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/curl

Installation of cURL

Install cURL by running the following commands:

patch -Np1 -i ../curl-7.52.1-valgrind_filter-1.patch &&
./configure --prefix=/usr                           \
            --disable-static                        \
            --enable-threaded-resolver              \
            --with-ca-path=/etc/ssl/certs &&
make

To run the test suite, issue: make test.

Now, as the root user:

make install &&

rm -rf docs/examples/.deps &&

find docs \( -name Makefile\* \
          -o -name \*.1       \
          -o -name \*.3 \)    \
          -exec rm {} \;      &&
install -v -d -m755 /usr/share/doc/curl-7.52.1 &&
cp -v -R docs/*     /usr/share/doc/curl-7.52.1

Simple tests to the new installed curl: curl --trace-ascii debugdump.txt http://www.example.com/ and curl --trace-ascii d.txt --trace-time http://example.com/. Inspect the locally created trace files debugdump.txt and d.txt, which contain version downloaded files information, etc. One file has the time for each action logged.

Command Explanations

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

--enable-threaded-resolver: This switch enables cURL's builtin threaded DNS resolver.

--with-ca-path=/etc/ssl/certs: This switch sets the location of the BLFS Certificate Authority Certificates.

--with-gssapi: This parameter adds Kerberos 5 support to libcurl.

--without-ssl --with-gnutls: Use to build with GnuTLS support instead of OpenSSL for SSL/TLS.

--with-ca-bundle=/etc/ssl/ca-bundle.crt: Use this switch instead of --with-ca-path if building with GnuTLS support instead of OpenSSL for SSL/TLS.

find docs ... -exec rm {} \;: This command removes Makefiles and man files from the documentation directory that would otherwise be installed by the commands that follow.

Contents

Installed Programs: curl, and curl-config
Installed Library: libcurl.so
Installed Directories: /usr/include/curl and /usr/share/doc/curl-7.52.1

Short Descriptions

curl

is a command line tool for transferring files with URL syntax.

curl-config

prints information about the last compile, like libraries linked to and prefix setting.

libcurl.so

provides the API functions required by curl and other programs.

Last updated on 2017-02-14 16:20:11 -0800

GeoClue-0.12.0

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-8.0 platform.

Package Information

Additional Downloads

GeoClue Dependencies

Required

dbus-glib-0.108, GConf-3.2.6 and libxslt-1.1.29

Recommended if you are building GNOME
Optional

GPSD, GTK+-2.24.31 and oFono

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/geoclue

Installation of GeoClue

Install GeoClue by running the following commands:

patch -Np1 -i ../geoclue-0.12.0-gpsd_fix-1.patch &&

sed -i "s@ -Werror@@" configure &&
sed -i "s@libnm_glib@libnm-glib@g" configure &&

sed -i "s@geoclue/libgeoclue.la@& -lgthread-2.0@g" \
       providers/skyhook/Makefile.in &&

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed -i "s@ -Werror@@" configure: This sed removes -Werror from the CFLAGS variable, otherwise the build will fail with gcc-4.7.

sed -i "s@libnm_glib@libnm-glib@g" configure: This sed fixes detection of NetworkManager libraries.

sed -i "s@geoclue/libgeoclue.la@& -lgthread-2.0@g" .. : This sed fixes building GeoClue with recent binutils.

Contents

Installed Programs: None
Installed Library: libgeoclue.so
Installed Directory: /usr/include/geoclue, /usr/share/geoclue-providers, and /usr/share/gtk-doc/html/geoclue

Short Descriptions

libgeoclue.so

contains functions that provide the GeoClue geoinformation application programming interface.

Last updated on 2017-02-18 22:13:39 -0800

GeoClue-2.4.5

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-8.0 platform.

Package Information

GeoClue Dependencies

Required

JSON-GLib-1.2.2 and libsoup-2.56.0

Recommended
Optional

libnotify-0.7.7

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/geoclue2

Installation of GeoClue

Install GeoClue 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

--disable-3g-source: This switch disables the 3G backend. Use it if you have not installed the ModemManager package.

--disable-modem-gps-source: This switch disables the modem GPS backend. Use it if you have not installed the ModemManager package.

Contents

Installed Programs: None
Installed Libraries: libgeoclue-2.so
Installed Directories: /etc/geoclue, /usr/include/libgeoclue-2.0, and /usr/libexec/geoclue-2.0

Last updated on 2017-02-18 22:13:39 -0800

glib-networking-2.50.0

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-8.0 platform.

Package Information

GLib Networking Dependencies

Required

GLib-2.50.3, GnuTLS-3.5.9 and gsettings-desktop-schemas-3.22.0

Recommended
Optional

libproxy

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/glib-networking

Installation of GLib Networking

Install GLib Networking by running the following commands:

./configure --prefix=/usr                                 \
            --with-ca-certificates=/etc/ssl/ca-bundle.crt \
            --disable-static                              &&
make

To test the results, issue: make -k check.

Now, as the root user:

make install

Command Explanations

--with-ca-certificates=/etc/ssl/ca-bundle.crt: This parameter specifies where the trusted root certificates are located.

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

Contents

Installed Program: None
Installed Libraries: libgiognomeproxy.so and libgiognutls.so (GIO Modules installed in /usr/lib/gio/modules)
Installed Directories: None

Last updated on 2017-02-16 19:24:14 -0800

ldns-1.7.0

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-8.0 platform.

Package Information

ldns Dependencies

Recommended
Optional

Certificate Authority Certificates and libpcap-1.8.1 (for example programs), Python-2.7.13 and SWIG-3.0.12 (for Python bindings), and Doxygen-1.8.13 (for html documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ldns

Installation of ldns

Install ldns by running the following commands:

./configure --prefix=/usr           \
            --sysconfdir=/etc       \
            --disable-static        \
            --disable-dane-ta-usage \
            --with-drill            &&
make

If you have Doxygen-1.8.13 installed and want to build html documentation, run the following command:

make doc

This package does not come with a working test suite.

Now, as the root user:

make install

If you built html documentation, install it by running the following commands as the root user:

install -v -m755 -d /usr/share/doc/ldns-1.7.0 &&
install -v -m644 doc/html/* /usr/share/doc/ldns-1.7.0

Command Explanations

--disable-dane-ta-usage: This option disables DANE-TA (DNS-Based Authentication of Named Entities) support. Remove this opion if OpenSSL-1.1.0 or later is installed.

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

--with-examples: This option enables building of the example programs.

--with-pyldns: This option enables building of the Python bindings.

Contents

Installed Programs: drill and ldns-config
Installed Library: libldns.so and /usr/lib/python2.7/site-packages/_ldns.so
Installed Directories: /usr/include/ldns and /usr/share/doc/ldns-1.7.0

Short Descriptions

drill

is a tool like dig from BIND Utilities-9.11.0-P3 designed to get all sorts of information out of the DNS.

ldns-config

shows compiler and linker flags for ldns usage.

libldns.so

provides the ldns API functions to programs.

Last updated on 2017-02-22 13:57:24 -0800

libevent-2.1.8

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-8.0 platform.

Package Information

libevent Dependencies

Recommended
Optional

Doxygen-1.8.13 (for API documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libevent

Installation of libevent

Install libevent by running the following commands:

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

If you have Doxygen-1.8.13 installed and wish to build API documentation, issue doxygen Doxyfile.

To test the results, issue: make verify.

Now, as the root user:

make install

If you built the API documentation, install it by issuing the following commands as the root user:

install -v -m755 -d /usr/share/doc/libevent-2.1.8/api &&
cp      -v -R       doxygen/html/* \
                    /usr/share/doc/libevent-2.1.8/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.8

Last updated on 2017-02-14 22:04:32 -0800

libnl-3.2.29

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-8.0 platform.

Package Information

Optional Download

libnl Dependencies

Optional

Check-0.11.0 (for tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libnl

Installation of libnl

Install libnl by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  &&
make

To test the results, issue: make check.

Now, as the root user:

make install

If you wish to install the API documentation, as the root user:

mkdir -vp /usr/share/doc/libnl-3.2.29 &&
tar -xf ../libnl-doc-3.2.29.tar.gz --strip-components=1 --no-same-owner \
    -C  /usr/share/doc/libnl-3.2.29

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 32 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.2.29

Short Descriptions

genl-ctrl-list

queries the Generic Netlink controller in the kernel and prints a list of all registered Generic Netlink families including the version of the interface that has been registered.

nl-class-add

adds, updates, or replaces Traffic Classes

nl-class-delete

deletes Traffic Classes

nl-classid-lookup

is used to resolve qdisc/class names to classid values and vice versa.

nl-class-list

lists Traffic Classes.

nl-cls-add

adds a classifier.

nl-cls-delete

deletes a classifier.

nl-cls-list

lists classifiers.

nl-link-list

dumps link attributes.

nl-pktloc-lookup

allows the lookup of packet location definitions.

nl-qdisc-add

adds queueing disciplines (qdiscs) in the kernel.

nl-qdisc-delete

deletes queueing disciplines (qdiscs) in the kernel.

nl-qdisc-list

lists queueing disciplines (qdiscs) in the kernel.

libnl*-3.so

These libraries contain API functions used to access Netlink interfaces in Linux kernel.

Last updated on 2017-02-18 22:13:39 -0800

libpcap-1.8.1

Introduction to libpcap

libpcap provides functions for user-level packet capture, used in low-level network monitoring.

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

Package Information

Additional Downloads

libpcap Dependencies

Optional

BlueZ-5.43, libnl-3.2.29, libusb-1.0.21, Software distribution for the DAG, and Septel range of passive network monitoring cards.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libpcap

Installation of libpcap

Install libpcap by running the following commands:

patch -Np1 -i ../libpcap-1.8.1-enable_bluetooth-1.patch &&

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

Command Explanations

--enable-bluetooth=no: Necessary, if the recommended patch is not applied, because since 1.6.1 this application needs a fix, in order to build with bluez-5.21.

Contents

Installed Program: pcap-config
Installed Libraries: libpcap.so, libpcap.a (optional)
Installed Directory: /usr/include/pcap

Short Descriptions

pcap-config

provides configuration information for libpcap.

libpcap.{a,so}

are libraries used for user-level packet capture.

Last updated on 2017-02-21 11:59:18 -0800

libndp-1.6

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-8.0 platform.

Package Information

  • Download (HTTP): http://libndp.org/files/libndp-1.6.tar.gz

  • Download MD5 sum: 1e54d26bcb4a4110bc3f90c5dd04f1a7

  • Download size: 356 KB

  • Estimated disk space required: 2.7 MB

  • Estimated build time: less than 0.1 SBU

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libndp

Installation of libndp

Install libndp by running the following command:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-static     &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: ndptool
Installed Library: libndp.so
Installed Directory: None

Short Descriptions

ndptool

is a tool for sending and receiving NDP messages.

libndp.so

provides a wrapper for the IPv6 Neighbor Discovery Protocol.

Last updated on 2017-02-18 22:13:39 -0800

libsoup-2.56.0

Introduction to libsoup

The libsoup is a HTTP client/server library for GNOME. It uses GObject and the GLib main loop to integrate with GNOME applications and it also has an asynchronous API for use in threaded applications.

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

Package Information

libsoup Dependencies

Required

glib-networking-2.50.0, libxml2-2.9.4 and SQLite-3.17.0

Recommended
Optional

Apache-2.4.25 (required to run the test suite), cURL-7.52.1 (required to run the test suite), MIT Kerberos V5-1.15 (required to run the test suite), GTK-Doc-1.25, PHP-7.1.2 compiled with XMLRPC-EPI support (only used for the XMLRPC regression tests) and Samba-4.5.5 (ntlm_auth is required to run the test suite).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsoup

Installation of libsoup

Install libsoup 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-vala: use this if you have not installed Vala, e.g. because you are not building GNOME.

--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: libsoup-2.4.so and libsoup-gnome-2.4.so
Installed Directories: /usr/include/libsoup-2.4, /usr/include/libsoup-gnome-2.4 and /usr/share/gtk-doc/html/libsoup-2.4

Short Descriptions

libsoup-2.4.so

provides functions for asynchronous HTTP connections.

libsoup-gnome-2.4.so

provides GNOME specific features.

Last updated on 2017-02-16 19:24:14 -0800

libtirpc-1.0.1

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-8.0 platform.

Package Information

libtirpc Dependencies

Optional

MIT Kerberos V5-1.15 for the GSSAPI

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libtirpc

Installation of libtirpc

Note

If updating this package, you will also need to update any existing version of rpcbind-0.2.4

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 &&
mv -v /usr/lib/libtirpc.so.* /lib &&
ln -sfv ../../lib/libtirpc.so.3.0.0 /usr/lib/libtirpc.so

Command Explanations

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

--disable-gssapi: This switch is needed if no GSSAPI is installed. Remove this switch if you have one installed (for example MIT Kerberos V5-1.15) and you wish to use it.

mv -v /usr/lib/libtirpc.so.* ...: Move shared libraries into /lib so they are available before /usr is mounted.

Contents

Installed Programs: None
Installed Libraries: libtirpc.so
Installed Directory: /usr/include/tirpc

Short Descriptions

libtirpc.so

provides the Remote Procedure Call (RPC) API functions required by other programs.

Last updated on 2017-02-14 19:04:01 -0800

neon-0.30.2

Introduction to neon

neon is an HTTP and WebDAV client library, with a C interface.

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

Package Information

  • Download (HTTP): http://www.webdav.org/neon/neon-0.30.2.tar.gz

  • Download MD5 sum: e28d77bf14032d7f5046b3930704ef41

  • Download size: 911 KB

  • Estimated disk space required: 8.5 MB (additional 18 MB for the tests)

  • Estimated build time: 0.1 SBU (additional 0.3 SBU for the tests)

neon Dependencies

Recommended
Optional

libxml2-2.9.4, MIT Kerberos V5-1.15, libproxy, and pakchois,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/neon

Installation of neon

Fix some code when building with gnutls-3.4 and later:

sed -e 's/client_set/set/'  \
    -e 's/gnutls_retr/&2/'  \
    -e 's/type = t/cert_&/' \
    -i src/ne_gnutls.c

Install neon by running the following commands:

./configure --prefix=/usr    \
            --with-ssl       \
            --enable-shared  \
            --disable-static &&
make

To test the results, issue: make check. Most of the ssl tests fail, using --with-ssl=gnutls.

Now, as the root user:

make install

Command Explanations

--with-ssl: This switch enables SSL support using OpenSSL or GnuTLS respectively. Remove it if you don't have any of these installed. To force GnuTLS usage when both are present, simply pass --with-ssl=gnutls and --with-ca-bundle=/etc/ssl/ca-bundle.crt to the configure script.

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

--with-libxml2: This switch forces the use of libxml2 instead of Expat.

Contents

Installed Program: neon-config
Installed Library: libneon.so
Installed Directories: /usr/include/neon and /usr/share/doc/neon-0.30.2

Short Descriptions

neon-config

is a script that provide information about an installed copy of the neon library.

libneon.so

is used as a high-level interface to common HTTP and WebDAV methods.

Last updated on 2017-02-17 16:10:58 -0800

nghttp2-1.19.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-8.0 platform.

Package Information

nghttp2 Dependencies

Recommended

libxml2-2.9.4

Optional

Boost-1.63.0, libevent-2.1.8, Python-2.7.13, CUnit (required for the testsuite), Cython, Jansson, jemalloc, libev, mruby, Spdylay, and Sphinx.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nghttp2

Installation of nghttp2

Install nghttp2 by running the following commands:

./configure --prefix=/usr     \
            --disable-static  \
            --enable-lib-only \
            --docdir=/usr/share/doc/nghttp2-1.19.0 &&
make

This package does not come with a usable test suite.

Now, as the root user:

make install

Command Explanations

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

--enable-lib-only: only build libnghttp2. Omit this switch if you'd like to build the example applications, Python bindings, or the C++ asio library.

Contents

Installed Programs: None
Installed Libraries: libnghttp2.so
Installed Directories: /usr/include/nghttp2

Short Descriptions

libnghttp2.so

an implementation of the Hypertext Transfer Protocol version 2 in C.

Last updated on 2017-02-22 13:57:24 -0800

Serf-1.3.9

Introduction to Serf

The Serf package contains a C-based HTTP client library built upon the Apache Portable Runtime (APR) library. It multiplexes connections, running the read/write communication asynchronously. Memory copies and transformations are kept to a minimum to provide high performance operation.

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

Package Information

  • Download (HTTP): https://archive.apache.org/dist/serf/serf-1.3.9.tar.bz2

  • Download MD5 sum: 370a6340ff20366ab088012cd13f2b57

  • Download size: 144 KB

  • Estimated disk space required: 3.2 MB (additional 3 MB for the tests)

  • Estimated build time: less than 0.1 SBU (additional 0.5 SBU for the tests)

Serf Dependencies

Required

Apr-Util-1.5.4, OpenSSL-1.0.2k, and SCons-2.5.1

Optional

MIT Kerberos V5-1.15, for the GSSAPI

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/serf

Installation of Serf

Install Serf by running the following commands:

sed -i "/Append/s:RPATH=libdir,::"   SConstruct &&
sed -i "/Default/s:lib_static,::"    SConstruct &&
sed -i "/Alias/s:install_static,::"  SConstruct &&
scons PREFIX=/usr

To test the results, issue: scons check.

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.

Last updated on 2017-02-14 19:04:01 -0800

Chapter 18. Text Web Browsers

People who are new to Unix-based systems tend to ask the question "Why on earth would I want a text-mode browser? I'm going to compile X and use Konqueror/Mozilla/Whatever!". Those who have been around systems for a while know that when (not if) you manage to mess up your graphical browser install and you need to look up some information on the web, a console based browser will save you. Also, there are quite a few people who prefer to use one of these browsers as their primary method of browsing; either to avoid the clutter and bandwidth which accompanies images or because they may use a text-to-speech synthesizer which can read the page to them (of use for instance to partially sighted or blind users). In this chapter you will find installation instructions for three console web browsers:

Links-2.14

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-8.0 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 X Window System

For decoding various image formats Links can utilize libpng-1.6.28, libjpeg-turbo-1.5.1, librsvg-2.40.16, and LibTIFF-4.0.7

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/LinksBrowser

Installation of Links

Install Links by running the following commands:

./configure --prefix=/usr --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -d -m755 /usr/share/doc/links-2.14 &&
install -v -m644 doc/links_cal/* KEYS BRAILLE_HOWTO \
    /usr/share/doc/links-2.14

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

Short Descriptions

links

is a text and graphics mode WWW browser.

Last updated on 2017-02-16 19:05:12 -0800

Lynx-2.8.8rel.2

Introduction to Lynx

Lynx is a text based web browser.

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

Package Information

Lynx Dependencies

Optional

OpenSSL-1.0.2k or GnuTLS-3.5.9 (experimental), Zip-3.0, UnZip-6.0, an MTA (that provides a sendmail command), and Sharutils-4.15.2 (for a uudecode program)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Lynx

Installation of Lynx

Install Lynx by running the following commands:

./configure --prefix=/usr          \
            --sysconfdir=/etc/lynx \
            --datadir=/usr/share/doc/lynx-2.8.8rel.2 \
            --with-zlib            \
            --with-bzlib           \
            --with-screen=ncursesw \
            --enable-locale-charset &&
make

This package does not come with a test suite.

Now, as the root user:

make install-full &&
chgrp -v -R root /usr/share/doc/lynx-2.8.8rel.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.8.8rel.2: This parameter is used so that the documentation files are installed into /usr/share/doc/lynx-2.8.8rel.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-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-nls: This switch allows Lynx to print translated messages (such as questions about cookies and SSL certificates).

--with-ssl: This enables support for linking SSL into Lynx.

--with-gnutls: This enables experimental support for linking GnuTLS into Lynx.

make install-full: In addition to the standard installation, this target installs the documentation and help files.

chgrp -v -R root /usr/share/doc/lynx-2.8.8rel.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-8.0.069, set this option to “vi”).

By default, Lynx doesn't save cookies between sessions. Again as the root user, change this setting:

sed -e '/#PERSIST/    a PERSISTENT_COOKIES:TRUE' \
    -i /etc/lynx/lynx.cfg

Many other system-wide settings such as proxies can also be set in the /etc/lynx/lynx.cfg file.

Contents

Installed Program: lynx
Installed Libraries: None
Installed Directories: /etc/lynx and /usr/share/doc/lynx-2.8.8rel.2

Short Descriptions

lynx

is a general purpose, text-based, distributed information browser for the World Wide Web.

Last updated on 2017-02-19 11:32:33 -0800

W3m-0.5.3

Introduction to W3m

w3m is primarily a pager but it can also be used as a text-mode WWW browser.

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

Package Information

Additional Downloads

W3m Dependencies

Required

GC-7.6.0

Optional

GPM-1.20.7, OpenSSL-1.0.2k, Imlib2-1.4.9, GTK+-2.24.31, Imlib (not recommended: obsolete, abandoned upstream, buggy, and gives no additional functionality as compared to other image loading libraries), gdk-pixbuf-2.36.5, Compface-1.5.2, and nkf, a Mail User Agent, and an External Browser

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/W3M

Installation of W3m

Install w3m by running the following commands:

patch -Np1 -i ../w3m-0.5.3-bdwgc72-1.patch &&
sed -i 's/file_handle/file_foo/' istream.{c,h} &&
sed -i 's#gdk-pixbuf-xlib-2.0#& x11#' configure &&

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

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m644 -D doc/keymap.default /etc/w3m/keymap &&
install -v -m644    doc/menu.default /etc/w3m/menu &&
install -v -m755 -d /usr/share/doc/w3m-0.5.3 &&
install -v -m644    doc/{HISTORY,READ*,keymap.*,menu.*,*.html} \
                    /usr/share/doc/w3m-0.5.3

Command Explanations

patch -p1 < ../w3m-0.5.3-bdwgc72-1.patch: This patch fixes compiling w3m with GC-7.2 installed.

sed -i 's/file_handle/file_foo/' istream.{c,h}: This sed renames the file_handle function to avoid a clash with a glibc function that has the same name, defined in /usr/include/bits/fcntl.h.

sed -i 's#gdk-pixbuf-xlib-2.0#& x11#' configure: This sed fixes compiling w3m using GTK+-2.24.31 as its image library. It has no impact if GTK+-2.24.31 is not installed.

--sysconfdir=/etc: This option puts the configuration files in /etc.

Configuring W3m

Config Files

/etc/w3m/* and ~/.w3m/*

Contents

Installed Programs: w3m and w3mman
Installed Libraries: None
Installed Directories: /usr/libexec/w3m, /usr/share/w3m, and /usr/share/doc/w3m-0.5.3

Short Descriptions

w3m

is a text based web browser and pager.

w3mman

is an interface to the on-line reference manuals in w3m.

Last updated on 2017-02-17 12:01:55 -0800

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

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-8.0 platform.

Package Information

Fetchmail Dependencies

Recommended
Optional

Python-2.7.13 and Tk-8.6.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fetchmail

Installation of Fetchmail

Install Fetchmail by running the following commands:

./configure --prefix=/usr --with-ssl --enable-fallback=procmail &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-ssl: This enables SSL support, so that you can handle connections to secure POP3 and IMAP servers.

--enable-fallback=procmail: This tells Fetchmail to hand incoming mail to Procmail for delivery, if the port 25 mail server is not present or not responding.

Configuring Fetchmail

Config Files

~/.fetchmailrc

Configuration Information

cat > ~/.fetchmailrc << "EOF"
set logfile /var/log/fetchmail.log
set no bouncemail
set postmaster root

poll SERVERNAME :
    user <username> pass <password>;
    mda "/usr/bin/procmail -f %F -d %T";
EOF

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.

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

it will assist you in setting up and editing a ~/.fetchmailrc configuration file, by using a Tk GUI interface. It requires Python and it must have the Tkinker module available.

Last updated on 2017-02-22 16:21:14 -0800

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-8.0 platform.

Package Information

Additional Downloads

Heirloom mailx Dependencies

Optional

OpenSSL-1.0.2k or NSS-3.29, MIT Kerberos V5-1.15 (for IMAP GSSAPI authentication), and an MTA

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mailx

Installation of Heirloom mailx

Note

This package does not support parallel build.

Install Heirloom mailx by running the following commands.

patch -Np1 -i ../heirloom-mailx-12.5-fixes-1.patch &&
make SENDMAIL=/usr/sbin/sendmail -j1

This package does not come with a test suite.

Now, as the root user:

make PREFIX=/usr UCBINSTALL=/usr/bin/install install &&
ln -v -sf mailx /usr/bin/mail &&
ln -v -sf mailx /usr/bin/nail &&
install -v -m755 -d /usr/share/doc/heirloom-mailx-12.5 &&
install -v -m644 README /usr/share/doc/heirloom-mailx-12.5

Command Explanations

make SENDMAIL=/usr/sbin/sendmail: This changes the default MTA path of /usr/lib/sendmail.

make PREFIX=/usr UCBINSTALL=/usr/bin/install install: This changes the default installation path of /usr/local and the default install command path of /usr/ucb.

Configuring Heirloom mailx

Config Files

/etc/nail.rc, ~/.mailrc and ~/.nailrc

Contents

Installed Programs: mail, mailx and nail
Installed Libraries: None
Installed Directories: None

Short Descriptions

mailx

is a command-line mail user agent compatible with the mailx command found on commercial Unix versions.

mail

is a symbolic link to mailx.

nail

is a symbolic link to mailx.

Last updated on 2017-02-16 19:05:12 -0800

Mutt-1.7.2

Introduction to Mutt

The Mutt package contains a Mail User Agent. This is useful for reading, writing, replying to, saving, and deleting your email.

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

Package Information

  • Download (FTP): ftp://ftp.mutt.org/pub/mutt/mutt-1.7.2.tar.gz

  • Download MD5 sum: 15425c4c9946d58c22ccb44901544e6d

  • Download size: 3.9 MB

  • Estimated disk space required: 37 MB (plus a further 5MB for the PDF manual)

  • Estimated build time: 0.3 SBU (plus a further 0.1 SBU to build the PDF manual)

Mutt Dependencies

Optional

Aspell-0.60.6.1, Cyrus SASL-2.1.26, GDB-7.12.1, GnuPG-2.1.18, GPGME-1.8.0, libgssapi, libidn-1.33, MIT Kerberos V5-1.15, Mixmaster, an MTA (that provides a sendmail command), slang-2.3.1, OpenSSL-1.0.2k or GnuTLS-3.5.9, Berkeley DB-6.2.23 or QDBM or Tokyo Cabinet

Optional (To Regenerate HTML Documentation)

libxslt-1.1.29 and either Lynx-2.8.8rel.2, w3m-0.5.3, or ELinks

Optional (To Generate PDF Manual)

docbook-dsssl-1.79, OpenJade-1.3.2, and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mutt

Installation of Mutt

Mutt requires a group named mail. You can add this group, if it does not exist, with this command:

groupadd -g 34 mail

If you did not install an MTA, you need to modify the ownership of /var/mail with this command:

chgrp -v mail /var/mail

Mutt will rebuild the html documentation if libxslt is present, then use that to update the text manual - even if none of the specified browsers are present. That will create an empty text file, so we will save the shipped file.

Install Mutt by running the following commands:

cp -v doc/manual.txt{,.shipped} &&
./configure --prefix=/usr                           \
            --sysconfdir=/etc                       \
            --with-docdir=/usr/share/doc/mutt-1.7.2 \
            --enable-external-dotlock               \
            --enable-pop                            \
            --enable-imap                           \
            --enable-hcache                         \
            --enable-sidebar                        &&
make &&
test -s doc/manual.txt || mv -v doc/manual.txt{.shipped,}

To generate the PDF manual with texlive-20160523b, run the following command:

make -C doc manual.pdf

This package does not come with a test suite.

Now, as the root user:

make install

If you generated the PDF manual, install it by issuing the following command as the root user:

install -v -m644 doc/manual.pdf \
    /usr/share/doc/mutt-1.7.2

Note

If you used a DESTDIR method to only install to a temporary location as a regular user (as part of a package menagement process), you will need to run the following as the root user after completing the real install:

chown root:mail /usr/bin/mutt_dotlock &&
chmod -v 2755 /usr/bin/mutt_dotclock

Command Explanations

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

--enable-smtp: This switch enables SMTP relay support.

--with-ssl: This parameter adds SSL/TLS support from OpenSSL-1.0.2k in POP3/IMAP/SMTP if they are enabled.

--with-sasl: This parameter adds authentication support from Cyrus SASL-2.1.26 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.

test -s doc/manual.txt || mv -v doc/manual.txt{.shipped,}: if the text manual is now empty (libxslt is installed, but without any of the specified text browsers), restore it from the copy.

Configuring Mutt

Config Files

/etc/Muttrc, ~/.muttrc, /etc/mime.types, ~/.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-1.7.2/samples/gpg.rc >> ~/.muttrc

Contents

Installed Programs: flea, mutt, mutt_dotlock, muttbug, pgpewrap, pgpring, and smime_keys
Installed Libraries: None
Installed Directories: /usr/share/doc/mutt-1.7.2

Short Descriptions

flea

is a bug submitter for Mutt.

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 that executes flea.

pgpewrap

prepares a command line for the GnuPG-2.1.18 utilities.

pgpring

is a key ring dumper for PGP. It is not needed for GnuPG-2.1.18.

smime_keys

manages a keystore for S/MIME certificates.

Last updated on 2017-02-22 16:21:14 -0800

Procmail-3.22

Introduction to Procmail

The Procmail package contains an autonomous mail processor. This is useful for filtering and sorting incoming mail.

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

Package Information

Procmail Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/procmail

Installation of Procmail

This package does not come with a test suite.

Install Procmail by running the following commands as the root user:

sed -i 's/getline/get_line/' src/*.[ch] &&

make LOCKINGTEST=/tmp MANDIR=/usr/share/man install &&
make install-suid

Command Explanations

sed -i 's/getline/get_line/' src/*.[ch]: This renames procmail's getline function to avoid conflict with the getline function from glibc.

make LOCKINGTEST=/tmp install: This prevents make from asking you where to test file-locking patterns.

make install-suid: Modifies permissions of the installed files.

Configuring Procmail

Config Files

/etc/procmailrc and ~/.procmailrc

Configuration Information

Recipes have to be written and placed in ~/.procmailrc for execution. The procmailex man page is the starting place to learn how to write recipes. For additional information, see also http://pm-doc.sourceforge.net/.

Contents

Installed Programs: formail, lockfile, mailstat and procmail
Installed Libraries: None
Installed Directories: None

Short Descriptions

formail

is a filter that can be used to format mail into mailbox format.

lockfile

is a utility that can lock a file for single use interactively or in a script.

mailstat

prints a summary report of mail that has been filtered by procmail since the last time mailstat was ran.

procmail

is an autonomous mail processor. It performs all the functions of an MDA (Mail Delivery Agent).

Last updated on 2017-02-14 23:25:58 -0800

Re-alpine-2.03

Introduction to Re-alpine

Re-alpine is the continuation of Alpine; a text-based email client developed by the University of Washington.

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

Package Information

Re-alpine Dependencies

Recommended
Optional

OpenLDAP-2.4.44, MIT Kerberos V5-1.15, Aspell-0.60.6.1, Tcl-8.6.6, and Linux-PAM-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/re-alpine

Installation of Re-alpine

Install Re-alpine by running the following commands:

./configure --prefix=/usr       \
            --sysconfdir=/etc   \
            --without-ldap      \
            --without-krb5      \
            --with-ssl-dir=/usr \
            --with-passfile=.pine-passfile &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--without-ldap: Disables LDAP support.

--without-krb5: Disables Kerberos support.

--with-ssl-dir=/usr: Sets the root path to OpenSSL libraries and include files.

--with-passfile=.pine-passfile: Sets the password cache file.

--without-ssl: Disables OpenSSL support.

Configuring Re-alpine

Config Files

~/.pinerc

Configuration Information

It is not required to manually edit any configuration files to use the Alpine email client. Users can configure Alpine using the graphical configuration menu, which stores the changes in ~/.pinerc.

Contents

Installed Programs: alpine, pico, pilot, rpdump, and rpload
Installed Libraries: none
Installed Directories: none

Short Descriptions

alpine

is the Alpine mailer.

pico

is a standalone text editor similar to the Alpine message composer.

pilot

is a standalone file system navigator.

rpdump

is a utility for downloading a pinerc or address book to the local machine.

rpload

is a utility for uploading a local pinerc or address book to an IMAP server.

Last updated on 2017-02-23 12:01:27 -0800

Other Mail and News Programs

Balsa-2.5.3 is a GTK2 based mail client.

SeaMonkey-2.46 includes both a mail client and newsreader in its installation.

Thunderbird-45.7.1 is a mail/news client based on the Mozilla code base.

Last updated on 2013-06-01 05:20:39 -0700

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

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-8.0 platform.

Package Information

Additional Downloads

Apache HTTPD Dependencies

Required

Apr-Util-1.5.4 and PCRE-8.40

Recommended
Optional

Berkeley DB-6.2.23, Doxygen-1.8.13, libxml2-2.9.4, Lynx-2.8.8rel.2 or Links-2.14 or ELinks, nghttp2-1.19.0, OpenLDAP-2.4.44 (Apr-Util-1.5.4 needs to be installed with ldap suport), rsync-3.1.2, Distcache, and Lua-5.3.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/apache

Installation of Apache HTTPD

For security reasons, running the server as an unprivileged user and group is strongly encouraged. Create the following group and user using the following commands as root:

groupadd -g 25 apache &&
useradd -c "Apache Server" -d /srv/www -g apache \
        -s /bin/false -u 25 apache

Build and install Apache HTTPD by running the following commands:

patch -Np1 -i ../httpd-2.4.25-blfs_layout-1.patch           &&

sed '/dir.*CFG_PREFIX/s@^@#@' -i support/apxs.in            &&

./configure --enable-authnz-fcgi                            \
            --enable-layout=BLFS                            \
            --enable-mods-shared="all cgi"                  \
            --enable-mpms-shared=all                        \
            --enable-suexec=shared                          \
            --with-apr=/usr/bin/apr-1-config                \
            --with-apr-util=/usr/bin/apu-1-config           \
            --with-suexec-bin=/usr/lib/httpd/suexec         \
            --with-suexec-caller=apache                     \
            --with-suexec-docroot=/srv/www                  \
            --with-suexec-logfile=/var/log/httpd/suexec.log \
            --with-suexec-uidmin=100                        \
            --with-suexec-userdir=public_html               &&
make

This package does not come with a test suite.

Now, as the root user:

Note

This package does not install properly using DESTDIR techniques as an unpriviledged user.

make install                                 &&

mv -v /usr/sbin/suexec /usr/lib/httpd/suexec &&
chgrp apache           /usr/lib/httpd/suexec &&
chmod 4754             /usr/lib/httpd/suexec &&

chown -v -R apache:apache /srv/www

Command Explanations

sed '/dir.*CFG_PREFIX/s@^@#@'...: Forces the apxs utility to use absolute pathnames for modules, when instructed to do so.

--enable-authnz-fcgi: Build FastCGI authorizer-based authentication and authorization (mod_authnz_fcgi.so fast CGI module).

--enable-mods-shared="all cgi": The modules should be compiled and used as Dynamic Shared Objects (DSOs) so they can be included and excluded from the server using the run-time configuration directives.

--enable-mpms-shared=all: This switch ensures that all MPM (Multi Processing Modules) are built as Dynamic Shared Objects (DSOs), so the user can choose which one to use at runtime.

--enable-suexec: This switch enables building of the Apache suEXEC module which can be used to allow users to run CGI and SSI scripts under user IDs different from the user ID of the calling web server.

--with-suexec-*: These switches control suEXEC module behavior, such as default document root, minimal UID that can be used to run the script under the suEXEC. Please note that with minimal UID 100, you can't run CGI or SSI scripts under suEXEC as the apache user.

... /usr/lib/httpd/suexec: These commands put suexec wrapper into proper location, since it is not meant to be run directly. They also adjust proper permissions of the binary, making it setgid apache.

chown -R apache:apache /srv/www: By default, the installation process installs files (documentation, error messages, default icons, etc.) with the ownership of the user that extracted the files from the tar file. If you want to change the ownership to another user, you should do so at this point. The only requirement is that the document directories need to be accessible by the httpd process with (r-x) permissions and files need to be readable (r--) by the apache user.

Configuring Apache

Config Files

/etc/httpd/httpd.conf and /etc/httpd/extra/*

Configuration Information

See file:///usr/share/httpd/manual/configuring.html for detailed instructions on customising your Apache HTTP server configuration file.

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-20170225 package.

make install-httpd

Contents

Installed Programs: ab, apachectl, apxs, checkgid, dbmmanage, fcgistarter, htcacheclean, htdbm, htdigest, htpasswd, httpd, httxt2dbm, logresolve, rotatelogs, and suexec
Installed Libraries: Several libraries under /usr/lib/httpd/modules/
Installed Directories: /etc/httpd, /srv/www, /usr/include/httpd, /usr/lib/httpd, /usr/share/httpd, /var/log/httpd, and /var/run/httpd

Short Descriptions

ab

is a tool for benchmarking your Apache HTTP server.

apachectl

is a front end to the Apache HTTP server which is designed to help the administrator control the functioning of the Apache httpd daemon.

apxs

is a tool for building and installing extension modules for the Apache HTTP server.

checkgid

is a program that checks whether it can setgid to the group specified. This is to see if it is a valid group for Apache2 to use at runtime. If the user (should be run as superuser) is in that group, or can setgid to it, it will return 0.

dbmmanage

is used to create and update the DBM format files used to store usernames and passwords for basic authentication of HTTP users.

fcgistarter

is a tool to start a FastCGI program.

htcacheclean

is used to clean up the disk cache.

htdbm

is used to manipulate the DBM password databases.

htdigest

is used to create and update the flat-files used to store usernames, realms and passwords for digest authentication of HTTP users.

htpasswd

is used to create and update the flat-files used to store usernames and passwords for basic authentication of HTTP users.

httpd

is the Apache HTTP server program.

httxt2dbm

is used to generate DBM files from text, for use in RewriteMap.

logresolve

is a post-processing program to resolve IP-addresses in Apache's access log files.

rotatelogs

is a simple program for use in conjunction with Apache's piped log file feature.

suexec

allows users to run CGI and SSI applications as a different user.

Last updated on 2017-02-19 14:24:01 -0800

BIND-9.11.0-P3

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.11.0-P3.

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

Package Information

  • Download (FTP): ftp://ftp.isc.org/isc/bind9/9.11.0-P3/bind-9.11.0-P3.tar.gz

  • Download MD5 sum: 311787a0a69345a1f1cf7869b0266bf0

  • Download size: 9.2 MB

  • Estimated disk space required: 141 MB (additional 9 MB for the test suite)

  • Estimated build time: 0.9 SBU (additional 32+ minutes, processor independent, to run the complete test suite)

Additional Downloads

BIND Dependencies

Optional

libcap-2.25 with PAM, libxml2-2.9.4, MIT Kerberos V5-1.15, OpenSSL-1.0.2k, and geoip

Optional database backends

Berkeley DB-6.2.23, MariaDB-10.1.21 or MySQL, OpenLDAP-2.4.44, PostgreSQL-9.6.2, and unixODBC-2.3.4

Optional (to run the test suite)

Net::DNS-1.07 and Net-tools-CVS_20101030 (you may omit net-tools by using the optional patch to utilize iproute2, but the IPv6 tests will fail)

Optional (to rebuild the documentation)

Doxygen-1.8.13, libxslt-1.1.29, and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/bind

Installation of BIND

If you have chosen not to install net-tools, apply the iproute2 patch with the following command:

patch -Np1 -i ../bind-9.11.0-P3-use_iproute2-1.patch

Install BIND by running the following commands:

./configure --prefix=/usr           \
            --sysconfdir=/etc       \
            --localstatedir=/var    \
            --mandir=/usr/share/man \
            --enable-threads        \
            --with-libtool          \
            --disable-static        \
            --with-randomdev=/dev/urandom &&
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 afffect the tests.

bin/tests/system/ifconfig.sh up

The test suite may indicate some skipped tests depending on what configuration options are used. Some tests are marked “UNTESTED ” if Net::DNS-1.07 is not installed. To run the tests, as an unprivileged user, execute:

make -k check

Again as root, clean up the test interfaces:

bin/tests/system/ifconfig.sh down

Finally, install the package as the root user:

make install &&

install -v -m755 -d /usr/share/doc/bind-9.11.0-P3/{arm,misc} &&
install -v -m644    doc/arm/*.html \
                    /usr/share/doc/bind-9.11.0-P3/arm &&
install -v -m644    doc/misc/{dnssec,ipv6,migrat*,options,rfc-compliance,roadmap,sdb} \
                    /usr/share/doc/bind-9.11.0-P3/misc

Command Explanations

--sysconfdir=/etc: This parameter forces BIND to look for configuration files in /etc instead of /usr/etc.

--enable-threads: This parameter enables multi-threading capability.

--with-libtool: This parameter forces the building of dynamic libraries and links the installed binaries to these libraries.

--with-randomdev=/dev/urandom: This parameter specifes a non-blocking random device for use with digital signatures.

--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-static: This switch prevents installation of static versions of the libraries.

cd doc; install ...: These commands install additional package documentation. Omit any or all of these commands if desired.

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/namedb/{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 &&
touch /srv/named/managed-keys.bind &&
cp /usr/lib/engines/libgost.so usr/lib/engines

The rndc.conf file contains information for controlling named operations with the rndc utility. Generate a key for use in the named.conf and rdnc.conf with the rndc-confgen command:

rndc-confgen -r /dev/urandom -b 512 > /etc/rndc.conf &&
sed '/conf/d;/^#/!d;s:^# ::' /etc/rndc.conf > /srv/named/etc/named.conf

Complete the named.conf file from which named will read the location of zone files, root name servers and secure DNS keys:

cat >> /srv/named/etc/named.conf << "EOF"
options {
    directory "/etc/namedb";
    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/namedb/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/namedb/root.hints << "EOF"
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
A.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:ba3e::2:30
B.ROOT-SERVERS.NET.     6D  IN      A       192.228.79.201
B.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:84::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
H.ROOT-SERVERS.NET.     6D  IN      A       198.97.190.53
H.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:1::53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
I.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fe::53
J.ROOT-SERVERS.NET.     6D  IN      A       192.58.128.30
J.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:503:c27::2:30
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
K.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:7fd::1
L.ROOT-SERVERS.NET.     6D  IN      A       199.7.83.42
L.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:500:9f::42
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33
M.ROOT-SERVERS.NET.     6D  IN      AAAA    2001:dc3::35
EOF

The root.hints file is a list of root name servers. This file must be updated periodically with the dig utility. A current copy of root.hints can be obtained from ftp://rs.internic.net/domain/named.root. For details, consult the "BIND 9 Administrator Reference Manual", included in every source archive of BIND 9 distributed by ISC, in HTML and PDF formats, also available at BIND 9 Administrator Reference Manual.

Create or modify resolv.conf to use the new name server with the following commands:

Note

Replace <yourdomain.com> with your own valid domain name.

cp /etc/resolv.conf /etc/resolv.conf.bak &&
cat > /etc/resolv.conf << "EOF"
search <yourdomain.com>
nameserver 127.0.0.1
EOF

Set permissions on the chroot jail with the following command:

chown -R named:named /srv/named

Boot Script

To start the DNS server at boot, install the /etc/rc.d/init.d/bind init script included in the blfs-bootscripts-20170225 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 located at doc/arm/Bv9ARM.html in the package source tree, for further configuration options.

Contents

Installed Programs: arpaname, bind9-config hardlinked to isc-config.sh, ddns-confgen, delv, dig, dnssec-dsfromkey, dnssec-importkey, dnssec-keyfromlabel, dnssec-keygen, dnssec-revoke, dnssec-settime, dnssec-signzone, dnssec-verify, genrandom, host, isc-hmac-fixup, lwresd hardlinked to named, named-checkconf, named-checkzone, named-compilezone (symlink), named-journalprint, named-rrchecker, nsec3hash, nslookup, nsupdate, rndc, rndc-confgen, and tsig-keygen (symlink)
Installed Libraries: libbind9.so, libdns.so, libirs.so, libisc.so, libisccc.so, libisccfg.so, and liblwres.so
Installed Directories: /usr/include/{bind9,dns,dst,irs,isc,isccc,isccfg,lwres,pk11,pkcs11}, /usr/share/doc/bind-9.11.0-P3 and /srv/named

Short Descriptions

arpaname

translates IP addresses to the corresponding ARPA names.

bind9-config

is hardlinked to isc-config.sh.

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-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 crypto hardware and builds key files for DNSSEC.

dnssec-keygen

is a key generator for secure DNS.

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.

genrandom

generates a file containing random data.

host

is a utility for DNS lookups.

isc-config.sh

prints information related to the installed version of ISC BIND.

isc-hmac-fixup

fixes HMAC keys generated by older versions of BIND.

lwresd

is a caching-only name server for local process use.

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.

nsec3hash

generates an NSEC3 hash based on a set of NSEC3 parameters.

nslookup

is a program used to query Internet domain nameservers.

nsupdate

is used to submit DNS update requests.

rndc

controls the operation of BIND.

rndc-confgen

generates rndc.conf files.

tsig-keygen

is a symlink to ddns-confgen.

Last updated on 2017-02-23 12:54:19 -0800

ProFTPD-1.3.5d

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-8.0 platform.

Package Information

ProFTPD Dependencies

Optional

libcap-2.25 with PAM, Linux-PAM-1.3.0, MariaDB-10.1.21 or MySQL, OpenSSL-1.0.2k, PCRE-8.40, and PostgreSQL-9.6.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/proftpd

Installation of ProFTPD

For security reasons, you should install ProFTPD using an unprivileged user and group. As the root user:

groupadd -g 46 proftpd                             &&
useradd -c proftpd -d /srv/ftp -g proftpd \
        -s /usr/bin/proftpdshell -u 46 proftpd     &&

install -v -d -m775 -o proftpd -g proftpd /srv/ftp &&
ln -v -s /bin/false /usr/bin/proftpdshell          &&
echo /usr/bin/proftpdshell >> /etc/shells

Install ProFTPD as an unprivileged user by running the following commands:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/run &&
make

This packages does not come with a usable test suite.

Now, as the root user:

make install                                   &&
install -d -m755 /usr/share/doc/proftpd-1.3.5d &&
cp -Rv doc/*     /usr/share/doc/proftpd-1.3.5d

Command Explanations

install -v -d -m775 -o proftpd -g proftpd /srv/ftp: Create the home directory for ProFTPD.

ln -v -s /bin/false /usr/bin/proftpdshell: Set the default shell as a link to an invalid shell.

echo /usr/bin/proftpdshell >> /etc/shells: Fake a valid shell for compatibility purposes.

Note

The above two commands can be omitted if the following directive is placed in the configuration file:

RequireValidShell off

By default, proftpd will require that users logging in have valid shells. The RequireValidShell directive turns off this requirement. This is only recommended if you are setting up your FTP server exclusively for anonymous downloads.

Note

Support for most of the dependency packages requires using options passed to the configure script. View the output from ./configure --help for complete information about enabling dependency packages.

Configuring ProFTPD

Config Files

/etc/proftpd.conf

Configuration Information

This is a simple, download-only sample configuration. See the ProFTPD documentation in /usr/share/doc/proftpd and consult the website at http://www.proftpd.org/ for example configurations.

cat > /etc/proftpd.conf << "EOF"
# This is a basic ProFTPD configuration file
# It establishes a single server and a single anonymous login.

ServerName                      "ProFTPD Default Installation"
ServerType                      standalone
DefaultServer                   on

# Port 21 is the standard FTP port.
Port                            21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service

MaxInstances                    30

# Set the user and group that the server normally runs at.
User                            proftpd
Group                           proftpd

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~


# Normally, files should be overwritable.
<Directory /*>
  AllowOverwrite                on
</Directory>

# A basic anonymous configuration, no upload directories.
<Anonymous ~proftpd>
  User                          proftpd
  Group                         proftpd
  # Clients should be able to login with "anonymous" as well as "proftpd"
  UserAlias                     anonymous proftpd

  # Limit the maximum number of anonymous logins
  MaxClients                    10

  # 'welcome.msg' should be displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin                  welcome.msg
  DisplayChdir                  .message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
</Anonymous>
EOF

Boot Script

Install the /etc/rc.d/init.d/proftpd init script included in the blfs-bootscripts-20170225 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

Short Descriptions

proftpd

is the FTP daemon.

ftpcount

shows the current number of connections.

ftpdctl

is used to control the proftpd daemon while it is running.

ftpasswd

is a Perl script designed to create and manage AuthUserFiles and AuthGroupFiles of the correct format for proftpd.

ftpmail

is a Perl script for sending email based on the proftpd TransferLog.

ftpquota

is a Perl script designed to create and manage limits and tally files for the mod_quotatab + mod_quotatab_file module combination for proftpd.

ftpscrub

provides a way to scrub the scoreboard file on demand.

ftpshut

shuts down all proftpd servers at a given time.

ftptop

displays running status on connections.

ftpwho

shows current process information for each session.

prxs

is a Perl script designed to compile and install third-party modules, from source code, as DSO modules for the installed proftpd.

Last updated on 2017-02-23 12:54:19 -0800

vsftpd-3.0.3

Introduction to vsftpd

The vsftpd package contains a very secure and very small FTP daemon. This is useful for serving files over a network.

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

Package Information

vsftpd Dependencies

Optional

libcap-2.25 with PAM, Linux-PAM-1.3.0, and OpenSSL-1.0.2k

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vsftpd

Installation of vsftpd

For security reasons, running vsftpd as an unprivileged user and group is encouraged. Also, a user should be created to map anonymous users. As the root user, create the needed directories, users, and groups with the following commands:

install -v -d -m 0755 /usr/share/vsftpd/empty &&
install -v -d -m 0755 /home/ftp               &&
groupadd -g 47 vsftpd                         &&
groupadd -g 45 ftp                            &&

useradd -c "vsftpd User"  -d /dev/null -g vsftpd -s /bin/false -u 47 vsftpd &&
useradd -c anonymous_user -d /home/ftp -g ftp    -s /bin/false -u 45 ftp

Build vsftpd as an unprivileged user using the following command:

make

This package does not come with a test suite.

Once again, become the root user and install vsftpd with the following commands:

install -v -m 755 vsftpd        /usr/sbin/vsftpd    &&
install -v -m 644 vsftpd.8      /usr/share/man/man8 &&
install -v -m 644 vsftpd.conf.5 /usr/share/man/man5 &&
install -v -m 644 vsftpd.conf   /etc

Command Explanations

install -v -d ...: This creates the directory that anonymous users will use (/home/ftp) and the directory the daemon will chroot into (/usr/share/vsftpd/empty).

Note

/home/ftp should not be owned by the user vsftpd, or the user ftp.

echo "#define VSF_BUILD_TCPWRAPPERS" >>builddefs.h: Use this prior to make to add support for tcpwrappers.

echo "#define VSF_BUILD_SSL" >>builddefs.h: Use this prior to make to add support for SSL.

install -v -m ...: The Makefile uses non-standard installation paths. These commands install the files in /usr and /etc.

Configuring vsftpd

Config Files

/etc/vsftpd.conf

Configuration Information

vsftpd comes with a basic anonymous-only configuration file that was copied to /etc above. While still as root, this file should be modified because it is now recommended to run vsftpd in standalone mode. Also, you should specify the privilege separation user created above. Finally, you should specify the chroot directory. man vsftpd.conf will give you all the details.

cat >> /etc/vsftpd.conf << "EOF"
background=YES
listen=YES
nopriv_user=vsftpd
secure_chroot_dir=/usr/share/vsftpd/empty
EOF

To enable local logins, append the following to the /etc/vsftpd.conf file (as the root user):

cat >> /etc/vsftpd.conf << "EOF"
local_enable=YES
EOF

In addition, if using Linux-PAM and vsftpd with local user logins, you will need a Linux-PAM configuration file. As the root user, create the /etc/pam.d/vsftpd file, and add the needed configuration changes for Linux-PAM session support using the following commands:

cat > /etc/pam.d/vsftpd << "EOF" &&
# Begin /etc/pam.d/vsftpd
auth       required     /lib/security/pam_listfile.so item=user sense=deny \
                                                      file=/etc/ftpusers \
                                                      onerr=succeed
auth       required     pam_shells.so
auth       include      system-auth
account    include      system-account
session    include      system-session
EOF

cat >> /etc/vsftpd.conf << "EOF"
session_support=YES
pam_service_name=vsftpd
EOF

Boot Script

Install the /etc/rc.d/init.d/vsftpd init script included in the blfs-bootscripts-20170225 package.

make install-vsftpd

Contents

Installed Program: vsftpd
Installed Libraries: None
Installed Directories: /usr/share/vsftpd, /home/ftp

Short Descriptions

vsftpd

is the FTP daemon.

Last updated on 2017-02-23 12:54:19 -0800

Chapter 21. Mail Server Software

MTAs are the programs which transport mail from one machine to the other. The traditional MTA is Sendmail, however there are several other choices.

As well as SMTP servers there is a POP server (qpopper) and an IMAP server (Courier-IMAP).

Dovecot-2.2.27

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-8.0 platform.

Package Information

Dovecot Dependencies

Optional

CLucene-2.3.3.4, ICU-58.2, libcap-2.25 with PAM, Linux-PAM-1.3.0, MariaDB-10.1.21 or MySQL, MIT Kerberos V5-1.15 (for GSSAPI support), OpenLDAP-2.4.44, OpenSSL-1.0.2k, PostgreSQL-9.6.2, SQLite-3.17.0, Valgrind-3.12.0, Cassandra, lz4, and stemmer

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dovecot

Installation of Dovecot

There should be dedicated users and groups for unprivileged Dovecot processes and for processing users' logins. Issue the following commands as the root user:

groupadd -g 42 dovecot &&
useradd -c "Dovecot unprivileged user" -d /dev/null -u 42 \
        -g dovecot -s /bin/false dovecot &&
groupadd -g 43 dovenull &&
useradd -c "Dovecot login user" -d /dev/null -u 43 \
        -g dovenull -s /bin/false dovenull

Install Dovecot by running the following commands:

./configure --prefix=/usr                          \
            --sysconfdir=/etc                      \
            --localstatedir=/var                   \
            --docdir=/usr/share/doc/dovecot-2.2.27 \
            --disable-static &&
make

To test the results, issue make -k check. Tests using openssl fail when valgrind is present, because openssl increases entropy by reading uninitialized variables. see openssl's FAQ.

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 authentication support.

--with-mysql: This switch enables MySQL authentication support.

--with-sqlite: This switch enables SQLite authentication support.

--with-lucene: This switch enables CLucene full text search support.

--with-krb5: This switch enables GSSAPI authentication support.

Configuring Dovecot

Config Files

/etc/dovecot/dovecot.conf, /etc/dovecot/conf.d/*, and /etc/dovecot/local.conf

Configuration Information

Copy an example configuration, which you can use as a starting point:

cp -rv /usr/share/doc/dovecot-2.2.27/example-config/* /etc/dovecot

The following configuration is a simple proof of concept with IMAP service using local users for authentication and mailbox location. Reading files from the conf.d directory is commented out since the included example configuration requires OpenSSL and Linux PAM.

sed -i '/^\!include / s/^/#/' /etc/dovecot/dovecot.conf &&
chmod -v 1777 /var/mail &&
cat > /etc/dovecot/local.conf << "EOF"
protocols = imap
ssl = no
# The next line is only needed if you have no IPv6 network interfaces
listen = *
mail_location = mbox:~/Mail:INBOX=/var/mail/%u
userdb {
  driver = passwd
}
passdb {
  driver = shadow
}
EOF

You will definitely want to read the official documentation at http://wiki2.dovecot.org/ if you plan to use Dovecot in 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-20170225 package.

make install-dovecot

Contents

Installed Programs: doveadm, doveconf, dovecot, and dsync (symbolic link)
Installed Libraries: various internal plugins in /usr/lib/dovecot
Installed Directories: /etc/dovecot, /usr/{include,lib,libexec,share}/dovecot and /usr/share/doc/dovecot-2.2.27

Short Descriptions

doveadm

is the Dovecot administration tool.

doveconf

is Dovecot's configuration dumping utility.

dovecot

is the IMAP and POP server.

dsync

is Dovecot's mailbox synchronization utility.

Last updated on 2017-02-24 09:33:07 -0800

Exim-4.88

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-8.0 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 http://exim.org/docs.html.

Exim Dependencies

Required

PCRE-8.40

Recommended
Optional

Berkeley DB-6.2.23 or TDB (alternatives to GDBM, built in LFS), Cyrus SASL-2.1.26, libidn-1.33, Linux-PAM-1.3.0, MariaDB-10.1.21 or MySQL, OpenLDAP-2.4.44, GnuTLS-3.5.9, PostgreSQL-9.6.2, SQLite-3.17.0, X Window System, Heimdal GSSAPI, and OpenDMARC

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/exim

Installation of Exim

Before building Exim, as the root user you should create the group and user exim which will run the exim daemon:

groupadd -g 31 exim &&
useradd -d /dev/null -c "Exim Daemon" -g exim -s /bin/false -u 31 exim

Install Exim with the following commands:

sed -e 's,^BIN_DIR.*$,BIN_DIRECTORY=/usr/sbin,'    \
    -e 's,^CONF.*$,CONFIGURE_FILE=/etc/exim.conf,' \
    -e 's,^EXIM_USER.*$,EXIM_USER=exim,'           \
    -e '/SUPPORT_TLS/s,^#,,'                       \
    -e '/USE_OPENSSL/s,^#,,'                       \
    -e 's,^EXIM_MONITOR,#EXIM_MONITOR,' src/EDITME > Local/Makefile &&
printf "USE_GDBM = yes\nDBMLIB = -lgdbm\n" >> Local/Makefile &&
make

This package does not come with a test suite.

Now, as the root user:

make install                                      &&
install -v -m644 doc/exim.8 /usr/share/man/man8   &&
install -v -d -m755 /usr/share/doc/exim-4.88    &&
install -v -m644 doc/* /usr/share/doc/exim-4.88 &&
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-6.2.23.

BIN_DIRECTORY=/usr/sbin: This installs all of Exim's binaries and scripts in /usr/sbin.

CONFIGURE_FILE=/etc/exim.conf: This installs Exim's main configuration file in /etc.

EXIM_USER=exim: This tells Exim that after the daemon no longer needs root privileges, the process hands off the daemon to the exim user.

SUPPORT_TLS=yes: This allows to support STARTTLS connexions. If you use this option, you need to select whether OpenSSL or GnuTLS is used (see src/EDITME).

USE_OPENSSL_PC=openssl: This tells the build system to use OpenSSL, and to find the needed libraries with pkg-config.

#EXIM_MONITOR: This defers building the Exim monitor program, as it requires X Window System support, by commenting out the EXIM_MONITOR line in the Makefile. If you wish to build the monitor program, omit this sed command and issue the following command before building the package (modify Local/eximon.conf, if necessary): cp exim_monitor/EDITME Local/eximon.conf.

ln -sfv exim /usr/sbin/sendmail: Creates a link to sendmail for applications which need it. Exim will accept most Sendmail command-line options.

install -v -m750 -o exim -g exim /var/spool/exim: Since /var/spool is owned by root and this version of exim drops root privileges early, to run as user exim, it cannot create the /var/spool/exim directory. As a work around, it is created manually.

Adding Additional Functionality

To utilize some or all of the dependency packages, you'll need to modify Local/Makefile to include the appropriate directives and parameters to link additional libraries before you build Exim. Local/Makefile is heavily commented with instructions on how to do this. Listed below is additional information to help you link these dependency packages or add additional functionality.

If you wish to build and install the .info documentation, refer to http://exim.org/exim-html-4.88/doc/html/spec_html/ch04.html#SECTinsinfdoc.

If you wish to build in Exim's interfaces for calling virus and spam scanning software directly from access control lists, uncomment the WITH_CONTENT_SCAN=yes parameter and review the information found at http://exim.org/exim-html-4.88/doc/html/spec_html/ch45.html.

To use a backend database other than Berkeley DB, see the instructions at http://exim.org/exim-html-4.88/doc/html/spec_html/ch04.html#SECTdb.

For SSL functionality, see the instructions at http://exim.org/exim-html-4.88/doc/html/spec_html/ch04.html#SECTinctlsssl and http://exim.org/exim-html-4.88/doc/html/spec_html/ch42.html.

For tcpwrappers functionality, see the instructions at http://exim.org/exim-html-4.88/doc/html/spec_html/ch04.html#SECID27.

For information about adding authentication mechanisms to the build, see chapters 33—41 of http://exim.org/exim-html-4.88/doc/html/spec_html/index.html.

For information about linking Linux-PAM, refer to the instructions http://exim.org/exim-html-4.88/doc/html/spec_html/ch11.html#SECTexpcond.

For information about linking database engine libraries used for Exim name lookups, see the instructions at http://exim.org/exim-html-4.88/doc/html/spec_html/ch09.html.

If you wish to add Readline support to Exim when invoked in “test expansion” (-be) mode, see the information in the -be section of http://exim.org/exim-html-4.88/doc/html/spec_html/ch05.html#id2525974.

You may wish to modify the default configuration and send log files to syslog instead of the default /var/spool/exim/log directory. See the information at http://exim.org/exim-html-4.88/doc/html/spec_html/ch52.html.

A wealth of information can be also found at the Exim Wiki.

Configuring Exim

Config Files

/etc/exim.conf and /etc/aliases

Configuration Information

Review the file /etc/exim.conf, and modify any settings to suit your needs. Note that the default configuration assumes that the /var/mail directory is world writable, but has the stiky 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
exim -v -bi &&
/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.

Boot Script

To automatically start exim at boot, install the /etc/rc.d/init.d/exim init script included in the blfs-bootscripts-20170225 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.88-3, exim_checkaccess, exim_dbmbuild, exim_dumpdb, exim_fixdb, exim_lock, exim_tidydb, eximstats, exinext, exipick, exiqgrep, exiqsumm, exiwhat, and optionally, eximon, eximon.bin, and sendmail (symlink)
Installed Libraries: None
Installed Directories: /usr/share/doc/exim-4.88 and /var/spool/exim

Short Descriptions

exicyclog

cycles Exim log files.

exigrep

searches Exim log files.

exim

is a symlink to the exim-4.88-3 MTA daemon.

exim-4.88-3

is the Exim mail transport agent daemon.

exim_checkaccess

states whether a given recipient address from a given host is acceptable or not.

exim_dbmbuild

creates and rebuilds Exim databases.

exim_dumpdb

writes the contents of Exim databases to the standard output.

exim_fixdb

modifies data in Exim databases.

exim_lock

locks a mailbox file.

exim_tidydb

removes old records from Exim databases.

eximstats

generates mail statistics from Exim log files.

exinext

queries remote host retry times.

exipick

selects messages based on various criteria.

exiqgrep

is a utility for selective queue listing.

exiqsumm

produces a summary of the messages in the mail queue.

exiwhat

queries running Exim processes.

eximon

is a start-up shell script for eximon.bin used to set the required environment variables before running the program.

eximon.bin

is a monitor program which displays current information in an X window, and also contains a menu interface to Exim's command line administration options.

Last updated on 2017-02-24 09:33:07 -0800

Postfix-3.1.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-8.0 platform.

Package Information

Postfix Dependencies

Recommended
Optional

ICU-58.2 for Email Address Internationalization (SMTPUTF8) support, MariaDB-10.1.21 or MySQL, OpenLDAP-2.4.44, PCRE-8.40, PostgreSQL-9.6.2, SQLite-3.17.0, and CDB or TinyCDB

Note that SQLite, MySQL, PostgreSQL and CDB are only useful if there is a known need for them.

User Notes: http://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.

For more details read the readme files.

Cyrus-SASL

To use Cyrus-SASL with Postfix, use the following arguments:

CCARGS='-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl'
AUXLIBS='-lsasl2'
OpenLDAP

To use OpenLDAP with Postfix, use the following arguments:

CCARGS='-DHAS_LDAP'
AUXLIBS='-lldap -llber'
Sqlite

To use Sqlite with Postfix, use the following arguments:

CCARGS='-DHAS_SQLITE'
AUXLIBS='-lsqlite3 -lpthread'
MySQL

To use MySQL with Postfix, use the following arguments:

CCARGS='-DHAS_MYSQL -I/usr/include/mysql'
AUXLIBS='-lmysqlclient -lz -lm'
PostgreSQL

To use PostgreSQL with Postfix, use the following arguments:

CCARGS='-DHAS_PGSQL -I/usr/include/postgresql'
AUXLIBS='-lpq -lz -lm'
CDB/TinyCDB

To use CDB or TinyCDB with Postfix, use the following arguments:

CCARGS='-DHAS_CDB'
AUXLIBS='</path/to/CDB>/libcdb.a'
StartTLS Authentication

To use OpenSSL with Postfix, use the following arguments:

CCARGS='-DUSE_TLS -I/usr/include/openssl/'
AUXLIBS='-lssl -lcrypto'

Installing Postfix

If you have Cyrus SASL and OpenSSL installed, install Postfix by running the following commands:

make CCARGS="-DUSE_TLS -I/usr/include/openssl/                     \
             -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" \
     AUXLIBS="-lssl -lcrypto -lsasl2"                              \
     makefiles &&
make

This package does not come with a useful test suite.

Now, as the root user:

sh postfix-install -non-interactive \
   daemon_directory=/usr/lib/postfix \
   manpage_directory=/usr/share/man \
   html_directory=/usr/share/doc/postfix-3.1.4/html \
   readme_directory=/usr/share/doc/postfix-3.1.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.

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> for your non-root login identity so mail addressed to root can be forwarded to you. As the root user:

cat >> /etc/aliases << "EOF"
# Begin /etc/aliases

MAILER-DAEMON:    postmaster
postmaster:       root

root:             <LOGIN>
# End /etc/aliases
EOF

To protect an existing /etc/aliases file, the above command appends these aliases to it if it exists. This file should be checked and duplicate aliases removed, if present.

Note

The /etc/postfix/main.cf and /etc/postfix/master.cf files must be personalized for your system. The main.cf file needs your fully qualified hostname. You will find that main.cf is self documenting, so load it into your editor to make the changes you need for your situation.

Note

Postfix can also be set up to run in a chroot jail. See the file in the source examples/chroot-setup/LINUX2 for details.

If you have an existing configuration, you can run the postfix utility to add any necessary definitions to your existing files. As the root user:

/usr/sbin/postfix upgrade-configuration

Before starting Postfix, you should check that your configuration and file permissions will work properly. Run the following commands as the root user to check and start your Postfix server:

/usr/sbin/postfix check &&
/usr/sbin/postfix start

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-20170225 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.1.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.

Last updated on 2017-02-16 19:05:12 -0800

sendmail-8.15.2

Introduction to sendmail

The sendmail package contains a Mail Transport Agent (MTA).

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

Package Information

sendmail Dependencies

Required

OpenLDAP-2.4.44 (client)

Recommended
Optional

ghostscript-9.20 (for creating PDF documentation), Procmail-3.22 (the configuration proposed below requires that procmail be present at run-time), and nph

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sendmail

Installation of sendmail

Before building sendmail, create the required user, group and directory with the following commands issued as the root user:

groupadd -g 26 smmsp                               &&
useradd -c "Sendmail Daemon" -g smmsp -d /dev/null \
        -s /bin/false -u 26 smmsp                  &&
chmod -v 1777 /var/mail                            &&
install -v -m700 -d /var/spool/mqueue

Note

See the source tree sendmail/README file for information on linking optional packages into the build. Use the example below, which adds support for SASL, StartTLS (OpenSSL) and OpenLDAP, as a starting point. Of course, modify it to suit your particular needs.

cat >> devtools/Site/site.config.m4 << "EOF"
APPENDDEF(`confENVDEF',`-DSTARTTLS -DSASL -DLDAPMAP')
APPENDDEF(`confLIBS', `-lssl -lcrypto -lsasl2 -lldap -llber -ldb')
APPENDDEF(`confINCDIRS', `-I/usr/include/sasl')
EOF

Install sendmail with the following commands:

cat >> devtools/Site/site.config.m4 << "EOF"
define(`confMANGRP',`root')
define(`confMANOWN',`root')
define(`confSBINGRP',`root')
define(`confUBINGRP',`root')
define(`confUBINOWN',`root')
EOF

sed -i 's|/usr/man/man|/usr/share/man/man|' \
    devtools/OS/Linux           &&

cd sendmail                     &&
sh Build                        &&
cd ../cf/cf                     &&
cp generic-linux.mc sendmail.mc &&
sh Build sendmail.cf

This package does not come with a test suite.

Now, as the root user:

install -v -d -m755 /etc/mail &&
sh Build install-cf &&

cd ../..            &&
sh Build install    &&

install -v -m644 cf/cf/{submit,sendmail}.mc /etc/mail &&
cp -v -R cf/* /etc/mail                               &&

install -v -m755 -d /usr/share/doc/sendmail-8.15.2/{cf,sendmail} &&

install -v -m644 CACerts FAQ KNOWNBUGS LICENSE PGPKEYS README RELEASE_NOTES \
        /usr/share/doc/sendmail-8.15.2 &&

install -v -m644 sendmail/{README,SECURITY,TRACEFLAGS,TUNING} \
        /usr/share/doc/sendmail-8.15.2/sendmail &&

install -v -m644 cf/README /usr/share/doc/sendmail-8.15.2/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.15.2 &&
install -v -m644 op.ps op.txt op.pdf /usr/share/doc/sendmail-8.15.2 &&
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.

sed ... include/sm/bdb.h: This allows sendmail to build properly with Berkeley DB-6.2.23 versions 5 and above.

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
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-20170225 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.15.2, /var/spool/mqueue, and /var/spool/clientmqueue

Short Descriptions

editmap

queries and edits sendmail map files.

hoststat

prints sendmail's persistent host status.

mailstats

displays sendmail statistics.

mailq

prints a summary of outbound mail messages waiting for delivery.

makemap

creates sendmail map files.

newaliases

rebuilds /etc/mail/aliases.db from the contents of /etc/mail/aliases.

praliases

displays current sendmail aliases.

purgestat

causes sendmail to clear (purge) all its host-status information.

sendmail

is the sendmail mail transport agent.

smrsh

is a restricted shell for sendmail.

vacation

is an email auto responder.

Last updated on 2017-02-14 23:25:58 -0800

Chapter 22. Databases

This chapter includes databases that range from single-user read/write to industrial database servers with transaction support. Generally, you will be sent here to satisfy dependencies to other applications although building a SQL server on a base LFS system is entirely possible.

Berkeley DB-6.2.23

Introduction to Berkeley DB

The Berkeley DB package contains programs and utilities used by many other applications for database related functions.

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

Package Information

Berkeley DB Dependencies

Optional

Tcl-8.6.6, OpenJDK-1.8.0.121 or Java-1.8.0.121, and Sharutils-4.15.2 (for the uudecode command - Java bindings are required)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/db

Installation of Berkeley DB

Install Berkeley DB by running the following commands:

cd build_unix                        &&
../dist/configure --prefix=/usr      \
                  --enable-compat185 \
                  --enable-dbm       \
                  --disable-static   \
                  --enable-cxx       &&
make

Now, as the root user:

make docdir=/usr/share/doc/db-6.2.23 install &&

chown -v -R root:root                        \
      /usr/bin/db_*                          \
      /usr/include/db{,_185,_cxx}.h          \
      /usr/lib/libdb*.{so,la}                \
      /usr/share/doc/db-6.2.23

Command Explanations

cd build_unix && ../dist/configure --prefix=/usr...: This replaces the normal ./configure command, as Berkeley DB comes with various build directories for different platforms.

--enable-compat185: This switch enables building the DB-1.85 compatibility API.

--enable-cxx: This switch enables building C++ API libraries.

--enable-dbm: Enables legacy interface support needed by some older packages.

make docdir=/usr/share/doc/db-6.2.23 install: This installs the documentation in the standard location instead of /usr/docs.

chown -v -R root:root ...:This command changes the ownership of various installed files from the uid:gid of the builder to root:root.

--enable-tcl --with-tcl=/usr/lib: Enables Tcl support in DB and creates the libdb_tcl libraries.

--enable-java: Enables Java support in DB and creates the libdb_java libraries.

Contents

Installed Programs: db_archive, db_checkpoint, db_deadlock, db_dump, db_hotbackup, db_load, db_log_verify, db_printlog, db_recover, db_replicate, db_stat, db_tuner, db_upgrade, and db_verify
Installed Libraries: libdb.so, libdb_cxx.so, libdb_java.so, and libdb_tcl.so
Installed Directory: /usr/share/doc/db-6.2.23

Short Descriptions

db_archive

prints the pathnames of log files that are no longer in use.

db_checkpoint

is a daemon process used to monitor and checkpoint database logs.

db_deadlock

is used to abort lock requests when deadlocks are detected.

db_dump

converts database files to a flat file format readable by db_load.

db_hotbackup

creates "hot backup" or "hot failover" snapshots of Berkeley DB databases.

db_load

is used to create database files from flat files created with db_dump.

db_log_verify

verifies the log files of a database.

db_printlog

converts database log files to human readable text.

db_recover

is used to restore a database to a consistent state after a failure.

db_replicate

is a daemon process that provides replication/HA services on a transactional environment.

db_stat

displays database environment statistics.

db_tuner

analyzes the data in a btree database, and suggests a page size that is likely to deliver optimal operation.

db_upgrade

is used to upgrade database files to a newer version of Berkeley DB.

db_verify

is used to run consistency checks on database files.

Last updated on 2017-02-14 23:25:58 -0800

lmdb-0.9.19

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lmdb

Installation of lmdb

Note

This package extracts to lmdb-LMDB_0.9.19.

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 ... prefix ... Makefile: The Makefile creates the man pages directory during install if it is not present. This fixes the directory location.

sed ... liblmdb.a ... Makefile: The package executables use a static library so it must be created. This command suppresses installation of the static library.

Contents

Installed Program: mdb_copy, mdb_dump, mdb_load, and mdb_stat
Installed Library: liblmdb.so
Installed Directories: None

Last updated on 2015-10-18 13:08:53 -0500

MariaDB-10.1.21

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-8.0 platform.

Package Information

Note

The installed size of MariaDB is 422 MB, but this can be reduced by about 177 MB, if desired, by removing the /usr/share/mysql/test directory after installation.

MariaDB Dependencies

Required

CMake-3.7.2 and OpenSSL-1.0.2k

Recommended
Optional

Boost-1.63.0, libxml2-2.9.4, Linux-PAM-1.3.0, MIT Kerberos V5-1.15, PCRE-8.40, Ruby-2.4.0, unixODBC-2.3.4, Valgrind-3.12.0, Groonga, KyTea, Judy, libaio, lz4, MeCab, MessagePack, mruby, Sphinx, TokuDB, and ZeroMQ

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mariadb

Installation of MariaDB

Warning

MariaDB and MySQL cannot be installed on the same system without extensive changes to the build configuration of one of the two applications.

For security reasons, running the server as an unprivileged user and group is strongly encouraged. Issue the following (as root) to create the user and group:

groupadd -g 40 mysql &&
useradd -c "MySQL Server" -d /srv/mysql -g mysql -s /bin/false -u 40 mysql

Install MariaDB by running the following commands:

sed -i "s@data/test@\${INSTALL_MYSQLTESTDIR}@g" sql/CMakeLists.txt &&

mkdir build &&
cd build    &&

cmake -DCMAKE_BUILD_TYPE=Release                       \
      -DCMAKE_INSTALL_PREFIX=/usr                      \
      -DINSTALL_DOCDIR=share/doc/mariadb-10.1.21       \
      -DINSTALL_DOCREADMEDIR=share/doc/mariadb-10.1.21 \
      -DINSTALL_MANDIR=share/man                       \
      -DINSTALL_MYSQLSHAREDIR=share/mysql              \
      -DINSTALL_MYSQLTESTDIR=share/mysql/test          \
      -DINSTALL_PLUGINDIR=lib/mysql/plugin             \
      -DINSTALL_SBINDIR=sbin                           \
      -DINSTALL_SCRIPTDIR=bin                          \
      -DINSTALL_SQLBENCHDIR=share/mysql/bench          \
      -DINSTALL_SUPPORTFILESDIR=share/mysql            \
      -DMYSQL_DATADIR=/srv/mysql                       \
      -DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock        \
      -DWITH_EXTRA_CHARSETS=complex                    \
      -DWITH_EMBEDDED_SERVER=ON                        \
      -DTOKUDB_OK=0                                    \
      .. &&
make

To test the results, issue: make test.

Now, as the root user:

make install

Command Explanations

sed -i ...: Set correct installation directory for some components.

-DWITH_EMBEDDED_SERVER=ON: This switch enables compiling the embedded server library needed by certain applications, such as Amarok..

-DWITH_EXTRA_CHARSETS=complex: This switch enables support for the complex character sets.

-DWITHOUT_SERVER=ON -DWITH_UNIT_TESTS=OFF: Use these switches if you don't want the server and would like to build the client only.

Note

There are numerous options available to cmake. Check the output of the cmake . -LH for additional customization options.

Configuring MySQL

Config Files

/etc/mysql/my.cnf and ~/.my.cnf

Configuration Information

Create basic /etc/mysql/my.cnf using the following command as the root user:

install -v -dm 755 /etc/mysql &&
cat > /etc/mysql/my.cnf << "EOF"
# Begin /etc/mysql/my.cnf

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /run/mysqld/mysqld.sock

# The MySQL server
[mysqld]
port            = 3306
socket          = /run/mysqld/mysqld.sock
datadir         = /srv/mysql
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
sort_buffer_size = 512K
net_buffer_length = 16K
myisam_sort_buffer_size = 8M

# Don't listen on a TCP/IP port at all.
skip-networking

# required unique id between 1 and 2^32 - 1
server-id       = 1

# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000

# InnoDB tables are now used by default
innodb_data_home_dir = /srv/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /srv/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

# End /etc/mysql/my.cnf
EOF

You can now install a database and change the ownership to the unprivileged user and group (perform as the root user):

mysql_install_db --basedir=/usr --datadir=/srv/mysql --user=mysql &&
chown -R mysql:mysql /srv/mysql

Further configuration requires that the MariaDB server is running. Start the server using the following commands as the root user:

install -v -m755 -o mysql -g mysql -d /run/mysqld &&
mysqld_safe --user=mysql 2>&1 >/dev/null &

A default installation does not set up a password for the administrator, so use the following command as the root user to set one.

mysqladmin -u root password

Configuration of the server is now finished. Shut the server down using the following command as the root user:

mysqladmin -p shutdown

Boot Script

Install the /etc/rc.d/init.d/mysql init script included in the blfs-bootscripts-20170225 package as the root user to start the MariaDB server during system boot-up.

make install-mysql

Contents

Installed Programs: aria_chk, aria_dump_log, aria_ftdump, aria_pack, aria_read_log, galara_new_cluster, galara_recovery, innochecksum, maria_add_gis_sp.sql, msql2mysql, my_print_defaults, myisam_ftdump, myisamchk, myisamlog, myisampack, mysql, mysql_client_test, mysql_client_test_embedded, mysql_config, mysql_convert_table_format, mysql_embedded, mysql_find_rows, mysql_fix_extensions, mysql_install_db, mysql_plugin, mysql_secure_installation, mysql_setpermission, mysql_tzinfo_to_sql, mysql_upgrade, mysql_waitpid, mysql_zap, mysqlaccess, mysqladmin, mysqlbinlog, mysqlbug, mysqlcheck, mysqld, mysqld_multi, mysqld_safe, mysqldump, mysqldumpslow, mysqlhotcopy, mysqlimport, mysqlshow, mysqlslap, mysqltest, mysqltest_embedded, mytop, perror, replace, resolve_stack_dump, resolveip, wsrep_sst_common, wsrep_sst_mysqldump, wsrep_sst_rsync, wsrep_sst_xtrabackup, and wsrep_sst_xtrabackup-v2
Installed Libraries: libmysqlclient.{so,a}, libmysqlclient_r.{so,a} (symbolic links to libmysqlclient.{so,a}), libmysqld.{so,a}, libmysqlservices.a, and several under /usr/lib/mysql/plugin/
Installed Directories: /etc/mysql, /usr/{include,lib,share}/mysql, and /usr/share/doc/mariadb-10.1.21

Short Descriptions

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

innochecksum

prints checksums for InnoDB files.

maria_add_gis_sp.sql

this script creates stored procedures required by the OpenGIS standards, and is prepared to be run with the --bootstrap server option.

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

is a simple SQL shell with input line editing capabilities.

mysql_client_test

is used for testing aspects of the MySQL client API that cannot be tested using mysqltest and its test language.

mysql_client_test_embedded

is a tool to test client API for embedded server.

mysql_config

provides you with useful information for compiling your MySQL client and connecting it to MySQL.

mysql_convert_table_format

converts the tables in a database to use a particular storage engine.

mysql_embedded

is a MySQL client statically linked to libmysqld.

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

mysql_fix_extensions

converts the extensions for MyISAM (or ISAM ) table files to their canonical forms.

mysql_install_db

initializes the MySQL data directory and creates the system tables that it contains, if they do not exist.

mysql_plugin

is a utility that enable MySQL administrators to manage which plugins a MySQL server loads.

mysql_secure_installation

is a tool to improve MySQL installation security.

mysql_setpermission

sets permissions in the MySQL grant tables.

mysql_tzinfo_to_sql

loads the time zone tables in the mysql database.

mysql_upgrade

examines all tables in all databases for incompatibilities with the current version of MySQL Server.

mysql_waitpid

signals a process to terminate and waits for the process to exit.

mysql_zap

is a tool to kill processes that match a pattern.

mysqlaccess

checks the access privileges for a host name, user name, and database combination.

mysqladmin

is a client for performing administrative operations.

mysqlbinlog

read binary log files.

mysqlbug

is a tool to generate bug report.

mysqlcheck

performs table maintenance: It checks, repairs, optimizes, or analyzes tables.

mysqld

is the MySQL server daemon.

mysqld_multi

is designed to manage several mysqld processes that listen for connections on different Unix socket files and TCP/IP ports.

mysqld_safe

is the recommended way to start a mysqld server on Unix and NetWare.

mysqldump

is a backup program.

mysqldumpslow

parses MySQL slow query log files and prints a summary of their contents.

mysqlhotcopy

locks the table, flush the table and then performs a copy of the database.

mysqlimport

reads a range of data formats, and inserts the data into a database.

mysqlshow

shows the structure of a MariaDB database.

mysqlslap

is a diagnostic program designed to emulate client load for a MySQL server and to report the timing of each stage.

mysqltest

runs a test case against a MySQL server and optionally compares the output with a result file.

mysqltest_embedded

is similar to the mysqltest command but is built with support for the libmysqld embedded server.

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.

Last updated on 2017-02-18 18:01:35 -0800

PostgreSQL-9.6.2

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-8.0 platform.

Package Information

PostgreSQL Dependencies

Optional

Python-2.7.13, Tcl-8.6.6, OpenSSL-1.0.2k, libxml2-2.9.4, libxslt-1.1.29, OpenLDAP-2.4.44, Linux-PAM-1.3.0, MIT Kerberos V5-1.15 and Bonjour

Optional (To Regenerate Documentation)

docbook-4.5, docbook-dsssl-1.79, OpenJade-1.3.2, and SGMLSpm-1.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/postgresql

Installation of PostgreSQL

Install PostgreSQL with the following commands:

sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h &&
./configure --prefix=/usr          \
            --enable-thread-safety \
            --docdir=/usr/share/doc/postgresql-9.6.2 &&
make

There are a number of programs in the contrib/ directory. If you are going to run this installation as a server and wish to build some of them, enter make -C contrib or make -C contrib/<SUBDIR-NAME> for each subdirectory.

Tests must be run as an unprivileged user because they need to start a temporary server and this is prevented as the root user. For the same reason, you need to stop all PostgreSQL servers if any are running. If a previous version of PostgreSQL is installed, it may be necessary to use --disable-rpath with configure to avoid failures, but installing the binaries created using this switch is not recommended. To test the results, issue: make check.

Now, as the root user:

make install      &&
make install-docs

If you made any of the contrib/ programs, as the root user:

make -C contrib/<SUBDIR-NAME> install

If you only intend to use PostgreSQL as a client to connect to a server on another machine, your installation is complete and you should not run the remaining commands.

Initialize a database cluster with the following commands issued by the root user:

install -v -dm700 /srv/pgsql/data &&
install -v -dm755 /run/postgresql &&

groupadd -g 41 postgres &&
useradd -c "PostgreSQL Server" -g postgres -d /srv/pgsql/data \
        -u 41 postgres &&

chown -Rv postgres:postgres /srv/pgsql /run/postgresql

Now, initialize the database at the root user:

su - postgres -c '/usr/bin/initdb -D /srv/pgsql/data'

Again as the root user, start the database server with the following command:

su - postgres -c '/usr/bin/postgres -D /srv/pgsql/data > \
                  /srv/pgsql/data/logfile 2>&1 &'

Still as user root, create a database and verify the installation:

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')

To shut down the server, as root:

su - postgres -c "/usr/bin/pg_ctl stop -D /srv/pgsql/data"

Command Explanations

sed -i ...: This sed changes server socket location from /tmp to /run/postgresql.

--docdir=/usr/share/doc/postgresql-9.6.2: This switch puts the documentation in a versioned directory.

--enable-thread-safety: This switch makes the client libraries thread-safe by allowing concurrent threads in libpq and ECPG programs to safely control their private connection handles.

--with-openssl: builds the package with support for OpenSSL encrypted connections.

--with-perl: builds the PL/Perl server-side language.

--with-python: builds the PL/Python server-side language.

--with-tcl: builds the PL/Tcl server-side language.

groupadd ...; useradd ...: These commands add an unprivileged user and group to run the database server.

createdb test; create table t1; insert into t1 values...; select * from t1: 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.

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 file:///usr/share/doc/postgresql-9.6.2/html/index.html.

Boot Script

Install the /etc/rc.d/init.d/postgresql init script included in the blfs-bootscripts-20170225 package.

make install-postgresql

Contents

Installed Programs: clusterdb, createdb, createlang, createuser, dropdb, droplang, dropuser, ecpg, initdb, pg_archivecleanup, pg_basebackup, pg_config, pg_controldata, pg_ctl, pg_dump, pg_dumpall, pg_isready, pg_receivexlog, pg_recvlogical, pg_resetxlog, pg_restore, pg_rewind, pg_test_fsync, pg_test_timing, pg_upgrade, pg_xlogdump, pgbench, pltcl_delmod, pltcl_listmod, pltcl_loadmod, postgres, postmaster (deprecated), psql, reindexdb, vacuumdb, and optionally (in contrib/) oid2name, pg_standby, vacuumlo, and many others
Installed Libraries: libecpg.{so,a}, libecpg_compat.{so,a}, libpgcommon.a, libpgport.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-9.6.2,postgresql}, and /srv/pgsql

Short Descriptions

clusterdb

is a utility for reclustering tables in a PostgreSQL database.

createdb

creates a new PostgreSQL database.

createlang

defines a new PostgreSQL procedural language.

createuser

defines a new PostgreSQL user account.

dropdb

removes a PostgreSQL database.

droplang

removes a PostgreSQL procedural language.

dropuser

removes a PostgreSQL user account.

ecpg

is the embedded SQL preprocessor.

initdb

creates a new database cluster.

oid2name

resolves OIDs (Object IDs) and file nodes in a PostgreSQL data directory.

pg_archivecleanup

cleans up PostgreSQL WAL (write-ahead log) archive files.

pg_basebackup

takes base backups of a running PostgreSQL cluster.

pg_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

check the connection status of a PostgreSQL server.

pg_receivexlog

is used to stream transaction log from a running PostgreSQL cluster.

pg_recvlogical

controls PostgreSQL logical decoding streams.

pg_resetxlog

clears the write-ahead log and optionally resets some fields in the pg_control file.

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

determine fastest wal_sync method for PostgreSQL.

pg_test_timing

measure timing overhead.

pg_upgrade

upgrade a PostgreSQL server instance.

pg_xlogdump

display a human-readable rendering of the write-ahead log of a PostgreSQL database cluster.

pgbench

run 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 also.

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

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

postgres

is the PostgreSQL database server.

postmaster

(deprecated, a symlink to postgres) is a multi-user database daemon.

psql

is a console based database shell.

reindexdb

is a utility for rebuilding indexes in a database.

vacuumdb

compacts databases and generates statistics for the query analyzer.

vacuumlo

remove orphaned large objects from a PostgreSQL database.

libecpg.{so,a}

contains functions to support embedded SQL in C programs.

libecpg_compat.{so,a}

is the ecpg compatibility library.

libgport.a

is the port-specific subsystem of the Postgres backend.

libpgtypes.{so,a}

contains functions for dealing with Postgres data types.

libpq.{so,a}

is the C programmer's API to Postgres.

Last updated on 2017-02-21 10:05:10 -0800

SQLite-3.17.0

Introduction to SQLite

The SQLite package is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.

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

Package Information

Additional Downloads

Optional Documentation

SQLite Dependencies

Optional

libedit and UnZip-6.0 (required to unzip the documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sqlite

Installation of SQLite

If you downloaded the optional documentation, issue the following command to install the documentation into the source tree:

unzip -q ../sqlite-doc-3170000.zip

Install SQLite by running the following commands:

./configure --prefix=/usr --disable-static        \
            CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 \
            -DSQLITE_ENABLE_COLUMN_METADATA=1     \
            -DSQLITE_ENABLE_UNLOCK_NOTIFY=1       \
            -DSQLITE_SECURE_DELETE=1              \
            -DSQLITE_ENABLE_DBSTAT_VTAB=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.17.0 &&
cp -v -R sqlite-doc-3170000/* /usr/share/doc/sqlite-3.17.0

Command Explanations

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

CFLAGS="-g -O2 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_SECURE_DELETE -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1": Applications such as Firefox require secure delete and enable unlock notify to be turned on. Since firefox-41 the dbstat virtual table is also required. The only way to do this is to include them in the CFLAGS. By default, these are set to "-g -O2" so we specify that to preserve those settings. You may, of course, wish to omit the '-g' if you do not wish to create debugging information. For further information on what can be specified see http://www.sqlite.org/compile.html.

Contents

Installed Program: sqlite3
Installed Library: libsqlite3.so
Installed Directory: /usr/share/doc/sqlite-3.17.0

Short Descriptions

sqlite3

A terminal-based front-end to the SQLite library that can evaluate queries interactively and display the results.

libsqlite3.so

contains the SQLite API functions.

Last updated on 2017-02-14 19:04:01 -0800

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

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-8.0 platform.

Package Information

Additional Downloads

OpenLDAP Dependencies

Recommended
Optional

ICU-58.2, Pth-2.0.7, unixODBC-2.3.4, MariaDB-10.1.21 or PostgreSQL-9.6.2 or MySQL, OpenSLP, and Berkeley DB-6.2.23 (not recommended by the developers)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openldap

Installation of OpenLDAP

Note

If you only need to install the client side ldap* binaries, corresponding man pages, libraries and header files (referred to as a “client-only” install), issue these commands instead of the following ones (no test suite available):

patch -Np1 -i ../openldap-2.4.44-consolidated-2.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

Warning

If upgrading from a previous installation that used Berkeley DB as the backend, you will need to dump the database(s) using the slapcat utility, relocate all files in /var/lib/openldap, change all instances of bdb to mdb in /etc/openldap/slapd.conf and any files in /etc/openldap/slapd.d, and import using the slapadd utility after the installation is completed.

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.4.44-consolidated-2.patch &&
autoconf &&

./configure --prefix=/usr         \
            --sysconfdir=/etc     \
            --localstatedir=/var  \
            --libexecdir=/usr/lib \
            --disable-static      \
            --disable-debug       \
            --with-tls=openssl    \
            --with-cyrus-sasl     \
            --enable-dynamic      \
            --enable-crypt        \
            --enable-spasswd      \
            --enable-slapd        \
            --enable-modules      \
            --enable-rlookups     \
            --enable-backends=mod \
            --disable-ndb         \
            --disable-sql         \
            --disable-shell       \
            --disable-bdb         \
            --disable-hdb         \
            --enable-overlays=mod &&

make depend &&
make

The tests appear to be fragile. Errors may cause the tests to abort prior to finishing, apparently due to timing issues. The tests take about 65 minutes and are processor independent. To test the results, issue: make test.

Now, as the root user:

make install &&

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.4.44 &&
cp      -vfr      doc/{drafts,rfc,guide} \
                  /usr/share/doc/openldap-2.4.44

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 of crypt(3) passwords.

--enable-spasswd: This switch enables SASL password verification.

--enable-modules: This switch enables dynamic module support.

--enable-rlookups: This switch enables reverse lookups of client hostnames.

--enable-backends: This switch enables all available backends.

--enable-overlays: This switch enables all available overlays.

--disable-ndb: This switch disables MySQL NDB Cluster backend which causes configure to fail if MySQL is present.

--disable-sql: This switch explicitly disables the SQL backend. Omit this switch if a SQL server is installed and you are going to use a SQL backend.

--libexecdir=/usr/lib: This switch controls where the /usr/lib/openldap directory is installed. Everything in that directory is a library, so it belongs under /usr/lib instead of /usr/libexec.

--enable-slp: This switch enables SLPv2 support. Use it if you have installed OpenSLP.

Note

You can run ./configure --help to see if there are other switch you can pass to the configure command to enable other options or dependency packages.

install ..., chown ..., and chmod ...: Having slapd configuration files and ldap databases in /var/lib/openldap readable by anyone is a SECURITY ISSUE, especially since a file stores the admin password in PLAIN TEXT. That's why mode 640 and root:ldap ownership were used. The owner is root, so only root can modify the file, and group is ldap, so that the group which owns slapd daemon could read but not modify the file in case of a security breach.

Configuring OpenLDAP

Config Files

/etc/openldap/*

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. You'll need to modify the /etc/openldap/slapd.conf and /etc/openldap/ldap.conf files to set up OpenLDAP for your particular needs.

Note

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:

Mozilla Address Directory

By default, LDAPv2 support is disabled in the slapd.conf file. Once the database is properly set up and Mozilla is configured to use the directory, you must add allow bind_v2 to the slapd.conf file.

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-20170225 package using the following command:

make install-slapd

Note

You'll need to modify the /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, ldapwhoami, slapacl, slapadd, slapauth, slapcat, slapd, slapdn, slapindex, slappasswd, slapschema, and slaptest
Installed Libraries: liblber.so, libldap.so, libldap_r.so, and several under /usr/lib/openldap
Installed Directories: /etc/openldap, /{usr,var}/lib/openldap, and /usr/share/doc/openldap-2.4.44

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.

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.

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.

libldap_r.so

contains the functions required by the LDAP programs to produce the results from LDAP requests.

Last updated on 2017-02-14 23:25:58 -0800

Unbound-1.6.0

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-8.0 platform.

Package Information

Unbound Dependencies

Required

OpenSSL-1.0.2k

Optional

libevent-2.1.8, Nettle-3.3, Python-2.7.13, SWIG-3.0.12 (for Python bindings), Doxygen-1.8.13 (for html documentation), dnstap, and Sphinx (for Python bindings documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/unbound

Installation of Unbound

There should be a dedicated user and group to take control of the unbound daemon after it is started. Issue the following commands as the root user:

groupadd -g 88 unbound &&
useradd -c "Unbound DNS resolver" -d /var/lib/unbound -u 88 \
        -g unbound -s /bin/false unbound

Install Unbound by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  \
            --with-pidfile=/run/unbound.pid &&
make

If you have Doxygen-1.8.13 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 html documentation, install it by running the following commands as the root user:

install -v -m755 -d /usr/share/doc/unbound-1.6.0 &&
install -v -m644 doc/html/* /usr/share/doc/unbound-1.6.0

Command Explanations

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

--with-libevent: This option enables libevent support allowing use of large outgoing port ranges.

--with-pyunbound: This option enables building of the Python bindings.

Configuring Unbound

Config Files

/etc/unbound/unbound.conf

Configuration Information

In the default configuration, unbound will bind to localhost (127.0.0.1 IP address) and allow recursive queries only from localhost clients. If you want to use unbound for local DNS resolution, run the following command as the root user:

echo "nameserver 127.0.0.1" > /etc/resolv.conf

If you are using a DHCP client for connecting to a network, /etc/resolv.conf gets overwritten with values provided by DHCP server. You can override this, for example in DHCP-4.3.5, by running the following command as the root user:

sed -i '/request /i\supersede domain-name-servers 127.0.0.1;' \
       /etc/dhcp/dhclient.conf

For advanced configuration see /etc/unbound/unbound.conf file and the documentation.

When Unbound is installed, some package builds fail if the file /etc/unbound/root.key is not found. This file is created by running the boot script (install instructions below). Alternatively, it can be created by running the following command as the root user:

unbound-anchor

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-20170225 package.

make install-unbound

Contents

Installed Programs: unbound, unbound-anchor, unbound-checkconf, unbound-control, unbound-control-setup, and unbound-host
Installed Library: libunbound.so and (optional) /usr/lib/python2.7/site-packages/_unbound.so
Installed Directories: /etc/unbound and /usr/share/doc/unbound-1.6.0

Short Descriptions

unbound

is a DNS resolver daemon.

unbound-anchor

performs setup or update of the root trust anchor for DNSSEC validation.

unbound-checkconf

checks unbound configuration file for syntax and other errors.

unbound-control

performs remote administration on the unbound DNS resolver.

unbound-control-setup

generates 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.11.0-P3.

libunbound.so

provides the Unbound API functions to programs.

Last updated on 2017-02-22 09:52:51 -0800

Part VI. X + Window and Display Managers

Chapter 24. X Window System Environment

This chapter contains instructions to build and configure a graphical user environment.

Xorg, in addition to clearing up some licensing issues with XFree86, introduced a completely auto-tooled build for the X Window system. This means that the packages build and install using the conventional configure, make, and make install commands, as opposed to a proprietary build system that required hand editing of configuration parameters in a C-like syntax.

Xorg also brought with it a modular build system. While this separation into modules resulted in full control of the features available to the X server on any given installation, it also made the installation more tedious as it requires installing more than 100 different packages to obtain a functional X Window environment. Most large commercial distributions have elected to use Xorg over the XFree86 distribution due to both licensing issues and the increased functionality provided by it over XFree86. With the modular build system, also came incremental updates to individual packages. The distribution of Xorg is given a release number by the developers, in this case Xorg-7, and is referred to as the "katamari" by the upstream developers.

Introduction to Xorg-7

Xorg is a freely redistributable, open-source implementation of the X Window System. This system provides a client/server interface between display hardware (the mouse, keyboard, and video displays) and the desktop environment, while also providing both the windowing infrastructure and a standardized application interface (API).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7

Xorg Download and Installation Instructions

Xorg-7.0 introduced a completely auto-tooled, modular build system. With the new modular build system, it is no longer possible to download the entire package in a single file. In fact, there will be well over 100 packages that need to be fetched from the download location. To assist with such a large task, installing Wget-1.19.1 is strongly recommended for downloading the needed files. A complete wget file list is provided for each page that includes multiple packages.

Given the number of packages available, deciding which packages you need to install for your particular setup may seem a bit overwhelming at first. Take a look at this page and this thread to get an idea of what you will need. If you are unsure, you should install all packages at the cost of extra disk space.

Note

Even if you intend to download only the necessary packages, you should download the wget file lists. The list of files are ordered by dependency, and the package versions listed in the files are known to work well with each other. Further, the wget file lists contain comments for specific packages that are deprecated or are not recommended to install. Newer packages are likely intended for the next release of Xorg and have already proved to be incompatible with current versions of software installed in BLFS. The installed size of Xorg can be reduced considerably by installing only the packages that you will need and use, however, the BLFS book cannot account for all dependencies and build options for the individual Xorg packages. The instructions assume that all packages have been built. A wiki page containing dependency information is under development. You are encouraged to add to these pages if you discover additional information that may be helpful to other users who selectively install individual packages.

Additionally, because of the large number of repetitive commands, you are encouraged to partially automate the build. Instructions have been given that utilize the Sudo-1.8.19p2 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.

First, you'll need to create a working directory:

mkdir xc &&
cd xc

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, has recently stated "At Sun, we were using /usr/X11 and plan to stick with it." Only the /opt/* prefix or the /usr prefix adhere to the current FHS guidelines.

Choose your installation prefix, and set the XORG_PREFIX variable with the following command:

export XORG_PREFIX="<PREFIX>"

Throughout these instructions, you will use the following configure switches for all of the packages. Create the XORG_CONFIG variable to use for this parameter substitution:

export XORG_CONFIG="--prefix=$XORG_PREFIX --sysconfdir=/etc \
    --localstatedir=/var --disable-static"

Create an /etc/profile.d/xorg.sh configuration file containing these variables as the root user:

cat > /etc/profile.d/xorg.sh << EOF
XORG_PREFIX="$XORG_PREFIX"
XORG_CONFIG="--prefix=\$XORG_PREFIX --sysconfdir=/etc --localstatedir=/var --disable-static"
export XORG_PREFIX XORG_CONFIG
EOF
chmod 644 /etc/profile.d/xorg.sh

Note

If you've decided to use the standard /usr prefix, you can omit the remainder of this page and continue at util-macros-1.19.1.

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

You should also add $XORG_PREFIX/lib to the /etc/ld.so.conf file. Again, as the root user, issue the following command:

echo "$XORG_PREFIX/lib" >> /etc/ld.so.conf

You should also modify /etc/man_db.conf, adding appropriate MANDATORY_MANPATH, MANPATH_MAP, and MANDB_MAP entries following the examples for /usr/X11R6. Issue the following command as the root user:

sed "s@/usr/X11R6@$XORG_PREFIX@g" -i /etc/man_db.conf

Some applications look for shared files in /usr/share/X11. Create a symbolic link to the proper location as the root user:

ln -sf $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 -sf $XORG_PREFIX /usr/X11R6

Last updated on 2016-12-19 13:36:08 -0800

util-macros-1.19.1

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-8.0 platform.

Package Information

util-macros Dependencies

Required

Xorg build environment (should be set for the following instructions to work)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/util-macros

Installation of util-macros

Install util-macros by running the following commands:

./configure $XORG_CONFIG

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: $XORG_PREFIX/share/pkgconfig and $XORG_PREFIX/share/util-macros

Last updated on 2017-02-15 14:01:44 -0800

Xorg Protocol Headers

Introduction to Xorg Protocol Headers

The Xorg protocol headers provide the header files required to build the 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-8.0 platform.

Package Information

Xorg Protocol Headers Dependencies

Required

util-macros-1.19.1

Recommended
Optional

fop-2.1, libxslt-1.1.29, xmlto-0.0.28 and asciidoc-8.6.9 (to build additional documentation)

Note

There is a reciprocal dependency with fop-2.1. If you wish to build the documentation, you'll need to re-install the Protocol Headers after the installation is complete and fop-2.1 has been installed.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7ProtocolHeaders

Downloading Xorg Protocol Headers

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 > proto-7.md5 << "EOF"
1a05fb01fa1d5198894c931cf925c025  bigreqsproto-1.1.2.tar.bz2
98482f65ba1e74a08bf5b056a4031ef0  compositeproto-0.4.2.tar.bz2
998e5904764b82642cc63d97b4ba9e95  damageproto-1.2.1.tar.bz2
4ee175bbd44d05c34d43bb129be5098a  dmxproto-2.3.1.tar.bz2
b2721d5d24c04d9980a0c6540cb5396a  dri2proto-2.8.tar.bz2
a3d2cbe60a9ca1bf3aea6c93c817fee3  dri3proto-1.0.tar.bz2
e7431ab84d37b2678af71e29355e101d  fixesproto-5.0.tar.bz2
36934d00b00555eaacde9f091f392f97  fontsproto-2.1.3.tar.bz2
5565f1b0facf4a59c2778229c1f70d10  glproto-1.4.17.tar.bz2
b290a463af7def483e6e190de460f31a  inputproto-2.3.2.tar.bz2
94afc90c1f7bef4a27fdd59ece39c878  kbproto-1.0.7.tar.bz2
92f9dda9c870d78a1d93f366bcb0e6cd  presentproto-1.1.tar.bz2
a46765c8dcacb7114c821baf0df1e797  randrproto-1.5.0.tar.bz2
1b4e5dede5ea51906f1530ca1e21d216  recordproto-1.14.2.tar.bz2
a914ccc1de66ddeb4b611c6b0686e274  renderproto-0.11.1.tar.bz2
cfdb57dae221b71b2703f8e2980eaaf4  resourceproto-1.2.0.tar.bz2
edd8a73775e8ece1d69515dd17767bfb  scrnsaverproto-1.2.2.tar.bz2
fe86de8ea3eb53b5a8f52956c5cd3174  videoproto-2.3.3.tar.bz2
5f4847c78e41b801982c8a5e06365b24  xcmiscproto-1.2.2.tar.bz2
70c90f313b4b0851758ef77b95019584  xextproto-7.3.0.tar.bz2
120e226ede5a4687b25dd357cc9b8efe  xf86bigfontproto-1.2.0.tar.bz2
a036dc2fcbf052ec10621fd48b68dbb1  xf86dgaproto-2.1.tar.bz2
1d716d0dac3b664e5ee20c69d34bc10e  xf86driproto-2.1.1.tar.bz2
e793ecefeaecfeabd1aed6a01095174e  xf86vidmodeproto-2.3.1.tar.bz2
9959fe0bfb22a0e7260433b8d199590a  xineramaproto-1.2.1.tar.bz2
16791f7ca8c51a20608af11702e51083  xproto-7.0.31.tar.bz2
EOF

To download the needed files using wget, use the following commands:

mkdir proto &&
cd proto &&
grep -v '^#' ../proto-7.md5 | awk '{print $2}' | wget -i- -c \
    -B http://ftp.x.org/pub/individual/proto/ &&
md5sum -c ../proto-7.md5

Installation of Xorg Protocol Headers

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../proto-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
  ./configure $XORG_CONFIG
  as_root make install
  popd
  rm -rf $packagedir
done

Finally, exit the shell that was started earlier:

exit

Command Explanations

bash -e: This command starts a subshell that will exit if any command returns a value other than 0, causing the for loop to exit immediately if an error occurs. This also eliminates the need for the && construct used elsewhere in the book.

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: $XORG_PREFIX/include/GL, $XORG_PREFIX/include/X11, $XORG_PREFIX/share/doc/bigreqsproto, $XORG_PREFIX/share/doc/compositeproto, $XORG_PREFIX/share/doc/damageproto, $XORG_PREFIX/share/doc/dri2proto, $XORG_PREFIX/share/doc/dri3proto, $XORG_PREFIX/share/doc/fixesproto, $XORG_PREFIX/share/doc/fontsproto, $XORG_PREFIX/share/doc/kbproto, $XORG_PREFIX/share/doc/presentproto, $XORG_PREFIX/share/doc/randrproto, $XORG_PREFIX/share/doc/recordproto, $XORG_PREFIX/share/doc/renderproto, $XORG_PREFIX/share/doc/resourceproto, $XORG_PREFIX/share/doc/scrnsaverproto, $XORG_PREFIX/share/doc/videoproto, $XORG_PREFIX/share/doc/xcmiscproto, $XORG_PREFIX/share/doc/xextproto and $XORG_PREFIX/share/doc/xproto

Last updated on 2017-02-15 14:01:44 -0800

libXau-1.0.8

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-8.0 platform.

Package Information

libXau Dependencies

Required

Xorg Protocol Headers

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libXau

Installation of libXau

Install libXau by running the following commands:

./configure $XORG_CONFIG &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libXau.so
Installed Directories: None

Short Descriptions

libXau.so

is the library of X authority database routines.

Last updated on 2017-02-15 14:01:44 -0800

libXdmcp-1.1.2

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-8.0 platform.

Package Information

libXdmcp Dependencies

Required

Xorg Protocol Headers

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libXdmcp

Installation of libXdmcp

Install libXdmcp 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: libXdmcp.so
Installed Directory: $XORG_PREFIX/share/doc/libXdmcp

Short Descriptions

libXdmcp.so

is the X Display Manager Control Protocol library.

Last updated on 2017-02-15 14:01:44 -0800

xcb-proto-1.12

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-8.0 platform.

Package Information

Additional Downloads

xcb-proto Dependencies

Required

Python-2.7.13 or Python-3.6.0, and Xorg build environment (should be set for the following instructions to work)

Optional (required to run the tests)

libxml2-2.9.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-proto

Installation of xcb-proto

First, fix a file that allows the checks to run properly:

patch -Np1 -i ../xcb-proto-1.12-schema-1.patch

If building with Python 3, issue the following command:

patch -Np1 -i ../xcb-proto-1.12-python3-1.patch

Install xcb-proto by running the following commands:

./configure $XORG_CONFIG

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: $XORG_PREFIX/share/xcb and $XORG_PREFIX/lib/python2.7/site-packages/xcbgen or $XORG_PREFIX/lib/python3.6/site-packages/xcbgen

Last updated on 2017-02-15 14:01:44 -0800

libxcb-1.12

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-8.0 platform.

Package Information

  • Download (HTTP): http://xcb.freedesktop.org/dist/libxcb-1.12.tar.bz2

  • Download MD5 sum: 28e552bd78bc1050b6b26ca1db0e5bb6

  • Download size: 600 KB

  • Estimated disk space required: 28 MB (with tests, add 62 MB for doxygen docs)

  • Estimated build time: 0.3 SBU (with tests, add 1.4 SBU for doxygen docs)

Additional Downloads

libxcb Dependencies

Required

libXau-1.0.8 and xcb-proto-1.12

Recommended
Optional

Doxygen-1.8.13 (to generate API documentation) Check-0.11.0 (to run tests) and libxslt-1.1.29

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxcb

Installation of libxcb

If building with Python 3, issue the following command:

patch -Np1 -i ../libxcb-1.12-python3-1.patch

Install libxcb by running the following commands:

sed -i "s/pthread-stubs//" configure &&

./configure $XORG_CONFIG      \
            --enable-xinput   \
            --without-doxygen \
            --docdir='${datadir}'/doc/libxcb-1.12 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed "s/pthread-stubs//" -i configure: This sed removes dependency on libpthread-stubs package which is useless on Linux.

--enable-xinput: This switch enables XCB Xinput extension.

--without-doxygen: Do not use doxygen to generate API documentation (default: auto). Without it, if Doxygen-1.8.13 is installed, the API documentation will be generated and installed.

Contents

Installed Programs: None
Installed Libraries: libxcb.so, libxcb-composite.so, libxcb-damage.so, libxcb-dpms.so, libxcb-dri2.so, libxcb-dri3.so, libxcb-glx.so, libxcb-present.so, libxcb-randr.so, libxcb-record.so, libxcb-render.so, libxcb-res.so, libxcb-screensaver.so, libxcb-shape.so, libxcb-shm.so, libxcb-sync.so, libxcb-xevie.so, libxcb-xf86dri.so, libxcb-xfixes.so, libxcb-xinerama.so, libxcb-xinput.so, libxcb-xkb.so, libxcb-xprint.so, libxcb-xtest.so, libxcb-xvmc.so, and libxcb-xv.so
Installed Directories: $XORG_PREFIX/include/xcb and $XORG_PREFIX/share/doc/libxcb-1.12

Short Descriptions

libxcb.so

is an interface to the X Window System protocol.

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

Xorg Libraries Dependencies

Required

Fontconfig-2.12.1 and libxcb-1.12

Optional

xmlto-0.0.28 with one or more of the following: fop-2.1, Links-2.14, Lynx-2.8.8rel.2, and w3m-0.5.3 (to generate additional PDF or text documentation for the libXfont package).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Libraries

Downloading Xorg Libraries

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

cat > lib-7.md5 << "EOF"
c5ba432dd1514d858053ffe9f4737dd8  xtrans-1.3.5.tar.bz2
6d54227082f3aa2c596f0b3a3fbb9175  libX11-1.6.4.tar.bz2
52df7c4c1f0badd9f82ab124fb32eb97  libXext-1.3.3.tar.bz2
d79d9fe2aa55eb0f69b1a4351e1368f7  libFS-1.0.7.tar.bz2
addfb1e897ca8079531669c7c7711726  libICE-1.0.9.tar.bz2
499a7773c65aba513609fe651853c5f3  libSM-1.2.2.tar.bz2
7a773b16165e39e938650bcc9027c1d5  libXScrnSaver-1.2.2.tar.bz2
8f5b5576fbabba29a05f3ca2226f74d3  libXt-1.1.5.tar.bz2
41d92ab627dfa06568076043f3e089e4  libXmu-1.1.2.tar.bz2
20f4627672edb2bd06a749f11aa97302  libXpm-3.5.12.tar.bz2
e5e06eb14a608b58746bdd1c0bd7b8e3  libXaw-1.0.13.tar.bz2
07e01e046a0215574f36a3aacb148be0  libXfixes-5.0.3.tar.bz2
f7a218dcbf6f0848599c6c36fc65c51a  libXcomposite-0.4.4.tar.bz2
802179a76bded0b658f4e9ec5e1830a4  libXrender-0.9.10.tar.bz2
1e7c17afbbce83e2215917047c57d1b3  libXcursor-1.1.14.tar.bz2
0cf292de2a9fa2e9a939aefde68fd34f  libXdamage-1.1.4.tar.bz2
0920924c3a9ebc1265517bdd2f9fde50  libfontenc-1.1.3.tar.bz2
0d9f6dd9c23bf4bcbfb00504b566baf5  libXfont2-2.0.1.tar.bz2
331b3a2a3a1a78b5b44cfbd43f86fcfe  libXft-2.3.2.tar.bz2
1f0f2719c020655a60aee334ddd26d67  libXi-1.7.9.tar.bz2
9336dc46ae3bf5f81c247f7131461efd  libXinerama-1.1.3.tar.bz2
28e486f1d491b757173dd85ba34ee884  libXrandr-1.5.1.tar.bz2
45ef29206a6b58254c81bea28ec6c95f  libXres-1.0.7.tar.bz2
ef8c2c1d16a00bd95b9fdcef63b8a2ca  libXtst-1.2.3.tar.bz2
210b6ef30dda2256d54763136faa37b9  libXv-1.0.11.tar.bz2
4cbe1c1def7a5e1b0ed5fce8e512f4c6  libXvMC-1.0.10.tar.bz2
d7dd9b9df336b7dd4028b6b56542ff2c  libXxf86dga-1.1.4.tar.bz2
298b8fff82df17304dfdb5fe4066fe3a  libXxf86vm-1.1.4.tar.bz2
ba983eba5a9f05d152a0725b8e863151  libdmx-1.1.3.tar.bz2
ace78aec799b1cf6dfaea55d3879ed9f  libpciaccess-0.13.4.tar.bz2
4a4cfeaf24dab1b991903455d6d7d404  libxkbfile-1.0.9.tar.bz2
66662e76899112c0f99e22f2fc775a7e  libxshmfence-1.2.tar.bz2
EOF

To download the needed files using wget, use the following commands:

mkdir lib &&
cd lib &&
grep -v '^#' ../lib-7.md5 | awk '{print $2}' | wget -i- -c \
    -B http://ftp.x.org/pub/individual/lib/ &&
md5sum -c ../lib-7.md5

Installation of Xorg Libraries

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

Some libraries come with a test suite. If you wish to execute them, either comment out the rm -rf ... below, so that, after all libraries are installed, you can come back to the corresponding directory and run make check, or do individual builds, running the tests for each of those distributed with working test suites. Alternatively, you can uncomment the line #make check ..., and at the end, check the test results with:

grep -A9 summary *make_check.log

BLFS developers have confirmed that libX11, libXt and libxshmfence are distributed with working test suites.

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../lib-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
  case $packagedir in
    libXfont2-[0-9]* )
      ./configure $XORG_CONFIG --disable-devel-docs
    ;;

    libXt-[0-9]* )
      ./configure $XORG_CONFIG \
                  --with-appdefaultdir=/etc/X11/app-defaults
    ;;

    * )
      ./configure $XORG_CONFIG
    ;;
  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

sed ... src/xftfreetype.c include/X11/Xft/XftCompat.h: Add fixes for changes in recent glibc headers.

--disable-devel-docs: Disable generation of text documentation in the libXfont2 package if xmlto-0.0.28 is installed without a text browser. Omit this parameter (or the entire case statement) if a text browser is installed.

--with-fop: Use fop-2.1 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 three symlinks to satisfy the expected environment of several packages. Execute the following commands as the root user:

ln -sv $XORG_PREFIX/lib/X11 /usr/lib/X11 &&
ln -sv $XORG_PREFIX/include/X11 /usr/include/X11

Contents

Installed Programs: cxpm and sxpm
Installed Libraries: libdmx.so, libfontenc.so, libFS.so, libICE.so, libpciaccess.so, libSM.so, libX11.so, libXaw6.so, libXaw7.so, libXaw.so, libXcomposite.so, libXcursor.so, libXdamage.so, libXext.so, libXfixes.so, libXfont2.so, libXft.so, libXinerama.so, libXi.so, libxkbfile.so, libXmu.so, libXmuu.so, libXpm.so, libXrandr.so, libXrender.so, libXRes.so, libxshmfence.so, libXss.so, libXt.so, libXtst.so, libXvMC.so, libXvMCW.so, libXv.so, libXxf86dga.so and libXxf86vm.so
Installed Directories: $XORG_PREFIX/include/X11/fonts, $XORG_PREFIX/include/X11/Xtrans, $XORG_PREFIX/share/doc/libFS, $XORG_PREFIX/share/doc/libICE, $XORG_PREFIX/share/doc/libSM, $XORG_PREFIX/share/doc/libX11, $XORG_PREFIX/share/doc/libXaw, $XORG_PREFIX/share/doc/libXext, $XORG_PREFIX/share/doc/libXi, $XORG_PREFIX/share/doc/libXmu, $XORG_PREFIX/share/doc/libXrender, $XORG_PREFIX/share/doc/libXt, $XORG_PREFIX/share/doc/libXtst, $XORG_PREFIX/share/doc/libXvMC, $XORG_PREFIX/share/doc/xtrans and $XORG_PREFIX/share/X11/locale

Short Descriptions

cxpm

checks the format of an XPM file.

sxpm

shows an XPM file and/or converts XPM 1 or 2 files to XPM 3.

libdmx.so

is the X Window System DMX (Distributed Multihead X) extension library.

libfontenc.so

is the X11 font encoding library.

libFS.so

is the library interface to the X Font Server.

libICE.so

is the X Inter Client Exchange Library.

libpciaccess.so

is the generic PCI Access library for X.

libSM.so

is the X Session Management Library.

libX11.so

is the Xlib Library.

libXaw6.so

is the X Athena Widgets Library, version 6.

libXaw7.so

is the X Athena Widgets Library, version 7.

libXaw.so

are symbolic links to the current X Athena Widgets Library, version 7.

libXcomposite.so

is the X Composite Library.

libXcursor.so

is the X Cursor management library.

libXdamage.so

is the X Damage Library.

libXext.so

is the Misc X Extension Library.

libXfixes.so

provides augmented versions of core protocol requests.

libXfont2.so

is the X font library.

libXft.so

is the X FreeType interface library.

libXinerama.so

is the Xinerama Library.

libXi.so

is the X Input Extension Library.

libxkbfile.so

is the xkbfile Library.

libXmu.so

is the X interface library for miscellaneous utilities not part of the Xlib standard.

libXmuu.so

is the Mini Xmu Library.

libXpm.so

is the X Pixmap Library.

libXrandr.so

is the X Resize, Rotate and Reflection extension library.

libXrender.so

is the X Render Library.

libXRes.so

is the X-Resource extension client library.

libxshmfence.so

exposes an event API on top of Linux futexes.

libXss.so

is the X11 Screen Saver extension client library.

libXt.so

is the X Toolkit Library.

libXtst.so

is the Xtst Library.

libXvMC.so

is the X-Video Motion Compensation Library.

libXvMCW.so

is the XvMC Wrapper including the Nonstandard VLD extension.

libXv.so

is the X Window System video extension library.

libXxf86dga.so

is the client library for the XFree86-DGA extension.

libXxf86vm.so

is the client library for the XFree86-VidMode X extension.

Last updated on 2017-02-17 10:05:54 -0800

xcb-util-0.4.0

Introduction to xcb-util

The xcb-util package provides additional extensions to the XCB library, many that were previously found in Xlib, but are not part of core X protocol.

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

Package Information

xcb-util Dependencies

Required

libxcb-1.12

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util

Installation of xcb-util

Install xcb-util by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxcb-util.so
Installed Directories: None

Short Descriptions

libxcb-util.so

Provides utility functions for other XCB utilities.

Last updated on 2017-02-15 14:01:44 -0800

xcb-util-image-0.4.0

Introduction to xcb-util-image

The xcb-util-image package provides additional extensions to the XCB library.

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

Package Information

xcb-util-image Dependencies

Required

xcb-util-0.4.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-image

Installation of xcb-util-image

Install xcb-util-image by running the following commands:

./configure $XORG_CONFIG &&
make

To test the results, issue: LD_LIBRARY_PATH=$XORG_PREFIX/lib make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxcb-image.so
Installed Directories: None

Short Descriptions

libxcb-image.so

Is a port of Xlib's XImage and XShmImage functions.

Last updated on 2017-02-15 14:01:44 -0800

xcb-util-keysyms-0.4.0

Introduction to xcb-util-keysyms

The xcb-util-keysyms package contains a library for handling standard X key constants and conversion to/from keycodes.

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

Package Information

xcb-util-keysyms Dependencies

Required

libxcb-1.12

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-keysyms

Installation of xcb-util-keysyms

Install xcb-util-keysyms by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxcb-keysyms.so
Installed Directories: None

Short Descriptions

libxcb-keysyms.so

provides the standard X key constants and API functions for conversion to/from keycodes.

Last updated on 2017-02-15 14:01:44 -0800

xcb-util-renderutil-0.3.9

Introduction to xcb-util-renderutil

The xcb-util-renderutil package provides additional extensions to the XCB library.

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

Package Information

xcb-util-renderutil Dependencies

Required

libxcb-1.12

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-renderutil

Installation of xcb-util-renderutil

Install xcb-util-renderutil by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxcb-render-util.so
Installed Directories: None

Short Descriptions

libxcb-render-util.so

Provides convenience functions for the Render extension.

Last updated on 2017-02-15 14:01:44 -0800

xcb-util-wm-0.4.1

Introduction to xcb-util-wm

The xcb-util-wm package contains libraries which provide client and window-manager helpers for EWMH and ICCCM.

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

Package Information

xcb-util-wm Dependencies

Required

libxcb-1.12

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-wm

Installation of xcb-util-wm

Install xcb-util-wm by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: libxcb-ewmh.so and libxcb-icccm.so
Installed Directories: None

Short Descriptions

libxcb-ewmh.so

provides the client and window-manager helpers for EWMH.

libxcb-icccm.so

provides the client and window-manager helpers for ICCCM.

Last updated on 2017-02-15 14:01:44 -0800

xcb-util-cursor-0.1.3

Introduction to xcb-util-cursor

The xcb-util-cursor package provides a module that implements the XCB cursor library. It is a the XCB replacement for libXcursor.

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

Package Information

xcb-util-cursor Dependencies

Required

xcb-util-0.4.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcb-util-cursor

Installation of xcb-util-cursor

Install xcb-util-cursor by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxcb-cursor.so
Installed Directories: None

Short Descriptions

libxcb-cursor.so

Is a port of Xlib's libXcursor functions.

Last updated on 2015-09-20 17:38:20 -0500

Mesa-13.0.4

Introduction to Mesa

Mesa is an OpenGL compatible 3D graphics library.

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

Package Information

Additional Downloads

Mesa Dependencies

Required

Xorg Libraries, libdrm-2.4.75, and Python-2.7.13

Recommended
Optional

libgcrypt-1.7.6, Nettle-3.3, Wayland-1.12.0 (required for Plasma-5.9.2 and LXQt ), mesa-demos (provides more than 300 extra demos to test Mesa; this includes the same programs added by the patch above), and Bellagio OpenMAX Integration Layer (for mobile platforms)

Note

The instructions below assume that elfutils and LLVM with the r600/amdgpu and host backends are installed. You will need to modify the instructions if you choose not to install them. For an explanation of Gallium3D see https://en.wikipedia.org/wiki/Gallium3D.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mesa

Installation of Mesa

If you have downloaded the xdemos patch (needed if testing the Xorg installation per BLFS instructions), apply it by running the following command:

patch -Np1 -i ../mesa-13.0.4-add_xdemos-1.patch

Now, select the drivers you wish to install. The available drivers are i915, ilo, nouveau, r300, r600, radeonsi, freedreno, svga, swrast, vc4, and virgl. If the Gallium drivers are not specified, the default is 'r300,r600,svga,swrast'. Modify the command below for any desired drivers. The listed drivers below will cover most modern video cards. For help in selecting drivers see http://www.mesa3d.org/systems.html.

GLL_DRV="i915,r600,nouveau,radeonsi,svga,swrast"

Install Mesa by running the following commands:

Note

Add wayland to the --with-egl-platforms switch below if you plan on building Plasma-5.9.2 or LXQt.

sed -i "/pthread_stubs_possible=/s/yes/no/" configure.ac &&

./autogen.sh CFLAGS='-O2' CXXFLAGS='-O2'    \
            --prefix=$XORG_PREFIX           \
            --sysconfdir=/etc               \
            --enable-texture-float          \
            --enable-osmesa                 \
            --enable-xa                     \
            --enable-glx-tls                \
            --with-egl-platforms="drm,x11"  \
            --with-gallium-drivers=$GLL_DRV &&

unset GLL_DRV &&

make

If you have applied the xdemos patch, build the demo programs by running the following command:

make -C xdemos DEMOS_PREFIX=$XORG_PREFIX

To test the results, issue: make check.

Now, as the root user:

make install

If you have built the demo programs, install them by running the following command as the root user:

make -C xdemos DEMOS_PREFIX=$XORG_PREFIX install

If desired, install the optional documentation by running the following commands as the root user:

install -v -dm755 /usr/share/doc/mesa-13.0.4 &&
cp -rfv docs/* /usr/share/doc/mesa-13.0.4

Command Explanations

sed -i ... configure.ac: This sed removes a dependency on the libpthread-stubs package which is useless on Linux.

CFLAGS="-O2" CXXFLAGS="-O2": By default, Autoconf sets CFLAGS and CXXFLAGS to "-g -O2". That results in binaries and libraries being built with debugging symbols which make them bigger. Override the default flags to omit the -g compiler flag so the final libraries are smaller.

--enable-texture-float: This switch enables floating-point textures and render buffers. Please consult docs/patents.txt to see if there are any legal issues if you use this feature.

--enable-osmesa: This switch enables building the libOSMesa library.

--enable-xa: This switch enables building the XA X Acceleration API (Required for VMware 3D Driver).

--enable-gbm: This switch enables building the Mesa Graphics Buffer Manager library.

--enable-glx-tls: This switch enables TLS (Thread Local Storage) support in GLX.

--with-egl-platforms="...": This parameter controls which platforms EGL will be built for. Available platforms are drm, x11 and wayland.

--with-gallium-drivers="...": This parameter controls which Gallium3D drivers should be built.

--enable-sysfs: Use this switch to enable simple PCI identification method, required for building DRI on systems without udev.

Contents

Installed Programs: glxgears and glxinfo
Installed Libraries: libEGL.so, libgbm.so, libglapi.so, libGLESv1_CM.so, libGLESv2.so, libGL.so, libOSMesa.so, libwayland-egl.so (if built with Wayland) libxatracker.so, libXvMCnouveau.so, and libXvMCr600.so
Installed Directories: $XORG_PREFIX/{include/{EGL,GL,GLES,GLES2,GLES3,KHR},lib/{dri,vdpau}} and /usr/share/doc/mesa-13.0.4 (optional)

Short Descriptions

glxgears

is a GL demo useful for troubleshooting graphics problems.

glxinfo

is a diagnostic program that displays information about the graphics hardware and installed GL libraries.

libEGL.so

provides a native platform graphics interface as defined by the EGL-1.4 specification.

libgbm.so

is the Mesa Graphics Buffer Manager library.

libGLESv1_CM.so

is the Mesa OpenGL ES 1.1 library.

libGLES2.so

is the Mesa OpenGL ES 2.0 library.

libGL.so

is the main Mesa OpenGL library.

libOSMesa.so

is the Mesa Off-screen Rendering library.

libxatracker.so

is the Xorg Gallium3D acceleration library.

Last updated on 2017-02-15 14:01:44 -0800

xbitmaps-1.1.1

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-8.0 platform.

Package Information

xbitmaps Dependencies

Required

util-macros-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xbitmaps

Installation of xbitmaps

Install xbitmaps by running the following commands:

./configure $XORG_CONFIG

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: $XORG_PREFIX/include/X11/bitmaps

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

Xorg Applications Dependencies

Required

libpng-1.6.28, Mesa-13.0.4, xbitmaps-1.1.1, and xcb-util-0.4.0

Optional

Linux-PAM-1.3.0 and both cairo-5c and Nickle (only if you wish to try to run the undocumented xkeyhost script).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Applications

Downloading Xorg Applications

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

cat > app-7.md5 << "EOF"
25dab02f8e40d5b71ce29a07dc901b8c  iceauth-1.0.7.tar.bz2
c4a3664e08e5a47c120ff9263ee2f20c  luit-1.1.1.tar.bz2
18c429148c96c2079edda922a2b67632  mkfontdir-1.0.7.tar.bz2
9bdd6ebfa62b1bbd474906ac86a40fd8  mkfontscale-1.1.2.tar.bz2
e238c89dabc566e1835e1ecb61b605b9  sessreg-1.1.0.tar.bz2
2c47a1b8e268df73963c4eb2316b1a89  setxkbmap-1.3.1.tar.bz2
3a93d9f0859de5d8b65a68a125d48f6a  smproxy-1.0.6.tar.bz2
f0b24e4d8beb622a419e8431e1c03cd7  x11perf-1.6.0.tar.bz2
f3f76cb10f69b571c43893ea6a634aa4  xauth-1.0.10.tar.bz2
0066f23f69ca3ef62dcaeb74a87fdc48  xbacklight-1.2.1.tar.bz2
9956d751ea3ae4538c3ebd07f70736a0  xcmsdb-1.0.5.tar.bz2
b58a87e6cd7145c70346adad551dba48  xcursorgen-1.0.6.tar.bz2
8809037bd48599af55dad81c508b6b39  xdpyinfo-1.3.2.tar.bz2
fceddaeb08e32e027d12a71490665866  xdriinfo-1.0.5.tar.bz2
249bdde90f01c0d861af52dc8fec379e  xev-1.2.2.tar.bz2
90b4305157c2b966d5180e2ee61262be  xgamma-1.0.6.tar.bz2
f5d490738b148cb7f2fe760f40f92516  xhost-1.0.7.tar.bz2
6a889412eff2e3c1c6bb19146f6fe84c  xinput-1.6.2.tar.bz2
a4d8353daf6cb0a9c47379b7413c42c6  xkbcomp-1.3.1.tar.bz2
c747faf1f78f5a5962419f8bdd066501  xkbevd-1.1.4.tar.bz2
502b14843f610af977dffc6cbf2102d5  xkbutils-1.0.4.tar.bz2
0ae6bc2a8d3af68e9c76b1a6ca5f7a78  xkill-1.0.4.tar.bz2
5dcb6e6c4b28c8d7aeb45257f5a72a7d  xlsatoms-1.1.2.tar.bz2
9fbf6b174a5138a61738a42e707ad8f5  xlsclients-1.1.3.tar.bz2
2dd5ae46fa18abc9331bc26250a25005  xmessage-1.0.4.tar.bz2
723f02d3a5f98450554556205f0a9497  xmodmap-1.0.9.tar.bz2
6101f04731ffd40803df80eca274ec4b  xpr-1.0.4.tar.bz2
fae3d2fda07684027a643ca783d595cc  xprop-1.2.2.tar.bz2
ebffac98021b8f1dc71da0c1918e9b57  xrandr-1.5.0.tar.bz2
b54c7e3e53b4f332d41ed435433fbda0  xrdb-1.1.0.tar.bz2
a896382bc53ef3e149eaf9b13bc81d42  xrefresh-1.0.5.tar.bz2
dcd227388b57487d543cab2fd7a602d7  xset-1.2.3.tar.bz2
7211b31ec70631829ebae9460999aa0b  xsetroot-1.1.1.tar.bz2
558360176b718dee3c39bc0648c0d10c  xvinfo-1.1.3.tar.bz2
6b5d48464c5f366e91efd08b62b12d94  xwd-1.0.6.tar.bz2
b777bafb674555e48fd8437618270931  xwininfo-1.1.3.tar.bz2
3025b152b4f13fdffd0c46d0be587be6  xwud-1.0.4.tar.bz2
EOF

To download the needed files using wget, use the following commands:

mkdir app &&
cd app &&
grep -v '^#' ../app-7.md5 | awk '{print $2}' | wget -i- -c \
    -B http://ftp.x.org/pub/individual/app/ &&
md5sum -c ../app-7.md5

Installation of Xorg Applications

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../app-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
  case $packagedir in
    luit-[0-9]* )
      line1="#ifdef _XOPEN_SOURCE"
      line2="#  undef _XOPEN_SOURCE"
      line3="#  define _XOPEN_SOURCE 600"
      line4="#endif"

      sed -i -e "s@#ifdef HAVE_CONFIG_H@$line1\n$line2\n$line3\n$line4\n\n&@" sys.c
      unset line1 line2 line3 line4
    ;;
    sessreg-* )
      sed -e 's/\$(CPP) \$(DEFS)/$(CPP) -P $(DEFS)/' -i man/Makefile.in
    ;;
  esac
  ./configure $XORG_CONFIG
  make
  as_root make install
  popd
  rm -rf $packagedir
done

Finally, exit the shell that was started earlier:

exit

Unless you installed the optional dependencies, remove an undocumented script which is reported to be broken (xkeystone provided by the xrandr package).

as_root rm -f $XORG_PREFIX/bin/xkeystone

Command Explanations

sed -e 's/\$(CPP) \$(DEFS)/$(CPP) -P $(DEFS)/' -i man/Makefile.in: with gcc-5 the behaviour of cpp was changed to emit line numbers. That results in unterminated sed commands in filenames.sed. Adding -P restores the old behaviour.

Contents

Installed Programs: iceauth, luit, mkfontdir, mkfontscale, sessreg, setxkbmap, smproxy, x11perf, x11perfcomp, xauth, xbacklight, xcmsdb, xcursorgen, xdpr, xdpyinfo, xdriinfo, xev, xgamma, xhost, xinput, xkbbell, xkbcomp, xkbevd, xkbvleds, xkbwatch, xkill, xlsatoms, xlsclients, xmessage, xmodmap, xpr, xprop, xrandr, xrdb, xrefresh, xset, xsetroot, xvinfo, xwd, xwininfo, and xwud
Installed Libraries: None
Installed Directories: None

Short Descriptions

iceauth

is the ICE authority file utility.

luit

provides locale and ISO 2022 support for Unicode terminals.

mkfontdir

creates an index of X font files in a directory.

mkfontscale

creates an index of scalable font files for X.

sessreg

manages utmp/wtmp entries for non-init clients.

setxkbmap

sets the keyboard using the X Keyboard Extension.

smproxy

is the Session Manager Proxy.

x11perf

is an X11 server performance test program.

x11perfcomp

is an X11 server performance comparison program.

xauth

is the X authority file utility.

xbacklight

adjusts backlight brightness using RandR extension.

xcmsdb

is the Device Color Characterization utility for the X Color Management System.

xcursorgen

creates an X cursor file from a collection of PNG images.

xdpr

dumps an X window directly to a printer.

xdpyinfo

is a display information utility for X.

xdriinfo

queries configuration information of DRI drivers.

xev

prints contents of X events.

xgamma

alters a monitor's gamma correction through the X server.

xhost

is a server access control program for X.

xinput

is a utility to configure and test X input devices.

xkbbell

is an XKB utility program that raises a bell event.

xkbcomp

compiles an XKB keyboard description.

xkbevd

is the XKB event daemon.

xkbvleds

shows the XKB status of keyboard LEDs.

xkbwatch

monitors modifier keys and LEDs.

xkill

kills a client by its X resource.

xlsatoms

lists interned atoms defined on the server.

xlsclients

lists client applications running on a display.

xmessage

displays a message or query in a window.

xmodmap

is a utility for modifying keymaps and pointer button mappings in X.

xpr

prints an X window dump.

xprop

is a property displayer for X.

xrandr

is a primitive command line interface to RandR extension.

xrdb

is the X server resource database utility.

xrefresh

refreshes all or part of an X screen.

xset

is the user preference utility for X.

xsetroot

is the root window parameter setting utility for X.

xvinfo

prints out X-Video extension adaptor information.

xwd

dumps an image of an X window.

xwininfo

is a window information utility for X.

xwud

is an image displayer for X.

Last updated on 2017-02-15 14:01:44 -0800

xcursor-themes-1.0.4

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-8.0 platform.

Package Information

xcursor-themes Dependencies

Required

Xorg Applications

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xcursor-themes

Installation of xcursor-themes

Install xcursor-themes by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: $XORG_PREFIX/share/icons/handhelds, $XORG_PREFIX/share/icons/redglass and $XORG_PREFIX/share/icons/whiteglass

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

Xorg Fonts Dependencies

Required

xcursor-themes-1.0.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Fonts

Downloading Xorg Fonts

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

cat > font-7.md5 << "EOF"
23756dab809f9ec5011bb27fb2c3c7d6  font-util-1.3.1.tar.bz2
0f2d6546d514c5cc4ecf78a60657a5c1  encodings-1.0.4.tar.bz2
6d25f64796fef34b53b439c2e9efa562  font-alias-1.0.3.tar.bz2
fcf24554c348df3c689b91596d7f9971  font-adobe-utopia-type1-1.0.4.tar.bz2
e8ca58ea0d3726b94fe9f2c17344be60  font-bh-ttf-1.0.3.tar.bz2
53ed9a42388b7ebb689bdfc374f96a22  font-bh-type1-1.0.3.tar.bz2
bfb2593d2102585f45daa960f43cb3c4  font-ibm-type1-1.0.3.tar.bz2
6306c808f7d7e7d660dfb3859f9091d2  font-misc-ethiopic-1.0.3.tar.bz2
3eeb3fb44690b477d510bbd8f86cf5aa  font-xfree86-type1-1.0.4.tar.bz2
EOF

To download the needed files using wget, use the following commands:

mkdir font &&
cd font &&
grep -v '^#' ../font-7.md5 | awk '{print $2}' | wget -i- -c \
    -B http://ftp.x.org/pub/individual/font/ &&
md5sum -c ../font-7.md5

Installation of Xorg Fonts

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../font-7.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
    ./configure $XORG_CONFIG
    make
    as_root make install
  popd
  as_root rm -rf $packagedir
done

Finally, exit the shell that was started earlier:

exit

When all of the fonts have been installed, the system must be configured so that Fontconfig can find the TrueType fonts since they are outside of the default search path of /usr/share/fonts. Make symlinks to the Xorg TrueType font directories by running the following commands as the root user:

install -v -d -m755 /usr/share/fonts                               &&
ln -svfn $XORG_PREFIX/share/fonts/X11/OTF /usr/share/fonts/X11-OTF &&
ln -svfn $XORG_PREFIX/share/fonts/X11/TTF /usr/share/fonts/X11-TTF

Contents

Installed Programs: bdftruncate and ucs2any
Installed Libraries: None
Installed Directories: $XORG_PREFIX/share/fonts

Short Descriptions

bdftruncate

generates a truncated BDF font from an ISO 10646-1 encoded BDF font.

ucs2any

generates BDF fonts in any encoding from an ISO 10646-1 encoded BDF font.

Last updated on 2017-02-15 14:01:44 -0800

XKeyboardConfig-2.20

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-8.0 platform.

Package Information

XKeyboardConfig Dependencies

Required

Xorg Libraries

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xkeyboard-config

Installation of XKeyboardConfig

Install XKeyboardConfig by running the following commands:

./configure $XORG_CONFIG --with-xkb-rules-symlink=xorg &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-xkb-rules-symlink=xorg: By default, the XKB rules installed are named "base". This creates symlinks named "xorg" to those rules, which is the default name used by Xorg.

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: $XORG_PREFIX/share/X11/xkb

Last updated on 2017-02-15 14:01:44 -0800

Xorg-Server-1.19.1

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-8.0 platform.

Package Information

Additional Downloads

Xorg Server Dependencies

Required

OpenSSL-1.0.2k or Nettle-3.3 or libgcrypt-1.7.6, Pixman-0.34.0, and at runtime: Xorg Fonts and xkeyboard-config-2.20

Recommended
Optional

acpid-2.0.28 (runtime), Doxygen-1.8.13 (to build API documentation), fop-2.1 (to build documentation), xcb-util-keysyms-0.4.0, xcb-util-image-0.4.0, xcb-util-renderutil-0.3.9, xcb-util-wm-0.4.1 (all three to build Xephyr), xmlto-0.0.28 (to build documentation), Wayland-1.12.0 (needed for Xwayland), wayland-protocols-1.7, libunwind, and xorg-sgml-doctools (to build documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Server

Installation of Xorg Server

If you have downloaded the optional patch, apply it by running the following command:

patch -Np1 -i ../xorg-server-1.19.1-add_prime_support-1.patch

Install the server by running the following commands:

./configure $XORG_CONFIG            \
           --enable-glamor          \
           --enable-install-setuid  \
           --enable-suid-wrapper    \
           --disable-systemd-logind \
           --with-xkb-output=/var/lib/xkb &&
make

To test the results, issue: make check. You will need to run ldconfig as the root user first or some tests may fail.

Now as the root user:

make install &&
mkdir -pv /etc/X11/xorg.conf.d &&
cat >> /etc/sysconfig/createfiles << "EOF"
/tmp/.ICE-unix dir 1777 root root
/tmp/.X11-unix dir 1777 root root
EOF

Command Explanations

--enable-glamor: Build the Glamor DIX (Device Independent X) module which is currently required for Southern Islands and Sea Islands radeon video chipsets, optional for some other radeons, and also optional for the intel driver. It is also used by the modesetting driver (which is part of this package) for hardware using KMS which offers acceleration.

--enable-install-setuid: The Xorg binary must run as the root user. This switch ensures that the binary is installed setuid when make is run by an unprivileged user.

--enable-suid-wrapper: Build suid-root wrapper for legacy driver support on rootless xserver systems.

--disable-systemd-logind: Do not build systemd-logind support, otherwise, an error (EE), logged in /var/log/Xorg.0.log, occurs when starting the X server. Systemd is not supported by BLFS.

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.

--enable-dmx: Build DMX (Distributed Multihead X) server.

--enable-kdrive: this option allows the configure script to enable Xephyr if its dependencies are met.

Contents

Installed Programs: cvt, gtf, X, Xnest, Xorg, and Xvfb; optional: dmxaddinput, dmxaddscreen, dmxinfo, dmxreconfig, dmxresize, dmxrminput, dmxrmscreen, dmxtodmx, dmxwininfo, vdltodmx, Xdmx, xdmxconfig, Xephyr, and Xfbdev
Installed Libraries: several under $XORG_PREFIX/lib/xorg/modules/{,drivers,extensions} including modesetting_drv.so
Installed Directories: $XORG_PREFIX/{include/xorg,lib/xorg,share/X11/xorg.conf.d} and /var/lib/xkb

Short Descriptions

cvt

calculates VESA CVT mode lines.

dmx*

are various tools used for manipulating the dmx server.

gtf

calculates VESA GTF mode lines.

vdltodmx

is a tool used to convert VDL config files to DMX config files.

X

is a symbolic link to Xorg.

Xdmx

is a proxy X server that uses one or more other X servers as its display devices.

Xephyr

is a nested X server which supports modern X extensions.

Xnest

is a nested X server.

Xorg

is the X11R7 X Server.

Xvfb

is the virtual framebuffer X server for X Version 11.

xdmxconfig

is a graphical configuration utility for the dmx server.

modesetting_drv.so

provides a video driver for machines using Kernel Mode Setting (KMS). This will use glamor if that has been enabled and the hardware offers acceleration.

Last updated on 2017-02-15 14:01:44 -0800

Xorg Drivers

Introduction to Xorg Drivers

The Xorg Drivers page contains the instructions for building Xorg drivers that are necessary in order for Xorg Server to take advantage of the hardware that it is running on. At least one input and one video driver are required for Xorg Server to start.

On machines using KMS, the modesetting driver is provided by xorg-server and can be used instead of the video driver for the specific hardware, but with reduced performance. It can also be used (without hardware acceleration) in virtual machines running under qemu.

Note

If you are unsure which video hardware you have, you can use lspci from pciutils-3.5.2 to find out which video hardware you have and then look at the descriptions of the packages in order to find out which driver you need.

Note

In addition to the drivers listed below, there are several other drivers for very old hardware that may still be relevant. Instructions for building these now unmaintained drivers may be found in a prior version of BLFS: http://www.linuxfromscratch.org/blfs/view/7.6/x/x7driver.html

Hardware Video Acceleration

libevdev 1.5.6

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-8.0 platform.

Package Information
libevdev Dependencies
Required

Python-2.7.13 or Python-3.6.0

Optional

Check-0.11.0 (required for tests), Doxygen-1.8.13, and Valgrind-3.12.0 (optional for tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libevdev

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

Device Drivers  --->
  Input device support --->
    <*> Generic input layer (needed for...) [CONFIG_INPUT]
    <*>   Event interface                   [CONFIG_INPUT_EVDEV]
    [*]   Miscellaneous devices  --->       [CONFIG_INPUT_MISC]
      <*>    User level driver support      [CONFIG_INPUT_UINPUT]

Installation of libevdev

Install libevdev by running the following commands:

./configure $XORG_CONFIG &&
make

If you have the optional Check-0.11.0 package installed, the regression tests can be run as the root user with make check, in a graphical session.

Now, as the root user:

make install

Contents

Installed Xorg Programs: libevdev-tweak-device, mouse-dpi-tool, and touchpad-edge-detector
Installed Xorg Library: libevdev.so
Installed Xorg Directory: $XORG_PREFIX/include/libevdev-1.0
Short Descriptions

libevdev-tweak-device

is a tool to change some kernel device properties.

mouse-dpi-tool

is a tool to estimate the resolution of a mouse.

touchpad-edge-detector

touchpad-edge-detector is a tool that reads the touchpad events from the kernel and calculates the minimum and maximum for the x and y coordinates, respectively.

libevdev.so

is a library of Xorg driver input functions.

libinput-1.6.1

Introduction to libinput

libinput is a library that handles input devices for display servers and other applications that need to directly deal with input devices.

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

Package Information
libinput Dependencies
Required

libevdev-1.5.6 and mtdev-1.1.5

Optional

Check-0.11.0 and Valgrind-3.12.0 (to run the tests), Doxygen-1.8.13 and Graphviz-2.38.0 (to build the documentation) GTK+-3.22.8 (to build the GUI event viewer), libunwind, and libwacom

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libinput

Installation of libinput

Install libinput by running the following commands:

./configure $XORG_CONFIG       \
            --disable-libwacom \
            --with-udev-dir=/lib/udev &&
make

Note

If you want to run the tests, add --enable-tests to the configure options above.

To run the tests for this package, valgrind requires a version of the /lib/ld-2.23.so (or later) library with debugging symbols present. Normally in LFS these debugging symbols are stripped at the end of Chapter 6. To get this library, glibc must be rebuilt with the current glibc version using the same compiler that was used to build LFS. The ld-2.23.so can then be renamed to ld-2.23.so.dbg and copied to /lib. Then a symlink needs to be changed:

ln -sfv ld-2.23.so.dbg /lib/ld-linux-x86-64.so.2

Adjust the above instruction as needed for a 32-bit system or for a different version of glibc

Running the testsuite for this package can cause problems. It creates a number of dummy input devices on the currently running system that can lead to crashing a local X server or a desktop environment. If you understand the risks and have the optional Check-0.11.0 and Valgrind-3.12.0 packages installed, the regression tests can be run as the root user with make check. Note that depending on the system configuration and hardware, some tests may fail.

Now, as the root user:

make install

If Doxygen-1.8.13 and Graphviz-2.38.0 were present during the build, you can install the generated documentation by running the following commands as the root user:

install -v -dm755 $XORG_PREFIX/share/doc/libinput-1.6.1 &&
cp -rv doc/html/* $XORG_PREFIX/share/doc/libinput-1.6.1

Command Explanations

--disable-libwacom: Remove this option if you have the external library libwacom installed.

--with-udev-dir=/lib/udev: This switch specifies where UDev rules and hwdb files will be installed.

Contents

Installed Programs: libinput-debug-events and libinput-list-devices
Installed Libraries: libinput.so
Installed Directories: $XORG_PREFIX/share/doc/libinput-1.6.1

Short Descriptions

libinput-debug-events

is a debug helper for libinput.

libinput-list-devices

lists local devices as recognized by libinput.

libinput.so

contains API functions for handling input devices.

Xorg Evdev Driver-2.10.5

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-8.0 platform.

Package Information
Xorg Evdev Driver Dependencies
Required

libevdev-1.5.6, mtdev-1.1.5, and Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-evdev-driver

Installation of Xorg Evdev Driver

Install Xorg Evdev Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Xorg Driver: evdev_drv.so
Short Descriptions

evdev_drv.so

is an Xorg input driver for Linux generic event devices.

Xorg Synaptics Driver-1.9.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-8.0 platform.

Package Information
Xorg Synaptics Driver Dependencies
Required

libevdev-1.5.6 and Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-synaptics-driver

Installation of Xorg Synaptics Driver

Install Xorg Synaptics Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: synclient and syndaemon
Installed Xorg Driver: synaptics_drv.so
Short Descriptions

synclient

is a command line utility used to query and modify Synaptics driver options.

syndaemon

is a program that monitors keyboard activity and disables the touchpad when the keyboard is being used.

synaptics_drv.so

is an Xorg input driver for touchpads.

Xorg VMMouse Driver-13.1.0

Introduction to Xorg VMMouse Driver

The Xorg VMMouse Driver package contains the VMMouse input driver for the Xorg X server. The VMMouse driver enables support for the special VMMouse protocol that is provided by VMware virtual machines to give absolute pointer positioning. It can be used with Qemu, too.

Note

Starting with version 4.1, the linux kernel supports the VMMouse protocol so that this driver is not needed anymore. Furthermore, kernel support conflicts with earlier versions of this driver (before 13.1), so it is advisable to either remove this driver if you plan to always use kernels with versions greater or equal to 4.1, or update this driver to 13.1 or above if you want to be able to use both old and recent kernels.

This package is known to build using an LFS 8.0 platform but has not been tested.

Package Information
Xorg VMMouse Driver Dependencies
Required

Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-vmmouse-driver

Kernel Configuration

To get kernel support for the VMMouse, enable the following options in the kernel configuration and recompile the kernel if necessary:

Processor type and features --->
  [*] Symmetric multi-processing support          [CONFIG_SMP]
  [*] Support for extended (non-PC) x86 platforms [CONFIG_X86_EXTENDED_PLATFORM]
  [*] ScaleMP vSMP                                [CONFIG_X86_VSMP]
Device Drivers --->
  Input device support --->
    [*] Mice --->                                 [CONFIG_INPUT_MOUSE]
      <*/M> PS/2 mouse                            [CONFIG_MOUSE_PS2]
      [*] Virtual mouse (vmmouse)                 [CONFIG_MOUSE_PS2_VMMOUSE]

Installation of Xorg VMMouse Driver

Install Xorg VMMouse Driver by running the following commands:

./configure $XORG_CONFIG               \
            --without-hal-fdi-dir      \
            --without-hal-callouts-dir \
            --with-udev-rules-dir=/lib/udev/rules.d &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-udev-rules-dir=/lib/udev/rules.d: This switch specifies where udev rules should be installed.

--without-hal-*-dir: These switches disable installation of the HAL components which are not needed on Linux.

Contents

Installed Program: vmmouse_detect
Installed Xorg Drivers: vmmouse_drv.so
Short Descriptions

vmmouse_detect

is a tool for detecting if running in a VMware environment where vmmouse is used.

vmmouse_drv.so

is an Xorg input driver for VMware Mouse.

Xorg Wacom Driver-0.34.0

Introduction to Xorg Wacom Driver

The Xorg Wacom Driver package contains the X.Org X11 driver and SDK for Wacom and Wacom-like tablets. It is not required to use a Wacom tablet, the xf86-input-evdev driver can handle these devices without problems.

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

Package Information
Xorg Wacom Drivers Dependencies
Required

Xorg-Server-1.19.1

Optional

Doxygen-1.8.13 and Graphviz-2.38.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-wacom-driver

Kernel Configuration

To use a Wacom tablet with USB interface, enable the following options in your kernel configuration and recompile. Note that other configuration options could be required for tablet with a serial or bluetooth interface:

Device Drivers  --->
  HID support  --->
    <*/M> HID bus support                                      [CONFIG_HID]
            Special HID drivers --->
              <*/M> Wacom Intuos/Graphire tablet support (USB) [CONFIG_HID_WACOM]

Installation of Xorg Wacom Driver

Install Xorg Wacom Driver by running the following commands:

./configure $XORG_CONFIG --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.

Xorg ATI Driver-7.8.0

Introduction to Xorg ATI Driver

The Xorg ATI Driver package contains the X.Org Video Driver for ATI Radeon video cards including all chipsets ranging from R100 to R900 and the newer RAxx chipsets.

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

Note

For Direct Rendering to work with newer Radeon Cards (R300 and later chipsets), you need to enable the r300, r600 and radeonsi Gallium drivers at Mesa-13.0.4 build time. Also, some cards require Firmware to be available when the kernel driver is loaded. Firmware can be obtained from http://anduin.linuxfromscratch.org/BLFS/linux-firmware/. See the section called “Kernel Configuration for additional firmware” below for additional firmware.

Package Information
Xorg ATI Driver Dependencies
Required

Xorg-Server-1.19.1 (recommended to be built with glamor enabled)

Note

Glamor is required for "Southern Islands" and later GPUs but optional for R300 to R700, Evergreen and "Northern Islands" GPUs - see the link in the section called “Glamor Acceleration” below.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-ati-driver

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

Device Drivers  --->
  Graphics support --->
   <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
   <*> ATI Radeon                                          [CONFIG_DRM_RADEON]

Kernel Configuration for additional firmware

If you need to add firmware, install the file(s) and then point to them in the kernel configuration and recompile the kernel if necessary. To find out which firmware you need, consult the Decoder ring for engineering vs marketing names. Download any firmware for your card which is named like: <ENGINEERING_NAME>_rlc.bin, etc. Note that for R600 and R700 family, generic R600_rlc.bin and R700_rlc.bin are necessary in addition to the model specific firmware, while for later generations (Evergreen, "Northern Islands" and probably "Southern Islands") you need the BTC_rlc.bin in addition to the model specific firmware. Below is an example for Radeon HD6470, which is "Northern Islands" GPU with a network card that also requires the firmware:

CONFIG_EXTRA_FIRMWARE="radeon/BTC_rlc.bin radeon/CAICOS_mc.bin radeon/CAICOS_me.bin
radeon/CAICOS_pfp.bin radeon/CAICOS_smc.bin rtl_nic/rtl8168e-3.fw"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

Note

CONFIG_EXTRA_FIRMWARE should all be on one line. It is shown above as two lines for presentation only.

Tip

You can check dmesg output after boot to see which firmware is missing.

Alternatively, if you change CONFIG_DRM_RADEON to '=m' in your .config the firmware can be loaded automatically from /lib/firmware/radeon when it installs the module. This offers a tiny space saving, but also means that the screen will be blank for a longer time before the framebuffer appears. Distros take this approach because it is not practical to specify every possible firmware and the kernel would be excessively big.

Installation of Xorg ATI Driver

Install Xorg ATI Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Glamor Acceleration

Glamor is an acceleration library which uses cards' 3D capabilities to accelerate 2D rendering. Glamor acceleration is required for Radeon "Southern Islands" GPUs which use "radeonsi" Gallium3D driver from Mesa-13.0.4. To see which cards fall under "Southern Islands" category, read the Decoder ring for engineering vs marketing names. Please note that Glamor acceleration can be used with other chips as well, from the R300 onwards. On at least some Northern Islands chips it is beneficial.

Glamor acceleration is not enabled by default for chipsets that don't use "radeonsi" Gallium3D driver. You have to use an xorg.conf file to enable it. To enable Glamor for cards other than "Southern Islands" and later, create the following file in ${XORG_PREFIX}/share/X11/xorg.conf.d/ as the root user:

cat >> ${XORG_PREFIX}/share/X11/xorg.conf.d/20-glamor.conf << "EOF"
Section "Device"
        Identifier "radeon"
        Driver "ati"
        Option "AccelMethod" "glamor"
EndSection
EOF

Contents

Installed Xorg Drivers: ati_drv.so and radeon_drv.so
Short Descriptions

ati_drv.so

is a wrapper driver for ATI video cards that autodetects ATI video hardware and loads radeon, mach64 or r128 driver.

radeon_drv.so

is an Xorg video driver for ATI Radeon based video cards.

Xorg Fbdev Driver-0.4.4

Introduction to Xorg Fbdev Driver

The Xorg Fbdev Driver package contains the X.Org Video Driver for framebuffer devices. This driver is often used as fallback driver if the hardware specific and VESA drivers fail to load or are not present. If this driver is not installed, Xorg Server will print a warning on startup, but it can be safely ignored if hardware specific driver works well.

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

Package Information
Xorg Fbdev Driver Dependencies
Required

Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-fbdev-driver

Installation of Xorg Fbdev Driver

Install Xorg Fbdev Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Xorg Driver: fbdev_drv.so
Short Descriptions

fbdev_drv.so

is an Xorg video driver for framebuffer devices.

Xorg Intel Driver-20170216

Introduction to Xorg Intel Driver

The Xorg Intel Driver package contains the X.Org Video Driver for Intel integrated video cards including 8xx, 9xx, Gxx, Qxx and HD graphics processors (SandyBridge, IvyBridge and Haswell).

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

Note

This is a development version of the Intel driver which is needed to work properly with the latest hardware.

Package Information
Xorg Intel Driver Dependencies
Required

xcb-util-0.4.0 and Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-intel-driver

Kernel Configuration

Enable the following options in the kernel configuration. Only one of the lines “Intel I810” or “Intel 8xx/9xx...” needs to be selected. If you select the latter, “Enable modesetting...” is needed too. Recompile the kernel if necessary:

Device Drivers  --->
  Graphics support --->
   <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
   <*> Intel I810                                          [CONFIG_DRM_I810]
   <*> Intel 8xx/9xx/G3x/G4x/HD Graphics                   [CONFIG_DRM_I915]

Installation of Xorg Intel Driver

Install Xorg Intel Driver by running the following commands:

./configure $XORG_CONFIG --enable-kms-only --enable-uxa &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
mv -v /usr/share/man/man4/intel-virtual-output.4 \
      /usr/share/man/man1/intel-virtual-output.1 &&
sed -i '/\.TH/s/4/1/' /usr/share/man/man1/intel-virtual-output.1

Working around problems with the Intel driver

The SandyBridge New Acceleration (SNA) code is intended to replace the old UXA (UMA Acceleration Architecture), but it is a large body of code and sometimes causes problems. In particular, when a system is built with gcc-5 and kernel headers from linux-4.0, trying to run this driver using SNA has been known to segfault on some of the supported chips. However, the version of the code in the version control system listed above has been tested successfully with both SNA and UXA capabilities.

To work around this problem, as well as enabling support for UXA, it is necessary to force UXA to be used by creating a configuration file. If this problem applies to you, create the following file as the root user:

cat >> /etc/X11/xorg.conf.d/20-intel.conf << "EOF"
Section "Device"
        Identifier "Intel Graphics"
        Driver "intel"
        Option "AccelMethod" "uxa"
EndSection
EOF

Command Explanations

--enable-kms-only: This switch omits the UMS (User Mode Setting) code.

--enable-uxa: This switch allows the old UXA code to be compiled in addition to the default SNA.

Contents

Installed Program: intel-virtual-output
Installed Library: libIntelXvMC.so
Installed Xorg Driver: intel_drv.so
Short Descriptions

intel_drv.so

is an Xorg video driver for Intel integrated graphics chipsets.

Xorg Nouveau Driver-1.0.13

Introduction to Xorg Nouveau Driver

The Xorg Nouveau Driver package contains the X.Org Video Driver for NVidia Cards including RIVA TNT, RIVA TNT2, GeForce 256, QUADRO, GeForce2, QUADRO2, GeForce3, QUADRO DDC, nForce, nForce2, GeForce4, QUADRO4, GeForce FX, QUADRO FX, GeForce 6XXX and GeForce 7xxx chipsets.

Note

This is a development version of the Nouveau driver which is needed to build properly with the latest xorg-server.

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

Package Information
Xorg Nouveau Drivers Dependencies
Required

Xorg-Server-1.19.1 (recommended to be built with glamor enabled)

Note

The new “Maxwell” GPU requires Glamor to be built with the Xorg server. Note that the BLFS editors have not tested that hardware.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-nouveau-driver

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

Device Drivers  --->
  Graphics support --->
   <*> Direct Rendering Manager (XFree86 ... support) ---> [CONFIG_DRM]
   <*> Nouveau (NVIDIA) cards                              [CONFIG_DRM_NOUVEAU]
      [*]   Support for backlight control                     [CONFIG_DRM_NOUVEAU_BACKLIGHT]

Installation of Xorg Nouveau Driver

Install Xorg Nouveau Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Glamor Acceleration

Glamor is an acceleration library which uses cards' 3D capabilities to accelerate 2D rendering. Glamor acceleration is enabled by default for the new “Maxwell” GPU's. According to the documentation, Glamor acceleration can be used with other chips as well, but that does not seem functional yet.

If you want anyway to try to enable Glamor for GPU's other than the new “Maxwell” ones, create the following file as the root user:

cat >> /etc/X11/xorg.conf.d/nvidia.conf << "EOF"
Section "Device"
        Identifier "nvidia"
        Driver "nouveau"
        Option "AccelMethod" "glamor"
EndSection
EOF

Contents

Installed Xorg Driver: nouveau_drv.so
Short Descriptions

nouveau_drv.so

is an Xorg video driver for nVidia video cards.

Xorg VMware Driver-13.2.1

Introduction to Xorg VMware Driver

The Xorg VMware Driver package contains the X.Org Video Driver for VMware SVGA virtual video cards.

This package is known to build using an LFS 8.0 platform but has not been tested.

Package Information
Xorg VMware Driver Dependencies
Required

Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xorg-vmware-driver

Kernel Configuration

Enable the following options in the kernel configuration and recompile the kernel if necessary:

Device Drivers  --->
  Graphics support  --->
   <*> Direct Rendering Manager (XFree86 ... support) --->  [CONFIG_DRM]
   <*> DRM driver for VMware Virtual GPU                    [CONFIG_DRM_VMWGFX]
      [*]   Enable framebuffer console under vmwgfx by default [CONFIG_DRM_VMWGFX_FBCON]

Installation of Xorg VMware Driver

Install Xorg VMware Driver by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Xorg Driver: vmware_drv.so
Short Descriptions

vmware_drv.so

is an Xorg video driver for VMware SVGA virtual video card.

libva-1.7.3

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. 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-8.0 platform.

Package Information
Additional Downloads
libva Dependencies
Required

Mesa-13.0.4

Optional

Doxygen-1.8.13 and Wayland-1.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libva

Installation of libva

Install libva by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Installation of libva-intel-driver

The libva-intel-driver is designed specifically for video cards based on an Intel GPU. Unpack the libva-intel tarball using the normal procedures and install the driver by running the following commands:

autoreconf -fi           &&
./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

autoreconf -fi: This command regenerates the configure script to prevent a mandatory test for wayland-scanner when configuring. It can be omitted if Wayland-1.12.0 has been built.

Contents

Installed Programs: avcenc, h264encode, jpegenc, loadjpeg, mpeg2vaenc, mpeg2vldemo, putsurface, putsurface_wayland, and vainfo
Installed Libraries: libva-drm.so, libva-egl.so, libva-glx.so, libva.so, libva-tpi.so, libva-wayland.so, and libva-x11.so
Installed Drivers: dummy_drv_video.so and i965_drv_video.so
Installed Directory: $XORG_PREFIX/include/va

Short Descriptions

libva.so

contains API functions which provide access to hardware accelerated video processing.

libvdpau-1.1.1

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-8.0 platform.

Package Information
libvdpau Dependencies
Required

Xorg Libraries

Optional

Doxygen-1.8.13, Graphviz-2.38.0, and texlive-20160523b or install-tl-unx

Runtime Dependency

Mesa-13.0.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

Installation of libvdpau

Install libvdpau by running the following commands:

./configure $XORG_CONFIG \
            --docdir=/usr/share/doc/libvdpau-1.1.1 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libvdpau.so
Installed Directories: $XORG_PREFIX/{include,lib}/vdpau and $XORG_PREFIX/share/doc/libvdpau-1.1.1

Short Descriptions

libvdpau.so

contains functions to offload portions of the video decoding process and video post-processing to the GPU video-hardware.

libvdpau-va-gl-0.4.0

Introduction to libvdpau-va-gl

The libvdpau-va-gl package contains a library which implements the VDPAU library. Libvdpau_va_gl uses OpenGL under the hood to accelerate drawing and scaling and the VA-API (if available) to accelerate video decoding. For now VA-API is available on some Intel chips, and on some AMD video adapters with the help of the libvdpau driver.

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

Note

Download this file via wget as:

wget https://github.com/i-rinat/libvdpau-va-gl/archive/v0.4.0.tar.gz \
     -O libvdpau-va-gl-0.4.0.tar.gz
Package Information
libvdpau-va-gl Dependencies
Required

CMake-3.7.2, FFmpeg-3.2.4, libvdpau-1.1.1, and libva-1.7.3

Optional

Doxygen-1.8.13, Graphviz-2.38.0, and texlive-20160523b or install-tl-unx

Runtime Dependency

Mesa-13.0.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libvdpau

Installation of libvdpau-va-gl

Install libvdpau-va-gl by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$XORG_PREFIX .. &&
make

To test the results, issue: make check. The tests must be run from an Xorg environment.

Now, as the root user:

make install

Configuration

To allow libvdpau to find libvdpau-va-gl, set an environment variable. As the root user:

echo "export VDPAU_DRIVER=va_gl" >> /etc/profile.d/xorg.sh

Contents

Installed Programs: None
Installed Library: libvdpau_va_gl.so
Installed Directories: None

Short Descriptions

libvdpau_va_gl.so

contains functions to implement the OpenGL backend to the VDPAU (Video Decode and Presentation API for Unix) API.

Last updated on 2016-08-31 14:55:52 -0700

twm-1.0.9

Introduction to twm

The twm package contains a very minimal window manager.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

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

Package Information

twm Dependencies

Required

Xorg-Server-1.19.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/twm

Installation of twm

Install twm by running the following commands:

sed -i -e '/^rcdir =/s,^\(rcdir = \).*,\1/etc/X11/app-defaults,' src/Makefile.in &&
./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed -i -e '/^rcdir =/s...: This command ensures the twm configuration file gets installed in the proper location.

Contents

Installed Programs: twm
Installed Libraries: None
Installed Directory: /etc/X11/app-defaults

Short Descriptions

twm

is the Tab Window Manager for the X Window System.

Last updated on 2017-02-15 14:01:44 -0800

xterm-327

Introduction to xterm

xterm is a terminal emulator for the X Window System.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

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

Package Information

xterm Dependencies

Required

Xorg Applications

Required (at runtime)

A monospace TTF or OTF font such as Dejavu fonts

Optional

Valgrind-3.12.0 and man2html

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xterm

Installation of xterm

Install xterm by running the following commands:

sed -i '/v0/{n;s/new:/new:kb=^?:/}' termcap &&
printf '\tkbs=\\177,\n' >> terminfo &&

TERMINFO=/usr/share/terminfo \
./configure $XORG_CONFIG     \
    --with-app-defaults=/etc/X11/app-defaults &&

make

This package does not come with a test suite.

Now, as the root user:

make install &&
make install-ti

Command Explanations

sed -i ... termcap, printf ... >> terminfo: These commands modify the terminal description so that the Backspace key is expected to send the character with ASCII code 127. This is done for consistency with the Linux console.

TERMINFO=/usr/share/terminfo: This ensures that the xterm terminfo files are installed to the system terminfo database.

--with-app-defaults=...: Sets the location for the app-defaults directory.

make install-ti: This command installs corrected terminfo description files for use with xterm.

Configuring xterm

There are two ways to configure xterm. You can add the X resource definitions to the user's ~/.Xresources file, or add them to the system-wide $XORG_PREFIX/share/X11/app-defaults/Xterm file.

In order for xterm to follow the locale settings in the environment, use TrueType fonts, and follow the Linux convention about the code sent by the Backspace key, add the following definitions as the root user:

cat >> /etc/X11/app-defaults/XTerm << "EOF"
*VT100*locale: true
*VT100*faceName: Monospace
*VT100*faceSize: 10
*backarrowKeyIsErase: true
*ptyInitialErase: true
EOF

Contents

Installed Programs: koi8rxterm, resize, uxterm, and xterm
Installed Libraries: None
Installed Directories: None

Short Descriptions

koi8rxterm

is a wrapper script to set up xterm with a KOI8-R locale.

resize

prints a shell command for setting the TERM and TERMCAP environment variables to indicate the current size of xterm window.

uxterm

is a wrapper script that modifies the current locale to use UTF-8 and starts xterm with the proper settings.

xterm

is a terminal emulator for the X Window System.

Last updated on 2017-02-15 14:01:44 -0800

xclock-1.0.7

Introduction to xclock

The xclock package contains a simple clock application which is used in the default xinit configuration.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

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

Package Information

xclock Dependencies

Required

Xorg Libraries

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xclock

Installation of xclock

Install xclock by running the following commands:

./configure $XORG_CONFIG &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: xclock
Installed Libraries: None
Installed Directory: None

Short Descriptions

xclock

is an analog/digital clock for X.

Last updated on 2017-02-15 14:01:44 -0800

xinit-1.3.4

Introduction to xinit

The xinit package contains a usable script to start the xserver.

This package is not a part of the Xorg katamari and is provided only as a dependency to other packages or for testing the completed Xorg installation.

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

Package Information

xinit Dependencies

Required

Xorg Libraries

Required (runtime only)

twm-1.0.9, xclock-1.0.7, and xterm-327

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xinit

Installation of xinit

First, modify startx, hence the X session starts on the first unused virtual terminal, which normally is vt7:

sed -e '/$serverargs $vtarg/ s/serverargs/: #&/' \
    -i startx.cpp

Note

If you have already installed this package without the sed above, there is no need to reinstall. Just modify the installed startx, issuing, as the root user: sed -i '/$serverargs $vtarg/ s/serverargs/: #&/' $XORG_PREFIX/bin/startx

Install xinit by running the following commands:

./configure $XORG_CONFIG --with-xinitdir=/etc/X11/app-defaults &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
ldconfig

Contents

Installed Programs: xinit and startx
Installed Libraries: None
Installed Directories: None

Short Descriptions

startx

initializes an X session.

xinit

is the X Window System initializer.

Last updated on 2017-02-15 14:01:44 -0800

Xorg-7 Testing and Configuration

Testing Xorg

Note

Before starting Xorg for the first time, is is useful to rebuild the library cache by running ldconfig as the root user.

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, /var/log/Xorg.0.log, about missing font files. In addition, there will be several warnings on the text mode terminal (usually tty1) about missing fonts. These warnings do not affect functionality, but can be removed if desired by installing the Xorg Legacy Fonts.

Generally, there is no specific configuration required for Xorg, but customization is possible. For details see the section called “Setting up Xorg Devices” below.

Checking the Direct Rendering Infrastructure (DRI) Installation

DRI is a framework for allowing software to access graphics hardware in a safe and efficient manner. It is installed in X by default (using Mesa) if you have a supported video card.

To check if DRI drivers are installed properly, check the log file /var/log/Xorg.0.log for statements such as:

(II) intel(0): direct rendering: DRI2 Enabled

or

(II) NOUVEAU(0): Loaded DRI module

Note

DRI configuration may differ if you are using alternate drivers, such as those from NVIDIA or AMD.

Although all users can use software acceleration, any hardware acceleration (DRI2) is only available to root and members of the video group.

If your driver is supported, add any users that might use X to that group:

usermod -a -G video <username>

Another way to determine if DRI is working properly is to use one of the two optionally installed OpenGL demo programs in Mesa-13.0.4. From an X terminal, run glxinfo and look for the phrase:

name of display: :0
display: :0  screen: 0
direct rendering: Yes

If direct rendering is enabled, you can add verbosity by running LIBGL_DEBUG=verbose glxinfo. This will show the drivers, device nodes and files used by the DRI system.

To confirm that DRI2 hardware acceleration is working, you can (still in the X terminal) run the command glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)". If that reports something other than Software Rasterizer then you have working acceleration for the user who ran the command.

If your hardware does not have any DRI2 driver available, it will use a Software Rasterizer for Direct Rendering. In such cases, you can use a new, LLVM-accelerated, Software Rasterizer called LLVMPipe. In order to build LLVMPipe just make sure that LLVM-3.9.1 is present at Mesa build time. Note that all decoding is done on the CPU instead of the GPU, so the display will run slower than with hardware acceleration. To check if you are using LLVMpipe, review the output ot the glxinfo command above. An example of the output using the Software Rasterizer is shown below:

OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.5, 256 bits)
OpenGL version string: 3.0 Mesa 10.4.5

You can also force LLVMPipe by exporting the LIBGL_ALWAYS_SOFTWARE=1 environment variable when starting Xorg.

Again, if you have built the Mesa OpenGL demos, you can also run the test program glxgears. This program brings up a window with three gears turning. The X terminal will display how many frames were drawn every five seconds, so this will give a rough benchmark. The window is scalable, and the frames drawn per second is highly dependent on the size of the window. On some hardware, glxgears will run synchronized with the vertical refresh signal and the frame rate will be approximately the same as the monitor refresh rate.

Hybrid Graphics

Hybrid Graphics is still in experimental state for Linux. Xorg Developers have developed a technology called PRIME that can be used for switching between integrated and muxless discrete GPU at will. Automatic switching is not possible at the moment.

In order to use PRIME for GPU switching, make sure that you are using Linux Kernel 3.4 or later (recommended). You will need latest DRI and DDX drivers for your hardware and Xorg Server 1.13 or later with an optional patch applied.

Xorg Server should load both GPU drivers automaticaly. In order to run a GLX application on a discrete GPU, you will need to export the DRI_PRIME=1 environment variable. For example,

DRI_PRIME=1 glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)"

will show OpenGL vendor, renderer and version for the discrete GPU.

If the last command reports same OpenGL renderer with and without DRI_PRIME=1, you will need to check your installation.

Setting up Xorg Devices

For most hardware configurations, modern Xorg will automatically get the server configuration correct without any user intervention. There are, however, some cases where auto-configuration will be incorrect. Following are some example manual configuration items that may be of use in these instances.

Setting up X Input Devices

For most input devices, no additional configuration will be necessary. This section is provided for informational purposes only.

A sample default XKB setup could look like the following (executed as the root user):

cat > /etc/X11/xorg.conf.d/xkb-defaults.conf << "EOF"
Section "InputClass"
    Identifier "XKB Defaults"
    MatchIsKeyboard "yes"
    Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
EOF

Fine Tuning Display Settings

Again, with modern Xorg, little or no additional configuration is necessary. If you should need extra options passed to your video driver, for instance, you could use something like the following (again, executed as the root user):

cat > /etc/X11/xorg.conf.d/videocard-0.conf << "EOF"
Section "Device"
    Identifier  "Videocard0"
    Driver      "radeon"
    VendorName  "Videocard vendor"
    BoardName   "ATI Radeon 7500"
    Option      "NoAccel" "true"
EndSection
EOF

Another common setup is having multiple server layouts for use in different environments. Though the server will automatically detect the presence of another monitor, it may get the order incorrect:

cat > /etc/X11/xorg.conf.d/server-layout.conf << "EOF"
Section "ServerLayout"
    Identifier     "DefaultLayout"
    Screen      0  "Screen0" 0 0
    Screen      1  "Screen1" LeftOf "Screen0"
    Option         "Xinerama"
EndSection
EOF

Last updated on 2017-02-16 16:10:58 -0800

Tuning Fontconfig

Overview of Fontconfig

If you only read text in English, and are happy with the common libre fonts listed on the next page, you may never need to worry about the details of how fontconfig works. But there are many things which can be altered if they do not suit your needs.

Although this page is long, it barely scratches the surface and you will be able to find many alternative views on the web (but please remember that some things have changed over the years, for example the autohinter is no longer the default). The aim here is to give you enough information to understand the changes you are making.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Fontconfig

The Xft Font Protocol

The Xft font protocol provides antialiased font rendering through freetype, and fonts are controlled from the client side using fontconfig (except for rxvt-unicode-9.22 which can use fonts listed in ~/.Xresources, and AbiWord-3.0.2 which only uses the specified font). The default search path is /usr/share/fonts and ~/.local/share/fonts although for the moment the old and deprecated location ~/.fonts still works. Fontconfig searches directories in its path recursively and maintains a cache of the font characteristics in each directory. If the cache appears to be out of date, it is ignored, and information is fetched from the fonts themselves (that can take a few seconds if you installed a lot of fonts).

If you've installed Xorg in any prefix other than /usr, any X fonts were not installed in a location known to Fontconfig. Symlinks were created from the OTF and TTF X font directories to /usr/share/fonts/X11-{OTF,TTF}. This allows Fontconfig to use the OpenType and TrueType fonts provided by X, although many people will prefer to use more modern fonts.

Fontconfig uses names to define fonts. Applications generally use generic font names such as "Monospace", "Sans" and "Serif". Fontconfig resolves these names to a font that has all characters that cover the orthography of the language indicated by the locale settings.

Useful Commands

The following commands may be helpful when working with fontconfig:

fc-list | less : show a list of all available fonts (/path/to/filename: Font Name:style). If you installed a font more than 30 seconds ago but it does not show, then it or one of its directories is not readable by your user.

fc-match 'Font Name' : will tell you which font will be used if the named font is requested. Typically you would use this to see what happens if a font you have not installed is requested, but you can also use it if the system is giving you a different font from what you expected (perhaps because fontconfig does not agree that the font supports your language).

fc-match -a 'Type' | less : will provide a list of all fonts which can be used for that type (Monospace, Sans, Serif). Note that in-extremis fontconfig will take a glyph from any available font, even if it is not of the specified type, and unless it knows about the font's type it will assume it is Sans.

If you wish to know which font will be used for a string of text (i.e. one or more glyphs, preceded by a space), paste the following command and replace the xyz by the text you care about:

FC_DEBUG=4 pango-view --font=monospace -t xyz | grep family : this requires Pango-1.40.3 and ImageMagick-7.0.4-8 - it will invoke display to show the text in a tiny window, and after closing that the last line of the output will show which font was chosen. This is particularly useful for CJK languages, and you can also pass a language, e.g. PANGO_LANGUAGE=en;ja (English, then assume Japanese) or just zh-cn (or other variants - 'zh' on its own is not valid).

The various files

The main files are in /etc/fonts.conf.d/. That was intended to be a directory populated by symlinks to some of the files in /usr/share/fontconfig/conf.avail/, but many people, and some packages, create the files directly. Each file name must be in the form of two digits, a dash, somename.conf and they are read in sequence.

By convention, the numbers are assigned as follows:

  • 00-09 extra font directories

  • 10-19 system rendering defaults (antialising etc)

  • 20-29 font rendering options

  • 30-39 family substitution

  • 40-49 map family to generic type

  • 50-59 load alternate config files

  • 60-69 generic aliases, map generic to family

  • 70-79 adjust which fonts are available

  • 80-89 match target scan (modify scanned patterns)

  • 90-99 font synthesis

You can also have a personal fonts.conf in $XDG_CONFIG_HOME which is ~/.config/fontconfig/.

The rules to choose a font

If the requested font is installed, and provided it contains the codepoints required for the current language (in the source, see the .orth files in the fc-lang/ directory), it will be used.

But if the document or page requested a font which is not installed (or, occasionally, does not contain all the required codepoints) the following rules come into play: First, 30-metric-aliases.conf is used to map aliases for some fonts with the same metrics (same size, etc). After that, an unknown font will be searched for in 45-latin.conf - if it is found it will be mapped as Serif or Monospace or Sans, otherwise it will be assumed to be Sans. Then 50-latin.conf provides ordered lists of the fallbacks - Dejavu fonts will be used if you installed them. Cyrillic and Greek appear to be treated in the same way. There are similar files with a 65- prefix for Persian and other non-latin writing systems. All of these files prefer commercial fonts if they are present, although modern libre fonts are often at least their equals.

In the rare cases where a font does not contain all the expected codepoints, see 'Trial the First:' at I stared into the fontconfig for the long details.

Hinting and Anti-aliasing

It is possible to change how, or if, fonts are hinted. The following example file contains the default settings, but with comments. The settings are very much down to the user's preferences and to the choice of fonts, so a change which improves some pages may worsen others. The preferred location for this file is: ~/.config/fontconfig/fonts.conf

To try out different settings, you may need to exit from Xorg and then rerun startx so that all applications use the new settings. And if you use Gnome or KDE their desktops can override these changes. To explore the possibilities, create a file for your user:

mkdir -pv ~/.config/fontconfig/fonts.conf &&
cat > ~/.config/fontconfig/fonts.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>

  <match target="font" >
    <!-- autohint was the old automatic hinter when hinting was patent
    protected, so turn it off to ensure any hinting information in the font
    itself is used, this is the default -->
    <edit mode="assign" name="autohint">  <bool>false<bool></edit>
    <!-- hinting is enabled by default -->
    <edit mode="assign" name="hinting">   <bool>true</bool></edit>
    <!-- for the lcdfilter see http://www.spasche.net/files/lcdfiltering/ -->
    <edit mode="assign" name="lcdfilter"> <const>lcddefault</const></edit>
    <!-- options for hintstyle:
    hintfull: is supposed to give a crisp font that aligns well to the
    character-cell grid but at the cost of its proper shape.
    hintmedium: poorly documented, maybe a synonym for hintfull.
    hintslight is the default: - supposed to be more fuzzy but retains shape.
    hintnone: seems to turn hinting off.
    The variations are marginal and results vary with different fonts -->
    <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>
    <!-- antialiasing is on by default and really helps for faint characters
    and also for 'xft:' fonts used in rxvt-unicode -->
    <edit mode="assign" name="antialias"> <bool>true</bool></edit>
    <!-- subpixels are usually rgb, see
    http://www.lagom.nl/lcd-test/subpixel.php -->
    <edit mode="assign" name="rgba">      <const>rgb</const></edit>
    <!-- thanks to the Arch wiki for the lcd and subpixel links -->
  </match>

</fontconfig>
EOF

You will now need to edit the file in your preferred editor.

For more examples see the blfs-support thread which started at /2016-September/078422, particularly 2016-September/078425, and the original poster's preferred solution at 2016-November/078658. There are other examples in Fontconfig in the Arch wiki and Fontconfig in the Gentoo wiki.

Disabling Bitmap Fonts

In previous versions of BLFS, the ugly old Xorg bitmap fonts were installed. Now, many people will not need to install any of them. But if for some reason you have installed one or more bitmap fonts, you can prevent them being used by fontconfig by creating the following file as the root user :

cat > /etc/fonts/conf.d/70-no-bitmaps.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Reject bitmap fonts -->
 <selectfont>
  <rejectfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </rejectfont>
 </selectfont>
</fontconfig>
EOF

Adding extra font directories

Normally, system fonts and user fonts are installed in directories beneath the locations specified in The Xft Font Protocol and there is no obvious reason to put them elsewhere. However, a full BLFS install of texlive-20160523b puts many fonts in /opt/texlive/2016/texmf-dist/fonts/ in the opentype/ and truetype/ subdirectories. Although pulling in all of these files may appear useful (it allows you to use them in non TeX programs), there are several problems with such an approach:

  1. There are hundreds of files, which makes selecting the font hard.

  2. Some of the files do odd things, such as displaying semaphore flags instead of ASCII letters, or mapping cyrillic codepoints to character forms appropriate to Old Church Slavonic instead of the expected current shapes: fine if that is what you need, but painful for normal use.

  3. Several fonts have multiple sizes and impenetrable short names, which both make selecting the correct font even harder.

  4. When a font is added to CTAN, it is accompanied by TeX packages to use it in the old engines (xelatex does not normally need this), and then the version is often frozen whilst the font is separately maintained. Some of these fonts such as Dejavu fonts are probably already installed on your BLFS system in a newer version, and if you have multiple versions of a font it is unclear which one will be used by fontconfig.

However, it is sometimes useful to look at these fonts in non-TeX applications, if only to see whether you wish to install a current version. If you have installed all of texlive, the following example will make one of the Arkandis Open Type fonts available to other applications, and all three of the ParaType TrueType fonts. Adjust or repeat the lines as desired, to either make all the opentype/ or 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/2016/texmf-dist/fonts/opentype/arkandis/berenisadf</dir>
  <dir>/opt/texlive/2016/texmf-dist/fonts/truetype/paratype</dir>
</fontconfig>
EOF

If you do this, remember to change all instances of the year in that file when you upgrade texlive to a later release.

Preferring certain fonts

There are many reasons why people may wish to have pages which specify a particular font use a different font, or prefer specific fonts in Monospace or Sans or Serif. As you will expect, there a number of different ways of achieving this.

Fontconfig user docs

Fontconfig installs user documentation that includes an example 'User configuration file' which among other things prefers WenQuanYi ZenHei (a Sans font) if a Serif font is requested for Chinese (this part might be anachronistic unless you have non-free Chinese fonts, because in 65-nonlatin.conf this font is already among the preferred fonts when Serif is specified for Chinese) and to prefer the modern VL Gothic font if a Sans font is specified on a Japanese page (otherwise a couple of other fonts would be preferred if they have been installed).

If you have installed the current version, the user documentation is available in html, PDF and text versions at /usr/share/doc/fontconfig-2.12.1/ : change the version if you installed a different one.

Prefer a specific font

As an example, if for some reason you wished to use the Nimbus Roman No9 L font wherever Times New Roman is referenced (it is metrically similar, and preferred for Times Roman, but the Serif font from Liberation fonts will be preferred for the Times New Roman font if installed), as an individual user you could install the font and then create the following file:

mkdir -pv ~/.config/fontconfig/conf.d &&
cat >  ~/.config/fontconfig/conf.d/35-prefer-nimbus-for-timesnew.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- prefer Nimbus Roman No9 L for Times New Roman as well as for Times,
 without this Tinos and Liberation Serif take precedence for Times New Roman
 before fontconfig falls back to whatever matches Times -->
    <alias binding="same">
        <family>Times New Roman</family>
        <accept>
            <family>Nimbus Roman No9 L</family>
        </accept>
    </alias>
</fontconfig>
EOF

This is something you would normally do in an individual user's settings, but the file in this case has been prefixed '35-' so that it could, if desired, be used system-wide in /etc/fonts/conf.d/.

Prefer chosen CJK fonts

The following example of a local configuration (i.e. one that applies for all users of the machine) does several things:

  1. If a Serif font is specified, it will prefer the UMing variants, so that in the zh-cn, zh-hk and zh-tw languages things should look good (also zh-sg which actually uses the same settings as zh-cn) without affecting Japanese.

  2. It prefers the Japanese IPAex fonts if they have been installed (although VL Gothic will take precedence for (Japanese) Sans if it has also been installed.

  3. Because WenQuanYi ZenHei covers Korean Hangul glyphs and is also preferred for Serif in 65-nonlatin.conf, if installed it will be used by default for Korean Serif. To get a proper Serif font, the UnBatang font is specified here - change that line if you installed a different Serif font from the choice of Korean fonts.

  4. The Monospace fonts are forced to the preferred Sans fonts. If the text is in Korean then WenQuanYi ZenHei will be used.

In a non-CJK locale, the result is that suitable fonts will be used for all variants of Chinese, Japanese and Hangul Korean. All other languages should already work if a font is present. As the root user:

cat > /etc/fonts/local.conf << "EOF"
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <alias>
        <family>serif</family>
        <prefer>
            <family>AR PL UMing</family>
            <family>IPAexMincho</family>
            <!-- WenQuanYi is preferred as Serif in 65-nonlatin.conf,
            override that so a real Korean font can be used for Serif -->
            <family>UnBatang</family>
        </prefer>
    </alias>
    <alias>
         <family>sans-serif</family>
         <prefer>
             <family>WenQuanYi Zen Hei</family>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
         </prefer>
    </alias>
    <alias>
         <family>monospace</family>
         <prefer>
             <family>VL Gothic</family>
             <family>IPAexGothic</family>
             <family>WenQuanYi Zen Hei</family>
         </prefer>
    </alias>
</fontconfig>
EOF

Editing Old-style conf files

Some fonts, particularly Chinese fonts, ship with conf files which can be installed in /etc/fonts/conf.d. However, if you do that and then use a terminal to run any command which uses fontconfig you may see error messages such as :

Fontconfig warning: "/etc/fonts/conf.d/69-odofonts.conf", line 14: Having multiple <family> in <alias> isn't supported and may not work as expected.

In practice, these old rules do not work. For non-CJK users, fontconfig will usually do a good job without these rules. Their origin dates back to when CJK users needed handcrafted bitmaps to be legible at small sizes, and those looked ugly next to antialiased Latin glyphs - they preferred to use the same CJK font for the Latin glyphs. There is a side-effect of doing this : the (Serif) font is often also used for Sans, and in such a situation the (English) text in Gtk menus will use this font - compared to system fonts, as well as being serif it is both faint and rather small. That can make it uncomfortable to read.

Nevertheless, these old conf files can be fixed if you wish to use them. The following example is the first part of 64-arphic-uming.conf from UMing - there are a lot more similar items which also need changing :


   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>

The process to correct this is straightforward but tedious - for every item which produces an error message, using your editor (as the root user) edit the installed file to repeat the whole block as many times as there are multiple variables, then reduce each example to have only one of them. You may wish to work on one error at a time, save the file after each fix, and from a separate term run a command such as fc-list 2>&1 | less to see that the fix worked. For the block above, the fixed version will be :


   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-cn</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>
   <match target="pattern">
       <test qual="any" name="lang" compare="contains">
           <string>zh-sg</string>
       </test>
       <test qual="any" name="family">
           <string>serif</string>
       </test>
       <edit name="family" mode="prepend" binding="strong">
           <string>AR PL UMing CN</string>
       </edit>
    </match>

See Also

I stared into the fontconfig ...

The blog entries by Eevee are particularly useful if fontconfig does not think your chosen font supports your language, and for preferring some non-MS Japanese fonts when an ugly MS font is already installed.

Fontconfig in the Arch wiki

Arch has a lot of information in its wiki at font_configuration.

Fontconfig in the Gentoo wiki

Gentoo has some information in its wiki at Fontconfig although a lot of the details (what to enable, and Infinality) are specific to Gentoo.

Last updated on 2017-01-25 09:03:58 -0800

TTF and OTF fonts

About TTF and OTF fonts

Originally, Xorg provided only bitmap fonts. Later, some scalable Type1 fonts were added, but the desktop world moved on to using TrueType and Open Type fonts. To support these, Xorg uses Xft, the X FreeType interface library.

These fonts can provide hints, which fontconfig uses to adjust them for maximum readability on computer monitors. On linux you should always prefer the hinted versions, if available (in general the latin, cyrillic and greek alphabets can use hints, most other writing systems do not use hinting).

A few fonts are provided as collections (TTC or OTC) where font data is shared between different fonts, thus saving disk space. Treat these in exactly the same way as individual TTF or OTF files.

If a font provides both TTF and OTF forms, prefer the OTF form in linux, it may provide more features for programs which know how to use them (such as xelatex).

For some scripts pango is required to render things correctly, either by selecting different glyph forms, or by combining glyphs - in both cases, according to the context. This applies particularly to arabic and indic scripts.

Standard scalable fonts that come with X provide very poor Unicode coverage. You may notice in applications that use Xft that some characters appear as a box with four binary digits inside. In this case, a font with the required glyphs has not been found. Other times, applications that don't use other font families by default and don't accept substitutions from Fontconfig will display blank lines when the default font doesn't cover the orthography of the user's language.

The fonts available to a program are those which were present when it was started, so if you add an extra font and wish to use it in a program which is currently running, then you will have to close and restart that program.

Some people are happy to have dozens, or even hundreds, of font files available, but if you ever wish to select a specific font in a desktop application (for example in a word processor) then scrolling through a lot of fonts to find the right one is slow and awkward - fewer is better. So, for some font packages you might decide to install only one of the fonts - but nevertheless install the different variants (italic, bold, etc) as these are all variations for the same font name.

In the past, everybody recommended running fc-cache as the root user after installing or removing fonts, but this is no-longer necessary on linux, fontconfig will do it automatically if needed and if its caches are more than 30 seconds old. But if you add a font and want to immediately use it then you can run that command (as a normal user).

There are several references below to CJK characters. This stands for Chinese, Japanese and Korean, although modern Korean is now almost all written using the phonetic Hangul glyphs (it used to sometimes use Hanja glyphs which are similar to Chinese and Japanese). Unicode decided to go for Han Unification and to map some Chinese and Japanese glyphs to the same codepoints. This was very unpopular in Japan, and the result is that different fonts will render some codepoints in quite different shapes. In addition, Simplified Chinese will sometimes use the same codepoint as Traditional Chinese but will show it differently, somewhat analagous to the different shapes used for the letters 'a' and 'g' in English (single-storey and two-storey), except that in a language context one will look "wrong" rather than just "different".

Unlike most other packages in this book, the BLFS editors do not monitor the versions of the fonts on this page - once a font is good enough for general use, the typical additions in a new version are minor (e.g. new currency symbols, or glyphs not for a modern language, such as emojis or playing cards). Therefore, none of these fonts show version or md5 information.

The list below will not provide complete Unicode coverage. Unicode is updated every year, and most additions are now for historic writing systems. For almost-complete coverage you can install Noto fonts (about 180 fonts when last checked) but that number of fonts makes it much less convenient to select a specific font in a document, and most people will regard many of them as a waste of space. We used to recommend the Unicode Font Guide, but that has not been updated since 2008 and many of its links are dead.

Rendered examples of most of these fonts, and many others, with details of what languages they cover, some examples of latin fonts with the same metrics (listed as "Substitute latin fonts") and various files of dummy text to compare fonts of similar types, can be found at this font comparison page. That site also covers other current writing systems.

Fonts are often supplied in zip files, requiring UnZip-6.0 to list and extract them, but even if the current release is a tarball you should still check to see if it will create a directory (scatterring the contents of a zipfile or tarball across the current directory can be very messy, and a few fonts create odd __MACOSX/ directories. In addition, many fonts are supplied with permissions which do not let 'other' read them - if a font is to be installed for system-wide use, any directories must be mode 755 and all the files mode 644, so change them if necessary. If you forget, the root user may be able to see a particular font in fc-list but a normal user will not.

As a font installation example, consider the installation of the Dejavu fonts. In this particular package, the TTF files are in a subdirectory. From the unpacked source directory, run the following commands as the root user:

install -v -d -m755 /usr/share/fonts/dejavu &&
install -v -m644 ttf/*.ttf /usr/share/fonts/dejavu &&
fc-cache -v /usr/share/fonts/dejavu

If you wish, you can also install any licenses or other documentation, either alongside the font or in a corresponding directory under /usr/share/doc/.

A few fonts ship with source as well as with the completed TTF or OTF file(s). Unless you intend to modify the font, and have the correct tools (sometimes FontForge-20161004, but often commercial tools), the source will provide no benefit, so do not install it. One or two fonts even ship with Web Open Font Format (WOFF) files - useful if you run a webserver and want to use that font on it, but not useful for desktops.

To provide greater Unicode coverage, you are recommended to install some of the following fonts, depending on what webistes and languages you wish to read. The next part of this page details some fonts which cover at least latin alphabets, the final part deals with come CJK issues.

Note

You are strongly recommended to install the Dejavu fonts.

Caladea

Caladea (created as a Chrome OS extra font, hence the 'crosextrafonts' tarball name) is metrically compatible with MS Cambria and can be used if you have to edit a document which somebody started in Microsoft Office using Cambria and then return it to them.

Cantarell fonts

Cantarell fonts - The Cantarell typeface family provides a contemporary Humanist sans serif. It is particularly optimised for legibility at small sizes and is the preferred font family for the GNOME-3 user interface.

Carlito

Carlito (created as another Chrome OS extra font, again the 'crosextrafonts-' prefix in the tarball name) is metrically compatible with MS Calibri and can be used if you have to edit a document which somebody started in Microsoft Office using Calibri and then return it to them.

DejaVu fonts

DejaVu fonts - These fonts are an extension of, and replacement for, the Bitstream Vera fonts and provide Latin-based scripts with accents and punctuation such as "smart-quotes" and variant spacing characters, as well as Cyrillic, Greek, Arabic, Hebrew, Armenian, Georgian and some other glyphs. In the absence of the Bitstream Vera fonts (which had much less coverage), these are the default fallback fonts.

GNU FreeFont

GNU FreeFont - This set of fonts covers many non-CJK characters, in particular some of the variants of latin and cyrillic letters used in minority languages, but the glyphs are comparatively small (unlike DejaVu fonts which are comparatively large) and rather light weight ("less black" when black on white is used) which means that in some contexts such as terminals they are not visually pleasing, for example when most other glyphs are provided by another font. On the other hand, some fonts used primarily for printed output, and many CJK fonts, are also light weight.

Gelasio

Gelasio is metrically compatible with MS Georgia and fontconfig will use it if ever Georgia is requested but not installed.

Liberation fonts

The Liberation fonts provide libre substitutes for Arial, Courier New, and Times New Roman. Fontconfig will use them as substitutes for those fonts, and also for the similar Helvetica, Courier, Times Roman although for these latter it can prefer a different font (see the examples in the 'Substitutes' PDFs at zarniwhoop.uk).

Many people will find the Liberation fonts useful for pages where one of those fonts is requested.

Microsoft Core Fonts

The Microsoft Core fonts date from 2002. They were supplied with old versions of Microsoft Windows and were apparently made available for general use. You can extract them from the 'exe' files using bsd-tar from libarchive-3.2.2. Be sure to read the license before using them. At one time some of these fonts (particularly Arial, Times New Roman, and to a lesser extent Courier New) were widely specified on web pages. The full set contains Andale Mono, Arial, Arial Black, Comic Sans MS, Courier New, Georgia, Impact, Times New Roman, Trebuchet MS, Verdana and Webdings.

Please note that if you only want to use a font with the same metrics (character size, etc) as Arial, Courier New, or Times New Roman you can use the libre Liberation Fonts (above), and similarly you can replace Georgia with Gelasio.

Although many old posts recommend installing these fonts for better-looking output, there are more recent posts that these are ugly or 'broken'. One suggestion is that they do not support anti-aliasing.

The newer fonts which Microsoft made their defaults in later releases of MS Windows or MS Office (Calibri and Cambria) have never been freely available. But if you do not have them installed you can find metric equivalents (Carlito, Caladea) above.

Noto fonts

The Noto fonts ('No Tofu', i.e. avoiding boxes with dots [hex digits] when a glyph cannot be found) is a set of fonts which aim to cover every glyph in unicode, no matter how obscure. These fonts, or at least the Sans Serif fonts, are used by KF5 (initially only for gtk applications). If you want to cover historic languages, you can download all the fonts by clicking on the link at the top of that page.

People using languages written in Latin, Greek or Cyrillic alphabets need only install Noto Sans itself, and perhaps Noto Sans Symbols for currency symbols. For more details on the CJK fonts see Noto Sans CJK below. There are also separate fonts for every other current writing system, but these too will also require Noto Sans (or Noto Serif) and perhaps Noto Symbols.

However, you should be aware that fontconfig knows nothing about Noto fonts. The 'Noto Sans Something' fonts are each treated as separate fonts (and for Arabic there is not a specifically Sans name), so if you have other fonts installed then the choice of which font to use for missing glyphs where 'Noto Sans' is specified will be random, except that Sans fonts will be preferred over known Serif and Monospace fonts because Sans is the fallback for unknown fonts.

Oxygen fonts

When KDE Frameworks 5 was first released, it used the Oxygen fonts which were designed for integrated use with the KDE desktop. Those fonts are no-longer actively maintained, so KDE made a decision to switch to Noto fonts, but for the moment they are still required by 'startkde'.

Originally these fonts were only supplied as source, needing CMake-3.7.2 and FontForge-20161004 to create the TTF files. But for a while the source has also included the prepared TTF. The only unusual feature is that each TTF file is in its own subdirectory (oxygen-fonts/{*-?00}/) with the source in further subdirectories. You could just install the whole tarball if you prefer, although that will waste space.

CJK fonts:

As indicated earlier, usage of a combination of Chinese, Japanese and Korean can be tricky - each font only covers a subset of the available codepoints, the preferred shapes of the glyphs can differ between the languages, and many of the CJK fonts do not actually support modern Korean.

Also, by default fontconfig prefers Chinese to Japanese. Tuning that is covered at Prefer chosen CJK fonts.

Although Unicode has been extended to allow a very large number of CJK codepoints, those outside the Base Plane (greater than U+0xFFFF) are not commonly used in Mandarin (the normal form of written Chinese, whether Simplified (PRC) or Traditional (Taiwan)), or Japanese.

For Hong Kong, which uses Traditional Chinese and where Cantonese is the dominant language, the Hong Kong Supplementary Character Set was added to Unicode in 2005 and revised in 2009 (it is part of CJK Extension B and contains more than 1900 characters). Earlier fonts will not be able to support either Cantonese or use of these characters where local names are written in Mandarin. The UMing HK, Noto Sans CJK HK and WenQuanYi Zen Hei fonts all seem to cover Hong Kong usage (fontconfig disagrees about Noto Sans CJK HK).

The Han glyphs are double-width, other glyphs in the same font may be narrower. For their CJK content, all of these fonts can be regarded as monospaced (i.e. fixed width).

If all you wish to do is to be able to render CJK glyphs, installing WenQuanYi ZenHei may be a good place to start if you do not already have a preference.

Chinese fonts:

In Chinese, there are three font styles in common use: Sung (also known as Song or Ming) which is the most-common ornamented ("serif") form, Kai ("brush strokes") which is an earlier ornamented style that looks quite different, and modern Hei ("sans"). Unless you appreciate the differences, you probably do not want to install Kai fonts.

Noto Sans CJK

Noto Sans CJK - Sans-Serif sets of all CJK fonts in a ttc - as the link says, you can choose to install the TTC and cover all the languages in all weights in a 110MB file, or you can download subsets. There are also Monospace versions.

Opendesktop fonts

A copy of version 1.4.2 of the opendesktop-fonts is preserved at Arch. This was a later development of fireflysung which BLFS used to recommend, adding Kai and Mono fonts. The name of the Sung font remains 'AR PL New Sung' so they cannot both be installed together.

At one time there was a 1.6 release, and more recently some versions at github, which also included a Sans font (Odohei), but those have dropped off the web and it is unclear if there was a problem. Fontconfig does not know anything about the later fonts (AR PL New Kai, AR PL New Sung Mono) and will default to treating them as Sans.

UMing

UMing fonts - sets of Chinese Ming fonts (from Debian, use the '.orig' tarball) in a ttc which contain variations of Simplified and Traditional Chinese (Taiwanese, with second variant for different bopomofo, and Cantonese for Hong Kong). This ships with old-syntax files which you can install to /etc/fonts/conf.d/ but see Editing Old-Style conf files.

WenQuanYi Zen Hei

WenQuanYi Zen Hei provides a Sans-Serif font which covers all CJK scripts including Korean. Although it includes old-style conf files, these are not required: fontconfig will already treat these fonts (the 'sharp' contains bitmaps, the monospace appears not to be Mono in its ASCII part) as Sans, Serif, and Monospace. If all you wish to do is to be able to render Han and Korean text without worrying about the niceties of the shapes used, the main font from this package is a good font to use.

Japanese fonts:

In Japanese, Gothic fonts are Sans, Mincho are Serif. BLFS used to only mention the Kochi fonts, but those appear to now be the least-preferred of the Japanese fonts.

Apart from the fonts detailed below, also consider Noto Sans CJK.

IPAex fonts

The IPAex fonts are the current version of the IPA fonts. Click on 'English' at the link and then click on the Download icon to find IPAex Font Ver.003.01. Unfortunately, fontconfig only knows about the older IPAfonts and the forked IPA Mona font (which is not easily available and which apparently does not meet Debian's Free Software guidelines). Therefore if you install the IPAex fonts you may wish to make it known to fontconfig, see Prefer chosen CJK fonts for one possible way to do this.

Kochi fonts

The Kochi Substitute fonts were the first truly libre Japanese fonts (the earlier Kochi fonts were allegedly plagiarized from a commercial font).

VL Gothic

The VL Gothic font is a modern Japanese font in two variants with monotonic or proportional spacing for the non-Japanese characters.

Korean fonts:

In Korean, Batang or Myeongjo (the older name) are Serif, Dotum or Gothic are the main Sans fonts. BLFS previously recommended the Baekmuk fonts, but the Nanum and Un fonts are now preferred to Baekmuk by fontconfig because of user requests.

A convenient place to see examples of these and many other Korean fonts is Free Korean Fonts. Click on 'Gothic Fonts' or 'All Categories -> Myeongjo Fonts', then click on the font example to see more details including the License, and click on the link to download it. For Nanum, you will need to be able to read Korean to find the download link on the page you get to. For Un there are direct links and you can find the un-fonts-core tarball in the releases/ directory.

Alternatively, consider Noto Sans CJK (a11 of the variants cover Hangul) or WenQuanYi ZenHei.

Last updated on 2017-02-12 11:39:51 -0800

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 http://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-8.0 platform.

Package Information

Xorg Legacy Dependencies

Required

xcursor-themes-1.0.4

Optional

xmlto-0.0.28 with one or more of the following: fop-2.1, Links-2.14, Lynx-2.8.8rel.2, and w3m-0.5.3 (to generate additional PDF or text documentation for the libXfont package).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Xorg7Legacy

Downloading Xorg Legacy

First, create a list of files to be downloaded. This file will also be used to verify the integrity of the downloads when complete:

cat > legacy.dat << "EOF"
254ee42bd178d18ebc7a73aacfde7f79 lib/ libXfont-1.5.2.tar.bz2
53a48e1fdfec29ab2e89f86d4b7ca902 app/ bdftopcf-1.0.5.tar.bz2
1347c3031b74c9e91dc4dfa53b12f143 font/ font-adobe-100dpi-1.0.3.tar.bz2
6c9f26c92393c0756f3e8d614713495b font/ font-adobe-75dpi-1.0.3.tar.bz2
cb7b57d7800fd9e28ec35d85761ed278 font/ font-jis-misc-1.0.3.tar.bz2
0571bf77f8fab465a5454569d9989506 font/ font-daewoo-misc-1.0.3.tar.bz2
a2401caccbdcf5698e001784dbd43f1a font/ font-isas-misc-1.0.3.tar.bz2
EOF

To download the needed files using wget, use the following commands:

mkdir legacy &&
cd legacy &&
grep -v '^#' ../legacy.dat | awk '{print $2$3}' | wget -i- -c \
     -B http://ftp.x.org/pub/individual/ &&
grep -v '^#' ../legacy.dat | awk '{print $1 " " $3}' > ../legacy.md5 &&
md5sum -c ../legacy.md5

Installation of Xorg Legacy

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

for package in $(grep -v '^#' ../legacy.md5 | awk '{print $2}')
do
  packagedir=${package%.tar.bz2}
  tar -xf $package
  pushd $packagedir
  case $packagedir in
    libXfont-[0-9]* )
      ./configure $XORG_CONFIG --disable-devel-docs
    ;;
    * )
      ./configure $XORG_CONFIG
    ;;
  esac
  make
  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-devel-docs: Disable generation of text documentation in the libXfont package if xmlto-0.0.28 is installed without a text browser. Omit this parameter (or the entire case statement) if a text browser is installed.

Contents

Installed Programs: bdftopcf
Installed Libraries: libXfont
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.

libXfont.so

is an old version of the X font library.

Last updated on 2017-02-15 14:01:44 -0800

Chapter 25. X Libraries

This chapter does not contain libraries that are required to run X. It does contain libraries that enhance X. In some cases the enhancement is as simple as font support. In others it is as complex as libraries that sit between X and applications that run on X whose purpose is to standardize the look and feel and inter-process communications for different applications. They also assist programmers by supplying common elements.

ATK-2.22.0

Introduction to ATK

ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and control running applications.

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

Package Information

ATK Dependencies

Required

GLib-2.50.3

Recommended (Required if building GNOME)
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/atk

Installation of ATK

Install ATK by running the following commands:

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

This package does not come with a testsuite.

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: libatk-1.0.so
Installed Directories: /usr/include/atk-1.0 and /usr/share/gtk-doc/html/atk

Short Descriptions

libatk-1.0.so

contains functions that are used by assistive technologies to interact with the desktop applications.

Last updated on 2017-02-15 14:01:44 -0800

Atkmm-2.24.2

Introduction to Atkmm

Atkmm is the official C++ interface for the ATK accessibility toolkit library.

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

Package Information

Atkmm Dependencies

Required

ATK-2.22.0 and GLibmm-2.50.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/atkmm

Installation of Atkmm

First, fix the documents directory name:

sed -e '/^libdocdir =/ s/$(book_name)/atkmm-2.24.2/' \
    -i doc/Makefile.in

Install Atkmm by running the following commands:

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

This package does not come with a testsuite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libatkmm-1.6.so
Installed Directories: /usr/{include,lib}/atkmm-1.6 and /usr/share/{devhelp/books/atkmm-1.6,doc/atkmm-2.24.2}

Short Descriptions

libatkmm-1.6.so

contains the ATK API classes.

Last updated on 2017-02-16 19:24:14 -0800

at-spi2-core-2.22.0

Introduction to At-Spi2 Core

The At-Spi2 Core package is a part of the GNOME Accessibility Project. It provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked.

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

Package Information

At-Spi2 Core Dependencies

Required

dbus-1.10.14, GLib-2.50.3, and Xorg Libraries

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/at-spi2-core

Installation of At-Spi2 Core

Install At-Spi2 Core by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc &&
make

A session bus address, normally available in an Xorg terminal, is necessary to run the tests. To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libatspi.so
Installed Directories: /usr/include/at-spi-2.0 and /usr/share/gtk-doc/html/libatspi

Short Descriptions

libatspi.so

contains the At-Spi2 API functions.

Last updated on 2017-02-16 19:24:14 -0800

at-spi2-atk-2.22.0

Introduction to At-Spi2 Atk

The At-Spi2 Atk package contains a library that bridges ATK to At-Spi2 D-Bus service.

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

Package Information

At-Spi2 Atk Dependencies

Required

at-spi2-core-2.22.0 and ATK-2.22.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/at-spi2-atk

Installation of At-Spi2 Atk

Install At-Spi2 Atk by running the following commands:

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

To test the results, issue: make check. An already active graphical session with bus address is necessary to run the tests.

Now, as the root user:

make 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

Contents

Installed Programs: None
Installed Libraries: libatk-bridge-2.0.so and /usr/lib/gtk-2.0/modules/libatk-bridge.so
Installed Directory: /usr/include/at-spi2-atk

Short Descriptions

libatk-bridge.so

is the Accessibility Toolkit GTK+ module.

libatk-bridge-2.0.so

Contains the common functions used by GTK+ Accessibility Toolkit Bridge.

Last updated on 2017-02-16 19:24:14 -0800

Cairo-1.14.8

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-8.0 platform.

Package Information

Cairo Dependencies

Required

libpng-1.6.28 and Pixman-0.34.0

Recommended
Optional

Cogl-1.22.2, ghostscript-9.20, GTK+-3.22.8 and GTK+-2.24.31, GTK-Doc-1.25, libdrm-2.4.75, librsvg-2.40.16, LZO-2.09, Mesa-13.0.4, Poppler-0.51.0, Valgrind-3.12.0, DirectFB, jbig2dec, libspectre, Skia, and Qt4.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cairo

Installation of Cairo

Install Cairo by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --enable-tee &&
make

This package does not have a working testsuite.

Now, as the root user:

make install

Command Explanations

--enable-tee: This switch enables the experimental tee surface backend which is required if using system-installed Cairo with Mozilla applications.

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

--enable-xlib-xcb: This switch enables several experimental Xlib/XCB functions used by some window managers.

--enable-gl: This switch enables Cairo's experimental OpenGL surface which is required for Wayland compositor and some other packages that are not part of BLFS.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: cairo-sphinx and cairo-trace
Installed Libraries: libcairo.so, libcairo-gobject.so and libcairo-script-interpreter.so
Installed Directories: /usr/{include,lib,share/gtk-doc/html}/cairo

Short Descriptions

cairo-sphinx

is an internal utility for regression analysis.

cairo-trace

generates a log of all calls made by an application to Cairo.

libcairo.so

contains the 2D graphics functions required for rendering to the various output targets.

libcairo-gobject.so

contains functions that integrate Cairo with Glib's GObject type system.

libcairo-script-interpreter.so

contains the script interpreter functions for executing and manipulating Cairo execution traces.

Last updated on 2017-02-15 14:01:44 -0800

Cairomm-1.12.2

Introduction to Cairomm

The Cairomm package provides a C++ interface to Cairo.

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

Package Information

Cairomm Dependencies

Required

Cairo-1.14.8 and libsigc++-2.10.0

Optional

Boost-1.63.0 and Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cairomm

Installation of Cairomm

First, fix the documentation directory name:

sed -e '/^libdocdir =/ s/$(book_name)/cairomm-1.12.2/' \
    -i docs/Makefile.in

Install Cairomm by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libcairomm-1.0.so
Installed Directories: /usr/{include,lib}/cairomm-1.0 and /usr/share/{devhelp/books/cairomm-1.0,doc/cairomm-1.12.2}

Short Descriptions

libcairomm-1.0.so

contains the Cairo API classes.

Last updated on 2017-02-16 19:24:14 -0800

Cogl-1.22.2

Introduction to Cogl

Cogl is a modern 3D graphics API with associated utility APIs designed to expose the features of 3D graphics hardware using a direct state access API design, as opposed to the state-machine style of OpenGL.

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

Package Information

Cogl Dependencies

Required

Cairo-1.14.8, gdk-pixbuf-2.36.5, GLU-9.0.0, Mesa-13.0.4, and Pango-1.40.3

Recommended
Optional

gst-plugins-base-1.10.3, GTK-Doc-1.25, SDL-1.2.15, SDL2-2.0.5, and Wayland-1.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cogl

Installation of Cogl

Install Cogl by running the following commands:

Note

This package may occasionally fail when building with multiple processors. See Using Multiple Processors for more information.

sed -i 's/^#if COGL/#ifdef COGL/' cogl/winsys/cogl-winsys-egl.c &&

./configure --prefix=/usr --enable-gles1 --enable-gles2         &&
make

To test the results, issue: make check. The tests should be run from an X terminal on the hardware accelerated Xorg Server.

Now, as the root user:

make install

Command Explanations

--enable-gles1: This switch enables support for OpenGL ES 1.1.

--enable-gles2: This switch enables support for OpenGL ES 2.0.

--enable-cogl-gst: This switch enables gstreamer support.

--enable-{kms,wayland,xlib}-egl-platform: These switches enable support for KMS, Wayland and Xlib EGL platforms. They are required for GNOME Wayland support.

--enable-wayland-egl-server: This switch enables Cogl's Wayland Server API which is required for GNOME Wayland support.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Libraries: libcogl-gles2.so, libcogl-pango.so, libcogl-path.so, and libcogl.so, and optional libraries libcogl-gst.so and /usr/lib/gstreamer-1.0/libgstcogl.so
Installed Directories: /usr/include/cogl and /usr/share/cogl

Short Descriptions

libcogl-gles2.so

is the OpenGL ES 2.0 integration library for Cogl.

libcogl-pango.so

is the Pango integration library for Cogl.

libcogl.so

is an object oriented GL/GLES Abstraction/Utility Layer library.

Last updated on 2017-02-17 16:10:58 -0800

Clutter-1.26.0

Introduction to Clutter

The Clutter package contains an open source software library used for creating fast, visually rich and animated graphical user interfaces.

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

Note

Anything built with this toolkit needs hardware 3D acceleration from the graphics driver at runtime. This is provided by Mesa (or by proprietary graphics drivers), but is not available for every graphics card nor for all virtual machines. You may wish to review Checking the DRI installation.

Package Information

Clutter Dependencies

Required

ATK-2.22.0, Cogl-1.22.2, and JSON-GLib-1.2.2

Recommended
Optional

GTK-Doc-1.25, libgudev-231, libinput-1.6.1, libxkbcommon-0.7.1, Tslib, and Wayland-1.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/clutter

Installation of Clutter

Install Clutter by running the following commands:

./configure --prefix=/usr --sysconfdir=/etc --enable-egl-backend &&
make

To test the results, issue: make -k check (you must be in an xterm or similar to do this, because it launches some windows).

Now, as the root user:

make install

Command Explanations

--enable-egl-backend: This switch enables the experimental EGL windowing backend.

--enable-evdev-input: This switch enables the experimental Evdev input backend which is required for GNOME Wayland support.

--enable-wayland and --enable-wayland-compositor: These switches enable the experimental Wayland API in Clutter which is required for GNOME Wayland support.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libclutter-1.0.so and libclutter-glx-1.0.so
Installed Directories: /usr/include/clutter-1.0 and /usr/share/gtk-doc/html/{cally,clutter}

Short Descriptions

libclutter-1.0.so

contains the Clutter API functions.

Last updated on 2017-02-17 16:10:58 -0800

clutter-gst-3.0.22

Introduction to Clutter Gst

The Clutter Gst package contains an integration library for using GStreamer with Clutter. Its purpose is to implement the ClutterMedia interface using GStreamer.

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

Package Information

Clutter Gst Dependencies

Required

Clutter-1.26.0, gst-plugins-base-1.10.3, and libgudev-231

Recommended
Optional

Cgc, GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/clutter-gst

Installation of Clutter Gst

Install Clutter Gst by running the following commands:

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

This package does not come with a testsuite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libclutter-gst-3.0.so and /usr/lib/gstreamer-1.0/libgstclutter.so
Installed Directories: /usr/include/clutter-gst-3.0 and /usr/share/gtk-doc/html/clutter-gst-3.0

Short Descriptions

libclutter-gst-3.0.so

contains the Clutter Gst API functions.

Last updated on 2017-02-20 15:27:17 -0800

clutter-gtk-1.8.2

Introduction to Clutter Gtk

The Clutter Gtk package is a library providing facilities to integrate Clutter into GTK+ applications.

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

Package Information

Clutter Gtk Dependencies

Required

Clutter-1.26.0 and GTK+-3.22.8

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/clutter-gtk

Installation of Clutter Gtk

Install Clutter Gtk by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libclutter-gtk-1.0.so
Installed Directories: /usr/include/clutter-gtk-1.0 and /usr/share/gtk-doc/html/clutter-gtk-1.0

Short Descriptions

libclutter-gtk-1.0.so

contains the Clutter Gtk API functions.

Last updated on 2017-02-19 13:23:34 -0800

colord-gtk-0.1.26

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-8.0 platform.

Package Information

Colord GTK Dependencies

Required

Colord-1.2.12 and GTK+-3.22.8

Recommended
Optional

DocBook-utils-0.6.14, GTK+-2.24.31 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/colord-gtk

Installation of Colord GTK

Warning

If building the documentation make -j1 must be used.

Install Colord GTK by running the following commands:

./configure --prefix=/usr    \
            --enable-vala    \
            --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-vala: This switch enables building of the Vala bindings. Remove if you don't have Vala-0.34.4 installed.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: cd-convert
Installed Libraries: libcolord-gtk.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.

Last updated on 2017-02-20 15:27:17 -0800

FLTK-1.3.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-8.0 platform.

Package Information

FLTK Dependencies

Required

Xorg Libraries

Recommended
Optional

alsa-lib-1.1.3, desktop-file-utils-0.23, Doxygen-1.8.13, GLU-9.0.0, Mesa-13.0.4, and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fltk

Installation of FLTK

Note

The tar extraction directory is fltk-1.3.4 and not fltk-1.3.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, as the root user:

make docdir=/usr/share/doc/fltk-1.3.4 install

If desired, install some example games built as a part of the tests, extra documentation and example programs. As the root user:

make -C test          docdir=/usr/share/doc/fltk-1.3.4 install-linux &&
make -C documentation docdir=/usr/share/doc/fltk-1.3.4 install-linux

Command Explanations

sed ... documentation/Makefile: Avoid installing pages in /usr/share/man/cat*.

Contents

Installed Programs: blocks, checkers, fltk-config, fluid, and sudoku
Installed Libraries: libfltk.{a,so}, libfltk_forms.{a,so}, libfltk_gl.{a,so}, and libfltk_images.{a,so}
Installed Directories: /usr/include/FL and /usr/share/doc/fltk-1.3.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.

Last updated on 2017-02-17 16:10:58 -0800

Freeglut-3.0.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-8.0 platform.

Package Information

Freeglut Dependencies

Required

CMake-3.7.2 and Mesa-13.0.4

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/freeglut

Installation of Freeglut

Install Freeglut by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr      \
      -DCMAKE_BUILD_TYPE=Release       \
      -DFREEGLUT_BUILD_DEMOS=OFF       \
      -DFREEGLUT_BUILD_STATIC_LIBS=OFF \
      .. &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DFREEGLUT_BUILD_DEMOS=OFF: Disable building optional demo programs. Note that if you choose to build them, their installation must be done manually. The demo programs are limited and installation is not recommended.

-DFREEGLUT_BUILD_STATIC_LIBS=OFF: Do not build the static library.

Contents

Installed Programs: None
Installed Library: libglut.so
Installed Directories: None

Short Descriptions

libglut.so

contains functions that implement the OpenGL Utility Toolkit.

Last updated on 2017-02-16 20:11:03 -0800

gdk-pixbuf-2.36.5

Introduction to Gdk Pixbuf

The Gdk Pixbuf package is a toolkit for image loading and pixel buffer manipulation. It is used by GTK+ 2 and GTK+ 3 to load and manipulate images. In the past it was distributed as part of GTK+ 2 but it was split off into a separate package in preparation for the change to GTK+ 3.

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

Package Information

Gdk Pixbuf Dependencies

Required

GLib-2.50.3, libjpeg-turbo-1.5.1 and libpng-1.6.28

Recommended
Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

JasPer-2.0.10 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gdk-pixbuf

Installation of Gdk Pixbuf

Install Gdk Pixbuf by running the following commands:

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

To test the results, issue: make check. The tests make a heavy use of disk.

Now, as the root user:

make install

Note

If you installed the package on to your system using a “DESTDIR” method, an important file was not installed and should be copied and/or generated. Generate it using the following command as the root user:

gdk-pixbuf-query-loaders --update-cache

Command Explanations

--with-x11: This switch enables building of the Gdk Pixbuf X11 library which is needed for many packages.

--with-libjasper: If you've installed JasPer-2.0.10 and you want Gdk Pixbuf to use it to compile a JPEG2000 image loader, pass this switch to configure.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: gdk-pixbuf-csource, gdk-pixbuf-pixdata, gdk-pixbuf-query-loaders, and gdk-pixbuf-thumbnailer,
Installed Libraries: libgdk_pixbuf-2.0.so and libgdk_pixbuf_xlib-2.0.so
Installed Directories: /usr/{include,lib}/gdk-pixbuf-2.0, /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.

libgdk_pixbuf_xlib-2.0.so

contains functions used to manipulate images and interfaces with Xlib.

Last updated on 2017-02-15 14:01:44 -0800

GLU-9.0.0

Introduction to GLU

This package provides the Mesa OpenGL Utility library.

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

Package Information

GLU Dependencies

Required

Mesa-13.0.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/glu

Installation of GLU

Install GLU by running the following commands:

./configure --prefix=$XORG_PREFIX --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: libGLU.so
Installed Directories: None

Short Descriptions

libGLU.so

is the Mesa OpenGL Utility library.

Last updated on 2017-02-16 16:10:58 -0800

GOffice-0.10.33

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-8.0 platform.

Package Information

GOffice Dependencies

Required

GTK+-3.22.8, libgsf-1.14.41, librsvg-2.40.16, libxslt-1.1.29, and Which-2.21

Optional

gobject-introspection-1.50.0, ghostscript-9.20, gsettings-desktop-schemas-3.22.0, GTK-Doc-1.25, Lasem, and libspectre

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/goffice010

Installation of GOffice

Install GOffice by running the following commands:

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

If you wish to run the tests, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Libraries: libgoffice-0.10.so
Installed Directories: /usr/include/libgoffice-0.10, /usr/{lib,share}/goffice, and /usr/share/gtk-doc/html/goffice-0.10

Short Descriptions

libgoffice-0.10.so

contains API functions to provide support for document centric objects and utilities.

Last updated on 2017-02-21 13:10:36 -0800

GTK+-2.24.31

Introduction to GTK+ 2

The GTK+ 2 package contains libraries used for creating graphical user interfaces for applications.

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

Package Information

GTK+ 2 Dependencies

Required

ATK-2.22.0, gdk-pixbuf-2.36.5 and Pango-1.40.3

Recommended
Optional

Cups-2.2.2, DocBook-utils-0.6.14, gobject-introspection-1.50.0 and GTK-Doc-1.25

Note

If gobject-introspection-1.50.0 was installed after ATK-2.22.0, gdk-pixbuf-2.36.5, and/or Pango-1.40.3, those packages will have to be rebuilt before this package can be built.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtk+2

Installation of GTK+ 2

Install GTK+ 2 by running the following commands:

sed -e 's#l \(gtk-.*\).sgml#& -o \1#' \
    -i docs/{faq,tutorial}/Makefile.in      &&

./configure --prefix=/usr --sysconfdir=/etc &&

make

To test the results, issue: make check. Note that you must run the tests from a session with X Window Display capability (i.e., not a text-based terminal/console) as the tests attempt to open an X window, and the tests can take an excessively long time. Using an X Window, the tests should take less than 0.3 SBU.

Now, as the root user:

make install

Note

If you installed the package on to your system using a “DESTDIR” method, an important file was not installed and must be copied and/or generated. Generate it using the following command as the root user:

gtk-query-immodules-2.0 --update-cache

Command Explanations

sed -i 's#l \(gtk-.*\).sgml#& -o \1#' docs/{faq,tutorial}/Makefile.in: If you have DocBook-utils-0.6.14 installed (specifically, if configure finds db2html) then it will try to use it to rebuild some of its HTML documentation and fail due to bugs in some of the Makefiles. This sed fixes the Makefiles.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Configuring GTK+ 2

Config Files

~/.gtkrc-2.0, /etc/gtk-2.0/gtkrc, and /usr/share/gtk-2.0/gtkrc

Configuration Information

GTK+ 2 themes change the way a GTK+ 2 application looks. A GTK+ 2 icon theme can be used to change the icons that appear on the application's toolbar. If you have installed a GTK+ 2 theme (such as gnome-themes or GTK Engines-2.20.2), a GTK+ icon theme (such as adwaita-icon-theme-3.22.0) you can set your preferences in ~/.gtkrc-2.0:

cat > ~/.gtkrc-2.0 << "EOF"
include "/usr/share/themes/Glider/gtk-2.0/gtkrc"
gtk-icon-theme-name = "hicolor"
EOF

There are many more themes available at Gnome-Look.org and other places.

Once you've settled on themes you like, you can (as the root user) make them the default system wide:

cat > /etc/gtk-2.0/gtkrc << "EOF"
include "/usr/share/themes/Clearlooks/gtk-2.0/gtkrc"
gtk-icon-theme-name = "elementary"
EOF

LXAppearance-0.6.3 is a GTK+ 2 application that can help you choose the themes you like.

Contents

Installed Programs: gtk-builder-convert, gtk-demo, gtk-query-immodules-2.0, and gtk-update-icon-cache
Installed Libraries: libgailutil.so, libgdk-x11-2.0.so, and libgtk-x11-2.0.so
Installed Directories: /etc/gtk-2.0, /usr/include/{gail-1.0,gtk-2.0,gtk-unix-print-2.0}, /usr/lib/gtk-2.0, /usr/share/doc/gtk+-2.24.31, /usr/share/gtk-2.0, /usr/share/gtk-doc/html/{gail-libgail-util,gdk2,gtk2}, and /usr/share/themes/{Default,Emacs,Raleigh}

Short Descriptions

gtk-builder-convert

converts glade files into XML files which can be loaded with GtkBuilder.

gtk-demo

demonstrates GTK+ 2 functionality and provides code for the examples.

gtk-query-immodules-2.0

collects information about loadable input method modules for GTK+ 2 and writes it to standard output.

gtk-update-icon-cache

creates mmap()able cache files for icon themes. Starting with gtk+-2.24.24, add the flag “--include-image-data” to this command, if you wish previous behavior, with image data in the cache.

libgdk-x11-2.0.so

contains functions that act as a wrapper around the low-level drawing and windowing functions provided by the underlying graphics system.

libgtk-x11-2.0.so

contains functions that provide an API to implement graphical user interfaces.

Last updated on 2017-02-16 16:10:58 -0800

GTK+-3.22.8

Introduction to GTK+ 3

The GTK+ 3 package contains libraries used for creating graphical user interfaces for applications.

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

Package Information

GTK+ 3 Dependencies

Required

at-spi2-atk-2.22.0, gdk-pixbuf-2.36.5, libepoxy-1.4.0, and Pango-1.40.3

Recommended
Recommended (Required if building GNOME)
Optional

Colord-1.2.12, Cups-2.2.2, DocBook-utils-0.6.14, GTK-Doc-1.25, JSON-GLib-1.2.2, libxkbcommon-0.7.1, PyAtSpi2-2.20.3 (for tests), Wayland-1.12.0, wayland-protocols-1.7, and rest

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtk3

Installation of GTK+ 3

Note

GTK+ 3 will overwrite gtk-update-icon-cache from GTK+-2.24.31 if it is installed. There is nothing wrong about that assuming that both programs provide same functionality. If you wish to keep one from GTK+ 2 you can add --enable-gtk2-dependency to the configure command.

Install GTK+ 3 by running the following commands:

./configure --prefix=/usr             \
            --sysconfdir=/etc         \
            --enable-broadway-backend \
            --enable-x11-backend      \
            --disable-wayland-backend &&
make

Some tests fail if /usr/share/glib-2.0/schemas/gschemas.compiled is not found. If you wish to run the test suite, create (or update) the file using the following command as the root user: glib-compile-schemas /usr/share/glib-2.0/schemas.

To test the results you need a graphical session, then issue make -k check.

Now, as the root user:

make install

Note

If you installed the package on to your system using a “DESTDIR” method, an important file was not installed and must be copied and/or generated. Generate it using the following command as the root user:

gtk-query-immodules-3.0 --update-cache

Note

If you installed the package to your system using a “DESTDIR” method, /usr/share/glib-2.0/schemas/gschemas.compiled was not updated/created. Create (or update) the file using the following command as the root user:

glib-compile-schemas /usr/share/glib-2.0/schemas

Command Explanations

--enable-broadway-backend: This switch enables the HTML5 GTK backend.

--enable-x11-backend: This switch enables the X11 GDK backend.

--disable-wayland-backend: This switch disables the Wayland GDK backend. Replace with --enable-wayland-backend if you have installed Wayland-1.12.0 and wayland-protocols-1.7 and you wish to build GNOME with Wayland support.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Configuring GTK+ 3

Config Files

~/.config/gtk-3.0/settings.ini and /etc/gtk-3.0/settings.ini

Configuration Information

GTK+ 3 themes change the way a GTK+ 3 application looks. An icon theme can be used to change the icons that appear on the application's toolbar. If you have installed a GTK+ 3 theme (e.g. gnome-themes-standard-3.22.2), an icon theme (such as oxygen-icons5-5.31.0) and/or a font (such as DejaVu fonts), you can set your prefences in ~/.config/gtk-3.0/settings.ini or the default system wide configuration file (as the root user), in /etc/gtk-3.0/settings.ini. For the local user an example is:

mkdir -vp ~/.config/gtk-3.0
cat > ~/.config/gtk-3.0/settings.ini << "EOF"
[Settings]
gtk-theme-name = Adwaita
gtk-icon-theme-name = oxygen
gtk-font-name = DejaVu Sans 12
gtk-cursor-theme-size = 18
gtk-toolbar-style = GTK_TOOLBAR_BOTH_HORIZ
gtk-xft-antialias = 1
gtk-xft-hinting = 1
gtk-xft-hintstyle = hintslight
gtk-xft-rgba = rgb
gtk-cursor-theme-name = Adwaita
EOF

There are many settings keys, some with default values. You can find them at Settings: GTK+ 3 Reference Manual. There are many more themes available at http://gnome-look.org/ and other places.

Contents

Installed Programs: broadwayd, gtk3-demo, gtk3-demo-application, gtk3-icon-browser, gtk3-widget-factory, gtk-builder-tool, gtk-encode-symbolic-svg, gtk-launch, gtk-query-immodules-3.0, gtk-query-settings, and gtk-update-icon-cache
Installed Libraries: libgailutil-3.so, libgdk-3.so, and libgtk-3.so
Installed Directories: /etc/gtk-3.0, /usr/include/{gail,gtk}-3.0, /usr/{lib,share}/gtk-3.0, /usr/share/gtk-doc/html/{gail-libgail-util,gdk,gtk}3, and /usr/share/themes/{Default,Emacs}/gtk-3.0

Short Descriptions

broadwayd

provides support for displaying GTK+ 3 applications in a web browser, using HTML5 and web sockets.

gtk3-demo

is a simple program that demonstrates some of the tasks that can be done with GTK+ 3

gtk3-demo-application

is a simple GTK+ 3 application.

gtk3-icon-browser

is a utility to explore the icons in the current icon theme. It shows icons in various sizes, their symbolic variants where available, as well as a description of the icon and its context.

gtk3-widget-factory

is a program to view GTK+ 3 themes and widgets.

gtk-builder-tool

can perform various operations on GtkBuilder .ui files.

gtk-encode-symbolic-svg

converts symbolic svg icons into specially prepared png files. GTK+ 3 can load and recolor these pngs, just like original svgs, but loading them is much faster.

gtk-launch

launches an application using the given name. The name should match the application desktop file name, as residing in /usr/share/applications, with or without the '.desktop' suffix.

gtk-query-immodules-3.0

collects information about loadable input method modules for GTK+ 3 and writes it to the default cache file location, or to standard output.

gtk-query-settings

provides a complete listing of all settings related to GTK+ 3

gtk-update-icon-cache

is an icon theme caching utility that creates mmap()able cache files for icon themes.

libgailutil-3.so

contains functions that implement the accessibility interfaces defined by the GNOME Accessibility Toolkit.

libgdk-3.so

contains functions that act as a wrapper around the low-level drawing and windowing functions provided by the underlying graphics system.

libgtk-3.so

contains functions that provide an API to implement graphical user interfaces.

Last updated on 2017-02-19 04:04:43 -0800

GTK Engines-2.20.2

Introduction to GTK Engines

The GTK Engines package contains eight themes/engines and two additional engines for GTK2.

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

Package Information

GTK Engines Dependencies

Required

GTK+-2.24.31

Optional

Lua-5.3.4 and Which-2.21 (required for test suite)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtk-engines

Installation of GTK Engines

Install GTK Engines by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-lua --with-system-lua: Use these switches if you installed Lua and want to build Lua theming engine.

Contents

Installed Programs: None
Installed Libraries: libclearlooks.so, libcrux-engine.so, libglide.so, libhcengine.so, libindustrial.so, libmist.so, libredmond95.so and libthinice.so (GTK-2 engines libraries)
Installed Directories: /usr/lib/gtk-2.0/2.10.0/engines, /usr/share/gtk-engines, /usr/share/themes/Clearlooks, /usr/share/themes/Crux, /usr/share/themes/Industrial, /usr/share/themes/Mist, /usr/share/themes/Redmond and /usr/share/themes/ThinIce
Installed Themes: Clearlooks, Crux, Industrial, Mist, Redmond and ThinIce

Short Descriptions

engine libraries

are manager systems for specific themes.

Last updated on 2017-02-16 19:24:14 -0800

Gtkmm-2.24.5

Introduction to Gtkmm

The Gtkmm package provides a C++ interface to GTK+ 2. It can be installed alongside Gtkmm-3.22.0 (the GTK+ 3 version) with no namespace conflicts.

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

Package Information

Gtkmm Dependencies

Required

Atkmm-2.24.2, GTK+-2.24.31 and Pangomm-2.40.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtkmm2

Installation of Gtkmm

First, fix the documents directory name:

sed -e '/^libdocdir =/ s/$(book_name)/gtkmm-2.24.5/' \
    -i docs/Makefile.in

Install Gtkmm by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: libgdkmm-2.4.so and libgtkmm-2.4.so
Installed Directories: /usr/include/gdkmm-2.4, /usr/include/gtkmm-2.4, /usr/lib/gdkmm-2.4, /usr/lib/gtkmm-2.4, and /usr/share/{devhelp/books/gtkmm-2.4,doc/gtkmm-2.24.5}

Short Descriptions

libgdkmm-2.4.so

contains the GDK API classes.

libgtkmm-2.4.so

contains the GTK+ API classes.

Last updated on 2017-02-16 19:24:14 -0800

Gtkmm-3.22.0

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-8.0 platform.

Package Information

Gtkmm Dependencies

Required

Atkmm-2.24.2, GTK+-3.22.8, and Pangomm-2.40.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtkmm3

Installation of Gtkmm

First, fix the documentation directory name:

sed -e '/^libdocdir =/ s/$(book_name)/gtkmm-3.22.0/' \
    -i docs/Makefile.in

Install Gtkmm by running the following commands:

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

To test the results, issue: make check. Note that you must be in a graphical environment, as the tests try to open some windows.

Now, as the root user:

make install

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 /usr/share/{devhelp/books/gtkmm-3.0,doc/gtkmm-3.22.0}

Short Descriptions

libgdkmm-3.0.so

contains the GDK API classes.

libgtkmm-3.0.so

contains the GTK+ 3 API classes.

Last updated on 2017-02-16 19:24:14 -0800

gtksourceview-3.22.2

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-8.0 platform.

Package Information

GtkSourceView Dependencies

Required

GTK+-3.22.8

Recommended
Optional

Vala-0.34.4, Valgrind-3.12.0, GTK-Doc-1.25, itstool-2.0.2, fop-2.1 (or dblatex), and Glade

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtksourceview

Installation of GtkSourceView

Install GtkSourceView by running the following commands:

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

To test the results, issue make check. The tests need to be run in a graphical environment.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libgtksourceview-3.0.so
Installed Directories: /usr/{include,share,share/gtk-doc/html}/gtksourceview-3.0

Short Descriptions

libgtksourceview-3.0.so

contains function extensions for the GtkTextView widget.

Last updated on 2017-02-19 16:31:30 -0800

Imlib2-1.4.9

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-8.0 platform.

Package Information

Imlib2 Dependencies

Required

Xorg Libraries

Optional

libpng-1.6.28, libjpeg-turbo-1.5.1, LibTIFF-4.0.7, giflib-5.1.4, and libid3tag

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/imlib2

Installation of Imlib2

Install Imlib2 by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/imlib2-1.4.9 &&
install -v -m644    doc/{*.gif,index.html} \
                    /usr/share/doc/imlib2-1.4.9

Command Explanations

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

Contents

Installed Programs: imlib2_bumpmap, imlib2_colorspace, imlib2-config, imlib2_conv, imlib2_grab, imlib2_poly, imlib2_show, imlib2_test, and imlib2_view
Installed Libraries: libImlib2.so and various filters and image loader modules.
Installed Directories: /usr/lib/imlib2, /usr/share/doc/imlib2-1.4.9, and /usr/share/imlib2

Short Descriptions

imlib2_bumpmap

is to test the imlib2 bumpmap function.

imlib2_colorspace

is to test the imlib2 colorspace function.

imlib2-config

is a script used to obtain imlib2 building informations.

imlib2_poly

is to test the imlib2 poly function.

imlib2_conv

converts images between formats.

imlib2_grab

take screenshots.

imlib2_show

is an imlib2 program test.

imlib2_test

is an imlib2 program test.

imlib2_view

diplays images files.

libImlib2.so

provides the functions for programs to deal with various image data formats.

Last updated on 2017-02-17 12:01:55 -0800

keybinder2-0.3.0

Introduction to keybinder2

The keybinder2 package contains a utility library registering global X keyboard shortcuts.

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

Package Information

keybinder2 Dependencies

Required

GTK+-2.24.31

Recommended
Optional

GTK-Doc-1.25 and Lua-5.3.4 (currently broken, because older lua version is required)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/keybinder2

Installation of keybinder2

Install keybinder2 by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-lua: Use this switch to disable Lua-5.3.4 bindings (currently broken, because older lua version is required).

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libkeybinder.so and /usr/lib/python2.7/site-packages/keybinder/_keybinder.so
Installed Directories: /usr/lib/python2.7/site-packages/keybinder and /usr/share/gtk-doc/html/keybinder

Short Descriptions

libkeybinder.so

is the library that registers global X keyboard shortcuts.

Last updated on 2017-02-20 16:33:44 -0800

libdrm-2.4.75

Introduction to libdrm

libdrm provides a user space library for accessing the DRM, direct rendering manager, on operating systems that support the ioctl interface. libdrm is a low-level library, typically used by graphics drivers such as the Mesa DRI drivers, the X drivers, libva and similar projects.

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

Package Information

libdrm Dependencies

Recommended
Optional

Cairo-1.14.8 (for tests), docbook-xml-4.5, docbook-xsl-1.79.1 and libxslt-1.1.29 (to build manual pages), Valgrind-3.12.0, and CUNIT (for AMDGPU tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdrm

Installation of libdrm

Install libdrm by running the following commands:

sed -i "/pthread-stubs/d" configure.ac  &&
autoreconf -fiv                         &&

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

To check the results, issue make check. Tests may hang for unknown reasons. If nouveau threaded test hangs, you can disable it with sed -i 's/^TESTS/#&/' tests/nouveau/Makefile.in.

Now, as the root user:

make install

Command Explanations

sed -e "/pthread-stubs/d" -i configure.ac: This sed removes a dependency on the libpthread-stubs package which is useless on Linux.

--enable-udev: This parameter enables support for using Udev instead of mknod.

Contents

Installed Programs: None
Installed Libraries: libdrm_amdgpu.so, libdrm_intel.so, libdrm_nouveau.so, libdrm_radeon.so, libdrm.so, and libkms.so
Installed Directories: /usr/include/lib{drm,kms}

Short Descriptions

libdrm_amdgpu.so

contains the AMDGPU specific Direct Rendering Manager functions.

libdrm_intel.so

contains the Intel specific Direct Rendering Manager functions.

libdrm_nouveau.so

contains the open source nVidia (Nouveau) specific Direct Rendering Manager functions.

libdrm_radeon.so

contains the AMD Radeon specific Direct Rendering Manager functions.

libdrm.so

contains the Direct Rendering Manager API functions.

libkms.so

contains API functions for kernel mode setting abstraction.

Last updated on 2017-02-15 14:01:44 -0800

libepoxy-1.4.0

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-8.0 platform.

Package Information

libepoxy Dependencies

Required

Mesa-13.0.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libepoxy

Installation of libepoxy

Install libepoxy 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: libepoxy.so
Installed Directories: /usr/include/epoxy

Short Descriptions

libepoxy.so

contains API functions for handling OpenGL function pointer management.

Last updated on 2017-02-15 14:01:44 -0800

libglade-2.6.4

Introduction to libglade

The libglade package contains libglade libraries. These are useful for loading Glade interface files in a program at runtime.

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

Package Information

libglade Dependencies

Required

libxml2-2.9.4 and GTK+-2.24.31

Optional

Python-2.7.13 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libglade

Installation of libglade

Install libglade by running the following commands:

sed -i '/DG_DISABLE_DEPRECATED/d' glade/Makefile.in &&
./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check. One of the tests, test-convert, is known to fail.

Now, as the root user:

make install

Command Explanations

sed -i '/DG_DISABLE_DEPRECATED/d': Some of the glib functions that libglade uses were declared deprecated in glib-2.30. This sed removes the G_DISABLE_DEPRECATED CFLAG.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: libglade-convert (requires python)
Installed Library: libglade-2.0.so
Installed Directories: /usr/{include/libglade-2.0/glade,share/{gtk-doc/html/libglade, xml/libglade}}

Short Descriptions

libglade-convert

is used to convert old Glade interface files to Glade-2.0 standards.

libglade-2.0.so

contains the functions necessary to load Glade interface files.

Last updated on 2017-02-16 19:05:12 -0800

libnotify-0.7.7

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-8.0 platform.

Package Information

libnotify Dependencies

Required

GTK+-3.22.8

Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

GTK-Doc-1.25

Required (runtime)

notification-daemon-3.20.0 or xfce4-notifyd-0.2.4

Note

GNOME Shell and KDE KWin provide their own notification daemons.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libnotify

Installation of libnotify

Install libnotify 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 Program: notify-send
Installed Library: libnotify.so
Installed Directories: /usr/include/libnotify and /usr/share/gtk-doc/html/libnotify

Short Descriptions

notify-send

is a command used to send notifications.

libnotify.so

contains the libnotify API functions.

Last updated on 2017-02-17 12:01:55 -0800

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-8.0 platform.

Package Information

libxklavier Dependencies

Required

GLib-2.50.3, ISO Codes-3.74, libxml2-2.9.4 and Xorg Libraries

Recommended
Optional

GTK-Doc-1.25 and Vala-0.34.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxklavier

Installation of libxklavier

Install libxklavier by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libxklavier.so
Installed Directories: /usr/include/libxklavier and /usr/share/gtk-doc/html/libxklavier

Short Descriptions

libxklavier.so

contains XKB utility functions.

Last updated on 2017-02-17 12:01:55 -0800

Pango-1.40.3

Introduction to Pango

Pango is a library for laying out and rendering of 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-8.0 platform.

Package Information

Pango Dependencies

Required

Fontconfig-2.12.1 (must be built with FreeType-2.7.1 using HarfBuzz-1.4.2) and GLib-2.50.3

Recommended
Optional (Required if building GNOME)

gobject-introspection-1.50.0

Optional

Cantarell fonts (for tests), GTK-Doc-1.25, and libthai

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pango

Installation of Pango

Install Pango 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.

Configuring Pango

Config Files

/etc/pango/pangorc, ~/.pangorc and the file specified in the environment variable PANGO_RC_FILE

Contents

Installed Programs: pango-view
Installed Libraries: libpango-1.0.so, libpangocairo-1.0.so, libpangoft2-1.0.so, and libpangoxft-1.0.so
Installed Directories: /usr/include/pango-1.0 and /usr/share/gtk-doc/html/pango

Short Descriptions

pango-view

renders a given file through Pango for viewing purposes.

libpango-1.0.so

contains low level layout rendering routines, a high level driver for laying out entire blocks of text, and routines to assist in editing internationalized text.

Last updated on 2017-02-16 16:10:58 -0800

Pangomm-2.40.1

Introduction to Pangomm

The Pangomm package provides a C++ interface to Pango.

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

Package Information

Pangomm Dependencies

Required

Cairomm-1.12.2, GLibmm-2.50.0 and Pango-1.40.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pangomm

Installation of Pangomm

First, fix the documentation directory name:

sed -e '/^libdocdir =/ s/$(book_name)/pangomm-2.40.1/' \
    -i docs/Makefile.in

Install Pangomm by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: 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.40.1}

Short Descriptions

libpangomm-1.4.so

contains the Pango API classes.

Last updated on 2017-02-16 19:24:14 -0800

Qt-5.8.0

Introduction to Qt5

Qt5 is a cross-platform application framework that is widely used for developing application software with a graphical user interface (GUI) (in which cases Qt5 is classified as a widget toolkit), and also used for developing non-GUI programs such as command-line tools and consoles for servers. One of the major users of Qt is KDE Frameworks 5 (KF5).

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

Package Information

Qt5 Dependencies

Required

Python-2.7.13 and Xorg Libraries

Recommended
Optional

BlueZ-5.43 (runtime, used by QtConnectivity module), libinput-1.6.1, MariaDB-10.1.21 or MySQL, pciutils-3.5.2 (required for QtWebEngine), PostgreSQL-9.6.2, PulseAudio-10.0, unixODBC-2.3.4, Firebird , and IBus

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qt5

Setting the installation prefix

Installing in /opt/qt5

The BLFS editors recommend installing Qt5 in a directory other than /usr, ie /opt/qt5. To do this, set the following environment variable:

export QT5PREFIX=/opt/qt5

Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why /opt/qt5 is used as installation prefix instead of /opt/qt-5.8.0. To create a versioned Qt5 directory, you may rename the directory and create a symlink:

mkdir /opt/qt-5.8.0
ln -sfnv qt-5.8.0 /opt/qt5

Later on, you may want to install other versions of Qt5. To do that, just remove the symlink and use /opt/qt5 as the prefix again. Which version of Qt5 you use depends only on where the symlink points.

Installation of Qt5

Warning

If Qt5 is being reinstalled into the same directory as an existing instance, run the commands done by root, such as make install, from a console or non-Qt5 based window manager. It overwrites Qt5 libraries that should not be in use during the install process.

Caution

If you did not install some of the recommended dependencies, examine ./configure --help output to check how to disable them or use internal versions bundled in the source tarball.

Note

The build time and space required for the full Qt5 is quite long. The instructions below do not build the tutorials and examples. Removing the -nomake line will create a complete build.

Note

The BLFS editors do not recommend installing Qt5 into the /usr hierarchy because it becomes difficult to find components and to update to a new version. If you do want to install Qt5 in /usr, the directories need to be specified explicitly. In this case, set QT5PREFIX=/usr and add the following to the configure arguments below:

-archdatadir    /usr/lib/qt5                \
-bindir         /usr/bin/qt5                \
-plugindir      /usr/lib/qt5/plugins        \
-importdir      /usr/lib/qt5/imports        \
-headerdir      /usr/include/qt5            \
-datadir        /usr/share/qt5              \
-docdir         /usr/share/doc/qt5          \
-translationdir /usr/share/qt5/translations \
-examplesdir    /usr/share/doc/qt5/examples \

Install Qt5 by running the following commands:

./configure -prefix         $QT5PREFIX \
            -sysconfdir     /etc/xdg   \
            -confirm-license           \
            -opensource                \
            -dbus-linked               \
            -openssl-linked            \
            -system-harfbuzz           \
            -system-sqlite             \
            -nomake examples           \
            -no-rpath                  \
            -skip qtwebengine          &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Remove references to the build directory from the installed .pc files by running the following command as the root user:

find $QT5PREFIX/lib/pkgconfig -name "*.pc" -exec perl -pi -e "s, -L$PWD/?\S+,,g" {} \;

Remove references to the build directory from installed library dependency (prl) and profile include (pri) files by running the following commands as the root user:

find $QT5PREFIX/ -name qt_lib_bootstrap_private.pri \
   -exec sed -i -e "s:$PWD/qtbase:/$QT5PREFIX/lib/:g" {} \; &&

find $QT5PREFIX/ -name \*.prl \
   -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Install images and create the menu entries for installed applications. The QT5BINDIR variable is used here to point to the directory for the executable programs. If you have changed the bindir above, QT5BINDIR will need to be adjusted below. Be sure that the QT5BINDIR variable is defined in root's environment and as the root user:

QT5BINDIR=$QT5PREFIX/bin

install -v -dm755 /usr/share/pixmaps/                  &&

install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \
                  /usr/share/pixmaps/assistant-qt5.png &&

install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \
                  /usr/share/pixmaps/designer-qt5.png  &&

install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \
                  /usr/share/pixmaps/linguist-qt5.png  &&

install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \
                  /usr/share/pixmaps/qdbusviewer-qt5.png &&

install -dm755 /usr/share/applications &&

cat > /usr/share/applications/assistant-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Assistant
Comment=Shows Qt5 documentation and examples
Exec=$QT5BINDIR/assistant
Icon=assistant-qt5.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;Documentation;
EOF

cat > /usr/share/applications/designer-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Designer
GenericName=Interface Designer
Comment=Design GUIs for Qt5 applications
Exec=$QT5BINDIR/designer
Icon=designer-qt5.png
MimeType=application/x-designer;
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;
EOF

cat > /usr/share/applications/linguist-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 Linguist
Comment=Add translations to Qt5 applications
Exec=$QT5BINDIR/linguist
Icon=linguist-qt5.png
MimeType=text/vnd.trolltech.linguist;application/x-linguist;
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;
EOF

cat > /usr/share/applications/qdbusviewer-qt5.desktop << EOF
[Desktop Entry]
Name=Qt5 QDbusViewer
GenericName=D-Bus Debugger
Comment=Debug D-Bus applications
Exec=$QT5BINDIR/qdbusviewer
Icon=qdbusviewer-qt5.png
Terminal=false
Encoding=UTF-8
Type=Application
Categories=Qt;Development;Debugger;
EOF

Some packages such as VLC-2.2.4 look for certain executables with a -qt5 suffix. Run the following command as the root user to create the necessary symlinks:

for file in moc uic rcc qmake lconvert lrelease lupdate; do
  ln -sfrvn $QT5BINDIR/$file /usr/bin/$file-qt5
done

Command Explanations

-confirm-license: Accept license without prompting user during configuration.

-opensource: Install the opensource version of Qt.

-nomake examples: This switch disables building of the example programs included in the source tarball. Remove it if you want to build them.

-system-sqlite: This switch enables use of the system version of SQLite.

-dbus-linked -openssl-linked: These switches enable explicit linking of the D-Bus and OpenSSL libraries into Qt5 libraries instead of dlopen()-ing them.

-skip qtwebengine: This switch disables building the Qt Web Engine. It is only used by QupZilla-2.1.1 at this writing. Note that building the Qt Web Engine substantially increases the build time and both the build and installed size.

-system-harfbuzz: This switch enables use of the system version of Harfbuzz which fixes some font rendering issues in Qt5 applications but doesn't have all the features that the included one has.

Configuring Qt5

Configuration Information

If you installed Qt5 in /usr, create an environment variable needed by certain packages. As the root user:

cat > /etc/profile.d/qt5.sh << "EOF"
# Begin /etc/profile.d/qt5.sh

QT5DIR=/usr
export QT5DIR
pathappend $QT5DIR/bin/qt5

# End /etc/profile.d/qt5.sh
EOF

If you installed Qt5 in a location other than /usr, you need to update the following configuration files so that Qt5 is correctly found by other packages and system processes.

As the root user, update the /etc/ld.so.conf file and the dynamic linker's run-time cache file:

cat >> /etc/ld.so.conf << EOF
# Begin Qt addition

/opt/qt5/lib

# End Qt addition
EOF

ldconfig

As the root user, create the /etc/profile.d/qt5.sh file:

cat > /etc/profile.d/qt5.sh << "EOF"
# Begin /etc/profile.d/qt5.sh

QT5DIR=/opt/qt5

pathappend $QT5DIR/bin           PATH
pathappend $QT5DIR/lib/pkgconfig PKG_CONFIG_PATH

export QT5DIR

# End /etc/profile.d/qt5.sh
EOF

Contents

Installed Programs: assistant, designer, lconvert, linguist, lrelease, lupdate, moc, pixeltool, qcollectiongenerator, qdbuscpp2xml, qdbus, qdbusviewer, qdbusxml2cpp, qdoc, qhelpconverter, qhelpgenerator, qlalr, qmake, qml1plugindump, qmlbundle, qmleasing, qmlimportscanner, qmllint, qmlmin, qmlplugindump, qmlprofiler, qml, qmlscene, qmltestrunner, qmlviewer, qtdiag, qtpaths, rcc, syncqt.pl, uic, xmlpatterns, and xmlpatternsvalidator
Installed Libraries: libEnginio.so, libqgsttools_p.so, libQt5Bluetooth.so, libQt5Bootstrap.a, libQt5CLucene.so, libQt5Concurrent.so, libQt5Core.so, libQt5DBus.so, libQt5Declarative.so, libQt5DesignerComponents.so, libQt5Designer.so, libQt5Gui.so, libQt5Help.so, libQt5Location.so, libQt5MultimediaQuick_p.so, libQt5Multimedia.so, libQt5MultimediaWidgets.so, libQt5Network.so, libQt5Nfc.so, libQt5OpenGLExtensions.a, libQt5OpenGL.so, libQt5PlatformSupport.a, libQt5Positioning.so, libQt5PrintSupport.so, libQt5QmlDevTools.a, libQt5Qml.so, libQt5QuickParticles.so, libQt5Quick.so, libQt5QuickTest.so, libQt5QuickWidgets.so, libQt5Script.so, libQt5ScriptTools.so, libQt5Sensors.so, libQt5SerialPort.so, libQt5Sql.so, libQt5Svg.so, libQt5Test.so, libQt5UiTools.a, libQt5WebChannel.so, libQt5WebEngineCore.so, libQt5WebEngine.so, libQt5WebEngineWidgets.so, libQt5WebKit.so, libQt5WebKitWidgets.so, libQt5WebSockets.so, libQt5Widgets.so, libQt5X11Extras.so, libQt5XmlPatterns.so, libQt5Xml.so, and several plugins under /opt/qt5/{imports,plugins,qml}
Installed Directories: /usr/include/qt5, /usr/lib/qt5, /usr/share/doc/qt5, and /usr/share/qt5 OR /opt/qt5 and /opt/qt-5.8.0

Short Descriptions

assistant

is a tool for presenting on-line documentation.

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 Qt5's Linguist tool chain. It can be used as a standalone tool to convert and filter translation data files.

linguist

provides support for translating applications into local languages.

lrelease

is a simple command line tool. It reads a Qt project file and produces message files used by the application.

lupdate

reads a Qt project file, finds the translatable strings in the specified source, header and Qt Designer interface files, and produces or updates the translation files listed in the project file.

moc

generates Qt meta object support code.

pixeltool

is a desktop magnifier and as you move your mouse around the screen it will show the magnified contents in its window.

qcollectiongenerator

is a tool used to create a Qt Help Collection.

qdbuscpp2xml

takes a C++ source file and generates a D-Bus XML definition of the interface.

qdbus

lists available services, object paths, methods, signals, and properties of objects on a bus.

qdbusviewer

is a graphical D-Bus browser.

qdbusxml2cpp

is a tool that can be used to parse interface descriptions and produce static code representing those interfaces,

qdoc

is a tool used by Qt Developers to generate documentation for software projects.

qhelpconverter

is a tool used to convert files to Qt help format.

qhelpgenerator

is a tool used to generate a Qt compressed help file.

qlalr

is a tool used to generate code from grammar specifications.

qmake

uses information stored in project files to determine what should go in the makefiles it generates.

qml1plugindump

is a symlink to qtchooser.

qmlbundle

is a tool used to manage QML bundle.

qmleasing

is a tool used to define the easing curves using an interactive curve editor.

qmlimportscanner

is a tool used to import QML files from a directory.

qmllint

is a syntax checker for QML files.

qmlmin

removes comments and layout characters from a QML file.

qmlplugindump

is a tool to create a qmltypes file.

qmlprofiler

is a tool used to analyze QML applications.

qmlscene

is a utility that loads and displays QML documents even before the application is complete.

qmltestrunner

is a tool used to make tests.

qmlviewer

is a tool for loading QML documents that makes it easy to quickly develop and debug QML applications.

qtdiag

is a tool for reporting diagnostic information about Qt and its environment.

qtpaths

is a tool to query Qt path information.

rcc

is a resource compiler used in conjunction with designer.

syncqt.pl

is a script to create the forwarding headers in the include directories. It is an internal development tool.

uic

is a Qt user interface compiler.

xmlpatterns

provides support for XPath, XQuery, XSLT, and XML Schema validation.

xmlpatternsvalidator

is a tool used to validate XML documents.

Last updated on 2017-02-17 19:16:56 -0800

QtWebkit-5.8.0

Introduction to QtWebkit

Qtwebkit is a Qt based web browser engine.

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

Package Information

Qtwebkit Dependencies

Required

ICU-58.2, libjpeg-turbo-1.5.1, libpng-1.6.28, libwebp-0.6.0, libxslt-1.1.29, Qt-5.8.0, Ruby-2.4.0, and SQLite-3.17.0

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qtwebkit

Installation of Qtwebkit

Install Qtwebkit by running the following commands:

SAVEPATH=$PATH             &&
export PATH=$PWD/bin:$PATH &&

mkdir -p build        &&
cd       build        &&

qmake ../WebKit.pro   &&
make                  &&

export PATH=$SAVEPATH &&
unset SAVEPATH 

This package does not come with a test suite.

Now, as the root user:

make install

Note

The installation is automatically made to the $QT5DIR directory tree.

Remove references to the build directory from the installed .pc files by running the following command as the root user:

find $QT5DIR/lib/pkgconfig -name "*.pc" -exec perl -pi -e "s, -L$PWD/?\S+,,g" {} \;

Remove references to the build directory from installed library dependency (prl) and profile include (pri) files by running the following commands as the root user:

find $QT5DIR/ -name qt_lib_bootstrap_private.pri \
   -exec sed -i -e "s:$PWD/qtbase:/$QT5DIR/lib/:g" {} \; &&

find $QT5DIR/ -name \*.prl \
   -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;

Command Explanations

export PATH=$PWD/bin:$PATH: sets a temporary path needed to complete the build and install process.

qmake: is a Qt tool that automates the generation of Makefiles.

Contents

Installed Programs: None
Installed Libraries: libQt5WebKit.so and libQt5WebKitWidgets.so
Installed Directories: $QT5PREFIX/qml/QtWebKit, $QT5PREFIX/lib/cmake/Qt5WebKit{,Widgets}, $QT5PREFIX/include/QtWebKit{,Widgets), and $QT5PREFIX/plugins/webkit

Last updated on 2017-02-20 12:59:39 -0800

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-8.0 platform.

Package Information

startup-notification Dependencies

Required

Xorg Libraries and xcb-util-0.4.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/startup-notification

Installation of startup-notification

Install startup-notification by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m644 -D doc/startup-notification.txt \
    /usr/share/doc/startup-notification-0.12/startup-notification.txt

Command Explanations

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

Contents

Installed Programs: None
Installed Library: libstartup-notification-1.so
Installed Directories: /usr/include/startup-notification-1.0 and /usr/share/doc/startup-notification-0.12

Short Descriptions

libstartup-notification-1.so

provides the functions to assist applications in communicating with the cursor system to provide feedback to the user that the application is loading.

Last updated on 2017-02-16 19:05:12 -0800

WebKitGTK+-2.14.5

Introduction to WebKitGTK+

The WebKitGTK+ package is a port of the portable web rendering engine WebKit to the GTK+ 3 and GTK+ 2 platforms.

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

Package Information

  • Download (HTTP): http://webkitgtk.org/releases/webkitgtk-2.14.5.tar.xz

  • Download MD5 sum: 7fe3cb2699e64f969b285823c5ae2516

  • Download size: 13 MB

  • Estimated disk space required: 1.1 GB (115 MB installed)

  • Estimated build time: 38 SBU (using parallelism=4, 131 SBUs using one core)

WebKitGTK+ Dependencies

Required

Cairo-1.14.8, CMake-3.7.2, enchant-1.6.0, gst-plugins-base-1.10.3, GTK+-2.24.31, GTK+-3.22.8, ICU-58.2, libgudev-231, libsecret-0.18.5, libsoup-2.56.0, libwebp-0.6.0, Mesa-13.0.4, Ruby-2.4.0, SQLite-3.17.0 and Which-2.21

Recommended
Optional

GTK-Doc-1.25, HarfBuzz-1.4.2, libnotify-0.7.7, LLVM-3.9.1, Wayland-1.12.0, Hyphen, GeoClue2, and MathML

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/webkitgtk

Installation of WebKitGTK+

Installation of WebKitGTK+

Install WebKitGTK+ by running the following commands:

mkdir -vp build &&
cd        build &&

cmake -DCMAKE_BUILD_TYPE=Release  \
      -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_SKIP_RPATH=ON       \
      -DPORT=GTK                  \
      -DLIB_INSTALL_DIR=/usr/lib  \
      -DUSE_LIBHYPHEN=OFF         \
      -DENABLE_MINIBROWSER=ON     \
      -Wno-dev .. &&
make

This package does not have a working testsuite. However, there is a useable basic graphical web browser in the build directory, build/bin/MiniBrowser. If launching it fails, there is a problem with the build.

Note

When installing, the Makefile does some additional compiling and linking. If you do not have Xorg in /usr, the LIBRARY_PATH and PKG_CONFIG_PATH variables need to be defined for the root user. If using sudo to assume root, use the -E option to pass your current environment variables for the install process.

Now, as the root user:

make install &&

install -vdm755 /usr/share/gtk-doc/html/webkit{2,dom}gtk-4.0 &&
install -vm644  ../Documentation/webkit2gtk-4.0/html/*   \
                /usr/share/gtk-doc/html/webkit2gtk-4.0       &&
install -vm644  ../Documentation/webkitdomgtk-4.0/html/* \
                /usr/share/gtk-doc/html/webkitdomgtk-4.0

Command Explanations

-DUSE_LIBHYPHEN=OFF: This switch disables default automatic hyphenation implementation. You need to install Hyphen, if you wish to enable it (replacing OFF with ON or just removing the switch).

-DENABLE_MINIBROWSER=ON: This switch enables the Mini Browser compilation and install.

-DUSE_SYSTEM_MALLOC=ON: This switch enables building against the system installed malloc.

-DENABLE_GEOLOCATION=OFF: Use this switch if you don't want to install GeoClue-0.12.0 or GeoClue-2.4.5.

-DENABLE_GTKDOC=ON: Use this switch if GTK-Doc-1.25 is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: jsc and MiniBrowser
Installed Libraries: libjavascriptcoregtk-4.0.so and libwebkit2gtk-4.0.so
Installed Directories: /usr/include/webkitgtk-4.0, /usr/lib{,exec}/webkit2gtk-4.0 and /usr/share/gtk-doc/html/webkit{2,dom}gtk-4.0

Short Descriptions

jsc

is a command-line utility that allows you to run JavaScript programs outside of the context of a web browser.

MiniBrowser

is a very simple graphical browser.

libjavascriptcoregtk-4.0.so

contains core JavaScript API functions used by jsc and libwebkit2gtk-4.0.

libwebkit2gtk-4.0.so

contains the WebKit2 API functions.

Last updated on 2017-02-19 11:04:56 -0800

Chapter 26. Display Managers

Introduction

Display Managers are graphical programs used for starting the graphical display (currently, the X server) and providing a login capability for a Window Manager or Desktop Environment.

There are many Display Managers available. Some of the more well known include: GDM, KDM (deprecated), LightDM, LXDM, Slim, and SDDM.

Among the Desktop Environments available for Linux you find: Enlightenment, GNOME, KDE, LXDE, LXQt, and XFce.

Choosing a Display Manager or Desktop Environment is highly subjective. The choice depends on the look and feel of the packages, the resources (memory and disk space) required, and the utilities included.

In this chapter, the installation instructions of some Display Managers are presented. Later in the book, you will find other ones, which are provided as part of some Desktop Environments.

Last updated on 2015-08-01 16:47:07 -0700

lxdm-0.5.3

Introduction to LXDM

The LXDM is a lightweight Display Manager for the LXDE desktop. It can also be used as an alternative to other Display Managers such as GNOME's GDM or LightDM.

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

Package Information

LXDM Dependencies

Required

GTK+-2.24.31, ISO Codes-3.74, and librsvg-2.40.16 (runtime, for default theme background)

Recommended
Optional

GTK+-3.22.8

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxdm

Installation of LXDM

First, some fixes.

cat > pam/lxdm << "EOF"
# Begin /etc/pam.d/lxdm

auth     requisite      pam_nologin.so
auth     required       pam_env.so
auth     include        system-auth

account  include        system-account

password include        system-password

session  required       pam_limits.so
session  include        system-session

# End /etc/pam.d/lxdm
EOF

sed -i 's:sysconfig/i18n:profile.d/i18n.sh:g' data/lxdm.in &&
sed -i 's:/etc/xprofile:/etc/profile:g' data/Xsession &&
sed -e 's/^bg/#&/'        \
    -e '/reset=1/ s/# //' \
    -e 's/logou$/logout/' \
    -e "/arg=/a arg=$XORG_PREFIX/bin/X" \
    -i data/lxdm.conf.in

Install LXDM by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --with-pam        \
            --with-systemdsystemunitdir=no &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

cat > pam/lxdm << "EOF" ...: Replace default /etc/pam.d/lxdm by another one appropriate for BLFS.

sed -i ... data/lxdm.conf.in: Modifications in the default configuration: (1) fix the background to the default one; (2) restart X when session is close; (3) typo; and (4) include XORG_PREFIX, which may be different from /usr.

sed -i ... data/Xsession: Source /etc/profile, instead of other file, according to BLFS standard.

sed -i ... data/lxdm.in: Fix greeter's locale for BLFS specification.

--with-pam: This parameter enables use of pam authentication.

--with-systemdsystemunitdir=no: BLFS does not support systemd.

Configuring LXDM

Config Files

/etc/lxdm/lxdm.conf

Boot Script

Install the /etc/rc.d/init.d/lxdm init script from the blfs-bootscripts-20170225 package.

make install-lxdm

Configuration Information

The LXDM daemon configuration file (/etc/lxdm/lxdm.conf) specifies options that include numlock on/off, background image (bg), session, etc. You can set a default session by uncommenting the line: session=/usr/bin/startlxde and replacing startlxde with your session of choice. For GNOME session=/usr/bin/gnome-session. For OPENBOX session=/usr/bin/openbox-session and for XFCE session=/usr/bin/startxfce4.

It is also possible to set the preferred session on a per-user basis by editing the ~/.dmrc file for each user and adding:

[Desktop]
        Session=xfce

You can replace the default dummy face in the greeting screen by another image representing your user. For that, copy or symlink the desired image to your home directory with the name .face.

Starting lxdm

You can manually start lxdm, e.g, if the bootscript has been installed, by running, as root user:

/etc/rc.d/init.d/lxdm start

By convention, X should be executed at runlevel 5, consequently, the same is true for lxdm. However, the LFS default runlevel is 3. Changing to runlevel 5, from the console (as root user) starts the lxdm bootscript and presents the greeter screen:

init 5

In order to permanently set the default to 5, starting the lxdm greeter screen automatically, you can modify /etc/inittab. As the root user:

cp -v /etc/inittab{,-orig} &&
sed -i '/initdefault/ s/3/5/' /etc/inittab

Note

One important script, executed after login is /etc/lxdm/Xsession which we have fixed to fit BLFS specifications.

Contents

Installed Programs: lxdm, lxdm-binary and lxdm-config
Installed Libraries: None
Installed Directories: /etc/lxdm and /usr/share/lxdm

Short Descriptions

lxdm

is a script to execute lxdm-binary

lxdm-binary

is the actual Display Manager; needs to be executed with option -d to daemonize

lxdm-config

is a graphical customizing program

Last updated on 2017-02-22 13:28:29 -0800

sddm-0.14.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-8.0 platform.

Package Information

SDDM Dependencies

Required

CMake-3.7.2, extra-cmake-modules-5.31.0 and Qt-5.8.0

Recommended
Optional

Docutils (for the man pages)

Runtime Dependencies

ConsoleKit2-1.0.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sddm

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

Next, fix the application to start upowerd, if necessary, and after login, start the session with ck-launch-session:

sed -e '/UPOWER_SERVICE)/ s:^://:' \
    -i src/daemon/PowerManager.cpp &&

sed -e '/\$@$/s/exec/& ck-launch-session/' \
    -i data/scripts/Xsession

Install SDDM by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      -DENABLE_JOURNALD=OFF       \
      -DDBUS_CONFIG_FILENAME=sddm_org.freedesktop.DisplayManager.conf \
      -Wno-dev .. &&
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

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply additional compiler optimizations.

-DENABLE_JOURNALD=OFF: This switch is used because BLFS does not support systemd.

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

-DBUILD_MAN_PAGES=ON: This switch may be used if you want the man pages to be installed. Notice that you need Docutils to build them.

Configuring SDDM

Config File

/etc/sddm.conf

This file is not installed with the build instructions, and default values are used by sddm. In order to generate the example sddm.example.conf, issue:

sddm --example-config > sddm.example.conf

Note

This command generates an example config file, which depends on several conditions of the system where it is generated. A few options are defaults from upstream. If there is a previously installed /etc/sddm.conf, it will generate a replica. When it is generated during an X session, some session configurations are replicated, e.g. if the cursor from the Adwaita theme is already configured, you will obtain CursorTheme=Adwaita in the example file generated.

If there is no /etc/sddm.conf file yet, as the root user, copy the example file to /etc/sddm.conf:

cp -v sddm.example.conf /etc/sddm.conf

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 -e '/ServerPath/ s|usr|opt/xorg|' \
    -i.orig /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 -e 's/-nolisten tcp//'\
    -i /etc/sddm.conf

Desktop (Notebook) users, normally wish the Num Lock key on (off). For that, as the root user, issue:

sed -e 's/\"none\"/\"on\"/' \
    -i /etc/sddm.conf

for Desktop users. For Notebook users, replace \"on\" by \"off\", in the command above.

Boot Script

Install the /etc/rc.d/init.d/sddm init script from the blfs-bootscripts-20170225 package.

make install-sddm

Linux PAM Configuration

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/sddm start

By convention, X should be executed at runlevel 5, consequently, the same is true for sddm. However, LFS 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. Most of the Window Managers and Desktop Environments automatically provide those files, but if necessary, you may include a custom one.

Themes

Four themes are installed at /usr/share/sddm/themes: circles, elarun, maldives, and maui. The default theme is “maui”. You can install other themes in that directory. In order to change the theme, you need to edit /etc/sddm.conf, using your preferred text editor, to change the default “maui” theme, replacing “Current=maui” by “Current=<insert new theme name here>”, e.g. “Current=maldives”.

In order to see the theme without leaving the session, issue:

sddm-greeter --test-mode --theme <theme path>

Known Issues

This application works well, but there are issues. You find the mainstream known issues at Issues. The BLFS development team have found some issues.

Note

In the next couple of paragraphs, due to a problem with sddm-greeter, we mention how to define the keyboard used there. Notice that this is also the keyboard that will be used in the X session, unless there is a configuration in the Desktop Environment or in the Window Manager overriding it, afterwards.

Keyboard selection: the greeter shows a double question mark or the wrong keyboard. When you start to type the password or user name (depending on the theme, only password), the right keyboard selection magically appears. Optionally, a workaround is to include the keyboard list in /usr/share/sddm/scripts/Xsetup script, as the root user:

echo 'setxkbmap "<your keyboard comma separated list>"' >> \
     /usr/share/sddm/scripts/Xsetup

E.g. echo 'setxkbmap "fr,gb,br,us"' >> /usr/share/sddm/scripts/Xsetup. A very accurate definition of the keyboard(s) is possible, for example: echo 'setxkbmap -model pc105 -layout br,us -variant abnt2,dvorak -keycodes evdev' >> /usr/share/sddm/scripts/Xsetup. See man setxkbmap.

Dircolors: the /etc/dircolors file is not honoured. Particularly, the compressed files are not displayed in red colour. If this happens, a workaround is to issue, as the root user:

echo "source /etc/profile.d/dircolors.sh" >> /etc/bashrc

It has been reported that problems may happen with this package, if Xorg is installed with a prefix other than /usr. So far, BLFS development team has not hit any problem, in this case.

Contents

Installed Programs: sddm and sddm-greeter
Installed Libraries: None
Installed Directories: $QT5DIR/qml/SddmComponents, /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.

Last updated on 2017-02-22 13:28:29 -0800

Chapter 27. Window Managers

Introduction

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.

Last updated on 2013-03-08 15:46:06 -0800

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-8.0 platform.

Package Information

Fluxbox Dependencies

Required

X Window System

Optional

dbus-1.10.14 (runtime), FriBidi-0.19.7, and Imlib2-1.4.9 (if you wish to use other image formats in addition to XPM)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fluxbox

Installation of Fluxbox

Install Fluxbox by running the following commands:

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

This package does not have a working testsuite.

Now, as the root user:

make install

Configuring Fluxbox

Config Files

~/.fluxbox/init, ~/.fluxbox/keys, and ~/.fluxbox/menu

Configuration Information

If Fluxbox is the only Window Manager you want to use, you can start it with an .xinitrc file in your home folder. Be sure to backup your current .xinitrc before proceeding.

echo startfluxbox > ~/.xinitrc

Or alternatively, if you use a login manager like GDM or KDM and would like to be able to choose Fluxbox at the login prompt, create a fluxbox.desktop file like this.

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 or KDM 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.4.9 is not installed to allow other image formats.

cp /usr/share/fluxbox/styles/<theme> ~/.fluxbox/theme &&

sed -i 's,\(session.styleFile:\).*,\1 ~/.fluxbox/theme,' ~/.fluxbox/init &&

[ -f ~/.fluxbox/theme ] &&
echo "background.pixmap: </path/to/nice/image.ext>" >> ~/.fluxbox/theme ||
[ -d ~/.fluxbox/theme ] &&
echo "background.pixmap: </path/to/nice/image.ext>" >> ~/.fluxbox/theme/theme.cfg

In some locales the font specified in the theme may not contain the needed characters. This results in menus with blank items. You can fix this by editing ~/.fluxbox/theme with a text editor and altering it so that it names a suitable font.

Contents

Installed Programs: fluxbox, fbsetbg, fbsetroot, fluxbox-generate_menu, startfluxbox, fbrun, fluxbox-remote, and fluxbox-update_configs
Installed Libraries: None
Installed Directories: /usr/share/fluxbox and ~/.fluxbox

Short Descriptions

fluxbox

is a window manager for X11 based on Blackbox 0.61.0.

fbsetbg

is a utility that sets the background image. It requires one of the following at runtime: Esetroot, wmsetbg, feh, hsetroot, chbg, display, qiv, xv, xsri, xli, or xsetbg. It also requires which if Esetroot is found.

fbsetroot

is a utility to change root window appearance based on the Blackbox application bsetroot.

fluxbox-generate_menu

is a utility that generates a menu by scanning your PATH.

startfluxbox

is a session startup script that allows for command executions prior to fluxbox starting.

fbrun

displays a run dialog window.

fluxbox-remote

provides command line access to key commands for Fluxbox.

fluxbox-update_configs

use to manage config files (reload, update, test).

Last updated on 2017-02-20 13:11:26 -0800

IceWM-1.3.12

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-8.0 platform.

Package Information

IceWM Dependencies

Required

X Window System and gdk-pixbuf-2.36.5

Optional

libsndfile-1.0.27 and alsa-lib-1.1.3 (for the experimental icesound program)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/icewm

Installation of IceWM

Install IceWM by running the following commands:


./configure --prefix=/usr                     \
            --sysconfdir=/etc                 \
            --docdir=/usr/share/icewm-1.3.12 &&
make

This package does not have a working testsuite.

Now, as the root user:

make install         &&
rm /usr/share/xsessions/icewm.desktop

Command Explanations

rm /usr/share/xsessions/icewm.desktop: The package ships with both icewm.desktop and icewm-xsession.desktop. The former has apparently been used in the past, but it will hang if used with a modern desktop-manager such as sddm-0.14.0.

--enable-guievents --with-icesound=ALSA: these two switches permit icesound to be compiled.

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 -v ~/.icewm                                       &&
cp -v /usr/share/icewm/keys ~/.icewm/keys               &&
cp -v /usr/share/icewm/menu ~/.icewm/menu               &&
cp -v /usr/share/icewm/preferences ~/.icewm/preferences &&
cp -v /usr/share/icewm/toolbar ~/.icewm/toolbar         &&
cp -v /usr/share/icewm/winoptions ~/.icewm/winoptions

You can now edit these files to meet your requirements. In particular, review the preferences file. You can use Logout -> Restart-IceWM on the main menu to load your changed preferences, but changes to the background only take effect when IceWM is started.

At this point you can either modify the traditional menu files to suit your requirements, or use the newer icewm-menu-fdo described later.

The syntax of the menus is explained in the help files, which you can access by running help from the menu, but some of the detail is out of date and the default selections in the menus (a few old applications on the main menu, everything else on the Programs menu) will benefit from being updated to meet your needs. The following examples are provided to encourage you to think about how you wish to organise your menus. Please note the following:

  • If a program listed in the menu has not been installed, it will not appear when the menu is displayed. Similarly, if the program exists but the specified icon does not, no icon will be displayed in the menu.

  • The icons can be either .xpm or .png files, and there is no need to specify the extension. If the icon is located in the "library" (/usr/share/icewm/icons) there is no need to specifiy the path.

  • Most programs are in sub-menus, and the main menu will always append entries for windows, help, settings, logout at the bottom.

  • An icon for firefox was copied to the library directory and given a meaningful name. The icon for xine is xine.xpm which was installed to a pixmap directory.

  • The default toolbar is not altered.

If you wish to use this traditional method, there are more examples in previous releases of this book (e.g. BLFS-7.8).

Alternatively, you can create a menu which conforms to the FDO Desktop Menu Specifications, where programs can be found because they have a .desktop file in the XDG_DATA_HOME or XDG_DATA_DIR directories. Unlike most windowmanagers, icewm does not search for programs when the menu is invoked, so if you take this route you will need to rerun the following command after installing or removing programs:

icewm-menu-fdo >~/.icewm/menu

If you wish to put icons on your desktop, you will need to install a program such as Rox-Filer-2.11 which provides a pinboard. If you do that you will no longer be able to access the menu by right-clicking on the desktop, you will have to use the IceWM button. To ensure that the rox pinboard is running, the following commands will put it in the startup file:

cat > ~/.icewm/startup << "EOF"
rox -p Default &
EOF &&
chmod +x ~/.icewm/startup

Tip

There are a number of keyboard shortcuts in IceWM:

  • Ctrl + Alt + 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-session, icewm-set-gnomewm, icewmbg, icewmhint, icewmtray
Installed Libraries: None
Installed Directories: /usr/share/doc/icewm-1.3.12, /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-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 GNOMEwindowmanager to icewm using gconftool.

icewmbg

is used to set the background, according to the various DesktopBackground settings in the preferences.

icewmhint

is used internally.

icewmtray

provides the tray.

Last updated on 2017-02-16 19:05:12 -0800

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-8.0 platform.

Package Information

Openbox Dependencies

Required

X Window System and Pango-1.40.3 (compiled with support for libXft)

Optional

dbus-1.10.14 (runtime), Imlib2-1.4.9 (to enable icons in the right click menu), PyXDG-0.25, startup-notification-0.12, and librsvg-2.40.16

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openbox

Installation of Openbox

Note

If XORG_PREFIX is not /usr, tell gcc about it:

export LIBRARY_PATH=$XORG_PREFIX/lib

If you installed only Python 3 PyXDG module convert one of the scripts to Python 3:

2to3 -w data/autostart/openbox-xdg-autostart &&
sed 's/python/python3/' -i data/autostart/openbox-xdg-autostart

Install Openbox by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  \
            --docdir=/usr/share/doc/openbox-3.6.1 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--sysconfdir=/etc: This option puts Openbox's configuration files in /etc/xdg/openbox instead of /usr/etc/xdg/openbox.

--docdir=/usr/share/doc/openbox-3.6.1: this puts a few files in a versioned directory in /usr/share/doc.

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

Configuring Openbox

Config Files

/etc/xdg/openbox/autostart, /etc/xdg/openbox/menu.xml, /etc/xdg/openbox/rc.xml, ~/.config/openbox/autostart, ~/.config/openbox/menu.xml and ~/.config/openbox/rc.xml

Configuration Information

Openbox's right click menu can be used to launch programs. The menu itself is configured with 2 files, /etc/xdg/openbox/menu.xml and ~/.config/openbox/menu.xml. To make changes to the menu, copy /etc/xdg/openbox/menu.xml to ~/.config/openbox/menu.xml and edit it:

cp -rf /etc/xdg/openbox ~/.config

~/.config/openbox/menu.xml can be edited with a text editor or you can install Obmenu (requires pyxml and PyGTK-2.24.0).

To have icons in your right click menu requires installing Imlib2-1.4.9 before you install Openbox. To set an icon for an entry in the menu edit ~/.config/openbox/menu.xml and add an icon to the <item> tag like this:

<item label="Mplayer" icon="/usr/share/pixmaps/mplayer.png">

Many other aspects of Openbox's behaviour are configured with ~/.config/openbox/rc.xml such as what keybindings are used to launch programs or which mouse button launches the main menu.

Details of the theme that Openbox applies to window decorations are configured in ~/.config/openbox/rc.xml. You can get a list of the available themes with the command:

ls -d /usr/share/themes/*/openbox-3 | sed 's#.*es/##;s#/o.*##'

Starting Openbox

To automatically start openbox when you start Xorg:

echo openbox > ~/.xinitrc

If you want to set a background image to your desktop you can use display and launch it from ~/.xinitrc just before openbox:

cat > ~/.xinitrc << "EOF"
display -backdrop -window root /path/to/beautiful/picture.jpeg
exec openbox
EOF

Or if you like a bit of variety, put a selection of images in a folder (in this example, the directory ~/.config/backgrounds) and choose one at random each time you xinit:

cat > ~/.xinitrc << "EOF"
# make an array which lists the pictures:
picture_list=(~/.config/backgrounds/*)
# create a random integer between 0 and the number of pictures:
random_number=$(( ${RANDOM} % ${#picture_list[@]} ))
# display the chosen picture:
display -backdrop -window root "${picture_list[${random_number}]}"
exec openbox
EOF

If you like to have the numlock key set whan you start Xorg, install Numlockx and add that to your xinitrc. Another useful application is dbus-1.10.14:

cat > ~/.xinitrc << "EOF"
. /etc/profile
picture_list=(~/.config/backgrounds/*)
random_number=$(( ${RANDOM} % ${#picture_list[*]} ))
display -backdrop -window root "${picture_list[${random_number}]}"
numlockx
eval $(dbus-launch --auto-syntax --exit-with-session)
lxpanel &
exec openbox
EOF

Contents

Installed Programs: gdm-control, gnome-panel-control, obxprop, openbox, openbox-gnome-session, openbox-kde-session and openbox-session
Installed Libraries: libobrender.so and libobt.so
Installed Directories: /etc/xdg/openbox, /usr/include/openbox, /usr/share/doc/openbox-3.6.1 and /usr/share/themes.

Short Descriptions

gdm-control

is a command line tool to send signals to GDM.

gnome-panel-control

is a command line utility to invoke the Gnome Panel run dialog/menu.

obxprop

is a tool for displaying the properties on an x window. It has a similar functionality to xprop, but allows you to see UTF-8 strings as text.

openbox

is a standards compliant, highly configurable, window manager.

openbox-gnome-session

is a script to launch an Gnome session with Openbox as your window manager from your ~/.xinitrc.

openbox-kde-session

is a script to launch an KDE session with Openbox as your window manager from your ~/.xinitrc.

openbox-session

is a script to launch an Openbox session from your ~/.xinitrc.

libobrender.so

contains the functions used by Openbox for theme rendering.

libobt.so

is the Openbox toolkit library.

Last updated on 2017-02-20 16:33:44 -0800

sawfish-1.12.0

Introduction to sawfish

The sawfish package contains a window manager. This is useful for organizing and displaying windows where all window decorations are configurable and all user-interface policy is controlled through the extension language.

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

Package Information

sawfish Dependencies

Required

rep-gtk-0.90.8.3 and Which-2.21

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sawfish

Installation of sawfish

Install sawfish by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Configuring sawfish

Configuration Information

Be sure to backup your current .xinitrc before proceeding.

cat >> ~/.xinitrc << "EOF"
exec sawfish
EOF

Optionally, you can use a Display Manager, such as lxdm-0.5.3.

From the developers: “The default menu binding is somewhat obscure; you must middle-click on the background to bring up the menus. (If you have a two-button mouse, try clicking both buttons simultaneously)”. You can find this at sawfish's FAQ.

Contents

Installed Programs: sawfish, sawfish-about, sawfish-client, sawfish-config, sawfish-kde4-session, sawfish-kde5-session, sawfish-lumina-session, sawfish-mate-session, and sawfish-xfce-session
Installed Libraries: Several internal modules under /usr/lib/sawfish tree
Installed Directory: /usr/include/sawfish, /usr/lib/sawfish, /usr/lib/rep/sawfish, and /usr/share/sawfish

Short Descriptions

sawfish

is the extensible window manager using a Lisp-based scripting language.

sawfish-about

is the sawfish about window.

sawfish-client

allows you to connect to a window manager process and evaluate arbitrary Lisp forms.

sawfish-config

is the sawfish configuration manager.

sawfish-kde4-session

is a script to run KDE4 using sawfish.

sawfish-kde5-session

is a script to run Plasma 5 using sawfish

sawfish-mate-session

is a script to run mate using sawfish.

sawfish-lumina-session

is a script to run Lumina using sawfish.

sawfish-xfce-session

is a script to run xfce using sawfish.

Last updated on 2017-02-16 16:10:58 -0800

Other Window Managers

twm is the Tab Window Manager. This is the default window manager installed by the X Window System packages.

mwm is the Motif® Window Manager. It is an OSF/Motif® clone packaged and installed with LessTif.

Last updated on 2012-05-06 08:26:39 -0700

Chapter 28. Icons

Introduction

Window Managers and Desktop Environments can use icons from different sources. Generally icons are installed in /usr/share/icons and are independent of distribution.

Last updated on 2016-04-25 12:28:55 -0700

adwaita-icon-theme-3.22.0

Introduction to Adwaita Icon Theme

The Adwaita Icon Theme package contains an icon theme for Gtk+ 3 applications.

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

Package Information

Adwaita Icon Theme Dependencies

Optional

git-2.11.1, GTK+-2.24.31 or GTK+-3.22.8 (if present, librsvg-2.40.16 is also required, and gtk-update-icon-cache and gtk-encode-symbolic-svg are run after installing), Inkscape-0.92.0 and Icon Tools

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/adwaita-icon-theme

Installation of Adwaita Icon Theme

Install Adwaita Icon Theme by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/share/icons/Adwaita/

Last updated on 2017-02-16 19:24:14 -0800

breeze-icons-5.31.0

Introduction to Breeze Icons

The Breeze Icons package contains the default icons for KDE Plasma 5 applications, but it can be used for other window environments.

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

Package Information

Breeze Icons Dependencies

Required

extra-cmake-modules-5.31.0 and Qt-5.8.0

Optional

KDE Frameworks-5.31.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/breeze-icons

Installation of Breeze Icons

Install Breeze Icons by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DBUILD_TESTING=OFF         \
      -Wno-dev ..

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DBUILD_TESTING=OFF: This parameter disables building the testing framework, which requires some modules from KDE Frameworks-5.31.0.

Contents

Installed Programs: None
Installed Library: None
Installed Directory: /usr/share/icons/breeze{,-dark}

Last updated on 2017-02-22 09:52:51 -0800

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-8.0 platform.

Package Information

GNOME Icon Theme Dependencies

Required

GTK+-3.22.8 or GTK+-2.24.31, hicolor-icon-theme-0.15, and icon-naming-utils-0.8.90

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme

Installation of GNOME Icon Theme

Install GNOME Icon Theme by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/gnome

Last updated on 2017-02-17 12:01:55 -0800

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-8.0 platform.

Package Information

GNOME Icon Theme Extras Dependencies

Required

gnome-icon-theme-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme-extras

Installation of GNOME Icon Theme Extras

Install GNOME Icon Theme Extras by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Last updated on 2017-02-21 13:10:36 -0800

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-8.0 platform.

Package Information

GNOME Icon Theme Symbolic Dependencies

Required

gnome-icon-theme-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-icon-theme-symbolic

Installation of GNOME Icon Theme Symbolic

Install GNOME Icon Theme Symbolic by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/icons/gnome/scalable

Last updated on 2017-02-21 13:10:36 -0800

gnome-themes-standard-3.22.2

Introduction to GNOME Themes Standard

The GNOME Themes Standard package contains various components of the default GNOME theme.

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

Package Information

GNOME Themes Standard Dependencies

Required

GTK+-2.24.31 or GTK+-3.22.8 with librsvg-2.40.16 or both

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-themes-standard

Installation of GNOME Themes Standard

Install GNOME Themes Standard by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-gtk2-engine: This switch disables the GTK+-2 theming engine.

--disable-gtk3-engine: This switch disables the GTK+-3 theming engine.

Contents

Installed Programs: None
Installed Library: libadwaita.so
Installed Directories: /usr/lib/gtk-2.0/2.10.0/engines, /usr/share/icons/HighContrast, /usr/share/themes/Adwaita, /usr/share/themes/Adwaita-dark, and /usr/share/themes/HighContrast

Short Descriptions

libadwaita.so

is the Adwaita GTK+-2 engine theme.

Last updated on 2017-02-20 15:27:17 -0800

hicolor-icon-theme-0.15

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/hicolor-icon-theme

Installation of hicolor-icon-theme

Install hicolor-icon-theme by running the following commands:

./configure --prefix=/usr

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/hicolor

Short Descriptions

/usr/share/icons/hicolor/*

contains icon definitions used as defaults.

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

icon-naming-utils Dependencies

Required

XML::Simple-2.22

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/icon-naming-utils

Installation of icon-naming-utils

Install icon-naming-utils by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: icon-name-mapping
Installed Libraries: None
Installed Directories: /usr/share/dtds and /usr/share/icon-naming-utils

Short Descriptions

icon-name-mapping

is a Perl script used for maintaining backwards compatibility with current desktop icon themes, while migrating to the names specified in the Icon Naming Specification.

Last updated on 2017-02-16 19:05:12 -0800

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-8.0 platform.

Package Information

LXDE Icon Theme Dependencies

Optional

GTK+-2.24.31 or GTK+-3.22.8 (for gtk-update-icon-cache command)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxde-icon-theme

Installation of LXDE Icon Theme

Install LXDE Icon Theme by running the following commands:

./configure --prefix=/usr

This package does not come with a test suite.

Now, as the root user:

make install

If you have installed one of the optional dependencies, run the following command as the root user:

gtk-update-icon-cache -qf /usr/share/icons/nuoveXT2

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/icons/nuoveXT2

Last updated on 2017-02-17 12:01:55 -0800

oxygen-icons5-5.31.0

Introduction to oxygen-icons5

The oxygen icons 5 theme is a photo-realistic icon style, with a high standard of graphics quality.

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

Package Information

oxygen-icons5 Dependencies

Required

extra-cmake-modules-5.31.0 and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/oxygen-icons5

Installation of oxygen-icons5

First, enable scalable icons:

sed -i '/( oxygen/ s/)/scalable )/' CMakeLists.txt

Install oxygen-icons5 by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr -Wno-dev ..

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: none
Installed Libraries: none
Installed Directory: /usr/share/icons/oxygen

Last updated on 2017-02-20 15:49:32 -0800

Part VII. KDE

KDE is a comprehensive desktop environment with a huge number of applications written for it and a huge amount of users. It is based on the Qt framework.

For more information visit the official KDE project site at http://www.kde.org/.

Chapter 29. Introduction to KDE

KDE Preliminaries

KDE is a comprehensive desktop environment with a huge number of applications written for it and a huge amount of users. It is based on the Qt framework.

There are two versions of KDE. KDE4 is a deprecated version that combines libraries and the desktop environment into one set of packages. It is no longer in BLFS. For KDE5, the libraries, now called KDE Frameworks 5 or KF5, are separate from the desktop environment called KDE Plasma 5.

For more information visit the official KDE project site at http://www.kde.org/.

Last updated on 2016-03-23 17:23:12 -0700

extra-cmake-modules-5.31.0

Introduction to Extra Cmake Modules

The Extra Cmake Modules package contains extra CMake modules used by KDE Frameworks 5 and other packages.

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

Package Information

Extra Cmake Modules Dependencies

Required

CMake-3.7.2

Optional

Sphinx (for building documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/extra-cmake-modules

Installation of Extra Cmake Modules

Install Extra Cmake Modules by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr .. &&
make

This package does not come with a test suite.

Note

Unlike other KF5 packages, this module is installed in /usr because it can be used by some non-KF5 packages.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /usr/share/ECM and /usr/share/doc/ECM (if documentation was built)

Last updated on 2017-02-20 12:59:39 -0800

Phonon-4.9.1

Introduction to Phonon

Phonon is the multimedia API for KDE. It replaces the old aRts package. Phonon needs either the GStreamer or VLC backend.

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

Package Information

Phonon Dependencies

Required

CMake-3.7.2, extra-cmake-modules-5.31.0, GLib-2.50.3, and Qt-5.8.0

Optional

PulseAudio-10.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/phonon

Installation of Phonon

Install Phonon by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr    \
      -DCMAKE_BUILD_TYPE=Release     \
      -DCMAKE_INSTALL_LIBDIR=lib     \
      -DPHONON_BUILD_PHONON4QT5=ON   \
      -Wno-dev .. &&
make

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-DPHONON_BUILD_PHONON4QT5=ON: This switch is used to ensure that Qt5 version of the library is built even if Qt4 is present.

Contents

Installed Programs: None
Installed Libraries: libphonon4qt5.so libphonon4qt5experimental.so
Installed Directories: /usr/include/phonon4qt5, /usr/lib/cmake/phonon4qt5, and /usr/share/phonon4qt5

Last updated on 2017-02-20 12:59:39 -0800

Phonon-backend-gstreamer-4.9.0

Introduction to the Phonon-backend-gstreamer

This package provides a Phonon backend which utilizes the GStreamer media framework.

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

Package Information

Phonon-backend-gstreamer Dependencies

Required

gstreamer-1.10.3, libxml2-2.9.4, and phonon-4.9.1

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/phonon-backend-gstreamer

Installation of Phonon-backend-gstreamer

Note

This package unpacks to the directory phonon-gstreamer-4.9.0.

Install Phonon-backend-gstreamer by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr    \
      -DCMAKE_INSTALL_LIBDIR=lib     \
      -DCMAKE_BUILD_TYPE=Release     \
      -DPHONON_BUILD_PHONON4QT5=ON   \
      -Wno-dev .. &&
make

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of compiler optimizations.

-DCMAKE_INSTALL_LIBDIR=lib: This switch is used to get libraries to install to /usr/lib instead of /usr/lib64 on a 64 bit system.

-DPHONON_BUILD_PHONON4QT5=ON: This switch is used to ensure that Qt5 version of the backend is built even if Qt4 is present.

Contents

Installed Programs: none
Installed Libraries: phonon_gstreamer.so
Installed Directories: /usr/lib/qt5/plugins/phonon4qt5_backend

Last updated on 2017-02-20 12:59:39 -0800

Phonon-backend-vlc-0.9.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-8.0 platform.

Package Information

Phonon-backend-vlc Dependencies

Required

phonon-4.9.1 and VLC-2.2.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/phonon-backend-vlc

Installation of Phonon-backend-vlc

Note

This package unpacks to the directory phonon-vlc-0.9.0.

Install Phonon-backend-vlc by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr    \
      -DCMAKE_INSTALL_LIBDIR=lib     \
      -DCMAKE_BUILD_TYPE=Release     \
      -DPHONON_BUILD_PHONON4QT5=ON   \
      -Wno-dev .. &&
make

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of compiler optimizations.

-DCMAKE_INSTALL_LIBDIR=lib: This switch is used to get libraries to install to /usr/lib instead of /usr/lib64 on a 64 bit system.

-DPHONON_BUILD_PHONON4QT5=ON: This switch is used to ensure that Qt5 version of the backend is built even if Qt4 is present.

Contents

Installed Program: none
Installed Libraries: phonon_vlc.so
Installed Directory: /usr/lib/qt5/plugins/phonon4qt5_backend

Last updated on 2017-02-20 12:59:39 -0800

Polkit-Qt-0.112.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-8.0 platform.

Package Information

Polkit-Qt Dependencies

Required

CMake-3.7.2, Polkit-0.113, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/polkit-qt

Installation of Polkit-Qt

Install Polkit-Qt by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      -DCMAKE_INSTALL_LIBDIR=lib  \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-DCMAKE_INSTALL_LIBDIR=lib: This switch is used to get libraries to install to $KF5_PREFIX/lib instead of $KF5_PREFIX/lib64 on a 64 bit system.

Contents

Installed Programs: none
Installed Libraries: libpolkit-qt5-agent-1.so, libpolkit-qt5-core-1.so, and libpolkit-qt5-gui-1.so
Installed Directories: /usr/include/polkit-qt5-1 and /usr/lib/cmake/PolkitQt5-1

Last updated on 2017-02-20 12:59:39 -0800

libdbusmenu-qt-0.9.3+16.04.20160218

Introduction to libdbusmenu-qt

This library provides a Qt implementation of the DBusMenu specification that exposes menus via DBus.

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

Package Information

libdbusmenu-qt Dependencies

Required

Qt-5.8.0

Optional

Doxygen-1.8.13 (for building the API documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdbusmenu-qt

Installation of libdbusmenu-qt

Install libdbusmenu-qt by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_INSTALL_LIBDIR=lib  \
      -DCMAKE_BUILD_TYPE=Release  \
      -DWITH_DOC=OFF              \
      -Wno-dev .. &&
make

This packages doe not come with a working test suite.

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to build without debugging symbols and apply a higher level of compiler optimizations.

-DWITH_DOC=OFF: This option is set to avoid building the API documentation. Omit it if you have doxygen installed and want the documentation.

Contents

Installed Programs: None
Installed Library: libdbusmenu-qt5.so
Installed Directory: /usr/lib/cmake/dbusmenu-qt5 and /usr/include/dbusmenu-qt5

Last updated on 2017-02-20 12:59:39 -0800

Chapter 30. KDE Frameworks 5

KDE Frameworks 5 Pre-installation Configuration

KF5 can be installed in /usr or /opt/kf5. The BLFS editors recommend the latter in the BLFS environment.

Installing in /usr

One option is to install KDE Frameworks 5 into the /usr hierarchy. This creates a simpler setup but makes it more difficult to try multiple versions of KDE Frameworks.

export KF5_PREFIX=/usr

It is a good idea to add the following variables to your system or personal profiles:

cat >> /etc/profile.d/qt5.sh << "EOF"
# Begin kf5 extension for /etc/profile.d/qt5.sh

pathappend /usr/lib/qt5/plugins    QT_PLUGIN_PATH
pathappend $QT5DIR/lib/plugins     QT_PLUGIN_PATH

pathappend /usr/lib/qt5/qml        QML2_IMPORT_PATH
pathappend $QT5DIR/lib/qml         QML2_IMPORT_PATH

# End extension for /etc/profile.d/qt5.sh
EOF

cat > /etc/profile.d/kf5.sh << "EOF"
# Begin /etc/profile.d/kf5.sh

export KF5_PREFIX=/usr

# End /etc/profile.d/kf5.sh
EOF

Note

If qt5 was installed in /usr, the $QT5DIR/lib/ portions of the above paths may need to be changed to $QT5DIR/lib/qt5/.

Warning

If KDE4 is installed in /usr, some packages from this chapter might overwrite some programs installed by KDE4 packages.

Installing in /opt

A method of building multiple versions installs KDE Frameworks 5 in the /opt hierarchy:

export KF5_PREFIX=/opt/kf5

If you are not installing KDE Frameworks 5 in /usr, you will need to make some additional configuration changes. Best practice is to add those to your system or personal profile:

cat > /etc/profile.d/kf5.sh << "EOF"
# Begin /etc/profile.d/kf5.sh

export KF5_PREFIX=/opt/kf5

pathappend $KF5_PREFIX/bin             PATH
pathappend $KF5_PREFIX/lib/pkgconfig   PKG_CONFIG_PATH

pathappend /etc/xdg                    XDG_CONFIG_DIRS
pathappend $KF5_PREFIX/etc/xdg         XDG_CONFIG_DIRS
pathappend /usr/share                  XDG_DATA_DIRS
pathappend $KF5_PREFIX/share           XDG_DATA_DIRS

pathappend $KF5_PREFIX/lib/plugins     QT_PLUGIN_PATH

pathappend $KF5_PREFIX/lib/qml         QML2_IMPORT_PATH

pathappend $KF5_PREFIX/lib/python2.7/site-packages PYTHONPATH
# End /etc/profile.d/kf5.sh
EOF

cat >> /etc/profile.d/qt5.sh << "EOF"
# Begin Qt5 changes for KF5

pathappend $QT5DIR/plugins             QT_PLUGIN_PATH
pathappend $QT5DIR/qml                 QML2_IMPORT_PATH

# End Qt5 changes for KF5
EOF

Expand your /etc/ld.so.conf file:

cat >> /etc/ld.so.conf << "EOF"
# Begin KF5 addition

/opt/kf5/lib

# End KF5 addition
EOF

Several KDE Frameworks 5 packages install files into D-Bus directories. When installing KDE Frameworks 5 in a location other than /usr, D-Bus needs to be able to find these files. The easiest way to achieve this is to create the following symlinks (as the root user):

install -v -dm755           $KF5_PREFIX/{etc,share} &&
ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share

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.15. Run the following commands as the root user:

install -v -dm755                $KF5_PREFIX/share/icons &&
ln -sfv /usr/share/icons/hicolor $KF5_PREFIX/share/icons

Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why /opt/kf5 is used as installation prefix instead of /opt/kf5-5.31.0. After installing KDE Frameworks, you may rename the directory and create a symlink:

mv /opt/kf5{,-5.31.0}
ln -sfv kf5-5.31.0 /opt/kf5

Later on, you may want to install other versions of KDE Frameworks 5. To do that, just remove the symlink and use /opt/kf5 as the prefix again. Which version of KDE Frameworks 5 you use depends only on where the symlink points. No other reconfiguration will be needed.

Last updated on 2016-08-28 02:28:15 -0700

Building KDE Frameworks 5 (KF5)

KDE Frameworks 5 is a collection of libraries based on top of Qt5 and QML derived from the monolithic KDE 4 libraries. They can be used independent of the KDE Display Environment (Plasma 5).

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

The instructions below build all of the KDE Frameworks packages in one step by using a bash script.

Package Information

KF5 Dependencies

Required

Boost-1.63.0, extra-cmake-modules-5.31.0, docbook-xml-4.5, docbook-xsl-1.79.1, giflib-5.1.4, libepoxy-1.4.0, libgcrypt-1.7.6, libjpeg-turbo-1.5.1, libpng-1.6.28, libxslt-1.1.29, lmdb-0.9.19, QtWebkit-5.8.0, phonon-4.9.1, shared-mime-info-1.8, URI-1.71, and Wget-1.19.1 (required to download the packages)

Recommended
Optional

BlueZ-5.43 (needed to build Bluez-Qt), ModemManager-1.6.4 (needed to build ModemManager-Qt)

Runtime dependency for FrameworkIntegration

Oxygen fonts and Noto fonts

Runtime dependencies for kapidox

Doxygen-1.8.13, Jinja2 , and PyYAML

Additional image formats support in KImageFormats

JasPer-2.0.10 and OpenEXR

Optional dependencies for KIO

MIT Kerberos V5-1.15

Optional dependencies for Solid

UDisks-2.1.8, UPower-0.99.4 and media-player-info (runtime)

Optional dependency for KWallet

gpgmepp

Optional dictionary backends for Sonnet

Hspell and Hunspell

Required dependencies for Prison

Datamatrix and QRencode

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kf5

Downloading KDE Frameworks

The easiest way to get the KDE Frameworks packages is to use a single wget to fetch them all at once:

url=http://download.kde.org/stable/frameworks/5.31/
wget -r -nH --cut-dirs=3 -A '*.xz' -np $url

The options used here are:
  -r            recurse through child directories
  -nH           disable generation of host-prefixed directories
  --cut-dirs=3  remove three levels of directories when saving
  -A '*.xz'     just get the *.xz files
  -np           don't get parent directories

Setting Package Order

The order of building files is important due to internal dependencies. Create the list of files in the proper order as follows:

cat > frameworks-5.31.0.md5 << "EOF"
2243e955a41b8a5036fb8d0e497342f5  attica-5.31.0.tar.xz
#74d7c29138168f9a62fe475705c0b351  extra-cmake-modules-5.31.0.tar.xz
b846e442fd48b8387f93aa37295e9f7c  kapidox-5.31.0.tar.xz
de591b1902b1721b74762d712f13a265  karchive-5.31.0.tar.xz
8e0c15990e84dfcfc5c85a88e2e0319b  kcodecs-5.31.0.tar.xz
f044848c2406fa1452b11780af2e1fea  kconfig-5.31.0.tar.xz
95935748baf5465f150f4e1a94af1923  kcoreaddons-5.31.0.tar.xz
c6c8f751eff1f03406f63bcfb1f4ffe0  kdbusaddons-5.31.0.tar.xz
5ee257c5ff53d5551b9df1b640cfabf6  kdnssd-5.31.0.tar.xz
ecb1a10910116e9fd3265f2f1908c6a1  kguiaddons-5.31.0.tar.xz
62457f60936bb8dc6649ed362e7ab80a  ki18n-5.31.0.tar.xz
c45511be577726afd5c7d88c7f13f274  kidletime-5.31.0.tar.xz
99cbfa14df2fb11930090122b461bc6a  kimageformats-5.31.0.tar.xz
91916337e5a8edf9fca9de3bdd1ad8fa  kitemmodels-5.31.0.tar.xz
71251518337febe21cd0af8e7db66fae  kitemviews-5.31.0.tar.xz
e36ccf164785957e07d03cddef152136  kplotting-5.31.0.tar.xz
3ff1ee177df63262636954cb7e0460dc  kwidgetsaddons-5.31.0.tar.xz
cd402e03c023354e9ee37b7d0d5de621  kwindowsystem-5.31.0.tar.xz
8c4d807e867f11f5a55604fa59cce85d  networkmanager-qt-5.31.0.tar.xz
2946f8c7780e2f3de5384717a8a34cdc  solid-5.31.0.tar.xz
11cef5b5016def5298b64e2ce561a8b5  sonnet-5.31.0.tar.xz
f1dbc18f38a9582cd1d4f94bc9f0f132  threadweaver-5.31.0.tar.xz
ec49b90d1566a37e91b9710557e102f2  kauth-5.31.0.tar.xz
81234f797d4da26106a91bdcc34440df  kcompletion-5.31.0.tar.xz
a0cffc08aa51c61d48d9e25778a61e62  kcrash-5.31.0.tar.xz
fc1b4de766d04ac3abc87050588d083d  kdoctools-5.31.0.tar.xz
8f5efa781672c67f01195ee3dc823c6b  kpty-5.31.0.tar.xz
0f7be81fe9c68044f20d6c297a624558  kunitconversion-5.31.0.tar.xz
4deb8a01f99cb16bbcf80f1e11d90824  kconfigwidgets-5.31.0.tar.xz
b46d2550b689fc818064f69cb1db29a7  kservice-5.31.0.tar.xz
d56e35255d2697cc3a89a1a99d1821fe  kglobalaccel-5.31.0.tar.xz
9d66b0fe531892180006f0deb77aa4b2  kpackage-5.31.0.tar.xz
9a593607c47472dd6ce0d546b2f2a736  kdesu-5.31.0.tar.xz
4c8d3ab1e358efd89acd7ab95025dd37  kemoticons-5.31.0.tar.xz
fa2e0994412b83dbb0e54aa277f4bff3  kiconthemes-5.31.0.tar.xz
cc2f41fd5b8ba6ad795a7835a68d4e8c  kjobwidgets-5.31.0.tar.xz
b8483a6872720152acfb22dae0db417e  knotifications-5.31.0.tar.xz
a3240501f842655be3b354d98da95939  ktextwidgets-5.31.0.tar.xz
de28f21c121dc24f31d35ab622304e7e  kxmlgui-5.31.0.tar.xz
8c1d5970b25f877567494486638d6082  kbookmarks-5.31.0.tar.xz
3372c17e1a0020616fea29ec9097e0cc  kwallet-5.31.0.tar.xz
62f31e7a9cd0b875fce5b552ec9be3c7  kio-5.31.0.tar.xz
8b76f1704314258a944eb57a466d338d  kdeclarative-5.31.0.tar.xz
eccc7474f7442b656d26211050f3b2c3  kcmutils-5.31.0.tar.xz
2df293c8e3cedd3a7b71af69045dc5a0  knewstuff-5.31.0.tar.xz
128fa26a3e7928ae74db95ee774fcf48  frameworkintegration-5.31.0.tar.xz
8cf1b185c3d5b74a168995f8e0747931  kinit-5.31.0.tar.xz
a8fdfb88286f73485734ad2feecb7e16  knotifyconfig-5.31.0.tar.xz
21849d002c27964c0d264aa9b5a7c67d  kparts-5.31.0.tar.xz
31f9bd0f380f60b0ab2e9b8f56b1662a  kactivities-5.31.0.tar.xz
569c52fc5424b1c58fc0476ffa02b58b  kded-5.31.0.tar.xz
d063b3b7827eaaa8e345ebaf6c1500f9  kdewebkit-5.31.0.tar.xz
302e06bd05b8632fe60702c82218d1eb  syntax-highlighting-5.31.0.tar.xz
315aae6b286757696513ecc7ca69e68e  ktexteditor-5.31.0.tar.xz
89a054526209180e02b87b30b8766f5f  kdesignerplugin-5.31.0.tar.xz
3ba021780eb40fadd3472630be680571  kwayland-5.31.0.tar.xz
cbef982888a30ca96b4c1f52d502551c  plasma-framework-5.31.0.tar.xz
#ac454faa59de5fb2c5f995acd71fd769  modemmanager-qt-5.31.0.tar.xz
6eaf7bd9165a7042221926064c01cce9  kpeople-5.31.0.tar.xz
c1cd0538b4f7e56653a4d6d4f2c994a2  kxmlrpcclient-5.31.0.tar.xz
2e2dfc3e49d878044c4848d147918d1b  bluez-qt-5.31.0.tar.xz
b0553bbd667d7d209735d2123f33af46  kfilemetadata-5.31.0.tar.xz
831874cc5f6bf3aab76ca196d30995b3  baloo-5.31.0.tar.xz
#f16a9b1a901700ecd0790e3d80ae32d4  breeze-icons-5.31.0.tar.xz
#385ddb6e36639dfffb0bf30b75b049e0  oxygen-icons5-5.31.0.tar.xz
cd4290e76d0c07a3612b82257119a4df  kactivities-stats-5.31.0.tar.xz
6105cf1f51b69cd9232aa662f8d2511a  krunner-5.31.0.tar.xz
#95cb43eb20e081db51709b0ab6bcfa96  prison-5.31.0.tar.xz
71ec95ef3c79e2a86de4872bb97daa0e  portingAids/kjs-5.31.0.tar.xz
aa244aa083a03be78a976a8a8cd6ed8c  portingAids/kdelibs4support-5.31.0.tar.xz
21a3859d1358a330fbdb83f3c184dd71  portingAids/khtml-5.31.0.tar.xz
49f65f405b4e3d49adf81247efce963f  portingAids/kjsembed-5.31.0.tar.xz
f287ac1073cae07f51178ad78f30cf4b  portingAids/kmediaplayer-5.31.0.tar.xz
743b48d58b23d386e4417081a4d456cb  portingAids/kross-5.31.0.tar.xz
EOF

In the above list, notice that some files have been commented out with a hash (#) character. The extra-cmake-modules entry has been commented out because it was built earlier in the Introduction to KDE. The icon packages are covered separately at breeze-icons-5.31.0 and oxygen-icons5-5.31.0. The modemmanager-qt package may be built if its optional dependency has been installed. The prison package (bar code reader) may be built if the required external libraries are installed.

Installation of KDE Frameworks

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

Caution

If installing in /opt and there is an existing /opt/kf5 either as a regular directory or a symbolic link, it should be reinitialized (as root):

mv -v /opt/kf5 /opt/kf5.old                         &&
install -v -dm755           $KF5_PREFIX/{etc,share} &&
ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

while read -r line; do

    # Get the file name, ignoring comments and blank lines
    if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
    file=$(echo $line | cut -d" " -f2)

    pkg=$(echo $file|sed 's|^.*/||')          # Remove directory
    packagedir=$(echo $pkg|sed 's|\.tar.*||') # Package directory

    tar -xf $file
    pushd $packagedir

      mkdir build
      cd    build

      cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
            -DCMAKE_PREFIX_PATH=$QT5DIR        \
            -DCMAKE_BUILD_TYPE=Release         \
            -DLIB_INSTALL_DIR=lib              \
            -DBUILD_TESTING=OFF                \
            -Wno-dev ..
      make
      as_root make install
  popd


  as_root rm -rf $packagedir
  as_root /sbin/ldconfig

done < frameworks-5.31.0.md5

exit

Note

Any modules that have been omitted can be installed later by using the same mkdir build; cd build; cmake; make; make install procedure as above.

Sometimes the installation paths are hardcoded into installed files. If the installed directory is not /usr, rename the directory and create a symlink:

mv -v /opt/kf5 /opt/kf5-5.31.0
ln -sfvn kf5-5.31.0 /opt/kf5

Command Explanations

-DCMAKE_PREFIX_PATH=$QT5DIR: This switch is used to allow cmake to find the proper Qt libraries.

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply higher level of the compiler optimizations.

-DLIB_INSTALL_DIR=lib: This switch is used to get libraries to install to $KF5_PREFIX/lib instead of $KF5_PREFIX/lib64 on a 64 bit system.

-DBUILD_TESTING=OFF: This switch is used to prevent building test programs and libraries that are of no use to an end user.

Contents

Installed Programs: There are 53 programs installed in /opt/kf5/bin.
Installed Libraries: There are too many kf5 libraries (79) to list separately.
Installed Directories: /opt/kf5 (symlink to /opt/kf5-5.31.0)

Short Descriptions

checkXML5

is a tool to check for syntax errors in KDE DocBook XML files.

depdiagram-generate

is a tool to generate a dependency diagram.

depdiagram-generate-all

is a tool to generate a dependency diagram for all frameworks at once..

depdiagram-prepare

is a tool to prepare dot files.

desktoptojson

is a tool to convert a .desktop file to a .json file.

kactivitymanagerd

is the KDE Plasma Workspace Activity Manager.

kbuildsycoca5

rebuilds the KService desktop file system configuration cache.

kcookiejar5

is a command line interface to the HTTP cookie store used by KDE, a D-BUS service to store/retrieve/clean cookies.

kded5

consolidates several small services in one process.

kdeinit5

is a process launcher somewhat similar to the famous init used for booting UNIX.

kf5-config

is a command line program used to retrieve information about KDE installation or user paths.

kf5kross

executes kross scripts written in KDE Javascript, Python, Ruby, Java and Falcon.

kgenapidox

is a tool to generate API documentation in the KDE style.

kgendesignerplugin

generates widget plugins for Qt(TM) Designer.

kglobalaccel5

is a daemon use to register the key bindings and for getting notified when the action triggered.

kjs5

is KDE ECMAScript/JavaScript engine.

kjscmd5

is a tool for launching KJSEmbed scripts from the command line.

kjsconsole

is a console for kjs5.

kmailservice5

is a mail service.

kpackagelauncherqml

is a commandline tool for launching kpackage QML application

kpackagetool5

is a command line kpackage tool.

kreadconfig5

is a command line tool to retrieve values from KDE configuration files.

kshell5

start applications via kdeinit.

ktelnetservice5

is a telnet service.

ktrash5

is a helper program to handle the KDE trash can.

kwalletd5

is the wallet manager daemon.

kwriteconfig5

is a command line tool to write values in KDE configuration files.

meinproc5

converts DocBook files to HTML.

plasmapkg2

is a tool to install, list, remove Plasma packages

preparetips5

is a script to extract the text from a tips file.

solid-hardware5

is a command line tool to investigate available devices.

Last updated on 2017-02-20 12:59:39 -0800

Chapter 31. KDE Frameworks 5 Based Applications

Ark-16.12.2

Introduction to Ark

The Ark package is a KF5 archive tool. It is a graphical front end to tar and similar tools.

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

Package Information

Ark Dependencies

Required

KDE Frameworks-5.31.0 and libarchive-3.2.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ark5

Installation of Ark

Install Ark by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: ark and arkprofile
Installed Libraries: libkdeinit5_ark.so and libarkprivate.so
Installed Directories: $KF5_PREFIX/share/doc/HTML/*/ark, $KF5_PREFIX/share/ark, and $KF5_PREFIX/share/kxmlgui5/ark

Short Descriptions

ark

is an X terminal emulation which provides a command-line interface.

arkprofile

is a command-line tool to change the current tab's profile options.

Last updated on 2017-02-20 15:49:32 -0800

Kate-16.12.2

Introduction to Kate

The Kate package contains an advanced KF5 based graphical text editor.

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

Package Information

Kate Dependencies

Required

KDE Frameworks-5.31.0,

Optional

libgit2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kate5

Installation of Kate

Install Kate by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX  \
      -DCMAKE_BUILD_TYPE=Release          \
      -DLIB_INSTALL_DIR=lib               \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: kate and kwrite
Installed Libraries: libkdeinit5_kate.so and libkdeinit5_kwrite.so
Installed Directories: $KF5_PREFIX/lib/plugins/ktexteditor, $KF5_PREFIX/lib/plugins/plasma/dataengine, $KF5_PREFIX/share/doc/HTML/*/{kate,katepart,kwrite}, $KF5_PREFIX/share/{kateproject,katexmltools}, $KF5_PREFIX/share/kxmlgui5/{kate,katebuild,katecloseexceptplugin}, $KF5_PREFIX/share/kxmlgui5/{katectags,katefiletree,kategdb}, $KF5_PREFIX/share/kxmlgui5/{katekonsole,kateopenheaderplugin}, $KF5_PREFIX/share/kxmlgui5/{kateproject,katesearch,katesnippets}, $KF5_PREFIX/share/kxmlgui5/{katesql,katesymbolviewer,katexmltools}, $KF5_PREFIX/share/kxmlgui5/{kwrite,tabswitcher} and $KF5_PREFIX/share/plasma/plasmoids/org.kde.plasma.katesessions

Short Descriptions

kate

is an advanced text editor for kde.

kwrite

is a text editor for KDE, that is a light version of kate.

Last updated on 2017-02-20 15:49:32 -0800

Kdenlive-16.12.2

Introduction to Kdenlive

The Kdenlive package is a KF5 based video editor.

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

Package Information

Kdenlive Dependencies

Required

KDE Frameworks-5.31.0 mlt-6.4.1, and v4l-utils-1.12.3 (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kdenlive5

Installation of Kdenlive

Install Kdenlive by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: kdenlive and kdenlive_render
Installed Libraries: mltpreview.so
Installed Directories: $KF5_PREFIX/share/doc/HTML/*/kdenlive, $KF5_PREFIX/share/kdenlive, and $KF5_PREFIX/share/kxmlgui5/kdenlive

Short Descriptions

kdenlive

is an open source non-linear video editor which supports a large number of formats.

kdenlive_render

is a render program for kdenlive.

Last updated on 2017-02-20 15:49:32 -0800

KMix-16.12.2

Introduction to KMix

The KMix package contains a KF5 based Sound Mixer application.

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

Package Information

KMix Dependencies

Required

KDE Frameworks-5.31.0

Recommended
Optional

libcanberra-0.30 and PulseAudio-10.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kmix5

Installation of KMix

Install KMix by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -DKMIX_KF5_BUILD=1                 \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DKMIX_KF5_BUILD=1: This switch is used to ensure that KDE Frameworks 5 based application is built.

Contents

Installed Programs: kmix, kmixctrl, and kmixremote
Installed Libraries: libkdeinit5_kmixctrl.so and libkdeinit5_kmix.so
Installed Directories: $KF5_PREFIX/share/kmix

Short Descriptions

kmix

is a mini audio mixer for kde.

kmixctrl

is used to save or restore the settings of kmix.

kmixremote

is a utility to mute, get and set volume levels.

Last updated on 2017-02-20 15:49:32 -0800

Khelpcenter-16.12.2

Introduction to Khelpcenter

Khelpcenter is an application to show KDE Applications' documentation.

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

Package Information

Khelpcenter Dependencies

Required

grantlee-5.1.0, KDE Frameworks-5.31.0, libxml2-2.9.4, and xapian-1.4.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/khelpcenter

Installation of Khelpcenter

Install khelpcenter by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install  &&

mv -v $KF5_PREFIX/share/kde4/services/khelpcenter.desktop /usr/share/applications/ &&
rm -rv $KF5_PREFIX/share/kde4

Contents

Installed Program: khelpcenter
Installed Libraries: libkdeinit5_khelpcenter.so
Installed Directories: $KF5_PREFIX/share/khelpcenter, $KF5_PREFIX/share/kxmlgui5/khelpcenter, and $KF5_PREFIX/share/doc/HTML/en/{khelpcenter,fundamentals,onlinehelp}

Short Descriptions

khelpcenter

is the help viewer for KDE applications.

Last updated on 2017-02-20 15:49:32 -0800

Konsole-16.12.2

Introduction to Konsole

The Konsole package is a KF5 based terminal emulator.

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

Package Information

Konsole Dependencies

Required

KDE Frameworks-5.31.0,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/konsole5

Installation of Konsole

Install Konsole by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: konsole and konsoleprofile
Installed Libraries: libkdeinit5_konsole.so and libkonsoleprivate.so
Installed Directories: $KF5_PREFIX/share/doc/HTML/*/konsole, $KF5_PREFIX/share/konsole, and $KF5_PREFIX/share/kxmlgui5/konsole

Short Descriptions

konsole

is an X terminal emulation which provides a command-line interface.

konsoleprofile

is a command-line tool to change the current tab's profile options.

Last updated on 2017-02-20 15:49:32 -0800

libkexiv2-16.12.2

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-8.0 platform.

Package Information

libkexiv2 Dependencies

Required

KDE Frameworks-5.31.0 and Exiv2-0.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libkexiv2

Installation of libkexiv2

Install libkexiv2 by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5KExiv2.so
Installed Directories: $KF5_PREFIX/include/KF5/KExiv2 and $KF5_PREFIX/lib/cmake/KF5KExiv2

Last updated on 2017-02-20 15:49:32 -0800

Okular-16.12.2

Introduction to Okular

Okular is a document viewer for KDE. It can view documents of many types including PDF, PostScript, TIFF, Microsoft CHM, DjVu, DVI, XPS and ePub.

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

Package Information

Okular Dependencies

Required

KDE Frameworks-5.31.0,

Recommended
Optional

qca-2.1.1, kpimtextedit, libspectre (for PostScript support), libchm, libepub, and Mobipocket

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/okular5

Installation of Okular

Install Okular by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: okular
Installed Library: libOkular5Core.so
Installed Directories: $KF5_PREFIX/include/okular, $KF5_PREFIX/lib/cmake/Okular5, $KF5_PREFIX/lib/plugins/okular, $KF5_PREFIX/lib/qml/org/kde/okular, $KF5_PREFIX/share/kxmlgui5/okular, $KF5_PREFIX/share/okular, $KF5_PREFIX/share/doc/HTML/en/okular, and $KF5_PREFIX/share/kpackage/genericqml/org.kde.mobile.okular

Short Descriptions

okular

is a document viewer.

Last updated on 2017-02-20 15:49:32 -0800

libkdcraw-16.12.2

Introduction to libkdcraw

Libkdcraw is a KDE wrapper around the libraw-0.18.1 library for manipulating image metadata.

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

Package Information

libkdcraw Dependencies

Required

KDE Frameworks-5.31.0 and libraw-0.18.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libkdcraw

Installation of libkdcraw

Install libkdcraw by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5KDcraw.so
Installed Directories: $KF5_PREFIX/include/KF5/KDCRAW and $KF5_PREFIX/lib/cmake/KF5KDcraw

Last updated on 2017-02-20 15:49:32 -0800

Gwenview-16.12.2

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-8.0 platform.

Package Information

Gwenview Dependencies

Required

Exiv2-0.25, KDE Frameworks-5.31.0, and Little CMS-2.8

Recommended
Optional

KF5Kipi

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gwenview

Installation of Gwenview

Install Gwenview by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: gwenview
Installed Libraries: libgwenviewlib.so and gvpart.so
Installed Directories: $KF5_PREFIX/share/{kxmlgui5/gvpart,kxmlgui5/org.kde.gwenview,gwenview,/doc/HTML/en/gwenview}

Short Descriptions

gwenview

is the KDE image viewer.

Last updated on 2017-02-20 15:49:32 -0800

libkcddb-16.12.2

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-8.0 platform.

Package Information

libkcddb Dependencies

Required

KDE Frameworks-5.31.0 and libmusicbrainz-5.1.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libkcddb

Installation of libkcddb

Install libkcddb by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev ..                        &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: libKF5Cddb.so and kcm_cddb.so
Installed Directories: $KF5_PREFIX/include/KF5/KF5Cddb and $KF5_PREFIX/lib/cmake/KF5Cddb

Short Descriptions

libkcddb.so

contains functions used to retrieve audio CD meta data from the internet.

Last updated on 2017-02-20 15:49:32 -0800

k3b-2017-02-12

Introduction to K3b

The K3b package contains a KF5-based graphical interface to the Cdrtools and dvd+rw-tools CD/DVD manipulation tools. It also combines the capabilities of many other multimedia packages into one central interface to provide a simple-to-operate application that can be used to handle many of your CD/DVD recording and formatting requirements. It is used for creating audio, data, video and mixed-mode CDs as well as copying, ripping and burning CDs and DVDs.

Though k3b can be used to copy almost any DVD to similar medium, it does not provide a way to copy, or reproduce a double-layer DVD onto single-layer medium. Of course, there is not a program anywhere on any platform that can make an exact duplicate of a double-layer DVD onto a single-layer disk, there are programs on some platforms that can compress the data on a double-layer DVD to fit on a single-layer DVD producing a duplicate, but compressed, image. If you need to copy the contents of a double-layer DVD to single-layer medium, you may want to look at the RMLCopyDVD package.

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

Package Information

Note

This package has been extracted from the developer's git repository because a stable kf5 based release has not yet been made. It extracts to the directory 'k3b'.

K3b Dependencies

Required

KDE Frameworks-5.31.0, libkcddb-16.12.2, libsamplerate-0.1.9, and shared-mime-info-1.8

There are programs from three packages that k3b will look for at runtime: Cdrtools (required to burn CD-ROM media), dvd+rw-tools-7.1 (required to burn or format DVD media), and Cdrdao-1.2.3 (required to burn CD-ROM media in DAO (Disk At Once) mode). If you don't need the capability provided by any of the three packages, you don't have to install it. However, a warning message will be generated every time you run the k3b program if any are not installed.

Recommended
Optional

FLAC-1.3.2, LAME-3.99.5, libmad-0.15.1b, libsndfile-1.0.27, libvorbis-1.3.5, libmusicbrainz-2.1.5, and Musepack (libmpcdec)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/k3b

Installation of K3b

Install K3b by running the following commands:

Note

If you use the download link from a browser, you might get a file called k3b-2.0.3a.tar.gz: there are both 2.0.3 and 2.0.3a versions in that directory. There is an old report online which claims that two files in these tarballs differ, but both extract to k3b-2.0.3 and have the same md5sum.

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev ..                        &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: k3b
Installed Libraries: libk3blib.so, libk3bdevice.so, and numerous plugin modules for the installed dependencies
Installed Directories: $KF5_PREFIX/share/k3b and $KF5_PREFIX/share/doc/HTML/en/k3b

Short Descriptions

k3b

is the graphical CD/DVD program.

Last updated on 2016-08-31 22:11:41 -0500

Further KDE5 packages

This section did not provide instructions for all of the available packages in the KDE5 Software Compilation. The included packages were selected based on what most people would want to use on a standard desktop computer.

For a full list of available packages, have a look on the KDE5 servers at http://download.kde.org/stable/applications/16.12.2/src,

Note

Some packages, such as kde-baseapps, kde-runtime, and kmag listed in the link above are only for the older KDE4 and cannot be used with KF5.

Some additional packages worth mentioning are:

  • Juk: A lightweight music player.

  • Dragon: A video player.

  • Kcalc: A scientific calculator.

  • Kaccessible: Integration of accessibility utilities.

  • Kwalletmanager: A credentials management application.

  • Marble: A global map program.

  • A variety (about 40) of KDE games including: kpat, kfourinline, and kmines.

Note

Some packages will require additional dependencies. To determine what dependencies are needed, run from the top of the source tree:

cmake -Wno-dev -L .

Most of these packages can be built with the standard KDE5 instructions:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
      -DCMAKE_BUILD_TYPE=Release         \
      -DLIB_INSTALL_DIR=lib              \
      -DBUILD_TESTING=OFF                \
      -Wno-dev .. &&
make

And as the root user:

make install

Last updated on 2016-03-25 14:51:17 -0700

Chapter 32. KDE Plasma 5

KDE Plasma 5 is a desktop environment built using KDE Frameworks 5 and QML which runs on top of a fully hardware accelerated graphics stack using Qt5, QtQuick 2 and an OpenGL(-ES) scenegraph.

Because KDE Plasma 5 is so new, there are issues preventing proper operation on some systems in the LFS environment. When these issues are worked out, then the build instructions will be added here. For more information, see https://www.kde.org/announcements/plasma-5.4.0.php.

No additional configuration is needed before building the KDE Plasma 5 because it uses the same configuration that KDE Frameworks 5 uses.

Building Plasma 5

KDE Plasma 5 is a collection of packages based on top of KDE Frameworks 5 and QML. It has been derived from the monolithic KDE 4 desktop. They implement the KDE Display Environment (Plasma 5).

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

The instructions below build all of the Plasma 5 packages in one step by using a bash script.

Package Information

Plasma 5 Dependencies

Required

GTK+-2.24.31, GTK+-3.22.8, KDE Frameworks-5.31.0, libpwquality-1.3.0, libxkbcommon-0.7.1, Mesa-13.0.4 built with Wayland-1.12.0, NetworkManager-1.6.2, PulseAudio-10.0, Python-2.7.13, qca-2.1.1 (built with qt5), taglib-1.11.1, and xcb-util-cursor-0.1.3

Recommended
Optional

GLU-9.0.0, Xorg Synaptics Driver-1.9.0, appstream-qt, ibus, KDevPlatform, libgps, libhybris, libraw1394, mockcpp, packagekit-qt, Qalculate, Qapt, SCIM, and socat (for pam_kwallet)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kf5

Downloading KDE Plasma5

The easiest way to get the KDE Plasma5 packages is to use a single wget to fetch them all at once:

url=http://download.kde.org/stable/plasma/5.9.2/
wget -r -nH --cut-dirs=3 -A '*.xz' -np $url

The options used here are:
  -r            recurse through child directories
  -nH           disable generation of host-prefixed directories
  --cut-dirs=3  remove three levels of directories when saving
  -A '*.xz'     just get the *.xz files
  -np           don't get parent directories

Setting Package Order

The order of building files is important due to internal dependencies. Create the list of files in the proper order as follows:

cat > plasma-5.9.2.md5 << "EOF"
73bc77af6f711c06d6d3f1ef45f10160  kde-cli-tools-5.9.2.tar.xz
626a33ac01151206d3253e8c29d435ad  kdecoration-5.9.2.tar.xz
c9b35833c8d7c393d1bbb3dabc70f0d5  libkscreen-5.9.2.tar.xz
78dc80f2ea85bc819a232a8aa8179c69  libksysguard-5.9.2.tar.xz
5c276dcbe1d9ed7884246a34f6a3707a  breeze-5.9.2.tar.xz
f31d99fffcf1d8b339ae4a9cfec67856  breeze-gtk-5.9.2.tar.xz
153146a388091bf167ada1f436394d11  kscreenlocker-5.9.2.tar.xz
54e1676160447f7c8bc56b62242809d2  oxygen-5.9.2.tar.xz
09c1336a19629f9f2b64885b4104d23e  kinfocenter-5.9.2.tar.xz
abc2bb29f5e72c04840f24085b84a48c  ksysguard-5.9.2.tar.xz
35a815b1de64c4feb1670d21b85484e3  kwin-5.9.2.tar.xz
d711cf51ca3b21f1bed3ec367d6fbea8  systemsettings-5.9.2.tar.xz
0ab5467630ac11bcfe9d134449811641  plasma-workspace-5.9.2.tar.xz
9b5ea9445306520190a54e1e72b25d81  bluedevil-5.9.2.tar.xz
f5a8d06f99eacb828d5476001f21481c  kde-gtk-config-5.9.2.tar.xz
f9949eee01af23cf7e5c940ae24e815a  khotkeys-5.9.2.tar.xz
0183785beb44a066907c4d7a0025ba00  kmenuedit-5.9.2.tar.xz
8c4d6b9c36d8943a4c6d29313285d5d6  kscreen-5.9.2.tar.xz
77c383d9f4f38d962b0bfaf97740fc00  kwallet-pam-5.9.2.tar.xz
bd8b2ccb3feef5556e54134c48dcb4cd  kwayland-integration-5.9.2.tar.xz
1eb7128d2133ba378e2d816a75241f40  kwrited-5.9.2.tar.xz
f060f64201f77190902ceb0b2970a854  milou-5.9.2.tar.xz
fe07081e243c21a881e74811e21e5699  plasma-nm-5.9.2.tar.xz
843b66f9c01373a5f9e706bb0ed6857f  plasma-pa-5.9.2.tar.xz
96b3bce05e95880f2d971f0e50ddc997  plasma-workspace-wallpapers-5.9.2.tar.xz
3b83e658f8a3d8ca163f7f386204f7c8  polkit-kde-agent-1-5.9.2.tar.xz
0fbed265a6e2ddc201951d686c60a6c9  powerdevil-5.9.2.tar.xz
189bca8e52a9aa49e07979a73c2027ea  plasma-desktop-5.9.2.tar.xz
7d5bcc25bb81464e4d0a48cfcd88e4d0  kdeplasma-addons-5.9.2.tar.xz
0bd92b511f5cf038e3d2cdb3603079e1  kgamma5-5.9.2.tar.xz
6f7b588292a1a9b8dcf9b71bb14d7db2  ksshaskpass-5.9.2.tar.xz
#db4a5d3fba916641d011fce81cd62491  plasma-sdk-5.9.2.tar.xz
e9b418da105db2afd0174d4c0055e82b  sddm-kcm-5.9.2.tar.xz
54aa86277d27b2a7d10945375f46e781  user-manager-5.9.2.tar.xz
fc31095f62beb97e5794190f37f9723d  discover-5.9.2.tar.xz
#4eff8049e19ca87cab6c94d208089f62  breeze-grub-5.9.2.tar.xz
#6ff3b8b9d178c17f7b760d5da34b4eb7  breeze-plymouth-5.9.2.tar.xz
e64bd0bc6d95847e24b37335c4071483  kactivitymanagerd-5.9.2.tar.xz
777a8590c34777d0e9f5c40a6226b91a  plasma-integration-5.9.2.tar.xz
9bcb2aa6e73acc860389c0dfac76c242  plasma-tests-5.9.2.tar.xz
EOF

Note

The breeze-grub and breeze-plymouth packages above are both for customized support of Plymouth which is designed to be run within an initial ram disk during boot (see the section called “About initramfs”). The plasma-sdk package is optional and used for software development.

Installation of Plasma5

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Install all of the packages by running the following commands:

while read -r line; do

    # Get the file name, ignoring comments and blank lines
    if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
    file=$(echo $line | cut -d" " -f2)

    pkg=$(echo $file|sed 's|^.*/||')          # Remove directory
    packagedir=$(echo $pkg|sed 's|\.tar.*||') # Package directory

    tar -xf $file
    pushd $packagedir

       mkdir build
       cd    build

       cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
             -DCMAKE_BUILD_TYPE=Release         \
             -DLIB_INSTALL_DIR=lib              \
             -DBUILD_TESTING=OFF                \
             -Wno-dev ..  &&

        make
        as_root make install
    popd


    as_root rm -rf $packagedir
    as_root /sbin/ldconfig

done < plasma-5.9.2.md5

exit

cd $KF5_PREFIX/share/plasma/plasmoids

for j in $(find -name \*.js); do
  as_root ln -sfv ../code/$(basename $j) $(dirname $j)/../ui/
done

Command Explanations

ln -sfv ../code/$(basename $j) $(dirname $j)/../ui/: Create symbolic links so qml files can find needed javascript modules.

Configuring Plasma

Linux PAM Configuration

If you built Plasma with the recommended Linux PAM support, create necessary configuration files by running the following commands as the root user:

cat >> /etc/pam.d/kde << "EOF" 
# Begin /etc/pam.d/kde

auth     requisite      pam_nologin.so
auth     required       pam_env.so

auth     required       pam_succeed_if.so uid >= 1000 quiet
auth     include        system-auth

account  include        system-account
password include        system-password
session  include        system-session

# End /etc/pam.d/kde
EOF

cat > /etc/pam.d/kde-np << "EOF" 
# Begin /etc/pam.d/kde-np

auth     requisite      pam_nologin.so
auth     required       pam_env.so

auth     required       pam_succeed_if.so uid >= 1000 quiet
auth     required       pam_permit.so

account  include        system-account
password include        system-password
session  include        system-session

# End /etc/pam.d/kde-np
EOF

cat > /etc/pam.d/kscreensaver << "EOF"
# Begin /etc/pam.d/kscreensaver

auth    include system-auth
account include system-account

# End /etc/pam.d/kscreensaver
EOF

Starting Plasma5

You can start Plasma5 from runlevel 3, using xinit-1.3.4, or from runlevel 5, using a Display Manager, such as sddm-0.14.0.

To start Plasma 5 using xinit-1.3.4, run the following commands:

cat > ~/.xinitrc << "EOF"
ck-launch-session dbus-launch --exit-with-session $KF5_PREFIX/bin/startkde
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 consolekit and/or dbus-launch, e.g., just using startkde in ~/.xinitrc. However some capabilities such as mounting or umounting file systems from a file manager will not be possible, or the reboot option may 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: There are too many plasma programs (50 in /opt/kf5/bin) to list separately here.
Installed Libraries: There are too many plasma libraries (39 in /opt/kf5/lib) to list separately here.
Installed Directories: There are too many plasma directories (over 1000 in /opt/kf5) to list separately here.

Last updated on 2015-09-24 16:44:04 -0500

Part VIII. Selected GNOME Applications

Chapter 33. GNOME Libraries and Utilities

The objective of this section is not to build a GNOME desktop, because it depends on systemd, which BLFS doesn't support. Rather, it provides packages required for some platform independent GNOME applications to build and run properly under any Window Manager (e.g. Fluxbox, Icewm, Openbox, Sawfish), or Desktop Environment (e.g. KDE, XFCE, LXDE).

Libraries

Last updated on 2015-09-20 15:38:20 -0700

Gcr-3.20.0

Introduction to Gcr

The Gcr package contains libraries used for displaying certificates and accessing key stores. It also provides the viewer for crypto files on the GNOME Desktop.

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

Package Information

Gcr Dependencies

Required

GLib-2.50.3, libgcrypt-1.7.6, libtasn1-4.10, and p11-kit-0.23.2

Recommended
Optional

GTK-Doc-1.25 and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gcr

Installation of Gcr

Install Gcr by running the following commands:

sed -i -r 's:"(/desktop):"/org/gnome\1:' schema/*.xml &&

./configure --prefix=/usr     \
            --sysconfdir=/etc &&
make

To test the results, issue: make -k check. The tests must be run from an X Terminal or similar, but two still fail.

Now, as the root user:

make install

Command Explanations

sed ... schema/*.xml: This command fixes a deprecated entry in the schema template.

--without-gtk: Use this switch if you haven't installed GTK+-3.22.8. Note that gcr-viewer will not be installed if this is passed to configure.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: gcr-viewer
Installed Libraries: libgck-1.so, libgcr-3.so, libgcr-base-3.so and libgcr-ui-3.so
Installed Directories: /usr/include/gck-1, /usr/{include,share,share/gtk-doc/html}/gcr-3, and /usr/share/gtk-doc/html/gck

Short Descriptions

gcr-viewer

is used to view certificate and key files.

libgck-1.so

contains GObject bindings for PKCS#11.

libgcr-3.so

contains functions for high level crypto parsing.

Last updated on 2017-02-18 18:01:35 -0800

gsettings-desktop-schemas-3.22.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-8.0 platform.

Package Information

GSettings Desktop Schemas Dependencies

Required

GLib-2.50.3

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gsettings-desktop-schemas

Installation of GSettings Desktop Schemas

Install GSettings Desktop Schemas by running the following commands:

sed -i -r 's:"(/system):"/org/gnome\1:g' schemas/*.in &&

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

This package does not come with a test suite.

Now, as the root user:

make install

Note

If you installed the package to your system using a “DESTDIR” method, /usr/share/glib-2.0/schemas/gschemas.compiled was not updated/created. Create (or update) the file using the following command as the root user:

glib-compile-schemas /usr/share/glib-2.0/schemas

Command Explanations

sed ... schemas/*.in: This command fixes some deprecated entries in the schema templates.

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/include/gsettings-desktop-schemas and /usr/share/GConf/gsettings

Last updated on 2017-02-15 16:04:09 -0800

libsecret-0.18.5

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-8.0 platform.

Package Information

libsecret Dependencies

Required

GLib-2.50.3

Recommended
Optional

GTK-Doc-1.25 and docbook-xml-4.5, docbook-xsl-1.79.1, and libxslt-1.1.29 (to build manual pages)

Optional (Required for the testsuite)

D-Bus Python-1.2.4, Gjs-1.46.0, and PyGObject-2.28.6

Runtime Dependency

gnome-keyring-3.20.0

Note

Any package requiring libsecret expects GNOME Keyring to be present at runtime.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsecret

Installation of libsecret

Install libsecret by running the following commands:

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

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--disable-manpages: Use this switch if you have not installed libxslt-1.1.29 and DocBook packages.

--disable-gcrypt: Use this switch if you have not installed the recommended dependency of libgcrypt-1.7.6.

Contents

Installed Program: secret-tool
Installed Library: libsecret-1.so
Installed Directories: /usr/include/libsecret-1 and /usr/share/gtk-doc/html/libsecret-1

Short Descriptions

secret-tool

is a command line tool that can be used to store and retrieve passwords.

libsecret-1.so

contains the libsecret API functions.

Last updated on 2017-02-18 18:01:35 -0800

totem-pl-parser-3.10.7

Introduction to Totem PL Parser

The Totem PL Parser package contains a simple GObject-based library used to parse a host of playlist formats, as well as save those.

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

Package Information

Totem PL Parser Dependencies

Required

GMime-2.6.23 and libsoup-2.56.0

Recommended
Optional

GTK-Doc-1.25, LCOV, and libquvi (version 0.9) and libquvi-scripts - if they are installed, then lua-socket (git) is necessary for the tests

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/totem-pl-parser

Installation of Totem PL Parser

Install Totem PL Parser by running the following commands:

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

To test the results, issue: make check. You will need an active internet connection in order to successfully complete all tests.

Now, as the root user:

make install

Command Explanations

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

--disable-quvi: This switch disables libquvi support (libquvi is broken with Lua-5.3).

--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: libtotem-plparser-mini.so and libtotem-plparser.so
Installed Directories: /usr/include/totem-pl-parser and /usr/share/gtk-doc/html/totem-pl-parser

Short Descriptions

libtotem-plparser.so

is the Totem Playlist Parser library.

libtotem-plparser-mini.so

is the Totem Playlist Parser library, mini version.

Last updated on 2017-02-19 13:23:34 -0800

VTE-0.46.1

Introduction to VTE

The VTE package contains a termcap file implementation for terminal emulators.

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

Package Information

VTE Dependencies

Required

GTK+-3.22.8, libxml2-2.9.4, and pcre2-10.23

Recommended
Optional

GnuTLS-3.5.9, GTK-Doc-1.25, Vala-0.34.4, and Glade

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vte

Installation of VTE

Install VTE by running the following commands:

sed -i '/Werror/d' configure.ac &&
autoreconf                      &&

./configure --prefix=/usr          \
            --sysconfdir=/etc      \
            --disable-static       \
            --enable-introspection &&
make

To test the results, issue make check.

Now, as the root user:

make install

Command Explanations

sed ... configure.ac: This command removes -Werror options that prevent the build from completing.

--enable-introspection: This switch enables Gobject Introspection bindings. Remove if you don't have gobject-introspection-1.50.0 installed.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: vte-2.91
Installed Library: libvte-2.91.so
Installed Directories: /usr/include/vte-2.91 and /usr/share/gtk-doc/html/vte-2.91

Short Descriptions

vte-2.91

is a test application for the VTE libraries.

libvte-2.91.so

is a library which implements a terminal emulator widget for GTK+ 3.

Last updated on 2017-02-19 13:23:34 -0800

yelp-xsl-3.20.1

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-8.0 platform.

Package Information

Yelp XSL Dependencies

Required

libxslt-1.1.29 and itstool-2.0.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/yelp-xsl

Installation of Yelp XSL

Install Yelp XSL 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/yelp-xsl

Last updated on 2017-02-19 13:23:34 -0800

GConf-3.2.6

Introduction to GConf

The GConf package contains a configuration database system used by many GNOME applications.

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

Package Information

GConf Dependencies

Required

dbus-glib-0.108 and libxml2-2.9.4

Recommended
Optional

GTK-Doc-1.25 and OpenLDAP-2.4.44

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gconf

Installation of GConf

Install GConf by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --disable-orbit \
            --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
ln -s gconf.xml.defaults /etc/gconf/gconf.xml.system

Command Explanations

--disable-orbit: This switch is required if ORBit2 is not installed. ORBit2 is a deprecated package.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: gconf-merge-tree, gconftool-2, gsettings-data-convert and gsettings-schema-convert
Installed Libraries: libgconf-2.so and libgsettingsgconfbackend.so (GIO Module installed in /usr/lib/gio/modules)
Installed Directories: /etc/gconf, /usr/include/gconf, /usr/lib/GConf, /usr/share/gtk-doc/html/gconf and /usr/share/sgml/gconf

Short Descriptions

gconf-merge-tree

merges an XML filesystem hierarchy.

gconftool-2

is a command line tool used for manipulating the GConf database.

gsettings-data-convert

reads values out of the users GConf database and stores them in GSettings.

gsettings-schemas-convert

converts between GConf and GSettings schema file formats.

libgconf-2.so

provides the functions necessary to maintain the configuration database.

Last updated on 2017-02-17 16:10:58 -0800

Gjs-1.46.0

Introduction to Gjs

Gjs is a set of Javascript bindings for GNOME.

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

Package Information

Gjs Dependencies

Required

Cairo-1.14.8, gobject-introspection-1.50.0, and JS2-24.2.0

Optional

Systemtap

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gjs

Installation of Gjs

Install Gjs 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: gjs (symlink) and gjs-console
Installed Library: libgjs.so
Installed Directories: /usr/include/gjs-1.0 and /usr/lib{,exec}/gjs

Short Descriptions

libgjs.so

contains the GNOME JavaScript bindings.

Last updated on 2017-02-18 22:13:39 -0800

gnome-autoar-0.1.1

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-8.0 platform.

Package Information

gnome-autoar Dependencies

Required

libarchive-3.2.2 and GTK+-3.22.8

Optional

GTK-Doc-1.25 (for building documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-autoar

Installation of gnome-autoar

Install gnome-autoar by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Libraries: libgnome-autoar-0.so and libgnome-autoar-gtk-0.so
Installed Directories: /usr/include/gnome-autoar0 and /usr/share/gtk-doc/html/gnome-autoar

Short Descriptions

libgnome-autoar-0.so

provides API functions for automatic archive management.

libgnome-autoar-gtk-0.so

provides GTK+ widgets to aid in automatic archive management.

Last updated on 2017-02-19 13:23:34 -0800

gnome-desktop-3.22.2

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-8.0 platform.

Package Information

GNOME Desktop Dependencies

Required

gsettings-desktop-schemas-3.22.0, GTK+-3.22.8, ISO Codes-3.74, itstool-2.0.2, libxml2-2.9.4, and xkeyboard-config-2.20

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-desktop

Installation of GNOME Desktop

Install GNOME Desktop by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-gnome-distributor="Some Name": Use this parameter to supply a custom name in the “Distributor:” field of the “GNOME About” display window.

--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: libgnome-desktop-3.so
Installed Directories: /usr/include/gnome-desktop-3.0, /usr/share/gnome, /usr/share/gtk-doc/html/gnome-desktop3, and /usr/share/help/*/{fdl,gpl,lgpl}

Short Descriptions

libgnome-desktop-3.so

contains functions shared by several GNOME applications.

Last updated on 2017-02-19 13:23:34 -0800

gnome-video-effects-0.4.3

Introduction to GNOME Video Effects

The GNOME Video Effects package contains a collection of GStreamer effects.

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

Package Information

GNOME Video Effects Dependencies

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-video-effects

Installation of GNOME Video Effects

Install GNOME Video Effects by running the following commands:

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

This package does not come with a testsuite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directory: /usr/share/gnome-video-effects

Last updated on 2017-02-19 13:23:34 -0800

libgtop-2.34.2

Introduction to libgtop

The libgtop package contains the GNOME top libraries.

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

Package Information

libgtop Dependencies

Required

GLib-2.50.3 and Xorg Libraries

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libgtop

Installation of libgtop

Install libgtop by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Library: libgtop-2.0.so
Installed Directories: /usr/include/libgtop-2.0 and /usr/share/gtk-doc/html/libgtop

Short Descriptions

libgtop-2.0.so

contains functions that allow access to system performance data.

Last updated on 2017-02-19 13:23:34 -0800

libpeas-1.20.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-8.0 platform.

Package Information

libpeas Dependencies

Required

gobject-introspection-1.50.0 and GTK+-3.22.8

Recommended
Optional

GDB-7.12.1, GTK-Doc-1.25, Valgrind-3.12.0, Glade, Seed, LGI (for LUA bindings, built with LUA-5.1), with either luajit or LUA-5.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libpeas

Installation of libpeas

Install libpeas by running the following commands:

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

To test the results, issue: make check. An active graphical session with bus address is necessary to run the tests.

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 Program: peas-demo
Installed Libraries: libpeas-1.0.so and libpeas-gtk-1.0.so
Installed Directories: /usr/include/libpeas-1.0, /usr/lib/libpeas-1.0, /usr/lib/peas-demo and /usr/share/gtk-doc/html/libpeas

Short Descriptions

peas-demo

is the Peas demo program.

libpeas-1.0.so

contains the libpeas API functions.

libpeas-gtk-1.0.so

contains the libpeas GTK+ widgets.

Last updated on 2017-02-19 13:23:34 -0800

libwnck-3.20.1

Introduction to libwnck

The libwnck package contains the Window Navigator Construction Kit.

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

Package Information

libwnck Dependencies

Required

GTK+-3.22.8

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libwnck

Installation of libwnck

Install libwnck 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 Program: wnckprop and wnck-urgency-monitor
Installed Library: libwnck-3.so
Installed Directories: /usr/include/libwnck-3.0 and /usr/share/gtk-doc/html/libwnck-3.0

Short Descriptions

wnckprop

is used to print or modify the properties of a screen/workspace/window, or to interact with it.

libwnck-3.so

contains functions for writing pagers and task lists.

Last updated on 2017-02-19 13:23:34 -0800

Required Runtime Dependencies

Last updated on 2016-06-12 18:24:27 -0700

DConf-0.26.0 / DConf-Editor-3.22.3

Introduction to DConf

The DConf package contains a low-level configuration system. Its main purpose is to provide a backend to GSettings on platforms that don't already have configuration storage systems.

The DConf-Editor, as the name suggests, is a graphical editor for the DConf database. Installation is optional, because gsettings from GLib-2.50.3 provides similar functionality on the commandline.

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

Package Information

Additional Package Information

DConf Dependencies

Required

dbus-1.10.14, GLib-2.50.3, GTK+-3.22.8 (for the editor), and libxml2-2.9.4 (for the editor)

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dconf

Installation of DConf

Install DConf by running the following commands:

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

This package does not come with a test suite.

As the root user:

make install

Now, optionally install the editor:

tar -xf ../dconf-editor-3.22.3.tar.xz &&
cd dconf-editor-3.22.3 &&

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

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: dconf and dconf-editor
Installed Libraries: libdconf-dbus-1.so, libdconf.so, and libdconfsettings.so (GIO Module installed in /usr/lib/gio/modules)
Installed Directories: /usr/{include,share/gtk-doc/html}/dconf and /usr/include/dconf-dbus-1

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.

libdconf-dbus-1.so

contains the DConf client API functions for D-Bus.

Last updated on 2017-02-19 16:31:30 -0800

Gvfs-1.30.3

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-8.0 platform.

Package Information

Gvfs Dependencies

Required

dbus-1.10.14 and GLib-2.50.3

Recommended
Optional

Apache-2.4.25, Avahi-0.6.32, BlueZ-5.43, dbus-glib-0.108, Fuse-2.9.7, GTK-Doc-1.25, libarchive-3.2.2, libcdio-0.94, libgcrypt-1.7.6, libxml2-2.9.4, libxslt-1.1.29, OpenSSH-7.4p1, Samba-4.5.5, GNOME Online Accounts, libbluray, libgphoto2, libimobiledevice, libmtp, and Twisted,

Optional (Runtime)

obex-data-server-0.4.6

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gvfs

Installation of Gvfs

Install Gvfs by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --disable-gphoto2 &&
make

To test the results, issue: make -k check. Some tests (potentially half) may fail, normally due to a missing optional dependency (Twisted).

Now, as the root user:

make 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

--disable-gphoto2: This switch is required if libgphoto2 is not installed. Remove it if you installed libgphoto2 and wish to use it with Gvfs.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: gvfs-cat, gvfs-copy, gvfs-info, gvfs-less, gvfs-ls, gvfs-mime, gvfs-mkdir, gvfs-monitor-dir, gvfs-monitor-file, gvfs-mount, gvfs-move, gvfs-open, gvfs-rename, gvfs-rm, gvfs-save, gvfs-set-attribute, gvfs-trash, and gvfs-tree
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

gvfs-cat

concatenates the given files and prints them to the standard output.

gvfs-copy

copies a file from one URI location to another.

gvfs-info

shows information about the given locations.

gvfs-less

executes less using the VFS as the input preprocesor, so less can access any resource accessible by any of the Gvfs backends.

gvfs-ls

lists information about the given locations.

gvfs-mime

is used to query information about applications that are registered to handle a mime-type, or set the default handler for a mime-type.

gvfs-mkdir

creates a directory specified by an URI.

gvfs-monitor-dir

prints information about file creation, deletion, file content and attribute changes and mount and unmount operations inside the specified directories.

gvfs-monitor-file

prints information about creation, deletion, content and attribute changes and mount and unmount operations affecting the monitored files.

gvfs-mount

provides commandline access to various aspects of GIOs mounting functionality.

gvfs-move

moves a file from one URI location to another.

gvfs-open

opens files with the default application that is registered to handle files of that type.

gvfs-rename

changes the name of a file or directory.

gvfs-rm

removes a file.

gvfs-save

reads from the standard input and saves the data to the given location.

gvfs-set-attribute

allows to set a file attribute on a file.

gvfs-trash

sends files or directories to the "Trashcan".

gvfs-tree

lists the contents of the given directories recursively, in a tree-like format.

libgvfscommon.so

contains the common API functions used in Gvfs programs.

Last updated on 2017-02-20 11:43:55 -0800

Nautilus-3.22.2

Introduction to Nautilus

The Nautilus package contains the GNOME file manager.

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

Package Information

Additional Downlaods

Nautilus Dependencies

Required

gnome-autoar-0.1.1, gnome-desktop-3.22.2, and libnotify-0.7.7

Recommended
Optional

GTK-Doc-1.25 and Tracker

Recommended (Runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/nautilus

Installation of Nautilus

Install Nautilus by running the following commands:

patch -Np1 -i ../nautilus-3.22.2-disable_batch_rename_support-1.patch &&
autoreconf -fiv &&
./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --disable-selinux    \
            --disable-tracker    \
            --disable-packagekit \
            --disable-batch-rename &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-selinux: This switch disables the use of selinux which isn't supported by BLFS.

--disable-packagekit: This switch disables the use of PackageKit which isn't suitable for BLFS.

--disable-tracker: This switch disables the use of Tracker which isn't part of BLFS.

--disable-batch-rename: This switch disables Batch Rename support since it requires Tracker to be installed.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--disable-xmp: Use this switch if you did not install Exempi.

--disable-libexif: Use this switch if you did not install libexif.

Contents

Installed Programs: nautilus, nautilus-autorun-software, and nautilus-desktop
Installed Library: libnautilus-extension.so
Installed Directories: /usr/{include,lib}/nautilus and /usr/share/{gnome-shell/search-providers,gtk-doc/html/libnautilus-extension}

Short Descriptions

nautilus

is the GNOME file manager.

libnautilus-extension.so

supplies the functions needed by the file manager extensions.

Last updated on 2017-02-20 11:43:55 -0800

gnome-keyring-3.20.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-8.0 platform.

Package Information

GNOME Keyring Dependencies

Required

dbus-1.10.14 and Gcr-3.20.0

Recommended
Optional

LCOV, libcap-ng, GnuPG-2.1.18, OpenSSH-7.4p1 and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-keyring

Installation of GNOME Keyring

Install GNOME Keyring by running the following commands:

sed -i -r 's:"(/desktop):"/org/gnome\1:' schema/*.xml &&

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --with-pam-dir=/lib/security &&
make

A session bus address is necessary to run the tests. To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

sed ... schema/*.xml: This command fixes a deprecated entry in the schema template.

--with-pam-dir=/lib/security: This switch specifies where the PAM module will be installed.

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

Short Descriptions

gnome-keyring-daemon

is a session daemon that keeps passwords for users.

Last updated on 2017-02-18 22:13:39 -0800

Yelp-3.22.0

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-8.0 platform.

Package Information

Yelp Dependencies

Required

gsettings-desktop-schemas-3.22.0, WebKitGTK+-2.14.5 and yelp-xsl-3.20.1

Recommended
Optional

GTK-Doc-1.25

Note

The Yelp package is not required for a functional GNOME Desktop. Note, however, that without Yelp you will not be able to view the built-in Help provided by core GNOME and many of the support applications.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/yelp

Installation of Yelp

Install Yelp by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
update-desktop-database

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

update-desktop-database: This ensures that /usr/share/applications/mimeinfo.cache will be updated and therefore the help in gnome applications will work. Some packages run this command during their installation, but yelp and the gnome applications do not.

Contents

Installed Program: gnome-help (symlink) and yelp
Installed Library: libyelp.so
Installed Directories: /usr/{include,share/gtk-doc/html}/libyelp and /usr/{lib,share}/yelp

Short Descriptions

yelp

is the GNOME Help Browser.

libyelp.so

contains the Yelp API functions.

Last updated on 2017-02-20 15:27:17 -0800

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-8.0 platform.

Package Information

Notification Daemon Dependencies

Required

GTK+-3.22.8 and libcanberra-0.30 (Built with GTK+-3.22.8 support).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/notification-daemon

Installation of Notification Daemon

Install Notification Daemon by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  &&
make

This package does not come with a testsuite.

Now, as the root user:

make install

You can test the notification daemon with the command notify-send:

pgrep -l notification-da &&
notify-send -i info Information "Hi ${USER}, This is a Test"

The command pgrep -l notification-da is added to assure that it is the daemon of this package that is running, not another one, e.g. the daemon from xfce4-notifyd-0.2.4.

Contents

Installed Program: none
Installed Libraries: none
Installed Directory: none

Last updated on 2017-02-18 22:13:39 -0800

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-8.0 platform.

Package Information

Polkit GNOME Dependencies

Required

GTK+-3.22.8 and Polkit-0.113

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/polkit-gnome

Installation of Polkit GNOME

Install Polkit GNOME by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Configuring Polkit GNOME

Automatic Startup

For the authentification framework to work, polkit-gnome-authentification-agent-1 needs to be started. However, make install did not install a startup file for the Polkit GNOME so you have to create it by yourself.

Issue the following commands as the root user to create a startup file for Polkit GNOME:

mkdir -p /etc/xdg/autostart &&
cat > /etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop << "EOF"
[Desktop Entry]
Name=PolicyKit Authentication Agent
Comment=PolicyKit Authentication Agent
Exec=/usr/libexec/polkit-gnome-authentication-agent-1
Terminal=false
Type=Application
Categories=
NoDisplay=true
OnlyShowIn=GNOME;XFCE;Unity;
AutostartCondition=GNOME3 unless-session gnome
EOF

Contents

Installed Program: polkit-gnome-authentication-agent-1
Installed Libraries: None
Installed Directory: None

Short Descriptions

polkit-gnome-authentication-agent-1

is the Polkit authentication agent.

Last updated on 2017-02-17 12:01:55 -0800

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

Introduction to Baobab

The Baobab package contains a graphical directory tree analyzer.

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

Package Information

Baobab Dependencies

Required

adwaita-icon-theme-3.22.0, GTK+-3.22.8, itstool-2.0.2 and Vala-0.34.4

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/baobab

Installation of Baobab

Install Baobab 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: baobab
Installed Libraries: None
Installed Directories: /usr/share/help/*/baobab

Short Descriptions

baobab

is a graphical tool used to analyze disk usage.

Last updated on 2017-02-21 11:59:18 -0800

Brasero-3.12.1

Introduction to Brasero

Brasero is an application used to burn CD/DVD on the GNOME Desktop. It is designed to be as simple as possible and has some unique features that enable users to create their discs easily and quickly.

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

Package Information

Brasero Dependencies

Required

gst-plugins-base-1.10.3, itstool-2.0.2, libcanberra-0.30, and libnotify-0.7.7

Recommended
Optional

GTK-Doc-1.25 and Tracker

Recommended (Runtime)
Optional (Runtime)

Cdrdao-1.2.3, libdvdcss-1.4.0, one of cdrkit or cdrtools (conflict), and VCDImager

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/brasero

Installation of Brasero

Install Brasero by running the following commands:

./configure --prefix=/usr                \
            --enable-compile-warnings=no \
            --enable-cxx-warnings=no     &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-*-warnings=no: These switches fix build problems under GCC-6.x compilers.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: brasero
Installed Libraries: libbrasero-{burn,media,utils}3.so, and /usr/lib/nautilus/extensions-3.0/libnautilus-brasero-extension.so
Installed Directories: /usr/include/brasero3, /usr/lib/brasero3, /usr/share/brasero, /usr/share/gtk-doc/html/libbrasero-{burn,media}, and /usr/share/help/*/brasero

Short Descriptions

brasero

is a simple and easy to use CD/DVD burning application for the GNOME Desktop.

libbrasero-burn3.so

contains the Burning API functions.

libbrasero-media3.so

contains the Media API functions.

libbrasero-utils3.so

contains the Brasero API functions.

Last updated on 2017-02-21 11:59:18 -0800

Cheese-3.22.1

Introduction to Cheese

Cheese is used to take photos and videos with fun graphical effects.

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

Package Information

Cheese Dependencies

Required

clutter-gst-3.0.22, clutter-gtk-1.8.2, gnome-desktop-3.22.2, gnome-video-effects-0.4.3, gst-plugins-bad-1.10.3, gst-plugins-good-1.10.3 (built with v4l-utils-1.12.3), itstool-2.0.2, libcanberra-0.30, libgudev-231, and librsvg-2.40.16

Recommended
Optional

GTK-Doc-1.25, LCOV , and Nautilus SendTo

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cheese

Kernel Configuration

Depending on your camera, enable the appropriate options and recompile the kernel if necessary:

Device Drivers  --->
  Multimedia support --->
    <*> Cameras/video grabbers support  [CONFIG_MEDIA_CAMERA_SUPPORT]
    <*> Media USB Adapter  --->         [CONFIG_MEDIA_USB_SUPPORT]
              Select device(s) as needed

Installation of Cheese

Install Cheese by running the following commands:

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

This package does not have a working testsuite.

Now, as the root user:

make install

Contents

Installed Program: cheese
Installed Library: libcheese.so and libcheese-gtk.so
Installed Directories: /usr/{include,share/gtk-doc/html,share/help/*}/cheese

Short Descriptions

cheese

is a webcam tool with graphical effects.

libcheese.so

contains the Cheese API functions.

libcheese-gtk.so

contains the Cheese GTK+ widgets.

Last updated on 2017-02-20 15:27:17 -0800

EOG-3.20.5

Introduction to EOG

EOG is an application used for viewing and cataloging image files on the GNOME Desktop. It has basic editing capabilites.

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

Package Information

EOG Dependencies

Required

adwaita-icon-theme-3.22.0, gnome-desktop-3.22.2, itstool-2.0.2, libpeas-1.20.0, and shared-mime-info-1.8

Recommended
Optional

Exempi-2.4.2, GTK-Doc-1.25, Little CMS-2.8, and libexif-0.6.21

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/eog

Installation of EOG

Install EOG 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 Program: eog
Installed Library: libeog.so
Installed Directories: /usr/include/eog-3.0 and /usr/{lib,share,share/gtk-doc/html,share/help/*}/eog

Short Descriptions

eog

is a fast and functional image viewer as well as an image cataloging program. It has basic editing capabilites.

Last updated on 2017-02-21 11:59:18 -0800

Epiphany-3.22.6

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-8.0 platform.

Package Information

Epiphany Dependencies

Required

Avahi-0.6.32, Gcr-3.20.0, gnome-desktop-3.22.2, ISO Codes-3.74, libnotify-0.7.7, libwnck-3.20.1, and WebKitGTK+-2.14.5

Recommended
Optional

lsb_release-1.4

Runtime Dependencies

gnome-keyring-3.20.0 (for storing passwords) and Seahorse-3.20.0 (for managing stored passwords)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/epiphany

Installation of Epiphany

Install Epiphany by running the following commands:

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

Now, as the root user:

make install

An already active graphical session with a bus address is necessary to execute the test suite. Some tests may fail for unknown reasons. To test the results, run:

make -k check

Contents

Installed Program: epiphany and ephy-profile-migrator
Installed Libraries: libephywebextension.so
Installed Directories: /usr/{lib,share,share/help/*}/epiphany

Short Descriptions

epiphany

is a GNOME web browser based on the WebKit2 rendering engine.

Last updated on 2017-02-21 11:59:18 -0800

Evince-3.22.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-8.0 platform.

Package Information

Evince Dependencies

Required

adwaita-icon-theme-3.22.0, gsettings-desktop-schemas-3.22.0, GTK+-3.22.8, itstool-2.0.2, and libxml2-2.9.4

Recommended
Optional

Cups-2.2.2 (to enable printing if support is built into GTK+ 3), gnome-desktop-3.22.2, gst-plugins-base-1.10.3, GTK-Doc-1.25, LibTIFF-4.0.7, texlive-20160523b (or install-tl-unx) DjVuLibre, libgxps, libspectre, and t1lib

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/evince

Installation of Evince

Install Evince by running the following commands:

./configure --prefix=/usr                     \
            --enable-compile-warnings=minimum \
            --enable-introspection            \
            --disable-static                  &&
make

This package does not have a working testsuite.

Now, as the root user:

make install

Command Explanation

--enable-compile-warnings=minimum: This switch prevents a warning about a date format being treated as an error by gcc-6.1.

--enable-introspection: By default, the Gobject Introspection support is turned off, even though that package is an expected component of the GNOME Desktop.

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

--disable-nautilus: This switch disables building the Nautilus Plugin. Use this switch if Nautilus is not installed.

--without-keyring: This switch disables the use of libsecret. Use this switch if libsecret is not installed.

Contents

Installed Programs: evince, evince-previewer, and evince-thumbnailer
Installed Libraries: libevdocument3.so, libevview3.so, /usr/lib/mozilla/plugins/libevbrowserplugin.so (browser plugin, but unusable in firefox), and /usr/lib/nautilus/extensions-3.0/libevince-properties-page.so
Installed Directories: /usr/{include,lib,share}/evince, /usr/share/gtk-doc/html/{evince,libevdocument-3.0,libevview-3.0}, and /usr/share/help/*/evince

Short Descriptions

evince

is a multiple format document viewer.

evince-previewer

is an applicaton that implements the printing previewer.

evince-thumbnailer

is a simple program used to create thumbnail images of supported documents.

Last updated on 2017-02-21 11:59:18 -0800

File-Roller-3.22.2

Introduction to File Roller

File Roller is an archive manager for GNOME with support for tar, bzip2, gzip, zip, jar, compress, lzop and many other archive formats.

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

Note

File Roller is only a graphical interface to archiving utilities such as tar and zip.

Package Information

File Roller Dependencies

Required

GTK+-3.22.8 and itstool-2.0.2

Recommended
Optional (Runtime)

UnRar-5.4.5, UnZip-6.0, and Zip-3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/file-roller

Installation of File Roller

Install File Roller by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
chmod -v 0755 /usr/libexec/file-roller/isoinfo.sh

Command Explanations

--disable-packagekit: This switch disables the use of PackageKit which isn't suitable for BLFS.

--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: file-roller
Installed Libraries: None
Installed Directories: /usr/{libexec,share{,/help/*}}/file-roller

Short Descriptions

file-roller

is an archive manager for GNOME.

Last updated on 2017-02-21 11:59:18 -0800

Gedit-3.22.0

Introduction to Gedit

The Gedit package contains a lightweight UTF-8 text editor for the GNOME Desktop.

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

Package Information

Gedit Dependencies

Required

gsettings-desktop-schemas-3.22.0, gtksourceview-3.22.2, itstool-2.0.2, and libpeas-1.20.0

Recommended
Optional

GTK-Doc-1.25, Vala-0.34.4, gspell, and zeitgeist

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gedit

Installation of Gedit

Install Gedit by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-spell: Use this switch to disable spell-checking capability. It is required if gspell is not installed.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: gedit and gnome-text-editor (symlink to gedit)
Installed Libraries: libgedit.so
Installed Directories: /usr/include/gedit-3.14 and /usr/{lib,libexec,share,share/gtk-doc/html,share/help/*}/gedit

Short Descriptions

gedit

is a lightweight text editor integrated with the GNOME Desktop.

Last updated on 2017-02-21 11:59:18 -0800

gnome-calculator-3.22.3

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-8.0 platform.

Package Information

GNOME Calculator Dependencies

Required

GTK+-3.22.8, gtksourceview-3.22.2, and itstool-2.0.2

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-calculator

Installation of GNOME Calculator

Install GNOME Calculator by running the following commands:

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

To test the results, issue: make check. In 32bit systems, Number.float and Number.double tests might fail due to floating point round off errors, most probably in 32 bit systems.

Now, as the root user:

make install

Command Explanation

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

Contents

Installed Programs: gcalccmd and gnome-calculator
Installed Library: libcalculator.so
Installed Directories: /usr/{lib,share/help/*}/gnome-calculator

Short Descriptions

gnome-calculator

is the official calculator of the GNOME Desktop.

gcalccmd

is a command line version of gnome-calculator.

Last updated on 2017-02-21 11:59:18 -0800

gnome-nettool-3.8.1

Introduction to GNOME Nettool

The GNOME Nettool package is a network information tool which provides GUI interface for some of the most common command line network tools.

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

Package Information

GNOME Nettool Dependencies

Required

GTK+-3.22.8, itstool-2.0.2, and libgtop-2.34.2

Runtime Dependencies

BIND Utilities-9.11.0-P3, Nmap-7.40, Net-tools-CVS_20101030, Traceroute-2.1.0, and Whois-5.2.14

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-nettool

Installation of GNOME Nettool

Install GNOME Nettool by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: gnome-nettool
Installed Libraries: None
Installed Directories: /usr/share/gnome-nettool and /usr/share/help/*/gnome-nettool

Short Descriptions

gnome-nettool

is a network information tool.

Last updated on 2017-02-21 11:59:18 -0800

gnome-screenshot-3.22.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-8.0 platform.

Package Information

GNOME Screenshot Dependencies

Required

GTK+-3.22.8 and libcanberra-0.30 (Compiled with GTK+3 support).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-screenshot

Installation of GNOME Screenshot

Install GNOME Screenshot 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

Note

In order to best run GNOME Screenshot from the command line, the --interactive option needs to be specified.

Contents

Installed Program: gnome-screenshot
Installed Libraries: None
Installed Directories: None

Short Descriptions

gnome-screenshot

is used to capture the screen, a window, or a user-defined area and save the snapshot image to a file.

Last updated on 2017-02-21 11:59:18 -0800

gnome-system-monitor-3.22.2

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-8.0 platform.

Package Information

GNOME System Monitor Dependencies

Required

adwaita-icon-theme-3.22.0, Gtkmm-3.22.0, itstool-2.0.2, libgtop-2.34.2, and librsvg-2.40.16

Recommended
Optional

desktop-file-utils-0.23 and appstream-glib

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-system-monitor

Installation of GNOME System Monitor

Install GNOME System Monitor by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-wnck: This switch adds support for the Window Navigator Construction Kit libraries.

Contents

Installed Program: gnome-system-monitor
Installed Libraries: None
Installed Directories: /usr/{libexec,share/help/*}/gnome-system-monitor

Short Descriptions

gnome-system-monitor

is used to display the process tree and hardware meters.

Last updated on 2017-02-21 11:59:18 -0800

gnome-terminal-3.22.1

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-8.0 platform.

Package Information

GNOME Terminal Dependencies

Required

DConf-0.26.0, gsettings-desktop-schemas-3.22.0, itstool-2.0.2, pcre2-10.23, and VTE-0.46.1

Recommended
Optional

desktop-file-utils-0.23 and appstream-glib

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnome-terminal

Installation of GNOME Terminal

Install GNOME Terminal by running the following commands:

./configure --prefix=/usr             \
            --disable-static          \
            --disable-migration       \
            --disable-search-provider &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Note

To run GNOME Terminal, the environment variable LANG must be set to a UTF-8 locale prior to starting the graphical environment.

Command Explanations

--disable-search-provider: This switch disables the “search gnome-shell” provider. This is necessary because gnome-shell is not in BLFS. Remove this if you have gnome-shell installed.

--disable-migration: This switch disables building the GNOME Terminal GConf migration tool which is not necessary for BLFS.

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

Contents

Installed Program: gnome-terminal
Installed Libraries: /usr/lib/nautilus/extensions-3.0/libterminal-nautilus.so (Nautilus Extension)
Installed Directories: /usr/share/help/*/gnome-terminal

Short Descriptions

gnome-terminal

is the GNOME Terminal Emulator.

Last updated on 2017-02-20 15:27:17 -0800

Gucharmap-9.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-8.0 platform.

Package Information

Gucharmap Dependencies

Required

desktop-file-utils-0.23, GTK+-3.22.8, itstool-2.0.2, UnZip-6.0, and Wget-1.19.1 (used to download data from unicode.org)

Recommended
Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gucharmap

Installation of Gucharmap

Install Gucharmap by running the following commands:

./configure --prefix=/usr \
            --enable-vala \
            --with-unicode-data=download &&
make

This package's testsuite is only intended to be used by the maintainer to check the i18n help files.

Now, as the root user:

make install

Command Explanations

--with-unicode-data=download: This switch forces the build process to download the Unicode data instead of trying to look for it locally.

--enable-vala: This switch enables building of the Vala bindings (auto-detection of vapigen is currently broken). Remove if you don't have Vala-0.34.4 installed.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: charmap, gnome-character-map (both symlinks), and gucharmap
Installed Library: libgucharmap_2_90.so
Installed Directories: /usr/include/gucharmap-2.90 and /usr/share/help/*/gucharmap

Short Descriptions

gucharmap

is a Unicode character map and font viewer.

libgucharmap_2_90.so

contains the Gucharmap API functions.

Last updated on 2017-02-16 19:05:12 -0800

network-manager-applet-1.4.4

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+ like Xfce and LXDE.

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

Package Information

NetworkManager Applet Dependencies

Required

GTK+-3.22.8, ISO Codes-3.74, libsecret-0.18.5, libnotify-0.7.7, and NetworkManager-1.6.2

Recommended
Required (Runtime)

polkit-gnome-0.105

Optional

GNOME Bluetooth, and mobile-broadband-provider-info (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/network-manager-applet

Installation of NetworkManager Applet

Install NetworkManager Applet by running the following commands:

./configure --prefix=/usr       \
            --sysconfdir=/etc   \
            --disable-static    \
            --without-team      &&
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.

--without-team: This switch disables the team configuration editor since it requires Jansson which is not currently in BLFS.

Contents

Installed Programs: nm-applet and nm-connection-editor
Installed Libraries: libnma.so and libnm-gtk.so
Installed Directories: /usr/include/{libnma,libnm-gtk}

Short Descriptions

nm-connection-editor

allows users to view and edit network connection settings.

libnma.so

contains internal functions for the Network Manager GTK+ Interface.

libnm-gtk.so

contains the NetworkManager GTK+ bindings.

Last updated on 2017-02-20 15:27:17 -0800

Seahorse-3.20.0

Introduction to Seahorse

Seahorse is a graphical interface for managing and using encryption keys. Currently it supports PGP keys (using GPG/GPGME) and SSH keys.

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

Package Information

Seahorse Dependencies

Required

Gcr-3.20.0, GnuPG-2.1.18, GPGME-1.8.0, itstool-2.0.2, and libsecret-0.18.5

Recommended
Optional

Avahi-0.6.32 and OpenLDAP-2.4.44

Runtime Dependency

gnome-keyring-3.20.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/seahorse

Installation of Seahorse

Install Seahorse by running the following commands:

sed -i -r 's:"(/apps):"/org/gnome\1:' data/*.xml &&

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed ... data/*.xml: This command fixes some deprecated entries in the schema templates.

Contents

Installed Program: seahorse
Installed Libraries: None
Installed Directories: /usr/{lib,share,share/help/*}/seahorse

Short Descriptions

seahorse

is the graphical interface for managing and using encryption keys.

Last updated on 2017-02-21 11:59:18 -0800

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.12.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-8.0 platform.

Package Information

libxfce4util Dependencies

Required

GLib-2.50.3

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxfce4util

Installation of libxfce4util

Install libxfce4util by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

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 Program: xfce4-kiosk-query
Installed Library: libxfce4util.so
Installed Directories: /usr/include/xfce4 and /usr/share/gtk-doc/html/libxfce4util

Short Descriptions

xfce4-kiosk-query

Queries the given capabilities of <module> for the current user and reports whether the user has the capabilities or not. This tool is mainly meant for system administrators to test their Kiosk setup.

libxfce4util.so

contains basic utility functions for the Xfce desktop environment.

Last updated on 2017-02-17 12:01:55 -0800

Xfconf-4.12.1

Introduction to Xfconf

Xfconf is the configuration storage system for Xfce.

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

Package Information

Xfconf Dependencies

Required

dbus-glib-0.108 and libxfce4util-4.12.1

Optional

GTK-Doc-1.25 and Perl Module Glib (you may want to use build and installation instructions or alternate auto installation instructions)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfconf

Installation of Xfconf

Install Xfconf by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

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 Program: xfconf-query
Installed Library: libxfconf.so
Installed Directories: /usr/include/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.so

contains basic functions for Xfce configuration.

Last updated on 2017-02-17 12:01:55 -0800

libxfce4ui-4.12.1

Introduction to libxfce4ui

The libxfce4ui package contains GTK+ 2 widgets that are used by other Xfce applications.

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

Package Information

libxfce4ui Dependencies

Required

GTK+-2.24.31 and Xfconf-4.12.1

Recommended
Optional

GTK-Doc-1.25, HTML::Parser-3.72, and Glade

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libxfce4ui

Installation of libxfce4ui

Install libxfce4ui by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: None
Installed Libraries: libxfce4kbd-private-{2,3}.so and libxfce4ui-{1,2}.so
Installed Directories: /etc/xdg/xfce4, /usr/include/xfce4/libxfce4kbd-private-2, /usr/include/xfce4/libxfce4ui-{1,2}, and /usr/share/gtk-doc/html/libxfce4ui

Short Descriptions

libxfce4kbd-private-2.so

is a private Xfce library for sharing code between Xfwm4 and Xfce4 Settings.

libxfce4ui-1.so

contains widgets that are used by other Xfce applications.

Last updated on 2017-02-17 12:01:55 -0800

Exo-0.10.7

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-8.0 platform.

Package Information

Exo Dependencies

Required

libxfce4ui-4.12.1, libxfce4util-4.12.1 and URI-1.71

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/exo

Installation of Exo

Install Exo by running the following commands:

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

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: exo-csource, exo-desktop-item-edit, exo-open and exo-preferred-applications
Installed Libraries: libexo-1.so
Installed Directories: /etc/xdg/xfce4, /usr/{include,lib/xfce4}/exo-1, and /usr/share/{{gtk-doc/html,pixmaps}/exo-1,xfce4}

Short Descriptions

exo-csource

is a small utility that generates C code containing arbitrary data, useful for compiling texts or other data directly into programs.

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.

exo-preferred-applications

is a command line utility to edit the preferred application that is used to handle a particular type of file or URI.

libexo-1.so

contains additional widgets, a framework for editable toolbars, light-weight session management support and functions to automatically synchronise object properties (based on GObject Binding Properties).

Last updated on 2017-02-17 12:01:55 -0800

Garcon-0.5.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-8.0 platform.

Package Information

Garcon Dependencies

Required

libxfce4ui-4.12.1 built with both GTK+-2.24.31 and GTK+-3.22.8

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/garcon

Installation of Garcon

Install Garcon by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

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: libgarcon-1.so and libgarcon-gtk2-1.so
Installed Directory: /usr/include/garcon-1, /usr/include/garcon-gtk2-1 and /usr/share/gtk-doc/html/garcon

Short Descriptions

libgarcon-1.so

contains functions that provide a freedesktop.org compliant menu implementation based on GLib and GIO.

Last updated on 2017-02-17 12:01:55 -0800

gtk-xfce-engine-3.2.0

Introduction to GTK Xfce Engine

The GTK Xfce Engine package contains several GTK+ 2 and GTK+ 3 themes and libraries needed to display them. This is useful for customising the appearance of your Xfce desktop.

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

Package Information

GTK Xfce Engine Dependencies

Required

GTK+-2.24.31

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gtk-xfce-engine

Installation of GTK Xfce Engine

Install GTK Xfce Engine by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libxfce.so (in /usr/lib/gtk-2.0/2.10.0/engines, /usr/lib/gtk-3.0/3.0.0/theming-engines), and /usr/share/themes/Xfce* (21 variations)
Installed Directories: Xfce, Xfce-4.0, Xfce-4.2, Xfce-4.4, Xfce-4.6, Xfce-b5, Xfce-basic, Xfce-cadmium, Xfce-curve, Xfce-dawn, Xfce-dusk, Xfce-kde2, Xfce-kolors, Xfce-light, Xfce-orange, Xfce-redmondxp, Xfce-saltlake, Xfce-smooth, Xfce-stellar, Xfce-winter in /usr/share/themes

Short Descriptions

libxfce.so

contains functions that allow Xfce to apply and change GTK+ 2 and GTK+ 3 themes.

Last updated on 2017-02-17 12:01:55 -0800

libwnck-2.30.7

Introduction to libwnck

The libwnck package contains a Window Navigator Construction Kit.

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

Package Information

libwnck Dependencies

Required

GTK+-2.24.31

Recommended
Optional

gobject-introspection-1.50.0 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libwnck2

Installation of libwnck

Install libwnck by running the following commands:

./configure --prefix=/usr \
            --disable-static \
            --program-suffix=-1 &&
make GETTEXT_PACKAGE=libwnck-1

This package does not come with a test suite.

Now, as the root user:

make GETTEXT_PACKAGE=libwnck-1 install

Command Explanations

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

--program-suffix=-1: This option adds -1 to the end of the names of the installed programs to avoid overwriting the programs installed by libwnck-3.20.1.

GETTEXT_PACKAGE=libwnck-1: This parameter adds -1 to the end of the names of the gettext files installed by the package to avoid overwriting the files installed by libwnck-3.20.1.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: wnckprop-1 and wnck-urgency-monitor-1
Installed Library: libwnck-1.so
Installed Directories: /usr/include/libwnck-1.0 and /usr/share/gtk-doc/html/libwnck-1.0

Short Descriptions

wnckprop-1

Prints, modifies, or interacts with the properties of a screen/workspace/window.

libwnck-1.so

contains functions for writing pagers and task lists.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-panel-4.12.1

Introduction to Xfce4 Panel

The Xfce4 Panel package contains the Xfce4 Panel.

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

Package Information

Xfce4 Panel Dependencies

Required

Exo-0.10.7, Garcon-0.5.0, libwnck-2.30.7 and libxfce4ui-4.12.1

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-panel

Installation of Xfce4 Panel

Install Xfce4 Panel by running the following commands:

./configure --prefix=/usr --sysconfdir=/etc --enable-gtk3 &&
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-directorymenu, xfce4-popup-applicationsmenu and xfce4-popup-windowmenu
Installed Library: libxfce4panel-1.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-1.0.so

contains the Xfce Panel API functions.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-xkb-plugin-0.7.1

Introduction to Xfce4 Keyboard Plugin

If your system has a standard (US) keyboard, you probably do not need to install this plugin.

The Xfce4 Keyboard Plugin package contains a very customizable and useful Xfce4 Panel plugin to setup and use multiple (currently up to 4 due to X11 protocol limitation) keyboard layouts and switch between them, individually by application, individually by window, or globally for the desktop and all applications and windows.

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

Package Information

Xfce4 Keyboard Plugin Dependencies

Required

librsvg-2.40.16, libxklavier-5.4, and xfce4-panel-4.12.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-xkb-plugin

Installation of Xfce4 Keyboard Plugin

Install Xfce4 Keyboard Plugin by running the following commands:

sed -e 's|xfce4/panel-plugins|xfce4/panel/plugins|' \
    -i panel-plugin/{Makefile.in,xkb-plugin.desktop.in.in} &&

./configure --prefix=/usr         \
            --libexecdir=/usr/lib \
            --disable-debug       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed -e ... xkb-plugin.desktop.in.in} and --libexecdir=/usr/lib: The sed and the switch are necessary to place the xkb-plugin in the default Xfce4 panel plugins directory.

--disable-debug: This switch disables debugging support.

Contents

Installed Program: xfce4-xkb-plugin
Installed Library: None
Installed Directory: /usr/share/xfce4/xkb

Short Descriptions

xfce4-xkb-plugin

is the Xfce keyboard layout plugin.

Last updated on 2017-02-17 12:01:55 -0800

Thunar-1.6.11

Introduction to Thunar

Thunar is the Xfce file manager, a GTK+ 2 GUI to organise the files on your computer.

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

Package Information

Thunar Dependencies

Required

Exo-0.10.7 and libxfce4ui-4.12.1

Required (Runtime)

gnome-icon-theme-3.12.0 or lxde-icon-theme-0.5.1

Recommended
Optional

Gvfs-1.30.3 (for remote browsing and automounting), libexif-0.6.21 and Tumbler-0.1.31 (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/thunar

Installation of Thunar

Install Thunar by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --docdir=/usr/share/doc/Thunar-1.6.11 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: Thunar, thunar and thunar-settings
Installed Libraries: libthunarx-2.so and /usr/lib/xfce4/panel/plugins/libthunar-tpa.so
Installed Directories: /etc/xdg/Thunar, /usr/include/thunarx-2, /usr/lib/{Thunar,thunarx-2}, /usr/share/doc/Thunar-1.6.11, and /usr/share/{pixmaps,}/Thunar

Short Descriptions

Thunar

is a symbolic link to thunar.

thunar

is the Xfce file manager.

thunar-settings

is a shell script that launches a dialog box to allow you to alter the behaviour of Thunar.

libthunarx-2.so

contains the Thunar extension library which permits adding new features to the Thunar file manager.

Last updated on 2017-02-17 12:01:55 -0800

thunar-volman-0.8.1

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-8.0 platform.

Package Information

Thunar Volume Manager Dependencies

Required

Exo-0.10.7, libgudev-231, libxfce4ui-4.12.1

Recommended
Recommended Runtime Dependencies

Gvfs-1.30.3 and polkit-gnome-0.105

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/thunar-volman

Installation of the Thunar Volume Manager

Install the Thunar Volume Manager by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: thunar-volman and thunar-volman-settings
Installed Libraries: None
Installed Directories: None

Short Descriptions

thunar-volman

is the Thunar Volume Manager, a command line utility to automatically mount or unmount removable media.

thunar-volman-settings

is a small GTK+ 2 application for changing Thunar Volume Manager settings.

Last updated on 2017-02-17 12:01:55 -0800

Tumbler-0.1.31

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-8.0 platform.

Package Information

Tumbler Dependencies

Required

dbus-glib-0.108

Optional

cURL-7.52.1, FreeType-2.7.1, gdk-pixbuf-2.36.5, gst-plugins-base-1.10.3, GTK-Doc-1.25, libjpeg-turbo-1.5.1, libgsf-1.14.41, libpng-1.6.28, Poppler-0.51.0, FFmpegThumbnailer, and libopewnraw

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tumbler

Installation of Tumbler

Install Tumbler by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: tumblerd
Installed Library: libtumbler-1.so and several under /usr/lib/tumbler-1/plugins/
Installed Directories: /etc/xdg/tumbler /usr/include/tumbler-1, /usr/lib/tumbler-1 and /usr/share/gtk-doc/html/tumbler

Short Descriptions

tumblerd

is a daemon D-Bus service for applications such as Thunar and Ristretto to use thumbnail images..

libtumbler-1.so

contains functions that the Tumbler daemon uses to create thumbnail images.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-appfinder-4.12.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-8.0 platform.

Package Information

Xfce4 Appfinder Dependencies

Required

Garcon-0.5.0 and libxfce4ui-4.12.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-appfinder

Installation of Xfce4 Appfinder

Install Xfce4 Appfinder by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: xfce4-appfinder and xfrun4 (symlink)
Installed Libraries: None
Installed Directories: None

Short Descriptions

xfce4-appfinder

Is a GTK+ 2 application that enables you to quickly search through the .desktop files installed on your system looking for an application.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-power-manager-1.6.0

Introduction to Xfce4 Power Manager

The Xfce4 Power Manager is a power manager for the Xfce desktop, Xfce power manager manages the power sources on the computer and the devices that can be controlled to reduce their power consumption (such as LCD brightness level, monitor sleep, CPU frequency scaling). In addition, Xfce4 Power Manager provides a set of freedesktop-compliant DBus interfaces to inform other applications about current power level so that they can adjust their power consumption.

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

Package Information

Xfce4 Power Manager Dependencies

Required

libnotify-0.7.7, UPower-0.99.4, and xfce4-panel-4.12.1

Optional

UDisks-1.0.5

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-power-manager

Installation of Xfce4 Power Manager

Install Xfce4 Power Manager by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: xfce4-power-manager, xfce4-power-manager-settings, xfce4-pm-helper, and xfpm-power-backlight-helper
Installed Libraries: /usr/lib/xfce4/panel/plugins/libxfce4powermanager.so
Installed Directories: None

Short Descriptions

xfce4-pm-helper

is a helper program for the suspend and hibernate functions of xfce4-power-manager.

xfce4-power-manager

is the Xfce Power Manager.

xfce4-power-manager-settings

is a utility that comes with the Xfce Power Manager to access/change its configuration.

xfpm-power-backlight-helper

is a command line utility to get or set the brightness of your screen.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-settings-4.12.1

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-8.0 platform.

Package Information

Xfce4 Settings Dependencies

Required

Exo-0.10.7, Garcon-0.5.0 and libxfce4ui-4.12.1

Required (Runtime)

gnome-icon-theme-3.12.0 or lxde-icon-theme-0.5.1

Recommended
Optional

libinput-1.6.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-settings

Installation of Xfce4 Settings

Install Xfce4 Settings by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-sound-settings: Use this switch to enable sound settings in GUI.

--enable-pluggable-dialogs: Use this switch to enable support for embedded settings dialogs.

Contents

Installed Programs: xfce4-accessibility-settings, xfce4-appearance-settings, xfce4-display-settings, xfce4-keyboard-settings, 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+ 2 GUI to allow you to change some of your keyboard and mouse preferences.

xfce4-appearance-settings

is a GTK+ 2 GUI to allow you to change some of your theme, icon and font preferences.

xfce4-display-settings

is a GTK+ 2 GUI to allow you to change some of your screen preferences.

xfce4-keyboard-settings

is a GTK+ 2 GUI to allow you to change some of your keyboard preferences.

xfce4-mime-settings

is a GTK+ 2 GUI to allow you to change which applications are used to handle different mime types.

xfce4-mouse-settings

is a GTK+ 2 GUI to allow you to change some of your mouse preferences.

xfce4-settings-editor

is a GTK+ 2 GUI to allow you to change your preferences stored in Xfconf.

xfce4-settings-manager

is a GTK+ 2 GUI to allow you to change many of your Xfce preferences.

xfsettingsd

is the Xfce settings daemon.

Last updated on 2017-02-17 12:01:55 -0800

Xfdesktop-4.12.3

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-8.0 platform.

Package Information

Xfdesktop Dependencies

Required

Exo-0.10.7, libwnck-2.30.7 and libxfce4ui-4.12.1

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfdesktop

Installation of Xfdesktop

Install Xfdesktop by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: xfdesktop and xfdesktop-settings
Installed Libraries: None
Installed Directories: /usr/share/backgrounds/xfce and /usr/share/pixmaps/xfdesktop

Short Descriptions

xfdesktop

is the Xfce Desktop Environment's desktop manager.

xfdesktop-settings

is a GTK+ 2 application that allows you to change your desktop background, some preferences for the righ click menu and what icons are displayed on the desktop.

Last updated on 2017-02-17 12:01:55 -0800

Xfwm4-4.12.3

Introduction to Xfwm4

Xfwm4 is the window manager for Xfce.

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

Package Information

Xfwm4 Dependencies

Required

libwnck-2.30.7, libxfce4ui-4.12.1 and libxfce4util-4.12.1

Recommended

User Notes: http://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+ 2 application that allows you to set some preferences such as your theme, keyboard shortcuts and mouse focus behaviour.

xfwm4-tweaks-settings

is a GTK+ 2 application that allows you to set some more preferences for Xfwm4.

xfwm4-workspace-settings

is a GTK+ 2 application that allows you to set your workspace preferences.

Last updated on 2017-02-17 12:01:55 -0800

xfce4-session-4.12.1

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-8.0 platform.

Package Information

Xfce4 Session Dependencies

Required

libwnck-2.30.7, libxfce4ui-4.12.1, Which-2.21, and Xorg Applications

Recommended
Required Runtime

Xfdesktop-4.12.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-session

Installation of Xfce4 Session

Install Xfce4 Session by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --disable-legacy-sm &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-legacy-sm: This switch disables legacy session management which isn't necessary on modern system.

Configuring Xfce4 Session

There are several optional run time dependencies for Xfce4: ConsoleKit2-1.0.2, dbus-1.10.14, GnuPG-2.1.18, hicolor-icon-theme-0.15 and OpenSSH-7.4p1

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.3.4, or from runlevel 5, using a Display Manager, such as sddm-0.14.0.

To start Xfce4 using xinit-1.3.4, run the following commands:

cat > ~/.xinitrc << "EOF"
ck-launch-session dbus-launch --exit-with-session startxfce4
EOF

startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debugging purposes. This can be done starting X with:

startx &> ~/.x-session-errors

Note

You may wish to drop consolekit and/or 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: xfce4-session, xfce4-session-logout, xfce4-session-settings and xfce4-tips
Installed Library: libxfsm-4.6.so
Installed Directories: /usr/include/xfce4/xfce4-session-4.6, /usr/share/xfce4/tips and /usr/share/doc/xfce4-session-4.12.1

Short Descriptions

xfce4-session

starts up the Xfce Desktop Environment.

xfce4-session-logout

logs out from Xfce.

xfce4-session-settings

is a GTK+ 2 GUI which allows you to alter your preferences for your Xfce Session.

xfce4-tips

is a GTK+ 2 GUI which displays tips when you log in to an Xfce Session.

libxfsm-4.6.so

contains the Xfce Session API functions.

Last updated on 2017-02-17 12:01:55 -0800

Chapter 36. Xfce Applications

This is a small collection of optional applications that add extra capabilities to your Xfce desktop.

Midori-0.5.11

Introduction to Midori

Midori is a lightweight web browser that uses WebKitGTK+.

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

Package Information

Midori Dependencies

Required

CMake-3.7.2, Gcr-3.20.0, libnotify-0.7.7, WebKitGTK+-2.14.5 (see "Command Explanations"), and Vala-0.34.4

Recommended
Optional

GTK-Doc-1.25, WebKitGTK+-2.4.11 , and Zeitgeist

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/midori

Installation of Midori

Install Midori by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      -DUSE_ZEITGEIST=OFF         \
      -DHALF_BRO_INCOM_WEBKIT2=ON \
      -DUSE_GTK3=1                \
      -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/midori-0.5.11 \
      ..  &&
make

This package does not come with a working test suite.

Now, as the root user:

make install

Command Explanations

-DCMAKE_BUILD_TYPE=Release: This switch is used to apply a higher level of compiler optimizations.

-DUSE_ZEITGEIST=OFF: Remove this switch if Zeitgeist is installed.

-DHALF_BRO_INCOM_WEBKIT2=ON: Links to WebKitGTK+-2.14.5 instead of WebKitGTK+-2.4.x. Strictly speaking, WebKitGTK+-2.14.5 is not required and Midori could be linked to WebKitGTK+-2.4.x. The former used to be considered “ experimental” by upstream, but now is considered stable. However the syntax has not yet been updated.

-DUSE_GTK3=1: Using this switch allows linking to WebkitGTK+ built against GTK+ 3.

-DUSE_APIDOCS=1: Use this switch if GTK-Doc is installed and you wish to build and install the API documentation.

Contents

Installed Program: midori
Installed Libraries: libmidori-core.so
Installed Directories: /{etc/xdg,/usr/{lib,share}}/midori and /usr/share/doc/midori-0.5.11

Short Descriptions

midori

is a lightweight WebKitGTK+ browser.

Last updated on 2017-02-19 16:31:30 -0800

Parole-0.8.1

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-8.0 platform.

Note

Although this version of parole works with most files, it is unable to play DVDs, reporting an error in the gstreamer backend.

Package Information

Parole Dependencies

Required

gst-plugins-base-1.10.3 and libxfce4ui-4.12.1

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/parole

Installation of Parole

Install Parole by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-gstreamer=1.0: Use this switch if the deprecated gstreamer-0.x is installed.

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+ 2 media player that uses GStreamer.

Last updated on 2017-02-17 20:02:57 -0800

Mousepad-0.4.0

Introduction to Mousepad

Mousepad is a simple GTK+ 2 text editor for the Xfce desktop environment.

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

Package Information

Mousepad Dependencies

Required

gtksourceview-3.22.2 (optionally, it can be built with gtksourceview-2)

Optional

DConf-0.26.0 (runtime) and dbus-glib-0.108

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mousepad

Installation of Mousepad

Install Mousepad by running the following commands:

./configure --prefix=/usr --enable-keyfile-settings &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-keyfile-settings: Use the GSettings keyfile backend rather than the default DConf-0.26.0.

Contents

Installed Program: mousepad
Installed Libraries: None
Installed Directories: None

Short Descriptions

mousepad

is a simple GTK+ 2 text editor.

Last updated on 2017-02-19 16:31:30 -0800

Vte-0.28.2

Introduction to Vte

Vte is a library (libvte) implementing a terminal emulator widget for GTK+ 2, and a minimal demonstration application (vte) that uses libvte.

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

Package Information

Vte Dependencies

Required

GTK+-2.24.31

Optional

gobject-introspection-1.50.0, GTK-Doc-1.25 and PyGTK-2.24.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vte2

Installation of Vte

Install Vte by running the following commands:

./configure --prefix=/usr \
            --libexecdir=/usr/lib/vte \
            --disable-static  &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--libexecdir=/usr/lib/vte : both this package and VTE-0.46.1 install files of the same name. This switch ensures that they do not overwrite each other if both are installed.

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

Contents

Installed Program: vte
Installed Library: libvte.so
Installed Directories: /usr/include/vte-0.0, /usr/lib/vte, /usr/share/gtk-doc/html/vte-0.0 and /usr/share/vte

Short Descriptions

vte

is a simple terminal emulator.

libvte.so

contains the Vte API functions.

Last updated on 2017-02-19 16:31:30 -0800

xfce4-terminal-0.8.4

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-8.0 platform.

Package Information

Xfce4 Terminal Dependencies

Required

libxfce4ui-4.12.1 and VTE-0.46.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-terminal

Installation of Xfce4 Terminal

Install Xfce4 Terminal by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: xfce4-terminal
Installed Libraries: None
Installed Directory: /usr/share/xfce4/terminal

Short Descriptions

xfce4-terminal

is a GTK+ 2 terminal emulator.

Last updated on 2017-02-19 16:31:30 -0800

Xfburn-0.5.4

Introduction to Xfburn

Xfburn is a GTK+ 2 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-8.0 platform.

Package Information

Xfburn Dependencies

Required

Exo-0.10.7, libxfce4util-4.12.1, and libisoburn-1.4.6

Optional

gst-plugins-base-1.10.3 and Cdrdao-1.2.3 (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfburn

Installation of Xfburn

Install Xfburn by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Program: xfburn
Installed Libraries: None
Installed Directory: /usr/share/xfburn

Short Descriptions

xfburn

is a GTK+ 2 application for creating CDs and DVDs.

Last updated on 2017-02-19 16:31:30 -0800

Ristretto-0.8.2

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-8.0 platform.

Package Information

Ristretto Dependencies

Required

libexif-0.6.21 and libxfce4ui-4.12.1

Optional

Tumbler-0.1.31 (runtime)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ristretto

Installation of Ristretto

Install Ristretto by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: ristretto
Installed Libraries: None
Installed Directories: None

Short Descriptions

ristretto

is a fast and lightweight image viewer.

Last updated on 2017-02-19 16:31:30 -0800

xfce4-notifyd-0.2.4

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-8.0 platform.

Package Information

The Xfce4 Notification Daemon Dependencies

Required

libnotify-0.7.7 and libxfce4ui-4.12.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xfce4-notifyd

Installation of the Xfce4 Notification Daemon

Install the Xfce4 Notification Daemon by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

You can test the notification daemon with the command notify-send:

notify-send -i info Information "Hi ${USER}, This is a Test"

Contents

Installed Program: xfce4-notifyd-config
Installed Libraries: None
Installed Directories: /usr/share/themes/Default/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+ 2 GUI that allows you to change some of your preferences (theme and screen position) for the notifications that the Xfce4 Notification Daemon displays.

Last updated on 2017-02-19 16:31:30 -0800

Part X. LXDE

Chapter 37. LXDE Desktop

LXDE is an extremely fast-performing and energy-saving desktop environment.

LXDE comes with a beautiful interface, multi-language support, standard keyboard shortcuts and additional features like tabbed file browsing. LXDE uses less CPU and less RAM than other environments. It is especially designed for cloud computers with low hardware specifications, such as netbooks, mobile devices (e.g. MIDs) or older computers.

Build LXDE core packages in the order presented in the book for the easiest resolution of dependencies.

lxmenu-data-0.1.5

Introduction to LXMenu Data

The LXMenu Data package provides files required to build freedesktop.org menu spec-compliant desktop menus for LXDE.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxmenu-data

Installation of LXMenu Data

Install LXMenu Data by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: /etc/xdg/menus and /usr/share/desktop-directories

Last updated on 2017-02-20 16:33:44 -0800

libfm-extra-1.2.5

Introduction to libfm-extra

The libfm-extra package contains a library and other files required by menu-cache-gen libexec of menu-cache-1.0.2.

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

Package Information

libfm-extra Dependencies

Required

GLib-2.50.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libfm-extra

Installation of libfm-extra

Install libfm-extra by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --with-extra-only \
            --with-gtk=no     \
            --disable-static  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-extra-only Disable all components but libfm-extra library.

--with-gtk=no Gtk is not necessary for this package.

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

Contents

Installed Programs: None
Installed Library: libfm-extra.so
Installed Directories: /usr/include/libfm (symlink) and /usr/include/libfm-1.0

Short Descriptions

libfm-extra.so

contains the libfm-extra API functions.

Last updated on 2017-02-20 16:33:44 -0800

menu-cache-1.0.2

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-8.0 platform.

Package Information

Menu Cache Dependencies

Required

libfm-extra-1.2.5

Optional

GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/menu-cache

Installation of Menu Cache

Install Menu Cache by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this option if GTK-Doc is installed and you wish to build and install the API documentation.

Contents

Installed Programs: None
Installed Library: libmenu-cache.so
Installed Directories: /usr/{include,libexec,share/gtk-doc/html}/menu-cache

Short Descriptions

libmenu-cache.so

contains the menu-cache API functions.

Last updated on 2017-02-20 16:33:44 -0800

libfm-1.2.5

Introduction to libfm

The libfm package contains a library used to develop file managers providing some file management utilities.

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

Package Information

libfm Dependencies

Required

GTK+-2.24.31 and menu-cache-1.0.2

Recommended
Optional

dbus-glib-0.108 and UDisks-1.0.5 (for volume management - experimental) or Gvfs-1.30.3 and GTK-Doc-1.25

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libfm

Installation of libfm

Install libfm by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --disable-static  &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

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

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Program: libfm-pref-apps and lxshortcut
Installed Libraries: libfm.so, libfm-extra.so and libfm-gtk.so
Installed Directories: /etc/xdg/libfm, /usr/lib/libfm, /usr/share/gtk-doc/html/libfm and /usr/share/libfm

Short Descriptions

libfm-pref-apps

sets preferred applications for programs based on libfm.

lxshortcut

is a small program used to edit application shortcuts.

libfm.so

contains the libfm API functions.

Last updated on 2017-02-20 16:33:44 -0800

PCManFM-1.2.5

Introduction to PCManFM

The PCManFM package contains an extremely fast, lightweight, yet feature-rich file manager with tabbed browsing.

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

Package Information

PCManFM Dependencies

Required

libfm-1.2.5

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pcmanfm

Installation of PCManFM

Install PCManFM by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: pcmanfm
Installed Libraries: None
Installed Directories: /etc/xdg/pcmanfm, /usr/lib/pcmanfm and /usr/share/pcmanfm

Short Descriptions

pcmanfm

is a lightweight GTK+ based file manager for X Window System.

Last updated on 2017-02-20 16:33:44 -0800

LXPanel-0.9.3

Introduction to LXPanel

The LXPanel package contains a lightweight X11 desktop panel.

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

Package Information

LXPanel Dependencies

Required

keybinder2-0.3.0, libwnck-2.30.7, lxmenu-data-0.1.5 and menu-cache-1.0.2

Recommended
Optional

libindicator (indicator plugin)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxpanel

Installation of LXPanel

Install LXPanel by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: lxpanel and lxpanelctl
Installed Libraries: liblxpanel.so and several under /usr/lib/lxpanel/plugins
Installed Directories: /etc/xdg/lxpanel, /usr/include/lxpanel, /usr/lib/lxpanel, and /usr/share/lxpanel

Short Descriptions

lxpanel

is a lightweight GTK+ based panel for the LXDE Desktop.

lxpanelctl

is a program that controls lxpanel.

Last updated on 2017-02-20 16:33:44 -0800

LXAppearance-0.6.3

Introduction to LXAppearance

The LXAppearance package contains a desktop-independent theme switcher for GTK+.

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

Package Information

LXAppearance Dependencies

Required

GTK+-2.24.31

Recommended
Optional

libxslt-1.1.29 with docbook-xml-4.5 and docbook-xsl-1.79.1 (to build man pages)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxappearance

Installation of LXAppearance

Install LXAppearance by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  \
            --enable-dbus     &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-dbus: This switch enables DBus support in LXAppearance which is useful for communicating with LXSession. Remove it if you are not building LXDE or have not installed dbus-glib-0.108.

--enable-man: Use this switch if you have installed optional dependencies and wish to rebuild the manual pages.

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

Contents

Installed Program: lxappearance
Installed Libraries: None
Installed Directories: /usr/include/lxappearance and /usr/share/lxappearance

Short Descriptions

lxappearance

is a program used to change GTK+ themes, icon themes, and fonts used by applications.

Last updated on 2017-02-20 16:33:44 -0800

LXSession-0.5.3

Introduction to LXSession

The LXSession package contains the default session manager for LXDE.

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

Package Information

LXSession Dependencies

Required

dbus-glib-0.108, libunique-1.1.6, lsb_release-1.4 (runtime for lxde-logout so it does not crash), Polkit-0.113, and Vala-0.34.4

Optional

ConsoleKit2-1.0.2 (used at runtime by lxsession-logout), GTK+-3.22.8, and libxslt-1.1.29 with docbook-xml-4.5 and docbook-xsl-1.79.1 (to build man pages)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxsession

Installation of LXSession

Install LXSession by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-man: This switch disables building of the manual pages. Remove it if you have installed optional dependencies and wish to build the manual pages.

--enable-gtk3: Builds against GTK+-3 instead of GTK+-2, which is required anyway by libunique.

Contents

Installed Programs: lxclipboard, lxlock, lxpolkit, lxsession, lxsession-db, lxsession-default, lxsession-default-apps, lxsession-default-terminal, lxsession-edit, lxsession-logout, lxsession-xdg-autostart, lxsession-xsettings, and lxsettings-daemon
Installed Libraries: None
Installed Directory: /usr/share/lxsession

Short Descriptions

lxclipboard

is a clipboard utility for LXSession and LXDE.

lxlock

locks the local X display until a password is entered.

lxpolkit

is the polkit agent.

lxsession

is a lightweight X session manager.

lxsession-default

launch default applications set by LXsession.

lxsession-default-apps

is an utility to configure lxsession and its default applications.

lxsession-default-terminal

launch default terminal set by LXSession.

lxsession-edit

is the standard session edit manager used by LXDE.

lxsession-logout

is a program to logout from LXSession.

lxsession-xdg-autostart

handle autostart spec of freedesktop.org.

lxsession-xsettings

is a tool to configure gtk+ themes, keyboard, and mouse for you on session startup.

lxsettings-daemon

is the settings daemon for LXsession.

Last updated on 2017-02-20 16:33:44 -0800

lxde-common-0.99.2

Introduction to LXDE Common

The LXDE Common package provides a set of default configuration for LXDE.

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

Package Information

LXDE Common Dependencies

Required

lxde-icon-theme-0.5.1, LXPanel-0.9.3, LXSession-0.5.3, openbox-3.6.1 (runtime), and PCManFM-1.2.5

Recommended
Recommended Runtime Dependencies
Optional Runtime Dependencies

A notification daemon such as notification-daemon-3.20.0 or xfce4-notifyd-0.2.4, and a display manager such as lxdm-0.5.3 or sddm-0.14.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxde-common

Installation of LXDE Common

Install LXDE Common by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

If you have installed recommended dependencies, run the following commands as the root user:

update-mime-database /usr/share/mime &&
gtk-update-icon-cache -qf /usr/share/icons/hicolor &&
update-desktop-database -q

Starting LXDE

You can start LXDE from runlevel 3, using xinit-1.3.4, or from runlevel 5, using a Display Manager, such as lxdm-0.5.3.

To start LXDE using xinit-1.3.4, run the following commands:

cat > ~/.xinitrc << "EOF"
# No need to run dbus-launch, since it is run by startlxde
ck-launch-session startlxde
EOF

startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debug purposes. This can be done starting X with:

startx &> ~/.x-session-errors

Note

You may wish to drop consolekit, just using startlxde in ~/.xinitrc. However some capabilities such as mounting or umounting file systems from a file manager will not be available, 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: lxde-logout, openbox-lxde and startlxde
Installed Libraries: None
Installed Directories: /etc/xdg/{lxpanel,lxsession,openbox,pcmanfm}/LXDE and /usr/share/lxde

Short Descriptions

lxde-logout

is used to quit the desktop session for LXDE.

openbox-lxde

is a wrapper script which runs Openbox with LXDE specific config file.

startlxde

is used to start the desktop session for LXDE.

Last updated on 2017-02-22 10:02:00 -0800

Chapter 38. LXDE Applications

This is a small collection of optional applications that add extra capabilities to the LXDE desktop.

GPicView-0.2.5

Introduction to GPicView

The GPicView package contains a lightweight image viewer.

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

Package Information

GPicView Dependencies

Required

GTK+-2.24.31

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gpicview

Installation of GPicView

Install GPicView by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
sed -i 's/Utility;//' /usr/share/applications/gpicview.desktop

If you have xdg-utils-1.1.1 installed, as the root user, you should run the xdg-icon-resource forceupdate --theme hicolor command, for the installed icon to be displayed in the menu item.

Command Explanations

sed -i ...: Fixes submenu for GPicView.

Contents

Installed Program: gpicview
Installed Libraries: None
Installed Directory: /usr/share/gpicview

Short Descriptions

gpicview

is a lightweight image viewer.

Last updated on 2017-02-20 16:33:44 -0800

lxappearance-obconf-0.2.3

Introduction to LXAppearance OBconf

The LXAppearance OBconf package contains a plugin for LXAppearance to configure OpenBox.

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

Package Information

LXAppearance OBconf Dependencies

Required

LXAppearance-0.6.3 and openbox-3.6.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxappearance-obconf

Installation of LXAppearance OBconf

Install LXAppearance OBconf by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: None
Installed Library: /usr/lib/lxappearance/plugins/obconf.so
Installed Directories: /usr/lib/lxappearance and /usr/share/lxappearance/obconf

Last updated on 2017-02-20 16:33:44 -0800

LXInput-0.3.5

Introduction to LXInput

The LXInput package contains a small program used to configure keyboard and mouse for LXDE.

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

Package Information

LXInput Dependencies

Required

GTK+-2.24.31

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxinput

Installation of LXInput

Install LXInput by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: lxinput
Installed Libraries: None
Installed Directory: /usr/share/lxinput

Short Descriptions

lxinput

is a program used to configure keyboard and mouse.

Last updated on 2017-02-20 16:33:44 -0800

LXRandR-0.3.1

Introduction to LXRandR

The LXRandR package contains a monitor configuration tool for LXDE.

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

Package Information

LXRandR Dependencies

Required

GTK+-2.24.31 and Xorg Applications

Optional

libxslt-1.1.29 with docbook-xml-4.5 and docbook-xsl-1.79.1 (to build man pages)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxrandr

Installation of LXRandR

Install LXRandR by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-man: Use this switch if you have installed optional dependencies and wish to build the manual pages.

Contents

Installed Program: lxrandr
Installed Libraries: None
Installed Directories: None

Short Descriptions

lxrandr

is a GTK+ interface to XRandR.

Last updated on 2017-02-20 16:33:44 -0800

LXTask-0.1.8

Introduction to LXTask

The LXTask package contains a lightweight and desktop-independent task manager.

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

Package Information

LXTask Dependencies

Required

GTK+-2.24.31

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxtask

Installation of LXTask

Install LXTask by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: lxtask
Installed Libraries: None
Installed Directories: None

Short Descriptions

lxtask

is a lightweight and desktop-independent task manager.

Last updated on 2017-02-20 16:33:44 -0800

LXTerminal-0.3.0

Introduction to LXTerminal

The LXTerminal package contains a VTE-based terminal emulator for LXDE with support for multiple tabs.

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

Package Information

LXTerminal Dependencies

Required

Vte-0.28.2

Optional

libxslt-1.1.29 with docbook-xml-4.5 and docbook-xsl-1.79.1 (to build man pages)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxterminal

Installation of LXTerminal

Install LXTerminal by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-man: Use this switch if you have installed optional dependencies and wish to build the manual pages.

Contents

Installed Program: lxterminal
Installed Libraries: None
Installed Directory: /usr/share/lxterminal

Short Descriptions

lxterminal

a lightweight terminal emulator for the LXDE desktop.

Last updated on 2017-02-20 16:33:44 -0800

Part XI. LXQt

Chapter 39. LXQt Desktop

LXQt is an extremely fast-performing and energy-saving desktop environment.

LXQt is a Qt based Desktop Environment. It comes with a beautiful interface, multi-language support, standard keyboard shortcuts and additional features like tabbed file browsing. 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

Caution

Due to recent changes in grep it is essential that the installing system be set to an UTF-8 locale. An example is export LANG=en_US.UTF-8, but any UTF-8 locale is sufficient. Failure to do this will result in a faulty installation.

LXQt can be installed in /usr or /opt/lxqt.

Installing in /usr

Installing in /usr creates a simpler setup. Run:

export LXQT_PREFIX=/usr

Either add that to your own .bash_profile so that it will still be set if you build the packages over a period of time, or else add it to the system profile as the root user:

cat > /etc/profile.d/lxqt.sh << "EOF"
# Begin LXQt profile

export LXQT_PREFIX=/usr

# End LXQt profile
EOF

There is no other configuration needed to install LXQt in /usr.

Installing in /opt/lxqt

Installing in /opt/lxqt may simplify upgrading to a later version of LXQt.

Some variables need to be defined in your system profile, as the root user:

install -vdm755 /opt/lxqt/{bin,lib,share/man}

cat > /etc/profile.d/lxqt.sh << "EOF"
# Begin LXQt profile

export LXQT_PREFIX=/opt/lxqt

pathappend /opt/lxqt/bin           PATH
pathappend /opt/lxqt/share/man/    MANPATH
pathappend /opt/lxqt/lib/pkgconfig PKG_CONFIG_PATH
pathappend /opt/lxqt/lib/plugins   QT_PLUGIN_PATH

# End LXQt profile
EOF

cat >> /etc/profile.d/qt5.sh << "EOF"

# Begin Qt5 changes for LXQt

pathappend $QT5DIR/plugins         QT_PLUGIN_PATH

# End Qt5 changes for LXQt
EOF

Expand your /etc/ld.so.conf file:

cat >> /etc/ld.so.conf << "EOF"

# Begin LXQt addition

/opt/lxqt/lib

# End LXQt addition

EOF

Before starting to install the packages in the following pages, remember to execute:

source /etc/profile

Some packages from the KDE Frameworks 5 bundle install files into D-Bus directories. In order to have D-Bus find those files, the easiest way is to create a symlink. 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.15. Run the following commands as the root user:

source /etc/profile                                       &&
install -v -dm755                $LXQT_PREFIX/share/icons &&
ln -sfv /usr/share/icons/hicolor $LXQT_PREFIX/share/icons &&
ln -sfv /usr/share/dbus-1        $LXQT_PREFIX/share 

Tip

Sometimes, the installation paths are hardcoded into installed files. This is the reason why /opt/lxqt is used as installation prefix instead of /opt/lxqt-0.11.1. After installing LXQt Desktop, you may rename the directory and create a symlink:

mv /opt/lxqt{,-0.11.1}
ln -sfv lxqt-0.11.1 /opt/lxqt

Later on, you may want to install other versions of LXQt Desktop. To do that, just remove the symlink and use /opt/lxqt as the prefix again. Which version of LXQt Desktop you use depends only on where the symlink points. No other reconfiguration will be needed.

Notes about building LXQt dependencies

LXQt obviously needs Qt-5.8.0, but not all Qt5 modules and dependencies are necessary. Since the aim of LXQt is to be light weight, it may be interesting to cut down the Qt5 overhead, and to build only parts of it. To build Qt and LXQT dependencies, the proposed order is the following:

  1. Build Linux-PAM-1.3.0, Shadow-4.4, and Sudo-1.8.19p2, with their dependencies

  2. Build the whole X Window System chapter, with Wayland support, and replacing twm vith openbox-3.6.1 (and its required dependencies). Some Xorg applications and fonts may be omitted, but with a negligible impact on build time and size

  3. Build GTK+-2.24.31 and its required and recommended dependencies. GTK+2 is needed for libfm-1.2.5, and brings the gtk-update-icon-cache executable, which is needed by libqtxdg

  4. Build required Qt dependencies, and some of the recommended or optional dependencies, namely: dbus-1.10.14, alsa-lib-1.1.3, PulseAudio-10.0, and libxkbcommon-0.7.1

  5. Build the required parts of Qt-5.8.0. To skip all modules but the four needed for LXQt, do:

    ls -Fd qt* | grep / | sed 's/^/-skip /;s/qt//;s@/@@' > tempconf
    sed -i '/base/d;/tools/d;/x11extras/d;/svg/d' tempconf
    # if you plan to build SDDM, add:
    sed -i '/declarative/d'
    ./configure <book flags> $(cat tempconf)
    

    The time needed to complete the Qt installation is thus reduced to around 6 SBU

  6. Build miscelaneous dependencies (with their required ones): libstatgrab-0.91, Polkit-0.113, ConsoleKit2-1.0.2, pm-utils-1.4.1, lm_sensors-3.4.0, UPower-0.99.4, and libfm-1.2.5. If CMake-3.7.2 has not been built during the preceding steps, build it now

  7. Build KDE frameworks dependencies: extra-cmake-modules-5.31.0, libdbusmenu-qt-0.9.3+16.04.20160218, and polkit-qt-0.112.0

  8. Finally, build some desktop utilities: xdg-utils-1.1.1 (needs only xmlto), Xdg-user-dirs-0.15, oxygen-icons5-5.31.0 or other sets of icons

Last updated on 2017-02-21 12:13:57 -0800

lxqt-build-tools-0.3.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-8.0 platform.

Package Information

lxqt-build-tools Dependencies

Required

CMake-3.7.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-build-tools

Installation of lxqt-build-tools

Install lxqt-build-tools by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      .. &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: None
Installed Library: None
Installed Directories: /usr/share/cmake/lxqt-build-tools

Last updated on 2017-02-21 12:13:57 -0800

libsysstat-0.3.3

Introduction to libsysstat

The libsysstat package contains a library used to query system info and statistics.

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

Package Information

libsysstat Dependencies

Required

CMake-3.7.2, lxqt-build-tools-0.3.1, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsysstat

Installation of libsysstat

Install libsysstat by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: None
Installed Library: libsysstat-qt5.so
Installed Directories: $LXQT_PREFIX/{include,share/cmake}/sysstat-qt5

Short Descriptions

libsysstat-qt5.so

contains the libsysstat-qt5 API functions.

Last updated on 2017-02-21 12:13:57 -0800

libqtxdg-2.0.0

Introduction to libqtxdg

The libqtxdg is a Qt implementation of freedesktop.org xdg specifications.

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

Package Information

libqtxdg Dependencies

Required

CMake-3.7.2 and Qt-5.8.0

Optional (runtime)

GTK+-2.24.31 (for gtk-update-icon-cache)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libqtxdg

Installation of libqtxdg

Install libqtxdg by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DBUILD_TESTS=ON: Builds tests.

-DBUILD_DEV_UTILS=ON: Builds and installs development utilities.

Contents

Installed Programs: None
Installed Library: libQt5Xdg.so and libQt5XdgIconLoader.so
Installed Directories: $LXQT_PREFIX/include/{qt5xdg,qt5xdgiconloader} and $LXQT_PREFIX/share/cmake/{qt5xdg,qt5xdgiconloader}

Short Descriptions

libQt5Xdg.so

contains the libQt5Xdg API functions.

libQt5XdgIconLoader.so

contains the libQt5XdgIconLoader API functions.

Last updated on 2017-02-21 12:13:57 -0800

Kwindowsystem-5.31.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-8.0 platform.

Note

This package is extracted from the KF5 set of packages. If KDE Frameworks-5.31.0 is built, do NOT also build this package as presented here.

Package Information

Kwindowsystem Dependencies

Required

extra-cmake-modules-5.31.0, Xorg Libraries, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kwindowsystem

Installation of kwindowsystem

Install kwindowsystem by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev ..                         &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5WindowSystem.so
Installed Directories: $LXQT_PREFIX/lib/cmake/KF5WindowSystem, $LXQT_PREFIX/include/KF5, and $LXQT_PREFIX/lib/plugins/kf5

Short Descriptions

libKF5WindowSystem.so

contains the KF5 Windowing API functions.

Last updated on 2017-02-21 12:13:57 -0800

liblxqt-0.11.1

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-8.0 platform.

Package Information

liblxqt Dependencies

Required

libqtxdg-2.0.0 and (kwindowsystem-5.31.0 for lxqt or KDE Frameworks-5.31.0)

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/liblxqt

Installation of liblxqt

Install liblxqt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..                                  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Programs: None
Installed Library: liblxqt.so
Installed Directories: $LXQT_PREFIX/{include,share/cmake}/lxqt

Short Descriptions

liblxqt.so

contains the liblxqt API functions.

Last updated on 2017-02-21 12:13:57 -0800

libfm-qt-0.11.2

Introduction to libfm-qt

libfm-qt is the Qt port of libfm, a library providing components to build desktop file managers.

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

Package Information

libfm-qt Dependencies

Required

CMake-3.7.2, libfm-1.2.5, and Qt-5.8.0

Optional

git-2.11.1(to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libfm-qt

Installation of libfm-qt

Install libfm-qt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..                                  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Remove the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Programs: None
Installed Library: libfm-qt.so
Installed Directories: $LXQT_PREFIX/{include/libfm-qt,share/cmake/fm-qt}

Short Descriptions

libfm-qt.so

contains the libfm-qt API functions.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-about-0.11.1

Introduction to lxqt-about

The lxqt-about package provides the standalone LXQtAbout” dialog.

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

Package Information

lxqt-about Dependencies

Required

liblxqt-0.11.1

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-about

Installation of lxqt-about

Install lxqt-about by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: lxqt-about
Installed Libraries: None
Installed Directory: None

Short Descriptions

lxqt-about

is the LXQtAbout” dialog.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-admin-0.11.1

Introduction to lxqt-admin

The lxqt-admin package provides two GUI tools to adjust setiings of the operating system LXQt is running on.

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

Package Information

lxqt-admin Dependencies

Required

liblxqt-0.11.1 and Polkit-0.113

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-admin

Installation of lxqt-admin

Install lxqt-admin by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

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 time and date.

lxqt-admin-user

is a GUI to manage users and groups.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-common-0.11.2

Introduction to lxqt-common

The lxqt-common package provides common files for various LXQt components.

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

Package Information

lxqt-common Dependencies

Required

liblxqt-0.11.1, hicolor-icon-theme-0.15, and at runtime Xorg Applications (for xmessage)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-common

Installation of lxqt-common

Install lxqt-common by running the following commands:

sed -e '/TryExec/s@=@='$LXQT_PREFIX'/bin/@' \
    -i xsession/lxqt.desktop.in &&

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

mkdir -pv $LXQT_PREFIX/share/lxqt/graphics &&
make install

Command Explanations

sed -e '/TryExec/s@=@='$LXQT_PREFIX'/bin/@' -i xsessions/lxqt.desktop.in: If using a display manager, the full path of the “TryExec” directive has to be given so that the LXQt desktop appear in the sessions list.

Contents

Installed Program: startlxqt
Installed Libraries: None
Installed Directories: /etc/xdg/{pcmanfm-qt,lxqt} and $LXQT_PREFIX/share/{desktop-directories,lxqt/{graphics,openbox,themes}}

Short Descriptions

startlxqt

is used to start the desktop session for LXQt.

Last updated on 2017-02-21 12:13:57 -0800

Kwayland-5.31.0 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-8.0 platform.

Note

This package is extracted from the KF5 set of packages. If KDE Frameworks-5.31.0 is built, do NOT also build this package as presented here.

Package Information

Kwayland Dependencies

Required

extra-cmake-modules-5.31.0, Mesa-13.0.4 (built with Wayland-1.12.0 support), and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kwayland

Installation of kwayland

Install kwayland by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX                          \
      -DCMAKE_BUILD_TYPE=Release                                   \
      -DCMAKE_INSTALL_LIBDIR=lib                                   \
      -DBUILD_TESTING=OFF                                          \
      -DECM_MKSPECS_INSTALL_DIR=$LXQT_PREFIX/share/mkspecs/modules \
      -Wno-dev ..                                                  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5WaylandClient.so and libKF5WaylandServer.so
Installed Directories: $LXQT_PREFIX/etc, $LXQT_PREFIX/lib/cmake/KF5Wayland, $LXQT_PREFIX/include/KF5/KWayland, and $LXQT_PREFIX/share/mkspecs

Short Descriptions

libKF5WaylandClient.so

contains the wayland-client Qt-style wrapper library.

libKF5WaylandServer.so

contains the wayland-server Qt-style wrapper library.

Last updated on 2017-02-21 12:13:57 -0800

Libkscreen-5.9.2 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-8.0 platform.

Note

This package is extracted from the KDE Plasma set of packages. If Plasma-5.9.2 is built, do NOT also build this package as presented here.

Package Information

Libkscreen Dependencies

Required

kwayland-5.31.0 for lxqt

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kwayland

Installation of libkscreen

Install libkscreen by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev ..                         &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5Screen.so
Installed Directories: $LXQT_PREFIX/lib/cmake/KF5ScreenConfig, $LXQT_PREFIX/lib/libexec/kf5, $LXQT_PREFIX/include/KF5/KScreen, and $LXQT_PREFIX/lib/plugins/kf5/kscreen

Short Descriptions

libKF5Screen.so

contains the KDE Screen Management library

Last updated on 2017-02-21 12:13:57 -0800

lxqt-config-0.11.1

Introduction to lxqt-config

The lxqt-config package provides the LXQt system settings center.

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

Package Information

lxqt-config Dependencies

Required

liblxqt-0.11.1 and (libkscreen-5.9.2 for lxqt or Plasma-5.9.2)

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-config

Installation of lxqt-config

Install lxqt-config by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..                                  &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

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: $LXQT_PREFIX/lib/lxqt-config

Short Descriptions

lxqt-config

is the LXQt configuration center.

lxqt-config-appearance

is the LXQt program used to change themes, icon themes, and fonts used by applications.

lxqt-config-brightness

configures brightness settings of ouput devices.

lxqt-config-file-associations

is the LXQt program used to associate files with programs.

lxqt-config-input

is the LXQt program used to configure input devices (e.g. mouse speed, cursor, keyboard speed, keyboard layout).

lxqt-config-locale

configures the locale used in LXQt sessions.

lxqt-config-monitor

is the LXQt xrandr based program used to configure the monitor.

liblxqt-config-cursor.so

contains the liblxqt-config-cursor API functions.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-globalkeys-0.11.1

Introduction to lxqt-globalkeys

The lxqt-globalkeys package contains a daemon used to register global keyboard shortcuts and a key shortcut GUI editor.

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

Package Information

lxqt-globalkeys Dependencies

Required

liblxqt-0.11.1

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-globalkeys

Installation of lxqt-globalkeys

Install lxqt-globalkeys by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Programs: lxqt-config-globalkeyshortcuts and lxqt-globalkeysd
Installed Libraries: liblxqt-globalkeys.so and liblxqt-globalkeys-ui.so
Installed Directories: $LXQT_PREFIX/include/lxqt-globalkeys{,-ui} and $LXQT_PREFIX/share/cmake/lxqt-globalkeys{,-ui}

Short Descriptions

lxqt-config-globalkeyshortcuts

is a key shortcuts GUI editor.

lxqt-globalkeysd

is a global key shortcuts daemon.

lxqt-globalkeys.so

contains the lxqt-globalkeys API functions.

liblxqt-globalkeys-ui.so

contains the liblxqt-globalkeys-ui API functions.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-notificationd-0.11.1

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-8.0 platform.

Package Information

lxqt-notificationd Dependencies

Required

liblxqt-0.11.1 and lxqt-common-0.11.2

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-notificationd

Installation of lxqt-notificationd

Install lxqt-notificationd by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Programs: lxqt-config-notificationd and lxqt-notificationd
Installed Libraries: None
Installed Directories: None

Short Descriptions

lxqt-config-notificationd

is the lxqt-notificationd GUI configuration tool.

lxqt-notificationd

is the LXQt notification daemon.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-policykit-0.11.1

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-8.0 platform.

Package Information

lxqt-policykit Dependencies

Required

liblxqt-0.11.1, polkit-qt-0.112.0

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-policykit

Installation of lxqt-policykit

Install lxqt-policykit by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      ..                                  &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: lxqt-policykit-agent
Installed Libraries: None
Installed Directory: None

Short Descriptions

lxqt-policykit-agent

is the LXQt PolicyKit agent.

Last updated on 2017-02-21 12:13:57 -0800

Kidletime-5.31.0 for lxqt

Introduction to kidletime

KIdleTime is used to report idle time of user and system. It is useful not only for finding out about 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-8.0 platform.

Note

This package is extracted from the KF5 set of packages. If KDE Frameworks-5.31.0 is built, do NOT also build this package as presented here.

Package Information

Kidletime Dependencies

Required

extra-cmake-modules-5.31.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kidletime

Installation of kidletime

Install kidletime by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev ..                         &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5IdleTime.so
Installed Directories: $LXQT_PREFIX/lib/plugins/kf5/org.kde.kidletime.platforms, $LXQT_PREFIX/lib/cmake/KF5IdleTime, and $LXQT_PREFIX/include/KF5/KIdleTime

Short Descriptions

libKF5GuiAddons.so

contains the KDE API for idle time reports.

Last updated on 2017-02-21 12:13:57 -0800

Solid-5.31.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-8.0 platform.

Note

This package is extracted from the KF5 set of packages. If KDE Frameworks-5.31.0 is built, do NOT also build this package as presented here.

Package Information

Solid Dependencies

Required

extra-cmake-modules-5.31.0 and Qt-5.8.0

Optional (runtime)

UDisks-2.1.8, UPower-0.99.4, and media-player-info

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/solid

Installation of solid

Install solid by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev ..                         &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: solid-hardware5
Installed Library: libKF5Solid.so and libsolidextensionplugin.so
Installed Directories: $LXQT_PREFIX/lib/cmake/KF5Solid, $LXQT_PREFIX/include/KF5/Solid, and $LXQT_PREFIX/lib/qml/org/kde/solid

Short Descriptions

libKF5Solid.so

provides a way of querying and interacting with hardware independently of the underlying operating system.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-powermanagement-0.11.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-8.0 platform.

Package Information

lxqt-powermanagement Dependencies

Required

liblxqt-0.11.1, (kidletime-5.31.0 for lxqt and solid-5.31.0 for lxqt) or KDE Frameworks-5.31.0, and UPower-0.99.4

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-powermanagement

Installation of lxqt-powermanagement

Install lxqt-powermanagement by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Remove the need for git-2.11.1, which would otherwise be requested to download the translation files.

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.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-qtplugin-0.11.1

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-8.0 platform.

Package Information

lxqt-qtplugin Dependencies

Required

liblxqt-0.11.1 and libdbusmenu-qt-0.9.3+16.04.20160218

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-qtplugin

Installation of lxqt-qtplugin

Install lxqt-qtplugin by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Configuring lxqt-qtplugin

Configuration Information

To use the plugin in Qt 5, the environment variable QT_QPA_PLATFORMTHEME must be set to “lxqt”. One way to do that is to issue as the root user:

cat >> /etc/profile.d/lxqt.sh << "EOF"
# Begin lxqt-qtplugin configuration

export QT_QPA_PLATFORMTHEME=lxqt

# End lxqt-qtplugin configuration
EOF

Contents

Installed Programs: None
Installed Library: libqtlxqt.so
Installed Directory: $QT5DIR/plugins/platformthemes

Short Descriptions

libqtlxqt.so

contains the LXQt QT plugin.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-session-0.11.1

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-8.0 platform.

Package Information

lxqt-session Dependencies

Required

liblxqt-0.11.1, (kwindowsystem-5.31.0 for lxqt or KDE Frameworks-5.31.0), and Xdg-user-dirs-0.15

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-session

Installation of lxqt-session

Install lxqt-session by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Configuring lxqt-session

Window Managers other than openbox-3.6.1 may be used, e.g. Xfwm4-4.12.3. Notice that IceWM-1.3.12 is not a valid replacement. Fluxbox does work, although in this context (with lxqt-config-0.11.1) openbox-3.6.1 is better. The /etc/xdg/lxqt/windowmanagers.conf comes with several 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 /etc/xdg/lxqt/windowmanagers.conf, you can use the lxqt-config-session "search" button, e.g. for Fluxbox-1.3.7, navigating through the file system until you can choose fluxbox. Alternatively, if you wish the Window Manager of your choice to appear in the drop down list, include it in /etc/xdg/lxqt/windowmanagers.conf. For Fluxbox-1.3.7, include the line

fluxbox/Name=Fluxbox

and it will appear as an option in the drop down list. To change the WM, after selecting it, you need to restart the session.

Contents

Installed Programs: lxqt-config-session, lxqt-leave and lxqt-session
Installed Libraries: None
Installed Directories: None

Short Descriptions

lxqt-config-session

is a GUI configuration tool for lxqt-session settings.

lxqt-leave

is a graphical dialog to terminate the session.

lxqt-session

is a lightweight X session manager.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-l10n-0.11.2

Introduction to lxqt-l10n

The lxqt-l10n package provides translations for all components of the LXQt desktop.

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

Package Information

lxqt-l10n Dependencies

Required

liblxqt-0.11.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-l10n

Installation of lxqt-l10n

Install lxqt-l10n by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DWITH_<PACKAGE>=no: Do not install translations for PACKAGE, where PACKAGE is COMPTON_CONF, LIBFM_QT, LIBLXQT, LXIMAGE_QT, LXQT_ABOUT, LXQT_ADMIN, LXQT_CONFIG, LXQT_GLOBALKEYS, LXQT_NOTIFICATIOND, LXQT_OPENSSH_ASKPASS, LXQT_PANEL, LXQT_POLICYKIT, LXQT_POWERMANAGEMENT, LXQT_RUNNER, LXQT_SESSION, LXQT_SUDO, OBCONF_QT, PCMANFM_QT, or QTERMINAL.

Contents

Installed Program: None
Installed Libraries: None
Installed Directory: $LXQT_PREFIX/share/compton-conf/translations, $LXQT_PREFIX/share/libfm-qt/translations, $LXQT_PREFIX/share/lximage-qt/translations, $LXQT_PREFIX/share/lxqt/translations, $LXQT_PREFIX/share/obconf-qt/translations, $LXQT_PREFIX/share/pcmanfm-qt/translations, and $LXQT_PREFIX/share/qterminal/translations

Last updated on 2017-02-21 12:13:57 -0800

Kguiaddons-5.31.0 for lxqt

Introduction to kguiaddons

The KDE GUI addons provide utilities for graphical user interfaces in the areas of colors, fonts, text, images, and keyboard input.

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

Note

This package is extracted from the KF5 set of packages. If KDE Frameworks-5.31.0 is built, do NOT also build this package as presented here.

Package Information

Kguiaddons Dependencies

Required

extra-cmake-modules-5.31.0, Xorg Libraries, and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/kguiaddons

Installation of kguiaddons

Install kguiaddons by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      -DBUILD_TESTING=OFF                 \
      -Wno-dev ..                         &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: libKF5GuiAddons.so
Installed Directories: $LXQT_PREFIX/lib/cmake/KF5GuiAddons and $LXQT_PREFIX/include/KF5/KGuiAddons

Short Descriptions

libKF5GuiAddons.so

contains KDE GUI utilities for graphical user interfaces.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-panel-0.11.1

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-8.0 platform.

Package Information

lxqt-panel Dependencies

Required

KDE Frameworks-5.31.0 or (kguiaddons-5.31.0 for lxqt and solid-5.31.0 for lxqt) (keyboard indicator plugin), lxqt-globalkeys-0.11.1, libdbusmenu-qt-0.9.3+16.04.20160218, liblxqt-0.11.1, lxmenu-data-0.1.5, and menu-cache-1.0.2

Recommended
Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-panel

Installation of lxqt-panel

Install lxqt-panel by running the following commands:

sed -e 's:<KF5/KWindowSystem/:<:'               \
    -i plugin-taskbar/lxqttaskgroup.{h,cpp}     &&

sed -e '/kbdinfo.h/i #undef explicit'           \
    -i plugin-kbindicator/src/x11/kbdlayout.cpp &&

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..                                  &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed ... plugin-taskbar/lxqttaskgroup.{h,cpp}: Removes a hard coded directory from an include file and allows the system to find it.

sed ... kbdlayout.cpp: Fixes an upstream workaround for a namespace conflict. See this archlinux patch.

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

-D<plugin>_PLUGIN=no: Disable <plugin>, where <plugin> may be CLOCK, COLORPICKER, CPULOAD, DIRECTORYMENU, DESKTOPSWITCH, KBINDICATOR, MAINMENU, MOUNT, QUICKLAUNCH, SENSORS, SHOWDESKTOP, NETWORKMONITOR, SYSSTAT, TASKBAR, STATUSNOTIFIER, TRAY, VOLUME, WORLDCLOCK, or SPACER,

-DVOLUME_USE_<backend>=no: Disable support for <backend> in volume plugin, where backend is ALSA or PULSEAUDIO.

Contents

Installed Program: lxqt-panel
Installed Libraries: several plugins under $LXQT_PREFIX/lib/lxqt-panel
Installed Directories: /etc/xdg/lxqt, $LXQT_PREFIX/share/lxqt/lxqt-panel and $LXQT_PREFIX/lib/lxqt-panel

Short Descriptions

lxqt-panel

is a lightweight Qt5 based panel for the LXQt Desktop.

Last updated on 2017-02-21 12:13:57 -0800

lxqt-runner-0.11.1

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-8.0 platform.

Package Information

lxqt-runner Dependencies

Required

lxqt-globalkeys-0.11.1 and menu-cache-1.0.2

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files), and muparser

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lxqt-runner

Installation of lxqt-runner

Install lxqt-runner by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DRUNNER_MATH=OFF                   \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DRUNNER_MATH=OFF: Removes the dependency on muparser. If you want Math expression support, in lxqt-runner, install muparser and remove this switch.

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Using lxqt-runner

To use lxqt-runner, simultaneously press the Alt-F2 keys. A dialogue window appears in the top center of the screen. When you start typing the 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

is a graphical dialogue for quickly executing a program.

Last updated on 2017-02-21 12:13:57 -0800

pcmanfm-qt-0.11.2

Introduction to pcmanfm-qt

The pcmanfm-qt is a file manager and desktop icon manager (Qt port of pcmanfm and libfm).

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

Package Information

pcmanfm-qt Dependencies

Required

liblxqt-0.11.1, libfm-qt-0.11.2, and lxmenu-data-0.1.5

Recommended
Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pcmanfm-qt

Installation of pcmanfm-qt

Install pcmanfm-qt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: pcmanfm-qt
Installed Library: None
Installed Directories: None

Short Descriptions

pcmanfm-qt

is a file manager.

Last updated on 2017-02-21 12:13:57 -0800

LXQt Desktop Final Instructions

Post-Install Instructions

Final steps, before starting LXQt.

Dependencies to Start LXQt

Required

openbox-3.6.1, or another window manager, such as Xfwm4-4.12.3, or kwin from Plasma-5.9.2. Note that IceWM-1.3.12 is not suitable for LXQt

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/post-install

Final Configuration

If LXQt is installed in /usr, jump directly to LXQt Final Updates, otherwise run the commands in the next section.

Configuration needed only if installing into /opt

If LXQt is installed into /opt, some files have to be copied to /usr/share, so that the system can find them. Run the following commands, as the root user:

ln -svfn $LXQT_PREFIX/share/lxqt /usr/share/lxqt &&

cp -v {$LXQT_PREFIX,/usr}/share/xsessions/lxqt.desktop &&

for i in $LXQT_PREFIX/share/applications/*
do
  ln -svf $i /usr/share/applications/
done

for i in $LXQT_PREFIX/share/desktop-directories/*
do
  ln -svf $i /usr/share/desktop-directories/
done

unset i

ldconfig

LXQt Final Updates

The desktop databases have to be created or updated at this point. Run the following commands as the root user:

update-mime-database /usr/share/mime          &&
xdg-icon-resource forceupdate --theme hicolor &&
update-desktop-database -q

Starting LXQt

You can start LXQt from runlevel 3, using xinit-1.3.4, or from runlevel 5, using a Display Manager, such as sddm-0.14.0.

To start LXQt using xinit-1.3.4, run the following commands:

cat > ~/.xinitrc << "EOF"
ck-launch-session dbus-launch --exit-with-session startlxqt
EOF

startx

The X session starts on the first unused virtual terminal, normally vt7. You can switch to another vtn simultaneously pressing the keys Ctrl-Alt-Fn (n=1, 2, ...). To switch back to the X session, normally started at vt7, use Ctrl-Alt-F7. The vt where the command startx was executed will display many messages, including X starting messages, applications automatically started with the session, and eventually, some warning and error messages. You may prefer to redirect those messages to a log file, which not only will keep the initial vt uncluttered, but can also be used for debug purposes. This can be done starting X with:

startx &> ~/.x-session-errors

Note

You may wish to drop consolekit and/or dbus-launch, e.g., just using startlxqt 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).

Last updated on 2016-10-18 12:09:20 -0700

Chapter 40. LXQt Applications

This is a small collection of optional applications that add extra capabilities to the LXQt desktop.

lximage-qt-0.5.1

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-8.0 platform.

Package Information

lximage-qt Dependencies

Required

libexif-0.6.21 and libfm-qt-0.11.2

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lximage-qt

Installation of lximage-qt

Install lximage-qt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

If you installed in /opt, again as the root user:

ln -svf $LXQT_PREFIX/share/applications/lximage-qt.desktop \
        /usr/share/applications &&

ln -svf $LXQT_PREFIX/share/applications/lximage-qt-screenshot.desktop \
        /usr/share/applications

If you have xdg-utils-1.1.1 installed, as the root user, run xdg-icon-resource forceupdate --theme hicolor.

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: lximage-qt
Installed Libraries: None
Installed Directory: None

Short Descriptions

lximage-qt

is a lightweight image viewer and screenshot program. There is a menu entry at Utilities for the screenshot program. From command line, obtain a full screen or window shot by running lximage-qt --screenshot.

Last updated on 2017-02-21 12:13:57 -0800

obconf-qt-0.11.0

Introduction to obconf-qt

The obconf-qt package is an OpenBox Qt based configuration tool.

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

Package Information

obconf-qt Dependencies

Required

GTK+-2.24.31 (for gtk-update-icon-cache), hicolor-icon-theme-0.15, liblxqt-0.11.1, and openbox-3.6.1

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/obconf-qt

Installation of obconf-qt

Install obconf-qt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&
make

This package does not come with a test suite.

Now, as the root user:

make install

If lxqt-l10n-0.11.2 is not installed in /usr, the translation files are not found. To cure that, run, as the root:

if [ "$LXQT_PREFIX" != /usr ]; then
  ln -s $LXQT_PREFIX/share/obconf-qt /usr/share
fi

Note that the above instruction works only if LXQT_PREFIX has been set as explained in LXQt Pre-Install.

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: obconf-qt
Installed Libraries: None
Installed Directory: None

Short Descriptions

obconf-qt

is a GUI Qt based configuration tool for OpenBox.

Last updated on 2017-02-21 12:13:57 -0800

pavucontrol-qt-0.2.0

Introduction to pavucontrol-qt

pavucontrol-qt is the Qt port of volume control pavucontrol of sound server PulseAudio. Its use is not limited to LXQt.

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

Package Information

pavucontrol-qt Dependencies

Required

liblxqt-0.11.1 and PulseAudio-10.0, built with GLib-2.50.3 support

Optional

git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pavucontrol-qt

Installation of pavucontrol-qt

Install pavucontrol-qt by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DPULL_TRANSLATIONS=no              \
      ..       &&
make

The choice of /usr prefix is due to the general characteristics of this program, which can be used without LXQt.

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: pavucontrol-qt
Installed Libraries: None
Installed Directory: None

Short Descriptions

pavucontrol-qt

is a Qt based GUI configuration tool for pulsaudio settings.

Last updated on 2017-02-21 12:13:57 -0800

qtermwidget-0.7.1

Introduction to qtermwidget

As the name suggests, the qtermwidget is a terminal widget for Qt.

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

Package Information

qtermwidget Dependencies

Required

CMake-3.7.2 and Qt-5.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qtermwidget

Installation of qtermwidget

Install qtermwidget by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_BUILD_TYPE=Release          \
      -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_INSTALL_LIBDIR=lib          \
      ..       &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DBUILD_TEST=true: Builds test application.

Contents

Installed Program: None
Installed Libraries: libqtermwidget5.so
Installed Directories: $LXQT_PREFIX/{include,share{/cmake,}}/qtermwidget5

Short Descriptions

libqtermwidget5.so

contains the libqtermwidget5 API functions.

Last updated on 2017-02-21 12:13:57 -0800

qterminal-0.7.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-8.0 platform.

Package Information

qterminal Dependencies

Required

liblxqt-0.11.1 and qtermwidget-0.7.1

Optional

Doxygen-1.8.13 and texlive-20160523b (or install-tl-unx), for documentation, and git-2.11.1 (to download translation files) or lxqt-l10n-0.11.2 (to add localization files)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qterminal

Installation of qterminal

Install qterminal by running the following commands:

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DPULL_TRANSLATIONS=no              \
      ..       &&

LIBRARY_PATH=$LXQT_PREFIX/lib make

If you have Doxygen-1.8.13 installed, and wish to create the API documentation, issue:

doxygen ../Doxyfile

The html API documentation has been generated with the previous command. Now, if you also have texlive-20160523b (or install-tl-unx) installed, and wish to create the pdf API reference manual, issue:

make -C docs/latex

This package does not come with a test suite.

Now, as the root user:

make install

To install the html API documentation, if you opted to generate it, issue, as the root user:

install -v -m755 -d /usr/share/doc/qterminal-0.7.1/{html,pdf} &&
cp -vr docs/html/* /usr/share/doc/qterminal-0.7.1/html

The pdf API reference manual can be installed with, as the root user:

install -v -m644    docs/latex/refman.pdf \
                    /usr/share/doc/qterminal-0.7.1/pdf

If lxqt-l10n-0.11.2 is not installed in /usr, the translation files are not found. To cure that, run, as the root:

if [ "$LXQT_PREFIX" != /usr ]; then
  ln -s $LXQT_PREFIX/share/qterminal /usr/share
fi

Note that the above instruction works only if LXQT_PREFIX has been set as explained in LXQt Pre-Install.

Command Explanations

LIBRARY_PATH=$LXQT_PREFIX/lib: This environment variable is needed for the linker to find a required library.

-DPULL_TRANSLATIONS=no: Removes the need for git-2.11.1, which would otherwise be requested to download the translation files.

Contents

Installed Program: qterminal
Installed Libraries: None
Installed Directories: /usr/share/doc/qterminal-0.7.1 (if the documentation is installed)

Short Descriptions

qterminal

is a Qt based lightweight terminal emulator.

Last updated on 2017-02-21 12:13:57 -0800

QScintilla-gpl-2.10

Introduction to QScintilla

QScintilla is a port to Qt of Scintilla. As well as features found in standard text editing components, it includes features especially useful when editing and debugging source code: language syntax styling, error indicators, code completion, call tips, code folding, margins can contain markers like those used in debuggers to indicate breakpoints and the current line, recordable macros, multiple views and, of course, printing.

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

Package Information

QScintilla Dependencies

Required

chrpath-0.16 and Qt-5.8.0

Optional

PyQt (for Python Qt bindings)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qscintilla

Installation of QScintilla

Note

The instructions in this page are just for the QScintilla application. Code is included in the tarball for QScintilla Qt Designer plugin and Python bindings.

Install QScintilla by running the following commands:

cd Qt4Qt5             &&
qmake qscintilla.pro  &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&

ln -sfv libqscintilla2_qt5.so.13.0.0 $QT5DIR/lib/libqt5scintilla2.so

If you wish to install the documentation, issue, as the root user:

install -v -m755 -d $QT5DIR/share/doc/QScintilla-2.10/html &&
install -v -m644    ../doc/html-Qt4Qt5/* \
                    $QT5DIR/share/doc/QScintilla-2.10/html

Command Explanations

ln -sfv ...: This command creates a compatibility symlink needed by some programs.

Contents

Installed Programs: None
Installed Libraries: $QT5DIR/lib/libqt5scintilla2.so (link to libqscintilla2_qt5.so) and $QT5DIR/lib/libqscintilla2_qt5.so
Installed Directories: $QT5DIR/{include/Qsci,qsci,share/doc/QScintilla-2.10}/html

Short Descriptions

libqscintilla2_qt5.so

contains the QScintilla Qt5 API functions.

Last updated on 2017-02-21 12:13:57 -0800

juffed-0.10.r71.gc3c1a3f

Introduction to JuffEd

The JuffEd package is a Qt based editor with support for multiple tabs. It is simple and clear, but very powerful. It supports language syntax highlighting, auto-indents in accordance with file type, code blocks folding, matching braces highlighting with instant jumps between them, powerful search and replacing text using regular expressions (including multiline ones) with the opportunity to use matches \1, \2, … in substitutions, a terminal emulator, saving named sessions and many other features.

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

Package Information

The source tarball shown above was created by the BLFS team by cloning the source code repository, finding the correct version to rename accordingly the source code directory, removing .git directory and .gitignore file, and finally making the compressed tarball. No other modification has been made.

JuffEd Dependencies

Required

qscintilla-2.10

Recommended
Optional

desktop-file-utils-0.23 and Enca

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/juffed

Installation of JuffEd

For compilation with Qt4, see “Command Explanations” below. Install JuffEd by running the following commands:

sed -i 's/"64"/""/' cmake/LibSuffix.cmake &&

mkdir -v build &&
cd       build &&

cmake -DCMAKE_INSTALL_PREFIX=$LXQT_PREFIX \
      -DCMAKE_BUILD_TYPE=Release          \
      -DBUILD_TERMINAL=ON                 \
      -DUSE_QT5=true                      \
      ..       &&

LIBRARY_PATH=$LXQT_PREFIX/lib make

The choice of /usr prefix is due to the general characteristics of this program, which can be used without LXQt.

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed ... LibSuffix.cmake: Removes the 64 from /lib64.

LIBRARY_PATH=$LXQT_PREFIX/lib: This environment variable is needed for the linker to find a required library.

-DBUILD_TERMINAL=ON: This switch is used in order to enable building the terminal. Toggle to “OFF” or remove the switch, if you do not wish it.

-DUSE_QT5=true: This switch is used in order to build this application linked to Qt5. Toggle to “false”, if you prefer to use Qt4.

Contents

Installed Program: juffed
Installed Libraries: libjuff.so, libjuffed-engine-qsci.so and plugins under /usr/lib/juffed/plugins
Installed Directory: /usr/{include,lib,share}/juffed

Short Descriptions

juffed

is a Qt based text editor.

libjuff.so

contains the JuffEd API functions.

libjuffed-engine-qsci.so

contains the QScintilla bindings.

Last updated on 2017-02-21 12:13:57 -0800

QupZilla-2.1.1

Introduction to QupZilla

QupZilla is a fast, feature-rich and lightweight QtWebEngine based browser, originally intended only for educational purposes.

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

Package Information

QupZilla Dependencies

Required

OpenSSL-1.0.2k, and Qt-5.8.0 (with qtwebengine)

Optional

GDB-7.12.1, Hunspell, and libgnome-keyring (Gnome-Keyring plugin)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/qupzilla

Installation of QupZilla

Install QupZilla by running the following commands:

export QUPZILLA_PREFIX=$LXQT_PREFIX &&
qmake                       &&
make

The export command is used for configuring the build. Alternatively, you can add the environment variable to src/defines.pri.

This package does not come with a test suite.

Now, as the root user:

make install

If desktop-file-utils-0.23 and xdg-utils-1.1.1 are installed, run as, the root user:

xdg-icon-resource forceupdate --theme hicolor &&
update-desktop-database -q

Command Explanations

Note

If you wish to use any of the following variables, they need to be exported. You can add them to the export block in the main instructions. Alternatively, instead of exporting, they can be added, one at a line, to src/defines.pri.

CONFIG += debug: Use if you want to build QupZilla with debugging symbols.

GNOME_INTEGRATION=true: Enables Gnome integration, this meaning the build of Gnome-Keyring Password plugin, which provides support for storing passwords in Gnome-Keyring.

KDE_INTEGRATION=true: Enables KDE integration, this meaning the build of KWallet Password plugin, which provides support for storing passwords in KWallet.

Contents

Installed Program: qupzilla
Installed Libraries: libQupZilla.so and plugins under $LXQT_PREFIX/lib/qupzilla/
Installed Directory: $LXQT_PREFIX/{lib,share}/qupzilla

Short Descriptions

qupzilla

is a lightweight QtWebEngine web browser.

libQupZilla.so

contains the libQupZilla API functions.

Last updated on 2017-02-17 19:16:56 -0800

Part XII. X Software

Chapter 41. 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). Libre Office is a suite of programs that can manipulate many different formats including powerpoint presentations.

AbiWord-3.0.2

Introduction to AbiWord

AbiWord is a word processor which is useful for writing reports, letters and other formatted documents.

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

Package Information

Additional Downloads

AbiWord Dependencies

Required

Boost-1.63.0, FriBidi-0.19.7, GOffice-0.10.33, and wv-1.2.9

Recommended
Optional

dbus-glib-0.108, gobject-introspection-1.50.0, libgcrypt-1.7.6, libical-2.0.0, libsoup-2.56.0, Redland-1.0.17, Valgrind-3.12.0. Aiksaurus, Evolution Data Server , GtkMathView, libchamplain , libwmf, libwpd, libwpg, libwps, Link Grammar Parser, Loudmouth, Telepathy GLib , OTS, and Psiconv

Note

To enable many of the optional dependencies, review the information from ./configure --help for the necessary switches you must pass to the configure script.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/abiword

Installation of AbiWord

Install AbiWord by running the following commands:

patch -Np1 -i ../abiword-3.0.2-gtk3_22_render_fix-1.patch &&
./configure --prefix=/usr &&
make

This program does not come with a functional test suite.

Now, as the root user:

make install

Note

In order to install the local help files, a graphics session is recommended.

If you wish to install the local help files, untar and build them first:

tar -xf ../abiword-docs-3.0.2.tar.gz &&
cd abiword-docs-3.0.1                &&
./configure --prefix=/usr            &&
make

and then, as the root user:

make install

Command Explanations

--without-evolution-data-server: This switch disables AbiWord Evolution Data Server support which is known to fail when using recent versions of Evolution Data Server.

--enable-plugins="collab openxml goffice grammar": Build some or all plugins. The openxml plugin enables Abiword to open some .docx files. The grammar plugin requires Link Grammar Parser

Configuring AbiWord

Config File

~/.AbiSuite/templates/normal.awt

Configuration Information

Choose the right template for your language and locale from the list produced by the following command:

ls /usr/share/abiword-3.0/templates

Create the folder ~/.AbiSuite/templates then copy the normal.awt you want into it:

install -v -m750 -d ~/.AbiSuite/templates &&
install -v -m640    /usr/share/abiword-3.0/templates/normal.awt-<lang> \
                    ~/.AbiSuite/templates/normal.awt

Change <lang> by the above command to fit the name of the file you want.

If you are using multiple languages, you may need to edit the template to use a font with greater coverage (e.g. one of the Dejavu fonts, because Abiword does not use fontconfig and can only display glyphs that are provided in the chosen font.

If you have desktop-file-utils-0.23 installed, you should run the update-desktop-database command to update the mimeinfo cache and allow the Help system to work.

If you have xdg-utils-1.1.1 installed, you should run the xdg-icon-resource forceupdate --theme hicolor command, for the installed icon to be displayed in the menu item.

Contents

Installed Program: abiword
Installed Library: libabiword-3.0.so
Installed Directories: /usr/include/abiword-3.0, /usr/lib/abiword-3.0, and /usr/share/abiword-3.0

Short Descriptions

abiword

is the word processor, a wrapper for the functions in libabiword-3.0 - it can also be used on the command line, see man 1 abiword.

libabiword-3.0.so

provides functions to access MS Word documents.

Last updated on 2017-02-21 13:10:36 -0800

Gnumeric-1.12.33

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-8.0 platform.

Package Information

Gnumeric Dependencies

Required

GOffice-0.10.33 and Rarian-0.8.1

Recommended Runtime
Optional

DConf-0.26.0 (to prevent some test failures), gobject-introspection-1.50.0, PyGObject-3.22.0, Valgrind-3.12.0 (for some tests), dblatex (for PDF docs), libgda, Mono, pxlib, and Psiconv

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gnumeric

Installation of Gnumeric

Install Gnumeric by running the following commands:

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

This package must be installed before the test suite is run.

Now, as the root user:

make install

To run the tests, issue make check. Tests should be run from an active X session, and DConf-0.26.0 should be installed to prevent some failures. The valgrind tests are known ot fail.

Command Explanations

sed -e "s@zz-application/zz-winassoc-xls;@@" ...: This sed removes an invalid mime type from the .desktop file.

--enable-pdfdocs: Use this switch if you have installed dblatex and wish to create PDF docs.

Contents

Installed Programs: gnumeric (symlink), gnumeric-1.12.33, ssconvert, ssdiff, ssgrep, and ssindex
Installed Libraries: libspreadsheet.so, gnumeric.so, and several plugins under /usr/lib/gnumeric/1.12.33/plugins/
Installed Directories: /usr/include/libspreadsheet-1.12, /usr/lib/{,goffice/0.10/plugins}/gnumeric, and /usr/share/{,gnome/help,omf,pixmaps}/gnumeric

Short Descriptions

gnumeric

is a symlink to gnumeric-1.12.33.

gnumeric-1.12.33

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.

Last updated on 2017-02-21 13:10:36 -0800

LibreOffice-5.3.0

Introduction to LibreOffice

LibreOffice is a full-featured office suite. It is largely compatible with Microsoft Office and is descended from OpenOffice.org.

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

Package Information

Additional Downloads

LibreOffice Dependencies

Required

Archive::Zip-1.59, UnZip-6.0, Wget-1.19.1, Which-2.21, and Zip-3.0

Recommended

Note

Most of these packages are recommended because if they're not installed, the build process will compile and install its own (often older) version, with the side effect of increasing build and installed disk space and build time.

Optional

Avahi-0.6.32, BlueZ-5.43, DConf-0.26.0, desktop-file-utils-0.23, Doxygen-1.8.13 (not relevant if using --disable-odk), GDB-7.12.1, JUnit-4.11, MariaDB-10.1.21 or MySQL, MIT Kerberos V5-1.15, NASM-2.12.02, SANE-1.0.25, Valgrind-3.12.0, VLC-2.2.4, Apache Commons Codec, Apache Commons HttpClient, Apache Commons Lang, Apache Commons Logging, BeanShell, CoinMP, Cppunit, Firebird, glew (OpenGL Extension Wrangler Library), glyphy, Gnome VFS, hamcrest, Hunspell, Hyphen, iwyu, libabw, libcdr, libcmis, libebook, libexttextcat, libfreehand, liblangtag, libmspub, libmwaw, libodfgen, libpagemaker, librevenge (WordPerfect Document importer), libvisio, libwpd, libwpg, libwps, lp_solve, mdds, MyThes, ogl-math - OpenGL Mathematics (GLM), OpenCOLLADA, Orcus, telepathy-glib , VIGRA, and Zenity

There are many optional dependencies not listed here. They can be found in “download.lst” (source directory).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libreoffice

Installation of LibreOffice

Important

Unlike the other packages, we assume that you have not yet unpacked the package. This is because the --no-overwrite-dir switch is needed in case you unpack as the root user.

tar -xf libreoffice-5.3.0.3.tar.xz --no-overwrite-dir &&
cd libreoffice-5.3.0.3

Create symlinks to tarballs from the source directory so they won't get downloaded again:

install -dm755 external/tarballs &&
ln -sv ../../../libreoffice-dictionaries-5.3.0.3.tar.xz external/tarballs/ &&
ln -sv ../../../libreoffice-help-5.3.0.3.tar.xz         external/tarballs/

If you have downloaded the translations tarball, create a symlink:

ln -sv ../../../libreoffice-translations-5.3.0.3.tar.xz external/tarballs/

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-5.3.0.3:

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.

Prepare LibreOffice for compilation by running the following commands:

sed -e "/gzip -f/d"   \
    -e "s|.1.gz|.1|g" \
    -i bin/distro-install-desktop-integration &&

sed -e "/distro-install-file-lists/d" -i Makefile.in &&

./autogen.sh --prefix=$LO_PREFIX         \
             --sysconfdir=/etc           \
             --with-vendor=BLFS          \
             --with-lang='fr en-GB'      \
             --with-help                 \
             --with-myspell-dicts        \
             --with-alloc=system         \
             --without-junit             \
             --without-system-dicts      \
             --disable-dconf             \
             --disable-odk               \
             --disable-firebird-sdbc     \
             --enable-release-build=yes  \
             --enable-python=system      \
             --with-system-apr           \
             --with-system-boost         \
             --with-system-cairo         \
             --with-system-clucene       \
             --with-system-curl          \
             --with-system-expat         \
             --with-system-graphite      \
             --with-system-harfbuzz      \
             --with-system-icu           \
             --with-system-jpeg          \
             --with-system-lcms2         \
             --with-system-libatomic_ops \
             --with-system-libpng        \
             --with-system-libxml        \
             --with-system-neon          \
             --with-system-nss           \
             --with-system-odbc          \
             --with-system-openldap      \
             --with-system-openssl       \
             --with-system-poppler       \
             --with-system-postgresql    \
             --with-system-redland       \
             --with-system-serf          \
             --with-system-zlib

The instructions below will only build the package without running any unit tests. If you prefer to run the unit tests, replace make build-nocheck with make build or (as a regular user only) just make, but do not be surprised if a unit test fails right at the end of the build and breaks it.

Build the package:

make build-nocheck

Now, as the root user:

make distro-pack-install

If installed in /opt/libreoffice-5.3.0.3 some additional steps are necessary. Issue the following commands, as 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 &&

  # 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.23, 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 libreoffice command and the modules with libreoffice --<module> command, respectively, where <module> is one of base, calc, draw, impress, math or writer. Modules cannot be started using their shell starting script names (see "Installed Programs", below), if LO_PREFIX is other than /usr, unless $LO_PREFIX/bin directory is appended to the PATH.

Command Explanations

sed -e ...: The first sed prevents compression of the manual pages and the second one prevents the install from failing.

--with-vendor=BLFS: This switch sets BLFS as the vendor which is mentioned when you click "About" 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

For a list of the available languages, look in solenv/inc/langlist.mk.

--with-help: Without this switch, the help files are not built.

--with-myspell-dicts: This switch adds myspell dictionaries to the LibreOffice installation set.

--with-alloc=system: This switch tells LibreOffice to use the system allocator instead of its internal one.

--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 HSQLDB tests (the HSQLDB driver is written in Java). If you want to run the tests, be sure to install junit.jar and hamcrest.jar in /usr/share/java .

--without-system-dicts: This switch disables use of dictionaries from system paths, so 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-firebird-sdbc: The bundled version of Firebird does not build properly with GCC-6.

--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 installed Python 3 to build the translations instead of the bundled one.

--with-system-*: These switches prevent LibreOffice from trying to compile its own versions of these dependencies. If you've not installed some of the dependencies, remove the corresponding switches.

--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-gstreamer-1-0: Use this switch if you have not installed gst-plugins-base-1.10.3.

--disable-gtk3: Use this switch if you have not installed GTK+-3, or if you have installed it but wish to use GTK+-2 (the menu icons differ). Note that a GTK+-3 build still requires GTK+-2 to build the gtk-plugin.

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

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

--without-java: This switch disables Java support in LibreOffice. Java is needed for the HSQLDB driver, which allows reading databases created by other programs into libreoffice base.

Contents

Installed Programs: libreoffice, lobase, localc, lodraw, loffice, lofromtemplate, loimpress, lomath, loweb, lowriter, soffice and unopkg; several programs under $LO_PREFIX/lib/libreoffice/program
Installed Libraries: several libraries under $LO_PREFIX/lib/libreoffice/program
Installed Directory: $LO_PREFIX/lib/libreoffice

Short Descriptions

libreoffice (or soffice)

is the main libreofice suite (symlink to $LO_PREFIX/lib/libreoffice/program/soffice).

lobase

is the database manager module shell starting script.

localc

is the spreadsheet module shell starting script.

lodraw

is the vector graphics editor and diagramming tool module shell starting script.

loimpress

is the (PowerPoint) presentations editor and displayer module shell starting script.

lomath

is the mathematical formula editor module shell starting script.

loweb

is the HTML editor module shell starting script.

lowriter

is the word processor module shell starting script.

unopkg

is a tool to manage LibreOffice extensions from the command line.

Last updated on 2017-02-21 16:50:06 -0800

Chapter 42. 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.

Chromium-56.0.2924.87

Introduction to Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

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

Package Information

Additional Downloads

Note

Download this file via wget as:

wget https://github.com/foutrelis/chromium-launcher/archive/v3.tar.gz \
     -O chromium-launcher-3.tar.gz

Chromium Dependencies

Required

alsa-lib-1.1.3, Cups-2.2.2, desktop-file-utils-0.23, dbus-1.10.14, File::BaseDir-0.07, GTK+-2.24.31, hicolor-icon-theme-0.15, MIT Kerberos V5-1.15, Mesa-13.0.4, Ninja-1.7.2, NSS-3.29, Python-2.7.13, usbutils-008, and X Window System

Recommended
Optional

FFmpeg-3.2.4, GConf-3.2.6, gnome-keyring-3.20.0, ICU-58.2, libjpeg-turbo-1.5.1, libpng-1.6.28, libxml2-2.9.4, libvpx-1.6.1, speech-dispatcher (for the screen reader), and snappy

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/chromium

Installation of Chromium

Fix a build issue on Linux-4.5+:

sed 's/#include <sys\/mman\.h>/&\n\n#if defined(MADV_FREE)\n#undef MADV_FREE\n#endif\n/' \
    -i third_party/WebKit/Source/wtf/allocator/PageAllocator.cpp

Fix a build issue with GCC-6:

sed "s/^config(\"compiler\") {/&\ncflags_cc = [ \"-fno-delete-null-pointer-checks\" ]/" \
    -i build/config/linux/BUILD.gn

If you'd like to enable the use of the WideVine plugin, needed for Netflix support (see the WideVine section below), you'll need to define an available product name ("Pinkie Pie" in this case) with the following command:

sed "s/WIDEVINE_CDM_AVAILABLE/&\n\n#define WIDEVINE_CDM_VERSION_STRING \"Pinkie Pie\"/" \
    -i third_party/widevine/cdm/stub/widevine_cdm_version.h

Remove third-party build files that interfere with system versions:

Note

Chromium uses many external projects, the selections below are not set in stone, however they have been tested thoroughly. With Chromium 56.0.2924.87, system versions of icu, libjpeg, libpng, libxml2, libvpx, and zlib are known to break the build at this time.

for LIB in flac harfbuzz-ng libwebp libxslt yasm; do
    find -type f -path "*third_party/$LIB/*" \
        \! -path "*third_party/$LIB/chromium/*" \
        \! -path "*third_party/$LIB/google/*" \
        \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
        -delete
done &&

python build/linux/unbundle/replace_gn_files.py \
    --system-libraries flac harfbuzz-ng libwebp libxslt yasm

Chromium uses an internal tool, gn, to generate the Ninja build files. Complete configuration of the build using the following commands:

Note

The Google API Key and OAuth tokens below are specific to LFS. If using these instructions for another distro, or if you intend to distribute binary copies of the software using these instructions, please obtain your own keys following the instructions located at http://www.chromium.org/developers/how-tos/api-keys.

GN_CONFIG=("google_api_key=\"AIzaSyDxKL42zsPjbke5O8_rPVpVrLrJ8aeE9rQ\""
"google_default_client_id=\"595013732528-llk8trb03f0ldpqq6nprjp1s79596646.apps.googleusercontent.com\""
"google_default_client_secret=\"5ntt6GbbkjnTVXx-MSxbmx5e\""
'clang_use_chrome_plugins=false'
'enable_hangout_services_extension=true'
'enable_nacl=false'
'enable_nacl_nonsfi=false'
'enable_widevine=true'
'fatal_linker_warnings=false'
'ffmpeg_branding="Chrome"'
'fieldtrial_testing_like_official_build=true'
'is_debug=false'
'is_clang=false'
'link_pulseaudio=true'
'linux_use_bundled_binutils=false'
'proprietary_codecs=true'
'remove_webcore_debug_symbols=true'
'symbol_level=0'
'treat_warnings_as_errors=false'
'use_allocator="none"'
'use_cups=true'
'use_gconf=false'
'use_gnome_keyring=false'
'use_gold=false'
'use_gtk3=false'
'use_kerberos=true'
'use_pulseaudio=true'
'use_sysroot=false')

Build gn and use it to prepare the Ninja build files:

python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}" &&
out/Release/gn gen out/Release --args="${GN_CONFIG[*]}"

Build Chromium using the following command:

ninja -C out/Release chrome chrome_sandbox chromedriver widevinecdmadapter

This package was already tested as part of the build.

Now, as the root user, install the pacakage:

install -vDm755  out/Release/chrome \
                 /usr/lib/chromium/chromium                   &&
install -vDm4755 out/Release/chrome_sandbox \
                 /usr/lib/chromium/chrome-sandbox             &&
install -vDm755  out/Release/chromedriver \
                 /usr/lib/chromium/chromedriver               &&
ln -svf /usr/lib/chromium/chromium /usr/bin                   &&
ln -svf /usr/lib/chromium/chromedriver /usr/bin/              &&

install -vm755 out/Release/libwidevinecdmadapter.so \
               /usr/lib/chromium/                             &&
install -vDm644 out/Release/icudtl.dat /usr/lib/chromium      &&
install -vDm644 out/Release/gen/content/content_resources.pak \
                /usr/lib/chromium/                            &&
install -vm644 out/Release/{*.pak,*.bin} \
               /usr/lib/chromium/                             &&

cp -av out/Release/locales /usr/lib/chromium/                 &&
chown -Rv root:root /usr/lib/chromium/locales                 &&

install -vDm644 out/Release/chrome.1 \
                /usr/share/man/man1/chromium.1

While still the root user, install icons and the .desktop file:

for size in 16 32; do
    install -vDm644 \
        "chrome/app/theme/default_100_percent/chromium/product_logo_$size.png" \
        "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
done &&

for size in 22 24 48 64 128 256; do
    install -vDm644 "chrome/app/theme/chromium/product_logo_$size.png" \
        "/usr/share/icons/hicolor/${size}x${size}/apps/chromium.png"
done &&

cat > /usr/share/applications/chromium.desktop << "EOF"
[Desktop Entry]
Encoding=UTF-8
Name=Chromium Web Browser
Comment=Access the Internet
GenericName=Web Browser
Exec=chromium %u
Terminal=false
Type=Application
Icon=chromium
Categories=GTK;Network;WebBrowser;
MimeType=application/xhtml+xml;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
EOF

Chromium Launcher

Chromium Launcher is a wrapper for chromium that allows use of the Pepper Flash plugin. If you intend to use the Pepper Flash plugin, build Chromium Launcher by running the following commands:

tar -xf ../chromium-launcher-3.tar.gz &&
cd chromium-launcher-3                &&
make PREFIX=/usr

Install Chromium Launcher with the following commands (as the root user):

rm -f /usr/bin/chromium        &&
make PREFIX=/usr install-strip &&
cd ..

Extracting the WideVine plugin from Chrome

Extract the downloaded deb file with the following commands:

mkdir temp                                         &&
cd temp                                            &&
ar -x ../../google-chrome-stable_56.0.2924.87*.deb &&
tar -xf data.tar.xz

As the root user, install the WideVine plugin with the following command:

install -vm755 opt/google/chrome/libwidevinecdm.so \
    /usr/lib/chromium/

Installing the Pepper Flash plugin:

Extract the Flash Player plugin with the following command:

tar -xf ../../flash_player_ppapi_linux.*.tar.gz

As the root user, install the Pepper Flash plugin with the following command:

install -vdm755 /usr/lib/PepperFlash                     &&
install -vm755 libpepflashplayer.so /usr/lib/PepperFlash &&
install -vm644 manifest.json /usr/lib/PepperFlash

Command Explanations

GN_CONFIG=(...): this array contains all of the defines used in the build.

sed "s/#include <sys...: this command undefines MADV_FREE to fix a build issue with Linux-4.5 and newer.

python tools/gn/bootstrap/bootstrap.py --gn-gen-args "${GN_CONFIG[*]}": this command replaces defines in the gn files with the values contained in ${GN_CONFIG[@]}.

out/Release/gn gen out/Release --args="${GN_CONFIG[*]}": this command runs a Google provided configuration script gn on the source tree to produce a Ninja configuration suitable for the build machine.

ar -x ../../google-chrome-stable*.deb: the ar utility is used to extract Debian archives.

Contents

Installed Programs: /usr/bin/chromium, /usr/lib/chromium/chromium, /usr/lib/chromium/chromedriver, and /usr/lib/chromium/chrome-sandbox
Installed Libraries: none
Installed Directories: /usr/lib/chromium, /usr/lib/chromium-launcher, and (optionally) /usr/lib/PepperFlash

Short Descriptions

/usr/bin/chromium

is a wrapper for the main chromium binary (in /usr/lib/chromium) that allow use of the Pepper Flash plugin.

/usr/lib/chromium/chromium

is the main chromium executable.

/usr/bin/chromedriver

is a WebDriver for Chromium.

/usr/lib/chromium/chrome-sandbox

creates a sandboxed environment for running untrusted code (plugins).

Last updated on 2017-02-22 13:28:29 -0800

SeaMonkey-2.46

Introduction to SeaMonkey

SeaMonkey is a browser suite, the Open Source sibling of Netscape. It includes the browser, composer, mail and news clients, and an IRC client. It is the follow-on to the Mozilla browser suite.

The Mozilla project also hosts two subprojects that aim to satisfy the needs of users who don't need the complete browser suite or prefer to have separate applications for browsing and e-mail. These subprojects are Firefox-51.0.1 and Thunderbird-45.7.1. Both are based on the Mozilla source code.

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

Package Information

Note

The tarball seamonkey-2.46.source.tar.xz will untar to seamonkey-2.46 directory.

SeaMonkey Dependencies

Required

alsa-lib-1.1.3, Autoconf-2.13, GTK+-2.24.31, UnZip-6.0, 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.

Note

You must have installed Openssl before Python 2 or the build system will quickly fail with output including "ImportError: cannot import name HTTPSHandler". If you are in any doubt about this (e.g. upgrading from an older version of Seamonkey), check if /usr/lib/python2.7/lib-dynload/_ssl.so exists. If it does not, reinstall Python-2.7.13 (after installing OpenSSL-1.0.2k. The latest version of any currently maintained version of Openssl should be satisfactory if already installed.

Optional

cURL-7.52.1, dbus-glib-0.108, Doxygen-1.8.13, GConf-3.2.6, gst-plugins-base-1.10.3 (and other plugins, only for tests), OpenJDK-1.8.0.121, PulseAudio-10.0, startup-notification-0.12, Valgrind-3.12.0, Wget-1.19.1, Wireless Tools-29, and Hunspell

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/seamonkey

Installation of SeaMonkey

The configuration of SeaMonkey is accomplished by creating a mozconfig file containing the desired configuration options. A default mozconfig file is created below. To see the entire list of available configuration options (and an abbreviated description of each one), issue ./configure --help. You may also wish to review the entire file and uncomment any other desired options. Create the file by issuing the following command:

cat > mozconfig << "EOF"
# If you have a multicore machine, all cores will be used by default.
# If desired, you can reduce the number of cores used, e.g. to 1, by
# uncommenting the next line and setting a valid number of CPU cores.
#mk_add_options MOZ_MAKE_FLAGS="-j1"

# If you have installed DBus-Glib comment out this line:
ac_add_options --disable-dbus

# If you have installed dbus-glib, and you have installed (or will install)
# wireless-tools, and you wish to use geolocation web services, comment out
# this line
ac_add_options --disable-necko-wifi

# Uncomment these lines if you have installed optional dependencies:
#ac_add_options --enable-system-hunspell
#ac_add_options --enable-startup-notification

# Comment out the following option if you have PulseAudio installed
ac_add_options --disable-pulseaudio

# Comment out following option if you have gconf installed
ac_add_options --disable-gconf

# Comment out following options if you have not installed
# recommended dependencies:
ac_add_options --enable-system-sqlite
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
ac_add_options --with-system-nspr
ac_add_options --with-system-nss

# Us the internal version of icu due to execution problems
#ac_add_options --with-system-icu

# The BLFS editors recommend not changing anything below this line:
ac_add_options --prefix=/usr
ac_add_options --enable-application=suite

ac_add_options --disable-crashreporter
ac_add_options --disable-updater
ac_add_options --disable-tests

ac_add_options --enable-optimize
ac_add_options --enable-strip
ac_add_options --enable-install-strip

ac_add_options --enable-gio
ac_add_options --enable-official-branding
ac_add_options --enable-safe-browsing
ac_add_options --enable-url-classifier

# Use internal cairo due to reports of unstable execution with
# system cairo
#ac_add_options --enable-system-cairo
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman

ac_add_options --with-pthreads

ac_add_options --with-system-bz2
ac_add_options --with-system-jpeg
ac_add_options --with-system-png
ac_add_options --with-system-zlib
EOF

Note

If you are compiling SeaMonkey in chroot, make sure you have the SHELL environment variable set or prepend SHELL=/bin/sh to the first make command below.

Compile SeaMonkey by running the following commands:

CFLAGS_HOLD=$CFLAGS           &&
CXXFLAGS_HOLD=$CXXFLAGS       &&
EXTRA_FLAGS=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2" &&
export CFLAGS+=$EXTRA_FLAGS   &&
export CXXFLAGS+=$EXTRA_FLAGS &&
unset EXTRA_FLAGS             &&

sed -e 's/256/224/'                                   \
    -i mozilla/netwerk/protocol/http/Http2Session.cpp &&

sed -e '/version=/s/:space:/[&]/' \
    -i ./mozilla/build/autoconf/icu.m4 &&

sed -e s/_EVENT_SIZEOF/EVENT__SIZEOF/ \
    -i mozilla/ipc/chromium/src/base/message_pump_libevent.cc

make -f client.mk

This package does not come with a test suite.

Install SeaMonkey by issuing the following commands as the root user:

make  -f client.mk install INSTALL_SDK= &&
chown -R 0:0 /usr/lib/seamonkey-2.46    &&

cp -v $(find -name seamonkey.1 | head -n1) /usr/share/man/man1

Set the compilation flags back to their original values:

export CFLAGS=$CFLAGS_HOLD     &&
export CXXFLAGS=$CXXFLAGS_HOLD &&
unset CFLAGS_HOLD CXXFLAGS_HOLD

All the Development Libraries and Headers

If you want to install the full SeaMonkey development environment, as the root user:

make -C obj* install

Note

The build directory is set by the make procedure and is dependent on the system archetecture, but the directory name starts with 'obj'.

Command Explanations

export CFLAGS= ... export CXXFLAGS= ...: These settings work around code which gcc6 would otherwise regard as out-of-specification and allow it to produce a working program.

sed -e 's/256/224/' ...: Make the required key length for ECDSA encryption compatible with RFC7540 9.2.1. Otherwise some web sites cannot be accessed.

sed ... icu.m4: Fix an error identified by sed-4.4 and later.

sed ... message_pump_libevent.cc: Fix an error due to changes in libevent-2.1.8 and later.

make -f client.mk: Mozilla products are packaged to allow the use of a configuration file which can be used to pass the configuration settings to the configure command. make uses the client.mk file to get initial configuration and setup parameters.

Configuring SeaMonkey

For installing various SeaMonkey plugins, refer to Mozdev's PluginDoc Project.

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

Tip

There is a multitude of configuration parameters you can tweak to customize SeaMonkey. A very extensive list of these parameters can be found at http://preferential.mozdev.org/preferences.html.

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-2.46/chrome/icons/default/seamonkey.png \
        /usr/share/pixmaps

Contents

Installed Programs: seamonkey
Installed Libraries: Numerous libraries, browser, and email/newsgroup components, plugins, extensions, and helper modules installed in /usr/lib/seamonkey-2.46
Installed Directory: /usr/lib/seamonkey-2.46

Short Descriptions

seamonkey

is the Mozilla browser/email/newsgroup/chat client suite.

Last updated on 2017-02-21 17:57:55 -0800

Firefox-51.0.1

Introduction to Firefox

Firefox is a stand-alone browser based on the Mozilla codebase.

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

Package Information

Additional Downloads

Note

The tarball firefox-51.0.1.source.tar.xz will untar to firefox-51.0.1 directory. However, 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.

Firefox Dependencies

Required

alsa-lib-1.1.3, Autoconf-2.13, GTK+-3.22.8 (or GTK+-2.24.31 if you change the mozconfig where indicated), NSS-3.29, UnZip-6.0, 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.

Note

With Firefox-31.0 and later versions, you must have installed Openssl before Python 2 or the build system will quickly fail with output including "ImportError: cannot import name HTTPSHandler". If you are in any doubt about this (e.g. upgrading from an older version of Firefox), check if /usr/lib/python2.7/lib-dynload/_ssl.so exists. If it does not, reinstall Python-2.7.13 (after installing OpenSSL-1.0.2k). The latest version of any currently maintained version of Openssl should be satisfactory if already installed.

Optional

cURL-7.52.1, dbus-glib-0.108, Doxygen-1.8.13, GConf-3.2.6, FFmpeg-3.2.4 (runtime), libwebp-0.6.0, OpenJDK-1.8.0.121, PulseAudio-10.0, startup-notification-0.12, Valgrind-3.12.0, Wget-1.19.1, Wireless Tools-29, Hunspell, liboauth , libproxy, Rust, and (with the patch) Graphite2-1.3.9 and HarfBuzz-1.4.2

User Notes: http://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 each one), issue ./configure --help. You may also wish to review the entire file and uncomment any other desired options. Create the file by issuing the following command:

cat > mozconfig << "EOF"
# If you have a multicore machine, all cores will be used by default.
# If desired, you can reduce the number of cores used, e.g. to 1, by
# uncommenting the next line and setting a valid number of CPU cores.
#mk_add_options MOZ_MAKE_FLAGS="-j1"

# If you have installed dbus-glib, comment out this line:
ac_add_options --disable-dbus

# If you have installed dbus-glib, and you have installed (or will install)
# wireless-tools, and you wish to use geolocation web services, comment out
# this line
ac_add_options --disable-necko-wifi

# Uncomment this option if you wish to build with gtk+-2
#ac_add_options --enable-default-toolkit=cairo-gtk2

# Uncomment these lines if you have installed optional dependencies:
#ac_add_options --enable-system-hunspell
#ac_add_options --enable-startup-notification

# Comment out following option if you have PulseAudio installed
ac_add_options --disable-pulseaudio

# If you have installed GConf, comment out this line
ac_add_options --disable-gconf

# Comment out following options if you have not installed
# recommended dependencies:
ac_add_options --enable-system-sqlite
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-icu

# If you are going to apply the patch for system graphite
# and system harfbuzz, uncomment these lines:
#ac_add_options --with-system-graphite2
#ac_add_options --with-system-harfbuzz

# 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

# 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
ac_add_options --disable-tests

ac_add_options --enable-optimize

ac_add_options --enable-gio
ac_add_options --enable-official-branding
ac_add_options --enable-safe-browsing
ac_add_options --enable-url-classifier

# From firefox-40, using system cairo causes firefox to crash
# frequently when it is doing background rendering in a tab.
#ac_add_options --enable-system-cairo
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman

ac_add_options --with-pthreads

ac_add_options --with-system-bz2
ac_add_options --with-system-jpeg
ac_add_options --with-system-png
ac_add_options --with-system-zlib

mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build-dir
EOF

Compile Firefox by issuing the following commands:

If you have installed system versions of graphite2 and harfbuzz and wish firefox to use those instead of its shipped versions, apply the patch and uncomment the appropriate entries in the mozconfig file:

patch -Np1 -i ../firefox-51.0.1-system_graphite2_harfbuzz-1.patch

If you have installed version 2.1.8 or newer of libevent, fix a file:

sed -e s/_EVENT_SIZEOF/EVENT__SIZEOF/ \
    -i ipc/chromium/src/base/message_pump_libevent.cc

Note

If you are compiling Firefox in chroot, make sure you have $SHELL environment variable set or prepend SHELL=/bin/sh.

make -f client.mk

This package does not come with a test suite.

Now, as the root user:

make -f client.mk install INSTALL_SDK= &&
chown -R 0:0 /usr/lib/firefox-51.0.1   &&

mkdir -pv    /usr/lib/mozilla/plugins  &&
ln    -sfv   ../../mozilla/plugins /usr/lib/firefox-51.0.1/browser

Command Explanations

make -f client.mk ...: Mozilla products are packaged to allow the use of a configuration file which can be used to pass the configuration settings to the configure command. make uses the client.mk file to get initial configuration and setup parameters.

mkdir -p /usr/lib/mozilla/plugins: This checks that /usr/lib/mozilla/plugins exists.

ln -sv ... /usr/lib/firefox-51.0.1/browser: This command creates a symbolic link to /usr/lib/mozilla/plugins. It's not really needed, as Firefox checks /usr/lib/mozilla/plugins by default, but the symbolic link is made to keep all the plugins installed in one folder.

Configuring Firefox

If you use a desktop environment like Gnome or KDE you may like to create a firefox.desktop file so that Firefox appears in the panel's menus. 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 &&
mkdir -pv /usr/share/pixmaps &&

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=application/xhtml+xml;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
EOF

ln -sfv /usr/lib/firefox-51.0.1/browser/icons/mozicon128.png \
        /usr/share/pixmaps/firefox.png

Contents

Installed Programs: firefox
Installed Libraries: Numerous libraries, browser components, plugins, extensions, and helper modules installed in /usr/lib/firefox-51.0.1
Installed Directory: /usr/lib/firefox-51.0.1 and /usr/lib/mozilla

Short Descriptions

firefox

is a GTK+-3 internet browser that uses the Mozilla Gecko rendering engine.

Last updated on 2017-02-16 19:05:12 -0800

Chapter 43. Other X-based Programs

These programs use the X Window System and don't fit easily into any of the other chapters.

Balsa-2.5.3

Introduction to Balsa

The Balsa package contains a GNOME-2 based mail client.

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

Package Information

Balsa Dependencies

Required

Aspell-0.60.6.1, enchant-1.6.0, GMime-2.6.23, libESMTP-1.0.6, and Rarian-0.8.1

Recommended
Optional

Compface-1.5.2, gtksourceview-3.22.2, libnotify-0.7.7, MIT Kerberos V5-1.15, MTA (that provides a sendmail command, note that it is only used if you didn't install the required libESMTP package), OpenLDAP-2.4.44, OpenSSL-1.0.2k, SQLite-3.17.0, WebKitGTK+-2.14.5, yelp-tools, and python-html2text

Optional to Build S/MIME Support

GPGME-1.8.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/balsa

Installation of Balsa

Install Balsa by running the following commands:

./configure --prefix=/usr            \
            --sysconfdir=/etc        \
            --localstatedir=/var/lib \
            --without-html-widget    \
            --without-libnotify      &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-ssl: Use this option to enable SSL support if OpenSSL is installed.

--with-ldap: Use this option to enable LDAP address book support if OpenLDAP is installed.

--with-sqlite: Use this option to enable SQLite address book support if SQLite is installed.

--with-gpgme: Use this option to enable GPG support if “GnuPG Made Easy” (GPGME) is installed.

--enable-smime: Use this option to enable S/MIME support if GnuPG-2.x.x is installed.

Configuring Balsa

Configuration Information

All configuration of Balsa is done through the Balsa menu system, with mailbox configuration done with the Settings—>Preferences menu.

If you are unable to connect to your ISP, they probably don't support APOP. Disable it in Settings/Preferences/POP3/advanced.

If you enable filters for your incoming POP3 mail, you must have Procmail-3.22 installed, as the incoming mail will be handed off to procmail for processing.

Contents

Installed Programs: balsa and balsa-ab
Installed Libraries: None
Installed Directories: /etc/sounds/events, /usr/share/balsa, and /usr/share/sounds/balsa

Short Descriptions

balsa

is a glib based mail client.

balsa-ab

is the address-book application used by balsa.

Last updated on 2017-02-21 13:10:36 -0800

Ekiga-4.0.1

Introduction to Ekiga

Ekiga is a VoIP, IP Telephony, and Video Conferencing application that allows you to make audio and video calls to remote users with SIP or H.323 compatible hardware and software. It supports many audio and video codecs and all modern VoIP features for both SIP and H.323. Ekiga is the first Open Source application to support both H.323 and SIP, as well as audio and video.

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

Package Information

Ekiga Dependencies

Required

Boost-1.63.0, gnome-icon-theme-3.12.0, GTK+-2.24.31, and Opal-3.10.10

Recommended
Optional

Avahi-0.6.32, Evolution Data Server, GNOME Doc Utils, and OpenLDAP-2.4.44

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ekiga

Installation of Ekiga

Install Ekiga by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-eds     \
            --disable-gdu     \
            --disable-ldap    &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-eds: This switch disables support for the Evolution Data Server. Remove if you have installed Evolution Data Server.

--disable-gdu: This switch disables documentation generation using GNOME Doc Utils. Remove if you have installed GNOME Doc Utils.

--disable-ldap: This switch disables LDAP support in Ekiga. Remove if you have installed OpenLDAP.

--disable-scrollkeeper: Use this parameter if you have installed Rarian but wish to disable the updates to the Scrollkeeper database.

--disable-dbus: This switch disables D-Bus support. Use if you have not installed D-Bus.

--enable-avahi: This switch enables use of the Avahi with Ekiga. Use if you have installed Avahi.

Note

If you have not installed recommended dependencies you will need additional switches passed to configure. Examine ./configure --help output to see all available switches.

Contents

Installed Programs: ekiga, ekiga-config-tool and ekiga-helper
Installed Libraries: None
Installed Directories: /usr/lib/ekiga, /usr/share/gnome/help/ekiga, /usr/share/omf/ekiga, /usr/share/pixmaps/ekiga and /usr/share/sounds/ekiga

Short Descriptions

ekiga

is a SIP and H.323 VoIP, IP Telephony and Video Conferencing application which complies to the SIP and H.323 protocols.

ekiga-config-tool

fixes problems with the Ekiga settings.

Last updated on 2017-02-22 13:57:24 -0800

feh-2.18.2

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-8.0 platform.

Package Information

  • Download (HTTP): http://feh.finalrewind.org/feh-2.18.2.tar.bz2

  • Download MD5 sum: 02c1892de5fae14e19a8c6be6afc421f

  • Download size: 2.0 MB

  • Estimated disk space required: 5.3 MB (with tests)

  • Estimated build time: less than 0.1 SBU (with tests)

feh Dependencies

Required

libpng-1.6.28 and Imlib2-1.4.9 (built with giflib-5.1.4 support, for the tests)

Recommended
Optional

libexif-0.6.21

Optional (runtime)

libjpeg-turbo-1.5.1 (for lossless image rotation), and ImageMagick-7.0.4-8 (to load unsupported formats)

Optional (test suite)

Test::Command-0.11 (required)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/feh

Installation of feh

Install feh by running the following commands:

sed -i "s:doc/feh:&-2.18.2:" 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:&-2.18.2:" 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 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-2.18.2 and /usr/share/feh

Short Descriptions

feh

is an image viewer and cataloguer.

Last updated on 2017-02-18 09:26:55 -0800

FontForge-20161004

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-8.0 platform.

Package Information

FontForge Dependencies

Required

FreeType-2.7.1, GLib-2.50.3, and libxml2-2.9.4

Recommended
Optional

giflib-5.1.4, libjpeg-turbo-1.5.1, libpng-1.6.28, LibTIFF-4.0.7, Python-2.7.13, Wget-1.19.1 (needed for tests), IPython, libspiro, libunicodenames, libuninameslist, and zeromq (libzmq)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fontforge

Installation of FontForge

Install FontForge by running the following commands:

./configure --prefix=/usr     \
            --enable-gtk2-use \
            --disable-static  \
            --docdir=/usr/share/doc/fontforge-20161004 &&
make

To test the results, issue: make check. This will download two ttf files.

Now, as the root user:

make install

Command Explanations

--enable-gtk2-use: uses the GTK+2 graphics instead of basic Xorg graphics.

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

--enable-debug: Turn on debug build and FONTFORGE_DEBUG conditional code. Requires libspiro.

Contents

Installed Programs: fontforge, fontimage, fontlint and sfddiff
Installed Libraries: libfontforgeexe.so, libfontforge.so, libgdraw.so, libgioftp.so, libgunicode.so, libgutils.so, and /usr/lib/python2.7/site-packages/{fontforge,psMat}.so
Installed Directories: /usr/{include,share}/fontforge and /usr/share/doc/fontforge-20161004

Short Descriptions

fontforge

is a program that allows you to create and modify font files.

fontimage

is a program that produces an image showing representative glyphs of the font.

fontlint

is a program that checks the font for certain common errors.

sfddiff

is a program that compares two font files.

Last updated on 2017-02-22 11:24:59 -0800

Gimp-2.8.20

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-8.0 platform.

Package Information

  • Download (HTTP): http://download.gimp.org/pub/gimp/v2.8/gimp-2.8.20.tar.bz2

  • Download MD5 sum: d405640c426b234d6efc36fb4f5bae57

  • Download size: 20 MB

  • Estimated disk space required: 643 MB (additional 714 MB to run the test suite)

  • Estimated build time: 4.2 SBU (additional 0.8 SBU to run the test suite)

Additional Downloads

  • Optional help files: http://download.gimp.org/pub/gimp/help/gimp-help-2.8.2.tar.bz2

  • Download MD5 sum: a591c8974b2f4f584d0a769d52ed6c5b

  • Download size: 152 MB

  • Estimated disk space required: From 307 MB (en only) to 1257 MB (all 18 languages), average of 52 MB per translation

  • Estimated build time: 0.8 SBU (en only), average of 1.2 SBU per translation (measured with 5 languages), 5.9 SBU, with parallelism=8, for all languages

Gimp Dependencies

Required

gegl-0.3.12 and GTK+-2.24.31

Recommended
Optional

AAlib-1.4rc5, alsa-lib-1.1.3, cURL-7.52.1, dbus-glib-0.108, ghostscript-9.20 (with libgs installed), Gvfs-1.30.3, ISO Codes-3.74, JasPer-2.0.10, Little CMS-1.19 or Little CMS-2.8, libexif-0.6.21, libgudev-231, libmng-2.0.3, librsvg-2.40.16, Poppler-0.51.0, an MTA (that provides a sendmail program), GTK-Doc-1.25, webkitgtk-2.4.11, and libwmf

Optional, for optimizing the PNG files in the help system

pngnq and pngcrush

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gimp

Installation of Gimp

Fix some issues with gegl-0.3.12:

sed -i '/gegl/s/2/3/' configure &&
sed -i '70,75 d' app/core/gimpparamspecs-duplicate.c

Install Gimp by running the following commands:

./configure --prefix=/usr \
            --sysconfdir=/etc \
            --without-gvfs &&
make

To test the results (requires an X-Windowed terminal) issue: make check.

Now, as the root user:

make install

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Installation of Gimp-Help

The gimp-help tarball contains images and English text help for help files, together with translations.

If you downloaded the gimp-help tarball, unpack it and change into the root of the newly created source tree. Prepare for the build with the following command:

ALL_LINGUAS="ca da de el en en_GB es fr it ja ko nl nn pt_BR ru sl sv 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/2.0/help

Command Explanations

sed ... configure && sed ...: These commands allow building with the current version of gegl.

ALL_LINGUAS="ca da de el en en_GB ...": by default, the help files will be rendered in all the available languages. Remove the codes of any languages you do not wish to build.

--without-gvfs: the choice of the backend to handle URI information, e.g., when dragging images from a browser into the Gimp, is made at compile time. This parameter will ensure that cURL is used at run-time, instead of Gvfs. You can omit this if you are installing Gvfs AND will be running gvfsd, e.g., in a GNOME desktop.

--disable-python: This option is necessary if you have not installed PyGTK.

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Configuring The Gimp

Config Files

/etc/gimp/2.0/* and ~/.gimp-2.8/gimprc

Configuration Information

The Gimp executes a configuration wizard for each user upon their initial use of the program.

The GIMP uses either a plugin (if you have installed the external package webkitgtk-2.4.11) or a browser for its help system. To set up the help system to work with the default browser, use Edit -> Preferences -> Help System and select 'Web Browser' for the 'Help Browser to use' setting.

Contents

Installed Programs: gimp (symlink), gimp-2.8, gimp-console (symlink), gimp-console-2.8, and gimptool-2.0
Installed Libraries: libgimp-2.0.so, libgimpbase-2.0.so, libgimpcolor-2.0.so, libgimpconfig-2.0.so, libgimpmath-2.0.so, libgimpmodule-2.0.so, libgimpthumb-2.0.so, libgimpui-2.0.so, and libgimpwidgets-2.0.so
Installed Directories: /etc/gimp, /usr/include/gimp-2.0, /usr/{lib,share}/gimp, /usr/share/gimp/2.0/help/{en,lang2,lang3,...}, /usr/share/gtk-doc/html/libgimp{,base,color,config}, and /usr/share/gtk-doc/html/libgimp{math,module,thumb,widgets}

Short Descriptions

gimp

is a symbolic link to gimp-2.8.

gimp-2.8

is the Gnu Image Manipulation Program. It works with a variety of image formats and provides a large selection of tools.

gimp-console

is a symbolic link to gimp-console-2.8.

gimp-console-2.8

is a console program that behaves as if The Gimp was called with the --no-interface command-line option.

gimptool-2.0

is a tool that can build plug-ins or scripts and install them if they are distributed in one source file. gimptool-2.0 can also be used by programs that need to know what libraries and include-paths The Gimp was compiled with.

libgimp-2.0.so

provides C bindings for The Gimp's Procedural Database (PDB) which offers an interface to core functions and to functionality provided by plug-ins.

libgimpbase-2.0.so

provides the C functions for basic Gimp functionality such as determining enumeration data types, gettext translation, determining The Gimp's version number and capabilities, handling data files and accessing the environment.

libgimpcolor-2.0.so

provides the C functions relating to RGB, HSV and CMYK colors as well as converting colors between different color models and performing adaptive supersampling on an area.

libgimpconfig-2.0.so

contains C functions for reading and writing config information.

libgimpmath-2.0.so

contains C functions which provide mathematical definitions and macros, manipulate 3x3 transformation matrices, set up and manipulate vectors and the MD5 message-digest algorithm.

libgimpmodule-2.0.so

provides the C functions which implements module loading using GModule and keeps a list of GimpModule's found in a given searchpath.

libgimpthumb-2.0.so

provides the C functions for handling The Gimp's thumbnail objects.

libgimpui-2.0.so

contains The Gimp's common user interface functions.

libgimpwidgets-2.0.so

contains The Gimp and GTK's widget creation and manipulation functions.

Last updated on 2017-02-16 19:05:12 -0800

Gparted-0.28.1

Introduction to Gparted

Gparted is the Gnome Partition Editor, a Gtk 2 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-8.0 platform.

Package Information

Gparted Dependencies

Required

Gtkmm-2.24.5 and parted-3.2

Optional

GNOME Doc Utils and Rarian-0.8.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gparted

Installation of Gparted

Install Gparted by running the following commands:

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

This package does not come with a testsuite.

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.

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.51 (required for optionally displaying serial number device information), e2fsprogs (installed as part of LFS), jfsutils-1.1.15, ntfs-3g-2016.2.22, reiserfsprogs-3.6.25, xfsprogs-4.9.0, btrfs-progs, dosfstools, mtools (required to read and write FAT16/32 volume labels and UUIDs), hfsutils, hfsprogs, nilfs-utils and Reiser4progs.

Root privileges are required to run Gparted. If you wish to run the application from the menu, further applications and configurations are necessary. Examples of applications that may be used: gksu, kdesudo, or xdg-su. Another solution is to use pkexec, from Polkit-0.113, but some configuration is necessary. Another simple solution is ssh-askpass-7.4p1. Below, we describe these two alternatives: "ssh-askpass" and "pkexec".

ssh-askpass

To optionally use ssh-askpass-7.4p1 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.

pkexec

To optionally use pkexec, you need polkit-gnome-0.105, and ConsoleKit2-1.0.2 installed with support to Linux-PAM-1.3.0 and Polkit-0.113. As the root user, configure Gparted-0.28.1 and Polkit-0.113 with the following commands:

cp -v /usr/share/applications/gparted.desktop \
                                     /usr/share/applications/gparted.desktop.back &&
sed -i 's:/usr/sbin/gparted:/usr/sbin/gparted_polkit:' \
                                     /usr/share/applications/gparted.desktop      &&

cat > /usr/sbin/gparted_polkit << "EOF" &&
#!/bin/bash

pkexec /usr/sbin/gparted $@
EOF
chmod -v 0755 /usr/sbin/gparted_polkit

Still as the root user, configure Polkit-0.113 and Gparted-0.28.1 to use pkexec:

cat > /usr/share/polkit-1/actions/org.gnome.gparted.policy << "EOF"
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>

  <action id="org.freedesktop.policykit.pkexec.run-gparted">
    <description>Run GParted</description>
    <message>Authentication is required to run GParted</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>

</policyconfig>
EOF
chmod -v 0644 /usr/share/polkit-1/actions/org.gnome.gparted.policy

Now, clicking in the menu item for Gparted, a dialog appears in the screen, asking for the administrator password.

Contents

Installed Programs: gparted, gpartedbin 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.

gpartedbin

is the Gparted binary.

gparted_polkit

is an optional script which can be used to run gparted with polkit, from a menu.

Last updated on 2017-02-22 10:21:38 -0800

HexChat-2.12.4

Introduction to HexChat

HexChat is an IRC chat program. It allows you to join multiple IRC channels (chat rooms) at the same time, talk publicly, have private one-on-one conversations, etc. File transfers are also possible.

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

Package Information

HexChat Dependencies

Required

GLib-2.50.3

Recommended
Optional

dbus-glib-0.108, ISO Codes-3.74, libcanberra-0.30, libnotify-0.7.7, OpenSSL-1.0.2k, pciutils-3.5.2, and libproxy

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/hexchat

Installation of HexChat

Install HexChat by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-python --enable-python=python3: By default, configure will look for Python 2 to build the Python plugin and will error out if it can't find it. Use one of these switches if you wish to either disable the plugin or use Python 3 instead.

Contents

Installed Program: hexchat
Installed Libraries: None
Installed Directory: /usr/lib/hexchat

Short Descriptions

hexchat

is a graphical Internet Relay Chat (IRC) client.

Last updated on 2017-02-21 13:10:36 -0800

IcedTea-Web-1.6.2

Introduction to IcedTea-Web

The IcedTea-Web package contains both a Java browser plugin, and a new webstart implementation, licensed under GPLV3.

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

Package Information

IcedTea-Web Dependencies

Required

NPAPI-SDK-0.27.2, and OpenJDK-1.8.0.121 or Java-1.8.0.121 (remember to configure as described in the Configuring the JAVA environment page),

Required at runtime, a web browser, such as:

Epiphany-3.22.6, Firefox-51.0.1, Midori-0.5.11, SeaMonkey-2.46, Chromium, and Opera

Optional

libxslt-1.1.29, Mercurial-4.1, EMMA, and JACOCO

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/icedtea-web

Installation of IcedTea-Web

Install IcedTea-Web by running the following commands:

./configure --prefix=${JAVA_HOME}/jre    \
            --with-jdk-home=${JAVA_HOME} \
            --disable-docs               \
            --mandir=${JAVA_HOME}/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
mandb -c /opt/jdk/man

To test the man pages are correctly installed, issue man policyeditor to display the respective man page.

If desired, you may install a .desktop file corresponding to an entry in a desktop menu for policyeditor, as root user:

install -v -Dm0644 itweb-settings.desktop /usr/share/applications/itweb-settings.desktop &&
install -v -Dm0644 javaws.png /usr/share/pixmaps/javaws.png

Command Explanations

--with-jdk-home: This switch provides the location of the installed JDK.

--disable-docs: This switch disables installation of additional developer-related documentation. Omit this switch if you would like to do development work on IcedTea-Web.

Configuration Information

As the root user, create a symbolic link to the plugin from your browser(s) plugins directory:

ln -s ${JAVA_HOME}/jre/lib/IcedTeaPlugin.so /usr/lib/mozilla/plugins/

Important

The plugin must be a symlink for it to work. If not, the browsers will crash when you attempt to load a Java application.

Contents

Installed Programs: itweb-settings, javaws and policyeditor
Installed Libraries: IcedTeaPlugin.so, about.jar, netx.jar, plugin.jar
Installed Directories: ${JAVA_HOME}/jre/share/icedtea-web

Short Descriptions

itweb-settings

allows customization of the browser plugin and javaws.

javaws

launches Java application/applets hosted on a network.

policyeditor

view and modify security policy settings, including certificates, for javaws and the browser plugin.

IcedTeaPlugin.so

is the Java browser plugin.

about.jar

contains functions for the about dialog boxes.

netx.jar

contains functions for the IcedTea-Web webstart implementation (NetX).

plugin.jar

contains functions for the IcedTea-Web Java plugin.

Last updated on 2017-02-22 13:57:24 -0800

Inkscape-0.92.0

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-8.0 platform.

Package Information

Inkscape Dependencies

Required

Boost-1.63.0, GC-7.6.0, Gsl-2.3, Gtkmm-2.24.5 (or Gtkmm-3.22.0 and gnome docking library for the experimental gtk+-3 build), libxslt-1.1.29 and popt-1.16

Recommended
Optional

Aspell-0.60.6.1, dbus-1.10.14, Doxygen-1.8.13, Poppler-0.51.0, libcdr, libvisio, libwpg, NumPy (for the testsuite and at runtime for some extensions) and python-lxml (for the testsuite, and at runtime for some of the extensions)

Optional Runtime Dependencies (for some of the Inkscape extensions)

XML::XQL

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/inkscape

Installation of Inkscape

Install Inkscape by running the following commands:

./autogen.sh &&

IMAGEMAGICK_CFLAGS=-I/usr/include/ImageMagick-6 \
IMAGEMAGICK_LIBS="-lMagickCore-6.Q16HDRI -lMagick++-6.Q16HDRI -lMagickWand-6.Q16HDRI" \
./configure --prefix=/usr &&

make

To test the results, issue: make check.

Now, as the root user:

make install

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Command Explanations

IMAGE_MAGICK_CFLAGS= ... IMAGE_MAGICK_LIBS= ...: The configure script looks for ImageMagick-6 using the normal unversioned pkgconfig file names which are also used by the newer ImageMAgick-7 - in BLFS we patched it to rename those files, so these variables will allow configure to find the things it needs.

Contents

Installed Programs: inkscape and inkview
Installed Libraries: None
Installed Directory: /usr/share/inkscape

Short Descriptions

inkscape

an SVG (Scalable Vector Graphics) editing program.

inkview

is a simple program for displaying SVG files.

Last updated on 2017-02-16 19:24:14 -0800

Pidgin-2.11.0

Introduction to Pidgin

Pidgin is a Gtk+ 2 instant messaging client that can connect with a wide range of networks including AIM, ICQ, GroupWise, MSN, Jabber, IRC, Napster, Gadu-Gadu, SILC, Zephyr and Yahoo!

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

Package Information

Pidgin Dependencies

Required

GTK+-2.24.31

Recommended

SSL support is required for the MSN Messenger, Yahoo!, Novel Groupwise and Google Talk protocol plugins. GnuTLS is the preferred method (the Mozilla NSS API is more likely to change and this can cause problems).

Optional

Avahi-0.6.32 (required for the Bonjour plugin), Check-0.11.0 (only used during the test suite), Cyrus SASL-2.1.26, dbus-1.10.14, GConf-3.2.6, libidn-1.33 (required, if you wish to run the test suite), NetworkManager-1.6.2, SQLite-3.17.0 (required for the Contact Availability Prediction plugin), startup-notification-0.12, Tcl-8.6.6, Tk-8.6.6, Evolution Data Server, Farstream (Version 0.1) (required for video and voice support), Gtkspell, libgadu, Meanwhile (required for Sametime protocol support), SILC Client, SILC Toolkit, Zephyr, and MIT Kerberos V5-1.15 (required for Kerberos support in the Zephyr module),

Optional (runtime)

xdg-utils-1.1.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pidgin

Installation of Pidgin

If you wish to run the test suite, make sure that libidn-1.33 is installed and remove the switch “--disable-idn”. Compile Pidgin by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --with-gstreamer=1.0 \
            --disable-avahi      \
            --disable-gtkspell   \
            --disable-meanwhile  \
            --disable-idn        \
            --disable-nm         \
            --disable-vv         \
            --disable-tcl        &&
make

If you have Doxygen-1.8.13 installed (Graphviz-2.38.0 can be used also) and you wish to create the API documentation, issue: make docs.

Remember the remarks before configure. To test the results, issue: make check.

Now, as the root user:

make install &&
mkdir -pv /usr/share/doc/pidgin-2.11.0 &&
cp -v README doc/gtkrc-2.0 /usr/share/doc/pidgin-2.11.0

If you created the API documentation, install it using the following commands as the root user:

mkdir -pv /usr/share/doc/pidgin-2.11.0/api &&
cp -v doc/html/* /usr/share/doc/pidgin-2.11.0/api

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Command Explanations

--with-gstreamer=1.0: Remove this switch and add --disable-gstreamer if you've not installed gstreamer-1.10.3.

--disable-avahi: Remove this switch if you've installed Avahi-0.6.32.

--disable-gtkspell: Spellchecking. Remove this switch if you've installed Gtkspell.

--disable-meanwhile: Remove this switch if you've installed Meanwhile.

--disable-idn: Remove this switch if you've installed libidn-1.33.

--disable-nm: Remove this switch if you've installed NetworkManager-1.6.2.

--disable-vv: Video and voice. Remove this switch if you've installed Farstream (Version 0.1).

--disable-tcl: Remove this switch if you've installed Tcl-8.6.6.

--enable-cyrus-sasl: Use this switch if you've installed Cyrus SASL-2.1.26 and wish to build Pidgin with SASL support.

--disable-gnutls: Use this switch if you've got both GnuTLS-3.5.9 and NSS-3.29 installed, but want to use NSS-3.29 for the SSL support.

Configuring Pidgin

Config Files

~/.purple/* and ~/.gtkrc-02

Configuration Information

Most configuration can be accomplished by using the various preference settings inside the programs. Additionally, you can create a ~/.gtkrc-02 file which can store gtk+-2 theme settings that affect Pidgin and other Gtk+ 2 applications. Note that an example gtkrc-02 file was installed during the package installation and can be used as a starting point or reference.

Contents

Installed Programs: finch, pidgin, purple-client-example, purple-remote, purple-send, purple-send-async, and purple-url-handler
Installed Library: libgnt.so, libpurple.so, and libpurple-client.so
Installed Directories: /usr/include/finch, /usr/include/gnt, /usr/include/libpurple, /usr/include/pidgin, /usr/lib/finch, /usr/lib/gnt, /usr/lib/pidgin, /usr/lib/purple-2, /usr/share/doc/pidgin-2.11.0, /usr/share/pixmaps/pidgin, /usr/share/purple, and /usr/share/sounds/purple

Short Descriptions

finch

is a text-based instant messaging client.

pidgin

is a GTK+ 2 instant messaging client.

purple-client-example

is an example that demonstrate how to use libpurple-client to communicate with purple.

purple-remote

send remote commands to Pidgin/Finch.

purple-send

calls purple API functions using DBus and prints the return value.

purple-send-async

calls purple API functions using DBus. As opposed to purple-send, it does not print the return value.

purple-url-handler

is a python script to handle URL with purple.

Last updated on 2017-02-22 13:57:24 -0800

Rox-Filer-2.11

Introduction to Rox-Filer

rox-filer is a fast, lightweight, gtk2 file manager.

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

Package Information

rox-filer Dependencies

Required

libglade-2.6.4 and shared-mime-info-1.8

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rox-filer

Kernel Configuration

If you want rox-filer to be able to update the contents of a directory when changes are made to the files by other applications (eg, if a script is running) you will need to enable dnotify support in your kernel. In make menuconfig:

File systems --->
  [*] Dnotify support   [CONFIG_DNOTIFY]

Save the new .config and then compile the kernel.

Installation of Rox-Filer

Compile rox-filer with the following commands:

cd ROX-Filer                                                        &&
sed -i 's:g_strdup(getenv("APP_DIR")):"/usr/share/rox":' src/main.c &&

mkdir build                        &&
pushd build                        &&
  ../src/configure LIBS="-lm -ldl" &&
  make                             &&
popd

Now install it as the root user:

mkdir -p /usr/share/rox                              &&
cp -av Help Messages Options.xml ROX images style.css .DirIcon /usr/share/rox &&

cp -av ../rox.1 /usr/share/man/man1                  &&
cp -v  ROX-Filer /usr/bin/rox                        &&
chown -Rv root:root /usr/bin/rox /usr/share/rox      &&

cd /usr/share/rox/ROX/MIME                           &&
ln -sv text-x-{diff,patch}.png                       &&
ln -sv application-x-font-{afm,type1}.png            &&
ln -sv application-xml{,-dtd}.png                    &&
ln -sv application-xml{,-external-parsed-entity}.png &&
ln -sv application-{,rdf+}xml.png                    &&
ln -sv application-x{ml,-xbel}.png                   &&
ln -sv application-{x-shell,java}script.png          &&
ln -sv application-x-{bzip,xz}-compressed-tar.png    &&
ln -sv application-x-{bzip,lzma}-compressed-tar.png  &&
ln -sv application-x-{bzip-compressed-tar,lzo}.png   &&
ln -sv application-x-{bzip,xz}.png                   &&
ln -sv application-x-{gzip,lzma}.png                 &&
ln -sv application-{msword,rtf}.png

Command Explanations

sed -i 's:g_strdup(getenv("APP_DIR")):"/usr/share/rox":' src/main.c: This command hard codes /usr/share/rox as the directory for rox-filer's private files. Without this sed rox needs the environment variable ${APP_DIR} to be set.

ln -sv application-...: These commands duplicate the icons for some common mime types. Without these links rox-filer would just display the default "unknown binary blob" icon.

Configuring RoxFiler

Configuration Information

Most of the configuration of rox-filer is achieved by right clicking on a rox-filer window and choosing "Options" from the menu. It stores its settings in ~/.config/rox.sourceforge.net.

A rox-filer feature is that if there is an executable file called AppRun in a directory rox-filer will first run AppRun before it opens the folder.

As an example of how this may be used, if you have ssh access to another computer (perhaps another computer on you local network) with ssh configured for passwordless logins and you have sshfs-2.8 installed you can use AppRun to mount the remote computer in a local folder using sshfs. For this example AppRun script to work the folder must have the same name as the hostname of the remote computer:

cat > /path/to/hostname/AppRun << "HERE_DOC"
#!/bin/bash

MOUNT_PATH="${0%/*}"
HOST=${MOUNT_PATH##*/}
export MOUNT_PATH HOST
sshfs -o nonempty ${HOST}:/ ${MOUNT_PATH}
rox -x ${MOUNT_PATH}
HERE_DOC

chmod 755 /path/to/hostname/AppRun

That works fine for mounting, but to unmount it the command fusermount -u ${MOUNTPOINT} is ran. You could set that as your default umount command in your rox preferences, but you would then be unable to unmount any normal mountpoints (that need umount). A script is needed that will unmount a Fuse mountpoint with fusermount -u ${MOUNTPOINT} and everything else with umount. As the root user:

cat > /usr/bin/myumount << "HERE_DOC" &&
#!/bin/bash
sync
if mount | grep "${@}" | grep -q fuse
then fusermount -u "${@}"
else umount "${@}"
fi
HERE_DOC

chmod 755 /usr/bin/myumount

Now, to make Rox use this simple script, open a Rox window, right click on it and choose Options from the menu. In the left hand list choose "Action windows" and then on the right hand side, where it says "Unmount command" change umount to myumount.

If you use a desktop environment like Gnome or KDE you may like to create a rox.desktop file so that rox-filer appears in the panel's menus. As the root user:

ln -s ../rox/.DirIcon /usr/share/pixmaps/rox.png &&
mkdir -p /usr/share/applications &&

cat > /usr/share/applications/rox.desktop << "HERE_DOC"
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Rox
Comment=The Rox File Manager
Icon=rox
Exec=rox
Categories=GTK;Utility;Application;System;Core;
StartupNotify=true
Terminal=false
HERE_DOC

Contents

Installed Programs: rox
Installed Libraries: None
Installed Directories: /usr/share/rox

Short Descriptions

rox

is the rox file manager.

Last updated on

rxvt-unicode-9.22

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-8.0 platform.

Package Information

rxvt-unicode Dependencies

Required

X Window System

Optional

gdk-pixbuf-2.36.5 (for background images) and startup-notification-0.12

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/rxvt-unicode

Installation of rxvt-unicode

Install rxvt-unicode by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-everything: Add support for all non-multichoice options. Details about the different options can be found in the file README.configure.

--disable-xft: Remove support for Xft fonts.

--disable-perl: Disable the embedded Perl interpreter.

--disable-afterimage: Remove support for libAfterImage.

Configuring rxvt-unicode

The rxvt-unicode terminal emulator uses the resource class URxvt and the resource name urxvt. You can add X resource definitions to a user's ~/.Xresources or ~/.Xdefaults files or to the system-wide /etc/X11/app-defaults/URxvt file. The following example will load the matcher Perl extension (assuming Perl support wasn't disabled), which enables a left button click to open an underlined URL in the specified browser, sets a background and foreground color and loads an Xft font:

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.23 and at least one of gnome-icon-theme-3.12.0, oxygen-icons5-5.31.0 and lxde-icon-theme-0.5.1. Uncomment the line with “StartupNotify=true” if startup-notification-0.12 is installed.

Contents

Installed Programs: urxvt, urxvtd, and urxvtc
Installed Libraries: Many Perl extensions located under /usr/lib/urxvt/perl
Installed Directory: /usr/lib/urxvt

Short Descriptions

urxvt

is a terminal emulator for the X Window System.

urxvtd

is the urxvt terminal daemon.

urxvtc

controls the urxvtd daemon.

Last updated on 2017-02-22 06:22:59 -0800

Thunderbird-45.7.1

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-8.0 platform.

Package Information

Thunderbird Dependencies

Required

alsa-lib-1.1.3, GTK+-2.24.31, Zip-3.0, UnZip-6.0, and yasm-1.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.

Note

With Thunderbird-31.0 and later versions, you must have installed Openssl before Python 2, or the build system will quickly fail with output including "ImportError: cannot import name HTTPSHandler". If you are in any doubt about this (e.g. upgrading from an older version of Thunderbird), check if /usr/lib/python2.7/lib-dynload/_ssl.so exists. If it does not, reinstall Python-2.7.13 (after installing OpenSSL-1.0.2k - the latest version of any currently maintained version of Openssl should be satisfactory if already installed - if that package has not already been installed).

Optional

cURL-7.52.1, Cyrus SASL-2.1.26, dbus-glib-0.108, Doxygen-1.8.13, GConf-3.2.6, gst-plugins-base-1.10.3 (with gst-plugins-good-1.10.3 and gst-libav-1.10.3 at runtime), LLVM-3.9.1, OpenJDK-1.8.0.121, PulseAudio-10.0, SQLite-3.17.0 (not recommended due to potential security concerns), startup-notification-0.12, Wget-1.19.1, Wireless Tools-29, and Hunspell

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Thunderbird

Installation of Thunderbird

The configuration of Thunderbird is accomplished by creating a mozconfig file containing the desired configuration options. A default mozconfig is created below. To see the entire list of available configuration options (and a brief description of each), issue mozilla/configure --help. Create the file with the following command:

cat > mozconfig << "EOF"
# If you have a multicore machine, the build may be faster if using parallel
# jobs. The build system automatically adds -jN to the "make" flags, where N
# is the number of CPU cores. The option below is therefore useless, unless
# you want to use a smaller number of jobs:
#mk_add_options MOZ_MAKE_FLAGS="-j1"

# If you have installed dbus-glib, comment out this line:
ac_add_options --disable-dbus

# If you have installed wireless-tools comment out this line:
ac_add_options --disable-necko-wifi

# GStreamer is necessary for H.264 video playback in HTML5 Video Player;
# to be enabled, also remember to set "media.gstreamer.enabled" to "true"
# in about:config. If you have GStreamer 1.x.y, comment out this line and
# uncomment the following one:
ac_add_options --disable-gstreamer
#ac_add_options --enable-gstreamer=1.0

# Uncomment these lines if you have installed optional dependencies:
#ac_add_options --enable-system-hunspell
#ac_add_options --enable-startup-notification

# Comment out following option if you have PulseAudio installed
ac_add_options --disable-pulseaudio

# Comment out following option if you have gconf installed
ac_add_options --disable-gconf

# If you want to compile the Mozilla Calendar, uncomment this line:
#ac_add_options --enable-calendar

# Comment out following options if you have not installed
# recommended dependencies:
# Do not use system SQLite for Thunderbird 45.x
#ac_add_options --enable-system-sqlite
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-icu

# Set CFLAGS and CXXFLAGS to prevent segfaults due to agressive
# optimizations in GCC-6:
export CFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"
export CXXFLAGS+=" -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns2"

# The BLFS editors recommend not changing anything below this line:
ac_add_options --prefix=/usr
ac_add_options --enable-application=mail

ac_add_options --disable-crashreporter
ac_add_options --disable-installer
ac_add_options --disable-updater
ac_add_options --disable-debug
ac_add_options --disable-tests

ac_add_options --enable-optimize
ac_add_options --enable-strip
ac_add_options --enable-install-strip

ac_add_options --enable-gio
ac_add_options --enable-official-branding
ac_add_options --enable-safe-browsing
ac_add_options --enable-url-classifier

# Use internal cairo due to reports of unstable execution with
# system cairo
#ac_add_options --enable-system-cairo
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman

ac_add_options --with-pthreads

ac_add_options --with-system-bz2
ac_add_options --with-system-jpeg
ac_add_options --with-system-png
ac_add_options --with-system-zlib
EOF

Compile Thunderbird by issuing the following commands:

If you have installed version 2.1.8 or newer of libevent, fix a file:

sed -e s/_EVENT_SIZEOF/EVENT__SIZEOF/ \
    -i mozilla/ipc/chromium/src/base/message_pump_libevent.cc

Note

If you are compiling Thunderbird in chroot, prepend SHELL=/bin/sh to the make command below.

sed -e '/#include/i\
    print OUT "#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS\\n"\;' \
    -i mozilla/nsprpub/config/make-system-wrappers.pl &&

sed -e '/#include/a\
    print OUT "#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS\\n"\;' \
    -i mozilla/nsprpub/config/make-system-wrappers.pl &&

make -f client.mk

This package does not come with a test suite.

Install Thunderbird by running the following commands as the root user:

make -f client.mk install INSTALL_SDK= &&
chown -R 0:0 /usr/lib/thunderbird-45.7.1

Command Explanations

sed ...: These commands correct the source to be compatible with gcc6 by preventing c++ scope errors.

export CFLAGS= ... export CXXFLAGS= ...: These settings work around code which gcc6 would otherwise regard as out-of-specification and allow it to produce a working program.

make -f client.mk: Mozilla products are packaged to allow the use of a configuration file which can be used to pass the configuration settings to the configure command. make uses the client.mk file to get initial configuration and setup parameters.

Configuring Thunderbird

Configuration Information

If your Window or Desktop Manager does not allow you to configure a default browser, you can add a configuration parameter to Thunderbird so that a browser will start when when you click on an Internet/intranet/local URL. The procedure to check or modify any of the configuration parameters is quite simple and the instructions here can be used to view or modify any of the parameters.

First, open the configuration dialog by opening the “Edit” drop-down menu. Choose “Preferences” and then click on the “Advanced” icon on the top menu bar. Choose the “General” tab and click on the “Config Editor” button. This will display a list of the configuration preferences and information related to each one. You can use the “Filter:” bar to enter search criteria and narrow down the listed items. Changing a preference can be done using two methods. One, if the preference has a boolean value (True/False), simply double-click on the preference to toggle the value and two, for other preferences simply right-click on the desired line, choose “Modify” from the menu and change the value. Creating new preference items is accomplished in the same way, except choose “New” from the menu and provide the desired data into the fields when prompted.

The configuration preference item you need to check so that Thunderbird uses a specified browser is the network.protocol-handler.app.http which should be set to the path of the desired browser, e.g. /usr/bin/firefox.

Tip

There is a multitude of configuration parameters you can tweak to customize Thunderbird. A very extensive, but not so up-to-date list of these parameters can be found at http://preferential.mozdev.org/preferences.html.

If you use a desktop environment such as GNOME or KDE, a desktop file thunderbird.desktop may be created, in order to include a “Thunderbird” entry in the menu. If you didn't enable startup-notification in your mozconfig, then change the StartupNotify line to false. Run the following commands as the root user:

mkdir -pv /usr/share/{applications,pixmaps} &&

cat > /usr/share/applications/thunderbird.desktop << "EOF" &&
[Desktop Entry]
Encoding=UTF-8
Name=Thunderbird Mail
Comment=Send and receive mail with Thunderbird
GenericName=Mail Client
Exec=thunderbird %u
Terminal=false
Type=Application
Icon=thunderbird
Categories=Application;Network;Email;
MimeType=application/xhtml+xml;text/xml;application/xhtml+xml;application/xml;application/rss+xml;x-scheme-handler/mailto;
StartupNotify=true
EOF

ln -sfv /usr/lib/thunderbird-45.7.1/chrome/icons/default/default256.png \
        /usr/share/pixmaps/thunderbird.png

Contents

Installed Program: thunderbird
Installed Libraries: None
Installed Directory: /usr/lib/thunderbird-45.7.1

Short Descriptions

thunderbird

is Mozilla's email and newsgroup client.

Last updated on 2017-02-22 11:24:59 -0800

Tigervnc-1.7.1

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-8.0 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-3.7.2, FLTK-1.3.4, GnuTLS-3.5.9, libgcrypt-1.7.6, libjpeg-turbo-1.5.1, Pixman-0.34.0, and Xorg Legacy Fonts

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tigervnc

Installation of Tigervnc

Install tigervnc by running the following commands:

patch -Np1 -i ../tigervnc-1.7.1-gethomedir-1.patch &&

mkdir -vp build &&
cd        build &&

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

# Build server
cp -vR ../unix/xserver unix/ &&
tar -xf ../../xorg-server-1.18.4.tar.bz2 -C unix/xserver --strip-components=1 &&

pushd unix/xserver &&
  patch -Np1 -i ../../../unix/xserver117.patch &&
  autoreconf -fi   &&

  ./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 TIGERVNC_SRCDIR=`pwd`/../../../ &&
popd

This package does not come with a test suite.

Now, as the root user:

#Install viewer
make install &&

#Install server
pushd unix/xserver/hw/vnc &&
  make install &&
popd &&

[ -e /usr/bin/Xvnc ] || ln -svf $XORG_PREFIX/bin/Xvnc /usr/bin/Xvnc

Finally, create a menu entry. As the root user:

cat > /usr/share/applications/vncviewer.desktop << "EOF"
[Desktop Entry]
Type=Application
Name=TigerVNC Viewer
Comment=VNC client
Exec=/usr/bin/vncviewer
Icon=tigervnc
Terminal=false
StartupNotify=false
Categories=Network;RemoteAccess;
EOF

install -vm644 ../media/icons/tigervnc_24.png /usr/share/pixmaps &&
ln -sfv tigervnc_24.png /usr/share/pixmaps/tigervnc.png

Command Explanations

patch ...: This patch updates a build file so that the Xvnc libraries can be found during the build process.

tar -xf .. xorg-server...: This command extracts the standard Xorg packages into the tree in a location needed for modification.

--disable ...: Most options that are usually needed for the standard Xorg server are not needed fror 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 user specific configuration files of vncserver resides in the .vnc directory in the user's home directory. The xstartup file in that directory is a script specifying what commands to be 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
startlxde &

Contents

Installed Programs: Xvnc, vncconfig, vncpasswd, vncserver, vncviewer, and x0vncserver
Installed Libraries: libvnc.so
Installed Directories: /usr/share/doc/tigervnc-1.7.1

Short Descriptions

Xvnc

is a X VNC (Virtual Network Computing) server. It is based on a standard X server, but it has a "virtual" screen rather than a physical one.

vncconfig

is a program to configure and control a VNC server.

vncpasswd

allows you to set the password used to access VNC desktops.

vncserver

is a perl script used to start or stop a VNC server.

vncviewer

is a client used to connect to VNC desktops.

x0vncserver

is a program to make an X display on a physical terminal accessible via TigerVNC or compatible viewers.

Last updated on 2017-02-23 01:01:15 -0800

Transmission-2.92

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-8.0 platform.

Package Information

Transmission Dependencies

Required

cURL-7.52.1, libevent-2.1.8, and OpenSSL-1.0.2k

Recommended (to build a GUI)
Optional

Doxygen-1.8.13 and GDB-7.12.1

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/transmission

Installation of Transmission

Install Transmission by running the following commands:

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

Compile the Qt GUI with the following commands:

pushd qt        &&
  qmake qtr.pro &&
  make          &&
popd

This package does not come with a test suite.

Now, as the root user:

make install

If you compiled the Qt GUI, install it by running the following commands as the root user:

make INSTALL_ROOT=/usr -C qt install &&

install -m644 qt/transmission-qt.desktop /usr/share/applications/transmission-qt.desktop &&
install -m644 qt/icons/transmission.png  /usr/share/pixmaps/transmission-qt.png

Command Explanations

--without-gtk: This switch disables building of the GTK+ interface if GTK+ is present on the system (useful for Qt5 or cli only builds).

Contents

Installed Programs: transmission-cli, transmission-create, transmission-daemon, transmission-edit, transmission-gtk, transmission-qt, transmission-remote and transmission-show
Installed Libraries: None
Installed Directory: /usr/share/transmission

Short Descriptions

transmission-cli

is a lightweight, command-line BitTorrent client with scripting capabilities.

transmission-create

is a command line tool used to create .torrent files.

transmission-daemon

is a daemon-based Transmission session that can be controlled via RPC commands from transmission's web interface or transmission-remote.

transmission-edit

is a command-line utility to modify .torrent files' announce URLs.

transmission-gtk

is a GTK+ bittorrent client.

transmission-qt

is a Qt bittorrent client.

transmission-remote

is a remote control utility for transmission-daemon and transmission.

transmission-show

is a command line tool to display bittorrent .torrent file metadata.

Last updated on 2017-02-22 13:57:24 -0800

xarchiver-0.5.4

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-8.0 platform.

Note

xarchiver is only a command line or graphical interface to archiving utilities such as tar and zip.

Package Information

Additional Downloads

xarchiver Dependencies

Required

GTK+-2.24.31 or GTK+-3.22.8

Optional (Runtime)

cpio-2.12, LZO-2.09, p7zip-16.02, UnRar-5.4.5, UnZip-6.0, and Zip-3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xarchiver

Installation of xarchiver

Install xarchiver by running the following commands:

patch -Np1 -i ../xarchiver-0.5.4-fixes-1.patch &&

./autogen.sh --prefix=/usr               \
             --libexecdir=/usr/lib/xfce4 \
             --disable-gtk3              \
             --docdir=/usr/share/doc/xarchiver-0.5.4 &&
make

This package does not come with a test suite.

Now, as the root user:

make DOCDIR=/usr/share/doc/xarchiver-0.5.4 install

If desktop-file-utils-0.23 and hicolor-icon-theme-0.15 are installed, issue, as root user:

update-desktop-database &&
gtk-update-icon-cache -t -f --include-image-data /usr/share/icons/hicolor

Command Explanations

--libexecdir=/usr/lib/xfce4: This switch fixes the location for the thunar-archive-plugin, so it will work if Thunar-1.6.11 is installed.

--disable-gtk3: This switch allows building against GTK+2. Default is --enable-gtk3. Remove it or replace it, if you wish to build against GTK+3.

Contents

Installed Program: xarchiver
Installed Libraries: None
Installed Directories: /usr/lib/xfce4/thunar-archive-plugin, /usr/share/doc/xarchiver-0.5.4, and /usr/share/pixmaps/xarchiver

Short Descriptions

xarchiver

is a GTK+ archive manager.

Last updated on 2017-02-21 13:10:36 -0800

xdg-utils-1.1.1

Introduction to xdg-utils

xdg-utils is a a set of command line tools that assist applications with a variety of desktop integration tasks. It is required for Linux Standards Base (LSB) conformance.

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

Package Information

xdg-utils Dependencies

Required

xmlto-0.0.28 with one of Lynx-2.8.8rel.2, w3m-0.5.3, or Links-2.14

Required (runtime)

Xorg Applications

Optional (runtime)

dbus-1.10.14

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xdg-utils

Installation of xdg-utils

Compile xdg-utils with the following commands:

./configure --prefix=/usr --mandir=/usr/share/man &&
make

Caution

The tests for the scripts must be made from an X-Window based session. There are several run-time requirements to run the tests including a broswer and an MTA. Running the tests as root user is not recommended.

To run the tests, issue: make -k test.

Now install it as the root user:

make install

Contents

Installed Programs: xdg-desktop-menu, xdg-desktop-icon, xdg-mime, xdg-icon-resource, xdg-open, xdg-email, xdg-screensaver, xdg-settings
Installed Libraries: None
Installed Directories: None

Short Descriptions

xdg-desktop-menu

is a command line tool for (un)installing desktop menu items.

xdg-desktop-icon

is a command line tool for (un)installing icons to the desktop.

xdg-mime

is a command line tool for querying information about file type handling and adding descriptions for new file types.

xdg-icon-resource

is a command line tool for (un)installing icon resources.

xdg-open

opens a file or URL in the user's preferred application.

xdg-email

opens the user's preferred e-mail composer in order to send a mail message.

xdg-screensaver

is a command line tool for controlling the screensaver.

xdg-settings

is a command line tool for managing various settings from the desktop environment.

Last updated on

XScreenSaver-5.36

Introduction to XScreenSaver

The XScreenSaver 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-8.0 platform.

Package Information

XScreenSaver Dependencies

Required

libglade-2.6.4 and Xorg Applications

Recommended
Optional

GDM , GLE and Linux-PAM-1.3.0

Optional (runtime)

The adobe-100dpi font, with libXfont and bdftopcf from Xorg Legacy Fonts (to enlarge the splash screen, error messages, and password prompt)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xscreensaver

Installation of XScreenSaver

Install XScreenSaver by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-setuid-hacks: This switch allows some demos to be installed setuid root which is needed in order to ping other hosts.

Configuring XScreenSaver

Config Files

/etc/X11/app-defaults/XScreenSaver and ~/.xscreensaver

Linux PAM Configuration

If XScreenSaver has been built with Linux PAM support, you need to create a PAM configuration file, to get it working correctly with BLFS.

Issue the following commands as the root user to create the configuration file for Linux PAM:

cat > /etc/pam.d/xscreensaver << "EOF"
# Begin /etc/pam.d/xscreensaver

auth    include system-auth
account include system-account

# End /etc/pam.d/xscreensaver
EOF

Contents

Installed Programs: xscreensaver, xscreensaver-command, xscreensaver-demo, xscreensaver-getimage, xscreensaver-getimage-file, xscreensaver-getimage-video, xscreensaver-gl-helper and xscreensaver-text
Installed Libraries: None
Installed Directories: /usr/libexec/xscreensaver and /usr/share/xscreensaver

Short Descriptions

xscreensaver

is a screen saver and locker daemon.

xscreensaver-command

controls a running xscreensaver process by sending it client messages.

xscreensaver-demo

is a graphical front-end for setting the parameters used by the background xscreensaver daemon.

xscreensaver-getimage

is a helper program for the xscreensaver modules that manipulate images.

xscreensaver-getimage-file

is a helper program for the xscreensaver modules that manipulate images.

xscreensaver-getimage-video

is a helper program for the xscreensaver modules that manipulate images.

xscreensaver-gl-helper

is a helper program for the xscreensaver OpenGL modules.

xscreensaver-text

prints some text to stdout, for use by screen savers.

Last updated on 2017-02-16 19:05:12 -0800

Part XIII. Multimedia

Chapter 44. Multimedia Libraries and Drivers

Many multimedia programs require libraries and/or drivers in order to function properly. The packages in this section fall into this category. Generally you only need to install these if you are installing a program which has the library listed as either a requirement, or as an option to enable it to support certain functionality.

ALSA-1.1.3

The Linux kernel now provides ALSA support by default. However, applications need to interface to that capability. The following six sections of the book deal with the separate components of ALSA: the libraries, the plugins, the utilities, the tools, the firmware and the OSS compatibility libraries.

Last updated on 2016-03-24 12:58:43 -0700

alsa-lib-1.1.3

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-8.0 platform.

Package Information

ALSA Library Dependencies

Optional

Doxygen-1.8.13 and Python-2.7.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-lib

Kernel Configuration

If needed, enable the following options in the kernel configuration and recompile the kernel:

Device Drivers --->
  <*/m> Sound card support --->                  [CONFIG_SOUND]
    <*/m> Advanced Linux Sound Architecture ---> [CONFIG_SND]
            Select settings and drivers appropriate for your hardware.
    < >   Open Sound System (DEPRECATED)         [CONFIG_SOUND_PRIME]

In the Device Drivers ⇒ Sound card support ⇒ Advanced Linux Sound Architecture section of the kernel configuration, select the settings and drivers appropriate for your hardware. Ensure that the deprecated Device Drivers ⇒ Sound card support ⇒ Open Sound System is not selected. If necessary, recompile and install your new kernel.

Installation of ALSA Library

Install ALSA Library by running the following commands:

./configure &&
make

If you have Doxygen installed and you wish to build the library API documentation, run the following commands from the top-level directory of the source tree:

make doc

To test the results, issue: make check.

Now, as the root user:

make install

To install the API documentation, run the following command as the root user:

install -v -d -m755 /usr/share/doc/alsa-lib-1.1.3/html/search &&
install -v -m644 doc/doxygen/html/*.* \
                /usr/share/doc/alsa-lib-1.1.3/html &&
install -v -m644 doc/doxygen/html/search/* \
                /usr/share/doc/alsa-lib-1.1.3/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 http://www.alsa-project.org/main/index.php/Asoundrc.

Contents

Installed Program: aserver
Installed Library: libasound.so and four others under /usr/lib/alsa-lib/smixer
Installed Directories: /usr/include/alsa, /usr/lib/alsa-lib, /usr/share/alsa and /usr/share/doc/alsa-lib-1.1.3

Short Descriptions

aserver

is the ALSA server.

libasound.so

contains the ALSA API functions.

Last updated on 2017-02-18 16:50:09 -0800

alsa-plugins-1.1.1

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-8.0 platform.

Package Information

ALSA Plugins Dependencies

Required

alsa-lib-1.1.3

Optional

FFmpeg-3.2.4, libsamplerate-0.1.9, PulseAudio-10.0, Speex-1.2rc2, JACK, and maemo

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-plugins

Installation of ALSA Plugins

Install ALSA Plugins by running the following commands:

./configure &&
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 ctl_oss, ctl_pulse, pcm_a52, pcm_jack, pcm_oss, pcm_pulse, pcm_upmix, pcm_usb_stream, pcm_vdownmix, rate_lavcrate*, rate_samplerate*, and rate_speexrate*
Installed Directories: None

Short Descriptions

libasound_module_pcm_oss.so

Allows native ALSA applications to run on OSS.

libasound_module_pcm_upmix.so

Allows upmixing sound to 4 or 6 channels.

libasound_module_pcm_vdownmix.so

Allows downmixing sound from 4-6 channels to 2 channel stereo output.

libasound_module_pcm_jack.so

Allows native ALSA applications to work with jackd.

libasound_module_pcm_pulse.so

Allows native ALSA applications to access a PulseAudio sound daemon.

libasound_module_pcm_a52.so

Converts S16 linear sound format to A52 compressed format and sends it to an SPDIF output.

libasound_module_rate_samplerate.so

Provides an external rate converter through libsamplerate.

Last updated on 2017-02-18 16:50:09 -0800

alsa-utils-1.1.3

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-8.0 platform.

Package Information

ALSA Utilities Dependencies

Required

alsa-lib-1.1.3

Optional

libsamplerate-0.1.9, xmlto-0.0.28, Dialog, and FFTW

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-utils

Installation of ALSA Utilities

Install ALSA Utilities by running the following commands:

./configure --disable-alsaconf \
            --disable-bat   \
            --disable-xmlto \
            --with-curses=ncursesw &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-alsaconf: This switch disables building the alsaconf configuration tool which is incompatible with Udev.

--disable-xmlto: Omit this switch if you have installed xmlto-0.0.28 and wish to regenerate the man pages.

--disable-bat: Omit this switch if you have installed FFTW and wish to install the Basic Audio Tester (BAT).

--with-curses=ncursesw: This switch forces the use of wide-character ncurses libraries.

Configuring ALSA Utilities

Config Files

/var/lib/alsa/asound.state

Configuration Information

Note that all channels of your sound card are muted by default. You can use the alsamixer program to change this. Use speaker-test to check that your settings have been applied correctly. You should hear “pink noise” on your speakers.

The alsactl program is normally run from a standard udev rule. The first time it is run, it will complain that there is no state in /var/lib/alsa/asound.state. You can prevent this by running the following commands as the root user:

alsactl -L store

The volume settings should be restored from the saved state by Udev when the device is detected (during boot or when plugged in for USB devices).

All sound devices are not accessible for any user except root and members of the audio group. Add any users that might use the sound devices to that group:

usermod -a -G audio <username>

Note

You may need to log out and back in again to refresh your group memberships. 'su <username>' should work as well.

Boot Script

To automatically store and restore volume settings (if 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-20170225 package.

make install-alsa

Contents

Installed Programs: aconnect, alsaloop, alsamixer, alsatplg, alsaucm, amidi, amixer, aplay, aplaymidi, arecord (symlink), arecordmidi, aseqdump, iaseqnet, iecset, and speaker-test
Installed Libraries: None
Installed Directories: /usr/share/sounds/alsa and /var/lib/alsa

Short Descriptions

aconnect

is a utility for connecting and disconnecting two existing ports in the ALSA sequencer system.

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.

alsaucm

allows applications to access the hardware in an abstracted manner

amidi

is used to read from and write to ALSA RawMIDI ports.

amixer

allows command-line control of the mixers for the ALSA sound card drivers.

aplay

is a command-line soundfile player for the ALSA sound card drivers.

aplaymidi

is a command-line utility that plays the specified MIDI file(s) to one or more ALSA sequencer ports.

arecord

is a command-line soundfile recorder for the ALSA sound card drivers.

arecordmidi

is a command-line utility that records a standard MIDI file from one or more ALSA sequencer ports.

aseqdump

is a command-line utility that prints the sequencer events it receives as text.

aseqnet

is an ALSA sequencer client which sends and receives event packets over a network.

iecset

is a small utility to set or dump the IEC958 (or so-called “S/PDIF”) status bits of the specified sound card via the ALSA control API.

speaker-test

is a command-line speaker test tone generator for ALSA.

Last updated on 2017-02-18 16:50:09 -0800

alsa-tools-1.1.3

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-8.0 platform.

Package Information

ALSA Tools Dependencies

Required

alsa-lib-1.1.3

Optional

GTK+-2.24.31 (to build echomixer, envy24control and rmedigicontrol), GTK+-3.22.8 (to build hdajackretask) and FLTK-1.3.4 (to build hdspconf and hdspmixer)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-tools

Installation of ALSA Tools

Note

When installing multiple packages in a script, the installation needs to be done as the root user. There are three general options that can be used to do this:

  1. Run the entire script as the root user (not recommended).

  2. Use the sudo command from the Sudo-1.8.19p2 package.

  3. Use su -c "command arguments" (quotes required) which will ask for the root password for every iteration of the loop.

One way to handle this situation is to create a short bash function that automatically selects the appropriate method. Once the command is set in the environment, it does not need to be set again.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root

First, start a subshell that will exit on error:

bash -e

Now, remove a tool that needs Qt2 or 3 and two unneed files (for the BLFS instructions below):

rm -rf qlo10k1 Makefile gitcompile

The ALSA Tools package is only needed by those with advanced requirements for their sound card. The tools can be built all together at once, but if only a subset is needed, you need to cd into the directory of each tool you wish to compile and run the commands. Here, we present instructions to build all tools.

Install all ALSA Tools by running the following commands:

for tool in *
do
  case $tool in
    seq )
      tool_dir=seq/sbiload
    ;;
    * )
      tool_dir=$tool
    ;;
  esac

  pushd $tool_dir
    ./configure --prefix=/usr
    make
    as_root make install
    as_root /sbin/ldconfig
  popd

done
unset tool tool_dir

Finally, exit the shell that was started earlier:

exit

Contents

Installed Programs: as10k1, cspctl, dl10k1, echomixer, envy24control, hda-verb, hdajackretask, hdajacksensetest, hdspconf, hdsploader, hdspmixer, hwmixvolume, init_audigy, init_audigy_eq10, init_live, lo10k1, ld10k1, ld10k1d, mixartloader, pcxhrloader, rmedigicontrol, sbiload, sscape_ctl, us428control, usx2yloader, and vxloader
Installed Library: liblo10k1.so
Installed Directories: /etc/hotplug, /usr/include/lo10k1, /usr/share/ld10k1, and /usr/share/sounds

Short Descriptions

as10k1

is an assembler for the emu10k1 DSP chip present in the Creative SB Live, PCI 512, and emu APS sound cards. It is used to make audio effects such as a flanger, chorus or reverb.

cspctl

is an SB16/AWE32 Creative Signal Processor (ASP/CSP) control program.

echomixer

is the Linux equivalent of the Echoaudio console application from Echoaudio. It is a tool to control all the features of any Echoaudio soundcard. This includes clock sources, input and output gains, mixers, etc.

envy24control

is a control tool for Envy24 (ice1712) based sound cards.

hdajackretask

is a GUI to make it easy to retask your jacks - e g, turn your Mic jack into an extra Headphone, or why not make them both line outs and connect them to your surround receiver.

hda-verb

is a small program to send HD-audio commands to the given ALSA hwdep device on the hd-audio interface.

hdspconf

is a GUI to control the Hammerfall HDSP Alsa Settings. Up to four hdsp cards are supported.

hdsploader

is used to load the firmware required by the Hammerfall HDSP sound cards.

hdspmixer

is the Linux equivalent of the Totalmix application from RME. It is a tool to control the advanced routing features of the RME Hammerfall DSP soundcard series.

hwmixvolume

allows you to control the volume of individual streams on sound cards that use hardware mixing

init_audigy*

are tools used to initialize Creative cards.

init_live

is a tool used to initialize Creative 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.

qlo10k1

is a Qt GUI for the ld10k1 patch loader.

mixartloader

is a helper program to load the firmware binaries onto the Digigram's miXart board sound drivers. The following modules require this program: snd-mixart. These drivers don't work properly at all until the certain firmwares are loaded, i.e. no PCM nor mixer devices will appear.

pcxhrloader

is a helper program to load the firmware binaries onto Digigram's pcxhr compatible board sound drivers. The following modules require this program: snd-pcxhr. These drivers don't work properly at all until the certain firmwares are loaded, i.e. no PCM nor mixer devices will appear.

rmedigicontrol

is a control tool for RME Digi32 and RME Digi96 sound cards. It provides a graphical frontend for all the sound card controls and switches.

sbiload

is an OPL2/3 FM instrument loader for the ALSA sequencer.

sscape_ctl

is an ALSA SoundScape control utility.

us428control

is a Tascam US-428 control program.

usx2yloader

is a helper program to load the 2nd Phase firmware binaries onto the Tascam USX2Y USB sound cards. It has proven to work so far for the US122, US224 and US428. The snd-usb-usx2y module requires this program.

vxloader

is a helper program to load the firmware binaries onto the Digigram's VX-board sound drivers. The following modules require this program: snd-vx222, snd-vxpocket, snd-vxp440. These drivers don't work properly at all until the certain firmwares are loaded, i.e. no PCM nor mixer devices will appear.

Last updated on 2017-02-18 16:50:09 -0800

alsa-firmware-1.0.29

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-8.0 platform.

Package Information

ALSA Firmware Dependencies

Required

alsa-tools-1.1.3

Optional

AS31 (for rebuilding the firmware from source)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-firmware

Installation of ALSA Firmware

The ALSA Firmware package is only needed by those with advanced requirements for their sound card. See the README for configure options.

Install ALSA Firmware by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: None
Installed Directories: Several directories in /lib/firmware and /usr/share/alsa/firmware

Last updated on 2017-02-18 16:50:09 -0800

ALSA OSS-1.0.28

Introduction to ALSA OSS

The ALSA OSS package contains the ALSA OSS compatibility library. This is used by programs which wish to use the ALSA OSS sound interface.

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

Package Information

ALSA OSS Dependencies

Required

alsa-lib-1.1.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/alsa-oss

Installation of ALSA OSS

Install ALSA OSS by running the following commands:

./configure --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Program: aoss
Installed Libraries: libalsatoss.so, libaoss.so, and libossredir.a
Installed Directories: None

Short Descriptions

aoss

is a simple wrapper script which facilitates the use of the ALSA OSS compatibility library. It just sets the appropriate LD_PRELOAD path and then runs the command.

Last updated on 2017-02-18 16:50:09 -0800

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-8.0 platform.

Package Information

AudioFile Dependencies

Required

alsa-lib-1.1.3

Recommended
Optional

asciidoc-8.6.9 and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/audiofile

Installation of AudioFile

Install AudioFile by running the following commands:

CXXFLAGS=-std=c++98 \
./configure --prefix=/usr --disable-static &&

make

Now, as the root user:

make install

To test the results, issue: make check. Note that the tests will fail if the --disable-static option is used and tests are executed before make install. You have three options:

(a) configure without --disable-static, run the tests, but do not install, then start a fresh build using --disable-static just for installing the package.

(b) configure with --disable-static, but only run the tests after the package is installed.

(c) configure with --disable-static, but only run the tests after a DESTDIR install.

Command Explanations

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

Contents

Installed Programs: sfconvert and sfinfo
Installed Libraries: libaudiofile.so
Installed Directories: None

Short Descriptions

sfinfo

displays the sound file format, audio encoding, sampling rate and duration for audio formats supported by this library.

sfconvert

converts sound file formats where the original format and destination format are supported by this library.

libaudiofile.so

contains functions used by programs to support AIFF, AIFF-compressed, Sun/NeXT, WAV and BIC audio formats.

Last updated on 2017-02-17 16:10:58 -0800

FAAC-1.28

Introduction to FAAC

FAAC is an encoder for a lossy sound compression scheme specified in MPEG-2 Part 7 and MPEG-4 Part 3 standards and known as Advanced Audio Coding (AAC). This encoder is useful for producing files that can be played back on iPod. Moreover, iPod does not understand other sound compression schemes in video files.

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

Package Information

Additional Downloads

FAAC Dependencies

Optional

libmp4v2 from mpeg4ip (untested, as of 2007-09-28, development of the project is stopped; an internal version of the library is used if the external one is not found).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/faac

Installation of FAAC

Install FAAC by running the following commands:

patch -Np1 -i ../faac-1.28-glibc_fixes-1.patch &&

sed -i -e '/obj-type/d' -e '/Long Term/d' frontend/main.c &&

CFLAGS=-std=c99 CXXFLAGS=-std=c++98 \
./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.1.3 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.7 package and play back the decoded file (requires the aplay program from the alsa-utils-1.1.3 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

CFLAGS=... CXXFLAGS=...: These environment variables fix a problem with compiling under GCC-6.x.

sed -i ...: This command removes documentation for the --obj-type parameter from the faac --long-help command output. This parameter is already disabled in FAAC-1.28 due to sound quality issues with object types other than “Low Complexity”.

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

--enable-drm: This option is supposed to enable support for encoding files for Digital Radio Mondiale, but actually breaks the base functionality of the package (e.g., the resulting faac program produces files that cannot be decoded by FAAD2-2.7, even if compiled with DRM support). Don't use it.

Other AAC encoders

The quality of FAAC is not up to par with the best AAC encoders currently available. Also, it only supports AAC and not High Efficiency AAC (also known as aacPlus), which provides better quality at low bitrates by means of using the “spectral band replication” technology. There are the following alternative programs for producing AAC and HE-AAC streams:

  • Nero AAC Codec: available only in the binary form, the command-line AAC and HE-AAC encoders for Linux are in the same archive as the Windows application.

  • 3GPP Enhanced aacPlus general audio codec: available in the source form, can encode only HE-AAC up to 48 kbps out of the box, but the maximum bitrate can be changed by editing the tuning table in the FloatFR_sbrenclib/src/sbr_main.c file.

Note, however, that iPod supports only Low Complexity AAC profile, which is the default in FAAC, but may not be the default in Nero AAC Encoder and is completely unavailable in the 3GPP encoder.

Contents

Installed Program: faac
Installed Libraries: libfaac.so and libmp4v2.so
Installed Directories: None

Short Descriptions

faac

is a command-line AAC encoder.

libfaac.so

contains functions for encoding AAC streams.

libmp4v2.so

contains functions for creating and manipulating MP4 files.

Last updated on 2017-02-17 16:10:58 -0800

FAAD2-2.7

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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/faad2

Installation of FAAD2

Install FAAD2 by running the following commands:

patch -Np1 -i ../faad2-2.7-mp4ff-1.patch &&

sed -i "s:AM_CONFIG_HEADER:AC_CONFIG_HEADERS:g" configure.in &&
sed -i "s:man_MANS:man1_MANS:g" frontend/Makefile.am         &&

autoreconf -fi &&

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

This package does not come with a test suite. However, basic functionality can be tested by decoding the sample AAC file:

./frontend/faad -o sample.wav ../sample.aac

This should display a copyright message and the following information about the sample file:

sample.aac file info:
ADTS, 4.608 sec, 13 kbps, 16000 Hz


  ---------------------
 | Config:  2 Ch       |
  ---------------------
 | Ch |    Position    |
  ---------------------
 | 00 | Left front     |
 | 01 | Right front    |
  ---------------------

Now play the result (requires the aplay program from the alsa-utils-1.1.3 package):

aplay sample.wav

aplay should identify the file as “Signed 16 bit Little Endian, Rate 16000 Hz, Stereo”, and you should hear some piano notes.

Now, as the root user:

make install

Command Explanations

sed -i ...: First command fixes autotools scripts to be compatible with latest version of Automake and second command fixes manual page install location.

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

--with-drm: This option is supposed to enable support for decoding Digital Radio Mondiale, but actually breaks the base functionality of the package (e.g., the resulting faad program cannot decode the sample AAC file linked above). Don't use it.

Contents

Installed Program: faad
Installed Library: libfaad.so
Installed Directories: None

Short Descriptions

faad

is a command-line utility for decoding AAC and MP4 files.

libfaad.so

contains functions for decoding AAC streams.

Last updated on 2017-02-18 18:01:35 -0800

fdk-aac-0.1.5

Introduction to fdk-aac

fdk-aac package provides the Fraunhofer FDK AAC library, which is purported to be a high quality Advanced Audio Coding implementation.

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

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fdk-aac

Installation of fdk-aac

Install fdk-aac by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

Contents

Installed Programs: None
Installed Library: libfdk-aac.so
Installed Directory: /usr/include/fdk-aac

Short Descriptions

libfdk-aac.so

provides the functions used to encode audio in AAC format.

Last updated on 2017-02-17 16:10:58 -0800

FLAC-1.3.2

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-8.0 platform.

Package Information

FLAC Dependencies

Optional

libogg-1.3.2, NASM-2.12.02, DocBook-utils-0.6.14, Doxygen-1.8.13 and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/flac

Installation of FLAC

Install FLAC by running the following commands:

./configure --prefix=/usr \
            --disable-thorough-tests &&
make

To test the results, issue: make check. Note that if you passed the --enable-exhaustive-tests and --enable-valgrind-testing parameters to configure and then run the test suite, it will take a very long time (up to 300 SBUs) and use about 375 MB of disk space.

Now, as the root user:

make install

Command Explanations

--disable-thorough-tests: This parameter is used so that the test suite will complete in a reasonable amount of time. Remove it if you desire more extensive tests.

Contents

Installed Programs: flac and metaflac
Installed Libraries: libFLAC.so and libFLAC++.so
Installed Directories: /usr/include/FLAC, /usr/include/FLAC++ and /usr/share/doc/flac-1.3.2

Short Descriptions

flac

is a command-line utility for encoding, decoding and converting FLAC files.

metaflac

is a program for listing, adding, removing, or editing metadata in one or more FLAC files.

libFLAC{,++}.so

these libraries provide native FLAC and Ogg FLAC C/C++ APIs for programs utilizing FLAC.

Last updated on 2017-02-17 16:10:58 -0800

frei0r-plugins-1.5.0

Introduction to Frei0r-plugins

Frei0r is a minimalistic plugin API for video effects. Note that the 0 in the name is a zero, not a capital letter o.

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

Package Information

Frei0r-plugins Dependencies

Recommended

gavl-1.4.0 and opencv-3.2.0

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/frei0r

Installation of Frei0r-plugins

Install Frei0r by running the following commands:

mkdir -vp build &&
cd        build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr    \
      -DCMAKE_BUILD_TYPE=Release     \
      -DOpenCV_DIR=/usr/share/OpenCV \
      -Wno-dev ..                    &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

-DOpenCV_DIR=/usr/share/OpenCV: This parameter helps the make procedure to find the libippicv.a library, installed under that directory tree.

-DWITHOUT_GAVL=ON: This option instructs the make procedure to disable building plugins dependent upon gavl.

-DWITHOUT_OPENCV=ON: This option instructs the make procedure to disable building plugins dependent upon OpenCV.

Contents

Installed Program: None
Installed Libraries: Over 120 video effects plugins
Installed Directories: /usr/lib/frei0r-1

Last updated on 2017-02-19 17:09:49 -0800

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-8.0 platform.

Package Information

Gavl Dependencies

Required

libpng-1.6.28

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gavl

Installation of Gavl

Install Gavl by running the following commands:

./configure --prefix=/usr     \
            --without-doxygen \
            --docdir=/usr/share/doc/gavl-1.4.0 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--without-doxygen: This switch disables use of Doxygen. Omit if Doxygen is installed and you wish to build the API documentation.

Contents

Installed Program: None
Installed Libraries: libgavl.so
Installed Directories: /usr/include/gavl and /usr/share/doc/gavl-1.4.0

Last updated on 2017-02-17 16:10:58 -0800

gstreamer-1.10.3

Introduction to gstreamer

gstreamer is a streaming media framework that enables applications to share a common set of plugins for things like 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.10.3 and one of Good, Bad, Ugly or Libav plugins.

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

Package Information

gstreamer Dependencies

Required

GLib-2.50.3

Recommended
Optional

GTK+-3.22.8 (for examples), Gsl-2.3, GTK-Doc-1.25, and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gstreamer10

Installation of gstreamer

Install gstreamer by running the following commands:

./configure --prefix=/usr \
            --with-package-name="GStreamer 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/" &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: gst-inspect-1.0, gst-launch-1.0, gst-stats-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}/gstreamer-1.0 and /usr/share/gtk-doc/html/gstreamer{,-libs,-plugins}-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-typefind-1.0

uses the gstreamer type finding system to determine the relevant gstreamer plugin to parse or decode files, and the corresponding MIME type.

libgstbase-1.0.so

provides some base classes to be extended by elements and utillity classes that are most useful for plugin developers.

libgstcheck-1.0.so

provides functionality for writing unit tests that use the check framework.

libgstcontroller-1.0.so

provides functionality to animate element properties over time.

libgstnet-1.0.so

provides network elements and objects.

libgstreamer-1.0.so

provides all of the core gstreamer services, including initialization, plugin management and types, as well as the object hierarchy that defines elements and bins, along with some more specialized elements.

Last updated on 2017-02-17 16:10:58 -0800

gst-plugins-base-1.10.3

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-8.0 platform.

Package Information

GStreamer Base Plug-ins Dependencies

Required

gstreamer-1.10.3

Recommended
Optional

GTK+-3.22.8 (for examples), GTK-Doc-1.25, Opus-1.1.4, Qt-5.8.0 (for examples), Valgrind-3.12.0, libvisual, Orc, and Tremor

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-base

Installation of GStreamer Base Plug-ins

Note

If you need a plugin for a given dependency, that dependency needs to be installed before this application.

Install GStreamer Base Plug-ins by running the following commands:

./configure --prefix=/usr \
            --with-package-name="GStreamer Base Plugins 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/" &&
make

To test the results, issue: make check.

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.

Now, as the root user:

make install

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, 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,pbutils}, /usr/include/gstreamer-1.0/gst/{riff,rtp,rtsp,sdp,tag,video}, /usr/share/gst-plugins-base, and /usr/share/gtk-doc/html/gst-plugins-base-{libs,plugins}-1.0

Short Descriptions

gst-device-monitor-1.0

is a command line tool that can be used to test GStreamer's device monitoring functionality

gst-discoverer-1.0

is a tool that can be used to print basic metadata and stream information about a media file.

gst-play-1.0

is a command line tool that can be used to test basic playback using the playbin element.

Last updated on 2017-02-17 16:10:58 -0800

gst-plugins-good-1.10.3

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-8.0 platform.

Package Information

GStreamer Good Plug-ins Dependencies

Required

gst-plugins-base-1.10.3

Recommended
Optional

AAlib-1.4rc5, ALSA OSS-1.0.28, GTK+-3.22.8 (for examples), GTK-Doc-1.25, libdv-1.0.0, libgudev-231, PulseAudio-10.0, Speex-1.2rc2, taglib-1.11.1, Valgrind-3.12.0, v4l-utils-1.12.3, JACK, libcaca, libiec61883, libraw1394, libshout, Orc, and WavPack

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-good

Installation of GStreamer Good Plug-ins

Note

If you need a plugin for a given dependency, that dependency needs to be installed before this application.

Install GStreamer Good Plug-ins by running the following commands:

./configure --prefix=/usr \
            --with-package-name="GStreamer Good Plugins 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/"  &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: Several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/share/gstreamer-1.0/presets and /usr/share/gtk-doc/html/gst-plugins-good-plugins-1.0

Last updated on 2017-02-17 16:10:58 -0800

gst-plugins-bad-1.10.3

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-8.0 platform.

Package Information

GStreamer Bad Plug-ins Dependencies

Required

gst-plugins-base-1.10.3

Recommended
Optional

BlueZ-5.43, Clutter-1.26.0, cURL-7.52.1, FAAC-1.28, FAAD2-2.7, GnuTLS-3.5.9, GTK-Doc-1.25, GTK+-2.24.31 or GTK+-3.22.8, libass-0.13.6, libexif-0.6.21, libgcrypt-1.7.6, libmpeg2-0.5.1, libvdpau-1.1.1, libwebp-0.6.0, Mesa-13.0.4, mpg123-1.23.8, neon-0.30.2, Nettle-3.3, opencv-3.2.0 (with additional modules), OpenJPEG-1.5.2 or OpenJPEG-2.1.2, Opus-1.1.4, Qt-5.8.0 (for examples), SDL-1.2.15, Valgrind-3.12.0, Wayland-1.12.0 (GTK+-3.22.8 must have been compiled with wayland support), x265-2.3, Xorg Libraries, bs2b, Chromaprint, daala, Flite, Game Music Emu, GSM, libmimic, libmms, libofa, MJPEG Tools, OpenAL, Orc, VO AAC, VO AMRWB, and ZBAR

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-bad

Installation of GStreamer Bad Plug-ins

Note

If you need a plugin for a given dependency, that dependency needs to be installed before this application.

Install GStreamer Bad Plug-ins by running the following commands:

./configure --prefix=/usr     \
            --disable-wayland \
            --disable-opencv  \
            --with-package-name="GStreamer Bad Plugins 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/" &&
make

To test the results, issue: make check. Several tests need a terminal emulator in a graphical session.

Now, as the root user:

make install

Command Explanations

--disable-wayland: This switch is required without a full wayland based desktop environment.

--disable-opencv: This switch is required if opencv-3.2.0 is installed without additional modules (specifically bgsegm).

Contents

Installed Programs: None
Installed Libraries: libgstadaptivedemux-1.0.so, libgstbadaudio-1.0.so, libgstbadbase-1.0.so, libgstbadvideo-1.0.so, libgstbasecamerabinsrc-1.0.so, libgstcodecparsers-1.0.so, libgstgl-1.0.so, libgstinsertbin-1.0.so, libgstmpegts-1.0.so, libgstphotography-1.0.so, libgstplayer-1.0.so, libgsturidownloader-1.0.so, and several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/include/gstreamer-1.0/gst/{basecamerabinsrc,codecparsers,gl}, /usr/include/gstreamer-1.0/gst/{insertbin,interfaces,mpegts}, /usr/include/gstreamer-1.0/gst/{player,uridownloader}, /usr/lib/gstreamer-1.0/include, and /usr/share/gtk-doc/html/gst-plugins-bad-{libs,plugins}-1.0

Last updated on 2017-02-19 04:04:43 -0800

gst-plugins-ugly-1.10.3

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-8.0 platform.

Package Information

GStreamer Ugly Plug-ins Dependencies

Required

gst-plugins-base-1.10.3

Recommended
Optional

libmad-0.15.1b, libmpeg2-0.5.1, libcdio-0.94 (for CD-ROM drive access), mpg123-1.23.8, Valgrind-3.12.0, libsidplay, OpenCore AMR, Orc, and TwoLame

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gst10-plugins-ugly

Installation of GStreamer Ugly Plug-ins

Note

If you need a plugin for a given dependency, that dependency needs to be installed before this application.

Install GStreamer Ugly Plug-ins by running the following commands:

./configure --prefix=/usr \
            --with-package-name="GStreamer Ugly Plugins 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/" &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Libraries: Several plugins under /usr/lib/gstreamer-1.0
Installed Directories: /usr/share/gstreamer-1.0/presets and /usr/share/gtk-doc/html/gst-plugins-ugly-plugins-1.0

Last updated on 2017-02-17 16:10:58 -0800

gst-libav-1.10.3

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-8.0 platform.

Package Information

GStreamer Libav Dependencies

Required

gst-plugins-base-1.10.3

Recommended
Optional

Valgrind-3.12.0 and Orc

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gst10-libav

Installation of GStreamer Libav

Install GStreamer Libav by running the following commands:

./configure --prefix=/usr \
            --with-package-name="GStreamer Libav Plugins 1.10.3 BLFS" \
            --with-package-origin="http://www.linuxfromscratch.org/blfs/view/svn/" &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--with-libav-extra-configure="--disable-yasm": Use this switch if you don't have yasm installed.

Contents

Installed Programs: None
Installed Library: /usr/lib/gstreamer-1.0/libgstlibav.so
Installed Directory: /usr/share/gtk-doc/html/gst-libav-plugins-1.0

Last updated on 2017-02-17 19:16:56 -0800

gstreamer-vaapi-1.10.3

Introduction to gstreamer-vaapi

The gstreamer-vaapi package contains a gstreamer plugin for hardware accelerated video decode/encode for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).

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

Package Information

gstreamer-vaapi Dependencies

Required

gstreamer-1.10.3, gst-plugins-base-1.10.3, gst-plugins-bad-1.10.3, and libva-1.7.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gstreamer10-vaapi

Installation of gstreamer-vaapi

Install gstreamer-vaapi by running the following commands:

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

Tests can be run manually in the tests directory, after building them by running make tests. They need a running X Window display.

Now, as the root user:

make install

Contents

Installed Programs: None
Installed Library: /usr/lib/gstreamer-1.0/libgstvaapi.so
Installed Directory: /usr/share/gtk-doc/html/gstreamer-vaapi-plugins-1.0

Last updated on 2017-02-17 16:10:58 -0800

Liba52-0.7.4

Introduction to Liba52

liba52 is a free library for decoding ATSC A/52 (also known as AC-3) streams. The A/52 standard is used in a variety of applications, including digital television and DVD.

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

Package Information

Optional

djbfft

User Notes: http://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="-g -O2 $([ $(uname -m) = x86_64 ] && echo -fPIC)" &&
make

To test the results, issue: make check.

Now, as the root user:

make install &&
cp liba52/a52_internal.h /usr/include/a52dec &&
install -v -m644 -D doc/liba52.txt \
    /usr/share/doc/liba52-0.7.4/liba52.txt

Command Explanations

CFLAGS="-g -O2 ...: This sets CFLAGS to -g -O2 (which is the default) but then on x86_64 adds -fPIC. This is needed to compile liba52 on x86_64.

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

cp liba52/a52_internal.h ...: Copying this header file into /usr/include/a52dec allows some other programs (such as xine-lib) to compile and link against a system installed liba52.

Contents

Installed Programs: a52dec and extract_a52
Installed Library: liba52.so
Installed Directories: /usr/include/a52dec and /usr/share/doc/liba52-0.7.4

Short Descriptions

a52dec

plays ATSC A/52 audio streams.

extract_a52

extracts ATSC A/52 audio from an MPEG stream.

liba52.so

provides functions for the programs dealing with ATSC A/52 streams.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

Libao Dependencies

Optional

X Window System, ALSA-1.1.3, and PulseAudio-10.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libao

Installation of Libao

Install libao by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m644 README /usr/share/doc/libao-1.2.0

Configuring Libao

Config Files

/etc/libao.conf and ~/.libao

Configuration Information

Currently, the only configuration option available is setting the default output device. Issue man libao.conf for details.

Contents

Installed Programs: None
Installed Libraries: libao.so and plugins under /usr/lib/ao/plugins-4
Installed Directories: /usr/include/ao, /usr/lib/ao and /usr/share/doc/libao-1.2.0

Short Descriptions

libao.so

provides functions for programs wishing to output sound over supported platforms.

Last updated on 2017-02-18 18:01:35 -0800

libass-0.13.6

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-8.0 platform.

Package Information

libass Dependencies

Required

FreeType-2.7.1 and FriBidi-0.19.7

Recommended
Optional

HarfBuzz-1.4.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libass

Installation of libass

Install libass by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

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

--disable-fontconfig: Use this switch if you didn't install Fontconfig.

Contents

Installed Programs: None
Installed Library: libass.so
Installed Directory: /usr/include/ass

Short Descriptions

libass.so

provides the functions used to render ASS/SSA subtitle format.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

libcanberra Dependencies

Required

libvorbis-1.3.5

Recommended
Optional

GTK+-2.24.31, GTK-Doc-1.25, PulseAudio-10.0 and tdb

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libcanberra

Installation of libcanberra

Install libcanberra by running the following commands:

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

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc/libcanberra-0.30 install

Command Explanations

--disable-oss: disable optional deprecated OSS support

--disable-gtk: disable optional GTK+ 2 support

--disable-gtk3: disable optional GTK+ 3 support

--enable-gtk-doc: Use this parameter if GTK-Doc is installed and you wish to rebuild and install the API documentation.

Contents

Installed Programs: canberra-boot and canberra-gtk-play
Installed Libraries: libcanberra-gtk.so, libcanberra-gtk3.so and libcanberra.so
Installed Directories: /usr/lib/libcanberra-0.30, /usr/share/doc/libcanberra-0.30 and /usr/share/gtk-doc/html/libcanberra

Short Descriptions

canberra-gtk-play

is an application used for playing sound events.

libcanberra-gtk.so

contains the libcanberra bindings for GTK+ 2.

libcanberra-gtk3.so

contains the libcanberra bindings for GTK+ 3.

libcanberra.so

contains the libcanberra API functions.

Last updated on 2017-02-18 18:01:35 -0800

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libcddb

Installation of libcddb

Install libcddb by running the following commands:

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check. Two tests fail due to missing test servers.

Now, as the root user:

make install

Contents

Installed Programs: cddb_query
Installed Library: libcddb.so
Installed Directories: /usr/include/cddb

Short Descriptions

cddb_query

provides a user interface to a CDDB server.

Last updated on 2017-02-17 16:10:58 -0800

libcdio-0.94

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-8.0 platform.

Package Information

  • Download (HTTP): http://ftp.gnu.org/gnu/libcdio/libcdio-0.94.tar.gz

  • Download MD5 sum: d8734266a20fbc2605a97b701b838ab6

  • Download size: 2.3 MB

  • Estimated disk space required: 37 MB (both packages, including checks)

  • Estimated build time: 0.4 SBU (both packages, including checks)

Additional Download

libcdio Dependencies

Optional

libcddb-1.3.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libcdio

Installation of libcdio

Install libcdio by running the following commands:

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Now install libcdio-paranoia:

tar -xf ../libcdio-paranoia-10.2+0.93+1.tar.bz2 &&
cd libcdio-paranoia-10.2+0.93+1 &&

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Contents

Installed Programs: cd-drive, cd-info, cd-paranoia, cd-read, cdda-player, iso-info, iso-read, and mmc-tool
Installed Library: libcdio++.so, libcdio.so, libcdio_cdda, libcdio_paranoia, libiso9660++, libiso9660, and libudf
Installed Directories: /usr/include/cdio and /usr/include/cdio++

Short Descriptions

cd-drive

shows CD-ROM drive characteristics

cd-info

shows information about a CD or CD-image

cd-paranoia

is an audio CD reading utility which includes extra data verification features

cd-read

reads Information from a CD or CD-image

cdda-player

is a simple curses CD player

iso-info

shows Information about an ISO 9660 image

iso-read

reads portions of an ISO 9660 image

mmc-tool

issues libcdio multimedia commands

libcdio.so

contains the primary cdio API functions

Last updated on 2017-02-17 16:10:58 -0800

libdiscid-0.6.2

Introduction to libdiscid

The libdiscid package contains a library for creating MusicBrainz DiscIDs from audio CDs. It reads a CD's table of contents (TOC) and generates an identifier which can be used to lookup the CD at MusicBrainz (http://musicbrainz.org). Additionally, it provides a submission URL for adding the DiscID to the database.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdiscid

Installation of libdiscid

Install libdiscid by running the following commands:

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None
Installed Library: libdiscid.so
Installed Directory: /usr/include/discid

Short Descriptions

libdiscid.so

contains the DiscID API functions.

Last updated on 2017-02-17 16:10:58 -0800

libdvdcss-1.4.0

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-8.0 platform.

Package Information

libdvdcss Dependencies

Optional (to Create Documentation)

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdvdcss

Installation of libdvdcss

Install libdvdcss by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libdvdcss-1.4.0 &&
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.0

Short Descriptions

libdvdcss.so

provides the functionality that is required for transparent DVD access with CSS decryption.

Last updated on 2017-02-17 19:16:56 -0800

Libdvdread-5.0.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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdvdread

Installation of Libdvdread

Install libdvdread by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libdvdread-5.0.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-5.0.3

Short Descriptions

libdvdread.so

provides functionality required to access DVDs.

Last updated on 2017-02-17 16:10:58 -0800

Libdvdnav-5.0.3

Introduction to Libdvdnav

libdvdnav is a library that allows easy use of sophisticated DVD navigation features such as DVD menus, multiangle playback and even interactive DVD games.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Libdvdnav Dependencies

Required

libdvdread-5.0.3

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdvdnav

Installation of Libdvdnav

Install libdvdnav by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libdvdnav-5.0.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: libdvdnav.so
Installed Directories: /usr/include/dvdnav and /usr/share/doc/libdvdnav-5.0.3

Short Descriptions

libdvdnav.so

DVD navigation library.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

Libdv Dependencies

Optional

popt-1.16, SDL-1.2.15, and X Window System

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libdv

Installation of Libdv

Install libdv by running the following commands:

./configure --prefix=/usr \
            --disable-xv \
            --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m755 -d      /usr/share/doc/libdv-1.0.0 &&
install -v -m644 README* /usr/share/doc/libdv-1.0.0

Command Explanations

--disable-xv: This parameter is required if an X Window System is not installed. It also prevents configure testing for libXv which is only used for an obsolete program playdv that will not be built with current linux headers and would also need other obsolete dependencies.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: dubdv, dvconnect, and encodedv
Installed Library: libdv.so
Installed Directories: /usr/include/libdv and /usr/share/doc/libdv-1.0.0

Short Descriptions

dubdv

inserts audio into a digital video stream.

dvconnect

is a small utility to send or capture raw data from and to the camcorder.

encodedv

encodes a series of images to a digital video stream.

libdv.so

provides functions for programs interacting with the Quasar DV CODEC.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmad

Installation of libmad

Install libmad by running the following commands:

patch -Np1 -i ../libmad-0.15.1b-fixes-1.patch                &&
sed "s@AM_CONFIG_HEADER@AC_CONFIG_HEADERS@g" -i configure.ac &&
touch NEWS AUTHORS ChangeLog                                 &&
autoreconf -fi                                               &&

./configure --prefix=/usr --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Some packages check for the pkg-config file for libmad. This file is particularly needed so that Cdrdao can recognize the installed libmad.

As the root user:

cat > /usr/lib/pkgconfig/mad.pc << "EOF"
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: mad
Description: MPEG audio decoder
Requires:
Version: 0.15.1b
Libs: -L${libdir} -lmad
Cflags: -I${includedir}
EOF

Command Explanations

touch NEWS AUTHORS ChangeLog: Prevent autoreconf from returning an error.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None
Installed Library: libmad.so
Installed Directories: None

Short Descriptions

libmad.so

is a MPEG audio decoder library.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

libmpeg2 Dependencies

Optional

X Window System and SDL-1.2.15

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmpeg2

Installation of libmpeg2

Install libmpeg2 by running the following commands:

sed -i 's/static const/static/' libmpeg2/idct_mmx.c &&

./configure --prefix=/usr    \
            --enable-shared  \
            --disable-static &&
make

To test the results, issue: make check. To perform a more comprehensive regression test, see the file test/README in the source tree.

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/mpeg2dec-0.5.1 &&
install -v -m644 README doc/libmpeg2.txt \
                    /usr/share/doc/mpeg2dec-0.5.1

Command Explanations

sed -i ...: This sed fixes problems with recent GCC compilers.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: corrupt_mpeg2, extract_mpeg2 and mpeg2dec
Installed Libraries: libmpeg2.so and libmpeg2convert.so
Installed Directories: /usr/include/mpeg2dec and /usr/share/doc/mpeg2dec-0.5.1

Short Descriptions

extract_mpeg2

extracts MPEG video streams from a multiplexed stream.

mpeg2dec

decodes MPEG1 and MPEG2 video streams.

libmpeg2.so

contains API functions used to decode MPEG video streams.

libmpeg2convert.so

contains API functions used for color conversions of MPEG video streams.

Last updated on 2017-02-18 18:01:35 -0800

libmusicbrainz-2.1.5

Introduction to libmusicbrainz

The libmusicbrainz package contains a library which allows you to access the data held on the MusicBrainz server. This is useful for adding MusicBrainz lookup capabilities to other applications.

MusicBrainz is a community music metadatabase that attempts to create a comprehensive music information site. You can use the MusicBrainz data either by browsing the web site, or you can access the data from a client program — for example, a CD player program can use MusicBrainz to identify CDs and provide information about the CD, about the artist or other related information.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

libmusicbrainz Dependencies

Optional to Build the Python Bindings

Python-2.7.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmusicbrainz

Installation of libmusicbrainz

Install libmusicbrainz by running the following commands:

patch -Np1 -i ../libmusicbrainz-2.1.5-missing-includes-1.patch &&

CXXFLAGS=-std=c++98 \
./configure --prefix=/usr --disable-static &&
make

If Python is installed, build the bindings with the following commands:

(cd python && python setup.py build)

This package does not come with a stand-alone test suite (to test you must have Python installed and perform the test after the package is installed).

Now, as the root user:

make install &&
install -v -m644 -D docs/mb_howto.txt \
    /usr/share/doc/libmusicbrainz-2.1.5/mb_howto.txt

To test the Python bindings, issue the following: (cd python && python setup.py test).

If you built the Python bindings, issue the following commands as the root user to install them:

(cd python && python setup.py install)

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None
Installed Library: libmusicbrainz.so
Installed Directories: /usr/include/musicbrainz and /usr/share/doc/libmusicbrainz-2.1.5

Short Descriptions

libmusicbrainz.so

contains API functions to access the MusicBrainz database, both for looking up data and also for submitting new data.

Last updated on 2017-02-18 18:01:35 -0800

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-8.0 platform.

Package Information

libmusicbrainz Dependencies

Required

CMake-3.7.2, libxml2-2.9.4 and neon-0.30.2

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libmusicbrainz5

Installation of libmusicbrainz

Install libmusicbrainz by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr .. &&
make

If you have installed Doxygen-1.8.13, optionally build the API documentation:

doxygen ../Doxyfile

This package does not come with a test suite.

Now, as the root user:

make install

If you have built the API documentation, install, as the root user:

rm -rf /usr/share/doc/libmusicbrainz-5.1.0 &&
cp -vr docs/ /usr/share/doc/libmusicbrainz-5.1.0

Contents

Installed Programs: None
Installed Library: libmusicbrainz5.so
Installed Directory: /usr/include/libmusicbrainz5 and /usr/share/doc/libmusicbrainz-5.1.0

Short Descriptions

libmusicbrainz5.so

contains API functions for accessing the MusicBrainz database.

Last updated on 2017-02-18 18:01:35 -0800

libogg-1.3.2

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libogg

Installation of libogg

Install libogg by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libogg-1.3.2 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None
Installed Library: libogg.so
Installed Directories: /usr/include/ogg and /usr/share/doc/libogg-1.3.2

Short Descriptions

libogg.so

provides the functions required for programs to read or write Ogg formatted bit streams.

Last updated on 2017-02-17 16:10:58 -0800

libquicktime-1.2.4

Introduction to libquicktime

The libquicktime package contains the libquicktime library, various plugins and codecs, along with graphical and command line utilities used for encoding and decoding QuickTime files. This is useful for reading and writing files in the QuickTime format. The goal of the project is to enhance, while providing compatibility with the Quicktime 4 Linux library.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

libquicktime Dependencies

Optional

alsa-lib-1.1.3, Doxygen-1.8.13, FAAC-1.28, FAAD2-2.7, FFmpeg-3.2.4, GTK+-2.24.31, LAME-3.99.5, libdv-1.0.0, libjpeg-turbo-1.5.1, libpng-1.6.28, libvorbis-1.3.5, Schroedinger, x264-20170212-2245, and Xorg Libraries

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libquicktime

Installation of libquicktime

Install libquicktime by running the following commands:

patch -Np1 -i ../libquicktime-1.2.4-ffmpeg3-1.patch &&

./configure --prefix=/usr     \
            --enable-gpl      \
            --without-doxygen \
            --docdir=/usr/share/doc/libquicktime-1.2.4
make

This package does not come with a test suite.

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/libquicktime-1.2.4 &&
install -v -m644    README doc/{*.txt,*.html,mainpage.incl} \
                    /usr/share/doc/libquicktime-1.2.4

Command Explanations

--enable-gpl: Changes the licence to GPL. This enables some extra plugins, such as FAAC, FAAD2, and x264.

--without-doxygen: This is necessary if you do not have Doxygen, omit this if it is installed and you wish the API documentation installed.

--with-libdv: Build with libdv support. Not enabled by default.

Contents

Installed Programs: libquicktime_config, lqtplay, lqtremux, lqt_transcode, qt2text, qtdechunk, qtdump, qtinfo, qtrechunk, qtstreamize, and qtyuv4toyuv
Installed Libraries: libquicktime.so and several plugin codec libraries
Installed Directories: /usr/include/lqt, /usr/lib/libquicktime, and /usr/share/doc/libquicktime-1.2.4

Short Descriptions

libquicktime_config

is a graphical front end to examine and configure the available libquicktime audio and video codecs.

lqtplay

is a simple QuickTime movie player for X Window System.

lqt_transcode

is a command-line program used to encode video and/or audio files from one format to another.

qt2text

is used to dump all text strings from a quicktime file.

qtdechunk

can take movies containing rgb frames and write them out as ppm images.

qtdump

displays the parsed contents of the provided file.

qtinfo

prints various pieces of metadata parsed by the libquicktime library for the provided file

qtrechunk

concatenates input frames into a QuickTime movie.

qtstreamize

is used to make a file streamable by placing the moov header at the beginning of the file.

qtyuv4toyuv

is used to write a YUV4 encoded movie as a planar YUV 4:2:0 file.

libquicktime.so

is a library for reading and writing QuickTime files. It provides convenient access to QuickTime files with a variety of supported codecs. The library contains new functions integrated with all the original QuickTime 4 Linux library functions used to encode and decode QuickTime files.

Last updated on 2017-02-18 18:01:35 -0800

libsamplerate-0.1.9

Introduction to libsamplerate

libsamplerate is a sample rate converter for audio.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

libsamplerate Dependencies

Optional

libsndfile-1.0.27, and libfftw3 (for tests)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsamplerate

Installation of libsamplerate

Install libsamplerate by running the following commands:

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make check.

Now, as the root user:

make htmldocdir=/usr/share/doc/libsamplerate-0.1.9 install

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Program: sndfile-resample
Installed Library: libsamplerate.so
Installed Directory: /usr/share/doc/libsamplerate-0.1.9

Short Descriptions

sndfile-resample

is a sample rate converter using libsndfile for file I/O.

Last updated on 2017-02-17 16:10:58 -0800

libsndfile-1.0.27

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-8.0 platform.

Package Information

libsndfile Dependencies

Optional

alsa-lib-1.1.3, FLAC-1.3.2, libogg-1.3.2, libvorbis-1.3.5 and SQLite-3.17.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libsndfile

Installation of libsndfile

Install libsndfile by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/libsndfile-1.0.27 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: sndfile-cmp, sndfile-concat, sndfile-convert, sndfile-deinterleave, sndfile-info, sndfile-interleave, sndfile-metadata-get, sndfile-metadata-set, sndfile-play, sndfile-regtest and sndfile-salvage
Installed Library: libsndfile.so
Installed Directory: /usr/share/doc/libsndfile-1.0.27

Short Descriptions

sndfile-cmp

compares two audio files.

sndfile-concat

concatenates two or more audio files.

sndfile-convert

converts a sound files from one format to another.

sndfile-deinterleave

splits a multi-channel into multiple single channel files.

sndfile-info

displays information about a sound file.

sndfile-interleave

converts multiple single channel files into a multi-channel file.

sndfile-metadata-get

retrieves metadata from a sound file.

sndfile-metadata-set

sets metadata in a sound file.

sndfile-play

plays a sound file.

libsndfile.so

contains the libsndfile API functions.

Last updated on 2017-02-17 16:10:58 -0800

libtheora-1.1.1

Introduction to libtheora

libtheora is a reference implementation of the Theora video compression format being developed by the Xiph.Org Foundation.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

libtheora Dependencies

Required

libogg-1.3.2

Recommended
Optional

SDL-1.2.15 and libpng-1.6.28 (both to build the example players), Doxygen-1.8.13, texlive-20160523b (or install-tl-unx), BibTex, and Transfig (all four to build the API documentation), and Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Libtheora

Installation of libtheora

Install libtheora by running the following commands:

sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c &&
./configure --prefix=/usr --disable-static &&
make

If you wish to run the tests, issue: make check.

Now, as the root user:

make install

If you wish to install the examples (so that you can hack on theora), install them as the root user:

cd examples/.libs &&
for E in *; do
  install -v -m755 $E /usr/bin/theora_${E}
done

Command Explanations

sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c: This sed fixes build with libpng 1.6.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None, unless you installed the examples
Installed Libraries: libtheora.so, libtheoraenc.so, and libtheoradec.so
Installed Directories: /usr/include/theora and /usr/share/doc/libtheora-1.1.1

Short Descriptions

libtheora*.so

libraries provide the functions to read and write video files.

Last updated on 2017-02-17 16:10:58 -0800

libvorbis-1.3.5

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-8.0 platform.

Package Information

libvorbis Dependencies

Required

libogg-1.3.2

Optional

Doxygen-1.8.13 and texlive-20160523b (or install-tl-unx) (specifically, pdflatex and htlatex) to build the PDF documentation

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Libvorbis

Installation of libvorbis

Optionally fix installation of the package when --enable-docs is added to the configure switches:

sed -i '/components.png \\/{n;d}' doc/Makefile.in

Install libvorbis by running the following commands:

./configure --prefix=/usr --disable-static &&
make

To test the results, issue: make LIBS=-lm check.

Now, as the root user:

make install &&
install -v -m644 doc/Vorbis* /usr/share/doc/libvorbis-1.3.5

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.5

Short Descriptions

libvorbis.so

provides the functions used to read and write sound files.

Last updated on 2017-02-17 16:10:58 -0800

libvpx-1.6.1

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-8.0 platform.

Package Information

libvpx Dependencies

Required

yasm-1.3.0 (compiling with NASM-2.12.02 is currently broken) and Which-2.21 (so configure can find yasm)

Optional

Doxygen-1.8.13 and PHP-7.1.2 (to build the documentation).

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libvpx

Installation of libvpx

Install libvpx by running the following commands:

sed -i 's/cp -p/cp/' build/make/Makefile &&

mkdir libvpx-build            &&
cd    libvpx-build            &&

../configure --prefix=/usr    \
             --enable-shared  \
             --disable-static &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed ... : This command corrects ownership and permissions of installed files.

mkdir libvpx-build && cd libvpx-build: The libvpx developers recommend building in a dedicated build directory.

--disable-vp8: This switch prevents building of VP8 codec support.

--disable-vp9: This switch prevents building of VP9 codec support.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: vpxdec and vpxenc
Installed Libraries: libvpx.so
Installed Directories: /usr/include/vpx

Short Descriptions

vpxdec

is the WebM Project VP8 and VP9 decoder.

vpxenc

is the WebM project VP8 and VP9 encoder.

libvpx.so

provides functions to use the VP8 and VP9 video codecs.

Last updated on 2017-02-17 16:10:58 -0800

MLT-6.4.1

Introduction to MLT

MLT package is the Media Lovin Toolkit. It is an open source multimedia framework, designed and developed for television broadcasting. It provides a toolkit for broadcasters, video editors, media players, transcoders, web streamers and many more types of applications.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

MLT Dependencies

Required

frei0r-plugins-1.5.0 and Qt-5.8.0

Optional

Doxygen-1.8.13, libexif-0.6.21, SDL-1.2.15, FFTW, JACK, MOVEit, SoX, Swfdec, and vid.stab

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mlt

Installation of MLT

Install MLT by running the following commands:

./configure --prefix=/usr            \
            --enable-gpl             \
            --enable-gpl3            \
            --enable-opengl          \
            --disable-gtk2           \
            --qt-libdir=$QT5DIR/lib  \
            --qt-includedir=$QT5DIR/include &&
make

This package does not come with a test suite. However a test .mp4 file can be played in a local graphical environment with ./src/melt/melt <filename>.mp4.

Note

This application uses advanced graphical capabilites. In some cases, firmware for your specific graphics adaptor may be needed. See the section called “Firmware for Video Cards” for more information.

Now, as the root user:

make install

Contents

Installed Program: melt
Installed Libraries: libmlt.so, libmlt++.so, and over twenty plugins
Installed Directories: /usr/include/mlt, /usr/include/mlt++, /usr/lib/mlt, and /usr/share/mlt

Short Descriptions

melt

is a test tool for MLT.

Last updated on 2017-02-19 17:09:49 -0800

Opal-3.10.10

Introduction to Opal

The Opal package contains a C++ class library for normalising the numerous telephony protocols into a single integrated call model.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

Opal Dependencies

Required

Ptlib-2.10.11

Optional

Celt, FFmpeg-3.2.4, GSM, ISDN4Linux, libtheora-1.1.1, OpenJDK-1.8.0.121, Ruby-2.4.0, Spandsp, Speex-1.2rc2, and x264-20170212-2245

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/opal

Installation of Opal

Install Opal by running the following commands:

patch -Np1 -i ../opal-3.10.10-ffmpeg2-1.patch &&

sed -e 's/CODEC_ID/AV_&/' \
    -e 's/PIX_FMT_/AV_&/' \
    -i plugins/video/H.263-1998/h263-1998.cxx \
       plugins/video/common/dyna.cxx          \
       plugins/video/H.264/h264-x264.cxx      \
       plugins/video/MPEG4-ffmpeg/mpeg4.cxx   &&

sed -e '/<< mime.PrintContents/ s/mime/(const std::string\&)&/' \
    -i src/im/msrp.cxx  &&

./configure --prefix=/usr &&
CXXFLAGS=-Wno-deprecated-declarations make

This package does not come with a test suite.

Now, as the root user:

make install &&
chmod -v 644 /usr/lib/libopal_s.a

Command Explanations

sed ...: The first sed fixes several files to work properly with FFmpeg-3.2.4. The second fixes a build issue with GCC-6.3.0.

CXXFLAGS=-Wno-deprecated-declarations: This parameter reduces a lot of warnings generated by GCC-6.3.0.

Contents

Installed Programs: None
Installed Libraries: libopal.so and libopal_s.a
Installed Directories: /usr/include/opal and /usr/lib/opal-3.10.10

Short Descriptions

libopal.so

contains the Opal API functions.

Last updated on 2017-02-18 18:01:35 -0800

Opus-1.1.4

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-8.0 platform.

Package Information

Optional

Doxygen-1.8.13 and texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Opus

Installation of Opus

Install Opus by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/opus-1.1.4 &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: None
Installed Library: libopus.so
Installed Directory: /usr/include/opus and /usr/share/doc/opus-1.1.4

Short Descriptions

libopus.so

provides the functions used to read and write Opus format.

Last updated on 2017-02-17 16:10:58 -0800

PulseAudio-10.0

Introduction to PulseAudio

PulseAudio is a sound system for POSIX OSes, meaning that it is a proxy for sound applications. It allows you to do advanced operations on your sound data as it passes between your application and your hardware. Things like transferring the audio to a different machine, changing the sample format or channel count and mixing several sounds into one are easily achieved using a sound server.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

PulseAudio Dependencies

Required

JSON-C-0.12.1 and libsndfile-1.0.27

Recommended
Optional

Avahi-0.6.32, BlueZ-5.43 (runtime), Check-0.11.0, ConsoleKit2-1.0.2 (runtime), GConf-3.2.6, GTK+-3.22.8, libsamplerate-0.1.9, SBC-1.3 (Bluetooth support), Valgrind-3.12.0, FFTW, JACK, libasyncns, LIRC, ORC, TDB, WebRTC AudioProcessing and XEN

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pulseaudio

Installation of PulseAudio

Install PulseAudio by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --disable-bluez4     \
            --disable-rpath      &&
make

To test the results, issue: make check.

Now, as the root user:

make install

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 /etc/dbus-1/system.d/pulseaudio-system.conf

Command Explanations

--disable-bluez4: This switch disables support for BlueZ version 4 in favour of BlueZ version 5 since the latter also installs compatibility library for the earlier version.

--disable-rpath: This switch prevents linker from adding a hardcoded runtime path to the installed programs and libraries.

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

The default configuration files allow setting up a working installation. However, a reference to Console-Kit needs to be removed if it is not installed. For example, issue the following command as the root user:

sed -i '/load-module module-console-kit/s/^/#/' /etc/pulse/default.pa

You may also 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.

Contents

Installed Programs: esdcompat, pacat, pacmd, pactl, padsp, pamon (symlink to pacat), paplay (symlink to pacat), parec (symlink to pacat), parecord (symlink to pacat), pasuspender, pax11publish, pulseaudio, and start-pulseaudio-x11
Installed Libraries: libpulse-mainloop-glib.so, libpulse-simple.so and libpulse.so
Installed Directories: /etc/pulse, /usr/include/pulse, /usr/lib/cmake/PulseAudio, /usr/lib/{pulseaudio,pulse-10.0}, /usr/libexec/pulse, and /usr/share/pulseaudio

Short Descriptions

esdcompat

is the PulseAudio ESD wrapper script.

pacat

plays back or records raw or encoded audio streams on a PulseAudio sound server.

pacmd

is a tool used to reconfigure a PulseAudio sound server during runtime.

pactl

is used to control a running PulseAudio sound server.

padsp

is the PulseAudio OSS Wrapper.

pamon

is a symbolic link to pacat.

paplay

is used to play audio files on a PulseAudio sound server.

parec

is a symbolic link to pacat.

parecord

is a symbolic link to pacat.

pasuspender

is a tool that can be used to tell a local PulseAudio sound server to temporarily suspend access to the audio devices, to allow other applications to access them directly.

pax11publish

is the PulseAudio X11 Credential Utility.

pulseaudio

is a networked low-latency sound server for Linux.

start-pulseaudio-x11

starts PulseAudio and registers it to the X11 session manager.

Last updated on 2017-02-17 16:10:58 -0800

SBC-1.3

Introduction to SBC

The SBC is a digital audio encoder and decoder used to transfer data to Bluetooth audio output devices like headphones or loudspeakers.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

SBC Dependencies

Optional

libsndfile-1.0.27

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sbc

Installation of SBC

Install SBC by running the following commands:

./configure --prefix=/usr --disable-static --disable-tester &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-tester: This disables the SBC tester. Remove it if you have installed libsndfile-1.0.27.

--disable-static: This switch prevents installation of static versions of the libraries.

Contents

Installed Programs: sbcdec, sbcenc, and sbcinfo
Installed Library: libsbc.so
Installed Directory: /usr/include/sbc

Short Descriptions

sbcdec

is a SBC decoder utility.

sbcenc

is a SBC encoder utility.

sbcinfo

is a subband codec (SBC) analyzer.

libsbc.so

contains the SBC API functions.

Last updated on 2017-02-17 16:10:58 -0800

SDL-1.2.15

Introduction to SDL

The Simple DirectMedia Layer (SDL for short) is a cross-platform library designed to make it easy to write multimedia software, such as games and emulators.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

SDL Dependencies

Optional

AAlib-1.4rc5, ALSA-1.1.3, GLU-9.0.0, NASM-2.12.02, PulseAudio-10.0, Pth-2.0.7, X Window System, DirectFB, GGI, libcaca, PicoGUI, and SVGAlib

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sdl

Installation of SDL

Install SDL by running the following commands:

sed -e '/_XData32/s:register long:register _Xconst long:' \
    -i src/video/x11/SDL_x11sym.h &&

./configure --prefix=/usr --disable-static &&

make

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/SDL-1.2.15/html &&
install -v -m644    docs/html/*.html \
                    /usr/share/doc/SDL-1.2.15/html

Testing SDL

If you wish to, test the installation of SDL using the included test programs. It is not required to install any of the resulting binaries to validate the installation. Issue the following commands to build the test programs:

cd test &&
./configure &&
make

You'll need to manually run all the test programs (they are listed in the README file in this directory). Many of them will need to be manually killed, and you'll need to turn your speakers on with the volume at a suitable level.

Command Explanations

sed -e ...: This command fixes compilation with libX11-1.6.0

--disable-static: This switch prevents installation of static versions of the libraries.

--disable-alsa-shared: This switch disables dynamically loading ALSA shared libraries.

--disable-sdl-dlopen: This switch disables using dlopen for shared object loading. Loading image backend libraries like libpng dynamically on the fly does not work.

--disable-x11-shared: This switch disables dynamically loading X11 shared libraries.

Configuring SDL

Configuration Information

As with most libraries, there is no configuration to do, save that the library directory, i.e., /opt/lib or /usr/local/lib should appear in /etc/ld.so.conf so that ldd can find the shared libraries. After checking that this is the case, /sbin/ldconfig should be run while logged in as root.

Contents

Installed Program: sdl-config
Installed Libraries: libSDL.so and libSDLmain.a
Installed Directories: /usr/include/SDL and /usr/share/doc/SDL-1.2.15

Short Descriptions

sdl-config

determines the compile and linker flags that should be used to compile and link programs that use libSDL.

libSDL.so

library provides low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D frame buffer across multiple platforms.

Last updated on 2017-02-17 16:10:58 -0800

SDL2-2.0.5

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-8.0 platform.

Package Information

SDL2 Dependencies

Optional

ALSA-1.1.3, Doxygen-1.8.13 (to create documentation), ibus , NASM-2.12.02, PulseAudio-10.0, X Window System, DirectFB, and fcitx

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sdl

Installation of SDL2

Install SDL2 by running the following commands:

./configure --prefix=/usr &&
make

If you have Doxygen-1.8.13 installed and want to build the html documentation, run the following commands:

pushd docs  &&
  doxygen   &&
popd

Note

If you wish to build and run the package regression tests, do not delete the static libraries below until after the tests are built.

Now, as the root user:

make install              &&
rm -v /usr/lib/libSDL2*.a

If you built the documentation, install it as the root user:

install -v -m755 -d        /usr/share/doc/SDL2-2.0.5/html &&
cp -Rv  docs/output/html/* /usr/share/doc/SDL2-2.0.5/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 nead 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 disbled with a --disable-static option to configure, but that breaks the build in this package.

--disable-alsa-shared: This switch disables dynamically loading ALSA shared libraries.

--disable-sdl-dlopen: This switch disables using dlopen for shared object loading. Loading image backend libraries like libpng dynamically on the fly does not work.

--disable-x11-shared: This switch disables dynamically loading X11 shared libraries.

Configuring SDL

Configuration Information

As with most libraries, there is no configuration to do, save that the library directory, i.e., /opt/lib or /usr/local/lib should appear in /etc/ld.so.conf so that ldd can find the shared libraries. After checking that this is the case, /sbin/ldconfig should be run while logged in as root.

Contents

Installed Program: sdl2-config
Installed Libraries: libSDL2.so
Installed Directories: /usr/include/SDL2 and /usr/share/doc/SDL-2.0.5

Short Descriptions

sdl2-config

determines the compile and linker flags that should be used to compile and link programs that use libSDL2.

libSDL2.so

library provides low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D frame buffer across multiple platforms.

Last updated on 2017-02-18 18:01:35 -0800

SoundTouch-1.9.2

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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/soundtouch

Installation of SoundTouch

Install SoundTouch by running the following commands:

./bootstrap &&
./configure --prefix=/usr \
            --docdir=/usr/share/doc/soundtouch-1.9.2 &&
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 parallel in several CPU cores, in systems with multicore processors.

Contents

Installed Program: soundstretch
Installed Library: libSoundTouch.so
Installed Directories: /usr/include/soundtouch and /usr/share/doc/soundtouch-1.9.2

Short Descriptions

soundstretch

is a program for processing WAV audio files by modifying sound tempo, pitch and playback rate properties independently from each other.

libSoundTouch.so

contains SoundTouch API functions.

Last updated on 2017-02-18 18:01:35 -0800

Speex-1.2rc2

Introduction to Speex

Speex is an audio compression format designed especially for speech. It is well-adapted to internet applications and provides useful features that are not present in most other CODECs.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Package Information

Speex Dependencies

Required

libogg-1.3.2

Optional

Valgrind-3.12.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/speex

Installation of Speex

This package consists of two separate tarballs. They need to be extracted and built independently.

Install Speex by running the following commands:

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/speex-1.2rc2 &&
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.2rc3.tar.gz &&
cd speexdsp-1.2rc3             &&

./configure --prefix=/usr    \
            --disable-static \
            --docdir=/usr/share/doc/speexdsp-1.2rc3 &&
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: speexdec and speexenc
Installed Libraries: libspeex.so and libspeexdsp.so
Installed Directories: /usr/share/doc/speex-1.2rc2 and /usr/share/doc/speexdsp-1.2rc3

Short Descriptions

speexdec

decodes a Speex file and produces a WAV or raw file.

speexenc

encodes a WAV or raw files using Speex.

libspeex.so

provides functions for the audio encoding/decoding programs.

libspeexdsp.so

is a speech processing library that goes along with the Speex codec.

Last updated on 2017-02-17 16:10:58 -0800

Taglib-1.11.1

Introduction to Taglib

Taglib is a library used for reading, writing and manipulating audio file tags and is used by applications such as Amarok and VLC.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Taglib Dependencies

Required

CMake-3.7.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/taglib

Installation of Taglib

Install Taglib by running the following commands:

mkdir build &&
cd    build &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DCMAKE_BUILD_TYPE=Release  \
      -DBUILD_SHARED_LIBS=ON \
      .. &&
make

Now, as the root user:

make install

Contents

Installed Programs: taglib-config
Installed Libraries: libtag.so and libtag_c.so
Installed Directories: /usr/include/taglib

Short Descriptions

taglib-config

is a tool used to print information about the taglib installation.

Last updated on 2017-02-17 16:10:58 -0800

v4l-utils-1.12.3

Introduction to v4l-utils

v4l-utils provides a series of utilities for media devices, allowing to handle the proprietary formats available at most webcams (libv4l), and providing tools to test V4L devices.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

v4l-utils Dependencies

Required

GLU-9.0.0, libjpeg-turbo-1.5.1, and Mesa-13.0.4

Recommended
Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/v4l-utils

Installation of v4l-utils

Install v4l-utils by running the following commands:

./configure --prefix=/usr     \
            --sysconfdir=/etc \
            --disable-static  &&
make

This package does not come with a testsuite.

Now, as the root user:

make install

Contents

Installed Programs: cec-compliance, cec-ctl, cec-follower, cx18-ctl, decode_tm6000, dvb-fe-tool, dvb-format-convert, dvbv5-daemon, dvbv5-scan, dvbv5-zap, ir-ctl, ir-keytable, ivtv-ctl, media-ctl, qv4l2, rds-ctl, v4l2-compliance, v4l2-ctl, v4l2-dbg, and v4l2-sysfs-path
Installed Library: libdvbv5.so, libv4l1.so, libv4l2.so, libv4l2rds.so, libv4lconvert.so, v4l1compat.so, and v4l2convert.so
Installed Directories: /etc/rc_keymaps, /lib/udev/rc_keymaps, /usr/include/libdvbv5, and /usr/lib/libv4l

Short Descriptions

cx18-ctl

is a tool to handle cx18 based devices.

decode_tm6000

decodes multiplexed formats from TM5600/TM6000 USB devices.

dvb-fe-tool

is a command line tool for digital TV services.

dvb-format-convert

is a tool meant to convert among different file formats. It is compliant with version 5 of the DVB API.

dvbv5-scan

is a command line frequency scanning tool for digital TV services that are compliant with version 5 of the DVB API.

dvbv5-zap

is a command line tuning tool for digital TV services that is compliant with version 5 of the DVB API.

ir-keytable

is a tool that lists the Remote Controller devices, allows one to get/set IR keycode/scancode tables, test events generated by IR, and to adjust other Remote Controller options.

ivtv-ctl

is a utility that can control many card settings, like changing the inputs from tuner to svideo or composite, setting video resolution or changing video mode (PAL, SECAM, NTSC).

media-ctl

is a utility used to configure V4L2 devices.

qv4l2

is used to test video4linux capture devices.

rds-ctl

is a utility for decoding raw RDS data from V4L2 Radio devices and offers simple ways to access the received RDS information.

v4l2-compliance

is a compliance test tool.

v4l2-ctl

is a tool to control v4l2 controls from the cmdline.

v4l2-dbg

is a tool to directly get and set registers of v4l2 devices.

v4l2-sysfs-path

checks the media devices installed on a machine and the corresponding device nodes.

Last updated on 2017-02-18 17:47:03 -0800

x264-20170212-2245

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-8.0 platform.

Package Information

x264 Dependencies

Recommended
Optional

ffms2, gpac or liblsmash

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/x264

Installation of x264

Install x264 by running the following commands:

./configure --prefix=/usr \
            --enable-shared \
            --disable-cli &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--disable-cli: This switch disables building the command-line encoder which is redundant since it requires FFmpeg for most of the input formats.

--disable-asm: Use this switch if you didn't install yasm.

Contents

Installed Programs: None
Installed Library: libx264.so
Installed Directory: None

Short Descriptions

libx264.so

provides the functions used to encode video streams into the H.264/MPEG-4 AVC format.

Last updated on 2017-02-17 16:10:58 -0800

x265-2.3

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-8.0 platform.

Package Information

Additional Downloads

x265 Dependencies

Required

CMake-3.7.2

Recommended
Optional

numactl

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/x265

Installation of x265

Install x265 by running the following commands:

patch -Np1 -i ../x265_2.3-enable_static-1.patch &&

mkdir bld &&
cd    bld &&

cmake -DCMAKE_INSTALL_PREFIX=/usr \
      -DENABLE_STATIC=OFF         \
      ../source                   &&

make

This package does not come with a test suite.

Now, as the root user:

make install

Contents

Installed Program: x265
Installed Library: libx265.so
Installed Directories: None

Short Descriptions

libx265.so

provides the functions used to encode video streams into the H.265/HEVC format.

Last updated on 2017-02-17 16:10:58 -0800

xine-lib-1.2.6

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-8.0 platform.

Package Information

Xine Libraries Dependencies

Required

X Window System, FFmpeg-3.2.4, and at least one of: ALSA-1.1.3, PulseAudio-10.0 or JACK

Recommended
Optional

AAlib-1.4rc5, FAAD2-2.7, FLAC-1.3.2, gdk-pixbuf-2.36.5, GLU-9.0.0, ImageMagick-7.0.4-8, liba52-0.7.4, libmad-0.15.1b, libmng-2.0.3, libtheora-1.1.1, libva-1.7.3, libvdpau-1.1.1, libvorbis-1.3.5, libvpx-1.6.1, Mesa-13.0.4, Samba-4.5.5, SDL-1.2.15, Speex-1.2rc2, Doxygen-1.8.13 (to create the API documentation), v4l-utils-1.12.3 DirectFB, libbluray, libcaca, libdca, libFAME, libmodplug, musepack, VCDImager, and WavPack,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xine-lib

Installation of Xine Libraries

Install Xine Libraries by running the following commands:

sed -e 's/avcodec_alloc_frame/av_frame_alloc/'        \
    -e 's/avcodec_free_frame/av_frame_free/'          \
    -i src/combined/ffmpeg/ff_{audio,video}_decoder.c \
       src/dxr3/ffmpeg_encoder.c &&

sed -e 's|wand/magick_wand.h|MagickWand/MagickWand.h|' \
    -i src/video_dec/image.c &&

sed -e '/xineplug_vo_out_xcbxv_la_LIBADD/s/$(XCB_LIBS)/$(XCBSHM_LIBS) $(XCB_LIBS)/' \
    -i src/video_out/Makefile.in &&

sed -e 's/\(xcb-shape >= 1.0\)/xcb \1/' \
    -i m4/video_out.m4 &&

./configure --prefix=/usr          \
            --disable-vcd          \
            --with-external-dvdnav \
            --docdir=/usr/share/doc/xine-lib-1.2.6 &&
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.6/api &&
install -v -m644    doc/api/* \
                    /usr/share/doc/xine-lib-1.2.6/api

Command Explanations

sed ...: These commands enable the package to be built with FFmpeg-3.2.4, ImageMagick-7.0.4-8 and libxcb-1.12.

--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.6: This switch causes the documentation to be installed into a versioned directory instead of the default /usr/share/doc/xine-lib.

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.5
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.6

Short Descriptions

xine-config

provides information to programs trying to link with the xine libraries.

xine-list-1.2

is used to get supported filetype information from xine-lib.

libxine.so

provides the API for processing audio/video files.

Last updated on 2017-02-17 19:16:56 -0800

XviD-1.3.3

Introduction to XviD

XviD is an MPEG-4 compliant video CODEC.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

XviD Dependencies

Optional

yasm-1.3.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xvid

Installation of XviD

Note

This package tarball expands to xvidcore, not the expected xvidcore-1.3.3.

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.3/examples &&
install -v -m644 ../../doc/* /usr/share/doc/xvidcore-1.3.3 &&
install -v -m644 ../../examples/* \
    /usr/share/doc/xvidcore-1.3.3/examples

Command Explanations

sed -i 's/^LN_S=@LN_S@/& -f -v/' platform.inc.in: Fix error during make install if reintalling or upgrading.

sed -i '/libdir.*STATIC_LIB/ s/^/#/' Makefile: This command disables installing the static library.

Contents

Installed Programs: None
Installed Library: libxvidcore.so
Installed Directory: /usr/share/doc/xvidcore-1.3.3

Short Descriptions

libxvidcore.so

provides functions to encode and decode most MPEG-4 video data.

Last updated on 2017-02-18 18:01:35 -0800

Chapter 45. 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.

mpg123-1.23.8

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-8.0 platform.

Package Information

mpg123 Dependencies

Recommended
Optional

PulseAudio-10.0, SDL-1.2.15, JACK, OpenAL and PortAudio

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mpg123

Installation of mpg123

Install mpg123 by running the following commands:

./configure --prefix=/usr --with-module-suffix=.so &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--with-module-suffix=.so: This switch tells mpg123 to load modules with .so extension which is useful if you don't want to keep .la files.

Contents

Installed Programs: mpg123, mpg123-id3dump, mpg123-strip, and out123
Installed Libraries: libmpg123.so and libout123.so
Installed Directory: /usr/lib/mpg123

Short Descriptions

mpg123

is used for playing MP3 files via the console.

mpg123-id3dump

Tool to dump ID3 meta data from MPEG audio files using libmpg123

mpg123-strip

Extract only MPEG frames from a stream using libmpg123 (stdin to stdout)

out123

play raw PCM audio to an output device

libmpg123.so

contains the mpg123 API functions.

libout123.so

contains the out123 API functions.

Last updated on 2017-02-17 16:10:58 -0800

vorbis-tools-1.4.0

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-8.0 platform.

Package Information

Vorbis Tools Dependencies

Required

libvorbis-1.3.5

Optional (required to build the ogg123 program)

libao-1.2.0

Optional

cURL-7.52.1, FLAC-1.3.2, libkate, and Speex-1.2rc2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vorbistools

Installation of Vorbis Tools

Install Vorbis Tools by running the following commands:

./configure --prefix=/usr \
            --enable-vcut \
            --without-curl &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

--enable-vcut: This parameter is used so that the vcut program is built as it is not by default.

--without-curl: This parameter disables HTTP streaming in ogg123. Remove this parameter if you have cURL installed.

Configuring Vorbis Tools

Config Files

/etc/libao.conf, ~/.libao and ~/.ogg123rc

Configuration Information

Issue man libao.conf for information about setting the default output device. Also see /usr/share/doc/vorbis-tools-1.4.0/ogg123rc-example .

Contents

Installed Programs: ogg123, oggdec, oggenc, ogginfo, vcut and vorbiscomment
Installed Libraries: None
Installed Directory: /usr/share/doc/vorbis-tools-1.4.0

Short Descriptions

ogg123

is a command-line audio player for Ogg Vorbis streams.

oggdec

is a simple decoder which converts Ogg Vorbis files into PCM audio files (WAV or raw).

oggenc

is an encoder that turns raw, WAV or AIFF files into an Ogg Vorbis stream.

ogginfo

prints information stored in an audio file.

vcut

splits a file into two files at a designated cut point.

vorbiscomment

is an editor that changes information in the audio file metadata tags.

Last updated on 2017-02-18 18:01:35 -0800

LAME-3.99.5

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-8.0 platform.

Package Information

LAME Dependencies

Optional

Dmalloc, Electric Fence, libsndfile-1.0.27 and NASM-2.12.02

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/lame

Installation of LAME

First, fix a compiler error introduced by gcc-4.9.0 on 32-bit machines:

case $(uname -m) in
   i?86) sed -i -e '/xmmintrin\.h/d' configure ;;
esac

Install LAME by running the following commands:

./configure --prefix=/usr --enable-mp3rtp --disable-static &&
make

To test the results, issue: make test.

Now, as the root user:

make pkghtmldir=/usr/share/doc/lame-3.99.5 install

Command Explanations

sed -i -e '/xmmintrin\.h/d' configure : with gcc-4.9.0 and above, the compiler issues an error on 32-bit machines, while compiling xmm_quantize_sub.c. The error message is: error: inlining failed in call to always_inline '_mm_loadu_ps'. This sed makes it appear as if xmmintrin.h is not present. Do not use this on other versions of gcc.

--enable-mp3rtp: This switch enables building the encode-to-RTP program.

--disable-static: This switch prevents installation of static versions of the libraries.

--enable-nasm: Enable the use of NASM-2.12.02 to compile optimized assembly routines.

Contents

Installed Programs: lame and mp3rtp
Installed Library: libmp3lame.so
Installed Directories: /usr/include/lame and /usr/share/doc/lame-3.99.5

Short Descriptions

lame

creates MP3 audio files from raw PCM or .wav data.

mp3rtp

is used to encode MP3 with RTP streaming of the output.

libmp3lame.so

libraries provide the functions necessary to convert raw PCM and WAV files to MP3 files.

Last updated on 2017-02-17 16:10:58 -0800

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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://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

Configuring CDParanoia

Configuration Information

As with most libraries, there is no configuration to do, save that the library directory, i.e., /opt/lib or /usr/local/lib should appear in /etc/ld.so.conf so that ldd can find the shared libraries. After checking that this is the case, /sbin/ldconfig should be run while logged in as root.

Contents

Installed Program: cdparanoia
Installed Libraries: libcdda_interface.{so,a} and libcdda_paranoia.{so,a}
Installed Directories: None

Short Descriptions

cdparanoia

is used for 'ripping' an audio-cd. Ripping is the process of digitally extracting music from an audio CD.

libcdda_interface.{so,a}

contains functions used by cdparanoia, as well as other packages, which can automatically identify if a CD device is CDDA compatible.

libcdda_paranoia.{so,a}

contains functions used by cdparanoia, as well as other packages, which provide data verification, synchronization, error handling and scratch reconstruction capability.

Last updated on 2017-02-17 16:10:58 -0800

FreeTTS-1.2.2

Introduction to FreeTTS

The FreeTTS package contains a speech synthesis system written entirely in the Java programming language. It is based upon Flite: a small run-time speech synthesis engine developed at Carnegie Mellon University. Flite is derived from the Festival Speech Synthesis System from the University of Edinburgh and the FestVox project from Carnegie Mellon University. The FreeTTS package is used to convert text to audible speech through the system audio hardware.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

FreeTTS Dependencies

Required

apache-ant-1.10.1 and Sharutils-4.15.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/freetts

Installation of FreeTTS

The FreeTTS package is distributed in ZIP format and the unzip command will default to creating an unused source directory. Additionally, unzipping the test suite file will prompt for questions about overwriting existing files. Use the following commands to unzip the source files:

unzip -q freetts-1.2.2-src.zip -x META-INF/* &&
unzip -q freetts-1.2.2-tst.zip -x META-INF/*

Tip

The sh jsapi.sh command below installs the Java Speech API components into the FreeTTS source tree. You will be required to view, and then accept (by entering a y keypress), a license agreement before the installation will continue. If you are scripting (automating) the build, you'll need to account for this. There is information about automating build commands in the Automated Building Procedures section of Chapter 2. Towards the end of this section, specific information for automating this type of installation is discussed.

Install FreeTTS by running the following commands:

sed -i 's/value="src/value="./' build.xml &&
cd lib      &&
sh jsapi.sh &&
cd ..       &&
ant

To test the results, issue:

ant junit &&
cd tests &&
sh regression.sh &&
cd ..

Now, as the root user:

install -v -m755 -d /opt/freetts-1.2.2/{lib,docs/{audio,images}} &&
install -v -m644 lib/*.jar /opt/freetts-1.2.2/lib                &&
install -v -m644 *.txt RELEASE_NOTES docs/*.{pdf,html,txt,sx{w,d}} \
                               /opt/freetts-1.2.2/docs           &&
install -v -m644 docs/audio/*  /opt/freetts-1.2.2/docs/audio     &&
install -v -m644 docs/images/* /opt/freetts-1.2.2/docs/images    &&
cp -v -R javadoc               /opt/freetts-1.2.2                &&
ln -v -s freetts-1.2.2 /opt/freetts

Optionally, install any or all of the additional FreeTTS components using the following commands as the root user (see the Command Explanations section for details):

cp -v -R bin    /opt/freetts-1.2.2        &&
install -v -m644 speech.properties $JAVA_HOME/jre/lib &&
cp -v -R tools  /opt/freetts-1.2.2        &&
cp -v -R mbrola /opt/freetts-1.2.2        &&
cp -v -R demo   /opt/freetts-1.2.2

Command Explanations

sed -i 's/value="src/value="./' build.xml: Fix an error in the build file to allow the program to find the source.

sh jsapi.sh: This command installs the Java Speech API components into the FreeTTS source tree.

ant: FreeTTS uses the Apache Ant build system instead of the GNU autotools. This commands builds everything, including the class libraries, tools and demos.

cp -v -R bin ...; install -v -m644 speech.properties: These two commands install the demonstration programs. Optionally copy the speech.properties file to ~/speech.properties if you don't want to make it available system-wide.

cp -v -R tools ...: This installs the voice data import utilities. See the README.html files in the tools/ subdirectories for information and instructions about using the tools.

cp -v -R mbrola ...: This installs the mbrola.jar file, required if you use the MBROLA voices.

cp -v -R demo ...: This installs the sources and documentation for the demonstration programs.

For additional information and documentation about the FreeTTS project, visit the main web page at http://freetts.sourceforge.net.

Testing the Installation

Test the installation using the following command:

java -jar /opt/freetts/lib/freetts.jar \
     -text "This is a test of the FreeTTS speech synthesis system"

Depending on the setup of your audio drivers and software, you may have to add the -streaming switch to the command as shown below:

java -jar /opt/freetts/lib/freetts.jar -streaming \
     -text "This is a test of the FreeTTS speech synthesis system"

Contents

Installed Programs: None
Installed Libraries: /opt/freetts-1.2.2/lib/*.jar
Installed Directory: /opt/freetts-1.2.2

Short Descriptions

*.jar

contains the class libraries which make up the FreeTTS speech synthesis system.

Last updated on 2017-02-21 14:52:57 -0800

Audacious-3.8.2

Introduction to Audacious

Audacious is an audio player.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

Required Plugins

Audacious Dependencies

Required

GTK+-2.24.31 or Qt-5.8.0 (or both), libxml2-2.9.4 (plugins), Xorg build environment (plugins), and X Window System (runtime)

Recommended

ALSA-1.1.3 and dbus-1.10.14, also gnome-icon-theme-3.12.0 (runtime)

Optional

PCRE-8.40 or Oniguruma, and Valgrind-3.12.0

Recommended (for Plugins)
Optional (for Plugins)

cURL-7.52.1, FAAD2-2.7, FFmpeg-3.2.4, FLAC-1.3.2, LAME-3.99.5, libcdio-0.94 (to identify and play CDs), libnotify-0.7.7, libsamplerate-0.1.9, libsndfile-1.0.27, libvorbis-1.3.5, neon-0.30.2 (for online mpg3 and ogg radio), PulseAudio-10.0, SDL-1.2.15, The Bauer stereophonic-to-binaural DSP (bs2b) library, FluidSynth, JACK (requires libsamplerate-0.1.9), libcue, libmodplug, libmms, LIRC, and WavPack

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/audacious

Installation of Audacious

Install Audacious by running the following commands (you may wish to change the stamp to another string):

TPUT=/bin/true ./configure --prefix=/usr \
                           --with-buildstamp="BLFS" &&
make

This package does not come with a test suite, but you can run, before installing, test src/balsa. You will see a lot of debugging messages scrolling in the console. This is actually useful because they can be used to track down a bug.

Now, as the root user:

make install

Installation of Audacious Plugins

Install the required plugins package by unpacking the tarball, changing into the newly created directory, and issuing the following commands:

TPUT=/bin/true ./configure --prefix=/usr --disable-wavpack &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Command Explanations

TPUT=/bin/true: the default is for make to output text in color. This is fine if you are building in a terminal, but if you script the build process and pipe the output from make to a log file then the control characters used to color the text can make the logfile unreadable. This option stops it coloring the text.

--with-buildstamp: This switch appends the given text to the version string.

--disable-wavpack: This switch is required unless the optional WavPack package is installed.

--disable-gtk: Use this to disable GTK+ support.

--disable-mp3: Use this for the plugins if you have not installed mpg123 and do not wish to play mp3 files.

--enable-qt: Use this to enable Qt support.

--enable-valgrind: Allow better Valgrind leak checks.

Configuring Audacious

If you prefer the old, smaller Winamp/XMMS interface, click on View> Interface> Winamp Classic Interface.

If you built with both Gtk and Qt user interfaces, the Qt version can be executed from a terminal, issuing audacious --qt. If you wish a desktop menu entry to execute this Qt version, issue the following commands as the root user:

cp -v /usr/share/applications/audacious{,-qt}.desktop &&

sed -e '/^Name/ s/$/ Qt/' \
    -e '/Exec=/ s/audacious/& --qt/' \
    -i /usr/share/applications/audacious-qt.desktop

Contents

Installed Programs: audacious and audtool
Installed Libraries: libaudcore.so, libaudgui.so, libaudqt.so, libaudtag.so, and several plugin libraries under /usr/lib/audacious/ sub-directories
Installed Directories: /usr/include/{audacious,libaudcore,libaudgui,libaudqt}, /usr/lib/audacious and /usr/share/audacious

Short Descriptions

audacious

is a GTK+2 port of XMMS based on the Beep Media Player.

audtool

is a small tool to modify the behavior of a running audacious instance.

Last updated on 2017-02-23 01:01:15 -0800

pnmixer-0.5.1

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-8.0 platform.

Package Information

Pnmixer Dependencies

Required

alsa-utils-1.1.3 and GTK+-2.24.31

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pnmixer

Installation of Pnmixer

Install Pnmixer by running the following commands:

./autogen.sh --prefix=/usr &&
make

This package does not have a testsuite.

Now, as the root user:

make install

Contents

Installed Program: pnmixer
Installed Libraries: None
Installed Directories: /usr/share/pnmixer

Short Descriptions

pnmixer

is a lightweight volume control that sits in a tray.

Last updated on 2017-02-17 19:16:56 -0800

Chapter 46. 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-3.2.4

Introduction to FFmpeg

FFmpeg is a solution to record, convert and stream audio and video. It is a very fast video and audio converter and it can also acquire from a live audio/video source. Designed to be intuitive, the command-line interface (ffmpeg) tries to figure out all the parameters, when possible. FFmpeg can also convert from any sample rate to any other, and resize video on the fly with a high quality polyphase filter. FFmpeg can use a Video4Linux compatible video source and any Open Sound System audio source.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

  • Download (HTTP): http://ffmpeg.org/releases/ffmpeg-3.2.4.tar.xz

  • Download MD5 sum: 39fd71024ac76ba35f04397021af5606

  • Download size: 7.7 MB

  • Estimated disk space required: 145 MB (add 2.9 GB for the FATE suite/tests and 1.0 GB for the documentation)

  • Estimated build time: 4.5 SBU (add 0.6 SBU for docs and 4.0 SBU to run the FATE suite after sample files are downloaded)

FFmpeg Dependencies

Recommended
Recommended for desktop use
Optional

Fontconfig-2.12.1, frei0r-plugins-1.5.0, libcdio-0.94 (to identify and play CDs), libwebp-0.6.0, opencv-3.2.0, OpenJPEG-1.5.2, OpenSSL-1.0.2k or GnuTLS-3.5.9, PulseAudio-10.0, Speex-1.2rc2, texlive-20160523b (or install-tl-unx) for PDF and PS documentation, v4l-utils-1.12.3, XviD-1.3.3, X Window System, Flite, GSM, HEVC/H.265, libaacplus, libbluray, libcaca, libcelt, libdc1394, libdca, libiec61883, libilbc, libmodplug, libnut (Git checkout), librtmp, libssh, OpenAL, OpenCore AMR, Schroedinger, TwoLAME, vo-aaenc, vo-amrwbenc, and ZVBI

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/ffmpeg

Installation of FFmpeg

Install FFmpeg by running the following commands:

sed -i 's/-lflite"/-lflite -lasound"/' configure &&

./configure --prefix=/usr        \
            --enable-gpl         \
            --enable-version3    \
            --enable-nonfree     \
            --disable-static     \
            --enable-shared      \
            --disable-debug      \
            --enable-libass      \
            --enable-libfdk-aac  \
            --enable-libfreetype \
            --enable-libmp3lame  \
            --enable-libopus     \
            --enable-libtheora   \
            --enable-libvorbis   \
            --enable-libvpx      \
            --enable-libx264     \
            --enable-libx265     \
            --enable-x11grab     \
            --docdir=/usr/share/doc/ffmpeg-3.2.4 &&

make &&

gcc tools/qt-faststart.c -o tools/qt-faststart

HTML documentation was built in the previous step. If you have texlive-20160523b 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.8.13 installed and wish to create the API documentation (takes about 500 MB space), issue the command 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 -m644    doc/*.txt /usr/share/doc/ffmpeg-3.2.4

If PDF and Postscript documentations were built, issue the following commands, as the root user, to install them:

install -v -m644 doc/*.pdf /usr/share/doc/ffmpeg-3.2.4 &&
install -v -m644 doc/*.ps  /usr/share/doc/ffmpeg-3.2.4

If you used doxygen to create the API documentation, install it (another 500 MB of space) by issuing the following commands as the root user:

install -v -m755 -d /usr/share/doc/ffmpeg-3.2.4/api                     &&
cp -vr doc/doxy/html/* /usr/share/doc/ffmpeg-3.2.4/api                  &&
find /usr/share/doc/ffmpeg-3.2.4/api -type f -exec chmod -c 0644 \{} \; &&
find /usr/share/doc/ffmpeg-3.2.4/api -type d -exec chmod -c 0755 \{} \;

To properly test the installation you must have rsync-3.1.2 installed and follow the instructions for the FFmpeg Automated Testing Environment (FATE). First, about 1 GB of sample files used to run FATE are downloaded with the command:

make fate-rsync SAMPLES=fate-suite/

The fate-suite directory is created and the files are downloaded there. That command actually runs an rsync command, to obtain the sample files. You may want to compress and keep this directory for testing again, in another system, or when a new version of ffmpeg is launched. Then, you unpack the sample files in the source directory, and run, again, the make fate-rsync ... command above, to sync with the repository. Now, the download size and time are drastically reduced. Estimated values in "Package Information" do not include the download SBU. Some samples may have been removed, in the new version, so, in order to be sure local and server fate samples are identical, when you use previously saved samples, run the following command:

rsync -vrltLW  --delete --timeout=60 --contimeout=60 \
      rsync://fate-suite.ffmpeg.org/fate-suite/ fate-suite/

Next, FATE is executed, with the commands (you obtain a number of tests larger than 3000):

make fate THREADS=N SAMPLES=fate-suite/ | tee ../fate.log &&
grep ^TEST ../fate.log | wc -l

where N is an integer, N ≤ number of cores in the system.

Command Explanations

sed -i ... configure: This command adds the ALSA library to the Flite LDFLAGS variable and enables the discovery of Flite.

find ... ;: Fix 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-libass: Enables ASS/SSA subtitle format rendering via libass.

--enable-libfdk-aac: Enables currently the highest-quality AAC audio encoding via libfdk-aac.

--enable-libmp3lame: Enables MP3 audio encoding via libmp3lame.

--enable-libvorbis --enable-libtheora: Enables Theora video encoding via libvorbis and libtheora.

--enable-libvorbis --enable-libvpx: Enables WebM encoding via libvorbis and libvpx.

--enable-libx264: Enables high-quality H.264/MPEG-4 AVC encoding via libx264.

--enable-libx265: Enables high-quality H.265/HEVC encoding via libx265.

--enable-x11grab: Enables X11 grabbing.

--enable-openssl or --enable-gnutls: Enables HTTPS protocol for network streams.

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.

Configuring FFmpeg

Config Files

/etc/ffserver.conf and ~/.ffmpeg/ffserver-config

You'll find a sample ffserver configuration file at doc/ffserver.conf in the source tree.

Contents

Installed Programs: ffmpeg, ffplay, ffprobe, ffserver, 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-3.2.4, and /usr/share/ffmpeg

Short Descriptions

ffmpeg

is a command-line tool to convert video files, network streams and input from a TV card to several video formats.

ffplay

is a very simple and portable media player using the ffmpeg libraries and the SDL library.

ffprobe

gathers information from multimedia streams and prints it in a human and machine-readable fashion.

ffserver

is a streaming server for everything that ffmpeg could use as input (files, streams, TV card input, webcam, etc).

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.

libavutil.so

is the FFmpeg utility library.

libpostproc.so

is the FFmpeg post processing library.

libswresample.so

is the FFmpeg audio rescaling library, it contains functions for converting audio sample formats.

libswscale.so

is the FFmpeg image rescaling library.

Last updated on 2017-02-18 18:01:35 -0800

MPlayer-1.3.0

Introduction to MPlayer

MPlayer is a powerful audio/video player controlled via the command line or a graphical interface that is able to play almost every popular audio and video file format. With supported video hardware and additional drivers, MPlayer can play video files without an X Window System installed.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

Skins

Note

Skins are only required in order to use the Gtk+ 2 user interface.

MPlayer Dependencies

Required

yasm-1.3.0

Recommended
Optional Input Drivers and Libraries

CDParanoia-III-10.2, libcdio-0.94 (to identify and play CDs), libdvdread-5.0.3, libdvdnav-5.0.3, libdvdcss-1.4.0, Samba-4.5.5, libbluray, LIVE555 Streaming Media, RTMPDump, TiVo vstream client, and XMMS

Optional Audio Output Drivers and Libraries

ALSA-1.1.3, PulseAudio-10.0, SDL-1.2.15, JACK, NAS, and OpenAL

Optional Video Output Drivers and Libraries

AAlib-1.4rc5, giflib-5.1.4, libjpeg-turbo-1.5.1, libmng-2.0.3, libpng-1.6.28, OpenJPEG-1.5.2, DirectFB, libcaca, and SVGAlib

Optional CODECs

FAAC-1.28, FAAD2-2.7, LAME-3.99.5, liba52-0.7.4, libdv-1.0.0, libmad-0.15.1b, libmpeg2-0.5.1, libtheora-1.1.1, libvpx-1.6.1, LZO-2.09, mpg123-1.23.8, Speex-1.2rc2, XviD-1.3.3, x264-20170212-2245, CrystalHD, Dirac, GSM, iLBC, libdca, libnut, libmpcdec, OpenCore Adaptive Multi Rate, Schroedinger, Tremor, and TwoLAME

Optional Miscellaneous Dependencies

Fontconfig-2.12.1, FreeType-2.7.1, FriBidi-0.19.7, GnuTLS-3.5.9, OpenSSL-1.0.2k, Opus-1.1.4, and UnRar-5.4.5; libxslt-1.1.29, docbook-xml-4.5 and docbook-xsl-1.79.1 (all three required to build the HTML documentation); and Enca, libbs2b, and LIRC (and LIRC Client Daemon)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mplayer

Installation of MPlayer

Main MPlayer Installation

Note

The package maintainers recommend building without any optimizations.

You may wish to examine the output from ./configure --help to find out what additional parameters to configure are needed to include the dependencies you have installed on your system.

Install MPlayer by running the following commands:

./configure --prefix=/usr            \
            --confdir=/etc/mplayer   \
            --enable-dynamic-plugins \
            --enable-menu            \
            --enable-gui             &&
make

If you wish to build the HTML documentation, issue the following command:

make doc

This package does not come with a test suite.

Now, as the root user:

make install  &&
ln -svf ../icons/hicolor/48x48/apps/mplayer.png \
        /usr/share/pixmaps/mplayer.png

To install the HTML documentation, issue the following commands as the root user:

install -v -m755 -d /usr/share/doc/mplayer-1.3.0 &&
install -v -m644    DOCS/HTML/en/* \
                    /usr/share/doc/mplayer-1.3.0

You will only need codecs.conf if you want to change its properties, as the main binary contains an internal copy of it. Ensure any changes you make to codecs.conf achieve the desired results, as incorrect entries in this file have been known to cause errors and render the player unusable. If necessary, create the file as the root user:

install -v -m644 etc/codecs.conf /etc/mplayer

You may alternatively want to copy all the default configuration files to /etc/mplayer for future reference or more customization ability. As the root user:

install -v -m644 etc/*.conf /etc/mplayer

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Skin Installation (Optional)

To enable the Gtk+ 2 frontend of MPlayer, you'll need to install at least one skin. Extract the desired skin and create the default location (as the root user):

tar -xvf  ../Clearlooks-1.7.tar.bz2 \
    -C    /usr/share/mplayer/skins &&
ln  -sfvn Clearlooks /usr/share/mplayer/skins/default

Command Explanations

--enable-gui: This option builds the GUI interface into mplayer.

--enable-menu: This option is set to enable the on-screen display.

--language-doc="<lang>": This switch enables the language used for the documentation. Use ./configure --help to find out what additional information.

--language-man="<lang>": This switch enables the language used for the man pages. Use ./configure --help to find out what additional information.

--language-msg="<lang>": This switch enables the language used for the messages and the GUI. Use ./configure --help to find out what additional information.

--language="<lang>": This switch defines the default language used. Use ./configure --help to find out what additional information.

Note

Specific options override --language. You can pass a list of languages separated by whitespace or commas instead of a single language. Nonexisting translations will be dropped from each list. All documentation and man page translations available in the list will be installed, for the messages the first available translation will be used. The value "all" will activate all translations. The LINGUAS environment variable is honored. In all cases the fallback is English. Values listed by ./configure --help are not all available, as would normally be expected. You need to build test.

Configuring MPlayer

Config Files

/etc/mplayer/* and ~/.mplayer/*

Note

To play a DVD, it may be useful to ensure a /dev/dvd device is created. You may need to set this up as described in the section called “Devices for DVD Drives”.

Configuration Information

Typically, there's no configuration required for the system-wide files in /etc/mplayer (in fact, this directory is empty unless you copied the default files as mentioned above). Configuration can be accomplished by choosing the configuration button located on the MPlayer GUI. Any configuration changes made in the GUI will be saved in the user's ~/.mplayer directory.

Contents

Installed Programs: gmplayer, mplayer and mencoder
Installed Libraries: None
Installed Directories: /etc/mplayer, /usr/share/doc/mplayer-1.3.0 and /usr/share/mplayer

Short Descriptions

gmplayer

is a symlink to mplayer which brings up the GTK+ 2 frontend of MPlayer.

mplayer

is the main MPlayer video player.

mencoder

is a powerful command line video decoding, encoding and filtering tool that is useful for (amongst other things) ripping DVDs to files on your hard disk (see /usr/share/doc/mplayer-1.3.0/mencoder.html)

Last updated on 2017-02-24 14:27:22 -0800

Transcode-1.1.7

Introduction to Transcode

Transcode is a fast, versatile and command-line based audio/video everything to everything converter. For a rundown of the features and capabilities, along with usage examples, visit the Transcode Wiki at http://www.transcoding.org/.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

Transcode Dependencies

Required

FFmpeg-3.2.4

Recommended
Optional

FAAC-1.28, FreeType-2.7.1, ImageMagick-7.0.4-8, liba52-0.7.4, libdv-1.0.0, libjpeg-turbo-1.5.1, libogg-1.3.2, libquicktime-1.2.4, libtheora-1.1.1, libvorbis-1.3.5, libxml2-2.9.4, LZO-2.09, SDL-1.2.15, v4l-utils-1.12.3, x264-20170212-2245, XviD-1.3.3 MJPEG Tools, and PVM3,

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/transcode

Installation of Transcode

Note

The details of how the FFmpeg libraries are used has changed since this version of Transcode was released. The patch allows the package to be compiled, but some or all of the internal calls to FFmpeg fail at run time (they report an error and processing continues, but without any output).

For many packages, that would be a critical error. In this case, the main reason to install Transcode is for the tccat program, which works. Some of the transcode options work - for the others, use ffmpeg directly on the command line.

If building with --enable-freetype2 configure switch, use the following sed to fix building against FreeType-2.5.1 or newer versions:

sed -i "s:#include <freetype/ftglyph.h>:#include FT_GLYPH_H:" filter/subtitler/load_font.c

Install Transcode by running the following commands:

sed -i 's|doc/transcode|&-$(PACKAGE_VERSION)|' \
       $(find . -name Makefile.in -exec grep -l 'docsdir =' {} \;) &&

patch -Np1 -i ../transcode-1.1.7-ffmpeg3-1.patch                   &&
./configure --prefix=/usr \
            --enable-alsa \
            --enable-libmpeg2 &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed -i ...: Fixes install location for documentation.

sed ... import/probe_ffmpeg.c: This sed fixes compilation with ffmpeg-2.4 or newer versions.

Support for most of the dependency packages requires using options passed to the configure script. View the INSTALL file and the output from ./configure --help for complete information about enabling dependency packages.

Contents

Installed Programs: avifix, aviindex, avimerge, avisplit, avisync, tccat, tcdecode, tcdemux, tcextract, tcmodinfo, tcmp3cut, tcprobe, tcscan, tcxmlcheck, tcxpm2rgb, tcyait, and transcode
Installed Libraries: None
Installed Directories: /usr/lib/transcode and /usr/share/doc/transcode-1.1.7

Short Descriptions

avifix

fixes the header of an AVI file.

aviindex

writes a text file describing the index of an AVI file.

avimerge

merges AVI files of the same format. Do not try to merge AVI files of different formats, it will most likely result in errors (and format means same bitrates, too!).

avisplit

splits AVI files into multiple files.

avisync

can shift audio in AVI files for better synchronizing of the audio and video data signal.

tccat

concatenates input files using the input plugins of Transcode. This is useful for extracting VOB (Video OBject) files.

tcdecode

is used to decode input files to raw video and PCM audio streams.

tcdemux

demultiplexes (separates) audio/video input that contains multiple streams, e.g., VOB files.

tcextract

grabs single streams from a file containing multiple streams.

tcmodinfo

loads a supplied Transcode filter module and prints its parameters.

tcmp3cut

is a tool which can cut MP3 streams at milliseconds positions.

tcprobe

prints information about the input file format.

tcscan

performs several measurements on the given input data.

tcxmlcheck

checks information in a SMIL input file.

transcode

is the encoder's user interface that handles the plugins and other programs, being the glue between the modules. There are several well documented usage examples on both the homepage and the documentation included in the package.

Last updated on 2017-02-18 16:23:18 -0800

VLC-2.2.4

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-8.0 platform.

Package Information

  • Download (HTTP): http://get.videolan.org/vlc/2.2.4/vlc-2.2.4.tar.xz

  • Download MD5 sum: 55666c9898f658c7fcca12725bf7dd1b

  • Download size: 21 MB

  • Estimated disk space required: 559 MB (add 4 MB for tests)

  • Estimated build time: 5.0 SBU (add 0.2 SBU for tests)

Additional Downloads

VLC Dependencies

Recommended
Optional features and packages

dbus-1.10.14

Optional input plugins

libdv-1.0.0, libdvdcss-1.4.0, libdvdread-5.0.3, libdvdnav-5.0.3, opencv-3.2.0, Samba-4.5.5, v4l-utils-1.12.3, libbluray, libdc1394, libcddb, libproxy, Live555, and VCDImager (requires libcdio-0.94)

Optional mux/demux plugins

libogg-1.3.2, Game Music Emu, libdvbpsi, libshout, libmatroska (requires libebml), libmodplug, Musepack, and sidplay-libs

Optional codec plugins

FAAD2-2.7, FLAC-1.3.2, libass-0.13.6, libmpeg2-0.5.1, libpng-1.6.28, libtheora-1.1.1, libva-1.7.3, libvorbis-1.3.5, Opus-1.1.4, Speex-1.2rc2, x264-20170212-2245, Dirac, FluidSynth, libdca, libkate, OpenMAX, Schroedinger, Tremor, Twolame, and Zapping VBI

Optional video plugins

AAlib-1.4rc5, Fontconfig-2.12.1, FreeType-2.7.1, FriBidi-0.19.7, librsvg-2.40.16, libvdpau-1.1.1, SDL-1.2.15 (with SDL_image), and libcaca

Optional audio plugins

PulseAudio-10.0, libsamplerate-0.1.9, and JACK

Optional interface plugins

Qt-5.8.0 (required for the graphical user interface), libtar, and LIRC

Optional visualisations and video filter plugins

Goom and projectM

Optional service discovery plugins

Avahi-0.6.32, libmtp and libupnp

Miscellaneous options

GnuTLS-3.5.9, libnotify-0.7.7, libxml2-2.9.4, taglib-1.11.1, xdg-utils-1.1.1 (runtime), and AtmoLight

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/vlc

Installation of VLC

Install VLC by running the following commands:

patch -Np1 -i ../vlc-2.2.4-ffmpeg3-1.patch    &&
patch -Np1 -i ../vlc-2.2.4-gcc6_fixes-1.patch &&

CFLAGS="-DLUA_COMPAT_5_1" \
./configure --prefix=/usr --disable-atmo &&

make

To test the results, issue: make -k check. One test fails for unknown reasons.

Now, as the root user:

Note

If the XORG_PREFIX is not /usr, make sure the LIBRARY_PATH environment variable is set properly when doing the install, For example: sudo make LIBRARY_PATH=$XORG_PREFIX/lib ... install.

make docdir=/usr/share/doc/vlc-2.2.4 install

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Command Explanations

CFLAGS="-DLUA_COMPAT_5_1" This environment variable ensures the use of the correct variation of Lua-5.3.4.

--disable-atmo: This switch disables trying to build AtmoLight (homemade Philips Ambilight clone).

--enable-opencv=no: This switch disables OpenCV suport.

--disable-lua: Use this switch if you don't have Lua installed.

--disable-mad: Use this switch if you don't have libmad installed.

--disable-avcodec --disable-swscale: Use these switches if you don't have FFmpeg installed.

--disable-a52: Use this switch if you don't have liba52 installed.

--disable-xcb: Use this switch if you don't have X Window System installed.

--disable-alsa: Use this switch if you don't have ALSA installed.

--disable-libgcrypt: Use this switch if you don't have libgcrypt installed.

Note

There are many options to VLC's configure command. Check the configure --help output for a complete list.

Contents

Installed Programs: cvlc, nvlc, qvlc, rvlc, svlc, vlc and vlc-wrapper
Installed Libraries: libvlccore.so, libvlc.so, and many plugins in /usr/lib/vlc/plugins
Installed Directories: /usr/{include,lib,share}/vlc and /usr/share/doc/vlc-2.2.4

Short Descriptions

cvlc

is a script to run VLC with the dummy interface.

nvlc

is a script to run VLC with the ncurses interface.

qvlc

is a script to run VLC with the Qt interface.

rvlc

is a script to run VLC with a command line interface.

svlc

is a script to run VLC with the skins interface.

vlc

is the VLC media player.

vlc-wrapper

is a wrapper to drop privileges with VLC.

Last updated on 2017-02-19 17:09:49 -0800

xine-ui-0.99.9

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-8.0 platform.

Note

Although this version of xine-ui works with most files, it is unable to open encrypted (content-scrambled) DVDs with the current version of libdvdcss.

Package Information

Xine User Interface Dependencies

Required

xine-lib-1.2.6 and shared-mime-info-1.8

Optional

cURL-7.52.1, AAlib-1.4rc5, LIRC, and libcaca

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xine-ui

Installation of Xine User Interface

Install xine User Interface by running the following commands:

./configure --prefix=/usr &&
make

This package does not come with a test suite.

Now, as the root user:

make docsdir=/usr/share/doc/xine-ui-0.99.9 install

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and desktop files into the /usr/share/applications hierarchy. You can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme and /usr/share/applications/mimeinfo.cache. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed (for the icon cache) and desktop-file-utils-0.23 (for the desktop cache) and issue the following commands as the root user:

gtk-update-icon-cache &&
update-desktop-database

Command Explanations

docsdir=/usr/share/doc/xine-ui-0.99.9: This parameter causes the Xine UI documentation to be installed in the versioned directory /usr/share/doc/xine-ui-0.99.9, 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.9/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.9

Short Descriptions

aaxine

is an ASCII art video player which utilizes AAlib as the frontend for the xine Libraries.

cacaxine

is a color ASCII art video player which utilizes CACA as the frontend for the xine Libraries.

fbxine

is a frame buffer interface to the xine Libraries.

xine

is a multimedia player designed to play MPEG streams (audio and video), MPEG elementary streams (MP3), MPEG transport streams, Ogg files, AVI files, ASF files, some Quicktime files, VCDs and DVDs.

xine-bugreport

produces a terse system description and guides you through the process of reporting a bug.

xine-check

tests the xine video player installation for common problems. It tests the operating system settings, installation of plugins, CD/DVD drive settings and video support parameters.

xine-remote

is a tool to connect to a xine remote control server.

Last updated on 2017-02-17 19:16:56 -0800

Chapter 47. CD/DVD-Writing Utilities

This chapter contains information on CD/DVD-writing utilities in Linux.

Additional sources of information include:

Cdrdao-1.2.3

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-8.0 platform.

Package Information

Cdrdao Dependencies

Recommended

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cdrdao

Installation of Cdrdao

Install Cdrdao by running the following commands:

sed -i '/ioctl.h/a #include <sys/stat.h>' dao/ScsiIf-linux.cc  &&
sed -i 's/\(char .*REMOTE\)/unsigned \1/' dao/CdrDriver.{cc,h} &&

./configure --prefix=/usr --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/cdrdao-1.2.3 &&
install -v -m644 README /usr/share/doc/cdrdao-1.2.3

Command Explanations

sed -i '/ioctl/a #include <sys/stat.h>' ...: This sed adds a missing sys/stat.h include.

sed -i 's/\(char .*REMOTE\)/unsigned \1/' ...: This sed stops gcc-6.1 from stopping the build due to C++ now treating an 'int' to 'char' conversion as an error.

--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.3

Short Descriptions

cdrdao

records audio or data CD-Rs in disk-at-once (DAO) mode based on a textual description of the CD contents.

cue2toc

converts CUE to TOC format for audio CDs.

toc2cddb

converts a Cdrdao TOC file into a cddb file and prints it to stdout.

toc2cue

converts TOC to CUE format for audio CDs.

toc2mp3

converts an audio CD disk image (.toc file) to MP3 files.

Last updated on 2017-02-18 18:01:35 -0800

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-8.0 platform.

Package Information

dvd+rw-tools Dependencies

Required

Though not required during the build, you must have installed a package which provides the xorrisofs command, such as libisoburn-1.4.6, or the growisofs command will not function properly, rendering the entire package useless.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/dvd+rw-tools

Installation of dvd+rw-tools

Install dvd+rw-tools by running the following commands:

sed -i '/stdlib/a #include <limits.h>' transport.hxx &&
sed -i 's#mkisofs"#xorrisofs"#' growisofs.c &&
sed -i 's#mkisofs#xorrisofs#;s#MKISOFS#XORRISOFS#' growisofs.1 &&

make all rpl8 btcflash

This package does not come with a test suite.

Now, as the root user:

make prefix=/usr install &&
install -v -m644 -D index.html \
    /usr/share/doc/dvd+rw-tools-7.1/index.html

Command Explanations

sed -i '/stdlib/a #include <limits.h>' ...: This sed includes limits.h, one of the kernel headers. This is needed due to a change in the 2.6.23 kernel headers.

sed -i 's#mkisofs"#xorrisofs"#' growisofs.c: This sed changes the code to use xorrisofs from xorriso. The default was for it to use mkisofs from Cdrtools.

sed -i 's#mkisofs#xorrisofs#;s#MKISOFS#XORRISOFS#' growisofs.1: This sed fixes the man page to account for the above change.

make all rpl8 btcflash: This command uses additional targets so that all the utilities are built.

Contents

Installed Programs: btcflash, dvd+rw-booktype, dvd+rw-format, dvd+rw-mediainfo, dvd-ram-control, growisofs, and rpl8
Installed Libraries: None
Installed Directory: /usr/share/doc/dvd+rw-tools-7.1

Short Descriptions

growisofs

is a combined mkisofs frontend/DVD recording program.

Last updated on 2017-02-18 18:01:35 -0800

libburn-1.4.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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libburn

Installation of libburn

Install libburn 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

Contents

Installed Program: cdrskin
Installed Library: libburn.so
Installed Directory: /usr/include/libburn

Short Descriptions

cdrskin

burns preformatted data to CD, DVD, and BD via libburn.

libburn.so

contains the libburn API functions.

Last updated on 2017-02-18 18:01:35 -0800

libisoburn-1.4.6

Introduction to libisoburn

libisoburn is a frontend for libraries libburn and libisofs which enables creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported by libburn. This includes media like DVD+RW, which do not support multi-session management on media level and even plain disk files or block devices.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

libisoburn Dependencies

Required

libburn-1.4.6 and libisofs-1.4.6

Optional

Doxygen-1.8.13 (to generate HTML documentation) and Tk-8.6.6 (for xorriso-tcltk)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libisoburn

Installation of libisoburn

Install libisoburn by running the following commands:

./configure --prefix=/usr              \
            --disable-static           \
            --enable-pkg-check-modules &&
make

If you have installed Doxygen and wish to generate the HTML documentation, issue the following command:

doxygen doc/doxygen.conf

This package does not come with a test suite.

Now, as the root user:

make install

If you have built the HTML documentation, install it by running the following commands as the root user:

install -v -dm755 /usr/share/doc/libisoburn-1.4.6 &&
install -v -m644 doc/html/* /usr/share/doc/libisoburn-1.4.6

Command Explanations

--disable-static: This switch prevents installation of static versions of the libraries.

--enable-pkg-check-modules: Enable pkg-config check for libburn and libisofs.

Contents

Installed Programs: osirrox, xorrecord, xorriso, xorrisofs and xorriso-tcltk
Installed Library: libisoburn.so
Installed Directories: /usr/include/libisoburn and /usr/share/doc/libisoburn-1.4.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.

xorrisofs

is a symbolic link to xorriso that that provides a mkisofs type user interface.

xorriso-tcltk

is a frontend that operates xorriso in dialog mode.

libisoburn.so

contains the libisoburn API functions.

Last updated on 2017-02-18 18:01:35 -0800

libisofs-1.4.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-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/libisofs

Installation of libisofs

Install libisofs 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: libisofs.so
Installed Directory: /usr/include/libisofs

Short Descriptions

libisofs.so

contains the libisofs API functions.

Last updated on 2017-02-18 18:01:35 -0800

Part XIV. Printing, Scanning and Typesetting

Chapter 48. Printing

This chapter contains spooling printer management systems and ghostscript applications to render PostScript for display on terminals or paper.

Cups-2.2.2

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-8.0 platform.

Package Information

Cups Dependencies

Required

GnuTLS-3.5.9

Recommended
Optional

Avahi-0.6.32, libpaper-1.1.24+nmu5, Linux-PAM-1.3.0, MIT Kerberos V5-1.15, OpenJDK-1.8.0.121, PHP-7.1.2, Python-2.7.13, and xdg-utils-1.1.1

Required (Postinstall)

cups-filters-1.13.4

Optional (Postinstall)

Gutenprint-5.2.12 and hplip (HP printers)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cups

Kernel Configuration

Note

There used to be a conflict between the Cups libusb backend and the usblp kernel driver. This is no longer the case and cups will work with both of these enabled.

If you want to use the kernel usblp driver (for example, if you wish to use escputil from Gutenprint-5.2.12) enable the following options in your kernel configuration and recompile the kernel:

Device Drivers  --->
  [*] USB support  --->                          [CONFIG_USB_SUPPORT]
    <*/M>  OHCI HCD (USB 1.1) support            [CONFIG_USB_OHCI_HCD]
    <*/M>  UHCI HCD (most Intel and VIA) support [CONFIG_USB_UHCI_HCD]
    <*/M>  USB Printer support                   [CONFIG_USB_PRINTER]

If you have a parallel printer, enable the following options in your kernel configuration and recompile the kernel:

Device Drivers  --->
  <*/M> Parallel port support  --->    [CONFIG_PARPORT]
    <*/M> PC-style hardware            [CONFIG_PARPORT_PC]
  Character devices  --->
    <*/M> Parallel printer support     [CONFIG_PRINTER]

Installation of Cups

You will need to add an lp user, as Cups will create some files owned by this user. (The lp user is the default used by Cups, but may be changed to a different user by passing a parameter to the configure script.) Use the following command as the root user:

useradd -c "Print Service User" -d /var/spool/cups -g lp -s /bin/false -u 9 lp

You will also need a dedicated group that will contain users allowed to do Cups administrative tasks. Add the group by running the following command as the root user:

groupadd -g 19 lpadmin

If you want to add a user to the Cups administrative group, run the following command as the root user:

usermod -a -G lpadmin <username>

If you didn't install xdg-utils-1.1.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.

Unless you have installed MIT Kerberos V5-1.15, fix a configuration file:

sed -i '/kerberized/,$ d' conf/cupsd.conf.in

Build Cups by running the following commands:

sed -i 's:555:755:g;s:444:644:g' Makedefs.in                         &&
sed -i '/MAN.EXT/s:.gz::g' configure config-scripts/cups-manpages.m4 &&
sed -i '/LIBGCRYPTCONFIG/d' config-scripts/cups-ssl.m4               &&

aclocal  -I config-scripts &&
autoconf -I config-scripts &&

CC=gcc \
./configure --libdir=/usr/lib            \
            --disable-systemd            \
            --with-rcdir=/tmp/cupsinit   \
            --with-system-groups=lpadmin \
            --with-docdir=/usr/share/cups/doc-2.2.2 &&
make

To test the results, issue: make -k check. An already active graphical session with bus address is necessary to run the tests. Some tests fail for unknown reasons.

Now, as the root user:

make install &&
rm -rf /tmp/cupsinit &&
ln -svnf ../cups/doc-2.2.2 /usr/share/doc/cups-2.2.2

Create a basic Cups client configuration file by running the following command as the root user:

echo "ServerName /var/run/cups/cups.sock" > /etc/cups/client.conf

Note

This package installs icon files into the /usr/share/icons/hicolor hierarchy and you can improve system performance and memory usage by updating /usr/share/icons/hicolor/index.theme. To perform the update you must have GTK+-2.24.31 or GTK+-3.22.8 installed and issue the following command as the root user:

gtk-update-icon-cache

Command Explanations

sed -i '/kerberized/,$ d' conf/cupsd.conf.in: when this version of cups is compiled without kerberos support, it nevertheless adds a policy entry at the end of /etc/cups/cupsd.conf. But the daemon will error out because it does not understand that entry, so remove it.

sed ... Makedefs.in: Fix files and directories permissions.

sed ... cups-manpages.m4: This sed prevents compression of the man pages by default.

sed ... cups-ssl.m4: Prevent configure script from searching libgcrypt-config, because libgcrypt is not used anywere else in the package.

CC=gcc: This environment variable ensures that gcc is used, if clang is installed. Remove it, if you prefer to use clang. Using clang almost doubles build time and slightly decreases build disk space. Installed disk space is not appreciably modified.

--disable-systemd: Systemd is not supported by BLFS.

--with-rcdir=/tmp/cupsinit: This switch tells the build process to install the shipped bootscript into /tmp instead of /etc/rc.d.

--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.21, but wish to use the kernel usblp driver.

--enable-libpaper: Use this switch if you have installed libpaper and wish to use it with Cups.

Configuring Cups

Config Files

/etc/cups/*

Configuration Information

Normally, printers are set up via a web browser. The Cups server will normally connect via the url http://localhost:631. From there printers, print jobs, and the server configuration can be set up and managed. Remote system administration can also be set up. Configuration can also be done from the command line via the lpadmin, lpoptions, and lpstat commands.

Configuration of Cups is dependent on the type of printer and can be complex. Generally, PostScript printers are easier. For detailed instructions on configuration and use of Cups, see http://www.cups.org/documentation.php.

For non-PostScript printers to print with Cups, you need to install ghostscript-9.20 to convert PostScript to raster images and a driver (e.g. from Gutenprint-5.2.12) to convert the resulting raster images to a form that the printer understands. Foomatic drivers use ghostscript-9.20 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-20170225 package:

make install-cups

Contents

Installed Programs: accept, cancel, cupsaccept, cupsaddsmb, cups-config, cupsctl, cupsd, cupsdisable, cupsenable, cupsfilter, cupsreject, cupstestdsc, cupstestppd, ippfind, ipptool, lp, lpadmin, lpc, lpinfo, lpmove, lpoptions, lpq, lpr, lprm, lpstat, ppdc, ppdhtml, ppdi, ppdmerge, ppdpo, and reject
Installed Libraries: libcupscgi.so, libcupsimage.so, libcupsmime.so, libcupsppdc.so, and libcups.so
Installed Directories: /etc/cups, /usr/{include,lib,share}/cups, /usr/share/doc/cups-2.2.2, and /var/{cache,log,run,spool}/cups

Short Descriptions

accept

instructs the printing system to accept print jobs to the specified destinations.

cancel

cancels existing print jobs from the print queues.

cupsaccept

accept jobs sent to a destination.

cupsaddsmb

exports printers to the Samba software for use with Windows clients.

cups-config

is a Cups program configuration utility.

cupsctl

updates or queries the cupsd.conf file for a server.

cupsd

is the scheduler for the Common Unix Printing System.

cupsdisable

stop printers and classes.

cupsenable

start printers and classes.

cupsfilter

is a front-end to the Cups filter subsystem which allows you to convert a file to a specific format.

cupsreject

reject jobs sent to a destination.

cupstestdsc

tests the conformance of PostScript files.

cupstestppd

tests the conformance of PPD files.

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.

reject

instructs the printing system to reject print jobs to the specified destinations.

libcups.so

contains the Cups API functions.

Last updated on 2017-02-24 10:42:12 -0800

cups-filters-1.13.4

Introduction to CUPS Filters

The CUPS Filters package contains backends, filters and other software that was once part of the core CUPS distribution but is no longer maintained by Apple Inc.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

CUPS Filters Dependencies

Required

Cups-2.2.2, GLib-2.50.3, ghostscript-9.20, IJS-0.35, Little CMS-2.8, mupdf-1.10a (mutool), Poppler-0.51.0, and Qpdf-6.0.0

Recommended
Optional

Avahi-0.6.32, OpenLDAP-2.4.44, PHP-7.1.2 (use of this might be broken), Liblouis (Braille), and Liblouisutdml (Braille)

Optional printer drivers (runtime)

Gutenprint-5.2.12 (for supported printers), or other printer drivers, such as hplip

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/cups-filters

Installation of CUPS Filters

Install CUPS Filters by running the following commands:

./configure                             \
        --prefix=/usr                   \
        --sysconfdir=/etc               \
        --localstatedir=/var            \
        --without-rcdir                 \
        --disable-static                \
        --disable-avahi                 \
        --docdir=/usr/share/doc/cups-filters-1.13.4 &&
make

To test the results, issue: make check 2>&1 >testlog. DejaVu fonts are needed for the tests.

Now, as the root user:

make install

Command Explanations

--disable-avahi: This switch is needed if the optional Avahi-0.6.32 is not installed. Remove it if avahi is installed and you need network printer discovery capabilities.

--without-rcdir: This switch disables installation of the bundled bootscript which is not compatible with BLFS.

--disable-static: This switch prevents installation of static versions of the libraries.

make check 2>&1 >testlog: The testsuite dumps a stream of bytes into the input buffer after it finishes. Sending the output to a file keeps the history usable, but some debug information will still appear on the screen.

Contents

Installed Programs: cups-browsed, driverless, foomatic-rip (link) and ttfread
Installed Libraries: libcupsfilters.so and libfontembed.so
Installed Directories: /usr/include/{cupsfilters,fontembed}, /usr/share/cups/{braille,charsets}, /usr/share/doc/cups-filters-1.13.4 and /usr/share/ppd/cupsfilters

Short Descriptions

cups-browsed

is a daemon for browsing the Bonjour and CUPS broadcasts of shared, remote CUPS printers.

foomatic-rip

is a universal print filter/RIP wrapper which can be used as CUPS filter or stand-alone for spooler-less, direct printing.

libcupsfilters.so

contains CUPS Filters API functions.

Last updated on 2017-02-19 14:24:01 -0800

ghostscript-9.20

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-8.0 platform.

Package Information

Additional Downloads

If you wish, you can download additional fonts.

Standard Fonts

Other Fonts

Ghostscript Dependencies

Recommended
Optional

Cairo-1.14.8, Cups-2.2.2 (required for building the “cups” device backend, which is needed by cups-filters), Fontconfig-2.12.1 (required, if you are installing any suggested font), GTK+-3.22.8, libidn-1.33, libpaper-1.1.24+nmu5, Little CMS-1.19 (not used by default, nor if lcms2 is present or found), and X Window System

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gs

Installation of Ghostscript

Note

The Ghostscript build system is not user-friendly. In order to use system copies of various graphics libraries, you must do it using unconventional methods.

GPL 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 GPL Ghostscript to link to them.

If you have installed the recommended dependencies on your system, remove the copies of freetype, lcms2, libjpeg, and libpng:

rm -rf freetype lcms2 jpeg libpng

Compile Ghostscript:

patch -Np1 -i ../ghostscript-9.20-security_fixes-1.patch &&

rm -rf zlib &&

./configure --prefix=/usr           \
            --disable-compile-inits \
            --enable-dynamic        \
            --with-system-libtiff   &&
make

Note

The shared library depends on GTK+-2.24.31. It is only used in external programs like asymptote-2.39 and ImageMagick-7.0.4-8.

To compile the shared library libgs.so, run the following additional command as an unprivileged user:

make so

This package does not come with a test suite. A set of example files may be used for testing, but it is only possible after installation of the package.

Now, as the root user:

make install

If you want the shared library too:

make soinstall &&
install -v -m644 base/*.h /usr/include/ghostscript &&
ln -v -s ghostscript /usr/include/ps

Now make the documentation accessible from the normal place:

ln -sfvn ../ghostscript/9.20/doc /usr/share/doc/ghostscript-9.20

If you have downloaded any fonts, unpack them to /usr/share/ghostscript and ensure the ownerships of the files are root: root. Substitute <font-tarball> appropriately in the command below for the fonts you wish to install:

tar -xvf ../<font-tarball> -C /usr/share/ghostscript --no-same-owner &&
fc-cache -v /usr/share/ghostscript/fonts/

You can now test the rendering of various postscript and pdf files from the /usr/share/ghostscript/9.20/examples , for example (you need an X window system display):

gs -q -dBATCH /usr/share/ghostscript/9.20/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.0.7.

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 -v -s ghostscript /usr/include/ps: Some packages expect to find the interface headers in an alternate location.

ln -sfv ../ghostscript-9.20/doc ... : This puts a symbolic link to the documentation where it is expected to be found.

--disable-cups: this option will save a tiny amount of space by not linking gs and libgs.so to the Cups-2.2.2 libraries if you have installed those.

Contents

Installed Programs: dvipdf, eps2eps, font2c, 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, unix-lpr.sh, and wftopfa
Installed Library: libgs.so and /usr/lib/ghostscript/9.20/X11.so
Installed Directories: /usr/include/ghostscript, /usr/lib/ghostscript, /usr/share/ghostscript, and /usr/share/doc/ghostscript-9.20

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.

GPL Ghostscript provides many different scripts used to convert PostScript, PDF, and other formats. Please refer to the HTML documentation or the man pages for information about the capabilities provided.

Last updated on 2017-02-16 20:33:09 -0800

Gutenprint-5.2.12

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.2.2 and the GIMP-2.0. See a list of supported printers at http://gutenprint.sourceforge.net/p_Supported_Printers.php.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Gutenprint Dependencies

Recommended
Recommended (at runtime)
Optional (to Regenerate Documentation)

ImageMagick-7.0.4-8, texlive-20160523b (or install-tl-unx), Doxygen-1.8.13, and DocBook-utils-0.6.14

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gutenprint

Kernel Configuration

If you intend to use escputil with a USB-connected Epson Stylus printer for commands such as --ink-level which need to access the raw device, you must enable the kernel's usblp driver. Enable the following options in your kernel configuration and recompile the kernel:

Device Drivers  --->
  [*] USB support  --->                          [CONFIG_USB_SUPPORT]
    <*/M>  OHCI HCD (USB 1.1) support            [CONFIG_USB_OHCI_HCD]
    <*/M>  UHCI HCD (most Intel and VIA) support [CONFIG_USB_UHCI_HCD]
    <*/M>  USB Printer support                   [CONFIG_USB_PRINTER]

Installation of Gutenprint

Install Gutenprint by running the following commands:

sed -i 's|$(PACKAGE)/doc|doc/$(PACKAGE)-$(VERSION)|' \
       {,doc/,doc/developer/}Makefile.in &&

./configure --prefix=/usr --disable-static &&

make

To test the results, issue: make check. The tests take a very long time and use a lot of disk space. When last tested (version 5.2.12 in February 2017) this needed 126 SBU and 13 GB to complete the two tests (the ppds test used a maximum of 2 CPUs and reported failures from missing translations, perhaps because genppd is not part of the default configure, the longer rastertogutenprint test succeeded but only ever used one CPU).

Now, as the root user:

make install &&
install -v -m755 -d /usr/share/doc/gutenprint-5.2.12/api/gutenprint{,ui2} &&
install -v -m644    doc/gutenprint/html/* \
                    /usr/share/doc/gutenprint-5.2.12/api/gutenprint &&
install -v -m644    doc/gutenprintui2/html/* \
                    /usr/share/doc/gutenprint-5.2.12/api/gutenprintui2

Command Explanations

sed -i '...' ...Makefile.in: This command is used so that the package documentation is installed in the conventional /usr/share/doc directory structure instead of /usr/share/gutenprint/doc.

--disable-static: This switch prevents installation of static versions of the libraries.

Configuring Gutenprint

Configuration Information

For CUPS to see newly installed print drivers, it has to be restarted (as the root user):

/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.2, cups-genppdupdate, escputil, ijsgutenprint.5.2 (if compiled using ijs), and testpattern
Installed Libraries: libgutenprint.so, libgutenprintui2.so and optionally, various CUPS filters and backend drivers under /usr/lib/gutenprint/5.2/modules/
Installed Directories: /usr/{include,lib,share}/gutenprint, /usr/include/gutenprintui2 and /usr/share/doc/gutenprint-5.2.12

Short Descriptions

cups-calibrate

calibrates the color output of printers using the Gutenprint, CUPS or ESP Print Pro drivers.

cups-genppd.5.2

generates Gutenprint PPD files for use with CUPS.

cups-genppdupdate

regenerates the Gutenprint PPD files in use by CUPS.

escputil

is a command line utility to perform various maintenance tasks on Epson Stylus inkjet printers.

ijsgutenprint.5.2

is a Ghostscript driver for HP InkJet and LaserJet printers.

testpattern

is a test program to learn how to use libgutenprint.

Last updated on 2017-02-19 14:24:01 -0800

Chapter 49. Scanning

This chapter contains scanning applications which allow you to convert printed documents into formatted documents readable by other applications.

SANE-1.0.25

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-8.0 platform.

Back Ends Package Information

Front Ends Package Information

SANE Dependencies

Optional (Back Ends)

Avahi-0.6.32, Cups-2.2.2, libjpeg-turbo-1.5.1, LibTIFF-4.0.7, libusb-1.0.21, v4l-utils-1.12.3, Net-SNMP, libieee1284, libgphoto2, and texlive-20160523b (or install-tl-unx)

Optional (Front Ends)

X Window System, GTK+-2.24.31, and Gimp-2.8.20

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sane

Kernel Configuration, Drivers and Additional Packages

To access your scanner, you will probably need the related kernel drivers and/or additional support packages. A SCSI scanner will need SCSI drivers, a parallel port scanner needs parallel port support (you should use enhanced EPP modes) and perhaps libieee1284, and a USB scanner will need the libusb-1.0.21 package. For HP devices, you may need hplip. Ensure you have the necessary drivers properly configured to access the devices.

Installation of SANE

Installation of SANE Back Ends

The SANE daemon should run with its own group. Create this group by issuing the following commands as the root user:

groupadd -g 70 scanner

Note

The user building SANE-backends should be a member of the scanner group before proceeding. After you have added the user building the package to the scanner group, issue the following command to create a new shell:

su $(whoami)

Check the output of the groups command and ensure the user is a member of the scanner group.

For a USB scanner, if you are linking to libusb-1.0.21, include the configure switch --enable-libusb_1_0. Install SANE-backends by running the following commands:

./configure --prefix=/usr        \
            --sysconfdir=/etc    \
            --localstatedir=/var \
            --with-group=scanner \
            --with-docdir=/usr/share/doc/sane-backend-1.0.25 &&
make

If you want to test the results, some files need to be fixed:

sed -i -e 's/Jul 31 07:52:48 2013/Oct 19 13:25:20 2015/'  \
       -e 's/1.0.24git/1.0.25/'                           \
       testsuite/tools/data/db.ref                        \
       testsuite/tools/data/html-mfgs.ref                 \
       testsuite/tools/data/usermap.ref                   \
       testsuite/tools/data/html-backends-split.ref       \
       testsuite/tools/data/udev+acl.ref                  \
       testsuite/tools/data/udev.ref

To test the results, issue: make check.

Now, as the root user:

make install                                         &&
install -m 644 -v tools/udev/libsane.rules           \
                  /etc/udev/rules.d/65-scanner.rules &&
chgrp -v scanner  /var/lock/sane

With the scanner on, run scanimage -L and the name and location of the device should appear. Of course, you need the device drivers configured, in order to run this test.

Installation of SANE Front Ends

The SANE-frontends package includes the graphical frontends xscanimage and xcam, and a command-line frontend scanadf. You don't need this package if you intend to use one of the more advanced graphical frontends like XSane-0.999. For a list of frontend packages, see http://www.sane-project.org/sane-frontends.html.

To install SANE-frontends, use the following commands:

sed -i -e "/SANE_CAP_ALWAYS_SETTABLE/d" src/gtkglue.c &&
./configure --prefix=/usr --mandir=/usr/share/man &&
make

This package does not come with a test suite.

Now, as the root user:

make install &&
install -v -m644 doc/sane.png xscanimage-icon-48x48-2.png \
    /usr/share/sane

If GIMP was linked into the build and you wish GIMP to use xscanimage as a scanning plugin, issue the following command as the root user:

ln -v -s ../../../../bin/xscanimage /usr/lib/gimp/2.0/plug-ins

Note

If the plugin xscanimage is disabled in GIMP's menu, in order to enable it, "create" a blank image using the menu or Ctrl-N. After that, it is enabled.

Command Explanations

--sysconfdir=/etc: This switch installs the configuration files in /etc/sane.d instead of /usr/etc/sane.d.

--with-group=scanner: This parameter causes the directory created for the locking files to be group owned by the scanner group instead of the default uucp group.

exit: This command is used to exit the shell created by the su command.

Configuring SANE

Config Files

/etc/sane.d/*.conf

Configuration Information

Backend Configuration

The backend configuration files are located in /etc/sane.d. Information for configuring the various backends can be found by using the man(5) page for the desired backend. Run man sane-<backend>, substituting the desired backend.

Add any desired users to the scanner group.

If you want to access a network scanner, include two lines in net.conf, as root user (make sure to replace <server_ip> by the actual value, below):

cat >> /etc/sane.d/net.conf << "EOF"
connect_timeout = 60
<server_ip>
EOF

On the server side, include the client ip in the access list of /etc/sane.d/saned.conf, restart the saned daemon, and make sure the firewall, if any, is open to the client.

Frontend Configuration

If you use a desktop environment like Gnome or KDE you may wish to create a xscanimage.desktop file so that xscanimage appears in the panel's menus. As the root user:

mkdir -pv /usr/share/{applications,pixmaps}               &&

cat > /usr/share/applications/xscanimage.desktop << "EOF" &&
[Desktop Entry]
Encoding=UTF-8
Name=XScanImage - Scanning
Comment=Acquire images from a scanner
Exec=xscanimage
Icon=xscanimage
Terminal=false
Type=Application
Categories=Application;Graphics
EOF

ln -svf ../sane/xscanimage-icon-48x48-2.png /usr/share/pixmaps/xscanimage.png
General Information

For general information about configuring and using SANE, see man sane. Linux-2.6.x brings some special issues into the picture. See http://www.sane-project.org/README.linux for information about using SANE with the Linux-2.6.x kernel. 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. If you desire to make the daemon available, ensure you provide adequate security, configure your [x]inetd.conf file and send a SIGHUP to the [x]inetd daemon. Some good information for setting up and securing the saned daemon can be found at http://penguin-breeder.org/sane/saned/.

Contents

Back Ends:
Installed Programs: gamma4scanimage, sane-config, saned, sane-find-scanner, and scanimage
Installed Libraries: libsane.so and numerous scanner backend modules
Installed Directories: /etc/sane.d, /usr/{include,lib,share}/sane, and /usr/share/doc/sane-1.0.25
Front Ends:
Installed Programs: scanadf, xcam, and xscanimage
Installed Library: GIMP plugin embedded in xscanimage
Installed Directories: None

Short Descriptions

gamma4scanimage

creates a gamma table in the format expected by scanimage.

sane-config

is a tool used to determine the compiler and linker flags that should be used to compile and link SANE.

saned

is the SANE daemon that allows remote clients to access image acquisition devices available on the local host.

sane-find-scanner

is a command-line tool to find SCSI and USB scanners and determine their device files. Its primary purpose is to make sure that scanners can be detected by SANE backends.

scanadf

is a command-line interface to control image acquisition devices which are equipped with an automatic document feeder (ADF).

scanimage

is a command line interface for scanning from image acquisition devices such as flatbed scanners or cameras. It is also used to list the available backend devices.

xcam

is a graphical camera front end for SANE.

xscanimage

is a graphical user interface for scanning.

libsane.so

is the application programming interface that is used to communicate between frontends and backends.

libsane-*.so

modules are backend scanning library plugins used to interface with scanning devices. See http://www.sane-project.org/sane-supported-devices.html for a list of supported backends.

Last updated on 2017-02-21 14:52:57 -0800

XSane-0.999

Introduction to XSane

XSane is another front end for SANE-1.0.25. It has additional features to improve the image quality and ease of use compared to xscanimage.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

XSane Dependencies

Required

GTK+-2.24.31 and SANE-1.0.25 (back ends)

Optional

Little CMS-1.19 and Gimp-2.8.20

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xsane

Installation of XSane

Install XSane by running the following commands:

sed -i -e 's/png_ptr->jmpbuf/png_jmpbuf(png_ptr)/' src/xsane-save.c &&
./configure --prefix=/usr                                           &&
make

This package does not come with a test suite.

Now, as the root user:

make xsanedocdir=/usr/share/doc/xsane-0.999 install &&
ln -v -s ../../doc/xsane-0.999 /usr/share/sane/xsane/doc

A browser of your choice can be used to get inline help, using the following command, as the root user:

ln -v -s <browser> /usr/bin/netscape

Note

Be sure to replace <browser> with the browser of your choice on your system.

Alternatively, if the environment variable BROWSER is set to the browser you want to use, eg, BROWSER="/usr/bin/firefox", the first time you run xsane, it will be recorded in ~/.sane/xsane/xsane.rc. If you wish to change it, edit this file, or remove it, and use the instructions above, so that a new one is created.

If GIMP is installed, issue the following command as the root user:

ln -v -s /usr/bin/xsane /usr/lib/gimp/2.0/plug-ins/

Command Explanations

ln -v -s ../../doc/xsane-0.999 /usr/share/sane/xsane/doc: This symlink is created to ensure that any program that looks for the XSane documentation in the default location will find it, as the documentation is installed in an alternate location specified in the make install command.

ln -v -s /usr/bin/xsane /usr/lib/gimp/2.0/plug-ins/: This creates a link in the system-wide GIMP plug-ins directory so that users can access XSane directly from GIMP. GIMP must be available before building XSane for this to work. Alternatively, create the link in ~/.gimp-2.0/plug-ins/ to provide individual user access. man xsane for additional information.

Contents

Installed Program: xsane
Installed Libraries: None
Installed Directory: /usr/share/doc/xsane-0.999 and /usr/share/sane/xsane

Short Descriptions

xsane

is a graphical user-interface to control an image acquisition device such as a flatbed scanner.

Last updated on 2017-02-21 14:52:57 -0800

Chapter 50. 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-8.0 platform.

Package Information

Additional Downloads

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sgml-common

Installation of SGML Common

Instead of the normal convention of including the autotools files in the package, the maintainers included symlinks to the files in /usr/share/automake. For previous versions of Automake this convention is correct, but recent versions of Automake install the internal files in version specific directories. This causes the configure script to abort. To fix this error, the autotools are regenerated. Since the included Makefile.am file uses a syntax not supported by current versions of Automake, a patch is required to fix the syntax.

patch -Np1 -i ../sgml-common-0.6.3-manpage-1.patch &&
autoreconf -f -i

Install SGML Common by running the following commands:

./configure --prefix=/usr --sysconfdir=/etc &&
make

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc install &&

install-catalog --add /etc/sgml/sgml-ent.cat \
    /usr/share/sgml/sgml-iso-entities-8879.1986/catalog &&

install-catalog --add /etc/sgml/sgml-docbook.cat \
    /etc/sgml/sgml-ent.cat

Update Hint

Remove the above catalog items prior to upgrading (as the root user) with:

install-catalog --remove /etc/sgml/sgml-ent.cat \
    /usr/share/sgml/sgml-iso-entities-8879.1986/catalog &&

install-catalog --remove /etc/sgml/sgml-docbook.cat \
    /etc/sgml/sgml-ent.cat

Configuring SGML Common

Config Files

/etc/sgml/sgml.conf

Configuration Information

No change in this file is necessary.

Contents

Installed Programs: install-catalog and sgmlwhich
Installed Libraries: None
Installed Files: SGML and XML DocBook entity files
Installed Directories: /etc/sgml, /usr/share/doc/sgml-common-0.6.3, and /usr/share/sgml

Short Descriptions

install-catalog

creates a centralized catalog that maintains references to catalogs scattered throughout the /usr/share/sgml directory tree.

sgmlwhich

will print to standard output the name of the main configuration file.

SGML entities files

contain the basic character entities defined with SDATA entries.

XML entities files

contain the basic character entities defined by a hexadecimal representation of the Unicode character number.

Last updated on 2017-02-14 19:04:01 -0800

docbook-3.1

Introduction to DocBook 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-8.0 platform.

Package Information

DocBook SGML DTD Dependencies

Required

sgml-common-0.6.3 and UnZip-6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sgml-dtd-3

Installation of DocBook SGML DTD

Note

The package source is distributed in zip format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook 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 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

contain 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

contain components of the document type definition that are sourced into the DTD files.

Last updated on 2017-02-14 19:04:01 -0800

docbook-4.5

Introduction to DocBook 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-8.0 platform.

Package Information

DocBook SGML DTD Dependencies

Required

sgml-common-0.6.3 and UnZip-6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/sgml-dtd

Installation of DocBook SGML DTD

Note

The package source is distributed in zip format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook 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 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

contain 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

contain components of the document type definition that are sourced into the DTD files.

Last updated on 2017-02-14 19:04:01 -0800

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-8.0 platform.

Package Information

OpenSP Dependencies

Required

sgml-common-0.6.3

Optional

xmlto-0.0.28

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/opensp

Installation of OpenSP

Install OpenSP by running the following commands:

sed -i 's/32,/253,/' lib/Syntax.cxx &&
sed -i 's/LITLEN          240 /LITLEN          8092/' \
    unicode/{gensyntax.pl,unicode.syn} &&

./configure --prefix=/usr                              \
            --disable-static                           \
            --disable-doc-build                        \
            --enable-default-catalog=/etc/sgml/catalog \
            --enable-http                              \
            --enable-default-search-path=/usr/share/sgml &&

make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2

To test the results, issue: make check. As many as nine of the 23 tests may fail. Do not be alarmed.

Now, as the root user:

make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2 \
     docdir=/usr/share/doc/OpenSP-1.5.2      \
     install &&

ln -v -sf onsgmls   /usr/bin/nsgmls   &&
ln -v -sf osgmlnorm /usr/bin/sgmlnorm &&
ln -v -sf ospam     /usr/bin/spam     &&
ln -v -sf ospcat    /usr/bin/spcat    &&
ln -v -sf ospent    /usr/bin/spent    &&
ln -v -sf osx       /usr/bin/sx       &&
ln -v -sf osx       /usr/bin/sgml2xml &&
ln -v -sf libosp.so /usr/lib/libsp.so

Command Explanations

sed -i 's/32,/253,/...unicode.syn}: These seds prevent some annoying messages that may otherwise appear while running openjade.

--disable-static: This switch prevents installation of static versions of the libraries.

--enable-http: This switch adds support for HTTP.

--disable-doc-build: This switch prevents the configure script checking if you have xmlto installed. If you have xmlto, you can remove this option.

--enable-default-catalog=/etc/sgml/catalog: This switch sets the path to the centralized catalog.

--enable-default-search-path: This switch sets the default value of SGML_SEARCH_PATH.

--enable-xml-messages: This switch adds support for XML Formatted Messages.

make pkgdatadir=/usr/share/sgml/OpenSP-1.5.2: This sets the pkgdatadir variable in the Makefile from /usr/share/OpenSP to /usr/share/sgml/OpenSP-1.5.2.

ln -v -sf ...: These commands create the SP equivalents of OpenSP executables and libraries.

Contents

Installed Programs: onsgmls, osgmlnorm, ospam, ospcat, ospent, osx, and the SP equivalent symlinks: nsgmls, sgml2xml, sgmlnorm, spam, spcat, spent, and sx
Installed Library: libosp.so and the SP equivalent symlink: libsp.so
Installed Directories: /usr/include/OpenSP, /usr/share/doc/OpenSP, and /usr/share/sgml/OpenSP-1.5.2

Short Descriptions

onsgmls

is used to process SGML files.

osgmlnorm

prints on the standard output a normalized document instance for the SGML document contained in the concatenation of the entities with system identifiers .nf and .fi.

ospam

is a markup stream editor.

ospcat

prints effective system identifiers found in the catalogs.

ospent

provides access to OpenSP's entity manager.

osx

is an SGML normalizer or used to convert SGML files to XML files.

nsgmls

is a symlink to onsgmls.

sgml2xml

is a symlink to osx.

sgmlnorm

is a symlink to osgmlnorm.

spam

is a symlink to ospam.

spcat

is a symlink to ospcat.

spent

is a symlink to ospent.

sx

is a symlink to osx.

libosp.so

contains functions required by the OpenSP programs to parse, validate and manipulate SGML and XML files.

libsp.so

is a symlink to libosp.so.

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

Additional Download

OpenJade Dependencies

Required

OpenSP-1.5.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/openjade

Installation of OpenJade

First fix problems when building with newer compilers:

patch -Np1 -i ../openjade-1.3.2-upstream-1.patch

Now fix a compilation problem with perl-5.16 and later:

sed -i -e '/getopts/{N;s#&G#g#;s#do .getopts.pl.;##;}' \
       -e '/use POSIX/ause Getopt::Std;' msggen.pl

Install OpenJade by running the following commands:

export CXXFLAGS="$CXXFLAGS -fno-lifetime-dse"            &&
./configure --prefix=/usr                                \
            --mandir=/usr/share/man                      \
            --enable-http                                \
            --disable-static                             \
            --enable-default-catalog=/etc/sgml/catalog   \
            --enable-default-search-path=/usr/share/sgml \
            --datadir=/usr/share/sgml/openjade-1.3.2   &&
make

This package does not come with a test suite.

Now, as the root user:

make install                                                   &&
make install-man                                               &&
ln -v -sf openjade /usr/bin/jade                               &&
ln -v -sf libogrove.so /usr/lib/libgrove.so                    &&
ln -v -sf libospgrove.so /usr/lib/libspgrove.so                &&
ln -v -sf libostyle.so /usr/lib/libstyle.so                    &&

install -v -m644 dsssl/catalog /usr/share/sgml/openjade-1.3.2/ &&

install -v -m644 dsssl/*.{dtd,dsl,sgm}              \
    /usr/share/sgml/openjade-1.3.2                             &&

install-catalog --add /etc/sgml/openjade-1.3.2.cat  \
    /usr/share/sgml/openjade-1.3.2/catalog                     &&

install-catalog --add /etc/sgml/sgml-docbook.cat    \
    /etc/sgml/openjade-1.3.2.cat

Command Explanations

export CXXFLAGS=...: This command prevents segmentation faults when the package is compiled with gcc-6.1.

make install-man: This command installs the openjade man page.

--disable-static: This switch prevents the building of the static library.

--enable-http: This switch adds support for HTTP.

--enable-default-catalog=/etc/sgml/catalog: This switch sets the path to the centralized catalog.

--enable-default-search-path: This switch sets the default value of SGML_SEARCH_PATH.

--datadir=/usr/share/sgml/openjade-1.3.2: This switch puts data files in /usr/share/sgml/openjade-1.3.2 instead of /usr/share.

ln -v -sf ...: These commands create the Jade equivalents of OpenJade executables and libraries.

Configuring OpenJade

Configuration Information

As the root user:

echo "SYSTEM \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\" \
    \"/usr/share/xml/docbook/xml-dtd-4.5/docbookx.dtd\"" >> \
    /usr/share/sgml/openjade-1.3.2/catalog

This configuration is only necessary if you intend to use OpenJade to process the BLFS XML files through DSSSL Stylesheets.

Contents

Installed Programs: openjade and the Jade equivalent symlink, jade
Installed Libraries: libogrove.so, libospgrove.so, libostyle.so, and the Jade equivalent symlinks: libgrove.so, libspgrove.so, and libstyle.so
Installed Directory: /usr/share/sgml/openjade-1.3.2

Short Descriptions

openjade

is a DSSSL engine used for transformations.

jade

is a symlink to openjade.

Last updated on 2017-02-19 14:24:01 -0800

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-8.0 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, docbook-4.5, OpenSP-1.5.2 and OpenJade-1.3.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/docbook-dsssl

Installation of DocBook DSSSL Stylesheets

If you downloaded the documentation, run:

tar -xf ../docbook-dsssl-doc-1.79.tar.bz2 --strip-components=1

Install DocBook DSSSL Stylesheets by running the following commands as the root user:

install -v -m755 bin/collateindex.pl /usr/bin                      &&
install -v -m644 bin/collateindex.pl.1 /usr/share/man/man1         &&
install -v -d -m755 /usr/share/sgml/docbook/dsssl-stylesheets-1.79 &&
cp -v -R * /usr/share/sgml/docbook/dsssl-stylesheets-1.79          &&

install-catalog --add /etc/sgml/dsssl-docbook-stylesheets.cat \
    /usr/share/sgml/docbook/dsssl-stylesheets-1.79/catalog         &&

install-catalog --add /etc/sgml/dsssl-docbook-stylesheets.cat \
    /usr/share/sgml/docbook/dsssl-stylesheets-1.79/common/catalog  &&

install-catalog --add /etc/sgml/sgml-docbook.cat              \
    /etc/sgml/dsssl-docbook-stylesheets.cat

Command Explanations

The above commands create an installation script for this package.

Testing the DocBook SGML Toolchain (Optional)

The following commands will perform the necessary tests to confirm that your installed DocBook SGML toolchain will produce desired results. You must have the docbook-3.1, docbook-4.5, OpenSP-1.5.2 and OpenJade-1.3.2 packages installed and perform the tests as the root user.

All tests will be performed from the /usr/share/sgml/docbook/dsssl-stylesheets-1.79/doc/testdata directory as the root user:

cd /usr/share/sgml/docbook/dsssl-stylesheets-1.79/doc/testdata

The first test should produce no output to stdout (your screen) and create a file named jtest.rtf in the current directory:

openjade -t rtf -d jtest.dsl jtest.sgm

The next test should return only the following line to stdout: onsgmls:I: "OpenSP" version "1.5.2"

onsgmls -sv test.sgm

The next test should produce no output to stdout and create a file named test.rtf in the current directory:

openjade -t rtf \
    -d /usr/share/sgml/docbook/dsssl-stylesheets-1.79/print/docbook.dsl \
    test.sgm

The last test should produce no output to stdout and create a file named c1.htm in the current directory:

openjade -t sgml \
    -d /usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/docbook.dsl \
    test.sgm

Finally, clean up:

rm jtest.rtf test.rtf c1.htm

Contents

Installed Program: collateindex.pl
Installed Libraries: None
Installed Files: DSSSL stylesheets
Installed Directory: /usr/share/sgml/docbook/dsssl-stylesheets-1.79

Short Descriptions

collateindex.pl

is a Perl script that creates a DocBook index from raw index data.

Last updated on 2017-02-15 14:01:44 -0800

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-8.0 platform.

Package Information

Additional Downloads

DocBook-utils Dependencies

Required

OpenJade-1.3.2, docbook-dsssl-1.79, and docbook-3.1

Optional (Runtime Dependencies Only)

SGMLSpm-1.1 (for conversion to man and texinfo), and Lynx-2.8.8rel.2 or Links-2.14 or w3m-0.5.3 (for conversion to ASCII text)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/docbook-utils

Installation of DocBook-utils

Install DocBook-utils by running the following commands:

patch -Np1 -i ../docbook-utils-0.6.14-grep_fix-1.patch &&
sed -i 's:/html::' doc/HTML/Makefile.in                &&

./configure --prefix=/usr --mandir=/usr/share/man      &&
make

This package does not come with a test suite.

Now, as the root user:

make docdir=/usr/share/doc install

Many packages use an alternate name for the DocBook-utils scripts. If you wish to create these alternate names, use the following command as the root user:

for doctype in html ps dvi man pdf rtf tex texi txt
do
    ln -svf docbook2$doctype /usr/bin/db2$doctype
done

Note

The jw script uses the which command to locate required utilities. You must install Which-2.21 before attempting to use any of the DocBook-utils programs.

Command Explanations

patch -Np1 -i ../docbook-utils-0.6.14-grep_fix-1.patch: This patch corrects the syntax in the jw (Jade Wrapper) script which is at the heart of much db2* processing, so that the current version of Grep will not reject it.

sed -i 's:/html::' doc/HTML/Makefile.in: This command changes the installation directory of the HTML documents.

docdir=/usr/share/doc: This option is placed on the make install line because is is not recognized by configure.

Contents

Installed Programs: docbook2dvi, docbook2html, docbook2man, docbook2pdf, docbook2ps, docbook2rtf, docbook2tex, docbook2texi, docbook2txt, jw, and sgmldiff
Installed Libraries: None
Installed Directories: /usr/share/doc/docbook-utils-0.6.14 and /usr/share/sgml/docbook/utils-0.6.14
Installed Symlinks: db2dvi, db2html, db2man, db2pdf, db2ps, db2rtf, db2tex, db2texi, and db2txt

Short Descriptions

docbook2*

are simple one-line wrapper scripts to jw. They are provided as easy-to-remember names used to convert DocBook or other SGML files to the respective format.

db2*

are symlinks pointing at the respectively named docbook2* commands, created to satisfy some program's use of these names.

jw

is a script used to convert DocBook or other SGML files to various output formats. It hides most of OpenJade's complexity and adds comfortable features.

sgmldiff

is used to compare two SGML files and only return the differences in the markup. This is especially useful to compare files that should be identical except for language differences in the content.

Last updated on 2017-02-19 14:24:01 -0800

Chapter 51. 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 XML DTD

The DocBook 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-8.0 platform.

Package Information

DocBook XML DTD Dependencies

Required

libxml2-2.9.4, sgml-common-0.6.3, and UnZip-6.0

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/docbook-xml

Installation of DocBook XML DTD

Note

The package source is distributed in zip format and requires unzip. You should create a directory and change to that directory before unzipping the file to ease the removal of the source files after the package has been installed.

Install DocBook XML DTD by running the following commands as the root user:

install -v -d -m755 /usr/share/xml/docbook/xml-dtd-4.5 &&
install -v -d -m755 /etc/xml &&
chown -R root:root . &&
cp -v -af docbook.cat *.dtd ent/ *.mod \
    /usr/share/xml/docbook/xml-dtd-4.5

Create (or update) and populate the /etc/xml/docbook catalog file by running the following commands as the root user:

if [ ! -e /etc/xml/docbook ]; then
    xmlcatalog --noout --create /etc/xml/docbook
fi &&
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD DocBook XML V4.5//EN" \
    "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD DocBook XML CALS Table Model V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/calstblx.dtd" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/soextblx.dtd" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ELEMENTS DocBook XML Information Pool V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/dbpoolx.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ELEMENTS DocBook XML Document Hierarchy V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/dbhierx.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ELEMENTS DocBook XML HTML Tables V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/htmltblx.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Notations V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/dbnotnx.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Character Entities V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/dbcentx.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "public" \
    "-//OASIS//ENTITIES DocBook XML Additional General Entities V4.5//EN" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5/dbgenent.mod" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "rewriteSystem" \
    "http://www.oasis-open.org/docbook/xml/4.5" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5" \
    /etc/xml/docbook &&
xmlcatalog --noout --add "rewriteURI" \
    "http://www.oasis-open.org/docbook/xml/4.5" \
    "file:///usr/share/xml/docbook/xml-dtd-4.5" \
    /etc/xml/docbook

Create (or update) and populate the /etc/xml/catalog catalog file by running the following commands as the root user:

if [ ! -e /etc/xml/catalog ]; then
    xmlcatalog --noout --create /etc/xml/catalog
fi &&
xmlcatalog --noout --add "delegatePublic" \
    "-//OASIS//ENTITIES DocBook XML" \
    "file:///etc/xml/docbook" \
    /etc/xml/catalog &&
xmlcatalog --noout --add "delegatePublic" \
    "-//OASIS//DTD DocBook XML" \
    "file:///etc/xml/docbook" \
    /etc/xml/catalog &&
xmlcatalog --noout --add "delegateSystem" \
    "http://www.oasis-open.org/docbook/" \
    "file:///etc/xml/docbook" \
    /etc/xml/catalog &&
xmlcatalog --noout --add "delegateURI" \
    "http://www.oasis-open.org/docbook/" \
    "file:///etc/xml/docbook" \
    /etc/xml/catalog

Configuring DocBook XML DTD

Config Files

/etc/xml/catalog, /etc/xml/docbook

Configuration Information

The above installation creates the files and updates the catalogs. In order to install ScrollKeeper or 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

files contain components of the document type definition that are sourced into the DTD files.

ENT files

files contain lists of named character entities allowed in HTML.

Last updated on 2017-02-15 16:04:09 -0800

docbook-xsl-1.79.1

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-8.0 platform.

Package Information

Additional Downloads

Optional documentation

DocBook XSL Stylesheets Dependencies

Recommended
Optional

apache-ant-1.10.1 (to produce “webhelp” documents), libxslt-1.1.29 (or any other XSLT processor, to process Docbook documents), Python-2.7.13 or Python-3.6.0 (to use “extensions”), Ruby-2.4.0 (to utilize the “epub” stylesheets), Zip-3.0 (to produce “epub3” documents), and Saxon6 and Xerces2 Java (used with apache-ant-1.10.1 to produce “webhelp” documents)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/docbook-xsl

Installation of DocBook XSL Stylesheets

If you downloaded the optional documentation tarball, unpack it with the following command:

tar -xf ../docbook-xsl-doc-1.79.1.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-1.79.1 &&

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.1 &&

ln -s VERSION /usr/share/xml/docbook/xsl-stylesheets-1.79.1/VERSION.xsl &&

install -v -m644 -D README \
                    /usr/share/doc/docbook-xsl-1.79.1/README.txt &&
install -v -m644    RELEASE-NOTES* NEWS* \
                    /usr/share/doc/docbook-xsl-1.79.1

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-1.79.1

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:

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://docbook.sourceforge.net/release/xsl/1.79.1" \
           "/usr/share/xml/docbook/xsl-stylesheets-1.79.1" \
    /etc/xml/catalog &&

xmlcatalog --noout --add "rewriteURI" \
           "http://docbook.sourceforge.net/release/xsl/1.79.1" \
           "/usr/share/xml/docbook/xsl-stylesheets-1.79.1" \
    /etc/xml/catalog &&

xmlcatalog --noout --add "rewriteSystem" \
           "http://docbook.sourceforge.net/release/xsl/current" \
           "/usr/share/xml/docbook/xsl-stylesheets-1.79.1" \
    /etc/xml/catalog &&

xmlcatalog --noout --add "rewriteURI" \
           "http://docbook.sourceforge.net/release/xsl/current" \
           "/usr/share/xml/docbook/xsl-stylesheets-1.79.1" \
    /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 Programs: None
Installed Libraries: None
Installed Directories: /usr/share/xml/docbook/xsl-stylesheets-1.79.1 and /usr/share/doc/docbook-xsl-1.79.1

Last updated on 2017-02-14 19:04:01 -0800

itstool-2.0.2

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-8.0 platform.

Package Information

Itstool Dependencies

Required

docbook-xml-4.5 and Python-2.7.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/itstool

Installation of itstool

Install itstool 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: itstool
Installed Libraries: None
Installed Directory: /usr/share/itstool

Short Descriptions

itstool

is used to create translated XML files.

Last updated on 2017-02-14 19:04:01 -0800

xmlto-0.0.28

Introduction to xmlto

The xmlto is a front-end to an XSL toolchain. It chooses an appropriate stylesheet for the conversion you want and applies it using an external XSL-T processor. It also performs any necessary post-processing.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

xmlto Dependencies

Required

docbook-xml-4.5, docbook-xsl-1.79.1, and libxslt-1.1.29

Optional (for DVI, PDF, and postscript backend post-processing)

fop-2.1, dblatex, and PassiveTeX

Optional (for text backend post-processing)

One of Links-2.14, Lynx-2.8.8rel.2, w3m-0.5.3, or ELinks

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xmlto

Installation of xmlto

Install xmlto by running the following commands:

LINKS="/usr/bin/links" \
./configure --prefix=/usr &&

make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

LINKS="/usr/bin/links": This environment variable fixes a bug causing xmlto to think that links command is the same as elinks. Setting this variable does not cause problem if links is not installed, unless you have ELinks installed, and wishes to use it for text backend post-processing, in which case, remove it.

Contents

Installed Programs: xmlif and xmlto
Installed Libraries: None
Installed Directory: /usr/share/xmlto

Short Descriptions

xmlif

is a conditional processing instructions for XML.

xmlto

applies an XSL stylesheet to an XML document.

Last updated on 2017-02-15 16:04:09 -0800

Chapter 52. PostScript

This chapter includes applications that create, manipulate or view PostScript files and create or view Portable Document Format PDF files.

a2ps-4.14

Introduction to a2ps

a2ps is a filter utilized mainly in the background and primarily by printing scripts to convert almost every input format into PostScript output. The application's name expands appropriately to “all to PostScript”.

This package is known to build and work properly using an LFS-8.0 platform.

Caution

a2ps 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.6.8 instead of a2ps for converting UTF-8 encoded text to PostScript.

Package Information

Additional Downloads

a2ps Dependencies

Recommended
Optional

ghostscript-9.20, libpaper-1.1.24+nmu5, texlive-20160523b (or install-tl-unx) X Window System, Adobe Reader, and Ghostview

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/A2PS

Installation of a2ps

Install a2ps by running the following commands:

autoconf &&
sed -i -e "s/GPERF --version |/& head -n 1 |/" \
       -e "s|/usr/local/share|/usr/share|" configure &&

./configure --prefix=/usr  \
    --sysconfdir=/etc/a2ps \
    --enable-shared        \
    --with-medium=letter   &&
make                       &&
touch doc/*.info

To test the results, issue: make check. The printers.tst test will fail, as there is no default test printer. The styles.tst may also fail, as the tests report some inconsistencies between the generated postscript and the reference sets. This is caused by version number differences between the postscript test files and those generated by the tests — these do not affect the operation of the program and can be ignored.

Now, as the root user:

make install

If desired, install the downloaded i18n-fonts by running the following commands as the root user:

tar -xf ../i18n-fonts-0.1.tar.bz2 &&
cp -v i18n-fonts-0.1/fonts/* /usr/share/a2ps/fonts               &&
cp -v i18n-fonts-0.1/afm/* /usr/share/a2ps/afm                   &&
pushd /usr/share/a2ps/afm    &&
  ./make_fonts_map.sh        &&
  mv fonts.map.new fonts.map &&
popd

Command Explanations

autoconf: This command is used to recreate the configure script. This is required because there is an issue in the mktime test which causes the configure script to hang for 60 seconds and then report that there is no working mktime function.

sed -i "s/GPERF --version |/& head -n 1 |/" configure: This fixes a bug in the handling of the version output of gperf.

sed -i "s|/usr/local/share|/usr/share|" configure: This command modifies the configure script to search for Ghostscript fonts at the location where they were installed by the BLFS instructions.

--sysconfdir=/etc/a2ps: Configuration data is installed in /etc/a2ps instead of /usr/etc.

--enable-shared: This switch enables building the dynamic liba2ps library.

--with-medium=letter: This switch changes the default paper format to US letter. It can either be given here or set in /etc/a2ps/a2ps-site.cfg after installation. The default is A4, but there are several other options, in particular: A4dj or letterdj are good settings for HP Deskjet and other printers that need wider paper-handling margins. See /etc/a2ps/a2ps.cfg after installation.

touch doc/*.info: This command avoids trying to regenerate the info files. This is an older package and the current .texi files will produce errors preventing make install from working properly.

Configuring a2ps

Config Files

/etc/a2ps/a2ps.cfg, /etc/a2ps/a2ps-site.cfg

Configuration Information

Information about configuring a2ps can be found in the comments contained in the above files, and also by running info a2ps.

Contents

Installed Programs: a2ps, card, composeglyphs, fixnt, fixps, ogonkify, pdiff, psmandup, psset, and texi2dvi4a2ps
Installed Libraries: liba2ps.{so,a} and filter data
Installed Directories: /etc/a2ps and /usr/share/a2ps

Short Descriptions

a2ps

is a filter, utilized primarily by printing scripts, that converts standard input or supported files to PostScript.

card

prints a reference card of a given program's options.

composeglyphs

creates a composite font program.

fixnt

is supposed to fix the problems in the PostScript files generated by the Microsoft PostScript driver under Windows NT (3.5 and 4.0).

fixps

tries to fix common PostScript problems that break postprocessing.

ogonkify

provides international support for Postscript by performing various munging of PostScript files related to printing in different languages.

pdiff

produces a pretty comparison between files.

psmandup

tries to produce a version of a given PostScript file to print in manual duplex.

psset

produces a version of a given PostScript file with a protected call to the PostScript operator 'setpagedevice'. Typical use is making a file print duplex, or on the manual tray, etc.

texi2dvi4a2ps

compiles Texinfo and LaTeX files to DVI or PDF

Last updated on 2017-02-21 14:52:57 -0800

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-8.0 platform.

Caution

Enscript cannot convert UTF-8 encoded text to PostScript. The issue is discussed in detail in the Needed Encoding Not a Valid Option section of the Locale Related Issues page. The solution is to use paps-0.6.8, instead of Enscript, for converting UTF-8 encoded text to PostScript.

Package Information

Enscript Dependencies

Optional

texlive-20160523b (or install-tl-unx)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Enscript

Installation of Enscript

Install Enscript by running the following commands:

./configure --prefix=/usr              \
            --sysconfdir=/etc/enscript \
            --localstatedir=/var       \
            --with-media=Letter &&
make &&

pushd docs &&
  makeinfo --plaintext -o enscript.txt enscript.texi &&
popd

If you have texlive-20160523b installed, you can create Postscript and PDF documentation by issuing: make -C docs ps pdf.

To test the results, issue: make check.

Now, as the root user:

make install &&

install -v -m755 -d /usr/share/doc/enscript-1.6.6 &&
install -v -m644    README* *.txt docs/*.txt \
                    /usr/share/doc/enscript-1.6.6

If you built Postscript and PDF documentation, install it using the following command as the root user:

install -v -m644 docs/*.{dvi,pdf,ps} \
                 /usr/share/doc/enscript-1.6.6

Command Explanations

--sysconfdir=/etc/enscript: This switch puts configuration data in /etc/enscript instead of /usr/etc.

--localstatedir=/var: This switch sets the directory for runtime data to /var instead of /usr/var.

--with-media=Letter: This switch sets the medium format to letter size instead of the A4 default.

Contents

Installed Programs: diffpp, enscript, mkafmmap, over, sliceprint, and states
Installed Libraries: None
Installed Directories: /etc/enscript, /usr/share/doc/enscript-1.6.6, and /usr/share/enscript

Short Descriptions

diffpp

converts diff output files to a format suitable to be printed with enscript.

enscript

is a filter, used primarily by printing scripts, that converts ASCII text files to PostScript, HTML, RTF, ANSI and overstrikes.

mkafmmap

creates a font map from a given file.

over

is a script which calls enscript and passes the correct parameters to create overstriked fonts.

sliceprint

slices documents with long lines.

states

is an awk-like text processing tool with some state machine extensions. It is designed for program source code highlighting and for similar tasks where state information helps input processing.

Last updated on 2017-02-19 11:32:33 -0800

PSUtils-p17

Introduction to PSUtils

PSUtils is a set of utilities to manipulate PostScript files.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/psutils

Installation of PSUtils

Install PSUtils by running the following commands:

sed 's@/usr/local@/usr@g' Makefile.unix > Makefile &&
make

This package does not come with a test suite.

Now, as the root user:

make install

Command Explanations

sed 's@/usr/local@/usr@g' Makefile.unix > Makefile: This command creates a Makefile that installs the program to the /usr prefix instead of the /usr/local prefix.

Contents

Installed Programs: epsffit, extractres, fixdlsrps, fixfmps, fixmacps, fixpsditps, fixpspps, fixscribeps, fixtpps, fixwfwps, fixwpps, fixwwps, getafm, includeres, psbook, psmerge, psnup, psresize, psselect, pstops, and showchar
Installed Libraries: None
Installed Directories: /usr/share/psutils

Sometimes psnup and other utilities from this package produce PostScript files that don't conform to Adobe's DSC standard. CUPS may print them incorrectly. On the other hand, CUPS has builtin replacements for most commands from this package. For example, to print a document 2-up, you can issue this command:

lp -o number-up=2 <filename>

Short Descriptions

epsffit

fits an EPSF file to a given bounding box.

extractres

is a filter to extract resources from a PostScript document.

fix*

are filters of different kinds of documents to work with PSUtils.

getafm

create an AFM file for a PostScript font.

includeres

is a filter to include resources in a PostScript document.

psbook

rearranges pages into signatures.

psmerge

is a filter to merge several PostScript files into one.

psnup

puts multiple pages per physical sheet of paper.

psresize

alters the document paper size.

psselect

selects pages and page ranges.

pstops

performs general page rearrangements and selection.

showchar

outputs PostScript to draw a character with metric info.

Last updated on 2017-02-21 14:52:57 -0800

ePDFView-0.1.8

Introduction to ePDFView

ePDFView is a free standalone lightweight PDF document viewer using Poppler and GTK+ libraries. It is a good replacement for Evince as it does not rely upon GNOME libraries.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

ePDFView Dependencies

Required

GTK+-2.24.31 and Poppler-0.51.0

Recommended (mainly for Desktop Environments)
Optional

Cups-2.2.2

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/epdfview

Installation of ePDFView

Install ePDFView by running the following commands:

patch -Np1 -i ../epdfview-0.1.8-fixes-2.patch &&
./configure --prefix=/usr &&
make

This package does not come with a test suite.

Now, as the root user:

make install

For Desktop Environment users, further (optional) instructions are necessary for properly displaying epdfview.desktop in the menu. As root user:

for size in 24 32 48; do
  ln -svf ../../../../epdfview/pixmaps/icon_epdfview-$size.png \
          /usr/share/icons/hicolor/${size}x${size}/apps
done &&
unset size &&

update-desktop-database &&
gtk-update-icon-cache -t -f --include-image-data /usr/share/icons/hicolor

Command Explanations

patch -Np1 -i ../epdfview-0.1.8-fixes-2.patch The patch does four things: fixes compiling with glib-2.32 or greater, corrects red appearing as blue with recent versions of poppler, allows the application to compile when Cups-2.2.2 has been installed, and fixes the display of embedded png images.

Contents

Installed Program: epdfview
Installed Libraries: None
Installed Directory: /usr/share/epdfview

Short Descriptions

epdfview

is a Gtk+-2 program for viewing PDF documents.

Last updated on 2017-02-21 10:05:10 -0800

fop-2.1

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-8.0 platform.

Package Information

Additional Downloads

Recommended packages

fop Dependencies

Required

apache-ant-1.10.1

Optional

JUnit-4.11 (to run tests), X Window System (to run tests), JIMI SDK, XMLUnit, JAI Image I/O Tools, JEuclid, PMD (requires Jaxen), and Forrest (Forrest used only to build the documentation)

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/fop

Installation of fop

Ensure $JAVA_HOME is set correctly before beginning the build. To build the JIMI SDK and/or XMLUnit extension classes, ensure the corresponding .jar files can be found via the CLASSPATH environment variable.

Installing Java Advanced Imaging (JAI) API components

Install the JAI API components. As the root user:

case `uname -m` in
  i?86)
    tar -xf ../jai-1_1_3-lib-linux-i586.tar.gz
    cp -v jai-1_1_3/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/
    cp -v jai-1_1_3/lib/libmlib_jai.so             $JAVA_HOME/jre/lib/i386/
    ;;

  x86_64)
    tar -xf ../jai-1_1_3-lib-linux-amd64.tar.gz
    cp -v jai-1_1_3/lib/{jai*,mlibwrapper_jai.jar} $JAVA_HOME/jre/lib/ext/
    cp -v jai-1_1_3/lib/libmlib_jai.so             $JAVA_HOME/jre/lib/amd64/
    ;;
esac

Installing fop Components

The javadoc command coming with OpenJDK 8 has become much stricter than before regarding the conformance of the Javadoc comments in source code to HTML. The FOP documentation does not meet those standard, 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"/>' build.xml

Then, compile fop by running the following commands:

patch -Np1 -i ../fop-2.1-listNPE-1.patch &&

ant compile &&
ant jar-main &&
ant javadocs &&
mv build/javadocs .

To test the application, run ant junit-all. The hyphenation tests will fail. To see a list of other test targets, use ant -p. You must run the tests from an X-window using a GL-aware Xorg server or some of the JUnit tests will hang.

Now, as the root user:

install -v -d -m755 -o root -g root          /opt/fop-2.1 &&
cp -v  KEYS LICENSE NOTICE README            /opt/fop-2.1 &&
cp -vR build conf examples fop* javadocs lib /opt/fop-2.1 &&

ln -v -sf fop-2.1 /opt/fop

Command Explanations

sed -i ... build.xml: This adds two switches to the javadoc command, preventing some errors to occur when building the documentation.

patch -Np1 -i ../fop-2.1-listNPE-1.patch: This patch fixes a bug leading to segmentation faults when processing some inputs.

ant target: This reads the file build.xml and builds the target: compile compiles the java sources, jar-main generates jar archives, and javadocs builds the documentation.

ln -v -sf fop-2.1 /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 your personal or system-wide profile with the following:

PATH=$PATH:/opt/fop

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.1

Short Descriptions

fop

is a wrapper script to the java command which sets up the fop environment and passes the required parameters.

fop.jar

contains all the fop Java classes.

Last updated on 2017-02-23 06:49:09 -0800

MuPDF-1.10a

Introduction to MuPDF

MuPDF is a lightweight PDF and XPS viewer.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Additional Downloads

MuPDF Dependencies

Required

Xorg Libraries

Recommended
Optional

OpenSSL-1.0.2k, xdg-utils-1.1.1 (runtime), GLFW, and jbig2dec

Required (runtime)

X Window System

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/mupdf

Installation of MuPDF

Install MuPDF by running the following commands:

rm -rf thirdparty/curl     &&
rm -rf thirdparty/freetype &&
rm -rf thirdparty/harfbuzz &&
rm -rf thirdparty/jpeg     &&
rm -rf thirdparty/openjpeg &&
rm -rf thirdparty/zlib     &&

sed '/OPJ_STATIC$/d' -i source/fitz/load-jpx.c &&

patch -Np1 -i ../mupdf-1.10a-shared_libs-1.patch &&

make build=release

This package does not come with a test suite.

Now, as the root user:

make prefix=/usr                      \
     build=release                    \
     docdir=/usr/share/doc/mupdf-1.10a \
     install                          &&
ln -sfv mupdf-x11-curl /usr/bin/mupdf

Command Explanations

sed '/OPJ_STATIC$/d' ... : Remove a switch, which prevents using shared libraries for openjpeg2.

ln -sfv mupdf-x11-curl /usr/bin/mupdf : Three mupdf executables are installed: mupdf-gl, mupdf-x11, and mupdf-x11-curl. This symbolic link allows to choose which one is used when running mupdf.

Contents

Installed Program: mujstest, mupdf(symlink), mupdf-gl, mupdf-x11, mupdf-x11-curl, muraster, mutool
Installed Libraries: libmupdf.so, libmupdfthird.so
Installed Directories: /usr/include/mupdf, /usr/share/doc/mupdf-1.10a

Short Descriptions

mujstest

is a test program for mupdf + javascript

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.

mupdf-x11-curl

same as mupdf, using an X Window renderer, with the capability of rendering web pages, using an “http://...” url.

muraster

transforms files in one of the formats displayable by mupdf into a graphic file.

mutool

deals with document files in various manners.

libmupdf.so

contains the mupdf API functions.

libmupdfthird.so

contains the third party libraries compiled for mudpf.

Last updated on 2017-02-19 14:24:01 -0800

paps-0.6.8

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-8.0 platform.

Package Information

paps Dependencies

Required

Pango-1.40.3

Optional

Doxygen-1.8.13

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/Paps

Installation of paps

Install paps by running the following commands:

./configure --prefix=/usr --mandir=/usr/share/man &&
make

To test the results, issue: src/test_libpaps > test.ps. View the output file in any available PostScript viewer and visually compare it to doxygen-doc/html/example-output.png in the source tree. The results of the output will be more robust with Dejavu fonts and some of the Chinese fonts and Japanese fonts.

Now, as the root user:

make install &&
install -v -m755 -d                 /usr/share/doc/paps-0.6.8 &&
install -v -m644 doxygen-doc/html/* /usr/share/doc/paps-0.6.8

Contents

Installed Program: paps
Installed Library: libpaps.a
Installed Directory: /usr/share/doc/paps-0.6.8

Short Descriptions

paps

is a text to PostScript converter that supports UTF-8 character encoding.

Last updated on 2017-02-21 14:52:57 -0800

Chapter 53. 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-20160523b which will install most of texlive, together with all of the supporting files. This almost-complete install can then be used to build the remaining parts of texlive: asymptote-2.39, biber-2.7 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/2016.

Also, please note that texlive is released annually, and updating from the previous year to the current year is no longer supported. If for some reason you wish to keep versions for multiple years, for most things you can mount the old or new system at /opt/texlive and fix up your PATH as necessary. However doing that will not preserve any changes in texmf-local and if you build from source and try to run a newer version of biber with an older version of biblatex it is unlikely to work.

Setting the PATH for TeX Live

Before starting to build TeX Live, set up your PATH so that the system can properly find the files. If you set up your login scripts as recommended in The Bash Shell Startup Files, update the needed paths by appending to the extrapaths.sh script. The programs are always installed in an <ARCH>-linux subdirectory and on 32-bit x86 this is always i386-linux. For x86_64 and i?86 we can generate this as $TEXARCH:

export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&

cat >> /etc/profile.d/extrapaths.sh << EOF

# Begin texlive addition

pathappend /opt/texlive/2016/texmf-dist/doc/man  MANPATH
pathappend /opt/texlive/2016/texmf-dist/doc/info INFOPATH
pathappend /opt/texlive/2016/bin/$TEXARCH

# End texlive addition

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-20160523b to begin installing from source.

Last updated on 2015-06-23 16:14:01 -0700

install-tl-unx

Introduction to TeX Live and its installer

The TeX Live package is a comprehensive TeX document production system. It includes TeX, LaTeX2e, ConTeXt, Metafont, MetaPost, BibTeX and many other programs; an extensive collection of macros, fonts and documentation; and support for typesetting in many different scripts from around the world.

This page is for people who wish to use the binary installer to provide the programs, the scripts, and a lot of supporting files and documentation. The installer is updated frequently, so its md5sum will change if it is newer than what is shown below. Newer versions of the installer are expected to work with these instructions, for so long as they install to a 2016/ directory.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Recommended
Recommended (at runtime)

As always with contributed binary software, it is possible that the required dependencies may change when the installer is updated.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/tl-installer

Binary Installation of TeX Live

The TeX Live set of programs with its supporting documents, fonts, and utilities is very large. The upstream maintainers recommend placing all files in a single directory structure. BLFS recommends /opt/texlive.

As with any other package, unpack the installer and change into its directory, install-tl-<CCYYMMDD>. This directory name changes when the installer is updated, so replace <CCYYMMDD> by the correct directory name.

Note

The distribution binaries installed below may use static linking for general linux system libraries. Additional libraries or interpreters as specified in the dependencies section do not need to be present during the install, but the programs that need them will not run until their specific dependencies have been installed.

With all contributed binary software, there may be a mismatch between the builder's toolchain and your hardware. In most of TeX this will probably not matter, but in uncommon corner cases you might hit problems. e.g. if your x86_64 processor does not support 3dnowext or 3dnow, the 2014-06-28 binary failed in conTeXt when running LuaTeX, although lualatex worked, as did the i686 binaries on the same machine. In such cases, the easiest solution is to install texlive from source.

Now, as the root user:

TEXLIVE_INSTALL_PREFIX=/opt/texlive ./install-tl

This command is interactive and allows selection or modification of platform, packages, directories, and other options. The full installation scheme will require about 4.2 gigabytes of disk space. The time to complete the download will depend on your internet connection speed and the number of packages selected.

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, e.g. because you are in New Zealand but the installer chooses to use an Australian mirror. The list of mirrors is at http://ctan.org/mirrors.

Contents

Installed Programs: Over 300 binaries and symlinks to scripts
Installed Libraries: None
Installed Directories: /opt/texlive

Short Descriptions

TeX programs

The programs included in TeX are too numerous to individually list. Please refer to the individual program HTML and PDF pages in the various html, man, or pdf files within the subdirectories of 2016/texmf-dist/. Using texdoc pdflatex ( replace pdflatex with the command name ) may also be useful.

Last updated on 2017-02-21 10:05:10 -0800

texlive-20160523b-source

Introduction to TeX Live from source

Most of TeX Live can be built from source without a pre-existing installation, but xindy (for indexing) needs working versions of latex and pdflatex when configure is run, and the testsuite and install for asy (for vector graphics) will fail if TeX has not already been installed. Additionally, biber is not provided within the texlive source.

All of those packages are dealt with on their own pages and can be built after installing this package. If you have not already done so, you should start at Setting the PATH for TeX Live so that the final commands to initialise the new installation will be found.

This package is known to build and work properly using an LFS-8.0 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, there is no realistic way to restrict which parts get installed.

Because of the size of this package, it is unlikely to be mirrored by BLFS mirrors. In case of difficulty, go to http://www.ctan.org/mirrors/ to find a more-accessible mirror.

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

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/texlive

Installation of TeX Live

Install TeX Live by running the following commands:

The shared libraries will be installed into a texlive directory. As the root user, add it to your /etc/ld.so.conf:

cat >> /etc/ld.so.conf << EOF
# Begin texlive 2016 addition

/opt/texlive/2016/lib

# End texlive 2016 addition
EOF

Note

From 2015 onwards, 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-20160523b-source-upstream_fixes-2.patch &&

mkdir texlive-build &&
cd texlive-build    &&

../configure                                        \
    --prefix=/opt/texlive/2016                      \
    --bindir=/opt/texlive/2016/bin/$TEXARCH         \
    --datarootdir=/opt/texlive/2016                 \
    --includedir=/opt/texlive/2016/include          \
    --infodir=/opt/texlive/2016/texmf-dist/doc/info \
    --libdir=/opt/texlive/2016/lib                  \
    --mandir=/opt/texlive/2016/texmf-dist/doc/man   \
    --disable-native-texlive-build                  \
    --disable-static --enable-shared                \
    --with-system-cairo                             \
    --with-system-fontconfig                        \
    --with-system-freetype2                         \
    --with-system-gmp                               \
    --with-system-graphite2                         \
    --with-system-harfbuzz                          \
    --with-system-icu                               \
    --with-system-libgs                             \
    --with-system-libpaper                          \
    --with-system-libpng                            \
    --with-system-mpfr                              \
    --with-system-pixman                            \
    --with-system-poppler                           \
    --with-system-xpdf                              \
    --with-system-zlib                              \
    --with-banner-add=" - BLFS" &&

make

To test the results, issue: make check A few tests may SKIP because kpathsea has not yet been installed.

Now, as the root user:

make install-strip &&
ldconfig &&
make texlinks &&
mkdir -pv /opt/texlive/2016/tlpkg/TeXLive/ &&
install -v -m644 ../texk/tests/TeXLive/* /opt/texlive/2016/tlpkg/TeXLive/

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-20160523b-texmf.tar.xz -C /opt/texlive/2016 --strip-components=1 &&
pushd /opt/texlive/2016 &&
patch -Np1 -i /sources/texlive-20160523b-texmf-upstream_fixes-1.patch &&
popd

Still as the root user, initialise the new system (the commands fmtutil-sys --all and mtxrun --generate will produce a lot of output):

mktexlsr &&
fmtutil-sys --all &&
mtxrun --generate

Now, or if returning here because you were advised, fix a new vulnerability. As the root user:

sed -i '/^mpost,/d' /opt/texlive/2016/texmf-dist/web2c/texmf.cnf &&
fmtutil-sys --all &&

You can now proceed to asymptote-2.39, biber-2.7 and / or xindy-2.5.1 if you wish to install them.

Command Explanations

patch -Np1 -i ../texlive-20160523b-source...: This fixes a segfault in upmendex which was corrected after the source was released and is included in the binary installer.

--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ... : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent..

--includedir=, --libdir= ... : these switches ensure that the libraries and include files will be within the directories for this year's texlive.

--disable-static: This switch prevents installation of static versions of the libraries.

--enable-shared: Use shared versions of libkpathsea, libptexenc, libsynctex, libtexlua52 and libtexluajit.

--with-system-...: Unless this parameter is used, the included versions of these libraries will be statically compiled into the programs which need them. If you decided not to install a recommended library, omit the corresponding switch.

--with-system-xpdf: Uniquely, this parameter has a non-standard meaning, it tells configure to use the system-installed poppler headers and library. Again, omit this if you have not installed poppler.

--without-x: use this if you do not have Xorg installed.

ldconfig: this has to be run here so that make texlinks can use kpsewhich.

make texlinks : this runs the texlinks.sh script to create symbolic links from formats to engines. In practice, several of the targets such as xetex are now separate binaries and for these it will report "file already exists".

tar -xf texlive-20160523b-texmf.tar.xz -C /opt/texlive/2016 --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.

patch -Np1 -i /sources/texlive-20160523b-texmf...: This fixes various problems in epstopdf which were found after the source was released and are included in the binary installer. Because this is applied to the installated texmf (to minimise disk space) it is necessary to point to /sources instead of using ../

install -v -m644 ../texk/tests/TeXLive/* /opt/texlive/2016/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 initialises the TeX formats, Metafont bases and Metapost mems.

mtxrun --generate: This initialise the ConTeXt system.

Contents

Installed Programs: Over 300 binaries and symlinks to scripts
Installed Libraries: libkpathsea.so, libptexenc.so, libsynctex.so, libtexlua52.so, libtexluajit.so
Installed Directories: /opt/texlive/2016/bin, /opt/texlive/2016/include, /opt/texlive/2016/lib, /opt/texlive/2016/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 2016/texmf-dist/. Using texdoc pdflatex ( replace pdflatex with the command name ) may also be useful.

libkpathsea.so

(kpathsearch) exists to look up a file in a list of directories and is used by kpsewhich.

libptexenc.so

is a library for Japanese pTeX (publishing TeX).

libsynctex.so

is the SyncTeX (Synchronize TeXnology) parser library.

libtexlua52.so

provides Lua 5.2, modified for use with LuaTeX.

libtexluajit.so

provides LuaJIT, modified for use with LuaJITTeX.

Last updated on 2017-02-16 20:33:09 -0800

asymptote-2.39

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.

This package is known to build and work properly using an LFS-8.0 platform.

Package Information

Required

Freeglut-3.0.0, ghostscript-9.20, texlive-20160523b

Recommended
Optional

FFTW, Gsl-2.3

Optional (at runtime, to use xasy)

Imaging which needs Imaging-1.1.7-freetype_fix-1.patch and has a build dependency of Python-2.7.13 (re-) compiled against Tk-8.6.6 to provide _tkinter.so

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/asymptote

Installation of asymptote

Install asymptote by running the following commands:

export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&
export CFLAGS="-g -O2" &&
./configure --prefix=/opt/texlive/2016 \
 --bindir=/opt/texlive/2016/bin/$TEXARCH \
 --datarootdir=/opt/texlive/2016/texmf-dist \
 --infodir=/opt/texlive/2016/texmf-dist/doc/info \
 --libdir=/opt/texlive/2016/texmf-dist \
 --mandir=/opt/texlive/2016/texmf-dist/doc/man \
 --enable-gc=system \
 --with-latex=/opt/texlive/2016/texmf-dist/tex/latex \
 --with-context=/opt/texlive/2016/texmf-dist/tex/context/third &&
unset CFLAGS &&
make

To test the results, issue: make check.

Now, as the root user:

make install

Command Explanations

export CFLAGS="-g -O2": by default CXXFLAGS of -g -O2 and CFLAGS of -g -O3 are used, but the CFLAGS follow the CXXFLAGS and therefore override them. With gcc-6.3.0, using -O3 here breaks the build. If you normally remove '-g' in your own CFLAGS and CXXFLAGS you can do that here.

--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ... : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent..

Exceptionally, asymptote will create an asymptote/ subdirectory for asymptote.info even though the asy-faq.info file will be in the main texlive info/ directory. Both files will be found by info.

--libdir=/opt/texlive/2016/texmf-dist;: This parameter ensures that the asymptote directory will similarly overwrite any files installed by install-tl-unx.

--enable-gc=system: this ensures that the system version of libgc.so will be used instead of the version shipped with this package.

--with-latex= ... --with-context=: These switches ensure that style files and a tex file will be installed into the texlive directories instead of creating a texmf-local directory for them.

Contents

Installed Programs: asy, xasy
Installed Libraries: None
Installed Directory: /opt/texlive/2016texmf-dist/asymptote, /opt/texlive/2016/doc/asymptote, /opt/texlive/2016/info/asymptote

Short Descriptions

asy

is a vector graphics program.

xasy

is a Python script providing the preliminary GUI for asy. It can be used for final adjustments of an existing asy file.

Last updated on 2017-02-16 20:33:09 -0800

biber-2.7

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-8.0 platform.

Package Information

Note

The biber source tarball shown above downloads with the correct name, biber-2.7.tar.gz, if using a browser such as Firefox. If you prefer to use a command line program such as wget, you normally would obtain v2.7.tar.gz. To obtain this package with the proper filename, run:

wget -c https://github.com/plk/biber/archive/v2.7.tar.gz \
     -O biber-2.7.tar.gz

.

Required Additional Download

Biber Dependencies

Required

autovivification-0.16 Business::ISBN-3.003 Business::ISMN-1.131 Business::ISSN-1.002 Class::Accessor-0.34 Data::Compare-1.25 Data::Dump-1.23 Data::Uniqid-0.12 DateTime::Calendar::Julian-0.04 DateTime::Format::Builder-0.81 Encode::EUCJPASCII-0.03 Encode::HanExtra-0.23 Encode::JIS2K-0.03 File::Slurp-9999.19 IPC::Run3-0.048 Lingua::Translit-0.26 List::AllUtils-0.14 List::MoreUtils-0.416 Log::Log4perl-1.48 LWP::Protocol::https-6.06 Module::Build-0.4220 Regexp::Common-2016060801 Sort::Key-1.33 Text::BibTeX-0.78 Text::CSV-1.91 Text::Roman-3.5 Unicode::Collate-1.19 Unicode::LineBreak-2016.003 XML::LibXML::Simple-0.97 XML::LibXSLT-1.95 XML::Writer-0.625 and texlive-20160523b (or install-tl-unx)

Note

This version of biber requires at least perl-5.24.0. If you are using an older version of perl you may prefer to install v2.5 - for that see the BLFS-7.10 book (that source is now in files/biblatex-biber/2.5/ instead of files/biblatex-biber/current/).

Optional

File::Which-1.21 and Test::Differences-0.64 to run the testsuite

Note

It is possible to install all missing dependencies automatically. But from perl-5.22.0 onwards, Module::Build-0.4220 is no longer part of the core perl distribution. And for Data::Uniqid-0.12 we have to patch it to skip over a test which always fails - that failing test may break the automatic install. To automatically install the remaining perl dependencies you can install those two modules first using alternate auto installation instructions. then run perl ./Build.PL and when it prompts you, become the root user and run ./Build installdeps

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/biber

Installation of Biber

Install Biber by running the following commands:

perl ./Build.PL &&
./Build

To test the results, enter: ./Build test

Now, as the root user:

tar -xf ../biblatex-3.7.tds.tgz -C /opt/texlive/2016/texmf-dist &&
texhash &&
./Build install

Command Explanations

tar -xf biblatex-3.7.tds.tar.gz -C /opt/texlive/2016/texmf-dist: this installs the new biblatex files over those installed by texlive.

texhash : this updates the file hash tables (otherwise known as the file name database).

Contents

Installed Programs: biber
Installed Library: None
Installed Directory: /usr/lib/perl5/site_perl/5.*{,/<arch>-linux/auto}/Biber

Short Descriptions

biber

is used for producing bibliographies in LaTeX documents.

Last updated on 2017-02-19 03:25:43 -0800

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, 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-8.0 platform.

Package Information

Required Additional Downloads

Xindy Dependencies

Required

Clisp-2.49, texlive-20160523b

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/xindy

Installation of xindy

Install xindy by running the following commands:

export TEXARCH=$(uname -m | sed -e 's/i.86/i386/' -e 's/$/-linux/') &&

sed -i "s/ grep -v '^;'/ awk NF/" make-rules/inputenc/Makefile.in &&

patch -Np1 -i ../xindy-2.5.1-upstream_fixes-1.patch &&

./configure --prefix=/opt/texlive/2016              \
            --bindir=/opt/texlive/2016/bin/$TEXARCH \
            --datarootdir=/opt/texlive/2016         \
            --includedir=/usr/include               \
            --libdir=/opt/texlive/2016/texmf-dist   \
            --mandir=/opt/texlive/2016/texmf-dist/doc/man &&

make LC_ALL=POSIX

This package does not have a testsuite.

Now, as the root user:

make install

Command Explanations

sed -i "s/ grep -v '^;'/ awk NF/" ...: The build sorts files in latin{1..3} encodings to create latin.xdy, and unicode versions of these to create utf8.xdy after using grep -v '^;' to remove blank lines. With grep-2.23 any data not in the expected encoding is treated as binary, resulting in a useless file. This command uses an alternative way of removing blank lines.

patch -Np1 -i ../xindy-2.5.1-upstream_fixes-1.patch: Xindy is now maintained at CTAN. This patch updates the source to match what is used for the 2016 texlive binary version ( but ignoring changes which were only made to allow for spaces in pathnames).

--prefix=, --bindir=, --datarootdir=, --infodir=, --mandir= ... : these switches ensure that the files installed from source will overwrite any corresponding files previously installed by install-tl-unx so that the alternative methods of installing texlive are consistent..

--includedir=/usr/include: This parameter ensures that the kpathsea headers from texlive-20160523b will be found.

make LC_ALL=POSIX: with the current version of coreutils it is essential to build xindy in the POSIX (or C) locale because in a UTF-8 locale the file latin.xdy will contain only a heading and then a line 'Binary file (standard input) matches' instead of the many lines of lisp merge-rule commands it ought to contain.

Contents

Installed Programs: tex2xindy, texindy, xindy
Installed Libraries: None
Installed Directory: /opt/texlive/2016/texmf-dist/xindy

Short Descriptions

tex2xindy

transforms a LaTeX index file into a xindy raw index file.

texindy

is a wrapper for xindy that turns on many LaTeX conventions by default.

xindy

creates a sorted and tagged index from a raw LaTeX index.

Last updated on 2017-02-16 20:33:09 -0800

Appendix A. Creative Commons License

Creative Commons Legal Code

Attribution-NonCommercial-ShareAlike 2.0

Important

CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.

  1. Definitions

    1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.

    2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.

    3. "Licensor" means the individual or entity that offers the Work under the terms of this License.

    4. "Original Author" means the individual or entity who created the Work.

    5. "Work" means the copyrightable work of authorship offered under the terms of this License.

    6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.

    7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.

  2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.

  3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

    1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;

    2. to create and reproduce Derivative Works;

    3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;

    4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works;

    The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Sections 4(e) and 4(f).

  4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

    1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any reference to such Licensor or the Original Author, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any reference to such Licensor or the Original Author, as requested.

    2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-NonCommercial-ShareAlike 2.0 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License.

    3. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.

    4. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.

    5. For the avoidance of doubt, where the Work is a musical composition:

      1. Performance Royalties Under Blanket Licenses. Licensor reserves the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work if that performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

      2. Mechanical Rights and Statutory Royalties. Licensor reserves the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions), if Your distribution of such cover version is primarily intended for or directed toward commercial advantage or private monetary compensation. 6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

    6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation.

  5. Representations, Warranties and Disclaimer

    UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.

  6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  7. Termination

    1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.

    2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

  8. Miscellaneous

    1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.

    2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.

    3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

    4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.

    5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.

Important

Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.

Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.

Creative Commons may be contacted at http://creativecommons.org/.

Appendix B. The MIT License

Copyright © 2001-2017 The BLFS Development Team

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Glossary

Acronyms

669

UNIS/Composer 669 Module

ABI

Application Binary Interface

ADSL

Asymmetric Digital Subscriber Line

AFS

Andrew File System

AIFF

Audio Interchange File Format

ALSA

Advanced Linux Sound Architecture

ANSI

American National Standards Institute

API

Application Programming Interface

APR

Apache Portable Runtime

ARP

Address Resolution Protocol

ASCII

American Standard Code for Information Interchange

ASN

Abstract Syntax Notation

ASF

Advanced Streaming Format

ATA

Advanced Technology Attachment

ATSC

Advanced Television Systems Committee

ATK

Accessibility ToolKit

AVI

Audio Video Interleave

AWT

Abstract Window Toolkit

BER

Basic Encoding Rules

BIND

Berkeley Internet Name Domain

BIOS

Basic Input/Output System

BLFS

Beyond Linux From Scratch

BMP

Bit MaP

CD

Compact Disk

CDDA

Compact Disc Digital Audio

CIFS

Common Internet File System

See Also SMB .

CMS

Cryptographic Message Syntax

CODEC

COmpression/DECompression module

CORBA

Common Object Request Broker Architecture

CPU

Central Processing Unit

CRD

Color Rendering Dictionary

CSA

Color Space Array

CSS (on DVD)

Contents Scrambling System

CSS

Cascading Style Sheets

CUPS

Common Unix Printing System

CVS

Concurrent Versions System

DAO

Disc At Once

DARPA

Directory Address Resolution Protocol Allocation

DEC

Digital Equipment Corporation

DER

Distinguished Encoding Rules

DES

Data Encryption Standard

DHCP

Dynamic Host Configuration Protocol

DICT

Dictionary Server Protocol (RFC 2229)

DIN

German Industrial Norm

DNS

Domain Name Service

DOS

Disk Operating System

DRI

Direct Rendering Infrastructure

DSC

Document Structuring Conventions

DSO

Dynamic Shared Objects

DSSSL

Document Style Semantics and Specification Language

DV

Digital Video

DVD

Digital Versatile Disk (also Digital Video Disk)

DVI

DeVice Independent

ELF

Executable and Linking Format

EPP

Enhanced Parallel Port

EPS

Encapsulated PostScript

ESD

Enlighten Sound Daemon

ESMTP

Extended Simple Mail Transfer Protocol

FAM

File Alteration Monitor

FAME

Fast Assembly Mpeg Encoder

FAQ

Frequently Asked Questions

FAX

Facsimile

FB

Frame Buffer

FHS

File Hierarchy Standard

FLAC

Free Lossless Audio CODEC

FO

Formatted Objects

FTP

File Transfer Protocol

GCC

GNU Compiler Collection

GDBM

GNU DataBase Manager

GDK

GTK+ Drawing Kit

GDM

GNOME Display Manager

GID

Group IDentity

GIF

Graphics Interchange Format

GLUT

OpenGL Utility Toolkit

GMP

GNU Multiple Precision Arithmetic

GNAT

GNU NYU Ada 9x Translator

GNOME

GNU Network Object Model Environment

GNU

GNU's Not Unix

GPL

General Public License

GPM

General Purpose Mouse

GSS

Generic Security Service

GSSAPI

Generic Security Service Application Programming Interface

GTK

GIMP ToolKit

GUI

Graphical User Interface

HFS

Hierarchical File System

HTML

HyperText Markup Language

HTTP

HyperText Transfer Protocol

HTTPS

HyperText Transfer Protocol Secured

HUP

Hang UP

IANA

Internet Assigned Numbers Authority

ICC

International Color Consortium

ICMP

Internet Control Message Protocol

IDE

Integrated Drive Electronics

Integrated Development Environment

IDL

Interface Definition Language

IJS

Ink Jet Systems

ILS

Internet Location Server

IMAP

Internet Message Access Protocol

IMON

Inode MONitor

IP

Internet Protocol

See Also TCP .

IPX

Internetwork Packet eXchange

IRC

Internet Relay Chat

ISDN

Integrated Services Digital Network

ISO

International Standards Organisation

ISP

Internet Service Provider

IT

ImpulseTracker Module

JAI

Java Advanced Imaging

JAR

Java ARchive

JDK

Java Development Kit

JFIF

JPEG File Interchange Format

JPEG

Joint Photographic Experts Group

KDC

Key Distribution Center

KDE

KDesktop Environment

LAME

Lame Ain't an MP3 Encoder

LAN

Local Area Network

LDAP

Lightweight Directory Access Protocol

LDIF

Lightweight Data Interchange Format

LFS

Linux From Scratch

LGPL

Library General Public License

LPR

Line PRinter

LZO

Lempel-Ziv-Oberhumer

LZW

Lempel-Ziv-Welch

MAC

Media Access Control

MCOP

Multimedia COmmunication Protocol

MCU

Multipoint Control Unit

MD

Message-Digest

MDA

Mail Delivery Agent

MED

MED/OctaMED Module

MIDI

Musical Instrument Digital Interface

MIF

Maker Interchange Format

MII

Media Independent Interface

MIME

Multipurpose Internet Mail Extensions

MIT

Massachusetts Institute of Technology

MNG

Multiple-image Network Graphics

MOD

ProTracker Module

MP3

MPEG-1 audio layer 3

MPEG

Moving Picture Experts Group

MSL

Magick Scripting Language

MTA

Mail Transport Agent

MTM

MultiTracker Module

MUA

Mail User Agent

NASM

Netwide ASseMbler

NNTP

Network News Transfer Protocol

NFS

Network File System

NIS

Network Information Service

NPTL

Native Posix Thread Library

NSPR

Netscape Portable Runtime

NSS

Network Security Services

NTP

Network Time Protocol

OAF

Object Activation Framework

ODBC

Open DataBase Connectivity

OMF

Open Metadata Framework

ORB

Object Request Broker

See Also CORBA .

ORDBMS

Object Relational Database Management System

OS

Operating System

OSF

Open Software Foundation

OSS

Open Sound System

PAM

Pluggable authentication Modules

PBM

Portable BitMap

PCI

Peripheral Component Interconnect

PCL

Printer Control Language

PCM

Pulse Code Modulation

PDC

Primary Domain Controller

PDF

Portable Document Format

PEAR

PHP Extension and Application Repository

PGM

Portable Grey Map

PGP

Pretty Good Privacy

PHP

PHP Hypertext Preprocessor

PIM

Personal Information Manager

PLIP

Parallel Line Internet Protocol

PNG

Portable Network Graphics

PO

Portable Object

POD

Plain Old Documentation

POP

Post Office Protocol

PPD

PostScript Printer Description

PPM

Portable Pixel Map

PPP

Point to Point Protocol

PPPoE

Point to Point Protocol over Ethernet

PS

PostScript

RADIUS

Remote Authentication Dial-In User Service

RAM

Random Access Memory

RARP

Reverse Address Resolution Protocol

RCS

Revision Control System

RFC

Request For Comments

RGB

Red Green Blue

RGBA

Red Green Blue Alpha

ROM

Read-Only Memory

RP

Roaring Penguin

RPC

Remote Procedure Call

RTC

Real Time Clock

RTP

Real Time Protocol

RW

Read Write

S3M

ScreamTracker Version 3 Module

S/MIME

Secure/MIME

SANE

Scanner Access Now Easy

SASL

Simple Authentication and Security Layer

SATA

Serial Advanced Technology Attachment

SBU

Standard Build Unit

SCSI

Small Computer System Interface

SDK

Software Development Kit

SGML

Standard Generalized Markup Language

SMART

Self Monitoring Analysis and Reporting Technology

SMB

Server Message Block

SMIL

Synchronized Multimedia Integration Language

SMTP

Simple Mail Transfer Protocol

SQL

Structured Query Language

SSH

Secure SHell

SSL

Secure Sockets Layer

SUID

Set User IDentity

SVG

Scalable Vector Graphics

SVGA

Super Video Graphics Array

TCL

Tool Command Language

TCP

Transmission Control Protocol

TGT

Ticket-Granting Ticket

TIFF

Tag(ged) Image File Format

TLS

Transport Layer Security

TTF

TrueType Font

TTS

Text To Speech

UCS

Universal Character Set

UDF

Universal Disk Format

UID

User IDentity

UDP

User Datagram Protocol

UI

User Interface

UML

Unified Modelling Language

URL

Uniform Resource Locator

USB

Universal Serial Bus

USR

Upstream Ready

UTF

UCS Transformation Format

UUCP

Unix-to-Unix Copy Protocol

VCD

Video Compact Disk

VESA

Video Electronics Standards Association

VGA

Video Graphics Array

VNC

Virtual Network Computer

VOB

Video OBject

VOIP

Voice Over IP

W3C

World Wide Web Consortium

WAV

Waveform Audio

WWW

World Wide Web

XDMCP

XDisplay Manager Control Protocol

XM

FastTracker Module

XML

eXtensible Markup Language

XSL

eXtensible Style Language

XSLT

eXtensible Style Language Transformation

XSM

X/Open System Management

XMMS

XMultiMedia System

YP

Yellow Pages

YUV

Luminance-Bandwidth-Chrominance

Index

Packages

Programs

Libraries

Kernel Configuration

Configuration Files

Bootscripts

Others