Saya memiliki instalasi Debian atau Ubuntu 64-bit (amd64 alias x86_64). 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:
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 di amd64. Instal paket untuk memiliki satu set dasar perpustakaan 32-bit, dan mungkin paket lain yang bergantung pada yang satu ini. Eksekusi 32-bit Anda seharusnya dijalankan jika Anda memiliki semua pustaka yang diperlukan. Untuk pengembangan, instal , dan lagi mungkin paket lain yang bergantung padanya seperti . Anda mungkin menemukan berguna juga, dan di Debian. Lewati opsi untuk gcc untuk mengkompilasi untuk ix86.
ia32-libs
gcc-multilib
g++-multilib
binutils-multiarch
ia32-libs-dev
-m32
Perhatikan bahwa
uname -m
masih akan munculx64_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 paket paket berbeda yang diinstal.
The
chroot
komando dan sistem panggilan dimulai proses dengan pemandangan filesystem yang terbatas pada subtree dari pohon direktori. Debian dan Ubuntu mengirimkan schroot , sebuah utilitas yang membungkus fitur ini untuk membuat sub-lingkungan yang lebih bermanfaat.Instal
schroot
paket ( Debian ) dandebootstrap
paket ( 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 Debian dan Ubuntu lainnya. Buat file
/etc/schroot/chroot.d/lucid32
dengan konten berikut:Baris
directory=/32
memberitahu schroot di mana kita akan meletakkan file instalasi 32-bit. Barisusername=yourusername
mengatakan penggunayourusername
akan diizinkan untuk menggunakan schroot. Baris tersebutgroups=users,admin
mengatakan bahwa pengguna dalam kelompok mana pun akan diizinkan untuk menggunakan schroot; Anda juga bisa menaruhusers=…
arahan.Instal distribusi baru
Buat direktori dan mulai mengisinya dengan debootstrap. Debootstrap mengunduh dan menginstal paket inti untuk distribusi dan arsitektur yang ditentukan.
Anda hampir memiliki sistem kerja; berikut ini adalah peningkatan kecil. Schroot secara otomatis menimpa beberapa file
/32/etc
ketika Anda menjalankannya, khususnya konfigurasi DNS di/etc/resolv.conf
dan database pengguna di/etc/passwd
dan file lainnya (ini dapat ditimpa, lihat dokumentasi). Ada beberapa file lagi yang mungkin ingin Anda salin secara manual sekali dan untuk semua:Tidak akan ada file
/etc/mtab
atau/etc/fstab
chroot. Saya tidak merekomendasikan menggunakanmount
perintah secara manual di chroot, lakukan dari luar. Tapi jangan buat yang cukup bagus/etc/mtab
untuk membuat perintah sepertidf
bekerja dengan wajar.Dengan
directory
jenis, schroot akan melakukan mengikat tunggangan dari sejumlah direktori, yaitu direktori akan dibagi dengan instalasi orangtua:/proc
,/dev
,/home
,/tmp
.Layanan di chroot
Seperti dijelaskan di sini, schroot tidak cocok untuk menjalankan daemon. Program di schroot akan dibunuh ketika Anda keluar dari schroot. Gunakan schroot "biasa" alih-alih schroot "direktori" jika Anda menginginkannya lebih permanen, dan atur pemasangan ikatan permanen
/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 tidak menjalankan layanan di chroot. Letakkan skrip berikut sebagai
/32/usr/sbin/policy-rc.d
dan buat itu executable (chmod a+rx /32/usr/sbin/policy-rc.d
).Mengisi sistem baru
Sekarang kita bisa mulai menggunakan chroot. Anda ingin menginstal beberapa paket lagi pada saat ini.
Anda mungkin perlu membuat beberapa lokal, mis
Jika schroot untuk rilis Ubuntu yang lebih lama seperti 8.04 (hardy), perhatikan bahwa paket standar-ubuntu menarik dalam MTA. Pilih
nullmailer
sebagai ganti defaultpostfix
(Anda mungkin ingin chroot mengirim email tetapi Anda jelas tidak ingin menerima).Melangkah lebih jauh
Untuk informasi lebih lanjut, lihat
schroot
manual , FAQ schroot danschroot.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 membutuhkan isolasi lengkap dari lingkungan alternatif, gunakan mesin virtual seperti KVM ( qemu-kvm ) atau VirtualBox .
sumber
[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]
kondisinya?users=faheem
pada contoh Anda. Secara default, setidaknya untuk saya, saya bukan anggota grup pengguna. Namun saya berharap demikian.Karena Ubuntu 11.04 (natty) dan Debian 7.0 (wheezy) memperkenalkan dukungan multiarch , perpustakaan 32-bit dan 64-bit dapat hidup berdampingan pada satu sistem. Untuk menginstal libXX perpustakaan 32-bit, pertama tambahkan arsitektur 32bit yang diperlukan ke sistem Anda:
Untuk Ubuntu:
Dan untuk Debian:
Kemudian instal perpustakaan 32bit:
Paket ia32-libs. Pada Ubuntu 12.04 tepat, tidak lagi berisi perpustakaan, hanya menarik
libXX:i386
paket sebagai dependensi.Bagian kompilasi agak mudah untuk program C dan C ++, tambahkan
-m32
keCFLAG
atauCXXFLAG
, yang akan membuat dihasilkan 32bit Program, misalnyaIni berfungsi untuk proyek berbasis makefile juga.
sumber
apt-get install ia32-libs
bekerja untuk saya (13,04)!Jika Anda hanya memiliki biner 32-bit yang ingin Anda jalankan pada sistem Debian / Ubuntu 64-bit modern, lakukan hal berikut:
Ini telah diuji pada Debian 9.
sumber
sudo apt-get install lib32z1
untuk eksekusi 32-bit khusus saya, jika itu membantu. Kesalahan adalah:sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
. Ya, ini tahun 2019 dan saya tidak dapat menemukan klien sqlite3 64-bit yang dikompilasi yang didukung oleh proyek sqlite :( Saya agak terbatas pada apa yang saya boleh instal pada sumber daya bersama ini jadi saya harus menarik paket sqlite yang telah dikompilasi. Untungnya aku dapat menginstallib32z1
.