Slackware's Dobbs Tux with Pipe logo - not created by me
Dave's Slackware Package Blog

aaa_elflibs

Standard Linux libraries
Created: 2018-07-13

Snore.

The libraries in this package are (for the most part) truly essential to running any sort of Linux system. Just a couple examples:

  • libattr - edit "extended attributes" on filesystem objects (as in the command attr)

  • libbz2 - block-sorting file compression (as in command bzip2 and bunzip2)

  • libreadline - the standard "get a line of input from the user" function readline()

What’s interesting about this package is that (all?) of these libraries are also contained in their own Slackware packages, (typically bundled with the commands which use them). For example, let’s look at the three listed above:

$ slackpkg file-search libattr
[ installed ] - aaa_elflibs-14.2-x86_64-23
[ installed ] - attr-2.4.47-x86_64-1
$ slackpkg file-search libbz2
[ installed ] - aaa_elflibs-14.2-x86_64-23
[ installed ] - bzip2-1.0.6-x86_64-1
$ slackpkg file-search libreadline
[ installed ] - aaa_elflibs-14.2-x86_64-23
[ installed ] - readline-6.3-x86_64-2

Are there any exceptions (libraries contained only in aaa_elflibs)? I don’t know. You could write a script to find out.

If not, the package ultimately becomes completely redundant on a full Slackware install.

The advantage of having this package is it helps make it possible to install an extremely minimalistic Slackware system, something I’ve done before on machines with very limited file storage (first generation ASUS eeePC).

How it’s created

This package is generated from a SlackBuild script, aaa_elflibs.SlackBuild. The SlackBuild simply reads from four different lists of library files to include these files in the package’s archive file.

Of the four lists, the largest is named symlinks-to-tracked-libs and contains 65 library file names. It looks like this:

$ head symlinks-to-tracked-libs
# This file lists shared library symlinks for libraries we would
# like to keep copies of in the aaa_symlinks package.
/lib/libacl.so.1
/lib/libattr.so.1
/lib/libbz2.so.1
/lib/libbz2.so.1.0
/lib/libcap.so.2
/lib/libdm.so.0
/lib/libfuse.so.2

These are copied by the SlackBuild script into a package directory (creating the directory structure as needed so that the files end up in the correct place when the package is extracted at the root) and the package is built with the standard Slackware makepkg utility.

As we can see in the above partial listing, shared libraries are installed in in /lib and numerous subdirectories.

There is no doinst.sh script, so it really is just a collection of shared library (.so) files (well, and the standard Slackware package description file (slack-desc)).