it-swarm-eu.dev

Jak spustím 32bitové programy na 64bitovém Debian / Ubuntu?

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?

Nativní podpora

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-libsInstall 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-multilibInstall gcc-multilib a opět další balíčky, které na něm závisejí, například g++-multilib. Můžete najít binutils-multiarchInstall 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á.

Schroot

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.

Úvod

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 schrootInstall schroot ( Debian ) a balíček debootstrapInstall debootstrap ( Debian ). Debootstrap je nutný pouze pro instalaci alternativní distribuce a poté může být odstraněn.

Nastavit schroot

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.

Nainstalujte novou distribuci

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.

Služby v chroot

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

Vyplňte nový systém

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é).

Jdeme dál

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.

Virtuální stroj

Pokud potřebujete úplnou izolaci alternativního prostředí, použijte virtuální stroj jako [~ # ~] kvm [~ # ~] ( qemu-kvmInstall 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.

27
daisy

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.

2
cjs