Vous êtes ici: La documentation de Slackware-fr » Thématique Avancé » Articles, Avancé » Rendre votre Slackware 64 multilib

Rendre votre Slackware 64 multilib

par <Patrick FONIO et Sebastien BALLET>

Cet article, qui est la traduction du travail réalisé par Alien BOB, contient les instructions nécessaires pour créer une vraie Slackware-64 multilib.

Un système Linux multilib 64-bits peut faire tourner des applications 64-bits aussi bien que 32-bits.
Le 'Filesystem Hierarchy Standard' indiquant comment séparer clairement les programmes 64-bits et 32-bits sur un même système, avec Slackware-64 nous avons choisi d'adopter ce standard. Elle est donc prête pour utiliser les bibliothèques 64-bits dans les répertoires /lib64 et /usr/lib64. C'est pourquoi je la nomme Slackware-64 'multilib-ready' (même si les bibliothèques 32-bits se trouvent dans /lib et /usr/lib, Slackware-64 ne contient aucun programme 32-bits).
Il y a toutefois une étape supplémentaire à franchir pour que Slackware-64 puisse être dénommée 'multilib-capable'.
On procède de la façon suivante .

  1. Tout d'abord, nous avons besoin de :
    *glibc (c'est-à-dire : Une glibc capable d'exécuter des binaires 32-bits et 64-bits)
    *gcc (c'est-à-dire : Un gcc capable de générer des binaires 32-bits et 64-bits)
  2. Ensuite, on récupére les bibliothèques de la Slackware 32-bits qu'on installe dans la Slackware 64-bits, ce qui constitue la couche de compatibilité 32-bits.


Slackware pour les architectures x86_64 est un système 64-bits « pur », mais qu'il est facile de faire évoluer en un système multilib.

Telle quelle, Slackware-64 ne peut compiler et faire tourner que les binaires 64-bits. Mais Slackware-64 a un avantage par rapport aux 'forks' 64-bits. Ces 'forks' ajoutent une couche de compatibilité 32-bits en recompilant un bon nombre de paquets en binaires 32-bits. Slackware-64 est une distribution constituée d'une version 32-bits et 64-bits développées parallèlement. Ce qui signifie que vous n'avez pas à compiler des paquets 32-bits, vous avez juste à prendre les paquets 32-bits depuis l'arborescence Slackware-32. Voilà pourquoi nous n'avons pas ajouté un multilib complet, les conditions étant en place mais demandent à l'utilisateur de faire le nécessaire s'il veut le multilib.
Dans un chapitre dessous, j'expliquerai comment vous pouvez, à partir d'un paquet Slackware-32 (par exemple le paquet 'mesa') le re-empaqueter en un paquet 'mesa-compat32' et l'installer tel quel sur la Slackware-64.


Avantages d'un système multilib

Voici quelques exemples de programmes qui ne démarreraient pas et ne pourraient pas être compilés sur Slack-64 sans couche de compatibilité 32-bits, qui requièrent donc de ce fait un support multilib sur la Slack-64 :

  • WINE : la plupart des programmes Windows sont en 32-bits, et pour les faire fonctionner sur Linux avec Wine, vous avez besoin de la version 32-bits de Wine.
  • VirtualBox : bien que ce soit (partiellement) de l'open source, il est nécessaire d'avoir les bibliothèques 32-bits sur Slack-64
  • Skype, Citrix client…: ces programmes propriétaires sont fermés. Nous dépendons des développeurs pour la version 64-bits, ce qui n'est pas encore la cas à ce jour.

Heureusement, les développements 64-bits deviennent de plus en plus communs. L'an dernier, Adobe a fait une version 64-bits de son plugin Flash ainsi que Sun avec son plugin Java. Ce qui a été un des déclics pour travailler sur la Slack-64.


Récupérer les paquets multilib

Vous pouvez télécharger un jeu complet de paquets et de scripts multilib depuis le site: http://slackware.com/~alien/multilib/
Mis à part de nombreux fichiers README, vous trouverez un sous-répertoire pour chaque version de Slackware-64 sous le chapitre « multilib », un répertoire appelé « source » ; celui-ci contient les sources (!!) et des scripts Slackbuilds.

Ce qui vous concerne vraiment -les paquets binaires- se trouve dans le répertoire « slackware_n° de version » en dessous du répertoire principal. Chaque répertoire contient aussi un sous-répertoire « slackware64-compat32 »où vous trouverez un ensemble essentiel de paquets Slackware 32-bits prêts à être installés sur votre Slackware64.Jetez un œil sur le ChangeLog pour rester à jour.


Normalement, je (Alien Bob) mettrai à jour les paquets gcc et glibc quelques jours après que Slackware ait mis à jour gcc et glibc. De même, allez voir du côté de compat32pkg de Sébastien Ballet qui automatise le processus comme le fait slackpkg.


Préparation du support multilib

Vite fait, bien fait :

Ce chapitre contient les instructions essentielles pour ajouter la possibilité du multilib à votre Slackware-64. Si vous voulez comprendre le processus plus en profondeur, ou si vous avez besoin d'infos pour compiler des programmes 32-bits dans la Slackware-64, allez voir les chapitres suivants.

  • Téléchargez les paquets depuis mon site et mettez à jour vos paquets gcc et glibc pour la version multilib. Allez dans le répertoire dans lequel vous avez enregistré les paquets et lancez la commande :
upgradepkg  --reinstall --install-new *.t?z
  • si vous avez téléchargé le répertoire « slackware64-compat32 », cette commande installera aussi un paquet appelé « compat32-tools » et vous avez bien fait parce que j'ai déjà converti les paquets 32-bits ! Tout ce que vous avez à faire c'est de lancer la commande :
upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z

qui installera tous les paquets 32-bits convertis (ou mettra à jour ceux que vous auriez déjà installés).

That's all Folks !

  • Si vous ne trouvez pas le répertoire slackware64-compat32, il vous faudra faire vous-même la conversion. Ce n'est pas difficile du tout, et ça ne prend que quelques minutes :
  • Le plus rapide sera de disposer d'un répertoire local avec les paquets d'origine. Pour ceux qui ont acheté le DVD officiel, c'est un double-face qui contient aussi Slackware-32 sur l'une des faces. Par exemple, imaginons que vous avez un répertoire 32-bits /home/ftp/pub/slackware/slackware-13.37/slackware. Il contient des sous-répertoires 'a', 'ap', 'd', 'l', 'n', 'x',(si vous avez monté votre DVD, le répertoire sera probablement /media/SlackDVD/slackware/ mais ne servira à rien dans la commande ci-dessous).
    • Créer un répertoire vide (par exemple 'slackware64-compat32') et y aller
mkdir slackware64-compat32 ; cd  slackware64-compat32
  • avec la commande suivante vous créerez un jeu complet de paquets compatibles
massconvert32.sh -i /home/ftp/pub/slackware-13.37/slackware/

l'étape précédente prend un certain temps. Quand c'est fini, il ne vous reste plus qu'à installer les paquets créés dans votre répertoire :

upgradepkg –install-new compat32/.t?z

C'est tout ! Vous pouvez maintenant télécharger, installer et lancer des programmes 32-bits. Ce n'était pas si dur que ça, hein ?

Attention !!! Si vous utilisez un gestionnaire de paquets tel que slackpkg, il vous faudra blacklister tous les paquets gcc et glibc, faute de quoi, vous courrez le risque de remplacer accidentellement vos paquets multilib par la version Slackware-64 d'origine. Si vous utilisez la Slackware-13.1, ou une version plus récente, et que vous téléchargez les paquets compat32-tools de cette version, il se peut que le script massconvert32.sh utilise un serveur distant pour télécharger les paquets Slackware-32 plutôt que un miroir local Slackware ou votre DVD. Utilisez alors le paramètre '-u' pour préciser l'URL : par exemple :

   massconvert32.sh -u http://someserver.org/path/to/slackware13-37/slackware/

Détails des paquets

Mise à niveau de GCC et GLIBC

Les paquets suivants remplacent (ne s'ajoutent pas) les paquets standard de votre Slackware. Utilisez le programme 'upgradepkg' pour mettre à niveau vers la version multilib de gcc et glibc dont vous aurez besoin pour construire (gcc) et lancer (glibc) les programmes 32-bits sur votre Slackware64.

Slackware64 13.0

Compilateur gcc :

gcc-4.3.3_multilib-x86_64-4alien.txz
gcc-g++-4.3.3_multilib-x86_64-4alien.txz
gcc-gfortran-4.3.3_multilib-x86_64-4alien.txz
gcc-gnat-4.3.3_multilib-x86_64-4alien.txz
gcc-java-4.3.3_multilib-x86_64-4alien.txz
gcc-objc-4.3.3_multilib-x86_64-4alien.txz

bibliothèques libc :

glibc-2.9_multilib-x86_64-5alien_slack13.0.txz
glibc-i18n-2.9_multilib-x86_64-5alien_slack13.0.txz
glibc-profile-2.9_multilib-x86_64-5alien_slack13.0.txz
glibc-solibs-2.9_multilib-x86_64-5alien_slack13.0.txz
glibc-zoneinfo-2.9_multilib-x86_64-5alien_slack13.0.txz

Slackware64 13.1

Compilateur gcc :

gcc-4.4.4_multilib-x86_64-1alien.txz
gcc-g++-4.4.4_multilib-x86_64-1alien.txz
gcc-gfortran-4.4.4_multilib-x86_64-1alien.txz
gcc-gnat-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

bibliothèques libc :

glibc-2.11.1_multilib-x86_64-5alien_slack13.1.txz
glibc-i18n-2.11.1_multilib-x86_64-5alien_slack13.1.txz
glibc-profile-2.11.1_multilib-x86_64-5alien_slack13.1.txz
glibc-solibs-2.11.1_multilib-x86_64-5alien_slack13.1.txz
glibc-zoneinfo-2.11.1_multilib-x86_64-5alien_slack13.1.txz

Slackware64 13.37

Compilateur gcc :

gcc-4.5.2ultilib-x86_64-2alien.txz
gcc-g++-4.5.2_multilib-x86_64-2alien.txz
gcc-gfortran-4.5.2_multilib-x86_64-2alien.txz
gcc-gnat-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

bibliothèques libc :

glibc-2.13_multilib-x86_645-3alien_slack13.1.txz
glibc-i18n-2.13_multilib-x86_645-3alien_slack13.1.txz
glibc-profile-2.13_multilib-x86_645-3alien_slack13.1.txz
glibc-solibs-2.13_multilib-x86_645-3alien_slack13.1.txz
glibc-zoneinfo-2.13_multilib-x86_645-3alien_slack13.1.txz

Slackware64 current : vous pouvez utiliser les paquets de la slackware 13.37

En vous servant de 'installpkg' vous installerez un paquet supplémentaire, la 'boîte à outils 32 bits' (des scripts qui facilitent la création de paquets 32-bits)

compat32-tools-2.0-noarch-1alien.tgz

Slamd64 sépare les paquets gcc/glib 32 et 64-bits. Je pense qu'il est préférable de laisser ces paquets essentiels réunis. J'ai suivi le principe déjà utilisé pour les paquets binutils dans la Slackware-64 qui réunit dans un même paquet le multilib 32 et 64 bits.


Ajout des bibliothèques Slackware 32-bits

La mise à niveau de glibc et gcc tel que décrite pécédemment fait passer votre système de « multilib-ready » à « multilib-enabled ».

Tout ce que vous avez à faire maintenant c'est d'installer les bibliothèques Slackware 32-bits de façon à ce que les programmes 32-bits que vous installerez ou compilerez trouvent les bibliothèques dont ils ont besoin. Mais il ne suffit pas de prendre les paquets 32-bits et les installer tels quels dans la Slackware64 pour au moins 2 raisons :

  • tout d'abord, vous allez vous retrouver avec plusieurs paquets portant le même nom, source de confusion pour vous et aussi pour le gestionnaire de paquet 'slackpkg'.
  • ensuite, si le paquets 32-bits que vous installez contient des binaires (tels /usr/bin/foo par exemple) vous risquez d'écraser leur équivalent 64-bits, ce qui mettrait la pagaille dans votre système.

Il faudra encore faire attention que les fichiers inutiles/proscrits des paquets 32-bits que vous installez soient retirés. Il vous faut des paquets 32-bits qui n'entrent pas en conflit avec les 64-bits déjà présents. D'où le nom de « paquets 32-bits compatibles ».

J'ai pensé que ce serait du gaspillage de bande-passante si je créais moi-même des paquets 32-bits compatibles. Après tout, vous avez probablement acheté le DVD Slackware qui contient les versions 32 et 64 bits……de toute façon, l'arborescence 32 bit est librement accessible, bien sûr !

J'ai donc plutôt écrit quelques scripts (à partir des scripts de Fred Emmot de Slamd64), et emballés dans un paquet « compat32-tools ». Ils vous permettront d'extraire le contenu de n'importe quel paquet 32-bits et de vous en servir pour créer un nouveau paquet que vous pourrez installer en toute sécurité sur votre Slackware64.

Ce paquet « compat32-tools » nécessite quelques explications. Lisez tout d'abord le README qui se trouve dans /usr/doc/compat32-tools-*/ , ça peut aider pour commencer.

Voilà les 3 scripts que le paquet installe:

  • /etc/profile/32dev.sh : c'est le même script que celui de Slamd64. Il reconfigure votre environnement shell afin de faciliter la compilation des programmes 32-bits (en choisissant les compilateurs et les bibliothèques 32 bits plutôt que 64)
  • convertpkg-compat32  : ce script prend un paquet 32-bits et le converti en un paquet '-compat32' que vous pourrez installer en toute sécurité (avec « installpkg ») à côté de la version 64-bits. Par exemple, supposons que vous ayez besoin de la bibliothèques 32-bits qui se trouve dans le paquet mesa. Vous prenez le paquet mesa 32-bits de la Slackware (x/mesa-7.5-i486-1.txz) et lancez la commande :
convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz

ce qui créera un nouveau paquet appelé mesa-compat32-7.5-x86_64-1.txz. Ce paquet (qui se trouve dans /tmp à moins que vous ne spécifiez un autre répertoire), c'est de base le même que le 32-bits d'origine, mais débarrassé de tout ce qui est inutile. Le changement de nom (mesa devient mesa-compat32) vous permet de l'installer dans la Slackware-64 en coexistence avec le paquet mesa 64-bits, sans écraser aucun fichier. Ce script laisse des fichiers temporaires dans /tmp/package-<prgnam>-compat32, que vous pouvez effacer sans crainte.

  • Massconvert32.sh  : ce script contient une liste du jeu essentiel de paquets 32-bits (communément appelée « couche de compatibilité 32-bits »). Il utilise le précédent script 'convertpkg-compat32'pour prendre chaque paquet qui est dans sa liste interne, et le convertit en un paquet'compat32'.

Vous n'avez besoin de lancer ce script qu'une seule fois, de cette manière (en supposant que votre DVD 32-bits est monté sur /mnt/dvd par exemple) :

massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32

Vous obtenez alors dans le dossier ~/compat avec environ 60 Mo de paquets que vous installerez par la suite, en utilisant 'installpkg' :

installpkg ~/compta32/*/*.t?z

pour obtenir une couche de compatibilité 32-bits quasi complète sur la Slackware64. Bien entendu, vous devez avoir un répertoire local de paquets 32-bits, faute de quoi cette conversion ne fonctionnera pas ! Ce script prend le chemin de votre répertoire local en argument, et en option, vous pouvez préciser un répertoire extérieur autre que votre répertoire courant.

Si vous faites une mise à niveau pour une version plus récente, n'utilisez pas 'installpkg', mais plutôt :

upgradepkg --install-new  --compat32/*/*.t?z

le paramètre 'install-new' est nécessaire pour installer les nouveaux paquets compat32 qui ont été ajoutés sur la nouvelle version.

En installant les paquets « compat32 » vous remarquerez que certains indiqueront qu'il manque des fichiers dans /etc. cela vient du fait que des fichiers dans /etc ont été enlevés du paquet 'compat32' (sauf pour pango et gtk+2). C'est à dessein, et vous pouvez ignorer ces messages.

Exemple d'erreur pour 'cups-compat32'
Executing install script for cups-compat32-1.3.11-x86_64-1.txz.
install/doinst.sh: line 5: [: too many arguments
cat: etc/cups/interfaces: Is a directory
cat: etc/cups/ppd: Is a directory
cat: etc/cups/ssl: Is a directory
cat: etc/cups/*.new: No such file or directory
cat: etc/dbus-1/system.d/cups.conf.new: No such file or directory
chmod: cannot access `etc/rc.d/rc.cups.new': No such file or directory
cat: etc/rc.d/rc.cups.new: No such file or directory
Package cups-compat32-1.3.11-x86_64-1.txz installed.

Si vous envisagez d'utiliser le script 'convert-compat32' pour des paquets qui ne proviennent pas de Slackware, je vous mets fortement en garde. Ce script est écrit avec un unique objectif : faire des versions 32-bits des binaires/bibliothèques de Slackware valables dans une configuration multilib. De ce fait, le script retirera pas mal de trucs présents dans le paquet 32-bits originel, trucs qui normalement ont été installés comme faisant partie de la version 64-bits Slackware.

Au cas où vous auriez téléchargés des paquets 32-bits non-Slackware et voulez les faire fonctionner sur votre Slackware-64, le mieux est de trouver les sources et de construire une version 64-bits du paquet. Éventuellement, installez simplement le paquet 32-bits plutôt que de le convertir et lancez le avec la ligne de commande pour voir quelles sont les bibliothèques qui manquent et que vous pourrez extraire des paquets officiels Slackware.


Utiliser des programmes 32 bits

Si vous avez suivi toutes les instructions précédentes, utiliser un programme 32-bits pré-compilé est un jeu d'enfant.

Parfois, il vous arrivera peut-être d'utiliser un programme qui nécessite des bibliothèques 32-bits de Slackware qui ne sont pas bonnes. Dans ce cas, cherchez quel est le paquet 32-bits qui contient ces bibliothèques. Avec le script 'convertpkg-compat32', convertissez le paquet original 32-bits et installez le paquet obtenu.


Compiler des programmes 32 bits

Si vous êtes amené à compiler des programmes 32-bits (Wine et Grub sont deux exemples de programmes open source en 32-bits seulement), il vous faudra tout d'abord configurer votre environnement shell avec la commande suivante :

. /etc/profile.de/32dev.sh

nota :

  1. le « . » en début de ligne fait partie de la commande.
  2. Cette commande change ou crée plusieurs variables d'environnement, avec comme résultat - les versions 32-bits des binaires étant préférées aux versions 64-bits quand vous compilez le code source- vous réaliserez une compilation 32-bits.
  3. Ce changement cessera à la fermeture du shell


Dans ce nouvel environnement,vous pourrez utiliser les Slackbuilds standard pour construire des paquets 32-bits, mais il y a deux choses à garder en tête :

  1. vous devrez fixer la variable ARCH à 'x86_64' même si vous compilez des programmes 32-bits, cela est dû au triplet de '$ARCH-Slackware-linux' qui est utilisé normalement dans la commande 'configure'. Aussi, si vous essayez avec ARCH =i486, vous vous apercevrez que les définitions des CFLAGS avec cette architecture vous donneront des erreurs gcc telles que « compiler cannot create executables ». Cela est dû à la construction du script SlackBuild. Plutôt que d'éditer le script et de changer/enlever les définitions CFLAGS, vous pouvez fixer ARCH à « x86_64 » et gagner du temps. Le vrai travail est réalisé par le script 32dev.sh.
  2. Il vous faudra éditer le SlackBuild s'il veut utiliser le répertoire « lib64 » pour « ARCH=x86_64 » et le forcer à utiliser le répertoire « lib » à la place. Généralement, cela se fait en recherchant les definitions tells que :
LIBDIRSUFFIX= « 64 »

et de changer en

LIBDIRSUFFIX= « »

Avertissement :

  • Après installation des paquets 32-bits, il vous faudra reinstaller les binaires des pilotes nVidia et aTi pour X.Org. Ces paquets contiennent les bibliothèques 32-bits et 64-bits. Si vous avez installés les fichiers des drivers pour les 2 architectures, le paquet « mesa-compat32 » écrasera certaines des bibliothèques 32-bits.

Par ailleurs, si vous n'avez installé que les bibliothèques des drivers 64-bits, il est préférable après l'installation des paquets multilib de reinstaller le paquet binaire du driver et cette fois-ci, choisissez d'installer les fichiers 32-bits du driver. Les applications 32-bits graphiques nécessitent ces bibliothèques 32-bits du driver. Des crashs sont possibles si vous n'avez pas installé les bons fichiers.

  • Si vous voulez compiler vous-même votre kernel 64-bits, n'oubliez pas de le compiler avec la possibilité d'émulation 32-bits ou alors multilib ne fonctionnera pas. Vous aurez besoin de ce morceau de configuration du kernel : CONFIG_IA32-EMULATION

Supports

Sebastien Ballet a écrit un outil appelé 'compat32pkg'.

Sur son site vous pouvez télécharger compat32pkg ainsi que toute la documentation sur comment l'utiliser sur Slackware-64.

Je cite le site : « compat32pkg » est un outil automatisé qui fournit tout ce qui est nécessaire pour gérer (convertir, installer, mettre à niveau, supprimer) la partie 32-bits de la multilib d'Alien Bob pour Slackware-64, ainsi que tout paquet de la Slackware-32 dont l'utilisateur pourrait avoir besoin dans un environnement 64-bits, tels que Firefox, Seamonkey, jre….

Tags

avance/articles/slackware64-multilib.txt · Dernière modification: 2011/11/02 20:27 par Thom1