[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
slackware:multilib [2014/04/05 14:47 (UTC)] – [Compiling 32-bit programs] Fix the 32-bit compilation instructions for modern Slackware. alienbobslackware:multilib [2024/01/13 10:04 (UTC)] (current) – Updated the list of compat32 packages alienbob
Line 7: Line 7:
     * //glibc// (i.e. a glibc that supports //running// both 32bit and 64bit binaries), and     * //glibc// (i.e. a glibc that supports //running// both 32bit and 64bit binaries), and
     * //gcc// (i.e. able to //compile// 32bit binaries as well as 64bit binaries).     * //gcc// (i.e. able to //compile// 32bit binaries as well as 64bit binaries).
-  - Then, system libraries are taken from 32bit Slackware and installed in the 64bit Slackware system which completes the process of creating a 32bit software layer. +  - Then, system libraries are taken from 32bit Slackware and installed in the 64bit Slackware system alongside their 64bit versions which completes the process of creating a 32bit compatibility software layer.
- +
-<note>Slackware for the x86_64 architecture (or "//Slackware64//" for short) is a pure 64-bit Operating System, but easily upgradable to multilib. //Out of the box, Slackware64 is only capable of compiling and running 64bit binaries.//</note>+
  
 When Slackware64 was released, it had an advantage over the 64bit "forks" that existed out there. These forks added the 32bit compatibility layer by recompiling a lot of their packages as 32bit binaries. Slackware on the other hand, is a distribution that consists of a 32bit and 64bit release, both of which are being developed in parallel. This means, that you do not have to compile 32-bit packages from scratch in order to add multilib capability to the 64bit system.  You simply take them from the 32-bit Slackware package tree! \\  This was one of the reasons for not adding full multilib to Slackware64 - we create the right preconditions but require the user to act if she needs multilib. \\ In a [[#detailed_instructions | section further down]], I will explain how you can take a 32-bit Slackware package (say, the "mesa" package) and re-package its content into a "mesa-compat32" package that you can install straight away on Slackware64. When Slackware64 was released, it had an advantage over the 64bit "forks" that existed out there. These forks added the 32bit compatibility layer by recompiling a lot of their packages as 32bit binaries. Slackware on the other hand, is a distribution that consists of a 32bit and 64bit release, both of which are being developed in parallel. This means, that you do not have to compile 32-bit packages from scratch in order to add multilib capability to the 64bit system.  You simply take them from the 32-bit Slackware package tree! \\  This was one of the reasons for not adding full multilib to Slackware64 - we create the right preconditions but require the user to act if she needs multilib. \\ In a [[#detailed_instructions | section further down]], I will explain how you can take a 32-bit Slackware package (say, the "mesa" package) and re-package its content into a "mesa-compat32" package that you can install straight away on Slackware64.
 +
 +<note>Slackware for the x86_64 architecture (or "//Slackware64//" for short) is a pure 64-bit Operating System, but easily upgradable to multilib. //Out of the box, Slackware64 is only capable of compiling and running 64bit binaries.//</note>
  
  
Line 19: Line 19:
   * [[http://winehq.org/ | Wine]] \\ Most Windows programs are still 32bit, and in order to run those on Linux with Wine, you need a 32bit version of Wine.   * [[http://winehq.org/ | Wine]] \\ Most Windows programs are still 32bit, and in order to run those on Linux with Wine, you need a 32bit version of Wine.
   * [[http://www.virtualbox.org/ | VirtualBox]] \\ The popular virtual machine software. Although this is (partly) open source it still needs 32-bit compatibility libraries on 64-bit Slackware.   * [[http://www.virtualbox.org/ | VirtualBox]] \\ The popular virtual machine software. Although this is (partly) open source it still needs 32-bit compatibility libraries on 64-bit Slackware.
 +  * [[http://steampowered.com|Steam]] \\ The highly popular gaming platform still needs a [[http://www.slackware.com/~alien/slackbuilds/steamclient/|32bit client]]. Most of the available games are 32bit as well.
   * [[http://www.skype.com/ | Skype]], [[http://www.citrix.com/lang/English/home.asp | Citrix client]],  ... \\ These programs are proprietary and closed-source. We have to depend on the developer to make 64bit binaries available. So far, that has not happened for these example programs.   * [[http://www.skype.com/ | Skype]], [[http://www.citrix.com/lang/English/home.asp | Citrix client]],  ... \\ These programs are proprietary and closed-source. We have to depend on the developer to make 64bit binaries available. So far, that has not happened for these example programs.
  
 Luckily, 64bit support is becoming more and more common. Adobe was a sore point for a long time, but they eventually released their Flash browser plugin in a 64bit version. Sun (now absorbed by Oracle) revealed a 64bit version of their Java browser plugin. These two events were major triggers to start working on Slackware64. Luckily, 64bit support is becoming more and more common. Adobe was a sore point for a long time, but they eventually released their Flash browser plugin in a 64bit version. Sun (now absorbed by Oracle) revealed a 64bit version of their Java browser plugin. These two events were major triggers to start working on Slackware64.
- 
  
 ===== Obtaining multilib packages ===== ===== Obtaining multilib packages =====
Line 30: Line 30:
 Apart from several README files (this Wiki article basically is an enhanced version of one of these READMEs), you will find one subdirectory for every 64-bit Slackware release below the toplevel directory "//multilib//". There is another directory called "source". The "//source//" directory contains package sources and SlackBuild scripts.\\ The stuff that you are really interested in - the binary packages - is available in the //<slackware_release_number>// directory below the toplevel directory. Every such directory also contains a "//slackware64-compat32//" subdirectory where you will find an essential set of converted 32-bit Slackware packages, ready for installing on your 64-bit Slackware. Apart from several README files (this Wiki article basically is an enhanced version of one of these READMEs), you will find one subdirectory for every 64-bit Slackware release below the toplevel directory "//multilib//". There is another directory called "source". The "//source//" directory contains package sources and SlackBuild scripts.\\ The stuff that you are really interested in - the binary packages - is available in the //<slackware_release_number>// directory below the toplevel directory. Every such directory also contains a "//slackware64-compat32//" subdirectory where you will find an essential set of converted 32-bit Slackware packages, ready for installing on your 64-bit Slackware.
  
-<note tip>In order to keep up to date, I advise you to keep an eye on the [[http://slackware.com/~alien/multilib/ChangeLog.txt | ChangeLog]] ([[http://slackware.com/~alien/multilib/ChangeLog.rss|RSS feed]]) which I maintain for my multilib packages. Usually, I will have //updated glibc and gcc// packages available within a day after Slackware has updates to gcc and glibc. Also check out [[#rd_party_support_tools | compat32pkg]] by Sėbastien Ballet which automates this process, similar to slackpkg.</note> 
  
 +===== Keeping your multilib up-to-date =====
 +
 +In order to keep up to date, I advise you to keep an eye on the [[http://slackware.com/~alien/multilib/ChangeLog.txt | ChangeLog]] ([[http://slackware.com/~alien/multilib/ChangeLog.rss|RSS feed]]) which I maintain for my multilib packages. Usually, I will have //updated glibc and gcc// packages available within a day after Slackware has updates to gcc and glibc.
  
 +Automation:
 +  - Check out [[#rd_party_support_tools | compat32pkg]] by Sėbastien Ballet which automates this process, similar to slackpkg.
 +  - If you prefer slackpkg for package management, then it is worthwhile to check out [[http://slakfinder.org/slackpkg+.html|slackpkg+]], an extension to slackpkg which manages the packages you installed from 3rd-party repositories - including multilib. When properly configured, keeping your multilib is as easy as running: <code>
 +# slackpkg update
 +# slackpkg upgrade multilib
 +# slackpkg install multilib
 +</code> That last command will show you if any new packages were added to the collection of "compat32" packages, such as llvm-compat32 and orc-compat32 recently.
 +    * This is how a typical configuration would look like - for a computer running Slackware-current and using Alien BOB's KDE testing repository. The PKGS_PRIORITY ensures that multilib packages of gcc and glibc have precedence over the Slackware originals. The keyword "multilib" which defines the name for the repository must be the same keyword used in the "slackpkg" commands above. The choice of the word "multilib" is arbitrary, it could just as well have been "compat32", as long as you use it consistently. \\ Contents of an example file "/etc/slackpkg/slackpkgplus.conf" would be as follows: <file>
 +SLACKPKGPLUS=on
 +VERBOSE=1
 +ALLOW32BIT=off
 +USEBL=1
 +WGETOPTS="--timeout=5 --tries=1"
 +GREYLIST=on
 +PKGS_PRIORITY=( multilib restricted alienbob ktown )
 +REPOPLUS=( slackpkgplus multilib restricted alienbob ktown )
 +MIRRORPLUS['multilib']=https://slackware.nl/people/alien/multilib/current/
 +MIRRORPLUS['alienbob']=https://slackware.nl/people/alien/sbrepos/current/x86_64/
 +MIRRORPLUS['restricted']=https://slackware.nl/people/alien/restricted_sbrepos/current/x86_64/
 +MIRRORPLUS['ktown']=https://slackware.nl/alien-kde/current/latest/x86_64/
 +MIRRORPLUS['slackpkgplus']=https://slackware.nl/slackpkgplus/
 +</file> 
 ===== Enabling multilib support on Slackware64 ===== ===== Enabling multilib support on Slackware64 =====
  
Line 39: Line 63:
 This section contains the essential instructions to add full multilib capability to your Slackware64 system. If you want to understand the process in more detail, or need information on how to compile 32bit software in Slackware64, you should also read the sections that follow.\\ Note that the "''#''" in front of the commands depicts a //root prompt// This section contains the essential instructions to add full multilib capability to your Slackware64 system. If you want to understand the process in more detail, or need information on how to compile 32bit software in Slackware64, you should also read the sections that follow.\\ Note that the "''#''" in front of the commands depicts a //root prompt//
  
-  * Download the packages from my web site (I gave you the URL in [[#obtaining_multilib_packages | the previous section]], but this example is using a mirror URL). Suppose you are running Slackware 14.1. You execute: <code> +  * Download the packages from my web site (I gave you the URL in [[#obtaining_multilib_packages | the previous section]], but this example is using a mirror URL). Suppose you are running Slackware 15.0. You execute: <code> 
-# SLACKVER=14.1+# SLACKVER=15.0
 # mkdir multilib # mkdir multilib
 # cd multilib # cd multilib
-# lftp -c "open http://taper.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}"+# lftp -c "open http://slackware.nl/people/alien/multilib/ ; mirror -c -e ${SLACKVER}"
 # cd ${SLACKVER} # cd ${SLACKVER}
 </code> </code>
Line 53: Line 77:
 </code> which will install all the converted 32-bit Slackware packages (or upgrade them if you already had installed older multilib packages, for instance when you are upgrading to a newer Slackware). That's all! </code> which will install all the converted 32-bit Slackware packages (or upgrade them if you already had installed older multilib packages, for instance when you are upgrading to a newer Slackware). That's all!
   * If you can not find a subdirectory called //slackware64-compat32// then either you did not download it, or the download mirror did not provide it. In this case, you have to do the 32-bit package conversion yourself. Not difficult at all, it takes a few minutes:   * If you can not find a subdirectory called //slackware64-compat32// then either you did not download it, or the download mirror did not provide it. In this case, you have to do the 32-bit package conversion yourself. Not difficult at all, it takes a few minutes:
-    * The fastest is if you have a local directory with original 32-bit Slackware packages available (also called a //local mirror//). Those who bought an official Slackware DVD can simply use that DVD: it is dual-sided and 32bit Slackware is on one of the sides. __For the sake of this example__ I will assume that you have a local 32bit Slackware directory tree available at "''/home/ftp/pub/slackware/slackware-14.1/slackware/''".\\ There should be sub-directories called 'a', 'ap', 'd', 'l', 'n', 'x' immediately below this directory. (If you have mounted a Slackware DVD, your directory will probably be "''/media/SlackDVD/slackware/''" but I will not use that in the example commands below).+    * The fastest is if you have a local directory with original 32-bit Slackware packages available (also called a //local mirror//). Those who bought an official Slackware DVD can simply use that DVD: it is dual-sided and 32bit Slackware is on one of the sides. __For the sake of this example__ I will assume that you have a local 32bit Slackware directory tree available at "''/home/ftp/pub/slackware/slackware-15.0/slackware/''".\\ There should be sub-directories called 'a', 'ap', 'd', 'l', 'n', 'x' immediately below this directory. (If you have mounted a Slackware DVD, your directory will probably be "''/media/SlackDVD/slackware/''" but I will not use that in the example commands below).
     * Create a new empty directory (let us call it 'slackware64-compat32') and change into it: <code>     * Create a new empty directory (let us call it 'slackware64-compat32') and change into it: <code>
 # mkdir slackware64-compat32 ; cd slackware64-compat32 # mkdir slackware64-compat32 ; cd slackware64-compat32
 </code> </code>
     * Run the following command to create a set of 32bit compatibility packages, using the directory to the official 32bit Slackware packages as input: <code>     * Run the following command to create a set of 32bit compatibility packages, using the directory to the official 32bit Slackware packages as input: <code>
-# massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.1/slackware/+# massconvert32.sh -i /home/ftp/pub/slackware/slackware-15.0/slackware/
 </code> </code>
     * The previous step takes a while. When it ends, proceed to install the 90 MB of freshly converted 32-bit Slackware packages which were created in subdirectories below your //current directory//: <code>     * The previous step takes a while. When it ends, proceed to install the 90 MB of freshly converted 32-bit Slackware packages which were created in subdirectories below your //current directory//: <code>
Line 65: Line 89:
     * Done! You can now start downloading, installing and running 32bit programs. This was not so hard, was it?     * Done! You can now start downloading, installing and running 32bit programs. This was not so hard, was it?
  
-<note warning>If you use a package manager like //slackpkg// you will have to add all the ''glibc'' and ''gcc'' package names to its package blacklist. If you do not take this precaution, you run the risk of your package manager accidentally replacing your multilib versions with Slackware's original pure 64-bit versions!\\ If you run Slackware 13.37 or newer, then slackpkg supports regular expressions in the blacklist file. In that case, a single line in ''/etc/slackpkg/blacklist'' will be enough to blacklist all of my packages (including multilib gcc and glibc packages and all ''compat32'' packages): <code>+<note warning>If you use a package manager like //slackpkg// on Slackware releases older dan 13.37 you will have to add all the ''glibc'' and ''gcc'' package names to its package blacklist. If you do not take this precaution, you run the risk of your package manager accidentally replacing your multilib versions with Slackware's original pure 64-bit versions!\\ If you run Slackware 13.37 or newer, then slackpkg supports regular expressions in the blacklist file. In that case, a single line in ''/etc/slackpkg/blacklist'' will be enough to blacklist all of my packages (including multilib gcc and glibc packages and all ''compat32'' packages): <code>
 [0-9]+alien [0-9]+alien
-[0-9]+compat32</code></note>+[0-9]+compat32 
 +</code> On the other hand, if you are using the slackpkg extension called [[http://slakfinder.org/slackpkg+.html|slackpkg+]] then you should definitely **not** blacklist these packages, because that prevents slackpkg+ from managing them!</note>
  
 <note tip>If you are running Slackware 13.1 or newer, and downloaded the compat32-tools package for that release, the //massconvert32.sh// script can use a remote webserver to download the 32-bit Slackware packages from, instead of requiring a local Slackware mirror or a DVD. You use the "-u" parameter to specify the remote URL like this: <code> <note tip>If you are running Slackware 13.1 or newer, and downloaded the compat32-tools package for that release, the //massconvert32.sh// script can use a remote webserver to download the 32-bit Slackware packages from, instead of requiring a local Slackware mirror or a DVD. You use the "-u" parameter to specify the remote URL like this: <code>
-# massconvert32.sh -u http://someserver.org/path/to/slackware-14.1/slackware+# massconvert32.sh -u http://someserver.org/path/to/slackware-15.0/slackware
 </code> </note> </code> </note>
- 
  
 ==== Detailed instructions ==== ==== Detailed instructions ====
Line 126: Line 150:
     * glibc-profile-2.13_multilib-x86_64-7alien.txz     * glibc-profile-2.13_multilib-x86_64-7alien.txz
     * glibc-solibs-2.13_multilib-x86_64-7alien.txz     * glibc-solibs-2.13_multilib-x86_64-7alien.txz
-    * glibc-zoneinfo-2013d_multilib-noarch-7alien.txz 
  
 ====Slackware64 14.0==== ====Slackware64 14.0====
Line 138: Line 161:
     * gcc-objc-4.7.1_multilib-x86_64-1alien.txz     * gcc-objc-4.7.1_multilib-x86_64-1alien.txz
   * The GNU libc libraries:   * The GNU libc libraries:
-    * glibc-2.15_multilib-x86_64-8alien.txz +    * glibc-2.15_multilib-x86_64-9alien.txz 
-    * glibc-i18n-2.15_multilib-x86_64-8alien.txz +    * glibc-i18n-2.15_multilib-x86_64-9alien.txz 
-    * glibc-profile-2.15_multilib-x86_64-8alien.txz +    * glibc-profile-2.15_multilib-x86_64-9alien.txz 
-    * glibc-solibs-2.15_multilib-x86_64-8alien.txz +    * glibc-solibs-2.15_multilib-x86_64-9alien.txz
-    * glibc-zoneinfo-2013d_2013d_multilib-noarch-8alien.txz+
  
 ====Slackware64 14.1==== ====Slackware64 14.1====
Line 148: Line 170:
   * The gcc compiler suite:   * The gcc compiler suite:
     * gcc-4.8.2_multilib-x86_64-1alien.txz     * gcc-4.8.2_multilib-x86_64-1alien.txz
-    * gcc-g++-4.8.@_multilib-x86_64-1alien.txz+    * gcc-g++-4.8.2_multilib-x86_64-1alien.txz
     * gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz     * gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz
     * gcc-gnat-4.8.2_multilib-x86_64-1alien.txz     * gcc-gnat-4.8.2_multilib-x86_64-1alien.txz
Line 155: Line 177:
     * gcc-objc-4.8.2_multilib-x86_64-1alien.txz     * gcc-objc-4.8.2_multilib-x86_64-1alien.txz
   * The GNU libc libraries:   * The GNU libc libraries:
-    * glibc-2.17_multilib-x86_64-7alien.txz +    * glibc-2.17_multilib-x86_64-10alien.txz 
-    * glibc-i18n-2.17_multilib-x86_64-7alien.txz +    * glibc-i18n-2.17_multilib-x86_64-10alien.txz 
-    * glibc-profile-2.17_multilib-x86_64-7alien.txz +    * glibc-profile-2.17_multilib-x86_64-10alien.txz 
-    * glibc-solibs-2.17_multilib-x86_64-7alien.txz +    * glibc-solibs-2.17_multilib-x86_64-10alien.txz 
-    * glibc-zoneinfo-2013d_multilib-noarch-7alien.txz+ 
 +====Slackware64 14.2==== 
 + 
 +  * The gcc compiler suite: 
 +    * gcc-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-g++-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-gfortran-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-gnat-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-go-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-java-5.3.0_multilib-x86_64-3alien.txz 
 +    * gcc-objc-5.3.0_multilib-x86_64-3alien.txz 
 +  * The GNU libc libraries: 
 +    * glibc-2.23_multilib-x86_64-2alien.txz 
 +    * glibc-i18n-2.23_multilib-x86_64-2alien.txz 
 +    * glibc-profile-2.23_multilib-x86_64-2alien.txz 
 +    * glibc-solibs-2.23_multilib-x86_64-2alien.txz
  
 ====Slackware64 current==== ====Slackware64 current====
Line 166: Line 203:
  
   * The gcc compiler suite:   * The gcc compiler suite:
-    * gcc-4.8.2_multilib-x86_64-1alien.txz +    * gcc-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-g++-4.8.@_multilib-x86_64-1alien.txz +    * gcc-g++-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz +    * gcc-gdc-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-gnat-4.8.2_multilib-x86_64-1alien.txz +    * gcc-gfortran-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-go-4.8.2_multilib-x86_64-1alien.txz +    * gcc-gm2-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-java-4.8.2_multilib-x86_64-1alien.txz +    * gcc-gnat-13.2.0_multilib-x86_64-1alien.txz 
-    * gcc-objc-4.8.2_multilib-x86_64-1alien.txz+    * gcc-go-13.2.0_multilib-x86_64-1alien.txz 
 +    * gcc-objc-13.2.0_multilib-x86_64-1alien.txz 
   * The GNU libc libraries:   * The GNU libc libraries:
-    * glibc-2.17_multilib-x86_64-7alien.txz +    * aaa_glibc-solibs-2.38_multilib-x86_64-3alien.txz 
-    * glibc-i18n-2.17_multilib-x86_64-7alien.txz +    * glibc-2.38_multilib-x86_64-3alien.txz 
-    * glibc-profile-2.17_multilib-x86_64-7alien.txz +    * glibc-i18n-2.38_multilib-x86_64-3alien.txz 
-    * glibc-solibs-2.17_multilib-x86_64-7alien.txz +    * glibc-profile-2.38_multilib-x86_64-3alien.txz
-    * glibc-zoneinfo-2013d_multilib-noarch-7alien.txz+
  
-There is one additional package that you install using the "installpkg" program:+<note>Since the update to gcc 7, there is no more ''gcc-java'' package because its development has ceased.</note> 
 +<note>The ''glibc-zoneinfo'' package is not a part of multilib, since it does not contain code.  You need to install Slackware's stock ''glibc-zoneinfo'' package.</note>
  
-  * The "32-bit toolkit" (scripts that facilitate the creation of 32bit packages) +====All releases of Slackware====
-    * compat32-tools-3.1-noarch-3alien.tgz+
  
-<note>Slamd64 had separate 64bit and 32bit gcc/glibc multilib packages.\\ However, I believe that it is cleaner to keep these essential multilib packages undivided I followed the concept already used in Slackware64's own //binutils// package, which has 64-bit and 32-bit multilib capability bundled into one package.</note>+There is one additional package that you need to install using the "installpkg" programThe actual version may vary for each release of Slackware, but the package can be found in the same directory where you also find the multilib versions of ''gcc'' and ''glibc'': 
 + 
 +  * The "32bit toolkit" (scripts that facilitate the creation of 32bit packages) 
 +    * compat32-tools-3.10-noarch-8alien.tgz
  
  
Line 198: Line 239:
 A little bit of extra care is required so that unnecessary/unwanted files are stripped from the 32bit packages before you install them. What you need, is a 32bit package that does not conflict with whatever is already present in 64bit Slackware. Hence the name "32bit compatibility package". A little bit of extra care is required so that unnecessary/unwanted files are stripped from the 32bit packages before you install them. What you need, is a 32bit package that does not conflict with whatever is already present in 64bit Slackware. Hence the name "32bit compatibility package".
  
-I decided that it would be a waste of download bandwidth if I created 32bit compatibility versions of Slackware packages myself. After all, you have probably bought the Slackware 14.DVD so you already possess both 64bit and 32bit versions of Slackware... or else the 32bit Slackware tree is available for free download of course ;-)+I decided that it would be a waste of download bandwidth if I created 32bit compatibility versions of Slackware packages myself. After all, you have probably bought the Slackware 14.DVD so you already possess both 64bit and 32bit versions of Slackware... or else the 32bit Slackware tree is available for free download of course ;-)
  
 Instead, I wrote a few scripts (parts of the script code were written by Fred Emmott of [[http://slamd64.com/ | Slamd64]] fame) and wrapped these into a "//compat32-tools//" package. Their purpose is to let you extract the content from any 32bit Slackware package and use that to create a new package  which you can safely install on your 64bit Slackware. Instead, I wrote a few scripts (parts of the script code were written by Fred Emmott of [[http://slamd64.com/ | Slamd64]] fame) and wrapped these into a "//compat32-tools//" package. Their purpose is to let you extract the content from any 32bit Slackware package and use that to create a new package  which you can safely install on your 64bit Slackware.
Line 208: Line 249:
   * //convertpkg-compat32//\\ This script takes a 32-bit Slackware package and converts it to a '-compat32' package that you can safely install (using "installpkg") on Slackware64, alongside the 64-bit version of the same software package.  For instance: suppose you need 32bit libraries that are in the mesa package. You take the mesa package from 32-bit Slackware (''x/mesa-7.5-i486-1.txz'') and then run <code>   * //convertpkg-compat32//\\ This script takes a 32-bit Slackware package and converts it to a '-compat32' package that you can safely install (using "installpkg") on Slackware64, alongside the 64-bit version of the same software package.  For instance: suppose you need 32bit libraries that are in the mesa package. You take the mesa package from 32-bit Slackware (''x/mesa-7.5-i486-1.txz'') and then run <code>
 # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz
-</code> which will create a new package called ''mesa-compat32-7.5-x86_64-1.txz''. This new package (which is created in your ''/tmp'' directory unless you specified another destination) is basically the old 32bit package, but stripped from non-essential stuff. The changed basename (//mesa// becomes //mesa-compat32//) allows you to install this new package in Slackware64 where it will co-exist with the 64bit //mesa// package, not overwriting any files.\\ The script leaves temporary files in the directory "''/tmp/package-<prgnam>-compat32''" which you can safely delete.+</code> which will create a new package called ''mesa-compat32-7.5-x86_64-1compat32.txz''. This new package (which is created in your ''/tmp'' directory unless you specified another destination) is basically the old 32bit package, but stripped from non-essential stuff. The changed basename (//mesa// becomes //mesa-compat32//) allows you to install this new package in Slackware64 where it will co-exist with the 64bit //mesa// package, not overwriting any files.\\ The script leaves temporary files in the directory "''/tmp/package-<prgnam>-compat32''" which you can safely delete.
  
-  * //massconvert32.sh//\\ This script contains an internal list of what I consider the essential subset of 32-bit Slackware packages. It uses the above "//convertpkg-compat32//" script to grab every package that is on this internal list, and convert these into '-compat32' packages.\\ You need to run this script only once, for example like this (the example assumes that you mounted your 32bit Slackware DVD on ''/mnt/dvd''): <code>+  * //massconvert32.sh//\\ This script contains an internal list of what I consider the essential subset of 32bit Slackware packages. It uses the above "//convertpkg-compat32//" script to grab every package that is on this internal list, and convert these into '-compat32' packages.\\ You need to run this script only once, for example like this (the example assumes that you mounted your 32bit Slackware DVD on ''/mnt/dvd''): <code>
 # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32 # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32
-</code> This action will result in about 60 MB of new packages which you will find inside the newly created directory ''~/compat32'' (the directory's name is arbitrary of course, I chose it for the sake of this example). These packages comprise the 32bit component of your multilib Slackware64 system.\\ They should be installed using "''installpkg''", and they give you a pretty complete 32-bit compatibility layer on top of Slackware64: <code>+</code> This action will result in about 150 MB of new packages which you will find inside the newly created directory ''~/compat32'' (the directory's name is arbitrary of course, I chose it for the sake of this example). These packages comprise the 32bit component of your multilib Slackware64 system.\\ They should be installed using "''installpkg''", and they give you a pretty complete 32-bit compatibility layer on top of Slackware64: <code>
 # installpkg ~/compat32/*/*.t?z # installpkg ~/compat32/*/*.t?z
 </code> If you are upgrading from an earlier version of these packages (because for instance you upgraded your 64-bit Slackware to a newer release) then you do not use "''installpkg''" of course, but "''upgradepkg --install-new''" instead: <code> </code> If you are upgrading from an earlier version of these packages (because for instance you upgraded your 64-bit Slackware to a newer release) then you do not use "''installpkg''" of course, but "''upgradepkg --install-new''" instead: <code>
Line 263: Line 304:
 ===== Packages converted by massconvert32.sh ===== ===== Packages converted by massconvert32.sh =====
  
-This is the list of packages that is converted into "//-compat32//" versions by the ''massconvert32.sh'' script. Note that some of these packages are not part of Slackware 13.0 or 13.1, they were added in a later Slackware version so they will produce a "//*** FAIL: package 'package_name' was not found!//" message when you run the script on an older release. The other way round is true as well - some packages have been //removed// in later versions of Slackware and they will also trigger the "//*** FAIL: package 'package_name' was not found!//" message. Don't worry about that.+This is the list of packages that is converted into "//-compat32//" versions by the ''massconvert32.sh'' script. Note that some of these packages are not part of older Slackware releases, they were added in a later Slackware version so they will produce a "//*** FAIL: package 'package_name' was not found!//" message when you run the script on an older release. The other way round is true as well - some packages have been //removed// in later versions of Slackware and they will also trigger the "//*** FAIL: package 'package_name' was not found!//" message. Don't worry about that.
  
 <code bash> <code bash>
Line 269: Line 310:
  
 aaa_elflibs aaa_elflibs
 +aaa_libraries
 attr attr
 bzip2 bzip2
 +cracklib
 cups cups
 cxxlibs cxxlibs
 dbus dbus
 e2fsprogs e2fsprogs
 +elogind
 +eudev
 +libgudev
 +libpwquality
 +lzlib
 openssl-solibs openssl-solibs
 +openssl10-solibs
 +openssl11-solibs
 +pam
 +plzip
 +udev
 util-linux util-linux
 +xz
  
 # The AP/ series: # The AP/ series:
  
 +cdparanoia
 +cups
 +cups-filters
 flac flac
 +lm_sensors
 mariadb mariadb
 mpg123 mpg123
Line 289: Line 347:
  
 libtool libtool
 +llvm
 +opencl-headers
  
 # The L/ series: # The L/ series:
  
 +Imath
 +Mako
 +SDL2
 +SDL2_gfx
 +SDL2_image
 +SDL2_mixer
 +SDL2_net
 +SDL2_ttf
 +aalib
 alsa-lib alsa-lib
 alsa-oss alsa-oss
 +alsa-plugins
 atk atk
 +at-spi2-atk
 +at-spi2-core
 audiofile audiofile
 +brotli
 cairo cairo
 dbus-glib dbus-glib
 +elfutils
 esound esound
 expat expat
 +ffmpeg
 +fftw
 +fluidsynth
 freetype freetype
 fribidi fribidi
 gamin gamin
 +gc
 gdk-pixbuf2 gdk-pixbuf2
 +gdk-pixbuf2-xlib
 giflib giflib
 glib2 glib2
 gmp gmp
 +gnome-keyring
 +gobject-introspection
 +graphene
 +graphite2
 gtk+2 gtk+2
 +gtk+3
 +gst-plugins-bad-free
 gst-plugins-base gst-plugins-base
 +gst-plugins-base0
 gst-plugins-good gst-plugins-good
 +gst-plugins-good0
 +gst-plugins-libav
 gstreamer gstreamer
 +gstreamer0
 hal hal
 harfbuzz harfbuzz
 icu4c icu4c
 +isl
 +jansson
 jasper jasper
 +json-c
 +json-glib
 +keyutils
 +lame
 lcms lcms
 lcms2 lcms2
-lesstif+libaio 
 +libarchive
 libart_lgpl libart_lgpl
 +libasyncns
 +libbluray
 +libcaca
 +libcap
 +libcdio
 +libcdio-paranoia
 +libclc
 +libcroco
 +libdbusmenu
 +libdeflate
 +libdvdnav
 +libedit
 libelf libelf
 libexif libexif
 libffi libffi
 libglade libglade
 +libgnt
 libgphoto2 libgphoto2
 libidn libidn
 +libidn2
 libieee1284 libieee1284
 libjpeg libjpeg
 +libjpeg-turbo
 +libmad
 libmng libmng
 libmpc libmpc
 +libnice
 +libnl3
 +libnsl
 +libnotify
 +libnss_nis
 libogg libogg
 libpcap libpcap
 libpng libpng
 +librsvg
 libsamplerate libsamplerate
 +libsigc++3
 libsndfile libsndfile
 +libssh
 +libtasn1
 libtermcap libtermcap
 +libtheora
 libtiff libtiff
 +libunistring
 +libunwind
 +liburing
 libusb libusb
 +libvisual
 libvorbis libvorbis
 +libvpx
 +libwebp
 +libxkbcommon
 libxml2 libxml2
 libxslt libxslt
 +lmdb
 +lz4
 +lzo
 +mozilla-nss
 +neon
 ncurses ncurses
 +ocl-icd
 +openal-soft
 +opencv
 +openexr
 +openjpeg
 +opus
 +orc
 pango pango
 +pcre
 +pcre2
 +pipewire
 +polkit
 popt popt
 +pulseaudio
 +python-six
 +qrencode
 qt qt
 +qt5
 readline readline
 +rpcsvc-proto
 +sbc
 sdl sdl
-seamonkey-solibs+slang 
 +speex 
 +speexdsp 
 +spirv-llvm-translator
 startup-notification startup-notification
 svgalib svgalib
 +taglib
 +talloc
 +tdb
 +tevent
 v4l-utils v4l-utils
 +vid.stab
 +wavpack
 +woff2
 +xxHash
 zlib zlib
 +zstd
 +zxing-cpp
  
 # The N/ series: # The N/ series:
  
 +c-ares
 curl curl
 cyrus-sasl cyrus-sasl
 gnutls gnutls
 +krb5
 libgcrypt libgcrypt
 libgpg-error libgpg-error
 +libtirpc
 nettle nettle
 +nghttp2
 openldap-client openldap-client
 +openldap
 openssl openssl
 p11-kit p11-kit
 +samba
  
 # The X/ series: # The X/ series:
  
 +egl-wayland
 +eglexternalplatform
 fontconfig fontconfig
 +freeglut
 glew glew
 glu glu
 +intel-vaapi-driver
 libFS libFS
 libICE libICE
Line 385: Line 559:
 libXfixes libXfixes
 libXfont libXfont
 +libXfont2
 libXfontcache libXfontcache
 libXft libXft
Line 405: Line 580:
 libdmx libdmx
 libdrm libdrm
 +libepoxy
 libfontenc libfontenc
 +libglvnd
 +libinput
 libpciaccess libpciaccess
 +libpthread-stubs
 +libva
 +libva-intel-driver
 +libvdpau
 +libwacom
 libxcb libxcb
 +libxshmfence
 mesa mesa
 pixman pixman
 +vulkan-sdk
 +wayland
 xcb-util xcb-util
 +xcb-util-keysyms
 +xorgproto
  
 # The XAP/ series: # The XAP/ series:
  
 sane sane
-xsane 
  
 </code> </code>
Line 425: Line 612:
  
   * [[http://slackware.com/~alien/multilib/ | http://slackware.com/~alien/multilib/]]   * [[http://slackware.com/~alien/multilib/ | http://slackware.com/~alien/multilib/]]
-  * [[http://taper.alienbase.nl/mirrors/people/alien/multilib/ | http://taper.alienbase.nl/mirrors/people/alien/multilib/]] +  * [[http://slackware.nl/people/alien/multilib/ | http://slackware.nl/people/alien/multilib/]] 
-  * [[http://slackware.org.uk/people/alien/multilib/| http://slackware.org.uk/people/alien/multilib/]] +  * [[https://slackware.uk/people/alien/multilib/| http://slackware.uk/people/alien/multilib/]] 
-  * [[http://alien.slackbook.org/slackware/multilib/| http://alien.slackbook.org/slackware/multilib/]]+  * [[https://alien.slackbook.org/slackware/multilib/| http://alien.slackbook.org/slackware/multilib/]] 
 +  * [[https://slackbuilds.org/mirror/alien/multilib/| http://slackbuilds.org/mirror/alien/multilib/]] 
  
 ===== 3rd party support tools ===== ===== 3rd party support tools =====
Line 443: Line 632:
 ===== Acknowledgements ===== ===== Acknowledgements =====
  
-  * A lot of thanks should go to Fred Emmott, who created Slamd64, the original unofficial 64-bit fork of Slackware.  Although Slackware64 was not based on Fred's work, I still learnt most of what I know about setting up the 32-bit part of a multilib Linux from his writings that are found in Slamd64.+  * A lot of thanks should go to Fred Emmott, who created Slamd64, the original unofficial 64-bit fork of Slackware.  Although Slackware64 was not based on Fred's work, I still learnt most of what I know about setting up the 32-bit part of a multilib Linux from his writings that are found in Slamd64.\\ Note that Slamd64 had separate 64bit and 32bit gcc/glibc multilib packages. However, I believe that it is cleaner to keep these essential multilib packages undivided.  I followed the concept already used in Slackware64's own //binutils// package, which has 64-bit and 32-bit multilib capability bundled into one package. 
  
   * Cross Linux From Scratch.\\ The CLFS Wiki (http://trac.cross-lfs.org/wiki/read#ReadtheCrossLinuxFromScratchBookOnline) is a 'must-read' if you want to understand how to port Linux to a new architecture. I took several ideas, concepts and patches from them when creating Slackware64 from scratch, and again when I created my multilib gcc/glibc packages from scratch (my README on this multilib-from-scratch is available in the ./source directory).   * Cross Linux From Scratch.\\ The CLFS Wiki (http://trac.cross-lfs.org/wiki/read#ReadtheCrossLinuxFromScratchBookOnline) is a 'must-read' if you want to understand how to port Linux to a new architecture. I took several ideas, concepts and patches from them when creating Slackware64 from scratch, and again when I created my multilib gcc/glibc packages from scratch (my README on this multilib-from-scratch is available in the ./source directory).
Line 454: Line 644:
 ===== Sources ===== ===== Sources =====
  
-  * The original article, written by Eric Hameleers, is at http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib+  * The original article, written by Eric Hameleers, is at https://wiki.alienbase.nl/doku.php?id=slackware:multilib
  
 <!-- Please do not modify anything below, except adding new tags.--> <!-- Please do not modify anything below, except adding new tags.-->
 <!-- You must also remove the tag-word "template" below. Otherwise your page will not show up in the Table of Contents --> <!-- You must also remove the tag-word "template" below. Otherwise your page will not show up in the Table of Contents -->
 {{tag>slackware multilib author_alienbob}} {{tag>slackware multilib author_alienbob}}
 slackware:multilib ()