J'ai une installation Debian ou Ubuntu 64 bits (amd64, x86_64). Je dois exécuter des programmes 32 bits (i386 / i686) à l'occasion ou compiler des programmes pour un système 32 bits. Comment puis-je faire cela avec un minimum de tracas?
Bonus: que faire si je veux exécuter ou tester avec une version plus ancienne ou plus récente de la distribution?
Réponses:
Support natif
Depuis Ubuntu 11.04 et Debian Wheezy (7.0), Debian et Ubuntu ont un support multiarch: vous pouvez mélanger des paquets x86_32 (i386) et x86_64 (amd64) sur le même système de manière simple. Ceci est connu sous le nom de support multiarch Voir la réponse de warl0ck pour plus de détails.
Dans les versions antérieures, Debian et Ubuntu étaient livrées avec un certain nombre de bibliothèques 32 bits sur amd64. Installez le paquet pour avoir un ensemble de base de bibliothèques 32 bits et éventuellement d’autres paquets qui dépendent de celui-ci. Vos exécutables 32 bits doivent simplement être exécutés si vous avez toutes les bibliothèques requises. Pour le développement, installez , et éventuellement d’autres paquets qui en dépendent, tels que . Vous pouvez également trouver utile, et sur Debian. Passez l’ option gcc à compiler pour ix86.
ia32-libs
gcc-multilib
g++-multilib
binutils-multiarch
ia32-libs-dev
-m32
Notez que cela
uname -m
indique toujoursx64_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’occupe de cela.Schroot
Cette section est un guide pour installer une distribution du type Debian «à l’intérieur» d’une autre distribution Linux. Il est libellé en termes d'installation d'un Ubuntu 32 bits à l'intérieur d'un Ubuntu 64 bits, mais devrait s'appliquer avec des modifications mineures à d'autres situations, telles que l'installation de Debian unstable dans Debian stable ou vice versa.
introduction
L'idée est d'installer une autre distribution dans un sous-arbre et de l'exécuter à partir de celui-ci. Vous pouvez installer un système 32 bits sur un système 64 bits de cette manière, ou une version différente de votre distribution, ou un environnement de test avec différents ensembles de packages installés.
L'
chroot
appel de commande et système lance un processus avec une vue du système de fichiers limitée à une sous-arborescence de l'arborescence. Debian et Ubuntu sont livrés avec schroot , un utilitaire qui entoure cette fonctionnalité pour créer un sous-environnement plus utilisable.Installez le
schroot
paquet ( Debian ) et ledebootstrap
paquet ( Debian ). Debootstrap n'est nécessaire que pour l'installation de la distribution alternative et peut être supprimé par la suite.Mettre en place schroot
Cet exemple explique comment configurer un autre environnement 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:La ligne
directory=/32
indique à schroot où nous allons placer les fichiers de l'installation 32 bits. La ligneusername=yourusername
indique que l'utilisateuryourusername
sera autorisé à utiliser la racine. La lignegroups=users,admin
indique que les utilisateurs de l'un ou l'autre groupe seront autorisés à utiliser le schéma; vous pouvez aussi mettre uneusers=…
directive.Installer la nouvelle distribution
Créez le répertoire et commencez à le remplir avec debootstrap. Debootstrap télécharge et installe un ensemble de paquets de base pour la distribution et l'architecture spécifiées.
Vous avez déjà presque un système de travail; Ce qui suit est des améliorations mineures. Schroot écrase automatiquement plusieurs fichiers
/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 (ceci peut être remplacé, voir la documentation). Il y a encore quelques fichiers que vous voudrez peut-être copier manuellement une fois pour toutes:Il n'y aura pas de fichier
/etc/mtab
ou/etc/fstab
dans le chroot. Je ne recommande pas d'utiliser lamount
commande manuellement dans le chroot, faites-le de l'extérieur. Mais créez assez de bien/etc/mtab
pour exécuter des commandes telles quedf
travailler raisonnablement.Avec le
directory
type schroot effectuera bind supports d'un certain nombre de répertoires, à savoir les répertoires seront partagés avec l'installation mère:/proc
,/dev
,/home
,/tmp
.Services dans le chroot
Comme décrit ici, une racine ne convient pas pour exécuter des démons. Les programmes de la racine seront supprimés lorsque vous quitterez la racine. Utilisez une racine «ordinaire» au lieu d'une racine «annuaire» si vous voulez qu'elle soit plus permanente, et configurez des montages de liaison permanents
/etc/fstab
sur l'installation parent.Sur Debian et Ubuntu, les services démarrent automatiquement à 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), définissez une stratégie consistant à ne pas exécuter les 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
).Remplir le nouveau système
Nous pouvons maintenant commencer à utiliser le chroot. Vous voudrez installer quelques paquets supplémentaires à ce stade.
Vous devrez peut-être générer quelques paramètres régionaux, par exemple
Si le schéma concerne une version plus ancienne d'Ubuntu telle que 8.04 (hardy), notez que le paquet ubuntu-standard récupère un MTA. Sélectionnez
nullmailer
au lieu de la valeur par défautpostfix
(vous voudrez peut-être que votre chroot envoie un courrier, mais vous ne voulez absolument pas qu'il en reçoive).Aller plus loin
Pour plus d'informations, consultez le
schroot
manuel , la FAQ schroot et leschroot.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 sur debootstrap .Machine virtuelle
Si vous avez besoin d'une isolation complète de l'environnement de remplacement, utilisez une machine virtuelle telle que KVM ( qemu-kvm ) ou VirtualBox .
la source
[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]
maladie?users=faheem
à votre exemple. Par défaut, du moins pour moi, je ne suis pas membre du groupe d'utilisateurs. Je me serais attendu à être, cependant.Depuis que Ubuntu 11.04 (natty) et Debian 7.0 (Wheezy) ont introduit le support multiarch , les bibliothèques 32 bits et 64 bits peuvent coexister sur un système. Pour installer une bibliothèque 32 bits libXX, ajoutez d’abord l’architecture 32 bits nécessaire à votre système:
Pour Ubuntu:
Et pour Debian:
Puis installez la bibliothèque 32 bits:
Le paquet ia32-libs. À partir de Ubuntu 12.04 precise, il ne contient plus aucune bibliothèque, il extrait uniquement les
libXX:i386
paquets en tant que dépendances.La partie compilation est plutôt facile pour les programmes C et C ++, ajouter
-m32
àCFLAG
ouCXXFLAG
, ce qui rendra le programme généré 32 bits, par exempleCela fonctionne aussi pour les projets makefile.
la source
apt-get install ia32-libs
a travaillé pour moi (13.04)!Si vous souhaitez simplement exécuter un binaire 32 bits sur un système Debian / Ubuntu 64 bits moderne, procédez comme suit:
Ceci a été testé sur Debian 9.
la source
sudo apt-get install lib32z1
de mon exécutable 32 bits, si cela peut aider. L'erreur était:sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
. Oui, nous sommes en 2019 et je ne trouve pas de client sqlite3 précompilé 64 bits pris en charge par le projet sqlite :( Je ne suis pas assez protégé par ce que je suis autorisé à installer sur cette ressource partagée. Je dois donc extraire les packages sqlite précompilés. Heureusement, je peux installerlib32z1
.