2. Kernel para metadistros

Actualmente hay disponibles dos kernels: uno destinado al sistema de escritorio y otro a servidores. Ambos se han basado en la versión 2.4.20 de Linux, lo que los diferencia son los parches aplicados y la configuración de los mismos. Veremos los detalles a continuación.

2.1. Diferencias en la configuración

La configuración del kernel varía dependiendo de si este está destinado a servidores o a entornos de escritorio. Las diferencias principales son: los sistemas de escritorio no poseeran soporte multiprocesador y la configuración de grsecurity es menos restrictiva que para los servidores.

A continuación veremos la salida del comando:

# diff -u 2.4.20.metadistros-servidor.conf 2.4.20.metadistros-usuario.conf
Siendo 2.4.20.metadistros-servidor.conf el archivo donde está guardada la configuración para los kernels destinados a servidores y 2.4.20.metadistros-usuario.conf la configuración para los kernels destinados a los sistemas de escritorio.

--- 2.4.20.metadistros-servidor.conf	2003-04-13 20:33:54.000000000 +0200
+++ 2.4.20.metadistros-usuario.conf	2003-04-13 20:38:44.000000000 +0200
@@ -20,6 +20,8 @@
 #
 # Processor type and features
 #
+CONFIG_LOLAT=y
+CONFIG_LOLAT_SYSCTL=y
 CONFIG_M386=y
 # CONFIG_M486 is not set
 # CONFIG_M586 is not set
@@ -55,16 +57,18 @@
 # CONFIG_HIGHMEM is not set
 CONFIG_MATH_EMULATION=y
 CONFIG_MTRR=y
-CONFIG_SMP=y
-# CONFIG_MULTIQUAD is not set
+# CONFIG_SMP is not set
+CONFIG_PREEMPT=y
+CONFIG_X86_UP_APIC=y
+# CONFIG_X86_UP_IOAPIC is not set
+CONFIG_X86_LOCAL_APIC=y
 # CONFIG_X86_TSC_DISABLE is not set
 
 #
 # General setup
 #
+CONFIG_HZ=500
 CONFIG_NET=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_LOCAL_APIC=y
 CONFIG_PCI=y
 # CONFIG_PCI_GOBIOS is not set
 # CONFIG_PCI_GODIRECT is not set
@@ -92,7 +96,6 @@
 CONFIG_HOTPLUG_PCI=m
 CONFIG_HOTPLUG_PCI_COMPAQ=m
 # CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-CONFIG_HOTPLUG_PCI_IBM=m
 # CONFIG_HOTPLUG_PCI_ACPI is not set
 CONFIG_SYSVIPC=y
 CONFIG_BSD_PROCESS_ACCT=y
@@ -103,7 +106,6 @@
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=m
 CONFIG_PM=y
-# CONFIG_ACPI is not set
 CONFIG_APM=m
 # CONFIG_APM_IGNORE_USER_SUSPEND is not set
 CONFIG_APM_DO_ENABLE=y
@@ -114,6 +116,11 @@
 # CONFIG_APM_REAL_MODE_POWER_OFF is not set
 
 #
+# ACPI Support
+#
+# CONFIG_ACPI is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -176,6 +183,7 @@
 CONFIG_CISS_SCSI_TAPE=y
 CONFIG_BLK_DEV_DAC960=m
 CONFIG_BLK_DEV_UMEM=m
+# CONFIG_CDROM_PKTCDVD is not set
 CONFIG_BLK_DEV_LOOP=m
 CONFIG_BLK_DEV_NBD=m
 CONFIG_BLK_DEV_RAM=y
@@ -406,7 +414,7 @@
 CONFIG_IPSEC_ALG_BLOWFISH=m
 CONFIG_IPSEC_ALG_CAST=m
 CONFIG_IPSEC_ALG_CRYPTOAPI=m
-# CONFIG_IPSEC_ALG_NON_LIBRE is not set
+CONFIG_IPSEC_ALG_NON_LIBRE=y
 CONFIG_IPSEC_ALG_NULL=m
 CONFIG_IPSEC_ALG_SERPENT=m
 CONFIG_IPSEC_ALG_TWOFISH=m
@@ -512,7 +520,6 @@
 CONFIG_BLK_DEV_SR_VENDOR=y
 CONFIG_SR_EXTRA_DEVS=2
 CONFIG_CHR_DEV_SG=m
-# CONFIG_SCSI_DEBUG_QUEUES is not set
 # CONFIG_SCSI_MULTI_LUN is not set
 CONFIG_SCSI_CONSTANTS=y
 # CONFIG_SCSI_LOGGING is not set
@@ -779,7 +786,7 @@
 CONFIG_NS83820=m
 CONFIG_HAMACHI=m
 CONFIG_YELLOWFIN=m
-CONFIG_SK98LIN=m
+# CONFIG_SK98LIN is not set
 CONFIG_TIGON3=m
 CONFIG_FDDI=y
 CONFIG_DEFXX=m
@@ -1266,7 +1273,7 @@
 CONFIG_INTEL_RNG=m
 CONFIG_AMD_PM768=m
 CONFIG_NVRAM=m
-CONFIG_RTC=y
+CONFIG_RTC=m
 CONFIG_DTLK=m
 CONFIG_R3964=m
 CONFIG_APPLICOM=m
@@ -1380,6 +1387,7 @@
 CONFIG_REISERFS_FS=y
 # CONFIG_REISERFS_CHECK is not set
 # CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_SUPERMOUNT is not set
 CONFIG_ADFS_FS=m
 CONFIG_ADFS_FS_RW=y
 CONFIG_AFFS_FS=m
@@ -1550,8 +1558,9 @@
 CONFIG_FB_PM3=m
 CONFIG_FB_CYBER2000=m
 CONFIG_FB_VESA=y
+CONFIG_LPP=y
 CONFIG_FB_VGA16=m
-CONFIG_FB_HGA=m
+# CONFIG_FB_HGA is not set
 CONFIG_VIDEO_SELECT=y
 CONFIG_FB_MATROX=m
 CONFIG_FB_MATROX_MILLENIUM=y
@@ -1574,6 +1583,7 @@
 CONFIG_FB_VOODOO1=m
 CONFIG_FB_TRIDENT=m
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_FBCON_SPLASHSCREEN is not set
 CONFIG_FBCON_ADVANCED=y
 CONFIG_FBCON_MFB=m
 CONFIG_FBCON_CFB2=y
@@ -1809,9 +1819,6 @@
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_FRAME_POINTER is not set
-# CONFIG_KDB is not set
-# CONFIG_KDB_MODULES is not set
-# CONFIG_KALLSYMS is not set
 
 #
 # Library routines
@@ -1831,22 +1838,12 @@
 #
 # Address Space Protection
 #
-CONFIG_GRKERNSEC_PAX_NOEXEC=y
-CONFIG_GRKERNSEC_PAX_PAGEEXEC=y
-CONFIG_GRKERNSEC_PAX_SEGMEXEC=y
-CONFIG_GRKERNSEC_PAX_EMUTRAMP=y
-CONFIG_GRKERNSEC_PAX_EMUSIGRT=y
-CONFIG_GRKERNSEC_PAX_MPROTECT=y
-CONFIG_GRKERNSEC_PAX_NOELFRELOCS=y
-CONFIG_GRKERNSEC_PAX_ASLR=y
-CONFIG_GRKERNSEC_PAX_RANDUSTACK=y
-CONFIG_GRKERNSEC_PAX_RANDMMAP=y
-CONFIG_GRKERNSEC_PAX_RANDEXEC=y
-CONFIG_GRKERNSEC_KMEM=y
-CONFIG_GRKERNSEC_IO=y
-CONFIG_RTC=y
-CONFIG_GRKERNSEC_PROC_MEMMAP=y
-CONFIG_GRKERNSEC_HIDESYM=y
+# CONFIG_GRKERNSEC_PAX_NOEXEC is not set
+# CONFIG_GRKERNSEC_PAX_ASLR is not set
+# CONFIG_GRKERNSEC_KMEM is not set
+# CONFIG_GRKERNSEC_IO is not set
+# CONFIG_GRKERNSEC_PROC_MEMMAP is not set
+# CONFIG_GRKERNSEC_HIDESYM is not set
 
 #
 # ACL options
@@ -1861,49 +1858,33 @@
 CONFIG_GRKERNSEC_PROC=y
 # CONFIG_GRKERNSEC_PROC_USER is not set
 CONFIG_GRKERNSEC_PROC_USERGROUP=y
-CONFIG_GRKERNSEC_PROC_GID=2000
+CONFIG_GRKERNSEC_PROC_GID=2001
 CONFIG_GRKERNSEC_PROC_ADD=y
 CONFIG_GRKERNSEC_LINK=y
 CONFIG_GRKERNSEC_FIFO=y
-CONFIG_GRKERNSEC_CHROOT=y
-CONFIG_GRKERNSEC_CHROOT_MOUNT=y
-CONFIG_GRKERNSEC_CHROOT_DOUBLE=y
-CONFIG_GRKERNSEC_CHROOT_PIVOT=y
-CONFIG_GRKERNSEC_CHROOT_CHDIR=y
-CONFIG_GRKERNSEC_CHROOT_CHMOD=y
-CONFIG_GRKERNSEC_CHROOT_FCHDIR=y
-CONFIG_GRKERNSEC_CHROOT_MKNOD=y
-CONFIG_GRKERNSEC_CHROOT_SHMAT=y
-CONFIG_GRKERNSEC_CHROOT_UNIX=y
-CONFIG_GRKERNSEC_CHROOT_FINDTASK=y
-CONFIG_GRKERNSEC_CHROOT_NICE=y
-CONFIG_GRKERNSEC_CHROOT_SYSCTL=y
-CONFIG_GRKERNSEC_CHROOT_CAPS=y
+# CONFIG_GRKERNSEC_CHROOT is not set
 
 #
 # Kernel Auditing
 #
-CONFIG_GRKERNSEC_AUDIT_GROUP=y
-CONFIG_GRKERNSEC_AUDIT_GID=2007
-CONFIG_GRKERNSEC_EXECLOG=y
-CONFIG_GRKERNSEC_RESLOG=y
-CONFIG_GRKERNSEC_CHROOT_EXECLOG=y
-CONFIG_GRKERNSEC_AUDIT_CHDIR=y
-CONFIG_GRKERNSEC_AUDIT_MOUNT=y
-CONFIG_GRKERNSEC_AUDIT_IPC=y
-CONFIG_GRKERNSEC_SIGNAL=y
-CONFIG_GRKERNSEC_FORKFAIL=y
-CONFIG_GRKERNSEC_TIME=y
+# CONFIG_GRKERNSEC_AUDIT_GROUP is not set
+# CONFIG_GRKERNSEC_EXECLOG is not set
+# CONFIG_GRKERNSEC_RESLOG is not set
+# CONFIG_GRKERNSEC_CHROOT_EXECLOG is not set
+# CONFIG_GRKERNSEC_AUDIT_CHDIR is not set
+# CONFIG_GRKERNSEC_AUDIT_MOUNT is not set
+# CONFIG_GRKERNSEC_AUDIT_IPC is not set
+# CONFIG_GRKERNSEC_SIGNAL is not set
+# CONFIG_GRKERNSEC_FORKFAIL is not set
+# CONFIG_GRKERNSEC_TIME is not set
 
 #
 # Executable Protections
 #
-CONFIG_GRKERNSEC_EXECVE=y
+# CONFIG_GRKERNSEC_EXECVE is not set
 CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_RANDPID=y
-CONFIG_GRKERNSEC_TPE=y
-CONFIG_GRKERNSEC_TPE_ALL=y
-CONFIG_GRKERNSEC_TPE_GID=2005
+# CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
@@ -1914,13 +1895,7 @@
 CONFIG_GRKERNSEC_RANDSRC=y
 CONFIG_GRKERNSEC_RANDRPC=y
 CONFIG_GRKERNSEC_RANDPING=y
-CONFIG_GRKERNSEC_SOCKET=y
-CONFIG_GRKERNSEC_SOCKET_ALL=y
-CONFIG_GRKERNSEC_SOCKET_ALL_GID=2004
-CONFIG_GRKERNSEC_SOCKET_CLIENT=y
-CONFIG_GRKERNSEC_SOCKET_CLIENT_GID=2003
-CONFIG_GRKERNSEC_SOCKET_SERVER=y
-CONFIG_GRKERNSEC_SOCKET_SERVER_GID=2002
+# CONFIG_GRKERNSEC_SOCKET is not set
 
 #
 # Sysctl support

2.2. Kernel para sistemas de escritorio

Este kernel ha sido parcheado para mejorar la respuesta del sistema, haciendo énfasis en el sistema de escritorio. También se ha puesto especial cuidado en las características visuales del mismo, debido al público al que va destinado.

Para conseguir todo esto, se han utilizado los siguientes parches:

2.2.1. Parches de Con Kolivas

Estos parches tiene como fin mejorar la respuesta del sistema, sobre todo en sistemas de escritorio. La lista de parches, que se ha obtenido de la página destinada al kernel de Con Kolivas, se puede ver a continuación (si desea obtener más información sobre algún parche determinado, visite las página principal del mismo):

2.2.2. Boot Splash

Parche que provee un arranque gráfico durante la carga del núcleo Linux. Las características de este parche son:

  • Gráficos bonitos (JPEG)

  • Texto con antialias (TrueType)

  • Animaciones (MNG)

  • Barra de progreso

  • Muestra los mensajes de inicio encima o debajo del gráfico (modo “verbose” y “silent”.

  • Altamente configurable a nivel gráfico

Las siguientes imágenes muestran los dos modos de este parche: “verbose” y “silent”.

Modo verbose del parche bootsplash

Modo “verbose” del parche Boot Splash

Modo silent del parche bootsplash

Modo “silent” del parche Boot Splash

2.2.3. Linux Progress Patch

Este parche, muestra una imagen a pantalla completa en la cual se puede observar una barra de progreso de la carga del sistema, así como información adicional en forma de texto. LPP oculta los mensajes de inicio mostrados por el kernel, evitando confundir al usuario con este tipo de mensajes.

Un ejemplo de posibles imágenes, lo vemos a continuación:

Ejemplos de Linux Progress Patch

Ejemplos de Linux Progress Patch

2.3. Kernel para servidores

El kernel destinado a servidores no tiene ningún parche específico, por lo que le remito a la sección parches comunes.

2.4. Parches comunes

A parte de los parches ya mencionados anteriormente, ambos núcleos tiene los siguientes parches comunes:

2.4.1. Netfilter patch-o-matic-20030107

Publicado el 7 de enero de 2003, este parche contiene correcciones de fallos y nuevas características para netfilter (el nuevo subsistema de filtrado de paquetes incorporado a partir de la versión 2.4.* del núcleo Linux). Este parche está destinado a las versiones >= 2.4.18. Más información sobre el parche en la página de netfilter.

La lista que se muestra a continuación son los las correcciones aplicadas por este parche:

  • ipt_multiport-invfix.patch:

    fixes the multiport match, when it is used in combination with the invert (!) flag.

  • ipt_ULOG-mac_len-fix.patch:

    fixes the multiport match, when it is used in combination with the invert (!) flag.

  • 01_ip_conntrack_proto_tcp-lockfix.patch:

    Fix a locking bug in ip_conntrack_proto_tcp.

  • 02_newnat-udp-helper.patch:

    • make ip_nat_resize_packet() more generic (TCP and UDP)

    • add ip_nat_mangle_udp_packet() function similar to ip_nat_mangle_tcp_packet()

    This patch is necessarry for UDP nat helpers (like Amanda protocol)

  • 03_REJECT-fwspotting-phrack60-fix.patch:

    ipt_REJECT sends unreachables in response to UDP packets with invalid checksums, thereby exposing the existance of a firewall (as described in phrack #60, "broken crc firewall spotting" (or something like this), www.phrack.com).

    The patch makes ipt_REJECT verify UDP checksums if set.

  • 04_ftp-conntrack-msg-fix.patch:

    As 2.4.20 came out with newnat included, there were several reports on excessive logging of reused FTP expectations.

    A tcpdump (thanks to jpiszcz) proved that such log entries can easily be triggered when a client tries to download/list non-existent entries in active mode and then wants to download other files as well.

    The patch fixes the problem by separating the two possible cases: when the conntrack helper is registered with the reuse flag enabled, then the logging is converted to debugging (not enabled by default), otherwise the logging is kept to notify the admin on the violation of the givenprotocol.

  • 05_ECN-tcpchecksum-littleendian-fix.patch:

    The 2.4.20 kernel included the new iptables 'ECN' target, enabling a selective ECN disable mechanism. Unfortunately there was a bug in the incremental TCP checksum update, resulting in broken TCP checksums on little endian machines.

    This patch fixes the Bug.

2.4.2. Sistema de archivos XFS

Añade soporte para el sistema de archivos transaccional de SGI: XFS. Para más información, acuda a la página principal: http://linux-xfs.sgi.com/projects/xfs/

2.4.3. Grsecurity

Este parche aporta nuevas funcionalidades de seguridad al núcleo así como ACL's independientes del sistema de archivos utilizado. Un listado de las características de este parche se pueden ver aquí. Para más información visite la página principal del proyecto.

2.4.4. Linux System Hardware Monitoring

Parches que dan soporte para los sensores de temperatura repartidos por el ordenador. La página principal del proyecto posee más información.

2.4.5. Dispositivo loopback con soporte de encriptación

Parche necesario para añadir al dispositivo 'loopback' del núcleo Linux, el soporte de encriptación para el sistema de ficheros. El dispositivo 'loopback' modificado intercepta las peticioens de lectura/escritura del sistema de ficheros encriptado y los des/encripta.

El parche se puede obtener de http://www.kernel.org/pub/linux/kernel/people/hvr/testing/

2.4.6. GNU/Linux CryptoAPI

Parche que engloba el paquete 'CryptoAPI' y los paquetes que usan 'CryptoAPI', como son: 'cryptoloop' e 'IPsec'. El parche empleado se puede obtener de http://www.kernel.org/pub/linux/kernel/people/hvr/testing/

La versión de 'CryptoAPI' empleada en el núcleo de metadistros es la '0.1.0-pre4'.

Algunos usos de 'CryptoAPI' pueden ser:

  • Encriptación de todos los medios físicos de almacenamiento, como por ejemplo las distintas particiones, la memoria de intercambio (swap) y las imágenes de CD-ROMs.

  • Encriptación del tráfico de red, como por ejemplo IPsec u otro tipo de encriptación de red.

Para obtener más información sobre estos parches, pueden visitar la página principal del proyecto ' CryptoAPI'.

Si lo que desea ver es la implementación de IPsec utilizada, visite http://ringstrom.mine.nu/ipsec_tunnel/

[Note]Nota

España no posee limitaciones a la hora de distribuir y usar este parche, si pretende utilizar esta distribución en otros países, infórmese primero de las restricciones que pueda poseer su país. Para ello, visite http://www.kerneli.org/go/countryInfo.php

2.4.7. Linux FreeS/WAN

Implementación de IPSEC e IKE para Linux. El parche se ha obtenido del paquete 'kernel-patch-freeswan-ext' de la versión de desarrollo de Debian (Sid). Para obtener más información sobre el paquete 'deb', lea el README.Debian que acompaña al mismo.

La meta principal del proyecto FreeS/WAN es hacer Internet más seguro y privado. Para obtener más información sobre este proyecto y sus principales características y objetivos, visite http://www.freeswan.org/

2.4.8. Advanced Linux Sound Architecture - ALSA

ALSA pretende crear un sistema modular de sonido para Linux, a la vez que mantiene completa compatibiliadad con OSS/Lite. Alguna de sus características son:

  • Soporte eficiente para todo tipo de interfaces, desde tarjetas de sonido para el usuario doméstico hasta tarjetas profesionales con múltiples canales.

  • Controladores de sonido completamente modulares.

  • Diseño SMP e hilos seguros.

  • Librería en el espacio de usuario (alsa-lib), lo que simplifica la programación de aplicaciones y provee de un alto nivel de funcionalidad.

  • Soporte para el API OSS (provee compatibilidad binaria para la gran mayoría de los programas escritos para OSS).

Para más información, visite la página principal del proyecto: http://www.alsa-project.org/

2.4.9. Drivers de Nvidia

Controladores para las tarjetas gráficas con los chips: TNT, TNT2, TNT Ultra, la serie GeForce, nForce y Quadro. Para más información: http://www.nvidia.com/

2.4.10. Cloop

Loopback con compresión.

2.4.11. Extraversion

Añade, como versión extra del kernel, la palabra metadistros-servidor, si estamos tratando con este kernel, o la palabra metadistros-usuario en otro caso.

Otra de las características que añade este parche es la ampliación del tamaño de los datos pasados como parámetros al kernel en el arranque (de 256 a 512 caracteres). Este es necesario debido a la gran cantidad de parámetros que se le pueden pasar a una distribución como las que genera metadistros.