Linux From Scratch III: Preparando el entorno

En mi post anterior dejé descargados los paquetes necesarios para compilar el sistema temporal de Linux From Scratch. En éste voy a terminar de preparar el entorno de manera que pueda compilar las herramientas sin que mi sistema introduzca elementos que puedan dar problemas.

El siguiente paso que da el libro es preparar un directorio tools en la partición del sistema a instalar para dejar en él las herramientas que vamos a compilar ahora.

[~]# mkdir -v $LFS/tools
mkdir: created directory ‘/mnt/lfs/tools’
[~]# ln -sv $LFS/tools /
‘/tools’ -> ‘/mnt/lfs/tools’

El último comando lo que hace es crear en el directorio raíz de mi sistema (del real) un enlace al directorio tools de la partición. De esa manera las herramientas, que estarán compiladas para hacer referencia a /tools, funcionarán tanto desde el sistema real como desde el sistema compilado.

La idea es que cuando arranquemos desde el sistema compilado o hagamos un chroot a él, el directorio raíz será la partición que estamos preparando, así que de esta manera, cuando una herramienta haga alguna operación con /tools estará accediendo al mismo directorio tanto si ejecutamos esa herramienta desde nuestro sistema, como desde un chroot o arrancando desde la partición.

A continuación, el libro prepara un usuario para trabajar desde él mientras preparamos el sistema temporal. De esa manera evitaremos usar el usuario root, lo que podría presentar un riesgo de seguridad, sobre todo si nos equivocamos con algún comando.

[~]# groupadd lfs
[~]# useradd -s /bin/bash -g lfs -m -k /dev/null lfs
[~]# passwd lfs
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
[~]# chown -v lfs $LFS/tools
changed ownership of ‘/mnt/lfs/tools’ from root to lfs
[~]# chown -v lfs $LFS/sources
changed ownership of ‘/mnt/lfs/sources’ from root to lfs
[~]# su - lfs
[lfs@corellia ~]$

El usuario se llama lfs y tiene también un grupo llamado lfs. A partir de ahora, usaré ese usuario para trabajar con Linux From Scratch.

Todavía faltan algunos pasos más para que la cuenta del usuario que acabamos de crear sea adecuada para trabajar con ella. Es importante partir de un entorno limpio para que lo que tengamos en nuestro sistema no interfiera a la hora de generar las herramientas. Para ello necesitamos crear los ficheros .bash_profile y .bashrc en la cuenta del usuario. Esta es la razón por la que, en el comando useradd anterior, hemos usado la opción -k /dev/null para que no copie los ficheros del directorio skel.

[lfs@corellia ~]$ cat > ~/.bash_profile << "EOF"
> exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
> EOF
[lfs@corellia ~]$ cat > ~/.bashrc << "EOF"
> set +h
> umask 022
> LFS=/mnt/lfs
> LC_ALL=POSIX
> LFS_TGT=$(uname -m)-lfs-linux-gnu
> PATH=/tools/bin:/bin:/usr/bin
> export LFS LC_ALL LFS_TGT PATH
> EOF

El libro explica un poco para que sirven cada uno de los comandos. El exec que ponemos en el .bash_profile sirve para reemplazar el shell por uno sin más variables de entorno heredadas del sistema que HOME, TERM y PS1. El set del principio del .bashrc sirve para desactivar la una característica del bash llamada hash, que guarda una especie de caché con las rutas de los comandos para no tener que estar buscándolos en el PATH todo el tiempo. Esto podría perjudicarnos cuando añadamos comandos a /tools/bin con el mismo nombre que otros que ya existen en /bin o en /usr/bin, ya que podría seguir ejecutando los antiguos.

La linea umask sirve para que los ficheros creados con el usuario lfs sólo tengan permisos de escritura para ese mismo usuario. La siguiente linea establece el valor de la variable LFS tal y como lo hice en el post anterior, de forma que también esté disponible para este usuario. A continuación, establece la variable LC_ALL de manera que el usuario utilice el local POSIX, que es el más estándar posible, para que las opciones regionales no interfieran. En la siguiente linea, se establece el valor de una variable llamada LFS_TGT. Parece ser que el uso de esta variable está relaccionado con el toolchain de compilación, pero el libro no la explica hasta más adelante.

Por último, en las dos últimas lineas se establece un PATH limitado y se exportan todas las variables de entorno definidas ahí de forma que estén disponibles en los demás procesos que se lancen desde el shell. El directorio /tools/bin se coloca el primero en el PATH. Así el shell encontrará en primer lugar las herramientas que compilemos en ese directorio. Ahora hacemos que nuestro shell lea el .bash_profile para que los cambios hagan efecto inmediatamente.

[lfs@corellia ~]$ source ~/.bash_profile

El libro da una advertencia sobre el tiempo que tardan muchos paquetes en compilar. Este tiempo depende, como era de esperar, de las características de la máquina en la que se está compilando. Según el libro, la librería glibc, que es el mayor paquete de todos, puede tardar desde 20 minutos en una máquina rápida hasta tres días en una lenta. Yo, de momento, voy a compilar en un Dual Core Hyper-Threading a 1600, ya veremos a ver la velocidad.

Me llama la atención que el libro define el concepto de SBU (Standard Build Unit) como el tiempo que tarda en compilar el paquete binutils, que es el primero que se compila, y luego expresa los tiempos que tardan los demás paquetes en SBUs. Esta puede ser una manera de hacerse una idea de lo que va a tardar. Me gusta el sistema. Aunque sólo es aproximado, claro.

Pero a todo esto le llegará el turno en el siguiente post que será donde empiece a compilar. Por ahora esto es todo.

EOF

Anuncios

2 pensamientos en “Linux From Scratch III: Preparando el entorno

  1. Damian Rivera

    Muy interesante 😀

    Es increíble la comparación de tiempo entre equipos,de 20min a 3 dias ,me recuerda que yo en Gentoo hasta en nano me llevaba 10 minutos 😦

    Usando time para ver,pero es realmente grandioso configurar todo

    Your distro Your rules

    Saludos 😀

    1. hexborg Autor de la entrada

      Sí. Depende mucho de la máquina. En mi caso espero que se acerque más a los 20 minutos que a los tres días. 🙂

      Saludos y gracias por comentar. 🙂

Los comentarios están cerrados.