Como crear una distro a la medida

Daniel Serpell dserpell en gmail.com
Dom Sep 21 22:36:05 CLT 2008


Hola!

El Sun, Sep 21, 2008 at 05:38:55PM -0400, Rodrigo Fuentealba escribio:
> 
> El día 21 de septiembre de 2008 16:45, Carlos Manuel Duclos Vergara
> <carlos en embedded.cl> escribió:
> >
> > Si estas interesado en ahorrar todos los bits posibles, saltate a un sistema
> > que no utilice glibc. Durante bastante tiempo utilice buildroot del proyecto
> > uclibc para construir sistemas embebidos y puedes generar sistemas en el
> > orden de 4 a 8 megas con mas o menos todo lo necesario. Por supuesto si
> > ademas quieres firefox + flash + ....
> 
> Pregunta: yo estoy interesado en hacer un sistema pequeñísimo (el
> disco completo es de 100 Mb) y estaba pensando en usar los
> repositorios de zipslack, portándolos a ARM. Pero veo que uclibc corre
> en ARM, ¿lo has probado? ¿funciona bien?
> 
> Eso, thanks.

En mi experiencia, si ya tienes 100M, mejor usar glibc, te ahorraras muchos
problemas.

Aquí, un sistema con libc6 completo con busybox 1.10 compilado con casi todos
los comandos, con dropbear para servidor de ssh y algunos programas propios:

 /home/daniel/arm/newHome$ du -sh
 6.6M    .

El problema de tener un sistema así, tan a la medida, es que tienes que estar
preparado para dar el soporte completo, perseguir parches de seguridad,
recompilar, etc.

En mi caso, ese sistema está basado en Debian etch (usa el paquete .deb de
glibc de Debian recortando lo que no se necesita con un script) más un kernel
específico (compilado sin soporte para el HW que no necesitamos).

Esto permite que si hay actualizaciones de libc, simplemente se instala el
nuevo paquete - compilar libc *no* es trivial. Y así con otras utilidades
pequeñas.

Otra opción que existe actualmente es Emdebian (www.emdebian.org),
ellos están tratando de automatizar el proceso de compilar los
paquetes de Debian utilizando compiladores cruzados y con scripts
que de manera automática recortan la documentación y otras cosas
que no son útiles en un sistema embebido. Y además, están intentando
compilar Debian usando uClibc, para un sistema más pequeño aún.

Lo mejor de emdebian es "apt-cross" y "dpkg-cross", los que permiten
instalar bibliotecas de compilación cruzada diréctamente desde
los paquetes de Debian nativos. Aquí, por ejemplo, tengo:

 $ dpkg -l | egrep 'arm(el)?-' 
 ii  binutils-arm-linux-gnueabi            2.18.1~cvs20080103-7       
 ii  cpp-4.3-arm-linux-gnueabi             4.3.1-9                    
 ii  g++-4.3-arm-linux-gnueabi             4.3.1-9                    
 ii  gcc-4.3-arm-linux-gnueabi             4.3.1-9                    
 ii  gcc-4.3-arm-linux-gnueabi-base        4.3.1-9                    
 ii  gcc-4.3-base-armel-cross              4.3.1-9                    
 ii  gdb-arm-linux-gnueabi                 6.8-3                      
 ii  libc6-armel-cross                     2.7-13                     
 ii  libc6-dev-armel-cross                 2.7-13                     
 ii  libfreetype6-dev-armel-cross          2.3.7-1                    
 ii  libgcc1-armel-cross                   1:4.3.1-9                  
 ii  libjpeg62-armel-cross                 6b-14                      
 ii  libjpeg62-dev-armel-cross             6b-14                      
 ii  libpng12-0-armel-cross                1.2.27-1                   
 ii  libsqlite3-0-armel-cross              3.5.9-3                    
 ii  libsqlite3-dev-armel-cross            3.5.9-3                    
 ii  libstdc++6-4.3-dev-armel-cross        4.3.1-9                    
 ii  libstdc++6-armel-cross                4.3.1-9                    
 ii  pngcrush-armel-cross                  1.6.7-1                    
 ii  pngmeta-armel-cross                   1.11-6                     
 ii  zlib1g-armel-cross                    1:1.2.3.3.dfsg-12          
 ii  zlib1g-dev-armel-cross                1:1.2.3.3.dfsg-12          

Con eso, puedo simplemente utilizar arm-linux-gnueabi-gcc como compilador
cruzado y disponer de todas esas bibliotecas.

Suerte!

    Daniel.



Más información sobre la lista de distribución Linux