Important Information

BLFS has more information regarding compilation, /usr vs /usr/local, boot scripts, etc. at https://linuxfromscratch.org/blfs/view/svn/introduction/important.html. Unlike this book, this would be a chapter in BLFS. A lot of that information has been omitted as this book is more linear and doesn't follow how BLFS follows. However, we will cover some bases here.

Book Order

GLFS can be great if you follow it right after the LFS vanilla or multilib books; however, it can be a pain to do if you have followed BLFS after LFS and are now getting around to doing GLFS. One such issue that can arise from this practice is packages may be detected via pkgconf, such as Glib, where a 64-bit only install is detected whilst trying to install a 32-bit package, leading to linker errors.

As such, it is recommended that you first follow the LFS vanilla or multilib books first, then GLFS right after. THEN you may follow BLFS and install the packages you are used to using.

Init System

This book doesn't have instructions for Systemd. It is meant for SysV LFS systems, but if you find or make your own bootscripts, you can use the instructions in this book on a system that has Runit or OpenRC. Systemd will take more work and the process involves checking https://linuxfromscratch.org/blfs/view/svn and compare the instructions for each package. There aren't many packages that require this process except ones that may need to be started as a service. dbus-1.14.10 is especially different so watch out for it if you are using Systemd. The reason for not using Systemd is that Systemd makes things more complicated, a lot of users use more simplistic init systems like SysV for their LFS system, and including instructions for both can result in two book versions which would be rather inconvenient.

Building software

Building software on GLFS is identical to how it's done in the BLFS books, along with having lib32 compilation instructions. It goes without saying firstmost that you should have MAKEFLAGS set to save yourself a lot of time. This is useful for the make utility to use the amount of threads that you both want and have.

export MAKEFLAGS='-jx'

Replace x with the amount of threads you have. You can check the amount of threads you have with:

grep processor /proc/cpuinfo
[Important]

Important

Make sure that you have enough RAM for your system! A general method is having 2.5G per thread that is thrown at make. For instance, if you want to use 6 threads, multiply 6 by 2.5 (which is 15), then make sure you have 15G of RAM. If you don't have that RAM, try and limit the threads you throw at make.

Next is compiling for 32-bit. There are many packages which will have a lib32 counterpart. If you just got done with a normal compilation of a package and wish to do a 32-bit compilation of that same package, make sure to clean the directory first:

make distclean

Or, if you made a build directory:

rm -rf build

Then proceed with the 32-bit compilation instructions.

Generally, the format of targetting 32-bit goes like this:

For ./configure:

CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=/usr/lib32/pkgconfig \
        ./configure --prefix=/usr --libdir=/usr/lib32             \
        --host=i686-pc-linux-gnu
make

make DESTDIR=$PWD/DESTDIR install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig

For meson:

mkdir -v build
cd build

CC="gcc -m32" CXX="g++ -m32" PKG_CONFIG_PATH=/usr/lib32/pkgconfig \
        meson setup .. --prefix=/usr --libdir=/usr/lib32
ninja

DESTDIR=$PWD/DESTDIR ninja install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig

For cmake:

export CFLAGS="-m32"
export CXXFLAGS="-m32"
export ASFLAGS="--32"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"

mkdir -v build
cd build

cmake .. -DCMAKE_INSTALL_PREFIX=/usr  \
         -DCMAKE_INSTALL_LIBDIR=lib32
make

make DESTDIR=$PWD/DESTDIR install
cp -vr DESTDIR/usr/lib32/* /usr/lib32
rm -rf DESTDIR
ldconfig
unset CFLAGS CXXFLAGS ASFLAGS PKG_CONFIG_PATH
[Note]

Note

After you do a DESTDIR installation, it is recommended to to use file on one of the libraries in DESTDIR/usr/lib32. An output of such a command for a 32-bit build of a library should be comparable to the following:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked

Note the 32-bit LSB shared object part. A 64-bit library would show as a 64-bit LSB shared object.