Mam 64-bitową (amd64 aka x86_64) instalację Debiana lub Ubuntu. Od czasu do czasu muszę uruchamiać programy 32-bitowe (i386 / i686) lub kompilować programy dla systemu 32-bitowego. Jak mogę to zrobić przy minimum zamieszania?
Bonus: co zrobić, jeśli chcę uruchomić lub przetestować starszą lub nowszą wersję dystrybucji?
Odpowiedzi:
Natywne wsparcie
Ponieważ Ubuntu 11.04 i Debian wheezy (7.0), Debian i Ubuntu obsługują wiele kanałów: możesz w prosty sposób miksować pakiety x86_32 (i386) i x86_64 (amd64) w tym samym systemie. Jest to znane jako obsługa wielu kanałów. Aby uzyskać więcej informacji, patrz odpowiedź warl0ck .
W starszych wersjach Debian i Ubuntu są dostarczane z wieloma 32-bitowymi bibliotekami na amd64. Zainstaluj pakiet, aby mieć podstawowy zestaw bibliotek 32-bitowych i ewentualnie inne pakiety zależne od tego. Twoje 32-bitowe pliki wykonywalne powinny po prostu działać, jeśli masz wszystkie wymagane biblioteki. W celu rozwoju zainstaluj i ewentualnie inne zależne od niego pakiety, takie jak . Możesz również znaleźć przydatne i na Debianie. Przekaż opcję gcc, aby skompilować dla ix86.
ia32-libs
gcc-multilib
g++-multilib
binutils-multiarch
ia32-libs-dev
-m32
Pamiętaj, że
uname -m
nadal będzie się wyświetlać,x64_64
jeśli używasz jądra 64-bitowego, niezależnie od zainstalowanych komponentów trybu użytkownika 32-bitowego. Schroot opisany poniżej zajmuje się tym.Schroot
Ta sekcja jest przewodnikiem po instalacji dystrybucji podobnej do Debiana „wewnątrz” innej dystrybucji Linuksa. Jest to sformułowane w kategoriach instalacji 32-bitowego Ubuntu w 64-bitowym Ubuntu, ale powinno mieć zastosowanie z niewielkimi modyfikacjami w innych sytuacjach, takich jak instalowanie niestabilnej Debiana w stabilnej wersji Debiana lub odwrotnie.
Wprowadzenie
Chodzi o to, aby zainstalować alternatywną dystrybucję w poddrzewie i uruchomić z tego. W ten sposób można zainstalować system 32-bitowy w systemie 64-bitowym lub inną wersję dystrybucji lub środowisko testowe z zainstalowanymi różnymi zestawami pakietów.
chroot
Poleceń oraz system połączeń uruchamia proces ze względu na system plików, który jest ograniczony do poddrzewa drzewa katalogów. Debian i Ubuntu dostarczają schroota , narzędzie, które obejmuje tę funkcję, tworząc bardziej użyteczne podśrodowisko.Zainstaluj
schroot
pakiet ( Debian ) idebootstrap
pakiet ( Debian ). Debootstrap jest potrzebny tylko do instalacji alternatywnej dystrybucji i można go później usunąć.Skonfiguruj schroota
W tym przykładzie opisano, jak skonfigurować 32-bitowe alternatywne środowisko Ubuntu 10.04LTS (lucid lynx). Podobna konfiguracja powinna działać z innymi wydaniami Debiana i Ubuntu. Utwórz plik
/etc/schroot/chroot.d/lucid32
o następującej treści:Linia
directory=/32
mówi schrootowi, gdzie umieścimy pliki instalacji 32-bitowej. Liniausername=yourusername
mówi, że użytkownikyourusername
będzie mógł używać schroota. Liniagroups=users,admin
mówi, że użytkownicy w obu grupach będą mogli korzystać ze schroota; możesz również wprowadzićusers=…
dyrektywę.Zainstaluj nową dystrybucję
Utwórz katalog i zacznij wypełniać go debootstrap. Debootstrap pobiera i instaluje podstawowy zestaw pakietów dla określonej dystrybucji i architektury.
Prawie masz już działający system; Poniżej przedstawiono drobne ulepszenia. Schroot automatycznie nadpisuje kilka plików
/32/etc
podczas uruchamiania, w szczególności konfigurację DNS/etc/resolv.conf
i bazę danych użytkownika/etc/passwd
oraz inne pliki (można to zmienić, patrz dokumentacja). Jest jeszcze kilka plików, które możesz chcieć skopiować raz na zawsze:Nie będzie pliku
/etc/mtab
ani/etc/fstab
w chroot. Nie polecam używaniamount
polecenia ręcznie w chroot, zrób to z zewnątrz. Ale stwórz wystarczająco dobre,/etc/mtab
aby polecenia takie jakdf
praca działały rozsądnie.Dzięki
directory
typu, złom wykona wierzchowce powiązań z wielu katalogów, czyli te katalogi będą udostępniane instalacji dominującej:/proc
,/dev
,/home
,/tmp
.Usługi w chroot
Jak opisano tutaj, schroot nie nadaje się do uruchamiania demonów. Programy w chroot zostaną zabite po wyjściu z chroot. Użyj „zwykłego” schroota zamiast schroota „katalogowego”, jeśli chcesz, aby był bardziej trwały, i skonfiguruj stałe podłączanie do podłączenia w
/etc/fstab
instalacji nadrzędnej.W systemach Debian i Ubuntu usługi są uruchamiane automatycznie podczas instalacji. Aby tego uniknąć (które mogłyby zakłócać usług działa poza chroot, w szczególności dlatego, że porty sieciowe są wspólne), ustanawia zasady o nie prowadzenie usług w chroot. Umieść następujący skrypt jako
/32/usr/sbin/policy-rc.d
i uczyń go wykonywalnym (chmod a+rx /32/usr/sbin/policy-rc.d
).Wypełnij nowy system
Teraz możemy zacząć korzystać z chroot. W tym momencie będziesz chciał zainstalować jeszcze kilka pakietów.
Może być konieczne wygenerowanie kilku ustawień regionalnych, np
Jeśli schroot dotyczy starszej wersji Ubuntu, takiej jak 8.04 (hardy), zwróć uwagę, że pakiet standardu ubuntu pobiera MTA. Wybierz
nullmailer
zamiast domyślnegopostfix
(możesz chcieć, aby chroot wysyłał pocztę, ale na pewno nie chcesz, aby otrzymywał).Idąc dalej
Aby uzyskać więcej informacji, zapoznaj się z
schroot
instrukcją , często zadawanymi pytaniami schroot ischroot.conf
instrukcją . Schroot jest częścią projektu Debu autobuilder (buildd) . Na stronie społeczności Ubuntu mogą znajdować się dodatkowe przydatne wskazówki dotyczące debootstrap .Maszyna wirtualna
Jeśli potrzebujesz pełnej izolacji alternatywnego środowiska, użyj maszyny wirtualnej, takiej jak KVM ( qemu-kvm ) lub VirtualBox .
źródło
[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]
powoduje stan?users=faheem
do twojego przykładu. Domyślnie, przynajmniej dla mnie, nie jestem członkiem grupy użytkowników. Jednak bym się spodziewał.Ponieważ Ubuntu 11.04 (natty) i Debian 7.0 (wheezy) wprowadziły obsługę wielu kanałów , biblioteki 32-bitowe i 64-bitowe mogą współistnieć w jednym systemie. Aby zainstalować 32-bitową bibliotekę libXX, najpierw dodaj niezbędną architekturę 32-bitową do swojego systemu:
W przypadku Ubuntu:
A dla Debiana:
Następnie zainstaluj bibliotekę 32-bitową:
Pakiet ia32-libs. Począwszy od wersji Ubuntu 12.04 precyzyjnej, nie zawiera ona już żadnych bibliotek, jedynie pobiera
libXX:i386
pakiety jako zależności.Część kompilacyjna jest raczej łatwa dla programów C i C ++, dodaj
-m32
doCFLAG
lubCXXFLAG
, co spowoduje, że wygenerowany program będzie 32-bitowy, npDziała to również w przypadku projektów opartych na plikach makefile.
źródło
apt-get install ia32-libs
pracował dla mnie (13.04)!Jeśli masz tylko 32-bitowy plik binarny, który chcesz uruchomić na nowoczesnym 64-bitowym systemie Debian / Ubuntu, wykonaj następujące czynności:
Zostało to przetestowane na Debianie 9.
źródło
sudo apt-get install lib32z1
mojego 32-bitowego pliku wykonywalnego, jeśli to pomaga. Wystąpił błąd:sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
. Tak, jest rok 2019 i nie mogę znaleźć wstępnie skompilowanego 64-bitowego klienta sqlite3 obsługiwanego przez projekt sqlite :( Jestem raczej ograniczony w zakresie tego, co wolno mi instalować w tym współdzielonym zasobie, więc muszę ściągnąć wstępnie skompilowane pakiety sqlite. Na szczęście mogę zainstalowaćlib32z1
.