it-swarm-tr.com

64 bit Debian / Ubuntu üzerinde 32 bit programları nasıl çalıştırabilirim?

64-bit (AMD64 a.k.a. x86_64) Debian veya Ubuntu kurulumum var. Bazen 32-bit (i386/i686) programları çalıştırmam veya 32-bit bir sistem için programları derlemem gerekiyor. Bunu minimum telaş ile nasıl yapabilirim?

Bonus: Dağıtımın daha eski veya daha yeni bir sürümüyle çalıştırmak veya test etmek istersem ne olur?

Yerel destek

Ubuntu 11.04 ve Debian wheezy (7.0) olduğundan, Debian ve Ubuntu çoklu arşiv desteğine sahiptir: x86_32 (i386) ve x86_64 (AMD64) paketlerini aynı sistemde doğrudan doğru bir şekilde karıştırabilirsiniz. Bu çoklu ark desteği Daha fazla bilgi için bakınız warl0ck 'in cevabı olarak bilinir.

Eski sürümlerde Debian ve Ubuntu, AMD64'te bir dizi 32 bit kütüphane ile birlikte gelir. ia32-libsInstall ia32-libs 32 bit kitaplık ve muhtemelen buna bağlı diğer paketler içeren temel bir pakete sahiptir. Gerekli tüm kitaplıklara sahipseniz 32-bit yürütülebilir dosyalarınız basitçe çalışmalıdır. Geliştirme için gcc-multilibInstall gcc-multilib ve yine g++-multilib gibi buna bağımlı olan diğer paketler. binutils-multiarchInstall binutils-multiarch da yararlı ve Debian'da ia32-libs-dev . İx86 için derlemek üzere gcc'ye -m32 Seçeneğini iletin.

Hangi 32-bit kullanıcı modu bileşenlerini kurduğunuzdan bağımsız olarak 64-bit çekirdek çalıştırıyorsanız uname -m 'Un yine de x64_64 Göstereceğini unutmayın. Aşağıda açıklanan Schroot bununla ilgilenir.

SCHROOT

Bu bölüm, başka bir Linux dağıtımının “içine” Debian benzeri bir dağıtımın kurulması için bir kılavuzdur. 32 bit Ubuntu'nun 64 bit Ubuntu içine kurulması açısından ifade edilir, ancak Debian'ın istikrarsız Debian kararlı içine yüklenmesi gibi diğer durumlara küçük değişiklikler ile uygulanmalıdır.

Giriş

Fikir, bir alt ağaçta alternatif bir dağıtım kurmak ve bundan çalıştırmaktır. Bu şekilde 64 bit bir sisteme 32 bitlik bir sistem yükleyebilir veya dağıtımınızın farklı bir sürümünü veya farklı paket kümelerinin yüklü olduğu bir test ortamını yükleyebilirsiniz.

chroot komutu ve sistem çağrısı, dizin ağacının bir alt ağacıyla sınırlandırılmış dosya sistemi görünümü ile bir işlem başlatır. Debian ve Ubuntu, daha kullanışlı bir alt ortam oluşturmak için bu özelliğin etrafını saran bir yardımcı program olan schroot işlevini kullanır.

schroot paketiniInstall schroot ( Debian ) ve debootstrap paketiInstall debootstrap ( Debian ). Debootstrap sadece alternatif dağıtımın kurulumu için gereklidir ve daha sonra çıkarılabilir.

Schroot'u kur

Bu örnekte, 32 bit Ubuntu 10.04LTS (lucid lynx) alternatif ortamının nasıl kurulacağı açıklanmaktadır. Benzer bir kurulum Debian ve Ubuntu'nun diğer sürümleriyle de çalışmalıdır. Aşağıdaki içeriklerle bir dosya oluşturun /etc/schroot/chroot.d/lucid32:

[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin

directory=/32 Satırı, schroot'a 32 bit yüklemenin dosyalarını nereye koyacağımızı söyler. username=yourusername Satırı, yourusername kullanıcısının schroot'u kullanmasına izin verileceğini söylüyor. groups=users,admin Satırı, her iki gruptaki kullanıcıların schroot'u kullanmasına izin verileceğini; bir users=… yönergesi de ekleyebilirsiniz.

Yeni dağıtımı yükleyin

Dizini oluşturun ve debootstrap ile doldurmaya başlayın. Debootstrap, belirtilen dağıtım ve mimari için temel bir paket kümesi indirir ve kurar.

mkdir /32
debootstrap --Arch i386 lucid /32 http://archive.ubuntu.com/ubuntu

Neredeyse bir çalışma sisteminiz var; takip eden şey küçük geliştirmelerdir. Schroot, çalıştırdığınızda otomatik olarak /32/etc İçindeki birkaç dosyanın üzerine yazar, özellikle /etc/resolv.conf İçindeki DNS yapılandırmasını ve /etc/passwd Ve diğer dosyaları (bu geçersiz kılınabilir, bkz. Dökümantasyon). Bir kez ve herkes için manuel olarak kopyalamak isteyebileceğiniz birkaç dosya daha var:

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

Chotta /etc/mtab Veya /etc/fstab Dosyası olmayacak. Kökte mount komutunu manuel olarak kullanmanızı önermiyorum, dışarıdan yapın. Ancak df gibi komutların makul şekilde çalışması için yeterince iyi bir /etc/mtab Oluşturun.

ln -s /proc/mounts /32/etc/mtab

directory türüyle schroot, bir dizi dizinin bağlama bağları işlevini gerçekleştirecektir; yani, bu dizinler üst kuruluşla paylaşılacaktır: /proc, /dev, /home, /tmp.

Chroot hizmetleri

Burada açıklandığı gibi, bir schroot, cinleri çalıştırmak için uygun değildir. Schroot'tan çıktığınızda, schroot'taki programlar öldürülecektir. Daha kalıcı olmasını istiyorsanız, "dizin" schroot yerine "düz" bir schroot kullanın ve üst kuruluşta /etc/fstab İçinde kalıcı bağlama bağları ayarlayın.

Debian ve Ubuntu üzerinde, hizmetler kurulum sırasında otomatik olarak başlar. Bundan kaçınmak için (özellikle ağ bağlantı noktaları paylaşıldığı için, chroot dışında çalışan hizmetleri bozabilir), - chroot içinde hizmetleri çalıştırmayan bir ilke oluşturun. Aşağıdaki komut dosyasını /32/usr/sbin/policy-rc.d olarak yerleştirin ve çalıştırılabilir yapın (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

Yeni sistemi doldurun

Şimdi krootu kullanmaya başlayabiliriz. Bu noktada birkaç paket daha yüklemek isteyeceksiniz.

schroot -c lucid32
Sudo apt-get update
apt-get install lsb-core nano
...

Birkaç yerel ayar oluşturmanız gerekebilir, ör.

locale-gen en_US en_US.utf8

Schroot, 8.04 (hardy) gibi daha eski bir Ubuntu sürümü içinse, ubuntu-standard paketinin bir MTA'da çekildiğini unutmayın. Varsayılan nullmailer yerine postfix öğesini seçin (chroot'unuzun posta göndermesini isteyebilirsiniz, ancak kesinlikle hiçbirini almasını istemezsiniz).

Daha ileri gitmek

Daha fazla bilgi için schroot manual , schroot FAQ ve schroot.conf Kılavuz konusuna bakın. Schroot Debian autobuilder (buildd) projesinin bir parçasıdır . buntu topluluğu hakkında debootstrap hakkında ek faydalı ipuçları olabilir.

Sanal makine

Alternatif ortamın tamamen izolasyonuna ihtiyacınız varsa, KVM ( qemu-kvmInstall qemu-kvm ) veya VirtualBox .

bunt 11.04 (natty) ve Debian 7.0 (wheezy) tanıtıldığı için multiarch desteği, 32 bit ve 64 bit kütüphaneler bir sistemde bir arada bulunabilir . 32 bitlik bir libXX kütüphanesi kurmak için önce sisteminize gerekli 32 bit mimariyi ekleyin:

Ubuntu için:

Sudo dpkg --foreign-architecture i386

Debian için:

Sudo dpkg --add-architecture i386

Ardından 32bit kitaplığını yükleyin:

Sudo apt-get install libXX:i386

İa32-libs paketi. Ubuntu 12.04'ten itibaren artık hiçbir kütüphane içermiyor, sadece libXX:i386 paketleri bağımlılık olarak.

Derleme bölümü C ve C++ programları için oldukça kolaydır, -m32 ila CFLAG veya CXXFLAG;

export CFLAGS="-m32"
gcc main.c -o main

Bu, makefile tabanlı projeler için de geçerlidir.

27
daisy

Modern bir 64 bit Debian/Ubuntu sisteminde çalıştırmak istediğiniz 32 bitlik bir ikili sisteminiz varsa, aşağıdakileri yapın:

dpkg --add-architecture i386
apt update
apt install libc6-i386

Bu Debian 9 üzerinde test edilmiştir.

2
cjs