Welcome to Eric Hameleers (Alien BOB)'s Wiki pages.

If you want to support my work, please consider a small donation:

Differences

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

Link to this comparison view

slackware:multilib [2011/06/17 13:28]
alien Add reglar expression example for slackpkg's blacklist file.
slackware:multilib [2014/04/05 14:51] (current)
alien [Compiling 32-bit programs] Fix the 32-bit compilation instructions for modern Slackware.
Line 1: Line 1:
-===== Multilib Slackware for x86_64 =====+===== Adding Multilib Capability to Slackware on x86_64 Architecture =====
  
- +This article contains instructions on how to create a //true multilib// Slackware64. A multilib 64bit Linux system is capable of running 64bit as well as 32bit software. The [[http://www.pathname.com/fhs/pub/fhs-2.3.html#LIB64 | Filesystem Hierarchy Standard]] documents the optimal method to achieve a clean separation between 64bit and 32bit software on a single system. When starting with the development of "Slackware64" (the official port to the [[wp>x86_64]] architecture) we chose to adopt this standard. Therefore Slackware64 has been configured to look for 64bit libraries in ''/lib64'' and ''/usr/lib64'' directories. This is why I call Slackware64 "multilib-ready" -  even though 32bit libraries will be looked for in ''/lib'' and ''/usr/lib'', Slackware64 does not ship with any 32bit software.  There is one more step that must be taken (by you, the user) before Slackware64 can be called "multilib-enabled".
-This article contains instructions on how to create a //true multilib// Slackware64. A multilib 64bit Linux system is capable of running 64bit as well as 32bit software. The [[http://www.pathname.com/fhs/pub/fhs-2.3.html#LIB64 | Filesystem Hierarchy Standard]] dictates the best way to achieve a clean separation between 64bit and 32bit software on a single system. With Slackware64 we chose to adopt this standard, so it has been prepared to look for 64bit libraries in ''/lib64'' and ''/usr/lib64'' directories. This is why I call Slackware64 "multilib-ready" -  even though 32bit libraries will be looked for in ''/lib'' and ''/usr/lib'', Slackware64 does not ship with any 32bit software.  There is one more step to take before Slackware64 can be called "multilib-enabled".+
  
 This is accomplished as follows: This is accomplished as follows:
Line 12: Line 11:
 <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> <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>
  
-Slackware64 has an advantage over the 64bit "forks" that exist out there. These forks add 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 version 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.
  
  
Line 22: Line 21:
   * [[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. In the past year, Adobe released their Flash browser plugin in a 64bit version and Sun revealed a 64bit version of their Java browser plugin. This was one of the 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 versionSun (now absorbed by Oracle) revealed a 64bit version of their Java browser plugin. These two events were major triggers to start working on Slackware64.
  
  
Line 29: Line 28:
 You can download a set of multilib-enabled packages and scripts from my web site: http://slackware.com/~alien/multilib/ . You can download a set of multilib-enabled packages and scripts from my web site: http://slackware.com/~alien/multilib/ .
  
-Apart from several README files (this Wiki article is based on 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 | ChangeLog]] I keep 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>+<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 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>
  
  
Line 38: Line 37:
 ==== The quick 'n' dirty instructions ==== ==== The quick 'n' dirty instructions ====
  
-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, read the next sections as well.+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//
  
-  * After downloading the packages from my web site (I gave you the URL in [[#obtaining_multilib_packages | the previous section]]), you upgrade your 64bit Slackware "//gcc//" and "//glibc//" packages to my multilib versions.\\ Run the command <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 14.1. You execute: <code> 
-upgradepkg --reinstall --install-new *.t?z +# SLACKVER=14.1 
-</code> in the directory where you downloaded them.\\ This command will also install an additional package called "//compat32-tools//". +# mkdir multilib 
-  * If you also downloaded a directory called //slackware64-compat32// then you are lucky, because I did the 32bit package conversion for you already! All you do is run the command: <code> +# cd multilib 
-upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z+# lftp -c "open http://taper.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}" 
 +# cd ${SLACKVER} 
 +</code> 
 +  * Upgrade your 64bit Slackware "//gcc//" and "//glibc//" packages to my multilib versions.\\ Run the command <code> 
 +upgradepkg --reinstall --install-new *.t?z 
 +</code> after you changed to the directory where you downloaded these packages.\\ This command will also install an additional package called "//compat32-tools//". 
 +  * If you also downloaded a directory called //slackware64-compat32// (my example "''lftp''" command will have done that) then you are lucky, because I did the 32bit package conversion for you already! All you do is run the command: <code> 
 +upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z
 </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't find that subdirectory called //slackware64-compat32// then you have to do the conversion yourself. Not difficult at all, it takes a few minutes: +  * If you can not find 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-13.37/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-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).
     * 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-13.37/slackware/+massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.1/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>
-upgradepkg --install-new *-compat32/*.t?z+upgradepkg --install-new *-compat32/*.t?z
 </code> </code>
     * 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>[0-9]+alien</code></note>+<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> 
 +[0-9]+alien 
 +[0-9]+compat32</code></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>massconvert32.sh -u http://someserver.org/path/to/slackware-13.37/slackware</code> </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> 
 +massconvert32.sh -u http://someserver.org/path/to/slackware-14.1/slackware 
 +</code> </note>
  
  
Line 68: Line 78:
 === Upgrading glibc and gcc === === Upgrading glibc and gcc ===
  
-The following glibc/gcc packages are replacements for - not additions to - standard Slackware packages.  You use the "upgradepkg" program to upgrade to my multilib versions of gcc and glibc.  You will need these in order to run (glibc), and build (gcc), 32-bit software on your 64-bit Slackware computer:+The following glibc/gcc packages are replacements for - //not additions to// - standard Slackware packages.  You use the "''upgradepkg''" program to upgrade to my multilib versions of gcc and glibc.  You will need these in order to run (glibc), and build (gcc), 32-bit software on your 64-bit Slackware computer:
  
 ====Slackware64 13.0==== ====Slackware64 13.0====
Line 95: Line 105:
     * gcc-java-4.4.4_multilib-x86_64-1alien.txz     * gcc-java-4.4.4_multilib-x86_64-1alien.txz
     * gcc-objc-4.4.4_multilib-x86_64-1alien.txz     * gcc-objc-4.4.4_multilib-x86_64-1alien.txz
- 
   * The GNU libc libraries:   * The GNU libc libraries:
     * glibc-2.11.1_multilib-x86_64-3alien.txz     * glibc-2.11.1_multilib-x86_64-3alien.txz
Line 112: Line 121:
     * gcc-java-4.5.2_multilib-x86_64-2alien.txz     * gcc-java-4.5.2_multilib-x86_64-2alien.txz
     * gcc-objc-4.5.2_multilib-x86_64-2alien.txz     * gcc-objc-4.5.2_multilib-x86_64-2alien.txz
 +  * The GNU libc libraries:
 +    * glibc-2.13_multilib-x86_64-7alien.txz
 +    * glibc-i18n-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-zoneinfo-2013d_multilib-noarch-7alien.txz
  
 +====Slackware64 14.0====
 +
 +  * The gcc compiler suite:
 +    * gcc-g++-4.7.1_multilib-x86_64-1alien.txz
 +    * gcc-gfortran-4.7.1_multilib-x86_64-1alien.txz
 +    * gcc-gnat-4.7.1_multilib-x86_64-1alien.txz
 +    * gcc-go-4.7.1_multilib-x86_64-1alien.txz
 +    * gcc-java-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.13_multilib-x86_64-3alien.txz +    * glibc-2.15_multilib-x86_64-8alien.txz 
-    * glibc-i18n-2.13_multilib-x86_64-3alien.txz +    * glibc-i18n-2.15_multilib-x86_64-8alien.txz 
-    * glibc-profile-2.13_multilib-x86_64-3alien.txz +    * glibc-profile-2.15_multilib-x86_64-8alien.txz 
-    * glibc-solibs-2.13_multilib-x86_64-3alien.txz +    * glibc-solibs-2.15_multilib-x86_64-8alien.txz 
-    * glibc-zoneinfo-2.13_multilib-noarch-3alien.txz+    * glibc-zoneinfo-2013d_2013d_multilib-noarch-8alien.txz 
 + 
 +====Slackware64 14.1==== 
 + 
 +  * The gcc compiler suite: 
 +    * gcc-4.8.2_multilib-x86_64-1alien.txz 
 +    * gcc-g++-4.8.@_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-go-4.8.2_multilib-x86_64-1alien.txz 
 +    * gcc-java-4.8.2_multilib-x86_64-1alien.txz 
 +    * gcc-objc-4.8.2_multilib-x86_64-1alien.txz 
 +  * The GNU libc libraries: 
 +    * glibc-2.17_multilib-x86_64-7alien.txz 
 +    * glibc-i18n-2.17_multilib-x86_64-7alien.txz 
 +    * glibc-profile-2.17_multilib-x86_64-7alien.txz 
 +    * glibc-solibs-2.17_multilib-x86_64-7alien.txz 
 +    * glibc-zoneinfo-2013d_multilib-noarch-7alien.txz
  
 ====Slackware64 current==== ====Slackware64 current====
Line 125: Line 166:
  
   * The gcc compiler suite:   * The gcc compiler suite:
-    * gcc-4.5.3_multilib-x86_64-2alien.txz +    * gcc-4.8.2_multilib-x86_64-1alien.txz 
-    * gcc-g++-4.5.3_multilib-x86_64-2alien.txz +    * gcc-g++-4.8.@_multilib-x86_64-1alien.txz 
-    * gcc-gfortran-4.5.3_multilib-x86_64-2alien.txz +    * gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz 
-    * gcc-gnat-4.5.3_multilib-x86_64-2alien.txz +    * gcc-gnat-4.8.2_multilib-x86_64-1alien.txz 
-    * gcc-java-4.5.3_multilib-x86_64-2alien.txz +    * gcc-go-4.8.2_multilib-x86_64-1alien.txz 
-    * gcc-objc-4.5.3_multilib-x86_64-2alien.txz +    * gcc-java-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.13_multilib-x86_64-5alien.txz +    * glibc-2.17_multilib-x86_64-7alien.txz 
-    * glibc-i18n-2.13_multilib-x86_64-5alien.txz +    * glibc-i18n-2.17_multilib-x86_64-7alien.txz 
-    * glibc-profile-2.13_multilib-x86_64-5alien.txz +    * glibc-profile-2.17_multilib-x86_64-7alien.txz 
-    * glibc-solibs-2.13_multilib-x86_64-5alien.txz +    * glibc-solibs-2.17_multilib-x86_64-7alien.txz 
-    * glibc-zoneinfo-2.13_multilib-noarch-5alien.txz+    * glibc-zoneinfo-2013d_multilib-noarch-7alien.txz
  
 There is one additional package that you install using the "installpkg" program: There is one additional package that you install using the "installpkg" program:
  
   * The "32-bit toolkit" (scripts that facilitate the creation of 32bit packages)   * The "32-bit toolkit" (scripts that facilitate the creation of 32bit packages)
-    * compat32-tools-2.0-noarch-1alien.tgz+    * 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> <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>
Line 157: Line 198:
 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 13.37 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 166: Line 207:
  
   * //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-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.
  
   * //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 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 -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 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>
-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>
-upgradepkg --install-new ~/compat32/*/*.t?z+upgradepkg --install-new ~/compat32/*/*.t?z
 </code> The "//--install-new//" parameter is needed to install the new //''compat32''// packages which were added between releases. </code> The "//--install-new//" parameter is needed to install the new //''compat32''// packages which were added between releases.
  
Line 202: Line 243:
 ===== Compiling 32-bit programs ===== ===== Compiling 32-bit programs =====
  
-In case you need to compile a 32-bit program (wine and grub are two examples of open source programs that are 32-bit only) you first configure your shell environment by running the command: <code> +In case you need to compile a 32-bit program (wine and grub are two examples of open source programs that are 32-bit only) you first configure root's shell environment by running the command: <code> 
-. /etc/profile.d/32dev.sh +. /etc/profile.d/32dev.sh 
-</code> Note the 'dot' in front of the filename - that is actually part of the commandline!  Running this command changes or creates several environment variables.  The effect of this is, that 32-bit versions of binaries are preferred over 64bit binaries when you compile source code - you will be running a 32bit compilation.  The effect will last until you logout from your shell.+</code> Note the 'dot' at the beginning of the line - that is actually part of the commandline! The use of the dot is equivalent to the 'source' command. \\ Running this command changes or creates several environment variables.  The effect of this is, that 32-bit versions of binaries are preferred over 64bit binaries when you compile source code - you will be running a 32bit compilation.  The effect will last until you logout from your root shell.
  
-In this changed environment, you will be able to use standard SlackBuilds to build 32-bit packages for Slackware64.  There are two things to keep in mind: +In this changed environment, you will be able to use standard SlackBuilds to build 32-bit packages for Slackware64.  There's a couple of things to keep in mind: 
-  - You will have to define the ARCH variable as 'x86_64' even though you are compiling a 32-bit program! \\ This is related to the //triplet// of "$ARCH-slackware-linux" which is normally used in the "configure" command. Alsotry setting the ARCH to for instance "i486and you will see that the //CFLAGS// definition for that architecture will result in gcc errors like "//compiler can not create executables//". This is related to the design of SlackBuild script. Rather than editing the script and change/remove //CFLAGS// definitions, you can set the ARCH to "x86_64" and save yourself some time. The real work is being done by the 32dev.sh script+  - You have to define the ARCH variable as 'i486because even on your 'x86_64' computer you are compiling a 32-bit program! \\ This is related to the //triplet// of "$ARCH-slackware-linux" which is normally used in the "configure" command. 
-  - You will have to edit the SlackBuild if it wants to use 'lib64/directories for "$ARCH = x86_64". You have to force it to use 'lib/' directories instead.  Usually, this is accomplished by finding a definition like: <code> +    - As an exceptionyou will have to compile the "winepackage with 'ARCH=x86_64' because you will install this package directly on your multilib computer without converting to a 'compat32' package
-      LIBDIRSUFFIX="64" +  - If you want to install this 32-bit package on Slackware64-multilib you will have to convert it to 'compat32package\\ <code> 
-</code> and changing this line to <code> +# convertpkg-compat32 -i /path/to/your/fresh/foo-VERSION-i486-BUILD.tgz 
-      LIBDIRSUFFIX=""+# upgradepkg --install-new /tmp/foo-compat32-VERSION-x86_64-BUILDcompat32.txz
 </code> </code>
- 
- 
 ===== Caveats ===== ===== Caveats =====
  
Line 230: Line 269:
  
 aaa_elflibs aaa_elflibs
 +attr
 bzip2 bzip2
 cups cups
Line 240: Line 280:
 # The AP/ series: # The AP/ series:
  
 +flac
 +mariadb
 mpg123 mpg123
 mysql mysql
 +sqlite
  
 # The D/ series: # The D/ series:
Line 258: Line 301:
 expat expat
 freetype freetype
 +fribidi
 gamin gamin
 gdk-pixbuf2 gdk-pixbuf2
 +giflib
 glib2 glib2
 +gmp
 gtk+2 gtk+2
 gst-plugins-base gst-plugins-base
Line 266: Line 312:
 gstreamer gstreamer
 hal hal
 +harfbuzz
 +icu4c
 jasper jasper
 lcms lcms
 +lcms2
 +lesstif
 libart_lgpl libart_lgpl
 libelf libelf
 libexif libexif
 +libffi
 libglade libglade
 libgphoto2 libgphoto2
Line 278: Line 329:
 libmng libmng
 libmpc libmpc
 +libogg
 libpcap libpcap
 libpng libpng
 +libsamplerate
 libsndfile libsndfile
 libtermcap libtermcap
 libtiff libtiff
 libusb libusb
 +libvorbis
 libxml2 libxml2
 libxslt libxslt
Line 293: Line 347:
 sdl sdl
 seamonkey-solibs seamonkey-solibs
 +startup-notification
 svgalib svgalib
 v4l-utils v4l-utils
Line 304: Line 359:
 libgcrypt libgcrypt
 libgpg-error libgpg-error
 +nettle
 openldap-client openldap-client
 openssl openssl
 +p11-kit
  
 # The X/ series: # The X/ series:
Line 311: Line 368:
 fontconfig fontconfig
 glew glew
 +glu
 libFS libFS
 libICE libICE
Line 348: Line 406:
 libdrm libdrm
 libfontenc libfontenc
 +libpciaccess
 libxcb libxcb
 mesa mesa
 pixman pixman
 +xcb-util
 +
 +# The XAP/ series:
 +
 +sane
 +xsane
 +
 </code> </code>
  
 +
 +===== Multilib download mirrors =====
 +
 +You can download the multilib packages from (at least) these locations:
 +
 +  * [[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.org.uk/people/alien/multilib/| http://slackware.org.uk/people/alien/multilib/]]
 +  * [[http://alien.slackbook.org/slackware/multilib/| http://alien.slackbook.org/slackware/multilib/]]
  
 ===== 3rd party support tools ===== ===== 3rd party support tools =====
  
   * Sėbastien Ballet has written a tool called //compat32pkg//. On [[http://compat32pkg.sourceforge.net/ | his web site]] he has //compat32pkg// available for download as well as extensive documentation about how to use it on Slackware64.\\ I will quote the site:\\ //"Compat32pkg is an automated tool that provides all the necessary for managing (converting, installing, upgrading, removing) the 32-bit part of AlienBob's multilib for slackware-64, and all 32-bit packages from Slackware-32 for which users could find a needs into a 64-bit environment, like firefox, seamonkey, jre,..."//   * Sėbastien Ballet has written a tool called //compat32pkg//. On [[http://compat32pkg.sourceforge.net/ | his web site]] he has //compat32pkg// available for download as well as extensive documentation about how to use it on Slackware64.\\ I will quote the site:\\ //"Compat32pkg is an automated tool that provides all the necessary for managing (converting, installing, upgrading, removing) the 32-bit part of AlienBob's multilib for slackware-64, and all 32-bit packages from Slackware-32 for which users could find a needs into a 64-bit environment, like firefox, seamonkey, jre,..."//
 +  * There is also [[http://slakfinder.org/slackpkg+.html|slackpkg+]], written by Matteo Rossini (nicknamed zerouno) with contributions from (among others) Sėbastien Ballet. This is a plugin for Slackware's own [[http://slackpkg.org/|slackpkg]] which adds the capability for installing packages from external (3rd-party) unofficial Slackware repositories. It has good support for adding multilib to your 64-bit Slackware and keeping it up to date.
  
 ===== Translations ===== ===== Translations =====
Line 363: Line 438:
   * Bruno Russo translated this article to portuguese (brazil): http://www.brunorusso.eti.br/slackware/doku.php?id=multilib_para_o_slackware_x86_64   * Bruno Russo translated this article to portuguese (brazil): http://www.brunorusso.eti.br/slackware/doku.php?id=multilib_para_o_slackware_x86_64
   * Mehdi Esmaeelpour translated this article to persian: http://www.slack-world.com/index.php/articles/43-general-system/85-multilib-slackware64   * Mehdi Esmaeelpour translated this article to persian: http://www.slack-world.com/index.php/articles/43-general-system/85-multilib-slackware64
 +  * Patrick FONIO and Sebastien BALLET translated this article to french: http://wiki.slackware-fr.org/avance:articles:slackware64-multilib
  
  
Line 375: Line 451:
  
 Eric Eric
 +

Personal Tools
sponsoring