GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Debian – Comment exécuter des programmes 32 bits sur une Debian/ubuntu 64 bits ?

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.

Connexe :Linux – Quand utiliseriez-vous pivot_root plutôt que switch_root ?

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.


Ubuntu
  1. Comment changer de version de Python dans Ubuntu et Debian

  2. Comment installer Python 3.5 sur Ubuntu, Debian et Linuxmint

  3. Comment installer Indicator SysMonitor sur Ubuntu et Debian

  4. Comment installer Docker sur Debian / Ubuntu

  5. En quoi Ubuntu est-il différent de Debian ?

Comment installer Docker sur Debian 9

Comment installer PHP 5.6 sur Ubuntu 16.04 et Debian 9

Comment installer Typora sur la distribution Ubuntu/Debian

Comment installer SpamAssassin sur Ubuntu/Debian

Comment installer PrestaShop sur Ubuntu/Debian

Comment exécuter des programmes Java dans Ubuntu