J'ai une installation Debian ou Ubuntu 64 bits (amd64 alias x86_64). J'ai besoin d'exécuter occasionnellement des programmes 32 bits (i386/i686) ou de compiler des programmes pour un système 32 bits. Comment puis-je faire cela avec un minimum de tracas ?
Bonus :que se passe-t-il si je veux exécuter ou tester avec une version plus ancienne ou plus récente de la distribution ?
Réponse acceptée :
Pour les versions actuelles
Debian et Ubuntu actuels ont un support multiarch :vous pouvez mélanger les packages x86_32 (i386) et x86_64 (amd64) sur le même système de manière simple. C'est ce qu'on appelle la prise en charge multiarch –
consultez le wiki Ubuntu ou Debian pour plus d'informations.
Voir la réponse de warl0ck pour une réponse simple et à jour.
Pour les anciennes versions
Dans les versions plus anciennes, Debian et Ubuntu sont livrés avec un certain nombre de bibliothèques 32 bits sur amd64. Installez les ia32-libs
pour avoir un ensemble de base de bibliothèques 32 bits, et éventuellement d'autres packages qui dépendent de celui-ci. Vos exécutables 32 bits devraient simplement s'exécuter si vous disposez de toutes les bibliothèques requises. Pour le développement, installez gcc-multilib
, et éventuellement d'autres packages qui en dépendent tels que g++-multilib
. Vous pouvez trouver binutils-multiarch
utile également, et ia32-libs-dev
sur Debian. Passez le -m32
option à gcc pour compiler pour ix86.
Notez que uname -m
affichera toujours x64_64
si vous exécutez un noyau 64 bits, quels que soient les composants en mode utilisateur 32 bits que vous avez installés. Schroot décrit ci-dessous s'en charge.
Schroot
Cette section est un guide pour installer une distribution de type Debian "à l'intérieur" d'une autre distribution Linux. Il est formulé en termes d'installation d'Ubuntu 32 bits dans un Ubuntu 64 bits, mais devrait s'appliquer avec des modifications mineures à d'autres situations, telles que l'installation de Debian instable dans Debian stable ou vice versa.
Présentation
L'idée est d'installer une distribution alternative dans une sous-arborescence et de l'exécuter à partir de celle-ci. Vous pouvez installer un système 32 bits sur un système 64 bits de cette façon, ou une version différente de votre distribution, ou un environnement de test avec différents ensembles de packages installés.
Le chroot
La commande et l'appel système démarrent un processus avec une vue du système de fichiers limitée à une sous-arborescence de l'arborescence des répertoires. Debian et Ubuntu livrent schroot, un utilitaire qui s'articule autour de cette fonctionnalité pour créer un sous-environnement plus utilisable.
Installez le schroot
emballer (Debian) et le debootstrap
emballer (Debian). Debootstrap n'est nécessaire que pour l'installation de la distribution alternative et peut être supprimé par la suite.
Configurer schroot
Cet exemple décrit comment configurer un environnement alternatif Ubuntu 10.04LTS (lucid lynx) 32 bits. Une configuration similaire devrait fonctionner avec d'autres versions de Debian et Ubuntu. Créez un fichier /etc/schroot/chroot.d/lucid32
avec le contenu suivant :
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
La ligne directory=/32
indique à schroot où nous allons mettre les fichiers de l'installation 32 bits. La ligne username=yourusername
dit l'utilisateur yourusername
sera autorisé à utiliser le schroot. La ligne groups=users,admin
indique que les utilisateurs de l'un ou l'autre groupe seront autorisés à utiliser le schroot ; vous pouvez aussi mettre un users=…
directives.
Installer la nouvelle distribution
Créez le répertoire et commencez à le remplir avec debootstrap. Debootstrap télécharge et installe un ensemble de packages de base pour la distribution et l'architecture spécifiées.
mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Vous avez presque déjà un système fonctionnel; ce qui suit est des améliorations mineures. Schroot écrase automatiquement plusieurs fichiers dans /32/etc
lorsque vous l'exécutez, en particulier la configuration DNS dans /etc/resolv.conf
et la base de données des utilisateurs dans /etc/passwd
et d'autres fichiers (cela peut être remplacé, voir la documentation). Il y a quelques autres fichiers que vous voudrez peut-être copier manuellement une fois pour toutes :
cp -p /etc/apt/apt.conf /32/etc/apt/ # for proxy settings
cp -p /etc/apt/sources.list /32/etc/apt/ # for universe, security, etc
cp -p /etc/environment /32/etc/ # for proxy and locale settings
cp -p /etc/sudoers /32/etc/ # for custom sudo settings
Il n'y aura pas de fichier /etc/mtab
ou /etc/fstab
dans le chroot. Je ne recommande pas d'utiliser le mount
commande manuellement dans le chroot, faites-le de l'extérieur. Mais créez un assez bon /etc/mtab
pour faire des commandes telles que df
travailler raisonnablement.
ln -s /proc/mounts /32/etc/mtab
Avec le directory
type, schroot effectuera des montages liés d'un certain nombre de répertoires, c'est-à-dire que ces répertoires seront partagés avec l'installation parent :/proc
, /dev
, /home
, /tmp
.
Services dans le chroot
Comme décrit ici, un schroot ne convient pas pour exécuter des démons. Les programmes dans le schroot seront tués lorsque vous quitterez le schroot. Utilisez un schroot "simple" au lieu d'un schroot "répertoire" si vous voulez qu'il soit plus permanent, et configurez des montages de liaison permanents dans /etc/fstab
sur l'installation parente.
Sur Debian et Ubuntu, les services démarrent automatiquement lors de l'installation. Pour éviter cela (ce qui pourrait perturber les services exécutés en dehors du chroot, notamment parce que les ports réseau sont partagés), établissez une politique de non-exécution des services dans le chroot. Mettez le script suivant en tant que /32/usr/sbin/policy-rc.d
et rendez-le exécutable (chmod a+rx /32/usr/sbin/policy-rc.d
).
#!/bin/sh
## Don't start any service if running in a chroot.
## See /usr/share/doc/sysv-rc/README.policy-rc.d.gz
if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
exit 101
fi
Remplir le nouveau système
Nous pouvons maintenant commencer à utiliser le chroot. Vous voudrez installer quelques packages supplémentaires à ce stade.
schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...
Vous devrez peut-être générer quelques paramètres régionaux, par exemple
locale-gen en_US en_US.utf8
Si le schroot est pour une ancienne version d'Ubuntu telle que 8.04 (hardy), notez que le paquet ubuntu-standard extrait un MTA. Sélectionnez nullmailer
au lieu du postfix
par défaut (vous voudrez peut-être que votre chroot envoie du courrier, mais vous ne voulez certainement pas qu'il en reçoive).
Aller plus loin
Pour plus d'informations, consultez le schroot
manuel, la FAQ schroot et le schroot.conf
Manuel. Schroot fait partie du projet Debian autobuilder (buildd). Il peut y avoir d'autres conseils utiles sur la page de la communauté Ubuntu à propos de debootstrap.
Machine virtuelle
Si vous avez besoin d'une isolation complète de l'environnement alternatif, utilisez une machine virtuelle telle que KVM (qemu-kvm ) ou VirtualBox.