Mám 64bitovou (amd64 a.k.a. x86_64) instalaci Debianu nebo Ubuntu. Potřebuji občas spouštět 32bitové (i386/i686) programy nebo kompilovat programy pro 32bitový systém. Jak to mohu udělat s minimem starostí?
Bonus:co když chci spustit nebo testovat starší nebo novější verzi distribuce?
Přijatá odpověď:
Pro aktuální verze
Aktuální Debian a Ubuntu mají podporu multiarch:Balíčky x86_32 (i386) a x86_64 (amd64) můžete kombinovat na stejném systému přímočarým způsobem. Toto je známé jako podpora multiarch –
více informací viz Ubuntu nebo Debian wiki.
Podívejte se na warl0ckovu odpověď pro jednoduchou a aktuální odpověď.
Pro stará vydání
Ve starších verzích se Debian a Ubuntu dodávají s řadou 32bitových knihoven na amd64. Nainstalujte ia32-libs
obsahuje základní sadu 32bitových knihoven a případně další balíčky, které na této knihovně závisí. Vaše 32bitové spustitelné soubory by se měly jednoduše spustit, pokud máte všechny požadované knihovny. Pro vývoj nainstalujte gcc-multilib
a opět možná další balíčky, které na něm závisí, jako je g++-multilib
. Můžete najít binutils-multiarch
je také užitečné a ia32-libs-dev
na Debianu. Předejte -m32
možnost kompilace gcc pro ix86.
Všimněte si, že uname -m
bude stále zobrazovat x64_64
pokud používáte 64bitové jádro, bez ohledu na to, jaké součásti 32bitového uživatelského režimu jste nainstalovali. O to se stará níže popsaný Schroot.
Schroot
Tato část je průvodcem instalací distribuce podobné Debianu „uvnitř“ jiné distribuce Linuxu. Je formulován jako instalace 32bitového Ubuntu do 64bitového Ubuntu, ale měl by se s menšími úpravami použít i v jiných situacích, jako je instalace nestabilního Debianu uvnitř stabilního systému Debian nebo naopak.
Úvod
Cílem je nainstalovat alternativní distribuci do podstromu a spustit z ní. Tímto způsobem můžete nainstalovat 32bitový systém na 64bitový systém nebo jiné vydání vaší distribuce nebo testovací prostředí s nainstalovanými různými sadami balíčků.
chroot
příkaz a systémové volání spustí proces s pohledem na souborový systém, který je omezen na podstrom adresářového stromu. Debian a Ubuntu dodávají schroot, utilitu, která tuto funkci obklopuje a vytváří použitelnější dílčí prostředí.
Nainstalujte schroot
balík (Debian) a debootstrap
balík (Debian). Debootstrap je potřeba pouze pro instalaci alternativní distribuce a lze jej poté odstranit.
Nastavit schroot
Tento příklad popisuje, jak nastavit 32bitové alternativní prostředí Ubuntu 10.04LTS (lucid lynx). Podobné nastavení by mělo fungovat s dalšími vydáními Debianu a Ubuntu. Vytvořte soubor /etc/schroot/chroot.d/lucid32
s následujícím obsahem:
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
Řádek directory=/32
řekne schrootu, kam umístíme soubory 32bitové instalace. Řádek username=yourusername
říká uživatel yourusername
bude moci používat schroot. Řádek groups=users,admin
říká, že uživatelé v obou skupinách budou moci používat schroot; můžete také zadat users=…
směrnice.
Nainstalujte novou distribuci
Vytvořte adresář a začněte jej plnit debootstrapem. Debootstrap stáhne a nainstaluje základní sadu balíčků pro specifikovanou distribuci a architekturu.
mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Už máte téměř funkční systém; co následuje, jsou drobná vylepšení. Schroot automaticky přepíše několik souborů v /32/etc
když jej spustíte, zejména konfiguraci DNS v /etc/resolv.conf
a uživatelskou databázi v /etc/passwd
a další soubory (toto lze přepsat, viz dokumentace). Existuje několik dalších souborů, které možná budete chtít zkopírovat ručně jednou provždy:
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
Nebude zde soubor /etc/mtab
nebo /etc/fstab
v chrootu. Nedoporučuji používat mount
příkaz ručně v chrootu, udělejte to zvenčí. Ale vytvořte dostatečně dobrý /etc/mtab
k provádění příkazů jako df
pracovat rozumně.
ln -s /proc/mounts /32/etc/mtab
Pomocí directory
typu, schroot provede připojení k řadě adresářů, tj. tyto adresáře budou sdíleny s nadřazenou instalací:/proc
, /dev
, /home
, /tmp
.
Služby v chrootu
Jak je zde popsáno, schroot není vhodný pro spouštění démonů. Programy ve schrootu budou ukončeny, když opustíte schroot. Pokud chcete, aby byl trvalejší, použijte „prostý“ schroot namísto „adresářového“ schrootu a nastavte trvalé připojení v /etc/fstab
na nadřazené instalaci.
Na Debianu a Ubuntu se služby spouštějí automaticky při instalaci. Abyste tomu zabránili (což by mohlo narušit služby běžící mimo chroot, zejména kvůli sdíleným síťovým portům), zaveďte politiku nespouštění služeb v chrootu. Vložte následující skript jako /32/usr/sbin/policy-rc.d
a udělejte jej spustitelným (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
Naplňte nový systém
Nyní můžeme začít používat chroot. V tuto chvíli budete chtít nainstalovat několik dalších balíčků.
schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...
Možná budete muset vygenerovat několik národních prostředí, např.
locale-gen en_US en_US.utf8
Pokud je schroot pro starší verzi Ubuntu, jako je 8.04 (hardy), všimněte si, že balíček ubuntu-standard stahuje MTA. Vyberte nullmailer
místo výchozího postfix
(můžete chtít, aby váš chroot posílal poštu, ale rozhodně nechcete, aby nějakou přijímal).
Jít dále
Další informace naleznete v schroot
manuál, schroot FAQ a schroot.conf
manuál. Schroot je součástí projektu Debian autobuilder (buildd). Na stránce komunity Ubuntu o debootstrapu mohou být další užitečné tipy.
Virtuální stroj
Pokud potřebujete úplnou izolaci alternativního prostředí, použijte virtuální počítač, jako je KVM (qemu-kvm ) nebo VirtualBox.