Latest version : 1.6.131213

Introduction

Compat32pkg is an automated tool for managing packages to format compat32 for Slackware-64 with AlienBob's multilib.

Its main purpose is to provide all the necessary for managing (converting,installing,upgrading, removing) of 32-bit part of the multilib. However, it can also be used for other packages which are part of Slackware-32 like firefox, seamonkey, jre.

Compat32pkg provides the following features:

  • Downloads, from a Slackware-32 mirror, of packages and converts them to format compat32.
  • Downloads, from a Slackware-32 mirror, of packages, converts them to format compat32, and installs the resulting packages.
  • Checks available updates, on a slackware-32 mirror, for a given subset of packages to format compat32.
  • Enumerates available updates, on a slackware-32 mirror, for a given subset of packages to format compat32.
  • Downloads, from a slacwkare-32 mirror, of available updates for a given subset of packages to format compat32, and converts them to format compat32.
  • Downloads, from a slacwkare-32 mirror, of available updates for a given subset of packages to format compat32, converts them to format compat32, and performs the upgrade.
  • Looks for packages, on a slackware-32 mirror, and prints informations about found packages.
  • Removes, in whole or part of installed compat32 packages.

Requirements

Compat32pkg requires :

  • To be installed on a 64-bit version of Slackware. Even if there's currently no multilib for Slackware S/390, support for this port has been integrated into compat32pkg, and this should work, I hope, flawlessly when time comes ...
  • User to be root.
  • convertpkg-compat32 from AlienBob's compat32-tools package. This package can be found here, and its management (i.e: install, update, remove) can be automated using multilibpkg.

Installation

The best way to do that is to grab the Slackware package here and install it like any other slackware package:

$ installpkg /tmp/compat32pkg-1.4.110408-noarch-3_SeB.tgz
Verifying package Verifying package compat32pkg-1.4.110408-noarch-3_SeB.tgz.
Installing package Installing package compat32pkg-1.4.110408-noarch-3_SeB.tgz:
PACKAGE DESCRIPTION::
# Compat32pkg is an automated tool for managing packages to format 
# compat32 for slackware-64 with AlienBob's multilib. Its main purpose 
# is to provide all the necessary for managing (converting,installing,
# upgrading, removing) of 32-bit part of the multilib. However, it can
# also be used for other packages which are part of slackware/32 like 
# firefox, seamonkey, jre.
#
# Homepage: http://sourceforge.net/projects/compat32pkg/
#           http://compat32pkg.sourceforge.net/
#
Executing install script for compat32pkg-1.4.110408-noarch-3_SeB.tgz.
Package compat32pkg-1.4.110408-noarch-3_SeB.tgz installed.

Once compat32pkg is installed, user should :

  • check for new configuration files (ie *.new) into /etc/compat32pkg. This is not needed when compat32pkg is installed for the first time.
  • check available updates for the configuration file for the layer-32 (ie /etc/compat32pkg/multilib-32bit-packages.lst), and, update this file as needed. For this, user has to use compat32pkg as below :
    $ compat32pkg --layer-32-config check-update
    $ compat32pkg --layer-32-config update

    Look at Checking updates, and upgrade, of the configuration file for the "layer-32" for more precision about --layer-32-config.

Configuration files

The Configuration script: /etc/compat32pkg/compat32pkg.conf

This script contains the following variables that users could overwrite when needed.

WORKDIR

This is required and must refer to the working directory used by compat32pkg to store its working data.

By default, WORKDIR is set to /var/lib/compat32pkg. As data stored into this directory are not, currently, re-used, it can be cleaned at any time, except, obviously, while running of compat32pkg.

SLACK32PKG_CACHE

This is required and must refer to the directory used to store packages downloaded from Slackware-32 mirrors.

By default, SLACK32PKG_CACHE is set to /var/cache/compat32pkg/slackware-32. To avoid waste of disk space, this directory will have to be cleaned periodically. This could be automated by executing compat32pkg in mode --clear-cache with slackware-32 as argument:

$ compat32pkg --clear-cache slackware-32
COMPAT32PKG_CACHE

This is required and must refer to the directory used to store packages converted to format compat32.

By default COMPAT32PKG_CACHE is set to /var/cache/compat32pkg/compat-32. To avoid waste of disk space, this directory will have to be cleaned periodically. This could be automated by executing compat32pkg in mode --clear-cache compat-32 as argument:

$ compat32pkg --clear-cache compat-32
DEFAULT_MIRROR

This is optional. When defined, it must refer to the Slackware-32 mirror that will be used by compat32pkg when user does not provide one on the command line. By default, DEFAULT_MIRROR is set to "". When defined, its value can be :

  • A local directory containing a valid Slackware-32 tree. In this case, the directory could contains only part of official Slackware-32 tree (without directories like /testing, /slackware/k,...) and the file CHECKSUMS.md5 at his root :
    DEFAULT_MIRROR=~/mirrors/slackware-13.0
  • The URL of a Slackware-32 mirror:
    DEFAULT_MIRROR=ftp://ftp.lip6.fr/pub/linux/distributions/slackware/slackware-13.0
  • The key (or alias), introduced by an "at symbol", of one of the mirrors given into the configuration file /etc/compat32pkg/mirrors:
    DEFAULT_MIRROR=@WorldWide-13.0
    DEFAULT_MIRROR=@DVD
PKGS_PRECEDENCE_ORDER

This is required. This must be an array containing the packages precedence order, from the most important to the least important, given by patterns of kind baseref.

The order given in this array allows to :

  • force installation of given packages in a given order. This is the case of the package aaa_elflibs which has to be installed before all others packages. Indeed, as this package has to be processed first when installing Slackware, it also has to be processed first in the case of the multilib. Otherwise, this might lead to downgrading some libraries as this is clearly explained here.
  • give the priority to the more recent/stable packages when running compat32pkg in mode: --convert, --install, --check-updates, --list-updates, --convert-updates, and --upgrade. This is the case with packages from patches/packages which are always more recent that those in slackware.

By default, PKGS_PRECEDENCE_ORDER is defined as below :

PKGS_PRECEDENCE_ORDER=( 
			"slackware/a/aaa_elflibs" \
			"patches/packages/.*" \
			"slackware/.*" \
			"extra/.*"  \
			"testing/.*" \
			"pasture/.*"  \
			)
PREVENT_INCOMPATIBILITIES

This is required. It allows to enable or disable the mechanism to preventing accidental incompatibilities. By default, this mechanism is enabled.

PREVENT_INCOMPATIBILITIES can be set to $TRUE (enable the mechanism), or, to $FALSE (disable the mechanism).

TRUSTED_EXTERN_CMDS

This is required. It defines the external commands trusted by compat32pkg. Each of these commands could be executed by any trigger whose task is of kind "exec:CMD".

By default, TRUSTED_EXTERNS_CMDS is defined as below :

TRUSTED_EXTERNS_CMD=( "installpkg" "upgradepkg" "c32pkg-notify-send" )

To add a command named FOO into this list, simply put it after the last as in example below :

TRUSTED_EXTERNS_CMD=( "installpkg" "upgradepkg" "c32pkg-notify-send" "FOO" )

When this variable is undefined or set to an empty value ( i.e: ="" or =() ):

  • Any attempt to add a trigger with a task "exec:CMD" using the command compat32pkg --trigger add ... will fail.
  • At execution of compat32pkg, any triggers to process with a task "exec:CMD" will be aborted, and compat32pkg prints a warning.

For more details about the triggers, read the section The triggers

PACKAGES_PROCESSING

This is required. It defines how compat32pkg will process the packages (or updates) to download and convert, or to download, convert and install. This can be set to one of the modes described below, auto being the default :

Mode Description
auto

compat32pkg will automatically select the right mode between legacy and concurrent according to the number of package to process and the number of cpu/cores.

The legacy mode is selected when there's less than 3 packages to process, or less than 2 cpu/core, otherwise, the concurrent mode is selected.

legacy Inherited from past versions. The download, the conversion, and the installation of packages are performed by a single process. This means that compat32pkg starts to process the next package only when the current package has been fully processed.
concurrent In this mode, The download, the conversion, and the installation are separate processes. This means that a package may be in download, while another (already downloaded) is in conversion, and yet another (already downloaded and converted) is in install.
PROGRESSBAR_COLORS

Defines the colors of the progress bar drawn when compat32pkg handles the packages concurrently.

The colors of the progress bar can be changed using the ANSI escape code "CSI n [;k] m" (http://en.wikipedia.org/wiki/ANSI_escape_code).

By default, this is set to "\e[7m" which swaps the foreground and background colors.

For example, to get a progress bar with white text on blue, PROGRESSBAR_COLORS must be set to "\e[1;37;44m". 1 is the attribute for bold, 37 and 44, the codes for white foreground and blue background as defined in the table below :

Color Black Red Green Yellow Blue Magenta Cyan White
Foreground 30 31 32 33 34 35 36 37
Background 40 41 42 43 44 45 46 47
DEVELOPER SECTION

This section is reserved to the developers and is never executed in the case of stable releases. Users have not to worry about this section, and its removal will have no consequence.

The file of mirrors: /etc/compat32pkg/mirrors

This file is required but its usage is optional and always implicit. It contains the list of mirrors and their aliases. It consists in a set of entries that rely on the syntax below:

mirror-entry ::= <key> = <mirror-addr>
key           ::= string
mirror-addr  ::= <local-directory>url>

For example, if you look at the content of this file, you will see something like that:

snippets of mirror's file
DVD               = /mnt/DVD
WorldWide-13.0    = ftp://mirrors.kernel.org/slackware/slackware-13.0
WorldWide-13.1    = ftp://mirrors.kernel.org/slackware/slackware-13.1
WorldWide-current = ftp://mirrors.kernel.org/slackware/slackware-current

Germany-13.0    = ftp://ftp.gwdg.de/pub/linux/slackware/slackware-13.0
Germany-13.1    = ftp://ftp.gwdg.de/pub/linux/slackware/slackware-13.1
Germany-current = ftp://ftp.gwdg.de/pub/linux/slackware/slackware-current
  • The entry with the key DVD refer to the local directory in which dvd are mounted by users.
  • The entries with the keys WorldWide-13.0, WorldWide-13.1 and WorldWide-current respectively refer to the Slackware mirrors of versions 13.0, 13.1 and current. The same apply to the entries with keys Germany-13.0, Germany-13.1 and Germany-current, but those key refers to servers in another country.

Each of the mirrors from this file can be defined as the default mirror for compat32pkg or explicitly passed to compat32pkg using their aliases introduced by an "at symbol" :

  1. To defines the mirror bound to the key Germany-13.1 as the default mirror, the variable DEFAULT_MIRROR of configuration script /etc/compat32pkg/compat32pkg.conf should be declared as below:
    DEFAULT_MIRROR=@Germany-13.1
  2. To select the mirror bound to the key WorldWide-13.1 using the command line, simply pass this key, introduced by an "at symbol", as argument to the parameter --mirror :
    $ compat32pkg --mirror @WorldWide-13.1  ...

The blacklist file : /etc/compat32pkg/blacklist

This file is required. It contains the patterns (one per line) which identify permanently excluded packages from conversion, installation, updating, and removal. Each pattern can be the basename of a package (ex: mozilla-firefox), the baseref of a package (ex: slackware/xap/mozilla-firefox), or a regular expression (ex: mozilla-.*,pasture/.*).

This file has to be used for permanent exclusion of packages only. To exclude a package, or a set of package, punctually, during execution of compat32pkg only, the optional parameter --exclude should be used instead of this file.

The configuration file for the "layer-32" : /etc/compat32pkg/multilib-32bit-packages.lst

This file contains the list of packages (ie their basename) which provide the 32-bit part of the multilib (aka "layer-32") for Slackware-64.

  • This file must start with a line formatted as below :
    $ #!version=M.m.YYMMDD

    M.m.YYMMDD must be the version number of the file, where, "M" is the major revision number, "m" the minor revision number, and, "YYMMDD" the date of the revision.

    This information is used by the configuration update mechanism, ie, when compat32pkg is executed in mode --layer-32-config.

  • The packages which provide the 32-bit part of the multilib must be given using their basenames only, and there must be one basename per line only.

    As this configuration file must be usable on all slackware-64 versions, it must contain references of all packages for all versions of the multilib. Therefore, this implies that a reference to a package could only be removed when the package is not any more used by all version of the multilib.

  • Each line, whose the first non-whitespace character is a "#", is treated as a comment, and ignored.

As this file describes the 32-bit part of the multilib, it could seem natural to pass it as argument to compat32pkg to manage this layer. However, this usage is discouraged, and user should use the keyword layer-32 instead, as, this one is more explicit and, furthermore, offers a better management of the 32-bit part of the multilib, mostly when checking for updates, or, when upgrading this layer :

$ compat32pkg --mirror @WorldWide-13.0 --install layer-32
$ compat32pkg --mirror @WorldWide-13.1 --list-updates layer-32
$ compat32pkg --remove all --exclude layer-32
						

The directory of triggers : /etc/compat32pkg/triggers.d

This directory is required and is dedicated to the triggers.

See point The triggers for detailed informations about this feature.

The logfile : /var/log/compat32pkg.log

This file is used by compat32pkg to log all of its activity. As this file could take more disk space over time, it has to be reset from time to time by executing :

$ compat32pkg --reset-log

Preventing concurrent execution

Only one instance of compat32pkg can be run at a time. To achieve this, compat32pkg uses a simple lock mechanism based on the file /var/lock/compat32pkg.lock. In case of freeze of this mechanism (due to a power outage for example), this file should be deleted manually to unlock execution of compat32pkg.

Temporary files

compat32pkg use the directory /tmp/compat32pkg to store its temporary files. As a convenience, compat32pkg shares this temporary location with convertpkg-compat32. To do that, each time that compat32pkg calls convertpkg-compat32, the directory /tmp/compat32pkg is passed to convertpkg-compat32 through its environment variable TMP.

This feature is available since compat32pkg version 1.2.110112

Identifying the packages

When using compat32pkg, the packages to process, and the packages not to process, have to be identified using patterns.

Except when explicitly said, each pattern can be the basename of a package (ie: alsa-lib, mozilla-firefox), the baseref of a package (slackware/a/dbus, slackware/l/atk) or a regular expression (alsa-.*,patches/.*). Those patterns can be given into a comma separated list of patterns introduced by the keyword "list:" or into a text-file (one per line), whose commented lines and empty lines will be automatically ignored.

Available packages

compat32pkg allows users to access all of packages available on the selected mirror with exception for packages whose architecture is set to noarch and fw, and, those explicitly blacklisted into the file /etc/compat32pkg/blacklist. This choice has been made because hard coding of exclusion was not a clean solution as opposed to the flexibility offered by an external blacklist.

Preventing accidental incompatibilities

This mechanism has been designed to prevent usage of incompatible slackware mirrors at architecture and version level with the installed slackware.

The activation and deactivation of this mechanism is controlled by the variable PREVENT_INCOMPATIBILITIES in configuration's script /etc/compat32pkg/compat32pkg.conf. By default, this mechanism is enabled. To disable it, the variable PREVENT_INCOMPATIBILITIES must simply be set to $FALSE as below :

PREVENT_INCOMPATIBILITIES=$FALSE

The prevention is done by checking consistency (at architecture and version level), between the selected slackware mirror and the installed version of slackware when compat32pkg is in mode --convert, --install, --search, --check-updates, --list-updates, --convert-updates, --upgrade.

In case of inconsistency, this could imply one of the following :

  1. compat32pkg is terminated with exit-code 1.

    Example: In case of using a Slackware-64 mirror as source when using compat32pkg in mode --convert, --install, --search, --check-updates, --list-updates, --convert-updates, --upgrade.

    use of an incompatible mirror
  2. The user is warned and execution of compat32pkg is paused for 5 seconds.

    Example 1: When using compat32pkg in mode --check-updates, --list-updates, --convert, --convert-updates, --search, with a mirror which relates to a version of Slackware older (or newer) than the installed one.

    use of an older/newer mirror

    Example 2: When using compat32pkg in mode --check-updates, --list-updates, --convert, --convert-updates,--search, with a mirror which relates to the development version of slackware (ie current).

    use of slackware-current mirror

    slackware-current followers can avoid this by changing the version number into the file /etc/slackware-version to 'current'.

  3. The user is warned, and, prompted to explicitly confirm continuation of the process. When continuation is dismissed, compat32pkg is terminated with 99 as exit code.

    Example 1: When using compat32pkg in mode --install, --upgrade with a mirror which relates to a version of slackware newer (or older) than the installed one :

    use of a newer/older mirror

    Example 2: When using compat32pkg in mode --install, --upgrade with a mirror which relates to the development version of slackware (ie current).

    use of slackware-current mirror

    slackware-current followers can avoid this by changing the version number into the file /etc/slackware-version to 'current'.

Resolving duplicates

compat32pkg is able to detect duplicates (ie packages that share the same basename) and reports them when needed.

The search engine of compat32pkg automatically resolves, using the precedence order mechanism, duplicates that live in different directories. For example, if the query "list:mozilla-firefox" returns the packages patches/mozilla-firefox-3.6.8 and slackware/xap/mozilla-firefox-3.5.2, the execution of the precedence order mechanism, in its default configuration, will imply the selection of the package patches/mozilla-firefox-3.6.8.

On the other side, when duplicates live in the same directory, this mechanism, as it as not been designed to resolve that kind of duplicates, is totally useless. Therefore, currently, compat32pkg, even if it can detect that kind of duplicates, is not able to resolve them. Even if into the scope of compat32pkg this can not be seen as a major flaw, this will be fixed in a future release, and more precisely by using the list of unresolved duplicates and a dialog box.

The triggers

Triggers allow the user to execute a task following an event.

Each trigger :

  1. can be enabled or disabled
  2. has a task to do, which can be :
    Name Description
    message Prints a simple or multi-line message.
    warning Prints a simple or multi-line warning.
    exec:CMD Executes the external command CMD.

    For security reason, in case of "exec:CMD", the command CMD must be one of the external commands trusted by compat32pkg which are defined by the variable TRUSTED_EXTERN_CMDS into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf).
  3. has a triggering event, which can be one of the following :
    Event Description
    pre-install@layer-32

    Occurs when the 32-bit layer is about to be installed. This event is triggered only when running :

    $ compat32pkg --install layer-32
    post-install@layer-32

    Occurs when the 32-bit layer has been installed. This event is triggered only when running :

    $ compat32pkg --install layer-32
    update-found@layer-32

    Occurs when updates are available for the layer-32. This event may be triggered only when running :

    $ compat32pkg --check-updates layer-32
    pre-upgrade@layer-32

    Occurs when updates for the layer-32 are about to be installed. This event may be triggered only when running :

    $ compat32pkg --upgrade layer-32
    post-upgrade@layer-32

    Occurs when updates for the layer-32 have been installed. This event may be triggered only when running :

    $ compat32pkg --upgrade layer-32
    pre-remove@layer-32

    Occurs when the layer-32 is about to be removed. This event is triggered only when running :

    $ compat32pkg --remove layer-32
    post-remove@layer-32

    Occurs when the layer-32 has been removed. This event is triggered only when running :

    $ compat32pkg --remove layer-32
    update-found@layer-32-config

    Occurs when an update is available for the descriptor of the 32-bit layer. This event may be triggered only when running :

    $ compat32pkg --layer-32-config check-update
    pre-install@anyof:<pattern,...>

    Occurs when any of the compat32-packages identified by the given patterns is about to be installed. This event may be triggered when running :

    $ compat32pkg --install ...
    post-install@anyof:<pattern,...>

    Occurs when any of the compat32-packages identified by the given patterns has been installed. This event may be triggered when running :

    $ compat32pkg --install ...
    update-found@anyof:<pattern,...>

    Occurs when there's available updates for any of the compat32-packages identified by the given patterns. This event may be triggered when running :

    $ compat32pkg --check-updates ...
    pre-upgrade@anyof:<pattern,...>

    Occurs when updates for any of the compat32-packages identified by the given patterns is about to be installed. This event may be triggered when running :

    $ compat32pkg --upgrade ...
    post-upgrade@anyof:<pattern,...>

    Occurs when updates for any of the compat32-packages identified by the given patterns have been installed. This event may be triggered when running :

    $ compat32pkg --upgrade ...
    pre-remove@anyof:<pattern,...>

    Occurs when any of the compat32-packages identified by the given patterns is about to be removed. This event may be triggered when running :

    $ compat32pkg --remove ...
    post-remove@anyof:<pattern,...>

    Occurs when any of the compat32-packages identified by the given patterns has been removed. This event may be triggered when running :

    $ compat32pkg --remove ...

    In the case of events of kind *@anyof:<pattern,...>, each pattern can be the basename of a package (i.e: mesa, mozilla-firefox) or a regular expression (i.e: mozilla-.*)

To manage the triggers, compat32pkg comes with the built-in commands below :

$ compat32pkg --trigger add NAME EVENT TASK TASK_ARG...

Creates the trigger named NAME to execute the task TASK following the event EVENT.

NAME is the name of the trigger to create, and by extension, the basename of the file that describes this trigger.

  • Each trigger file is stored into the directory /etc/compat32pkg/triggers.d and has ".trigger" as extension.
  • When an events occurs, compat32pkg handles all the enabled triggers that match this event according to the alphabetical order of their names.

EVENT can be one of the supported events.

TASK TASK_ARG... is the task to do and its arguments. TASK can be message, warning, or exec:CMD.

In the case of message and warning, each argument TASK_ARG[i] will be processed as a i-th line of the message/warning to print.

In the case of exec:CMD :

  • CMD must be the external command to execute. This command must be one of the approved external commands by compat32pkg, which are defined by the variable TRUSTED_EXTERN_CMDS in the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf).
  • Since compat32pkg has no way to know whether the command CMD requires parameters, TASK_ARG ... is optional. When present, each of the arguments TASK_ARG[i] will be handled as the i-th parameter of the external command to execute (i.e CMD).
  • Each of the variables below will be accessible at execution of the external command CMD :
    • CTRIGGER_NAME:
      The name of the running trigger
    • CTRIGGER_EVT:
      The event linked to the running trigger, which can be :
      
      	pre-install@layer-32            pre-install@anyof
      	post-install@layer-32           post-install@anyof
      	update-found@layer-32           update-found@anyof
      	pre-upgrade@layer-32            pre-upgrade@anyof
      	post-upgrade@layer-32           post-upgrade@anyof
      	pre-remove@layer-32             pre-remove@anyof
      	post-remove@layer-32            post-remove@anyof
      	update-found@layer-32-config
      												
    • CTRIGGER_ANYOF_PATTERNS :
      When CTRIGGER_EVT is of kind *@anyof, this is the comma separated list of patterns associated to the event. Otherwise, this variable is unset.
    • CTRIGGER_MATCHPKGS :

      When CTRIGGER_EVT is of kind *@layer-32 this contains the basename of the package that provide the 32-bit layer which are targeted by the event.

      When CTRIGGER_EVT is of kind *@anyof this contains the basename of the packages, processed by compat32pkg, that match the patterns (CTRIGGER_ANYOF_PATTERNS) associated to the event.

      In both cases, the basenames are given as a comma separated list of basenames.

      In any other cases, this variable is unset.

    • CTRIGGER_MATCHPKGCOUNT :

      When CTRIGGER_EVT is of kind *@layer-32 this is the number of packages targeted by the event.

      When CTRIGGER_EVT is of kind *@anyof this is the number of package matching the patterns (CTRIGGER_ANYOF_PATTERNS) associated to the event.

      In any other cases, this variable is unset.

    Note that, when adding a trigger of kind exec:CMD using compat32pkg, the use of any of these variables inside of any argument of the command to execute passed to compat32pkg must be done with an escaping like \$CTRIGGER_NAME. Indeed, without this, the variable will be directly interpreted instead of being interpreted at each execution of the command CMD.
$ compat32pkg --trigger remove <all>|<list:name,...>
removes one or more triggers.
$ compat32pkg --trigger enable <all>|<list:name,...>
enables one or more triggers.
$ compat32pkg --trigger disable <all>|<list:name,...>
disables one or more triggers.
$ compat32pkg --trigger list [ <enabled-only>|<disabled-only> ]
Lists whole or part of the defined "triggers".

The triggers file format

As triggers are simple text files, user can manage them manually. Each trigger file must be stored into /etc/compat32pkg/triggers.d, and must have ".trigger" as extension. These files use the format below :


STATUS_FIELD   ::= STATUS=<enabled>|<disabled>
EVENT_FIELD    ::= EVENT=<C32PKG_EVENT>
TASK_FIELD     ::= TASK=<message>|<warning>|<exec:CMD>
TASKARG_FIELDS ::= TASK_ARG[i]=text
  • The name of a trigger is given by the name of the file that describes it.

  • When an events occurs, compat32pkg handles all the enabled triggers that match this event according to the alphabetical order of their names.

The field STATUS defines the status of the trigger, and can be enabled or disabled.

The field EVENT defines the event that must imply the execution of the task TASK. This must be one of the supported events.

The field TASK defines the task that must be executed by the trigger, which can be message, warning, or exec:CMD.

In the case of tasks message and warning, each field TASK_ARG[i] defines the i-th line (starting from 0) of the message/warning.

Note that each line which includes significant spaces at start and/or at end must be put in double quotes, otherwise the spaces will be removed when the message/warning will be printed. Example:


TASK_ARG[0]= "   *******************  "
TASK_ARG[1]= "  * a sample example  * "
TASK_ARG[2]= "   *******************  "
					

In the case of task exec:CMD :

  • The command CMD must be one of the external commands approved by compat32pkg defined by the variable TRUSTED_EXTERN_CMDS in the configuration's script (i.e: /etc/compat32pkg/compat32pkg.conf). Otherwise, each time this trigger will be handled, its command will not be executed and the user will be warned.
  • As compat32pkg has no way to know whether the command CMD requires parameters, the fields TASK_ARGS[0..n-1] are optional. When present, each field TASK_ARG[i] defines the i-th (starting from 0) parameter of the command CMD.

    Note that each argument which includes spaces must be put in quotes, otherwise, at execution, the argument could be misinterpreted by the command CMD.

  • The variables CTRIGGER_NAME, CTRIGGER_EVT, CTRIGGER_ANYOF_PATTERNS, CTRIGGER_MATCHPKGS, and, CTRIGGER_MATCHPKGCOUNT, will be accessible at execution of the external command CMD :

The Triggers shipped with compat32pkg

compat32pkg is shipped with the triggers described below :

mesa-installed-warn.trigger

Warns user he should reinstall any proprietary driver (like nvidia, ati) when the package mesa-compat32 has been installed.

By default, this trigger is enabled. It can be disabled using compat32pkg as below :

$ compat32pkg --trigger disable list:mesa-installed-warn

When this trigger is enabled and the package mesa is one of the packages targeted by compat32pkg --install ..., the user will be warned as below :

The trigger 'mesa-installed-warn'

mesa-updated-warn.trigger

Warns user he should reinstall any proprietary driver (like nvidia, ati) when the package mesa-compat32 has been updated.

By default, this trigger is enabled. It can be disabled using compat32pkg as below :

$ compat32pkg --trigger disable list:mesa-updated-warn

When this trigger is enabled and the package mesa is one of the packages targeted by compat32pkg --upgrade ..., the user will be warned as below :

The trigger 'mesa-updated-warn'

layer32-cfg-update-found-notify.trigger

Notifies user, using a tooltip, when there's an available update for the descriptor of the layer-32.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:layer32-cfg-update-found-notify

When this trigger is enabled, this is a good idea to create a cron job to be notified on available update for the descriptor of layer-32. This cron job could be as below :

0 */2 * * mon compat32pkg --layer-32-config check-update &>/dev/null

As needed, the notification can be sent to another screen using the variable DISPLAY as in example below :

0 */2 * * mon DISPLAY=:1 compat32pkg --layer-32-config check-update &>/dev/null

When this trigger is enabled, and there's an update for the descriptor of the layer-32 when executing compat32pkg --layer-32-config check-update, the user will be notified through a tooltip as below :

The trigger 'layer32-cfg-update-found'

layer32-installed-notify.trigger

Notifies user, using a tooltip, following the installation of the layer-32.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:layer32-installed-notify

When this trigger is enabled, and the layer-32 is installed (ie compat32pkg --install layer-32), the user will be notified through a tooltip as below :

The trigger 'trigger-layer32-installed-notify'

layer32-removed-notify.trigger

Notifies user, using a tooltip, when the layer-32 has been removed.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:layer32-removed-notify

When this trigger is enabled, and the layer-32 is removed (ie compat32pkg --remove layer-32), the user will be notified through a tooltip as below :

The trigger 'trigger-layer32-removed-notify'

layer32-update-found-notify.trigger

Notifies user, using a tooltip, when there are available updates for the layer-32.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:layer32-update-found-notify

When this trigger is enabled, this is a good idea to create a cron job to be notified on available updates for the layer-32. This cron job could be as below :

0 */2 * * mon,wed,fri compat32pkg --check-updates layer-32 &>/dev/null

As needed, the notification can be sent to another screen using the variable DISPLAY as in example below :

0 */2 * * mon,wed,fri DISPLAY=:1 compat32pkg --check-updates layer-32 &>/dev/null

In the examples below, it's assumed that a default mirror has been defined into the configuration's script (i.e: /etc/compat32pkg/compat32pkg.conf).

When this trigger is enabled, and there's updates for the layer-32 (ie compat32pkg --check-updates layer-32), the user will be notified through a tooltip as below :

The trigger 'trigger-layer32-update-found-notify'

layer32-updated-notify.trigger

Notifies user, using a tooltip, when available updates for the layer-32 have been installed.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:layer32-updated-notify

When this trigger is enabled, and the layer-32 is updated (ie compat32pkg --upgrade layer-32), the user will be notified through a tooltip as below :

The trigger 'trigger-layer32-updated-notify'

mesa-installed-notify.trigger

Notifies user, using a tooltip, he should reinstall any proprietary driver (like nvidia, ati) when the package mesa-compat32 has been installed.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:mesa-installed-notify

When this trigger is enabled and the package mesa is one of the packages targeted by compat32pkg --install ..., the user will be warned as below :

The trigger 'mesa-installed-notify'

mesa-updated-notify.trigger

Notifies user, using a tooltip, he should reinstall any proprietary driver (like nvidia, ati) when the package mesa-compat32 has been updated.

By default, this trigger is disabled. It can be enabled using compat32pkg as below:

$ compat32pkg --trigger enable list:mesa-updated-notify

When this trigger is enabled and the package mesa is one of the packages targeted by compat32pkg --upgrade ..., the user will be warned as below :

The trigger 'mesa-updated-notify'

The triggers and tooltip notifications

Any trigger can be used to notify the user with a tooltip. This requires the command notify-send, and the wrapper c32pkg-notify-send (shipped with compat32pkg) to be installed, otherwise a warning will be printed instead. The command notify-send is part of the package libnotify since Slackware 13.1.

As Slackware 13.0 has no package libnotify, users of this version will have to get it, and its dependencies too. Furthermore, users who don't use KDE should also get xfce4-notifyd. Note that all of these can be found on Robby Workman's repository.

Concurrent processing of packages

Since version 1.5, compat32pkg provides a mechanism which uses separated processes to download, convert, and install the packages. This features can significantly improve packages processing time.

This mechanism can be controlled through the variable PACKAGES_PROCESSING declared into the configuration's script (i.e: /etc/compat32pkg/compat32pkg.conf). The possible value of this variable are : legacy, concurrent, and auto, which is the default.

When set to auto, compat32pkg selects the package processing mode according to the number of packages to process, and, the number of installed cpu/core. When there's less than 3 packages to process, or, less than 2 cpu/core installed, the legacy mode will be selected, otherwise, the concurrent mode is selected.

When the legacy mode is selected, the packages are processed as in earlier version of compat32pkg. This means, that compat32pkg download a package, convert it to compat32, and installs the compat32 package, and so on with next packages...

When the concurrent mode is selected, compat32pkg uses separate processes to download, convert, and install the packages. This means that a package can be in download, while another (already downloaded) is being converted, and yet another (already downloaded and converted) is being installed.

As legacy and concurrent modes does not work the same way, they have different output too.

Sample output of legacy mode

sample output of legacy mode

Sample output of concurrent mode

sample output of concurrent mode

At execution, the concurrent mode draws a progress bar which is described below :

progress bar
Area Description
1 The elapsed time since start of package processing.
2 The number of package to process.
3

This area is dedicated to informations from the downloader process :

  • (3a) Is the total number of downloaded package.
  • (3b) Is the basename of the package being downloaded, followed by a small animation.
  • (3c) Is the current size of the package being downloaded.
4

This area is dedicated to informations from the converter process :

  • (4a) Is the total number of converted package.
  • (4b) Is the basename of the package being converted, followed by a small animation.
  • (4c) Is the current size of the compat32-package being build.
5

This area is dedicated to informations from the installer process :

  • (5a) Is the total number of installed package.
  • (5b) Is the basename of the compat32-package being installed, followed by a small animation.

Obtaining help

compat32pkg provides two kinds of help: summary and complete. The first is displayed by default when executing compat32pkg without argument, like below:

compat32pkg help summary

Using compat32pkg

Downloading packages and converts them to format compat32

This is done by using compat32pkg in mode --convert. As this mode needs a source to get the packages to convert, a mirror should be supplied in argument of parameter --mirror unless if a default mirror is provided into the configuration's script (i.e: /etc/compat32pkg/compat32pkg.conf). It is also possible to punctually exclude packages from this process by using optional parameter --exclude :

$ compat32pkg --convert list:l/alsa-lib,xap/mozilla-firefox
$ compat32pkg --mirror @France-13.0 --convert list:"slackware/l/alsa-\(lib\|oss\),slackware/xap/mozilla-.*" --exclude list:.*thunderbird
$ compat32pkg --convert /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --convert. In this context, layer-32 provides a simple way to automate conversion of packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @WorldWide-13.1 --convert layer-32

compat32pkg will store the downloaded packages and the converted packages into the directories pointed by the variables SLACK32PKG_CACHE and COMPAT32PKG_CACHE declared into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf).

using compat32pkg in mode --convert (1)

In the example above, the packages to convert were identified using their baseref, which imply, unless in few exceptional cases, the selection of one package per baseref.

Now, If we use basenames instead of baserefs, the query will be less specific and more than one package would match the query. Therefore, In that case, the search engine will automatically choose the package according to the order given by the variable PGKS_PRECEDENCE_ORDER like in the example below:

using compat32pkg in mode --convert (2)

As we can see above, in that case, the search engine has selected a newer version (3.6.8 vs 3.5.2) of package mozilla-firefox than in sample #1.

Obviously, the same rule as above is applied in case of mixing of basename and baseref into the query like as below :

using compat32pkg in mode --convert (3)

Downloading packages, converts them to format compat32 and installs resulting packages

This works like for converting packages unlike that the parameter --install has to be used instead of --convert.

$ compat32pkg --install list:l/alsa-lib,xap/mozilla-firefox
$ compat32pkg --mirror @France-13.0 --install list:"slackware/l/alsa-\(lib\|oss\),slackware/xap/mozilla-.*" --exclude list:.*thunderbird
$ compat32pkg --install /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --install. In this context, layer-32 provides a simple way to automate install of packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @ WorldWide-13.1 --install layer-32

compat32pkg will store the downloaded packages and the converted packages into the directories pointed by the variables SLACK32PKG_CACHE and COMPAT32PKG_CACHE declared into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf).

The Installation of packages resulting from conversion process is done by using the command upgradepkg and its option --install-new.

using compat32pkg in mode --install

Checks available updates for a given subset of packages to format compat32

This is done by using compat32pkg in mode --check-updates. As this mode needs a source to search updates, a mirror should be supplied in argument of parameter --mirror unless a default mirror is provided into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf).

To check available updates for all installed packages, the keyword "all" has to be passed as argument of parameter --check-updates. Otherwise, the patterns which identify the installed packages to be checked must be given, as always, in a text file or in a comma separated list of pattern introduced by the keyword "list:". However, as installed compat32 packages can only be identified by their basenames, the use of baserefs is prohibited and will result in an error.

It is also possible to punctually exclude some of installed packages and some of updates by using optional parameter --exclude.

If updates were found, compat32pkg will terminate with 0 as exit code. Otherwise, it will terminate with 100 as exit code.

$ compat32pkg --check-updates list:mozilla-firefox
$ compat32pkg --mirror @France-13.0 --check-updates all --exclude list:patches/.*
$ compat32pkg --check-updates /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --check-updates. In this context, layer-32 provides a simple way to only check updates for packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @WorldWide-13.1 --check-updates layer-32
using compat32pkg in mode --check-updates

When the argument layer-32 is used, compat32pkg will check updates for the 32-bit part of the multilib only. In this case, the update mechanism recognizes as an update:

  1. any new version of any installed package of the 32-bit part of the multilib
  2. any package of the 32-bit part of the multilib which is not installed, nor blacklisted, nor excluded.

This implies that any addition (of package) into the file that describes the 32-bit part of the multilib is handled as update.

using compat32pkg in mode --check-updates layer-32

Lists available updates for a given subset of packages to format compat32

This works like for checking updates unlike that the parameter --list-updates has to be used instead of --check-updates.

$ compat32pkg --list-updates list:mozilla-firefox
$ compat32pkg --mirror @France-13.0 --list-updates all --exclude list:patches/.*
$ compat32pkg --list-updates /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --list-updates. In this context, layer-32 provides a simple way to only enumerate the updates for packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @WorldWide-13.1 --list-updates layer-32
using compat32pkg in mode --list-updates

When the argument layer-32 is used, compat32pkg will check updates for the 32-bit part of the multilib only. In this case, the update mechanism recognizes as an update:

  1. any new version of any installed package of the 32-bit part of the multilib
  2. any package of the 32-bit part of the multilib which is not installed, nor blacklisted, nor excluded.

This implies that any addition (of package) into the file that describes the 32-bit part of the multilib is handled as update.

using compat32pkg in mode --list-updates layer-32

Downloads available updates for a given subset of packages to format compat32 and convert them

This works like for checking updates unlike that the parameter --convert-updates has to be used instead of --check-updates.

$ compat32pkg --convert-updates list:mozilla-firefox
$ compat32pkg --mirror @France-13.0 --convert-updates all --exclude list:patches/.*
$ compat32pkg --convert-updates /etc/compat32pkg/multilib-32bit-packages.lst
$ compat32pkg --mirror @WorldWide-13.1 --convert-updates layer-32

compat32pkg will store the downloaded packages and the converted packages into the directories pointed by the variables SLACK32PKG_CACHE and COMPAT32PKG_CACHE declared into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf)..

The argument layer-32 is available since version 1.0.101201. In the context of --convert-updates, it provides a simple way to only convert updates for packages that provide the 32-bit part of the multilib. In this case, the update mechanism recognizes as an update:

  1. any new version of any installed package of the 32-bit part of the multilib
  2. any package of the 32-bit part of the multilib which is not installed, nor blacklisted, nor excluded.

This implies that any addition (of package) into the file that describes the 32-bit part of the multilib is handled as update.

using compat32pkg in mode --convert-updates

Downloads available updates for a given subset of packages to format compat32, converts them, and upgrade

This works like for converting updates unlike that the parameter --upgrade has to be used instead of --convert-updates.

$ compat32pkg --upgrade list:mozilla-firefox
$ compat32pkg --mirror @France-13.0 --upgrade all --exclude list:patches/mozilla-firefox
$ compat32pkg --upgrade /etc/compat32pkg/multilib-32bit-packages.lst
$ compat32pkg --mirror @WorldWide-13.1 --upgrade layer-32

The Installation of packages resulting from conversion process is done by using the command upgradepkg.

The argument layer-32 is available since version 1.0.101201. In the context of --upgrade, it provides a simple way to only upgrade packages that provide the 32-bit part of the multilib. In this case, the update mechanism recognizes as an update:

  1. any new version of any installed package of the 32-bit part of the multilib
  2. any package of the 32-bit part of the multilib which is not installed, nor blacklisted, nor excluded.

This implies that any addition (of package) into the file that describes the 32-bit part of the multilib is handled as update.

using compat32pkg in mode --upgrade

Looks for packages on a slackware-32 mirror

This is done by using compat32pkg in mode --search. As this mode needs a source to search packages, a mirror should be supplied in argument of parameter --mirror unless if a default mirror is provided into the configuration's script (i.e /etc/compat32pkg/compat32pkg.conf). It is also possible to punctually exclude packages from this process by using optional parameter --exclude :

$ compat32pkg --search list:.*
$ compat32pkg --search list:l/alsa-lib,xap/mozilla-firefox
$ compat32pkg --mirror @France-13.0 --search list:"slackware/l/alsa-\(lib\|oss\),slackware/xap/mozilla-.*" --exclude list:.*thunderbird
$ compat32pkg --search /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --search. In this context, layer-32 provides a simple way to search only the packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @WorldWide-13.1 --search layer-32
using compat32pkg in mode --search

The column "mult." indicates if it exists other versions (ie duplicates) of the same package (ie with the same basename).

Removing of installed compat32 packages

This is done by using compat32pkg in mode --remove. To remove all installed compat32 packages, the keyword "all" has to be passed as argument of parameter --remove. Otherwise, the patterns which identify the installed packages to remove must be given, as always, in a text file or in a comma separated list of pattern introduced by the keyword "list:". It is also possible to punctually exclude packages from this process by using optional parameter --exclude.

As installed compat32 packages can only be identified by their basenames, the use of baserefs is prohibited and will result in an error.

$ compat32pkg --remove all  --exclude list:mozilla-firefox
$ compat32pkg --remove list:mozilla-firefox
$ compat32pkg --remove /etc/compat32pkg/multilib-32bit-packages.lst

Since compat32pkg version 1.0.101201, the argument layer-32 can be passed in argument of --remove. In this context, layer-32 provides a simple way to only remove packages that provide the 32-bit part of the multilib' :

$ compat32pkg --mirror @WorldWide-13.1 --remove layer-32
using compat32pkg in mode --remove

Checking updates, and upgrade, of the configuration file for the "layer-32"

By using compat32pkg in mode --layer-32-config, the user can check available updates, and upgrade, the configuration file for the layer-32

$ compat32pkg --layer-32-config <check-update>|<update> [ updates-site-url ] 

This mode allows users to follow evolving of the layer-32, easily, without to have to install a new version of compat32pkg, nor to have to look for changes made to the layer-32.

The argument updates-site-url is optional. When presents, this must be the url of the updates site that compat32pkg will use for the requested update operation, otherwise, the default one (ie http://sourceforge.net/projects/compat32pkg/files/updates-site) will be used.

In case of configuration file for the layer-32, the following files must be available on the selected updates-site, otherwise the update operation will fail :

  1. The latest revision of the configuration file for the layer-32 which must be named multilib-32bit-packages.lst
  2. The file containing information about the file (1), named multilib-32bit-packages.lst.infos, and, which must contain the following data:

    • The version number of the configuration file (1). This version must be given by a field named version :
      version = 1.4.110319
    • The md5sum of the configuration file (1). This value must be given by a field named md5sum :
      md5sum = 6f7d19e164201754d28a66c59913afed
    • The description of changes since the previous revision. This description must be given by using lines starting by a character ":". Example:
      :This is the description of changes since the previous revision of the file
      :that describes the layer-32.
      :  + package X was added. This does not affect the multilib for 13.0

To check available updates related to the configuration file for the layer-32, compat32pkg will have to be used like below:

$ compat32pkg --layer-32-config check-update
$ compat32pkg --layer-32-config check-update	http://my.compat32pkg.updates-site-url
using compat32pkg in mode --layer-32-config check-update

When an update is available, the changes since the previous revision of the configuration files for the layer-32 is shown, as in the sample below :

using compat32pkg in mode --layer-32-config check-update <url>

To upgrade the configuration file for the layer-32 to the version available on the selected updates site, compat32pkg will have to be used like below :

$ compat32pkg --layer-32-config update
$ compat32pkg --layer-32-config update	http://my.compat32pkg.updates-site-url

When an update is available, a backup of the previous revision of the configuration file for layer-32 is automatically performed prior to the updating. This backup will be named multilib-32bit-packages.lst.bak_<date>, where <date> is the current date to format YYYYMMDD.

using compat32pkg in mode --layer-32-config update

List the dependencies

Since revision 1.6.130502, compat32pkg includes the command --depends which lists the dependencies required by a single 32-bit binary, or by the 32-bit binaries in a directory hierarchy, or by the 32-bit binaries from an installed package.


  $ compat32pkg --depends skype

  compat32pkg ver. 1.6.130502 (stable)

  [--depends] Started on Thu 02 May 2013 04:14:27 PM CEST

  [--depends]   Inspecting 32-bit binaries from package skype-4.1.0.20-i486-1_SBo
  [--depends]     Found 1 32-bit binaries.        
  [--depends]     Found 48 dependencies (0 orphans, 0 unresolved)

  [--depends]   48 dependencies are fulfilled by these packages:

          aaa_elflibs-compat32
          alsa-lib-compat32
          bzip2-compat32
          cxxlibs-compat32
          expat-compat32
          fontconfig-compat32
          freetype-compat32
          gcc
          gcc-g++
          glib2-compat32
          glibc
          glibc-solibs
          gst-plugins-base-compat32
          gstreamer-compat32
          libICE-compat32
          libSM-compat32
          libX11-compat32
          libXScrnSaver-compat32
          libXau-compat32
          libXdmcp-compat32
          libXext-compat32
          libXrender-compat32
          libXv-compat32
          libffi-compat32
          libpng-compat32
          libxcb-compat32
          libxml2-compat32
          qt-compat32
          sqlite-compat32
          util-linux-compat32
          zlib-compat32

  [--depends] Ended on Thu 02 May 2013 04:14:31 PM CEST     					
					

Clearing the cache(s)

As said before here and here, both directories used to store downloaded packages and the converted packages have to be cleaned periodically. This could be easily automated by using compat32pkg in mode --clear-cache with one of the arguments below :

slackware-32 To clean the directory used to store the downloaded packages.
compat-32 To clean the directory used to store the converted packages.
all To clean both directories used to store the downloaded and converted packages.
using compat32pkg in mode --clear-cache

Resetting the logfile

As said here, the logfile used by compat32pkg to log its activity can be reset using the mode --reset-cache.

using compat32pkg in mode --reset-log

Howto

Using of Firefox 32-bit and Firefox 64-bit at the same time

First of all, the 32-bit version of Firefox must be installed. This is easily done by using compat32pkg like as below :

$ compat32pkg --install list:mozilla-firefox

compat32pkg ver. 0.9.101808
[--install] Started on Wed 08 Sep 2010 12:15:45 PM CEST
[--install]   Using mirror ftp://ftp.lip6.fr/pub/linux/distributions/slackware/slackware-13.0
[--install]   Local system is Slackware/x86_64 version 13.0.0.0.0
[--install]   Mirrored system is Slackware/i486 version 13.0
[--install]   Slackware-32 packages will be stored into /var/cache/compat32pkg/slackware-32
[--install]   compat32 packages will be stored into /var/cache/compat32pkg/compat-32

[--install]   1 package(s) were found (1,020 sec.)

[--install]   Processing package mozilla-firefox version 3.6.8 build 1
[--install]     Package successfully downloaded (/var/cache/compat32pkg/slackware-32/mozilla-firefox-3.6.8-i686-1.txz)
[--install]     Package converted to format compat32 (/var/cache/compat32pkg/compat-32/mozilla-firefox-compat32-3.6.8-x86_64-1.txz)
[--install]     Package successfully installed.

[--install] Ended on Wed 08 Sep 2010 12:16:53 PM CEST

Once firefox-32 is installed you have to execute,as root, the command update-pango-querymodules, otherwise, firefox will be unusable (its output will be unreadable). Another way to achieve this is to reset the system :

$ su
Password:
$ /usr/bin/update-pango-querymodules

Now, to be able to use firefox 32-bit and 64-bit at the same time, you will need to create two different profile, one for the 32-bit version and another for the 64-bit version.

Create a profile for 64-bit firefox

Close all instance of Firefox and run it as follow :

$ /usr/bin/firefox -P

Into "Firefox - Choose User Profile", create a profile named "64bit" for example, validate and exit.

creating profile for firefox/64

Create a profile for 32-bit firefox

Close all instance of Firefox and run it as follow :

$ /usr/bin/32/firefox -P

Into "Firefox - Choose User Profile", create a profile named "32bit" for example, validate and exit.

creating profile for firefox/32

Once both profile created, both versions of firefox can be started using their respective profile:

$ /usr/bin/firefox -P "64bit" --no-remote &
$ /usr/bin/32/firefox -P "32bit" --no-remote &
firefox 32 and 64 running

Firefox-32 plugins

Mplayer plugins

First of all, the 32-bit version of this plugin have to be installed. This is easily done by using compat32pkg like below :

$ compat32pkg --install list:mplayerplug-in

compat32pkg ver. 0.9.101808
[--install] Started on Wed 08 Sep 2010 14:03:51 PM CEST
[--install]   Using mirror ftp://ftp.lip6.fr/pub/linux/distributions/slackware/slackware-13.0
[--install]   Local system is Slackware/x86_64 version 13.0.0.0.0
[--install]   Mirrored system is Slackware/i486 version 13.0
[--install]   Slackware-32 packages will be stored into /var/cache/compat32pkg/slackware-32
[--install]   compat32 packages will be stored into /var/cache/compat32pkg/compat-32

[--install]   1 package(s) were found (1,094 sec.)

[--install]   Processing package mplayerplug-in version 3.55 build 1
[--install]     Package successfully downloaded (/var/cache/compat32pkg/slackware-32/mplayerplug-in-3.55-i486-1.txz)
[--install]     Package converted to format compat32 (/var/cache/compat32pkg/compat-32/mplayerplug-in-compat32-3.55-x86_64-1.txz)
[--install]     Package successfully installed.                           

[--install] Ended on Wed 08 Sep 2010 14:03:59 PM CEST

Once installed, this plugin should work flawlessly the next time firefox-32 will be started. It is possible to test it here, which should give you something like below :

use of mplayer plugin inside of firefox-32

Java plugin

First of all, the 32-bit version of the JRE or of the JDK has to be installed. This is easily done by using compat32pkg like below :

$ compat32pkg --install list:jre

compat32pkg ver. 0.9.101808
[--install] Started on Wed 08 Sep 2010 16:13:44 PM CEST
[--install]   Using mirror ftp://ftp.lip6.fr/pub/linux/distributions/slackware/slackware-13.0
[--install]   Local system is Slackware/x86_64 version 13.0.0.0.0
[--install]   Mirrored system is Slackware/i486 version 13.0
[--install]   Slackware-32 packages will be stored into /var/cache/compat32pkg/slackware-32
[--install]   compat32 packages will be stored into /var/cache/compat32pkg/compat-32

[--install]   1 package(s) were found (1,059 sec.)

[--install]   Processing package jre version 6u16 build 1
[--install]     Package successfully downloaded (/var/cache/compat32pkg/slackware-32/jre-6u16-i586-1.txz)
[--install]     Package converted to format compat32 (/var/cache/compat32pkg/compat-32/jre-compat32-6u16-x86_64-1.txz)
[--install]     Package successfully installed.                

[--install] Ended on Wed 08 Sep 2010 16:16:17 PM CEST

After installation of the jre (or jdk), the plugins have to be installed manually as explained below :

  • In case of firefox < 3.6
     $ ln -sfv /usr/lib/java/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla/plugins/
  • In case of firefox >= 3.6
     $ ln -sfv /usr/lib/java/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/

Afterward, the java plugin should work flawlessly the next time firefox-32 will be started. It is possible to test it here which should give you something like below :

use of java plugin inside of firefox-32