dijous, 1 de novembre del 2007

Arquitectura AMD64 i dchroot

Avui en dia quasi totes els microprocessadors que surten al mercat son de 64 bits, i per aprofitar al màxim les seves prestacions el millor és instal·lar el programari apropiat per aquesta arquitectura. En les distribucions derivades de debian s'ha establert que el nom de la arquitectura és amd64. El fet que el nom contingui AMD no significa que no funcioni en Intel, simplement va passar que AMD fou el primer en produir microprocessadors de 64bits a nivell comercial de manera assequible i els de debian li varen posar aquest nom. Però avui en dia els Intel (Core 2 Duo/Quad) també empren aquesta arquitectura.
Per a gaudir dels vostres 64bits la única cosa que heu de fer és instal·lar la iso de 64bits en lloc de la de 32 de la vostre distribució preferia. Un cop fet això quan empreu eines com l'apt ell mateix ja baixarà els paquets corresponents a la vostre arquitectura. El problema és pot presentar quan el programari que voleu instal·lar no esta als repositoris o no esta empaquetat per 64bits, així doncs hi ha diferents solucions:
En primer lloc es recomanable instal·lar el paquet ia32-libs ja que en teoria en un sistema de 64bits s'ha de poder executar codi de 32, amb aquest paquet tindreu llibreries que ho permeten, però així i tot a vegades no basta. Aixó i tot si podeu aconseguir els paquets deb de i386 aquests no es voldran instalar dient que no son per a la vostre arquitectura, per instal·lar un paquet i386 podeu forçar al dpkg amb la opció --force-architecture (dpkg -i --force-architecture paquet_i386.deb) i no vos protestarà si li posau paquets i386, ara bé sovint el programa no funciona perquè li falten llibreries especifiques de 32bits no incloses al ia32-libs, així que a vegades és necessari cercar els debs de les llibreries en i386 i descomprimir los als llocs corresponents(/usr/lib, /usr/local/lib, carpeta del programa etc.).
També pot passar que no hi hagi binaris ni debs però trobem el codi font, així simplement fa falta que ho compilem :P.
Però que passa si no hi ha ni això? que només hi ha els binaris de 32bits i no funcionen les llibreries(per exemple el Zattoo)?
En aquest cas el millor que es pot fer és un chroot, instal·lar un sistema de 32bits amb totes les seves llibreries i anar posant tot el software de 32bits allà dins sense problemes.
A BULMA podeu trobar un tutorial de'n Jordi Llull (aka worm) que ho explica molt bé, però està un poc des actualitzat, aquí faig un copy-paste canviat algunes coses per que sigui més simple i actualitzat.

Per a fer un chroot hem de instal·lar el paquet dchroot i debootstrap, el primer servirà per accedir al chroot sense haver de tenir privilegis de root, i el segon per a instal·lar el sistema dins de una carpeta baixant els paquets de un repositori:
sudo aptitude install dchroot debootstrap

Cream la carpeta on voleu posar el sistema, jo la sol posar a la home o a l'arrel, dement d'on tingueu mes espai lliure, ara la pos a la home.
mkdir ~/chroot32

Ara haureu de editar/crear el fitxer de configuració del dchroot (si no teniu el kate podeu emprar qualsevol altre editor, nano, vi, gedit...):
sudo kate /etc/dchroot.conf

I posam una línia on s'indiqui el nom del chroot i la carpeta on esta:
gutsy ~/chroot32

Ara fa falta instal·lar els sistema, ho farem amb el debootstrap (és només en una linia):
sudo debootstrap --arch i386 gutsy ~/chroot32/ http://archive.ubuntu.com/ubuntu
Aquest procés pot tardar bastant ja que ha de baixar paquets de internet.
Si he posat gutsy es perque actualment és la versió més recent de Ubuntu, es pot posar qualsevol altre versió, si voleu posar una debian podeu posar sid, lenny o etch i canviar el repositori.

Ara toca configurar l'apt del chroot, per això afegirem les fonts al ~/chroot32/etc/apt/sources.list , posau:
deb http://archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu gutsy-security main restricted universe multiverse
Ara copiarem carpetes del sistema dins del chroot per tal de tenir les mateixos usuaris etc:
sudo cp /etc/passwd ~/chroot/etc/
sudo cp /etc/shadow ~/chroot/etc/
sudo cp /etc/group ~/chroot/etc/
sudo cp /etc/sudoers ~/chroot/etc/
sudo cp /etc/hosts ~/chroot/etc/
I modificarem el fstab per que monti automàticament les carpetes dins el chroot:
sudo mkdir /chroot/media/cdrom0 #Per poder llegir el CD
sudo kate /etc/fstab

I afegim:
##CHOOT! DESMONTAR ABANS DE ELIMINAR EL CHROOT!!!!
/home ~/chroot/home none bind 0 0
/tmp ~/chroot/tmp none bind 0 0
/dev ~/chroot/dev none bind 0 0
/proc ~/chroot/proc proc defaults 0 0
/media/cdrom0 ~/chroot/media/cdrom0 none bind 0 0
/usr/share/fonts ~/chroot/usr/share/fonts none bind 0 0


ANAU MOLT ALETA! Si voleu eliminar el chroot per el que sigui heu de desmuntar totes aquestes carpetes o eliminareu fitxers del vostre sistema original! Per això es recomanable eliminar el que hem afegit al fstab i reiniciar (o remuntar l'fstab manualment) l'ordinador, després comprovar amb un mount que no apareix res d'això i llavors eliminar el chroot.

Ara ja teniu el chroot llest! Per entrar a ell heu de fer un dchroot -d i tot el que faceu a aquella terminal succeira dins del chroot de 32bits, per instal·lar algun programa ho podeu fer amb l'apt (que buscara i386) amb dpkg o executant els binaris mateix amb sh o ./ . Per executar els programes es fa dins d'aquesta mateixa terminal posant el seu nom i per soritir del chroot simplement escriviu exit, record amb amb control + C podeu cancel·lar l'execució de qualsevol programa que s'executi en una terminal.

Be vist que avui en dia les distribucions de 64bits permeten total compatibilitat, amb més o menys esforç vos recoman que les proveu, amb una distribució de 64bits s'aconsegueix aproximadament un 20% més de rendiment de la CPU.

NOTA: Des de que es va fer una extensió de firefox per carregar plugins de 32bits a la versió de 64bits ja no es necessari fer coses rares per posar el flash. Per a instal·lar aquesta extensió ho podeu fer mitjançant l'apt, és diu nspluginwrapper (sudo aptitude install nspluginwrapper). La solució primitiva era instal·lar el firefox dins del chroot i executar lo des de allà.