Mám 64bitovou (AMD64 a.k.a. x86_64) instalaci Debianu nebo Ubuntu. Potřebuji občas spustit 32bitové (i386/i686) programy nebo zkompilovat programy pro 32bitový systém. Jak to mohu udělat s minimem rozruchu?
Bonus: co když chci spustit nebo testovat se starší nebo novější verzí distribuce?
Vzhledem k tomu, že Ubuntu 11.04 a Debian wheezy (7.0), Debian a Ubuntu mají podporu multiarch: můžete přímo kombinovat balíčky x86_32 (i386) a x86_64 (AMD64) na stejném systému. Toto je známé jako podpora multiarch Viz odpověď warl0ck pro více informací.
Ve starších verzích se Debian a Ubuntu dodávají s řadou 32bitových knihoven na AMD64. Nainstalujte ia32-libs
balíček, který má základní sadu 32bitových knihoven a případně i jiné balíčky, které na něm 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 další balíčky, které na něm závisejí, například
g++-multilib
. Můžete najít binutils-multiarch
také užitečné a
ia32-libs-dev
na Debianu. Předejte -m32
možnost gcc kompilovat pro ix86.
Všimněte si, že uname -m
se bude stále zobrazovat x64_64
Pokud používáte 64bitové jádro, bez ohledu na to, jaké 32bitové komponenty uživatelského režimu jste nainstalovali. Schroot popsaný níže se o to postará.
Tato sekce je průvodce instalací distribuce typu Debian „uvnitř“ jiné distribuce Linuxu. Je formulován z hlediska instalace 32bitového Ubuntu uvnitř 64bitového Ubuntu, ale s malými úpravami by se měl použít i v jiných situacích, jako je instalace nestabilního Debianu uvnitř stabilního Debianu nebo naopak.
Záměrem je nainstalovat alternativní distribuci do podstromu a spustit z toho. Takto můžete nainstalovat 32bitový systém do 64bitového systému nebo jiné vydání vaší distribuce nebo testovací prostředí s nainstalovanými různými sadami balíčků.
Příkaz chroot
a systémové volání spustí proces s pohledem na souborový systém, který je omezen na podstrom stromu adresářů. Debian a Ubuntu dodávají schroot , což je nástroj, který se kolem této funkce ovine a vytvoří tak použitelnější dílčí prostředí.
Nainstalujte balíček schroot
( Debian ) a balíček
debootstrap
( Debian ). Debootstrap je nutný pouze pro instalaci alternativní distribuce a poté může být odstraněn.
Tento příklad popisuje, jak nastavit 32bitové prostředí Ubuntu 10.04LTS (lucid lynx). Podobné nastavení by mělo fungovat s jinými verzemi Debianu a Ubuntu. Vytvořit 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
Linie directory=/32
říká schrootu, kam umístíme soubory 32bitové instalace. Linie username=yourusername
říká, že uživatel yourusername
bude moci používat schroot. Linie groups=users,admin
říká, že uživatelé v obou skupinách budou moci používat schroot; můžete také vložit users=…
směrnice.
Vytvořte adresář a začněte jej plnit debootstrapem. Debootstrap stáhne a nainstaluje základní sadu balíčků pro zadanou distribuci a architekturu.
mkdir /32
debootstrap --Arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Už máte téměř funkční systém; následuje drobná vylepšení. Schroot automaticky přepíše několik souborů v /32/etc
při jeho spuštění, zejména konfigurace DNS v /etc/resolv.conf
a databázi uživatelů v /etc/passwd
a další soubory (to lze přepsat, viz dokumentace). Existuje několik dalších souborů, které 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 existovat soubor /etc/mtab
nebo /etc/fstab
v chroot. Nedoporučuji používat příkaz mount
ručně v chroot, udělejte to z vnějšku. Ale vytvořte dostatečně dobrý /etc/mtab
, aby příkazy jako df
fungovaly přiměřeně.
ln -s /proc/mounts /32/etc/mtab
U typu directory
bude schroot provádět vázání připojení z několika adresářů, tj. Tyto adresáře budou sdíleny s nadřazenou instalací: /proc
, /dev
, /home
, /tmp
.
Jak je zde popsáno, schroot není vhodný pro běh démonů. Programy ve schrootu budou zabity, když ukončíte schroot. Pokud chcete, aby byl trvalejší, a místo trvalých vazeb použijte adresář „prostý“ a namísto „adresářového“ kořenového adresáře nastavte v /etc/fstab
na nadřazené instalaci.
V Debianu a Ubuntu se služby spouští automaticky při instalaci. Abyste tomu zabránili (což by mohlo narušit služby běžící mimo chroot, zejména proto, že jsou sdíleny síťové porty), vytvořte politiku , která neprovozuje služby v chroot. Vložte následující skript jako /32/usr/sbin/policy-rc.d
a učinit 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
Nyní můžeme začít používat chroot. Nyní 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 starší verzí Ubuntu, například 8.04 (hardy), uvědomte si, že balíček ubuntu-standard se táhne v MTA. Vyberte nullmailer
místo výchozího postfix
(můžete chtít, aby váš chroot odeslal poštu, ale rozhodně nechcete, aby přijímal žádné).
Další informace naleznete v manuálu schroot
, v schroot FAQ a schroot.conf
manual . Schroot je součástí projektu Debian autobuilder (buildd) . Na stránce Ubuntu komunity o debootstrapu mohou být další užitečné tipy.
Pokud potřebujete úplnou izolaci alternativního prostředí, použijte virtuální stroj jako [~ # ~] kvm [~ # ~] ( qemu-kvm ) nebo VirtualBox .
Protože bunt 11,04 (natty) a Debian 7,0 (wheezy) představeno multiarch podpora, 32bitové a 64bitové knihovny mohou koexistovat v jednom systému . Chcete-li nainstalovat 32bitovou knihovnu libXX, nejprve do svého systému přidejte potřebnou 32bitovou architekturu:
Pro Ubuntu:
Sudo dpkg --foreign-architecture i386
A pro Debian:
Sudo dpkg --add-architecture i386
Poté nainstalujte 32bitovou knihovnu:
Sudo apt-get install libXX:i386
Balíček ia32-libs. Přesně z Ubuntu 12.04 již neobsahuje žádné knihovny, pouze táhne v libXX:i386
balíčky jako závislosti.
Kompilační část je pro programy C a C++ poměrně snadná, přidejte -m32
to CFLAG
nebo CXXFLAG
, které vytvoří vygenerovaný program 32bit, např
export CFLAGS="-m32"
gcc main.c -o main
Toto funguje také pro projekty založené na makefile.
Pokud máte pouze 32bitový binární soubor, který chcete spustit v moderním 64bitovém systému Debian/Ubuntu, postupujte takto:
dpkg --add-architecture i386
apt update
apt install libc6-i386
Toto bylo testováno na Debianu 9.