transcription de la version française initiale écrite par <Patrick FONIO et Sébastien BALLET>
Cet article, qui est la traduction du travail réalisé par Alien BOB, contient les instructions nécessaires pour créer une vraie Slackware64 multilib.
Un système Linux multilib 64-bits peut faire tourner des applications 64-bits ainsi que celles encore fournies en 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 la Slackware64 nous avons choisi d'adopter ce standard x86_64. 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 Slackware64 'multilib-ready' (même si les bibliothèques 32-bits se trouvent dans /lib et /usr/lib, Slackware64 ne contient aucun programme 32-bits).
Il y a toutefois une étape supplémentaire à franchir (par vous, l'utilisateur) pour que Slackware64 puisse être dénommée 'multilib-capable'.
On procède de la façon suivante .
Dès sa sortie, Slackware64 avait un avantage par rapport aux 'forks' 64-bits qui existaient par ailleurs. Ces 'forks' ajoutaient une couche de compatibilité 32-bits en recompilant bon nombre de paquets en binaires 32-bits. Slackware64 est une distribution constituée des versions 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 système multilib complet, les conditions sont en place mais demandent à l'utilisateur de faire le nécessaire s'il veut le multilib.
Dans un prochain chapitre, j'expliquerai comment vous pouvez, à partir d'un paquet Slackware-32 (par exemple le paquet 'mesa') le réempaqueter en un paquet 'mesa-compat32' et l'installer tel quel sur la Slackware64.
Voici quelques exemples de programmes pour lesquels il faut un support multilib sur la Slackware64 car ils ne pourraient pas démarrer ni être être compilés sans la couche de compatibilité 32-bits :
Heureusement, les développements 64-bits deviennent de plus en plus courants. Adobe a longtemps posé problème mais ils ont finalement livré une version 64-bits de leur plugin Flash. De même Sun (société maintenant intégrée au groupe Oracle) a publié une version 64-bits de leur plugin Java pour navigateur. Ces deux événements nous ont fortement incités à nous mettre au travail sur la Slackware64.
Vous pouvez télécharger un jeu complet de paquets et de scripts multilib depuis le site: http://slackware.com/~alien/multilib/
En plus de nombreux fichiers README (cet article de Wiki est fondamentalement une version augmentée de l'un de ces READMEs) vous trouverez un sous-répertoire pour chaque version de Slackware64 sous le chapitre « multilib ». Vous trouverez un autre répertoire nommé « 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. Chacun de ces répertoires contient aussi un sous-répertoire « slackware64-compat32 » où vous trouverez un ensemble de base de paquets Slackware 32-bits prêts à être installés sur votre Slackware64.
Pour rester à jour, je vous conseille de surveiller le ChangeLog (flux RSS) que je maintiens pour mes paquets multilib. En principe je diffuserai les paquets updated glibc and gcc un jour ou deux après la mise à jour de gcc et glibc par Slackware.
Automatisation:
# slackpkg update # slackpkg upgrade multilib # slackpkg install multilib
Cette dernière commande vous montrera si des paquets ont été ajoutés à la collection de ceux qui sont regroupés dans “compat32”, comme llvm-compat32 et orc-compat32 récemment.
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']=http://bear.alienbase.nl/mirrors/people/alien/multilib/current/ MIRRORPLUS['alienbob']=http://bear.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/ MIRRORPLUS['restricted']=http://bear.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/ MIRRORPLUS['ktown']=http://bear.alienbase.nl/mirrors/alien-kde/current/latest/x86_64/ MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/
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, consultez les chapitres suivants.
Notez que le “#
” au début des commandes indique l' invite de root.
# SLACKVER=14.2 # mkdir multilib # cd multilib # lftp -c "open http://bear.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}" # cd ${SLACKVER}
# upgradepkg --reinstall --install-new *.t?z
après vous être placé dans le répertoire où vous avez mis ces paquets.
Cette commande installera également un paquet complémentaire nommé “compat32-tools”.
lftp
”), vous avez de la chance car j'ai déjà fait pour vous la conversion des paquets 32-bits! Il vous suffit de lancer: # upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z
qui va installer tous les paquets32-bits Slackware (ou les mettre à jour si vous aviez déjà installé de plus anciens paquets multilib, par exemple lors du passage à une nouvelle Slackware). C'est tout!
/home/ftp/pub/slackware/slackware-14.2/slackware/
”./media/SlackDVD/slackware/
” mais je ne l'utiliserai pas dans les exemples de commandes ci-dessous).# mkdir slackware64-compat32 ; cd slackware64-compat32
# massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.2/slackware/
# upgradepkg --install-new *-compat32/*.t?z
glibc
et gcc
à sa liste noire de paquets. Si vous ne preniez pas cette précaution, vous risqueriez de voir votre gestionnaire de paquets remplacer par accident vos versions multilib par les versions d'origine Slackware en 'pur' 64-bits!/etc/slackpkg/blacklist
pour faire exclure tous mes paquets par la liste noire (y compris les paquets multilib gcc et glibc et tous les paquets compat32
: [0-9]+alien [0-9]+compat32
Par contre, si vous employez l'extension de slackpkg nommée slackpkg+ alors vous ne devez surtout pas mettre en liste noire ces paquets, parce que cela empêcherait slackpkg+ de les gérer!
# massconvert32.sh -u http://unserveur.org/chemin/vers/slackware-14.2/slackware
Les paquets suivants remplacent (ne s'ajoutent pas aux…) 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 utilisables sur votre ordinateur 64-bits avec Slackware64.
gcc-java
parce qu'il n'est plus développé.
glibc-zoneinfo
n'est pas un élément de multilib, puisqu'il ne contient pas de code. Il vous faut installer le paquet glibc-zoneinfo
de la Slackware de base.
Il y a un paquet supplémentaire que vous installerez en utilisant le programme “installpkg”. Le n° de version précis peut varier suivant l'édition de Slackware, mais on peut trouver le paquet dans le répertoire où se trouvent également les versions multilib de gcc et glibc:
La mise à niveau de glibc et gcc telle que décrite précédemment fait passer votre système de «multilib-ready» à «multilib-enabled». Tout ce que vous devez faire maintenant c'est installer les bibliothèques Slackware 32-bits afin 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:
Il faudra encore veiller à ce que les fichiers inutiles/proscrits des paquets 32-bits que vous installez soient retirés. Ce qu'il vous faut, c'est un paquet 32-bits qui n'entre pas en conflit avec quoi que ce soit déjà présent dans votre Slackware 64-bits. D'où le nom “paquet de compatibilité 32-bits”.
J'ai estimé que ce serait un gaspillage de bande passante si je créais moi-même les versions de compatibilité 32-bits des paquets Slackware. Après tout, vous avez probablement acheté le DVD Slackware 14.x et vous avez donc les deux versions de Slackware en 64-bits et 32-bits… ou bien l'arborescence 32-bits de Slackware est disponible en téléchargement libre, bien sûr
Au lieu de celà, j'ai écrit quelques scripts (certaines parties de ces scripts sont l’œuvre de Fred Emmott du célèbre projet Slamd64) et je les ai regroupés en un paquet“compat32-tools”. Ces scripts vous permettront d'utiliser le contenu de tout paquet 32-bits Slackware pour créer un nouveau paquet que vous pourrez installer en toute sécurité dans votre Slackware 64-bits.
Ce paquet “compat32-tools” a besoin de quelques explications.
Je vous invite à lire le 'README' détaillé, du répertoire /usr/doc/compat32-tools-*/
, il vous apportera une aide précieuse. Voici les trois scripts que le paquet installe:
x/mesa-7.5-i486-1.txz
) et lancez # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz
qui va créer un nouveau paquet nommé mesa-compat32-7.5-x86_64-1compat32.txz
. Ce nouveau paquet (qui est créé dans votre répertoire /tmp
sauf si vous indiquez une autre destination) est fondamentalement l'ancien paquet 32-bits, mais allégé de tout le superflu. Puisque le nom du paquet est changé (mesa devient mesa-compat32) il est maintenant possible d'installer ce nouveau paquet dans Slackware64 où il coexistera avec le paquet mesa 64-bits, sans écraser aucun fichier.
Le script laisse des fichiers temporaires dans le répertoire “/tmp/package-<prgnam>-compat32
” où vous pouvez les effacer sans risque.
/mnt/dvd
): # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32
Cela fait, vous obtenez environ 150 Mo de nouveaux paquets dans le répertoire récemment créé ~/compat32
(le nom du répertoire est arbitraire bien sûr, je l'ai choisi pour la clarté de cet exemple). Ces paquets comportent ce qui constitue la partie 32-bits de votre système Slackware multilib.
Vous les installerez au moyen de “installpkg
”, et ils vous offriront une couche de compatibilité 32-bits vraiment complète pour la Slackware64:
# installpkg ~/compat32/*/*.t?z
Si vous effectuez une mise à jour depuis une version plus ancienne de ces paquets (par exemple à l'occasion de la mise à niveau de votre Slackware 64-bits vers une nouvelle édition) n'employez pas “installpkg
” dans ce cas, bien sûr, mais plutôt “upgradepkg –install-new
” :
# upgradepkg --install-new ~/compat32/*/*.t?z
Le paramètre “–install-new” est requis pour installer les paquets compat32
qui ont été ajoutés au fil des éditions successives.
compat32
vous remarquerez que quelques uns vont indiquer des erreurs dues à certains fichiers manquants dans /etc
. C'est “pensé à la conception”, et on peut ignorer ces erreurs. Ces messages apparaissent parce que dans /etc
des fichiers sont retirés d'un paquet “-compat32” pendant la conversion (sauf pour pango et gtk+2). Je considère que les fichiers dans /etc
auront déjà été installés par les paquets 64-bits d'origine.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.
convertpkg-compat32
pour convertir un paquet non-Slackware en un paquet -compat32, je dois fermement vous mettre en garde contre cette idée. Le script est écrit dans le seul but d'obtenir les versions 32-bits des binaires/bibliothèques Slackware64 disponibles dans une configuration multilib. De ce fait, le script va enlever plusieurs éléments qui font partie du paquet 32-bits original - éléments que l'on considère présents car installés par la version 64-bits du paquet. Une fois que votre système a été préparé comme indiqué ci-dessus, il est très facile de faire tourner un logiciel compilé pour architecture 32-bits. Il suffit de le télécharger, l'installer et le lancer!
Parfois, vous rencontrerez peut-être un programme nécessitant une bibliothèque Slackware 32-bits particulière de laquelle vous ne disposez pas à ce moment. Dans ce cas, trouvez dans quel paquet Slackware 32-bits il y a cette bibliothèque manquante. Utilisez le script “convertpkg-compat32” pour convertir ce paquet Slackware pour architecture 32-bits et installez le paquet résultant 32-bits doté de la “compatibilité” dans Slackware64.
Si vous devez compiler un programme 32-bits (wine et grub sont deux exemples de programmes open source livrés uniquement en version 32-bits) configurez d'abord l'environnement de votre shell pour root en lançant la commande:
# . /etc/profile.d/32dev.sh
Remarquez le point en début de ligne - il fait vraiment partie de la commande! L'emploi du point équivaut à la commande 'source'.
L'action de cette commande est de changer ou créer plusieurs variables d'environnement. Ce qui a pour effet de donner la priorité aux versions binaires 32-bits sur les binaires 64-bits quand vous compilez du code source - vous effectuerez ainsi une compilation 32-bits. L’effet de cette commande cessera au moment de votre déconnexion du shell 'root' -du super utilisateur-.
Dans cet environnement modifié, vous pouvez employer les SlackBuilds standard pour construire des paquets 32-bits pour Slackware64. Il y a deux choses à ne pas perdre de vue:
# convertpkg-compat32 -i /path/to/your/fresh/foo-VERSION-i486-BUILD.tgz # upgradepkg --install-new /tmp/foo-compat32-VERSION-x86_64-BUILDcompat32.txz
-compat32
”, vous devrez peut-être réinstaller les pilotes binaires Nvidia ou Ati pour gérer votre carte vidéo dans X.Org. Ces paquets de pilotes du matériel contiennent à la fois les bibliothèques 64-bits et 32-bits pour être efficaces au maximum sur un OS 64-bits multilib. Si vous avez installé les fichiers des pilotes pour les deux architectures, le paquet “mesa-compat32
” écrasera certains fichiers de la bibliothèque 32-bits.
Voici la liste des paquets convertis en leur version “-compat32” par le script massconvert32.sh
. Notez que plusieurs de ces paquets n'appartiennent pas à Slackware 13.0 ou 13.1, ils ont été ajoutés dans une version ultérieure de Slackware ce qui fait qu'ils provoquent un message d'erreur “* FAIL: package 'package_name' was not found!*” quand vous lancez le script dans une version plus ancienne. La situation complémentaire se manifeste également - certains paquets ont été retirés des versions plus récentes de Slackware, ce qui déclenche le message “* FAIL: package 'package_name' was not found!*”. Ne vous inquiétez pas pour ça.
# Les ensembles A/ : aaa_elflibs attr bzip2 cups cxxlibs dbus e2fsprogs eudev libgudev openssl-solibs udev util-linux xz # Les ensembles AP/ : cups cups-filters flac mariadb mpg123 mysql sqlite # Les ensembles D/ : libtool llvm opencl-headers # Les ensembles L/ : SDL2 alsa-lib alsa-oss alsa-plugins atk audiofile cairo dbus-glib elfutils esound expat ffmpeg fftw freetype fribidi gamin gc gdk-pixbuf2 giflib glib2 gmp gnome-keyring gtk+2 gst-plugins-base gst-plugins-base0 gst-plugins-good gst-plugins-good0 gst-plugins-libav gstreamer gstreamer0 hal harfbuzz icu4c jasper json-c lame lcms lcms2 libaio libart_lgpl libasyncns libclc libedit libelf libexif libffi libglade libgphoto2 libidn libieee1284 libjpeg libjpeg-turbo libmng libmpc libnl3 libnotify libogg libpcap libpng libsamplerate libsndfile libtasn1 libtermcap libtiff libunistring libusb libvorbis libxml2 libxslt lzo ncurses ocl-icd openjpeg orc pango popt pulseaudio python-six qt readline sbc sdl seamonkey-solibs speexdsp startup-notification svgalib v4l-utils zlib # Les ensembles N/ : curl cyrus-sasl gnutls libgcrypt libgpg-error libtirpc nettle openldap-client openssl p11-kit samba # Les ensembles X/ : fontconfig freeglut glew glu libFS libICE libSM libX11 libXScrnSaver libXTrap libXau libXaw libXcomposite libXcursor libXdamage libXdmcp libXevie libXext libXfixes libXfont libXfont2 libXfontcache libXft libXi libXinerama libXmu libXp libXpm libXprintUtil libXrandr libXrender libXres libXt libXtst libXv libXvMC libXxf86dga libXxf86misc libXxf86vm libdmx libdrm libepoxy libfontenc libinput libfontenc libpciaccess libva libva-intel-driver libvdpau libxcb libxshmfence mesa pixman vulkan-sdk xcb-util # Les ensembles XAP/ : sane
Vous pouvez télécharger les paquets multilib depuis (au moins) ces adresses:
Régalez vous!
Eric