GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Debian:come eseguire programmi a 32 bit su una Debian/ubuntu a 64 bit?

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.

Correlati:Linux – Quando useresti pivot_root su switch_root?

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.


Ubuntu
  1. Come cambiare la versione di Python in Ubuntu e Debian

  2. Come installare Subversion 1.9 su Ubuntu e Debian

  3. Come installare Python 3.5 su Ubuntu, Debian e Linuxmint

  4. Come aprire le porte in Ubuntu/Debian

  5. Debian – Installazione di due Glibc insieme in Debian/ubuntu?

Come installare Docker su Debian 9

Come installare PHP 5.6 su Ubuntu 16.04 e Debian 9

Come installare Typora su Ubuntu/Debian Distribution

Come installare SpamAssassin su Ubuntu/Debian

Come installare PrestaShop su Ubuntu/Debian

Come eseguire programmi Java in Ubuntu