it-swarm-id.com

Bagaimana cara menjalankan program 32-bit pada Debian / Ubuntu 64-bit?

Saya memiliki instalasi Debian atau Ubuntu 64-bit (AMD64 a.k.a. x86_64). Saya perlu menjalankan program 32-bit (i386/i686) sesekali, atau mengkompilasi program untuk sistem 32-bit. Bagaimana saya bisa melakukan ini dengan sedikit keributan?

Bonus: bagaimana jika saya ingin menjalankan atau menguji dengan rilis distribusi yang lebih lama atau lebih baru?

Dukungan asli

Sejak Ubuntu 11.04 dan Debian wheezy (7.0), Debian dan Ubuntu memiliki dukungan multiarch: Anda dapat mencampur paket x86_32 (i386) dan x86_64 (AMD64) pada sistem yang sama secara langsung. Ini dikenal sebagai dukungan multiarch Lihat jawaban warl0ck untuk lebih jelasnya.

Dalam rilis yang lebih lama, Debian dan Ubuntu dikirimkan dengan sejumlah perpustakaan 32-bit pada AMD64. Pasang ia32-libsInstall ia32-libs paket untuk memiliki set dasar pustaka 32-bit, dan mungkin paket lain yang bergantung pada pustaka ini. Eksekusi 32-bit Anda seharusnya dijalankan jika Anda memiliki semua pustaka yang diperlukan. Untuk pengembangan, instal gcc-multilibInstall gcc-multilib , dan sekali lagi mungkin paket lain yang bergantung padanya seperti g++-multilib. Kamu mungkin menemukan binutils-multiarchInstall binutils-multiarch bermanfaat juga, dan ia32-libs-dev di Debian. Melewati -m32 pilihan ke gcc untuk dikompilasi untuk ix86.

Perhatikan bahwa uname -m akan tetap menampilkan x64_64 jika Anda menjalankan kernel 64-bit, terlepas dari komponen mode pengguna 32-bit apa yang telah Anda instal. Schroot yang dijelaskan di bawah menangani ini.

Schroot

Bagian ini adalah panduan untuk menginstal distribusi mirip-Debian “di dalam” distribusi Linux lainnya. Itu adalah kata dalam hal menginstal Ubuntu 32-bit di dalam 64-bit Ubuntu, tetapi harus diterapkan dengan modifikasi kecil untuk situasi lain, seperti menginstal Debian tidak stabil di dalam stabil Debian atau sebaliknya.

Pengantar

Idenya adalah untuk menginstal distribusi alternatif dalam subtree dan lari darinya. Anda dapat menginstal sistem 32-bit pada sistem 64-bit dengan cara itu, atau rilis distribusi Anda yang berbeda, atau lingkungan pengujian dengan berbagai paket paket yang diinstal.

Perintah chroot dan panggilan sistem memulai proses dengan tampilan sistem file yang dibatasi pada subtree dari pohon direktori. Debian dan Ubuntu mengirim schroot , sebuah utilitas yang membungkus fitur ini untuk membuat sub-lingkungan yang lebih bermanfaat.

Instal paket schrootInstall schroot ( Debian ) dan paket debootstrap)Install debootstrap ( Debian ). Debootstrap hanya diperlukan untuk instalasi distribusi alternatif dan dapat dihapus sesudahnya.

Siapkan schroot

Contoh ini menjelaskan cara mengatur lingkungan alternatif Ubuntu 10.04LTS (lucid lynx) 32-bit. Pengaturan serupa harus bekerja dengan rilis lain dari Debian dan Ubuntu. Buat file /etc/schroot/chroot.d/lucid32 dengan konten berikut:

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

Garis directory=/32 memberi tahu schroot di mana kami akan meletakkan file-file instalasi 32-bit. Garis username=yourusername mengatakan pengguna yourusername akan diizinkan untuk menggunakan schroot. Garis groups=users,admin mengatakan bahwa pengguna dalam grup mana pun akan diizinkan untuk menggunakan schroot; Anda juga dapat menaruh users=… pengarahan.

Instal distribusi baru

Buat direktori dan mulai mengisinya dengan debootstrap. Debootstrap mengunduh dan menginstal paket inti untuk distribusi dan arsitektur yang ditentukan.

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

Anda hampir memiliki sistem kerja; berikut ini adalah peningkatan kecil. Schroot secara otomatis menimpa beberapa file dalam /32/etc ketika Anda menjalankannya, khususnya konfigurasi DNS di /etc/resolv.conf dan basis data pengguna dalam /etc/passwd dan file lainnya (ini dapat diganti, lihat dokumentasi). Ada beberapa file lagi yang mungkin ingin Anda salin secara manual sekali dan untuk semua:

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

Tidak akan ada file /etc/mtab atau /etc/fstab di chroot. Saya tidak merekomendasikan menggunakan perintah mount secara manual di chroot, lakukan dari luar. Tapi jangan buat yang cukup bagus /etc/mtab untuk membuat perintah seperti df bekerja dengan wajar.

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

Dengan tipe directory, schroot akan melakukan bind mounts dari sejumlah direktori, mis. Direktori tersebut akan dibagikan dengan instalasi induk: /proc, /dev, /home, /tmp.

Layanan di chroot

Seperti dijelaskan di sini, schroot tidak cocok untuk menjalankan daemon. Program di schroot akan terbunuh ketika Anda keluar dari schroot. Gunakan schroot "biasa" daripada schroot "direktori" jika Anda menginginkannya lebih permanen, dan atur mount binding permanen di /etc/fstab pada instalasi induk.

Di Debian dan Ubuntu, layanan mulai secara otomatis saat instalasi. Untuk menghindari hal ini (yang dapat mengganggu layanan yang berjalan di luar chroot, khususnya karena port jaringan dibagikan), buat kebijakan untuk tidak menjalankan layanan di chroot. Letakkan skrip berikut sebagai /32/usr/sbin/policy-rc.d dan membuatnya dapat dieksekusi (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

Mengisi sistem baru

Sekarang kita bisa mulai menggunakan chroot. Anda ingin menginstal beberapa paket lagi pada saat ini.

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

Anda mungkin perlu membuat beberapa lokal, mis.

locale-gen en_US en_US.utf8

Jika schroot adalah untuk rilis Ubuntu yang lebih lama seperti 8.04 (hardy), perhatikan bahwa paket standar-ubuntu menggunakan MTA. Pilih nullmailer alih-alih _ postfix default (Anda mungkin ingin chroot mengirim email tetapi Anda pasti tidak ingin menerima).

Melangkah lebih jauh

Untuk informasi lebih lanjut, lihat manual schroot , the schroot FAQ dan schroot.conf manual . Schroot adalah bagian dari proyek Debian autobuilder (buildd) . Mungkin ada tips berguna tambahan di halaman komunitas Ubuntu tentang debootstrap .

Mesin virtual

Jika Anda membutuhkan isolasi lengkap dari lingkungan alternatif, gunakan mesin virtual seperti KVM ( qemu-kvmInstall qemu-kvm ) atau VirtualBox .

Sejak bunt 11.04 (natty) dan Debian 7.0 (wheezy) diperkenalkan multiarch dukungan, perpustakaan 32-bit dan 64-bit dapat hidup berdampingan dalam satu sistem . Untuk menginstal libXX perpustakaan 32-bit, pertama tambahkan arsitektur 32bit yang diperlukan ke sistem Anda:

Untuk Ubuntu:

Sudo dpkg --foreign-architecture i386

Dan untuk Debian:

Sudo dpkg --add-architecture i386

Kemudian instal perpustakaan 32bit:

Sudo apt-get install libXX:i386

Paket ia32-libs. Pada Ubuntu 12.04 tepat, tidak lagi berisi perpustakaan, itu hanya menarik libXX:i386 paket sebagai dependensi.

Bagian kompilasi agak mudah untuk program C dan C++, tambahkan -m32 to CFLAG atau CXXFLAG, yang akan membuat program 32bit, mis.

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

Ini berfungsi untuk proyek berbasis makefile juga.

27
daisy

Jika Anda hanya memiliki biner 32-bit yang ingin Anda jalankan pada sistem Debian/Ubuntu 64-bit modern, lakukan hal berikut:

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

Ini telah diuji pada Debian 9.

2
cjs