Instalando Linux-2.4.19

Estimación del tiempo de construcción:      0.02
Estimación del espacio de disco requerido:  142 MB

Instalación de las cabeceras del núcleo

No compilaremos todavía un nuevo núcleo (kernel) -- lo haremos cuando terminemos la instalación de todos los paquetes. Pero como ciertos paquetes necesitan los ficheros de cabecera (headers) del núcleo, vamos a desempaquetar el archivo del núcleo ahora, ajustarlo, y copiar los ficheros de cabecera a un lugar donde puedan encontrarlos esos paquetes.

Los ficheros de cabecera del núcleo son copiados mediante la ejecución de los siguientes comandos:

ln -s /static/bin/pwd /bin/pwd &&
make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir /usr/include/asm &&
cp include/asm/* /usr/include/asm &&
cp -R include/asm-generic /usr/include &&
cp -R include/linux /usr/include &&
touch /usr/include/linux/autoconf.h &&
rm /bin/pwd

Explicación de los comandos

ln -s /static/bin/pwd /bin/pwd: En las fuentes del núcleo la ruta a pwd está fijada como /bin/pwd, así que, para solucionarlo, creamos un enlace simbólico temporal. Al terminar lo volvemos a eliminar.

make mrproper: Esto asegurará que el árbol del núcleo está absolutamente limpio. El equipo de desarrollo del núcleo recomienda usar este comando antes de cada compilación del núcleo, y en realidad no debes confiar en que el árbol de las fuentes esté limpio tras desempaquetarlo.

make include/linux/version.h y make symlinks: Esto crea el fichero include/linux/version.h, así como el enlace simbólico include/asm específico de la plataforma.

mkdir /usr/include/asm , cp include/asm/* /usr/include/asm y cp -R include/asm-generic /usr/include: Estos comandos copian los ficheros de cabecera del núcleo para el ensamblador específicos de la plataforma en /usr/include/asm y /usr/include/asm-generic.

cp -R include/linux /usr/include: Este comando copia los ficheros de cabecera del núcleo independientes de la plataforma en /usr/include.

touch /usr/include/linux/autoconf.h: Esto crea un fichero autoconf.h vacío. Como aún no hemos configurado el núcleo, tenemos que crear este fichero nosotros para unas cuantas cabeceras del núcleo que lo utilizan, evitando fallos de compilación.

El porqué de copiar las cabeceras del núcleo y no hacer enlaces simbólicos a ellas.

En el pasado, era una práctica común enlazar simbólicamente los directorios /usr/include/{linux,asm} a /usr/src/linux/include/{linux,asm}. Esta fue una mala práctica, como señala este extracto de un mensaje de Linus Torvalds a la Lista de Correo del Núcleo Linux:

Sugeriría que la gente que compile núcleos nuevos debe:

 - no tener un sólo enlace simbólico a la vista (excepto el que crea la
   misma construcción del núcleo, el enlace simbólico llamado
   "linux/include/asm", que sólo se usa para la compilación interna del
   mismo núcleo).

Y sí, esto es lo que yo hago. Mi /usr/src/linux todavía contiene los
ficheros de cabecera del antiguo 2.2.13, aunque no he ejecutado un
núcleo 2.2.13 desde hace _muucho_ tiempo. Pero esas fueron las cabeceras
con las que fue compilada glibc, por lo que esas cabeceras son las que
coinciden con los ficheros objeto de la librería.

Y este es, de hecho, el entorno que se ha sugerido en, al menos, los
últimos cinco años. No sé por qué el asunto del enlace simbólico sigue
coleando, como un mal zombi. Casi cada distribución todavía tiene ese
enlace simbólico roto,  y la gente todavía recuerda que el código fuente
de linux debe ir en "/usr/src/linux" aunque no ha sido cierto desde hace
_muucho_ tiempo.

La parte relevante es donde Linus afirma que las cabeceras deberían ser con las que fue compilada glibc. Estas son las cabeceras que deberías usar cuando más adelante compiles otros paquetes, pues son las que coinciden con los códigos-objeto de las librerías. Al copiar las cabeceras nos aseguramos de que permanecen disponibles si posteriormente actualizas el núcleo.

Advierte, de paso, que es perfectamente correcto tener las fuentes del núcleo en /usr/src/linux, mientras no tengas los enlaces simbólicos /usr/include/{linux,asm}.

Contenido de Linux

Última versión comprobada: 2.4.18.

Dependencias de instalación de Linux

Última versión comprobada: 2.4.17.

Bash: sh
Binutils: ar, as, ld, nm, objcopy
Fileutils: cp, ln, mkdir, mv, rm, touch
Findutils: find, xargs
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gzip
Make: make
Gawk: awk
Modutils: depmod, genksyms
Net-tools: dnsdomainname, hostname
Sed: sed
Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
Textutils: cat, md5sum, sort, tail