6.6. Creación de ficheros y enlaces simbólicos esenciales

Algunos programas tienen fijadas en su código rutas a programas que aún no existen. Para satisfacer a estos programas creamos unos cuantos enlaces simbólicos que serán sustituidos por ficheros reales durante el transcurso de este capítulo a medida que vayamos instalando todos los programas:

ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib
ln -sv bash /bin/sh

Un sistema Linux correcto mantiene una lista de los sistemas de ficheros montados en /etc/mtab. Normalmente, este fichero se crearía al montar un nuevo sistema de ficheros. Puesto que no montaremos ningún sistema de ficheros dentro del entorno chroot, crea un fichero vacío para las utilidades que esperan que /etc/mtab esté presente:

touch /etc/mtab

Para que root pueda entrar al sistema y para que el nombre “root” sea reconocido, es necesario tener las entradas apropiadas en los ficheros /etc/passwd y /etc/group.

Crea el fichero /etc/passwd ejecutando el siguiente comando:

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF

La contraseña real para root (la “x” es sólo un sustituto) se establecerá más adelante.

Crea el fichero /etc/group ejecutando el siguiente comando:

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
mail:x:34:
nogroup:x:99:
EOF

Los grupos creados no son parte de ningún estándar, son grupos escogidos en parte por los requisitos de la configuración de Udev en este capítulo, y en parte por la práctica común empleada por una serie de distribuciones Linux existentes. El LSB (Linux Standard Base, disponible en http://www.linuxbase.org/) sólo recomienda que, aparte del grupo root con GID 0, esté presente un grupo bin con GID 1. Todos los demás nombres de grupos y sus GID pueden ser elegidos libremente por el usuario, pues los programas correctamente escritos no dependen del número GID, sino que utilizan el nombre del grupo.

Para eliminar el “I have no name!” del símbolo del sistema, iniciaremos un nuevo intérprete de comandos. Puesto que instalamos una Glibc completa en el Capítulo 5 y acabamos de crear los ficheros /etc/passwd y /etc/group, la resolución de nombres de usuarios y grupos funcionará ahora:

exec /tools/bin/bash --login +h

Advierte el uso de la directiva +h. Esto le indica a bash que no utilice su tabla interna de rutas. Sin esta directiva, bash recordaría la ruta a los binarios que ha ejecutado. Para poder usar los binarios recién compilados tan pronto como sean instalados, se usará la directiva +h durante el resto de este capítulo.

Los programas login, getty e init (entre otros) mantienen una serie de ficheros de registro con información sobre quienes están y estaban dentro del sistema. Sin embargo, estos programas no crean dichos ficheros si no existen. Crea los ficheros de registro con sus permisos correctos:

touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog

El fichero /var/run/utmp lista los usuarios que están actualmente dentro del sistema, /var/log/wtmp registra todos los ingresos y salidas. El fichero /var/log/lastlog muestra, para cada usuario, cuando fue la última vez que ingresó, y el fichero /var/log/btmp lista los intentos de ingreso fallidos.