Activer le Multiarch sous debian
Qu’est ce que Multi-arch ? {#Qu.27est_ce_que_Multi-arch_.3F} #
Multi-arch vous permet d’installer des bibliothèque de paquets venant de
différentes architectures sur un même système. C’est très utile dans
beaucoup de cas, cela permet le plus souvent d’installer à la fois des
logiciels 32 et 64 bits sur la même machine, tout en conservant une
résolution des dépendances automatique correcte. Notez que cela ne
permet pas d’installer simultanément plusieurs versions d’une même
« application » dans de multiples architectures.
Concepts {#Concepts} #
Il y a une architecture dite architecture courante, et affichée par la
commande dpkg --print-architecture
. Elle est définie dans le paquet
dpkg actuellement installé.
(Notez qu’ici « architecture » désigne une Interface Binaire-Programme
(ABI, Application Binary Interface), et non une Architecture de Jeu
d’Instruction (ISA, Instruction Set Architecture). Ainsi, par exemple, «
armel » et « armhf » sont bien des « architectures » différentes car,
bien qu’elles utilisent (presque) le même jeu d’instruction, elles se
reposent sur des ABI différentes pour l’appel de fonctions depuis les
bibliothèques.
Il est maintenant possible de se référer à un paquet via
« paquet:architecture » à peu près partout où il était possible de le
faire avant avec « paquet » — nous avons donc libc:i386 et libc:amd64 —
malheureusement, les sémantiques comprises par dpkg et apt étant
légèrement différentes, les résultats obtenus via ces deux interfaces
peuvent être légèrement différents. Cependant, préciser l’architecture
d’un paquet devrait toujours être sûr et sans ambigüité, quant au nom
« paquet » sans précision, il se réfère au paquet dans l’architecture
courante d’apt.
Les autres architectures disponibles sont visibles grâce à la commande
dpkg --print-foreign-architectures
. Dpkg gèrera les paquets de ces
architectures ainsi que ceux de l’architecture de la machine.
Il y a un entête « Multi-Arch » inscrit dans les méta-données pour
chaque paquet multi-architectures concerné.
Les paquets existants fonctionnent très bien dans un environnement
multi-architectures, mais pour bénéficier d’une co-installation ou d’un
arbre de dépendances multi-architectures, beaucoup de paquets ont besoin
d’être rendus compatibles en multi-architectures.
- Pour un paquet inchangé vous pouvez choisir quelle version
d’architecture du paquet vous souhaitez installer (par exemple, «
amd64 » ou « i386 »). - Si un paquet est étiqueté « Multi-Arch: foreign », alors il peut
satisfaire la dépendance d’un paquet d’une architecture différente
(par exemple, « make:amd64 » permettra de satisfaire une dépendance
faite pour un paquet de n’importe quelle architecture). - Pour activer plus d’une version d’architecture d’un paquet en même
temps (généralement les librairies et les paquets dev-) les fichiers
ont besoin d’être déplacés pour ne pas avoir de conflit. Ces paquets
sont eux aussi tagués « Multi-Arch: same ».
Des paquets étiquetés « Multi-Arch : allowed » existent aussi. Ils
peuvent être traités à la fois comme « :same » ou comme « :foreign » en
fonction des paquets dont ils dépendent.
Le plus souvent, les responsables des paquets travaillent sur leur
distribution en commençant par installer les paquets les plus utiles
pour la rendre multi-architectures. Voir multiarch
spec{.interwiki} et
howto implementation
pour avoir des détails sur le fonctionnement actuel et pour savoir
comment mettre à jour les paquets et tirer avantage de cette
fonctionnalité.
Prérequis {#Pr.2BAOk-requis} #
Vous avez besoin d’un dpkg et d’un apt compatible multi-architectures.
Pour dpkg de Debian cela est présent depuis la version 1.16.2. Dans
Ubuntu cela est possible depuis natty (v1.15.8.10ubuntu1). Vérifiez en
regardant si la commande dpkg --print-foreign-architectures
est
comprise.
Apt est compatible multi-architectures s’il supporte
-o APT::Architectures
. Cette prise en charge est disponible depuis la
version 0.8.13 comprise. Cependant, il y a eu de nombreuses
améliorations à la prise en charge de la multi-architecture et de
nombreuses corrections de bugs dans les versions suivantes de apt
(certaines requises par Debian dpkg 1.16.2 pour activer le
multi-architecture), comme la prise en charge de apt-get build-dep -a
cross-dependency. Par conséquent, le plus récent est le plus performant
en général, au moins jusqu’à la version 0.9.4.
Avant apt 0.9 dans Debian, dpkg peut ne pas fonctionner (mais seulement
si le multi-architecture est activé) pendant les mises à jour lorsqu’on
ne lui indique pas l’architecture du paquet qu’apt doit configurer.
(« dpkg: error: --configure needs a valid package name but
‘gcc-4.7-base’ is not: ambiguous package name ‘gcc-4.7-base’ with more
than one installed instance »). dpkg --configure -a
devrait débloquer
cela.
Utilisation {#Utilisation} #
Configurer les architectures {#Configurer_les_architectures} #
Pour ajouter une architecture supplémentaire (dans Debian depuis dpkg
1.16.2) :
dpkg --add-architecture <arch>
Par exemple :
dpkg --add-architecture armhf
Notez que rien ne va réellement changer avant que vous fassiez
apt-get update
pour mettre à jour la liste des paquets disponibles.
Pour supprimer une architecture
dpkg --remove-architecture <arch>
Les architectures disponibles pour dpkg sont stockées dans
/var/lib/dpkg/arch
.
Notez qu’avant d’effacer une architecture, vous devez en effacer tous
les paquets correspondants :
apt-get purge ".*:<arch>"
Notez que le dpkg d’Ubuntu dans Natty (1.16.0~ubuntu7 (reports
1.15.8.10)), Oneiric et Precise (1.16.1.2ubuntu7) utilise une syntaxe
différente :
echo "foreign-architecture armhf" >> /etc/dpkg/dpkg.cfg.d/architectures
Configurez les sources apt {#Configurez_les_sources_apt} #
Par défaut, apt utilise le jeu d’architectures remonté par dpkg, et
toutes architectures non qualifiées présentes dans les lignes du fichier
/etc/apt/sources.list
, qui représente souvent ce que vous souhaitez.
Cela peut être modifié en utilisant APT::Architecture=<arch> pour
forcer l’architecture par défaut ou avec
APT::Architectures=“<arch> <arch>”.
deb [arch=amd64,i386] http://uk.archive.ubuntu.com/ubuntu/ quantal main universe deb [arch=armel,armhf] http://ports.ubuntu.com/ubuntu-ports quantal main universe
Identifier les lignes deb-src avec une architecture n’aurait aucun sens.
Notez : Il y a un bug dans la version de apt >=0.9.7 et <0.9.7.2,
ce qui signifie que mettre « arch=armel,armhf » sur une seule ligne ne
fonctionne pas ; vous avez besoin de 2 entrées différentes.
N’oubliez pas d’exécuter
apt-get update
après avoir ajouté une architecture.
Installer/désinstaller des paquets {#Installer.2Fd.2BAOk-sinstaller_des_paquets} #
Pour installer un paquet ne provenant pas de l’architecture par défaut,
spécifiez juste cette architecture dans la ligne de commande :
apt-get install package:architecture
Les dépendances de ce paquet s’installeront automatiquement pour les
bonnes architectures (même architecture pour les bibliothèques,
architecture de la machine pour les autres dépendances) exemple :
apt-get install links:i386
dpkg -i package_version_architecture.deb dpkg -r package:architecture
Installation de l’arbre des dépendances croisées {#Installation_de_l.27arbre_des_d.2BAOk-pendances_crois.2BAOk-es} #
Pour installer les dépendances à la construction d’un paquet avant une
compilation croisée
apt-get build-dep -a <arch> <package>
Cela fonctionne lorsque tous les « outils » dont le paquet dépend sont
étiquetés Multi-Arch: foreign
, que toutes les dépendances qui sont
nécessaires sur la machine de compilation, et que les paquets de
développement qui sont nécessaires à la fois sur l’architecture CIBLE et
sur l’architecture de COMPILATION sont coinstallable (« Multi-Arch: same
»), et que toutes les exceptions aux règles par défaut sont étiquetées
package:any
ou package:native
dans le paquet source. Ce processus
est indirect.
Lorsque cela ne fonctionne pas, vous pouvez souvent obtenir les
dépendances avec une commande manuelle de apt-get : Par exemple, à la place de
apt-get build-dep -a armhf acl
, faites
apt-get install autoconf automake debhelper gettext libtool libattr1-dev:armhf
Les détails de la résolution des dépendances sont sur
MultiarchCross{.interwiki}.
Installer les bibliothèques de compatibilité Android SDK {#Installer_les_biblioth.2BAOg-ques_de_compatibilit.2BAOk_Android_SDK} #
Certains utilisateurs utilisant le SDK Android pourraient rencontrer des
problèmes en essayant de lancer build-tools ou platform-tools sur une
plateforme amd64. Comme substitut pour ia32-libs
, les utilisateurs
devraient s’en sortir en installant simplement les bibliothèques
suivantes :
dpkg --add-architecture i386 apt-get update apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
Voir en ligne : Multiarch
Commencer la discussion: Venez écrire un commentaire dans le forum.
- Précédent: Debian Grossit Regime
- Suivant: Importation bientôt finie.