Kategória: Raspberry π

Zmenené: 8. jún 2014

RasPi v chroote v Debiane

Odkedy mám Raspberry Pi s Rasbianom, mám o zábavu postarané (v pravom slova zmysle) a súčasťou tejto zábavy je aj kompilácia balíkov. Doteraz som na to využíval Rasbian bežiaci v QEMU, ale je to hrozne, naozaj hrozne, pomalé – kompilácia aj bežných balíkov zaberá aj niekoľko hodín.

Práve kvôli nekonečnej kompilácii som sa veľmi potešil, keď som objavil článok Setting up a chroot for Raspbian a prakticky okamžite som sa rozhodol vyskúšať, či to naozaj funguje – no a výsledok je jasný, s malými úpravami (kvôli novším verziám softvéru) to funguje.

Podstata tohoto riešenia spočíva vo vytvorení prostredia chroot (pomocou qemu-debootstrap) a jeho spúšťaní pomocou qemu-user-static, v ktorom možno kompilovať balíky pre Raspbian, ale s výkonom reálneho stroja, na ktorom je toto prostredie vytvorené. teda, aby som bol presný, nie celkom s výkonom reálneho stroja, ale každopádne niekoľkonásobne vyšším ako v prípade virtuálneho stroja v QEMU. Celý postup som realizoval na Debiane testing (aktuálne jessie).

Tak najprv inštalácia potrebného softvéru:

sudo apt-get install dchroot schroot debootstrap wget qemu-user-static

Kvôli sťahovaniu balíkov z úložiska Rasbian je potrebný jeho kľúč:

wget https://archive.raspbian.org/raspbian/pool/main/r/raspbian-archive-keyring/raspbian-archive-keyring_20120528.2_all.deb
sudo dpkg -i raspbian-archive-keyring_20120528.2_all.deb

Teraz možno vytvoriť adresár, kde bude prostredie chroot uložené (ja som zvolil adresár /home/chroot, ktorý mám ešte z minulých pokusov). Neviem či nástroj qemu-debootstrap vyžaduje práva root, ale je v adresári /sbin, tak som to neriešil a spustil ho ako root (tu je sudo):

mkdir /home/chroot/raspbian-armhf/
sudo qemu-debootstrap --keyring /usr/share/keyrings/raspbian-archive-keyring.gpg \
 --arch armhf wheezy /home/chroot/raspbian-armhf http://archive.raspbian.org/raspbian

Predošlý príkaz zaberie nejaký čas (vhodné na cigaretku, či kávu), po jeho dokončení malé prispôsobenie (pozor, ako root). Najprv názov chroot (/etc/debian-chroot), potom vydvorenie symbolického odkazu súboru prípojnými bodmi a nakoniec prekopírovanie súborov s používateľmi, skupinami a heslami:

echo raspbian-armhf > /home/chroot/raspbian-armhf/etc/debian_chroot
ln -s ../proc/mounts /home/chroot/raspbian-armhf/etc/mtab
cp /etc/passwd /etc/group /etc/shadow /home/chroot/raspbian-armhf/etc

Tip

Skupiny a používateľov (prípadne i členstvo) môže byť dobré trochu preriediť, ale nie je to nutné.

Spustenie

Tu sa dostávam na tenký ľad. S nástrojmi schroot a dchroot nemám veľa skúseností (hoci so schroot som sa už dávnejšie hral), preto som len mierne upravil nastavenia z pôvodného článku.

Ako prvé je pridanie identifikátora chroot do súboru /etc/dchroot.conf. Tento súborov:

raspbian-armhf /home/chroot/raspbian-armhf

Nasleduje vytvorenie nastavení chroot v nástroji schroot. Na to som vytvoril súbor v adresári /etc/schroot/chroot.d a nazval som ho raspbian-armhf s obsahom:

[raspbian-armhf]
type=directory
description=Raspbian wheezy armhf
directory=/home/chroot/raspbian-armhf
users=slavko
groups=adm
root-groups=adm
personality=linux32
aliases=raspi

Po vytvorení týchto nastavení už možno vstúpiť do prostedia chroot:

dchroot --directory ~ -c raspbian-armhf

Rada

Pretože som používateľov nepridával, ale prekopíroval, neexistoval domovský adresár používateľa, tak som ho ručne vytvoril a prekopíroval do neho obsah adresára /etc/skel.

Výsledkom je zmenený reťazec promptu (aby som jasne videl, že dom inde):

(raspbian-armhf)slavko@bonifac:~$

Nastavenie APT

Po prihlásení v prostredí chroot som ako prvé kontroloval APT. Zistil som, že po nainštalovaní je súbor /etc/apt/sources.list prázdny, a tak som prekopíroval riadok z Raspberry:

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

Pretože sa jedná o jednoúčelové prostredie na kompiláciu balíkov, zrušil som inštaláciu odporúčaných a navrhovaných balíkov:

cat > /etc/apt/apt.conf.d/01norecommend << EOF
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOF

Ostáva už len aktualizovať zoznam balíkov:

apt-get update

A nainštalovať minimálnu potrebu na kompiláciu:

apt-get install build-essential devscripts fakeroot

Poznámka

aptitude je nainštalované, ale nepracuje dobre v režime ncurses, no pri použití z príkazového riadku som problémy nezaregistroval…

Záver

Čo napísať na záver? Funguje to. A spomínaný rozdiel v rýchlosti? Na porovnanie, (re)kompilácia balíkov uWSGI (zo sid) vo virtuálnom Raspberry v QEMu trvala cca 7 hodín (nemeral som to presne), ale v prostredí chroot to bolo 68 minút (toto som už meral). Vidíte teda sami, že rozdiel je priepastný!