Ho un'installazione Debian o Ubuntu a 64 bit (amd64 alias x86_64). Devo eseguire occasionalmente programmi a 32 bit (i386/i686) o compilare programmi per un sistema a 32 bit. Come posso farlo con il minimo sforzo?
Bonus:cosa succede se voglio eseguire o testare con una versione precedente o più recente della distribuzione?
Risposta accettata:
Per le versioni attuali
Gli attuali Debian e Ubuntu hanno il supporto multiarch:puoi mescolare i pacchetti x86_32 (i386) e x86_64 (amd64) sullo stesso sistema in modo semplice. Questo è noto come supporto multiarch –
vedi Ubuntu o Debian wiki per ulteriori informazioni.
Vedi la risposta di warl0ck per una risposta semplice e aggiornata.
Per le versioni precedenti
Nelle versioni precedenti, Debian e Ubuntu vengono forniti con un numero di librerie a 32 bit su amd64. Installa ia32-libs
per avere un set di base di librerie a 32 bit e possibilmente altri pacchetti che dipendono da questo. I tuoi eseguibili a 32 bit dovrebbero essere eseguiti semplicemente se hai tutte le librerie richieste. Per lo sviluppo, installa gcc-multilib
, e ancora possibilmente altri pacchetti che dipendono da esso come g++-multilib
. Potresti trovare binutils-multiarch
utile anche e ia32-libs-dev
su Debian. Passa il -m32
opzione per gcc per compilare per ix86.
Nota che uname -m
mostrerà ancora x64_64
se stai eseguendo un kernel a 64 bit, indipendentemente dai componenti della modalità utente a 32 bit che hai installato. Schroot descritto di seguito si occupa di questo.
Schroot
Questa sezione è una guida all'installazione di una distribuzione simile a Debian "dentro" un'altra distribuzione Linux. È formulato in termini di installazione di Ubuntu a 32 bit all'interno di Ubuntu a 64 bit, ma dovrebbe essere applicato con piccole modifiche ad altre situazioni, come l'installazione di Debian unstable all'interno di Debian stable o viceversa.
Introduzione
L'idea è di installare una distribuzione alternativa in un sottoalbero ed eseguire da quella. Puoi installare un sistema a 32 bit su un sistema a 64 bit in questo modo, o una versione diversa della tua distribuzione, o un ambiente di test con diversi set di pacchetti installati.
Il chroot
il comando e la chiamata di sistema avviano un processo con una vista del filesystem limitata a un sottoalbero dell'albero delle directory. Debian e Ubuntu forniscono schroot, un'utilità che avvolge questa funzionalità per creare un sottoambiente più utilizzabile.
Installa schroot
pacchetto (Debian) e il debootstrap
pacchetto (Debian). Debootstrap è necessario solo per l'installazione della distribuzione alternativa e può essere rimosso in seguito.
Configura schroot
Questo esempio descrive come configurare un ambiente alternativo Ubuntu 10.04LTS (lucid lynx) a 32 bit. Una configurazione simile dovrebbe funzionare con altre versioni di Debian e Ubuntu. Crea un file /etc/schroot/chroot.d/lucid32
con i seguenti contenuti:
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
La riga directory=/32
dice a schroot dove metteremo i file dell'installazione a 32 bit. La riga username=yourusername
dice l'utente yourusername
sarà consentito utilizzare schroot. La riga groups=users,admin
dice che gli utenti in entrambi i gruppi potranno usare lo schroot; puoi anche inserire un users=…
direttiva.
Installa la nuova distribuzione
Crea la directory e inizia a popolarla con debootstrap. Debootstrap scarica e installa un set principale di pacchetti per la distribuzione e l'architettura specificate.
mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Hai quasi già un sistema funzionante; ciò che segue sono miglioramenti minori. Schroot sovrascrive automaticamente diversi file in /32/etc
quando lo esegui, in particolare la configurazione DNS in /etc/resolv.conf
e il database degli utenti in /etc/passwd
e altri file (questo può essere sovrascritto, vedere la documentazione). Ci sono altri file che potresti voler copiare manualmente una volta per tutte:
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
Non ci sarà un file /etc/mtab
o /etc/fstab
nel chroot. Non consiglio di utilizzare il mount
comando manualmente nel chroot, fallo dall'esterno. Ma crea un /etc/mtab
sufficientemente buono per eseguire comandi come df
funziona ragionevolmente.
ln -s /proc/mounts /32/etc/mtab
Con la directory
type, schroot eseguirà il bind mount di un certo numero di directory, cioè quelle directory saranno condivise con l'installazione principale:/proc
, /dev
, /home
, /tmp
.
Servizi nel chroot
Come descritto qui, uno schroot non è adatto per l'esecuzione di demoni. I programmi in schroot verranno uccisi quando esci da schroot. Usa uno schroot "semplice" invece di uno schroot "directory" se vuoi che sia più permanente e imposta i mount di binding permanenti in /etc/fstab
sull'installazione principale.
Su Debian e Ubuntu, i servizi si avviano automaticamente al momento dell'installazione. Per evitare ciò (che potrebbe interrompere i servizi in esecuzione al di fuori del chroot, in particolare perché le porte di rete sono condivise), stabilire una politica di non eseguire i servizi nel chroot. Inserisci il seguente script come /32/usr/sbin/policy-rc.d
e rendilo eseguibile (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
Popolare il nuovo sistema
Ora possiamo iniziare a usare il chroot. Ti consigliamo di installare qualche altro pacchetto a questo punto.
schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...
Potrebbe essere necessario generare alcune impostazioni locali, ad es.
locale-gen en_US en_US.utf8
Se lo schroot è per una versione precedente di Ubuntu come 8.04 (hardy), nota che il pacchetto ubuntu-standard estrae un MTA. Seleziona nullmailer
invece del postfix
predefinito (potresti volere che il tuo chroot invii posta ma sicuramente non vuoi che ne riceva nessuna).
Andare oltre
Per ulteriori informazioni, vedere schroot
manuale, le FAQ di schroot e schroot.conf
Manuale. Schroot fa parte del progetto Debian autobuilder (buildd). Potrebbero esserci ulteriori suggerimenti utili sulla pagina della community di Ubuntu su debootstrap.
Macchina virtuale
Se è necessario il completo isolamento dell'ambiente alternativo, utilizzare una macchina virtuale come KVM (qemu-kvm ) o VirtualBox.