Saya memiliki instalasi Debian atau Ubuntu 64-bit (amd64 a.k.a. Saya perlu menjalankan program 32-bit (i386/i686) sesekali, atau untuk 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?
Jawaban yang Diterima:
Untuk rilis saat ini
Debian dan Ubuntu saat ini memiliki dukungan multiarch:Anda dapat mencampur paket x86_32 (i386) dan x86_64 (amd64) pada sistem yang sama dengan cara yang mudah. Ini dikenal sebagai dukungan multiarch –
lihat Ubuntu atau Debian wiki informasi lebih lanjut.
Lihat jawaban warl0ck untuk jawaban sederhana dan terkini.
Untuk rilis lama
Dalam rilis yang lebih lama, Debian dan Ubuntu dikirimkan dengan sejumlah perpustakaan 32-bit di amd64. Instal ia32-libs
memiliki kumpulan dasar pustaka 32-bit, dan mungkin paket lain yang bergantung pada paket ini. Eksekusi 32-bit Anda harus dijalankan jika Anda memiliki semua pustaka yang diperlukan. Untuk pengembangan, instal
gcc-multilib
, dan lagi mungkin paket lain yang bergantung padanya seperti
g++-multilib
. Anda mungkin menemukan binutils-multiarch
berguna juga, dan
ia32-libs-dev
di Debian. Lewati -m32
opsi ke gcc untuk dikompilasi untuk ix86.
Perhatikan bahwa uname -m
akan tetap menampilkan x64_64
jika Anda menjalankan kernel 64-bit, apa pun komponen mode pengguna 32-bit yang telah Anda instal. Schroot yang dijelaskan di bawah menangani hal ini.
Schroot
Bagian ini adalah panduan untuk menginstal distribusi mirip Debian “di dalam” distribusi Linux lain. Ini disebutkan dalam hal menginstal Ubuntu 32-bit di dalam Ubuntu 64-bit, tetapi harus diterapkan dengan sedikit modifikasi pada situasi lain, seperti menginstal Debian tidak stabil di dalam Debian stable atau sebaliknya.
Pengantar
Idenya adalah untuk menginstal distribusi alternatif di subpohon dan menjalankannya. Anda dapat menginstal sistem 32-bit pada sistem 64-bit dengan cara itu, atau rilis berbeda dari distribusi Anda, atau lingkungan pengujian dengan kumpulan paket yang diinstal berbeda.
chroot
perintah dan panggilan sistem memulai proses dengan tampilan sistem file yang dibatasi pada subpohon dari pohon direktori. Debian dan Ubuntu mengirimkan schroot, sebuah utilitas yang membungkus fitur ini untuk membuat sub-lingkungan yang lebih bermanfaat.
Instal schroot
kemasan (Debian) dan
debootstrap
kemasan (Debian). Debootstrap hanya diperlukan untuk instalasi distribusi alternatif dan dapat dihapus setelahnya.
Siapkan schroot
Contoh ini menjelaskan cara menyiapkan 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 isi sebagai berikut:
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
Baris directory=/32
memberitahu schroot di mana kita akan meletakkan file instalasi 32-bit. Baris username=yourusername
kata pengguna yourusername
akan diizinkan untuk menggunakan schroot. Baris groups=users,admin
mengatakan bahwa pengguna di kedua grup akan diizinkan untuk menggunakan schroot; anda juga dapat menempatkan users=…
arahan.
Instal distribusi baru
Buat direktori dan mulai mengisinya dengan debootstrap. Debootstrap mengunduh dan menginstal kumpulan 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 di /32/etc
ketika Anda menjalankannya, khususnya konfigurasi DNS di /etc/resolv.conf
dan database pengguna di /etc/passwd
dan file lainnya (ini dapat diganti, lihat dokumentasi). Ada beberapa file lagi yang mungkin ingin Anda salin secara manual untuk selamanya:
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
dalam chroot. Saya tidak menyarankan menggunakan mount
perintah secara manual di chroot, lakukan dari luar. Tapi buat /etc/mtab
yang cukup baik untuk membuat perintah seperti df
bekerja dengan wajar.
ln -s /proc/mounts /32/etc/mtab
Dengan directory
ketik, schroot akan melakukan pengikatan sejumlah direktori, yaitu direktori tersebut akan dibagikan dengan instalasi induk:/proc
, /dev
, /home
, /tmp
.
Layanan di chroot
Seperti yang dijelaskan di sini, schroot tidak cocok untuk menjalankan daemon. Program di schroot akan dimatikan saat Anda keluar dari schroot. Gunakan schroot “polos” alih-alih schroot “direktori” jika Anda ingin lebih permanen, dan siapkan pengikatan 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 digunakan bersama), buat kebijakan untuk tidak menjalankan layanan di chroot. Letakkan script 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 akan ingin menginstal beberapa paket lagi 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 menarik MTA. Pilih nullmailer
alih-alih postfix
default (Anda mungkin ingin chroot Anda mengirim email tetapi Anda pasti tidak ingin menerimanya).
Melangkah lebih jauh
Untuk informasi lebih lanjut, lihat schroot
manual, FAQ schroot dan schroot.conf
manual. Schroot adalah bagian dari proyek autobuilder (buildd) Debian. Mungkin ada tips berguna tambahan di halaman komunitas Ubuntu tentang debootstrap.
Mesin virtual
Jika Anda memerlukan isolasi lengkap dari lingkungan alternatif, gunakan mesin virtual seperti KVM (qemu-kvm ) atau VirtualBox.