site  contact  subhomenews

Slackware package dependencies

June 08, 2019 — BarryK

Considering using Slackware binary packages for EasyOS, have run into a roadblock.

The Slackware package repositories have a file 'PACKAGES.TXT' that contains information about each package. For example:

PACKAGE NAME:  LibRaw-0.18.12-x86_64-1.txz
PACKAGE LOCATION: ./slackware64/l
PACKAGE SIZE (compressed): 360 K
PACKAGE SIZE (uncompressed): 2300 K
PACKAGE DESCRIPTION:
LibRaw: LibRaw (library for decoding raw digital photos)
LibRaw:
LibRaw: LibRaw is a library for reading RAW files obtained from digital
LibRaw: cameras (CRW/CR2, NEF, RAF, DNG, and others). It is based on the
LibRaw: source code of the dcraw utility.
LibRaw:
LibRaw: Homepage: http://www.libraw.org/
LibRaw:

Notice that it does not contain dependency information. It really really really should, but it doesn't. However, the Salix distribution, which is based on Slackware, does have dependency information, for example:

PACKAGE NAME:  LibRaw-0.17.2-x86_64-1.txz
PACKAGE LOCATION: ./slackware64/l
PACKAGE SIZE (compressed): 328 K
PACKAGE SIZE (uncompressed): 2130 K
PACKAGE REQUIRED: gcc,gcc-g++,jasper,lcms2,libjpeg-turbo
PACKAGE CONFLICTS:
PACKAGE SUGGESTS:
PACKAGE DESCRIPTION:
LibRaw: LibRaw (library for decoding raw digital photos)
LibRaw:
LibRaw: LibRaw is a library for reading RAW files obtained from digital
LibRaw: cameras (CRW/CR2, NEF, RAF, DNG, and others). It is based on the
LibRaw: source code of the dcraw utility.
LibRaw:
LibRaw: Homepage: http://www.libraw.org/
LibRaw:

So, how did Salix obtain that? Manually?

What we did back when building puppies from Slackware, such as Michael Amadio's Slacko, was use the 'PACKAGES.TXT' from the Salix repository. Fine, except that the Salix project is dormant. They haven't had a new release since 2016, built from Slackware 14.2. There is no Salix 'PACKAGES.TXT' for slackware60current.

I did a bit of digging, and it seems that Salix may have used "slapt-get" to add the dependency information to 'PACKAGES.TXT', as the Wikipedia explains:

https://en.wikipedia.org/wiki/Slapt-get

slapt-get does not provide dependency resolution for packages included within the Slackware distribution. It does, however, provide a framework for dependency resolution in Slackware compatible packages similar in fashion to the hand-tuned method APT utilizes.[5] Several package sources and Slackware based distributions take advantage of this functionality. Hard, soft, and conditional dependencies along with package conflicts and complementary package suggestions can be expressed using the slapt-get framework.

Adding dependency information requires no modification to the packages themselves. Rather, the package listing file, PACKAGES.TXT, is used to specify these relationships. This file is provided by Patrick Volkerding and is similar to the Packages.gz file in use by Debian. Several scripts are available to generate the PACKAGES.TXT file from a group of packages. The file format used by Patrick Volkerding is extended by adding a few extra lines per package. slapt-get then parses this file during source downloads. Typically, third party packages store the dependency information within the package itself for later extraction into the PACKAGES.TXT. The inclusion of this information within the Slackware package format does not inhibit the ability for Slackware pkgtools to install these packages. This information is silently ignored and discarded after the package is installed.

So, I either need to find an up-to-date 'PACKAGES.TXT' for slackware64-current (15.0 precursor), or use slapt-get to create it. 

EDIT 2019-06-08:
I should mention, I have read a couple of posts from Slackware developers, supporting the lack of dependency information in the PACKAGES.TXT file, or inside packages. The arguments seem to me to be shallow. There was one post criticizing third-party package managers that have introduced dependencies, such as slapt-get, but again, the arguments are not unbiased.

However, there was one valid criticism of third-party package managers that have package dependencies, that it does not work properly in the slackware*-current package repository. This is because the dependencies do not specify versions.

We used the PACKAGES.TXT from Salix, for Slackware 14.2, and un-versioned dependencies will work fine for a particular release. It means that I should wait until 15.0 is released, or at least until the package versions are frozen in slackware64-current. 

Tags: easy