Gentoo Logo

Manual Gentoo Linux 2006.0 PPC

Contenido:

  • Instalando Gentoo
    En esta parte aprenderá cómo instalar Gentoo en su sistema.
    1. Acerca de la instalación Gentoo Linux
      Los usuarios que no estén familiarizados con Gentoo no siempre saben que Gentoo representa la posibilidad de escoger.
    2. Arrancando desde el CD Universal de instalación
      Utilizando nuestro CD de instalación Universal puede arrancar su sistema desde un entorno de ejecución que le permite instalar Gentoo.
    3. Configuración de su red
      Si desea instalar Gentoo a través de Internet, debe configurar la red.
    4. Preparando los discos
      Para poder instalar Gentoo, debe crear las particiones necesarias. Este capítulo describe cómo particionar un disco para uso futuro.
    5. Instalando los archivos de instalación Gentoo
      Las instalaciones de Gentoo funcionan a con los archivos llamados "stage". En este capítulo describimos cómo se extrae un archivo stage y configuramos Portage.
    6. Instalando el sistema base de Gentoo
      Independientemente del archivo stage que escoja, el resultado es que se dispone de un sistema base Gentoo. Este capítulo describe cómo llegar a esta etapa.
    7. Configurando el kernel
      El kernel Linux kernel es el núcleo de cada distribución de Linux. Este capítulo explica cómo configurarlo.
    8. Configurando su sistema
      Hará falta modificar unos archivos de configuración importantes. En este capítulo verá cuáles son estos archivos y cómo proceder.
    9. Instalando herramientas necesarias para el sistema
      Como hemos mencionado antes, Gentoo representa la posibilidad de personalizar. En este capítulo ayudaremos a escoger e instalar algunas herramientas importantes.
    10. Configurando el gestor de arranque
      Existen varios gestores de arranque . Cada uno tiene su propia configuración. Procederemos paso a paso al configurar el gestor de arranque según sus necesidades.
    11. Finalizando su instalación Gentoo
      Estamos casi listos. Crearemos uno (o más) usuarios para el sistema.
    12. ¿Y ahora qué?
      Ahora que tenemos un sistema Gentoo, ¿qué hacemos después?
  • Trabajando con Gentoo
    Aprenda cómo trabajar con Gentoo: instalación de software, configuración de variables, cambiando el comportamiento del sistema Portage, etc.
    1. Introducción al sistema Portage
      Este capítulo explica los pasos "sencillos" que un usuario necesita saber definitivamente para mantener el software en su sistema.
    2. Los parámetros USE
      Los parámetros USE son una parte importante de Gentoo. En este capítulo aprenderá a trabajar con ellos y comprender cómo estos parámetros USE interactúan con su sistema.
    3. Características de Portage
      Descubra las características de Portage, como el soporte para la compilación distribuida, ccache y aún más.
    4. Guiones de inicio
      Gentoo usa un formato especial para los guiones de inicio, que permite, entre otras cosas, decisiones derivadas de dependencias y guiones virtuales. Este capítulo explica estos aspectos y cómo operar con estos guiones..
    5. Variables de entorno
      Con Gentoo se pueden manejar fácilmente las variables de entorno del sistema. Este capítulo explica cómo hacerlo y describe las variables más comunes.
  • Trabajando con Portage
    "Trabajando con Portage" cubre en profundidad la herramienta de manejo de software de Gentoo, el sistema Portage.
    1. Archivos y directorios
      Ya que desea conocer Portage en profundidad, le interesará saber donde almacena sus archivos y datos.
    2. Configuración por medio de variables
      Portage es completamente configurable por medio de diversas variables en el archivo de configuración o a través de variables de entorno.
    3. Mezcla de ramales de software
      Gentoo suministra software en varias ramas, dependiendo de la estabilidad y soporte de cada arquitectura. "Mezcla de Ramales de Software" le informa cómo configurar estas ramas y cómo redefinir esta separación de manera individual para cada paquete.
    4. Herramientas adicionales de portage
      El sistema Portage viene con algunas herramientas adicionales que puede hacer que su experiencia con Gentoo sea aún mejor. Siga leyendo para averiguar cómo se usa dispatch-conf y otras herramientas.
    5. Divergiendo del árbol oficial
      "Divergiendo del árbol oficial" le dará algunos consejos y trucos para usar su propio árbol Portage, cómo sincronizar solamente las categorías que desee, cómo inyectar paquetes y mucho más.
    6. La aplicación de Ebuilds
      En "La aplicación de ebuilds" se informa los pasos que toma el sistema Portage al instalar software y cómo puede hacerlo usted mismo con la aplicación de ebuilds.
  • Configuración de Redes en Gentoo
    Una guía amplia para trabajar con redes en Gentoo.
    1. Iniciándonos
      Una guía para poner rápidamente a funcionar el interfaz de red en la mayoría de ambientes comunes.
    2. Configuración Avanzada
      Aquí aprendemos acerca de cómo funciona la configuración - hace falta conocer esta sección para aprender a trabajar con redes modularmente.
    3. Trabajo Modular con Redes
      Gentoo permite trabajar con redes de manera flexible - aquí les explicamos cómo escoger entre distintos clientes DHCP, configuración de "bonding", configuración de puentes, redes virtuales (VLANs) y más.
    4. Redes Inalámbricas
      Las redes inalámbricas no son tan sencillas. ¡Esperamos poder ponerlas a trabajar!
    5. Agregando Funcionalidad
      Si tiene espíritu de aventura, puede agregar sus propias funciones para trabajar con redes.
    6. Manejo de Redes
      Para usuarios de portátiles o usuarios que mueven sus computadores entre distintas redes.

A. Instalando Gentoo

1. Acerca de la instalación Gentoo Linux

1.a. Introducción

¡Bienvenido!

Primero de todo, bienvenido/a a Gentoo. Está a punto de entrar en un mundo de flexibilidad y rendimiento. Cuando instala Gentoo, esto queda claro varias veces, puede elegir cuánto se quiere compilar, cómo instalar Gentoo, que gestor de registros (logger) prefieres, etc.

Gentoo es una metadistribución moderna, rápida, con un diseño limpio y flexible. Gentoo está hecha alrededor del software libre y no oculta a sus usuarios qué hay bajo la alfombra. Portage, el sistema de mantenimiento de paquetes que usa Gentoo, está escrito en Python, por lo que el código fuente es fácil de visualizar y modificar. El sistema de paquetes de Gentoo se basa en el código fuente (aunque también soporta paquetes precompilados) y para configurar Gentoo se utilizan archivos de texto plano. En otras palabras, abierto a cualquiera.

Es muy importante que entienda que la capacidad de decisión es lo que hace que Gentoo funcione. Intentamos no forzarle a entrar en algo que no le guste. Si cree en algún momento que lo estamos haciendo, por favor, envíe su opinión.

¿Cómo está estructurada la instalación?

La instalación de Gentoo puede verse como un procedimiento de 10 pasos, los correspondientes a los capítulos 2 a 11. Cada paso da como resultado un cierto estado:

  • Tras el paso 1, nos encontraremos en un entorno funcional preparado para instalar Gentoo.
  • Después del paso 2, la conexión a Internet estará funcionando y lista para instalar Gentoo.
  • Tras el paso 3, sus discos duros estarán preparados para alojar la instalación de Gentoo.
  • Tras el paso 4, el entorno de instalación estará preparado y se encontrará dentro de un entorno chroot.
  • Después del paso 5, los paquetes principales, que son los mismos en toda instalación de Gentoo, estarán ya instalados.
  • Tras el paso 6, el kernel Linux estará compilado.
  • Después del paso 7, la mayoría de los archivos de configuración de tu sistema Gentoo estarán preparados.
  • Tras el paso 8, las herramientas de sistema necesarias (podrá elegirlas de una hermosa lista) están instaladas.
  • Al finalizar el paso 9, el gestor de arranque elegido estará instalado y configurado y se encontrará dentro de su nueva instalación de Gentoo.
  • Tras el paso 10, el entorno Gentoo Linux está listo para ser explorado.

Cuando se le pide una elección especial, intentamos explicar lo mejor posible los pros y contras. También propondremos una opción por defecto, identificada con "Por defecto: " en el título. Las otras posibilidades se titulan "Alternativa: ". Pero no crea que la opción por defecto es la que recomendamos. Es la que pensamos que la mayoría de usuarios van ha utilizar.

Algunas veces puedes seguir un paso opcional. Estos pasos son marcados como "Opcional: " y no son necesarios para instalar Gentoo. Sin embargo, algunos pasos opcionales dependen de una decisión tomada previamente. Le informaremos cuando se dé el caso, tanto cuando tome la decisión, como cuando se describa el paso opcional.

¿De qué opciones dispongo?

Puedes instalar Gentoo de diferentes formas. Puedes descargar e instalar uno de nuestros CDs de instalación, desde otra distribución, desde un CD de arranque (como Knoppix), desde un arranque por red, desde un disquete de arranque,etc.

Este documento cubre la instalación utilizando un CD de instalación Gentoo , un CD autoarrancable que contiene todo lo que necesita para conseguir instalar y ejecutar Gentoo Linux. Existen dos tipos de CDs de instalación, el CD de instalación (installCD) o el LiveCD instalador (Installer LiveCD). El CD de instalación contiene un entorno mínimo con los paquetes necesarios para instalar Gentoo Linux. El LiveCD es un entorno Gentoo completo que puede ser utilizado para múltiples tareas, siendo una de ellas instalar Gentoo Linux. El LiveCD no está disponible para todas las arquitecturas en este momento. Si su arquitectura no tiene LiveCD, este documento se referirá al empleo del CD de instalación universal (Universal InstallCD).

Si necesita ayuda para otros tipos de instalación, por favor lea nuestra Guía de Instalación Alternativa. También tenemos el documento Trucos y consejos de Instalación de Gentoo (en inglés) que podría resultar útil. Si nota que las instrucciones de instalación son demasiado detalladas, no dude en utilizar nuestra Referencia Rápida para Instalación la cual se encuentra entre nuestros recursos de documentación oficiales si su arquitectura tiene este documento disponible.

También existen otras posibilidades: puede compilar el sistema completo desde el principio o utilizar un entorno pre-compilado para tener el sistema listo en poco tiempo. Y, por supuesto, también hay soluciones intermedias con las cuales no se compila todo el sistema pero se empieza desde un sistema bastante completo.

¿Problemas?

Si tienes algún problema con la instalación (o con el documento de instalación), por favor, compruebe el error en desde nuestro Proyecto de ingeniería de versiones Gentoo , visite nuestro Sistema de seguimiento de errores y compruebe si el error es conocido. Si no lo es, por favor cree un informe sobre él para que podamos encargarnos de él. No tenga miedo de los desarrolladores que están asignados a sus informes, normalmente no se comen a nadie.

Acuérdese que, a pesar de que el documento que está leyendo es específico de la arquitectura, esté también contiene referencias a otras arquitecturas. Esto es así porque el manual de Gentoo tiene partes extensas de código que es común para todas las arquitecturas (para evitar duplicar esfuerzos y el desgaste de los recursos de desarrollo). Intentaremos reducir esto al mínimo para evitar la confusión.

Si no se está seguro si el problema es un problema del propio usuario (algún error que se ha cometido por no leer con cuidado la documentación) o un problema con el software (un error que hemos cometido por no probar la documentación/instalación con cuidado), tómese la libertad de entrar #gentoo-es en la red irc.freenode.net. Por supuesto, siempre será bienvenido independientemente del motivo :)

Si tiene cualquier pregunta concerniente a Gentoo, eche un vistazo a las Preguntas de Uso Frecuente, disponibles en la Documentación de Gentoo. También puede mirar los FAQs en nuestros foros. Si no encuentras la respuesta aquí, pregunta en #gentoo-es, nuestro canal IRC en irc.freenode.net. Sí, algunos de nosotros somos frikis que aún usan el IRC :-)

1.b. Instalación rápida utilizando la Plataforma de Referencia Gentoo

¿Qué es la Plataforma de Referencia de Gentoo?

La Plataforma de Referencia de Gentoo, de ahora en adelante la conoceremos por su abreviatura inglesa GRP (Gentoo Reference Platform), es una imagen de los paquetes precompilados que los usuarios (esto le implica a usted) pueden instalar durante la instalación de Gentoo para acelerar el proceso de instalación. La GRP contiene todos los paquetes necesarios para tener una instalación de Gentoo completamente funcional. No son todos los necesarios que hacen falta para tener una instalación base preparada en nada de tiempo, pero todas las compilaciones grandes (como puedan ser: xorg-x11, GNOME, OpenOffice, Mozilla, ...) están disponibles como paquetes GRP.

Sin embargo, estos paquetes precompilados no son mantenidos durante la toda la vida de la distribución de Gentoo. Son simplemente imágenes creadas con cada distribución de Gentoo y hacen posible tener un sistema funcional en poco tiempo. Puede actualizar el sistema en segundo plano mientras trabaja con su entorno Gentoo.

Cómo maneja Portage los Paquetes GRP

Su árbol de Portage - la colección de ebuilds (los archivos que contienen toda la información sobre un paquete, como es su descripción, página oficial, las URLs de código fuente, instrucciones de compilación, dependencias, etc.) - debe sincronizarse con los GRP: las versiones de los ebuilds disponibles y su correspondiente paquete GRP deben coincidir.

Por esta razón solamente se puede beneficiar de los paquetes GRP que Gentoo suministra mientras se está llevando a cabo la instalación actual. GRP no está disponible para los interesados en llevar a cabo una instalación utilizando las últimas versiones de los paquetes disponibles.

¿Puedo utilizar GRP?

No se proporcionan paquetes GRP para todas las arquitecturas. Esto no significa que GRP no esté soportado por el resto de arquitecturas, pero significa que no disponemos de todos los recursos necesarios para compilar y probar los paquetes GRP.

Por el momento proporcionamos paquetes GRP para las siguientes arquitecturas:

  • La arquitectura amd64 (amd64)
  • La arquitectura ppc (ppc32,ppc64)
  • La arquitectura sparc (sparc64)
  • La arquitectura x86 (athlon, athlon-xp, athlon-mp, pentium-pro, pentium2, pentium3, pentium4 and pentium-m) Nota: Los paquetes son para i686 y están disponibles en el LiveCD instalador.

Si su arquitectura (o subarquitectura) no está en la lista, no podrá utilizar la opción GRP durante la instalación.

Ahora que ha terminado la introducción, continuemos con Arrancando el CD de instalación Universal/LiveCD instalador.

2. Arrancando desde el CD Universal de instalación

2.a. Requisitos de hardware

Introducción

Antes de empezar, enumeraremos los requerimientos de hardware necesarios para instalar con éxito Gentoo en nuestra máquina.

Requisitos de hardware

Máquinas Apple NewWorld Microprocesadores Power/PowerPC (G3, G4, G5) como iMac, eMac, iBook PowerBook, Xserver, PowerMac
Máquinas Apple OldWorld Máquinas Apple con una revisión de OpenFirmware anterior a la 3, tal como los G3 Beige, PCI PowerMacs y PCI PowerBooks. Los clónicos Apple basados en PCI también deberían estar soportados
Pegasos de Genesi Pegasos I/II, Open Desktop Workstation
IBM RS/6000, iSeries, pSeries
Memoria Al menos 64 MB
Espacio en disco 1.5 GB (excluyendo la partición de intercambio)
Partición de intercambio Al menos 256 MB

Es una buena idea leer Preguntas Frecuentes y sus Respuestas Gentoo Linux/PowerPC para encontrar ayuda con algunas cuestiones comunes relativas a la instalación o si no estamos seguros con la máquina PowerPC frente a la que estamos sentados.

2.b. El CD de instalación Universal de Gentoo

Introducción

Gentoo Linux puede instalarse usando un fichero tarball de un stage3. Dicho tarball es un tipo de archivo comprimido que contiene un entorno mínimo a partir del cual se puede instalar exitosamente Gentoo Linux en el sistema.

Las instalaciones usando un fichero tarball de un stage1 o stage2 no están documentadas en el Manual de Gentoo. Por favor, vea al respecto Preguntas de uso frecuente en Gentoo Linux

El CD de instalación Universal de Gentoo

Un CD de instalación de Gentoo es un CD arrancable que contiene un entorno Gentoo auto-contenido. Permite arrancar Linux desde el CD. Durante el proceso de arranque se detecta el hardware y se cargan los controladores apropiados. Estos CDs son mantenidos por los desarrolladores de Gentoo.

Actualmente tenemos dos CDs de instalación disponibles:

  • El CD de instalación Universal contiene todo aquello que necesita para instalar Gentoo. Proporciona archivos stage3 para las arquitecturas comunes, código fuente para aplicaciones extra sobre las que necesita elegir, y por supuesto, las instrucciones de instalación para su arquitectura.
  • El CD de instalación Minimal solamente contiene un entorno mínimo que le permite arrancar y configurar la red para que pueda conectarse a Internet. No contiene ningún archivo adicional y no puede utilizarse para éste proceso de instalación (recordemos que estamos en las instrucciones para llevar a cabo la instalación sin conexión a la red).

Gentoo también proporciona un CD de paquetes (Package CD). Este no es un CD de instalación pero contiene una fuente importante de recursos que pueden ser utilizados durante la instalación de su sistema Gentoo. Contiene paquetes precompilados (conocidos como GRP) que permiten una rápida y fácil instalación de aplicaciones adicionales (como pueden ser (OpenOffice.org, KDE, GNOME, ...) inmediatamente después de la instalación de Gentoo y justo antes de actualizar su árbol Portage.

El empleo del CD de paquetes está recogido en este documento más adelante

2.c. Descargar, grabar y arrancar el CD Universal de instalación Gentoo

Descargar y grabar los CDs de instalación Gentoo

Podemos descargar el CD Universal de instalación Gentoo (y, si lo queremos, también el CD de Paquetes) desde uno de los espejos. Los CDs de instalación están ubicados en el directorio releases/ppc/2006.0/ppc32/installcd, y los CDs de Paquetes lo están en releases/ppc/2006.0/ppc32/packagecd.

Dentro de esos directorios se encuentran ficheros ISO. Éstos son imágenes de CDs completos que se pueden grabar en un CD-R.

Después de descargar el fichero, se puede verificar su integridad para ver si está corrompido o no:

  • Se puede verificar la suma de control MD5 del mismo y compararla con la proporcionada por Gentoo (por ejemplo con la herramienta md5sum de Linux/Unix o con md5sum en Windows). Cómo verificar las sumas de control MD5 en MacOS se describe en Preguntas de uso frecuente de Gentoo Linux/PowerPC.
  • Se puede verificar la firma criptográfica proporcionada. Pero en primer lugar se necesita obtener la clave pública utilizda por Gentoo (0x17072058).

Para recuperar la clave pública de Gentoo utilizando la aplicación GnuPG ejecutaremos el comando siguente:

Listado de Código 3.1: Obtener la clave pública

$ gpg --keyserver subkeys.pgp.net --recv-keys 0x17072058

Ahora verificaremos la firma:

Listado de Código 3.2: Verificar la firma criptográfica

$ gpg --verify <signature file> <downloaded iso>

Para grabar el o los ISO descargados, se debe seleccionar grabar/quemar sin formato. Cómo hacerlo depende del programa. Aquí hablaremos de cdrecord y K3B; se puede encontrar mayor información en las Preguntas de Uso Frecuentes sobre Gentoo.

  • Con cdrecord, basta escribir cdrecord dev=/dev/hdc <fichero ISO descargado> (hay que reemplazar /dev/hdc con la ruta correspondiente de la unidad CD-RW).
  • Con K3B, hay que seleccionar Herramientas > CD > Grabar Imagen ISO. Luego hay que buscar el archivo ISO dentro del área 'Imagen a Grabar'. Y por último presionar el botón Iniciar.

Por defecto: Arrancar el CD de instalación con Yaboot

En las máquinas NewWorld hay que colocar el CD de instalación en la unidad CD-ROM y reiniciar el sistema. Cuando el altavoz del sistema suene, basta pulsar la tecla 'C' mientras el CD se carga.

Después que el CD de instalación se haya cargado, aparece un mensaje de bienvenida y un punto indicativo de órdenes boot: en la parte inferior de la pantalla.

Se proporciona un núcleo genérico, ppc32. Este núcleo está creado con soporte para sistemas multiprocesador, pero arrancará igualmente bien en sistemas con un sólo procesador.

Se pueden ajustar algunas opciones del núcleo en este punto indicativo. La tabla siguiente lista algunas de las opciones de arranque disponibles que pueden añadirse:

Opción de arranque Descripción
vídeo Esta opción toma uno de los siguientes valores específicos según el fabricante: nvidiafb, radeonfb, rivafb, atyfb, aty128 or ofonly. A esta etiqueta se puede le puede añadir la resolución y valor de refresco empleados. Por ejemplo, video=radeonfb:1280x1024@75-32 que seleccionará el frame buffer de ATI Radeon con una resolución de 1280x1024, una tasa de refresco de 75 Hz y una profundidad de color de 32 bits. Si no estamos seguros de qué poner, y la opción por defecto no funciona video=ofonly seguramente funcionará.
nol3 Deshabilita el caché de nivel 3 en algunos PowerBooks (lo necesita al menos el 17")
dofirewire Activa el soporte para dispositivos IEEE1394 (FireWire), como discos duros externos.
dopcmcia Si se quiere utilizar dispositivos PCMCIA durante la instalación (como tarjetas de red PCMCIA) debe habilitarse esta opción

Para utilizar las opciones anteriores, escriba ppc32 en el punto indicativo de órdenes boot:, seguido de la opción deseada. En el ejemplo siguiente, forzaremos al núcleo para que use el framebuffer de OpenFirmware en lugar del controlador específico del dispositivo.

Listado de Código 3.3: Forzar el uso del framebuffer de OpenFirmware

boot: ppc32 video=ofonly

Si no necesitamos añadir más opciones, basta pulsar enter en este punto indicativo de órdenes, y se cargará un entorno Gentoo Linux completo desde el CD. Continuaremos con Y cuando hayamos arrancado ....

Alternativa: Iniciando el CD de instalación en un Pegasos

En el Pegasos basta insertar el CD y en el punto indicativo de órdenes del SmartFirmware teclear boot cd /boot/menu. Esto abrirá un pequeño menú de inicio donde se puede elegir algunos modos de vídeo preconfigurados. Si se necesitan opciones especiales de arranque, se pueden añadir a la línea de comando igual que lo visto anteriormente con Yaboot. Por ejemplo, boot cd /boot/pegasos video=radeonfb:1280x1024@75 mem=256M. Las opciones del núcleo por defecto (para el caso que algo salga mal y se necesite) están preconfiguradas a console=ttyS0,115200 console=tty0 init=/linuxrc looptype=squashfs loop=/image.squashfs udev nodevfs cdroot root=/dev/ram0.

Alternativa: Iniciando el CD de instalación con BootX

Si disponemos de un Mac OldWorld no podremos usar la parte arrancable del Live CD. La solución más sencilla es usar MacOS 9 o anterior para arrancar un entorno Linux con la ayuda de una herramienta llamada BootX.

En primer lugar, descargaremos BootX y desempaquetaremos el archivo. Hay que copiar el BootX Extension desde los ficheros descomprimidos en la Carpeta de Extensiones y la aplicación Panel de Control de BootX en Paneles de Control, ambos ubicados en la Carpeta del Sistema de MacOS. Luego, hay que crear una carpeta llamada "Linux Kernels" en nuestra Carpeta del Sistema y copiar el núcleo ppc32 del CD en ella. Finalmente, hay que copiar el fichero ppc32.igz ubicado en el directorio boot del CD de instalación en la Carpeta del Sistema de MacOS.

Para preparar BootX, debemos iniciar el Panel de control de la aplicación BootX. Primero seleccionaremos el diálogo de Options y marcaremos Use Specified RAM Disk y seleccionaremos el ppc32.igz de la Carpeta del Sistema. Volveremos atrás hasta la pantalla inicial y nos aseguraremos que el tamaño del disco RAM sea como mínimo 32000. Finalmente, indicaremos las opciones del núcleo indicadas a continuación:

Listado de Código 3.4: Opciones del kernel para BootX

cdroot root=/dev/ram0 init=linuxrc loop=image.squashfs looptype=squashfs console=tty0

Nota: Las opciones del núcleo de la anterior sección sobre yaboot también se pueden aplicar aquí. Se puede añadir cualquiera de dichas opciones a los argumentos del núcleo anteriores.

Verificaremos una vez más que la configuración es correcta, y entonces la guardaremos. Esto nos evitará trabajo posterior en caso de que no arranque o falte algo. Pulsaremos el botón Linux, en la parte superior de la ventana. Si todo va bien, deberíamos arrancar con el CD de instalación. Continuaremos con Y cuando hayamos arrancado ...

Y cuando hayamos arrancado ...

Tendremos el indicador del root ("#") en la consola actual y también podremos cambiar a otras consolas presionando Alt-F2, Alt-F3 y Alt-F4. Para regresar a la consola en la que empezamos presionaremos Alt-F1. Debido a la disposición del teclado, probablemente tendremos que pulsar Alt-fn-Fx en los equipos Apple.

Si estamos instalando Gentoo en un sistema con un teclado no norteamericano, usaremos loadkeys para cargar el teclado correspondiente al nuestro. Para listar los mapas de teclado disponibles, ejecutaremos ls /usr/share/keymaps/i386. En las máquinas NewWorld o Pegasos no usaremos los mapas de teclado ppc o mac, porque son para las OldWord basadas en ADB.

Listado de Código 3.5: Listado de los mapas de teclado disponibles

(PPC usa teclados x86 en muchos sistemas. Los mapas de teclado mac/ppc proporcionados en el CD de instalación son de configuración ADB y no funcionarán con el núcleo del CD de instalación)
# ls /usr/share/keymaps/i386

Ahora cargaremos el mapa del teclado a utilizar:

Listado de Código 3.6: Carga de un mapa de teclado

# loadkeys be-latin1

Ahora continuaremos con Configurando hardware adicional.

Configurando hardware adicional

Cuando arranca el CD de instalación, trata de detectar todos los dispositivos de hardware y cargar los módulos apropiados en el núcleo para soportar este hardware. En la gran mayoría de casos, hace muy buen trabajo. Sin embargo, en algunos casos puede que no cargue automáticamente los módulos del núcleo necesarios. Si falla la auto-detección PCI con algún hardware del sistema, trataremos de cargar el módulo apropiado manualmente.

En el siguiente ejemplo trataremos de cargar el módulo airport. Este módulo soporta sólo las antiguas tarjetas Airport (802.11b). Airport Extreme (802.11g) no está soportado en el CD de instalación debido a restricciones en la distribución del microcódigo.

Listado de Código 3.7: Cargar el módulo airport

# modprobe airport

En antiguos iMacs, ocasionalmente, la tarjeta de red no es detectada correctamente, y utilizan el controlador BMAC:

Listado de Código 3.8: Cargar el módulo bmac

# modprobe bmac

Opcional: Afinando el rendimiento del disco duro

Si pertenecemos al grupo de los usuarios avanzados, tal vez queramos afinar el desempeño del disco duro IDE usando hdparm. Con la opción -tT podemos probar el rendimiento del disco (lo ejecutaremos varias veces para tener una impresión más precisa):

Listado de Código 3.9: Verificar el rendimiento del disco duro

# hdparm -tT /dev/hda

Para afinarlo podemos seguir uno de los siguientes ejemplos (o haremos nuestros propios experimentos) que usan /dev/hda como disco (lo sustituiremos por el disco en cuestión):

Listado de Código 3.10: Afinar el desempeño del disco duro

Activar DMA:
# hdparm -d 1 /dev/hda
Activar DMA y las opciones de optimización seguras:
# hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda

Opcional: Cuentas de usuario

Si planeamos dar a otras personas acceso al entorno de instalación o si queremos platicar con alguien usando irssi sin privilegios de root (por razones de seguridad), hará falta crear las cuentas de usuario necesarias y cambiar la contraseña de root.

Para cambiar la contraseña de root, usaremos passwd:

Listado de Código 3.11: Cambiar la contraseña de root

# passwd
New password: (Escribir la nueva contraseña)
Re-enter password: (Escribirla de nuevo)

Para crear una cuenta de usuario, primero escribimos sus credenciales, y luego su contraseña. Se usan useradd y passwd para estas tareas. En el siguiente ejemplo, crearemos un usuario llamado "john".

Listado de Código 3.12: Crear una cuenta de usuario

# useradd -m -G users john
# passwd john
New password: (Escribir la contraseña de john)
Re-enter password: (Escribir de nuevo la contraseña de john)

Podemos cambiar nuestro identificador de usuario desde root para usar la del nuevo usuario mediante su:

Listado de Código 3.13: Cambiar de usuario

# su - john

Opcional: Ver la documentación mientras instalamos

Para ver el Manual Gentoo (ya sea desde el CD o en línea) durante la instalación, nos aseguraremos de haber creado una cuenta de usuario (ver Opcional: Cuentas de usuario). Luego pulsaremos Alt-F2 para ir a una nueva consola e ingresar en el sistema.

Si queremos ver la documentación incluida en el CD se puede ejecutar inmediatamente links o incluso links -g para disponer de un navegador gráfico en el framebuffer para leerla:

Listado de Código 3.14: Ver la documentación en el CD

# links /mnt/cdrom/docs/handbook/html/index.html

Sin embargo, es preferible usar el Manual Gentoo en línea ya que es más reciente que el Manual en el CD. También se puede ver usando links, pero sólo después de haber completado el capítulo Configurar la red (de otro modo no se podrá usar Internet para ver el documento):

Listado de Código 3.15: Ver la documentación en línea

# links http://www.gentoo.org/doc/es/handbook/handbook-ppc.xml

Podemos regresar a la consola original presionando Alt-F1.

Opcional: Iniciar el demonio SSH

Si queremos permitir a otros usuarios el acceso a nuestra máquina durante la instalación de Gentoo (quizá porque esos usuarios nos vayan a ayudar, o incluso lo hagan por nosotros), necesitararemos crear una cuenta de usuario para ellos e incluso darles la contraseña de root (sólo si confíamos totalmente en ellos).

Para arrancar el demonio SSH, ejecutaremos el siguiente comando:

Listado de Código 3.16: Iniciar el demonio SSH

# /etc/init.d/sshd start

Para poder usar sshd, primero necesitaremos configurar la red. Continuaremos en el capítulo Configurar la red.

3. Configuración de su red

3.a. ¿Necesita conexión a la red?

¿Quién puede hacerlo sin conexión?

Normalmente, no necesitará una conexión activa para instalar Gentoo utilizando el CD de instalación Universal o el LiveCD instalador. Sin embargo, hay algunas circunstancias en las que quizá quiera utilizar una conexión a Internet activa:

  • Los ficheros stage3 que se figuran en el CD de instalación Universal no coinciden con su arquitectura y necesita descargar el archivo stage3 adecuado.
  • El fichero stage3 que es generado por el LiveCD instalador no se corresponde con con su arquitectura y necesta descargar el stage3 adecuado.
  • Necesita instalar una aplicación de red específica que le permita conectarse a Internet la cual no está disponible en el CD de instalación Universal o el LiveCD instalador,pero está soportada por el CD de instalación (e.j. puede conectarse a Internet utilizando el CD de instalación pero las fuentes necesarias no están disponibles en el CD de instalación)
  • Quiere asistencia remota durante la instalación (utilizando SSH o a través de conversaciones por IRC)

¿Necesito conexión de red?

Para saber si el archivo stage3 de su arquitectura está disponible, y se encuentra utilizando un CD de instalación Universal, eche un vistazo a /mnt/cdrom/stages y compruebe si uno de los stages corresponde a su arquitectura. Si no es así, todavía puede optar por un stage3 de una arquitectura compatible con la suya.

El stage3 generado por el LiveCD instalador de x86 está optimizado para i686 o superior y utiliza NPTL. El stage3 generado por el LiveCD de amd64 está optimizado para el uso genérico en amd64 y emplea NPTL.

Si, por el contrario, quiere utilizar un fichero stage3 optimizado para su arquitectura y no está disponible, entonces necesitará una conexión de red funcionando para descargar el stage3 apropiado.

Entonces, si no necesita una conexión a la red, sáltese el resto de este capítulo y continué con Preparando los Discos. De lo contrario, continúe con las secciones de configuración de red más abajo.

3.b. Auto Detección de Red

¿Es posible que simplemente funcione?

Si su sistema está conectado a una red Ethernet con un servidor DHCP, es muy probable que la configuración de red se haya detectado automáticamente. En ese caso, debería ser capaz de trabajar con los con los comandos que hacen uso de la red y que están en el CD de instalación como ssh, scp, ping, irssi, wget y links, entre otros.

Si la red ya ha sido configurada el comando /sbin/ifconfig debería listar algunas interfaces de red además de lo, como eth0:

Listado de Código 2.1: /sbin/ifconfig para una tarjeta de red funcionando

# /sbin/ifconfig
(...)
eth0      Link encap:Ethernet  HWaddr 00:50:BA:8F:61:7A
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:1984 txqueuelen:100
          RX bytes:485691215 (463.1 Mb)  TX bytes:123951388 (118.2 Mb)
          Interrupt:11 Base address:0xe800

Opcional: Configurar Proxys

Si accede a Internet a través de un proxy, podría necesitar configurar la información del proxy durante la instalación. Es muy sencillo definir un proxy: tan solo necesita definir la variable que contiene la información del mismo.

En la mayoría de los casos, usted puede definir las variables usando simplemente el host del servidor. Por ejemplo, asumimos que el proxy se llama proxy.gentoo.org y el puerto es el 8080.

Listado de Código 2.2: Definir los servidores proxy

(Si el proxy filtra el tráfico HTTP)
# export http_proxy="http://proxy.gentoo.org:8080"
(Si el proxy filtra el tráfico FTP)
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
(Si el proxy filtra el tráfico RSYNC)
# export rsync_proxy="rsync://proxy.gentoo.org:8080"

Si su proxy requiere un nombre de usuario y una contraseña, debería usar la siguiente sintaxis para la variable:

Listado de Código 2.3: Añadir el usuario/contraseña a la variable del proxy

http://usuario:contraseña@servidor

Probando la red

Usted podría intentar hacer ping hacia el servidor DNS de su ISP, (que se encuentra en /etc/resolv.conf) y un sitio web a su elección, con la intención de asegurarse que sus paquetes llegan a la red, la resolución de nombres DNS esta funcionando correctamente, etc.

Listado de Código 2.4: Más testeo de red

# ping -c 3 www.yahoo.com

¿Está su conexión funcionando? En ese caso, puede saltarse el resto de esta sección y continuar con Preparando los discos. De lo contrario, siga leyendo.

3.c. Configuración Automática de Red

Si la red no funciona inmediatamente, algunos medios de instalación le permitirán usar net-setup (para redes estándar o sin cables), adsl-setup (para usuarios de ADSL) o pptp (para usuarios de PPTP solamente disponible para x86).

Si su medio de instalación no contiene ninguna de estas herramientas, continúe con Configuración Manual de la Red.

Por defecto: Usando net-setup

El sistema más simple de configurar una red, si no se consiguió hacerlo automáticamente, es ejecutar el script net-setup:

Listado de Código 3.1: Ejecutar el script net-setup

# net-setup eth0

net-setup le hará algunas preguntas sobre su entorno de red Cuando lo haya completado, debería disponer de una conexión de red funcionando. Pruebe su conexión de red como se especificó anteriormente Si los resultados son positivos, ¡felicidades! Ahora está listo para instalar Gentoo. Sáltese el resto de esta sección y continúe con Preparando los discos.

Si su conexión de red sigue sin funcionar, continúe con Configuración Manual de la Red.

Alternativa: Usando RP-PPPoE

Asumiendo que requiere PPPoE para conectar a Internet, el CD de instalación (en cualquier versión) ha sido pensado para facilitarle el trabajo incluyendo rp-pppoe. Use el script adsl-setup proporcionado para configurar su conexión. Se le pedirá el dispositivo de red que esta conectado a su módem adsl, su nombre de usuario y su contraseña, las IPs de sus servidores DNS y si requiere un firewall básico o no.

Listado de Código 3.2: Usar rp-pppoe

# adsl-setup
# adsl-start

Si algo va mal, asegúrese que ha tecleado correctamente su nombre de usuario y su contraseña mirando /etc/ppp/pap-secrets o /etc/ppp/chap-secrets y asegúrese que esta haciendo uso del dispositivo de red correcto. Si su dispositivo de red no existe, deberá cargar los módulos de red apropiados. En ese caso, debería continuar con Configuración manual de la Red dónde explicaremos como cargar los módulos de red apropiados.

Si todo funcionó, continúe con Preparando los Discos.

Alternativa: Usando PPTP

Nota: PPTP solamente está disponible para x86.

Si requiere soporte PPTP, puede usar pptpclient que se incluye en nuestros CDs de instalación. Pero primero debe asegurarse que su configuración es correcta. Edite /etc/ppp/pap-secrets o /etc/ppp/chap-secrets ya que contiene la combinación correcta de usuario/contraseña:

Listado de Código 3.3: Editar /etc/ppp/chap-secrets

# nano -w /etc/ppp/chap-secrets

Ajuste ahora /etc/ppp/options.pptp si es necesario:

Listado de Código 3.4: Editar /etc/ppp/options.pptp

# nano -w /etc/ppp/options.pptp

Cuando todo esté listo, tan sólo ejecute pptp (junto con las opciones que podría haber configurado en options.pptp) para conectar al servidor:

Listado de Código 3.5: Conectar con un servidor por línea telefónica

# pptp <server ip>

Ahora continúe con Preparando los discos.

3.d. Configuración Manual de la Red

Cargando los módulos de red apropiados

Cuando el CD de instalación arranca, intenta detectar todos sus dispositivos hardware y carga los módulos del kernel (controladores) apropiados para darles soporte. En la gran mayoría de los casos, hace un muy buen trabajo. No obstante, en algunos casos, puede no cargar automáticamente los módulos del kernel que necesita.

Si net-setup o adsl-setup fallaron, entonces puede asumir sin ningún riesgo que su tarjeta de red no se encontró en el acto. Esto significa que tendrá que cargar los módulos del kernel apropiados manualmente.

Para descubrir que módulos del kernel le proporcionamos para la red, use ls:

Listado de Código 4.1: Buscar los módulos apropiados

# ls /lib/modules/`uname -r`/kernel/drivers/net

Si encuentra un driver para su tarjeta de red, use modprobe para cargar el módulo del kernel:

Listado de Código 4.2: Usar modprobe para cargar el módulo kernel

(Como ejemplo, cargaremos el módulo pcnet32)
# modprobe pcnet32

Para confirmar si su tarjeta de red se detecta ahora, use ifconfig. Una red detectada debería desembocar en algo como esto:

Listado de Código 4.3: Comprobar la disponibilidad de su tarjeta de red, éxito

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr FE:FD:00:00:00:00
          BROADCAST NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Si de todas formas recibe el siguiente error, la tarjeta de red no está detectada:

Listado de Código 4.4: Comprobar si la disponibilidad de su tarjeta de red falló

# ifconfig eth0
eth0: error fetching interface information: Device not found

Si tiene múltiples tarjetas de red en su sistema éstas recibirán el nombre eth0, eth1, etc. Asegúrese que la tarjeta de red que quiere utilizar funciona correctamente y recuerde emplear el nombre correcto a lo largo de este documento. Asumiremos que la tarjeta de red eth0 va a ser la utilizada.

Asumiendo que usted dispone ahora de una tarjeta de red red detectada, puede reintentar net-setup o adsl-setup otra vez (que deberían funcionar ahora), pero para los duros de entre ustedes, les explicaremos como configurar su red manualmente.

Seleccione una de las siguientes secciones basándose en su configuración de red.

Usando DHCP

DHCP (Protocolo de Configuración Dinámica de Host) hace posible recibir automáticamente su información de red (Dirección IP, máscara de red, dirección de broadcast, pasarela, servidores de nombres etc.). Esto sólo funciona si usted dispone de un servidor DHCP en su red (o si su proveedor le ofrece servicio DHCP). Para conseguir que su interfaz de red reciba esta información automáticamente use dhcpcd:

Listado de Código 4.5: Usar dhcpcd

# dhcpcd eth0
Algunos administradores de red requieren que utilice el 
nombre del equipo y el dominio que proporciona el servidor DHCP.
Si es el caso, utilice 
# dhcpcd -HD eth0

Si esto funciona (pruebe hacer ping a algún servidor en Internet, como Google), entonces lo tiene todo configurado y listo para continuar. Sáltese el resto de esta sección y continúe con Preparando los Discos.

Preparando el Acceso Inalámbrico (Wireless)

Nota: Soporte para iwconfig solamente está disponible en los CDs de instalación de las arquitecturas x86, amd64 y ppc. Si el suyo no lo tiene, todavía puede conseguir que sus extensiones funcionen siguiendo las instrucciones del proyecto linux-wlan-ng.

Si está empleando una tarjeta inalámbrica (802.11), quizá necesite configurar sus opciones antes de ir más allá. Para revisar la configuración inalámbrica actual de su tarjeta, puede utilizar iwconfig. Ejecutando iwconfig debería mostrar algo como esto:

Listado de Código 4.6: Mostrar la configuración inalámbrica actual

# iwconfig eth0
eth0      IEEE 802.11-DS  ESSID:"GentooNode"
          Mode:Managed  Frequency:2.442GHz  Access Point: 00:09:5B:11:CC:F2
          Bit Rate:11Mb/s   Tx-Power=20 dBm   Sensitivity=0/65535
          Retry limit:16   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality:25/10  Signal level:-51 dBm  Noise level:-102 dBm
          Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
          excessive retries:237 Invalid misc:350282 Missed beacon:84

Nota: El nombre de dispositivo de algunas tarjetas de red inalámbricas puede ser wlan0 o ra0 en lugar de eth0. Ejecute iwconfig sin más parámetros para determinar cual es el nombre de dispositivo correcto.

La mayoría de usuarios, solamente tendrá que modificar dos configuraciones, el ESSID (Nombre de red inalámbrica) o la clave WEP. Si el ESSID y la dirección del Punto de Acceso mostradas son correctas y el Punto de Acceso y usted mismo no están utilizando WEP, su red inalámbrica está funcionando. Si necesita cambiar su ESSID, o añadir una clave WEP, puede utilizar los siguientes comandos:

Listado de Código 4.7: Cambiar ESSID y/o añadir una clave WEP

(Esto asigna el nombre de "GentooNode" a nuestra red)
# iwconfig eth0 essid GentooNode

(Esto asigna una clave WEP hexadecimal)
# iwconfig eth0 key 1234123412341234abcd

(Esto asigna una clave ASCII , añadiendo al principio "s:")
# iwconfig eth0 key s:some-password

Puede volver a comprobar la configuración inalámbrica utilizando iwconfig. Una vez que tenga la conexión funcionando, puede continuar configurando las opciones de red de nivel IP como se describe en la siguiente sección (Entendiendo la terminología de red) o utilizar la herramienta net-setup como hemos descrito anteriormente.

Entendiendo la terminología de red

Nota: Si conoce su dirección IP, dirección de broadcast, máscara de red y los servidores de nombres, entonces puede saltarse esta subsección y continuar con Usando ifconfig y route.

Si todo lo anterior falla, tendrá que configurar su red manualmente. No es demasiado complicado. Sin embargo, necesita familiarizarse con alguna terminología de red para ser capaz de configurar su red satisfactoriamente. Después de leer esto, conocerá que es una pasarela, para que sirve una máscara de red, como se forma una dirección de broadcast y porqué necesita servidores de nombres.

En una red los hosts están están identificados por su dirección IP (dirección del Protocolo de Internet). Tal dirección es una combinación de cuatro números entre 0 y 255. Bien, como mínimo así es como las percibimos. En realidad, tal dirección IP consiste de 32 bits (unos y ceros). Vamos a ver un ejemplo:

Listado de Código 4.8: Ejemplo de una dirección IP

IP Address (numbers):   192.168.0.2
IP Address (bits):      11000000 10101000 00000000 00000010
                        -------- -------- -------- --------
                           192      168       0        2

Cada dirección IP es única para ese host, tan lejos como redes accesibles estén a su disposición (por ejemplo, todos los hosts que usted es capaz de conectar, deben tener direcciones IP únicas). Para ser capaz de hacer la distinción entre hosts dentro de una red, y hosts fuera de una red, la dirección IP está dividida en dos partes: la parte de red y la parte de host.

La separación esta anotada en la máscara de red, una conjunto de unos seguidos de un conjunto de ceros. La parte de la IP que quedan enmascarados sobre los unos es la parte de red, la otra es la parte de host. Como es normal, la máscara de red, puede ser anotada como una dirección IP.

Listado de Código 4.9: Ejemplo de una separación red/host

IP-address:    192      168      0         2
            11000000 10101000 00000000 00000010
Netmask:    11111111 11111111 11111111 00000000
               255      255     255        0
           +--------------------------+--------+
                    Network              Host

En otras palabras, 192.168.0.14 es parte de nuestra red de ejemplo, pero 192.168.1.2 no lo es.

La dirección de broadcast es una dirección IP con la misma parte de red que su red, pero con solo unos como parte de host. Cada host en su red escucha esta dirección IP. Esto verdaderamente sirve para la transmisión de paquetes.

Listado de Código 4.10: Dirección de Broadcast


IP-address:    192      168      0         2
            11000000 10101000 00000000 00000010
Broadcast:  11000000 10101000 00000000 11111111
               192      168      0        255
           +--------------------------+--------+
                     Network             Host

Para ser capaz de navegar por Internet, debería conocer qué host comparte la conexión a Internet. Este host se llama la pasarela. Puesto que es un host estándar, tiene direcciones IP estándar (por ejemplo 192.168.0.1).

Anteriormente afirmamos que cada host tiene su propia dirección IP. Para ser capaz de alcanzar este host por un nombre (en vez de la dirección IP) necesitara un servicio que traduzca un nombre (como dev.gentoo.org) a una dirección IP (como 64.5.62.82). Tal servicio se le conoce como servicio de nombres. Para usar tal servicio, debe definir los servidores de nombres necesarios en /etc/resolv.conf.

En algunos casos, su pasarela también sirve como servidor de nombres. De otro modo, tendrá que introducir los servidores de nombres facilitados por su ISP.

Para resumir, necesitará la siguiente información antes de continuar:

Elemento de Red Ejemplo
Su dirección IP 192.168.0.2
Máscara de Red 255.255.255.0
Broadcast 192.168.0.255
Pasarela 192.168.0.1
Servidor(es) de nombres 195.130.130.5, 195.130.130.133

Usando ifconfig y route

Configurar su red consiste en tres pasos. Primero, nos asignamos una dirección IP usando ifconfig. Entonces configuraremos el ruteo hacia la pasarela usando route. Por último, acabaremos situando las IPs de los servidores de nombres en /etc/resolv.conf.

Para asignar una dirección IP, necesitara su dirección IP, la dirección de broadcast y la mascara de red. Entonces ejecute el siguiente comando, substituyendo ${IP_ADDR} con su dirección IP, ${BROADCAST} con su dirección de broadcast y ${NETMASK} con su máscara de red:

Listado de Código 4.11: Emplear ifconfig

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

Ahora configure la ruta usando route. Substituya ${GATEWAY} con la dirección IP de su pasarela:

Listado de Código 4.12: Emplear route

# route add default gw ${GATEWAY}

Ahora abra /etc/resolv.conf con su editor favorito (en nuestro ejemplo, usaremos nano):

Listado de Código 4.13: Crear /etc/resolv.conf

# nano -w /etc/resolv.conf

Ahora complete con su(s) servidor(es) de nombres usando la siguiente plantilla. Asegúrese que substituye ${NAMESERVER1} y ${NAMESERVER2} con las direcciones apropiadas de servidor de nombres:

Listado de Código 4.14: Plantilla /etc/resolv.conf

nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}

Eso es. Ahora compruebe su red haciendo ping a algún servidor de Internet (como Google). Si funciona, felicitaciones entonces. Ahora está listo para instalar Gentoo. Continúe con Preparando los Discos.

4. Preparando los discos

4.a. Introducción a los dispositivos de bloque

Dispositivos de bloque

Examinaremos de forma detallada los aspectos de Gentoo Linux así como Linux en general que tengan que ver con discos, sistemas de ficheros de Linux, particiones y dispositivos de bloque. Una vez estemos familiarizados con las entrañas de los discos y sistemas de ficheros, veremos el proceso de creación de particiones y sistemas de ficheros en una instalación Gentoo Linux.

Para empezar, explicaremos el término dispositivos de bloque. El dispositivo de bloque más común es el que representa la primera unidad IDE llamada /dev/hda en un sistema Linux. Si está instalando en un dispositivo SCSI, FireWire, USB o SATA, entonces el primer disco duro debería ser /dev/sda.

Los dispositivos de bloque mencionados anteriormente representan una interfaz abstracta del disco. Los programas de usuario pueden hacer uso de estas interfaces para interactuar con el disco sin importar el tipo de unidad que se trate: IDE, SCSI, o cualquier otra. El programa puede simplemente dirigirse al almacenamiento en el disco como a una serie de bloques de acceso aleatorio de 512-bytes situados de forma contigua.

Particiones

Aunque teóricamente es posible utilizar el disco duro completo para albergar la instalación Linux, esto casi nunca se hace. En su lugar, los discos se dividen en dispositivos de bloque más pequeños y manejables. En muchos sistemas se llaman particiones.

4.b. Diseño de un esquema de particionamiento

Esquema de particionamiento por defecto

Si no queremos diseñar un esquema de particionamiento específico para el sistema, podemos hacer uso del esquema utilizado en este manual:

Nota: Si está utilizando una máquina OldWorld, necesitará conservar MacOS disponible. Este esquema de aquí asume que MacOS está instalado en un disco separado.

Partición NewWorld Partición OldWorld Partición Pegasos Partición RS/6000 Sistema de ficheros Tamaño Descripción
/dev/hda1 /dev/hda1 (No aplicable) (No aplicable) (Mapa de particionamiento) 32k Apple_partition_map
/dev/hda2 (No necesario) (No aplicable) (No aplicable) (bootstrap) 800k Apple_Bootstrap
(No aplicable) (No aplicable) (No aplicable) /dev/sda1 (PReP Boot) 800k Tipo 0x41
(No aplicable) /dev/hda2 (Si se usa quik) /dev/hda1 (No aplicable) ext2 32MB Partición de arranque (boot)
/dev/hda3 /dev/hda2 (/dev/hda3 usando quik) /dev/hda2 /dev/sda2 (swap) 512M Partición de intercambio (swap), Tipo 0x82
/dev/hda4 /dev/hda3 (/dev/hda4 usando quik) /dev/hda3 /dev/sda3 ext3, xfs Resto del disco Partición raíz (root), Tipo 0x83

Nota: Puede haber algunas particiones llamadas: Apple_Driver63, Apple_Driver_ATA, Apple_FWDriver, Apple_Driver_IOKit, Apple_Patches. Si no estamos pensando en usar MacOS 9 podemos borrarlas, puesto que MacOS X y Linux no las necesitan. Para borrarlas se puede utilizar tanto parted o borrar el disco entero inicializando el mapa de particiones.

Aviso: parted es capaz de redimensionar particiones incluyendo HFS+. Desafortunadamente no es posible redimensionar sistemas de ficheros HFS+ con transacciones (journaling), por tanto nos aseguraremos de desactivar la transaccionalidad en Mac OS X antes de redimensionar. Recuerde que cualquier operación de redimensionamiento es peligrosa, ¡hágalo bajo su propia responsabilidad! ¡Hay que asegurarse siempre de tener una copia de seguridad de los datos antes de redimensionar!

Si queremos conocer el tamaño que debería tener una partición, o incluso cuantas particiones necesitamos, hay que continuar con la siguiente sección. En caso contrario, seguiremos con Por defecto: Uso de mac-fdisk (Apple) para particionar el disco o Alternativa: Uso de parted (IBM/Pegasos) para particionar el disco.

¿Cuántas y de qué tamaño?

El número de particiones que se necesitan depende mucho del entorno particular. Por ejemplo, si la máquina tiene muchos usuarios, lo más probable es que se quiera tener /home en una partición separada para facilitar las tareas de copia de respaldo y aumentar la seguridad. Si se está instalando Gentoo para funcionar como servidor de correo, deberemos tener /var sobre una partición separada ya que es allí dónde se almacena todo el correo. Asímismo, una buena elección del sistema de ficheros optimizará el rendimiento del equipo. Los servidores de juegos deben disponer de una partición /opt ya que la mayoría de juegos se instalan en ese directorio. Las razones para todas estas recomendaciones son similares a aquellas que hemos mencionado para el caso de /home: seguridad y salvaguarda de datos. Definitvamente querremos tener un gran /usr: no sólo contendrá la mayor parte de aplicaciones, también el árbol de Portage que por si mismo ocupa alrededor de 500 MB sin incluir las fuentes que igualmente se almacenan en él.

Como se puede ver, todo dependerá de lo que queramos conseguir. Tener particiones o volúmenes separados tiene las siguientes ventajas:

  • Elegimos el mejor sistema de ficheros para cada partición o volumen
  • El sistema en su totalidad no se quedará sin espacio si una herramienta o aplicación está escribiendo datos de forma continua en el volumen o partición
  • Si es el caso, el tiempo dedicado a las comprobaciones de integridad de sistemas de ficheros se reduce, ya que las comprobaciones pueden ser llevadas acabo en paralelo (sin embargo esta ventaja es mayor con múltiples discos que con múltiples particiones)
  • La seguridad puede ser mejorada montando algunas de las particiones en modo sólo lectura, nosuid (los bits setuid se ignoran), noexec (los bits de ejecución se ignoran), etc.

Sin embargo, tener múltiples particiones tiene una gran desventaja: si la configuración no es la adecuada, podemos acabar teniendo mucho espacio libre en una de las particiones y quedarnos sin espacio en otras. Además, existe un límite de 15 particiones para SCSI y SATA.

4.c. Por defecto: Uso de mac-fdisk (Apple) para particionar el disco

Ahora es el momento de crear las particiones con mac-fdisk:

Listado de Código 3.1: Inicio de mac-fdisk

# mac-fdisk /dev/hda

Primero borraremos las particiones que no nos sirven para dejar espacio a las particiones Linux. Usamos d en mac-fdisk para borrarla(s). Nos preguntará por el número de partición a borrar. Normalmente la primera partición de máquinas NewWorld (Apple_partition_map) no debe ser borrada.

Segundo, crearemos una partición Apple_Bootstrap usando b. Nos preguntará cuál es el bloque inicial. Introduciremos el número de la primera partición libre seguido de una p. En este caso sería 2p.

Nota: Esta partición no es una partición /boot. Linux no la utilizará para nada; no deberemos crear ningún sistema de ficheros en ella y no deberemos montarla nunca. Los usuarios de Apple no necesitan una partición extra para /boot.

Ahora crearemos una partición de intercambio presionando c. De nuevo, mac-fdisk preguntará cuál es el bloque en el que queremos que esta partición comience. Como anteriormente hemos usado 2 para crear la partición Apple_Bootstrap, ahora tendríamos que teclear 3p. Cuando nos pregunte por el tamaño, indicaremos 512M (o el tamaño que queramos, aunque se sigue recomendando 512MB) Cuando nos pida el nombre, introduciremos swap (obligatorio).

Para crear la partición raíz, teclearemos c, seguido de 4p para indicar el bloque en el que la partición debe comenzar. Cuando nos pregunte el tamaño volveremos a poner 4p. mac-fdisk interpretará esto como "Usa todo el espacio disponible". Y cuando nos pregunte el nombre, indicaremos root (obligatorio).

Para finalizar, escribiremos la estructura de particiones en el disco tecleando w y saldremos de mac-fdisk con q.

Nota: Para asegurarnos de que todo está correcto, deberíamos ejecutar mac-fdisk una vez más y comprobar que se muestran todas las particiones. Si no aparece ninguna de las particiones creadas o los cambios realizados, tendríamos que reinicializarlas pulsando "i" en mac-fdisk. Esto recreará el mapa de particiones borrándolas todas.

Ahora que las particiones ya están creadas continuaremos con Creación de los sistemas de ficheros.

4.d. Uso de parted (especialmente Pegasos) para particionar el disco

parted, por "Partition Editor", puede actualmente manejar las particiones HFS+ empleadas por MacOS y MacOS X. Con esta herramienta se pueden redimensionar éstas y así hacer espacio para las particiones Linux. Sin embargo, el ejemplo siguiente sólo describe el particionamiento para sistemas Pegasos.

Empecemos iniciando parted:

Listado de Código 4.1: Iniciar parted

# parted /dev/hda

Si el disco está sin particionar, ejecutaremos mklabel amiga para crear una nueva etiqueta para el disco.

En parted, podemos escribir print en cualquier momento para mostrar la tabla de particiones en memoria. Si por cualquier razón cambiamos de criterio o cometemos un error podemos pulsar Ctrl-c para salir de parted sin guardar ningún cambio.

Si en el Pegasos también queremos instalar MorphOS deberemos crear un sistema de ficheros affs1 llamado "BI0" (BI cero) al comienzo del disco. 32MB serán más que suficientes para almacenar el núcleo de MorphOS. Si disponemos de un Pegasos I o pretendemos usar reiserfs o xfs, también tendremos que almacenar el núcleo de Linux en dicha partición (Pegasos II sólo puede arrancar de una partición ext2/ext3 o affs1). Para crear la partición ejecutaremos mkpart primary affs1 START END donde START y END deben reemplazarse por un rango en megabytes (por ejemplo, 0 32 crea una partición de 32MB empezando en 0MB y acabando en 32MB).

Además necesitamos crear dos particiones para Linux, una como sistema de ficheros raíz para todos los programas, etc., y otra como partición de intercambio. Para crear el sistema de ficheros raíz debemos decidir primero que tipo vamos a utilizar. Las opciones disponibles son ext2, ext3, reiserfs y xfs. Si no sabemos qué elegir usaremos ext3. Ejecutando mkpart primary ext3 START END se crea una partición ext3. Nuevamente, hay que reemplazar START y END con las marcas de inicio y fin (en megabytes) de la partición.

Generalmente se recomienda crear una partición de intercambio con el doble de la RAM instalada en el ordenador. Probablemente será suficiente con una partición de intercambio más pequeña a no ser que queramos ejecutar bastantes aplicaciones al mismo tiempo (en cualquier caso, se recomienda un mínimo de 512MB). Para crear la partición de intercambio ejecutaremos mkpart primary linux-swap START END.

Anotaremos los números (minor numbers) de las particiones puesto que los necesitaremos durante el proceso de instalación. print permite mostrarlos. Accederemos a los dicos mediante /dev/hdaX donde X se reemplaza con el número de la partición.

Cuando esté todo listo en parted saldremos simplemente con quit.

4.e. Creación de los sistemas de ficheros

Introducción

Ahora que las particiones ya están creadas, es el momento de crear un sistema de ficheros en ellas. Si no nos importa el tipo de sistema de ficheros a utilizar podemos utilizar la elección por defecto propuesta en Creación de un sistema de ficheros en una partición. En caso contrario, a continuación se describen los sistemas de ficheros que podemos utilizar ...

¿Sistemas de ficheros?

Disponemos de varios sistemas de ficheros. ext2, ext3, ReiserFS y XFS se consideran estables en la arquitectura PPC.

ext2 es un sistema de ficheros Linux probado, pero no dispone de soporte para transacciones, lo que significa que las comprobaciones rutinarias al arrancar pueden tardar bastante tiempo. En la actualidad, hay muchas opciones alternativas, sistemas de ficheros de nueva generación con soporte para transacciones cuya integridad puede ser verificada con mayor rapidez, por lo que gozan de mayor popularidad. Los sistemas de ficheros transaccionales previenen retrasos durante el inicio del equipo, incluso cuando el sistema de ficheros está en un estado inconsistente.

ext3 es la versión transaccional de ext2, proporcionando soporte para una rápida recuperación además de otros modos mejorados de funcionamiento como registro completo y ordenado de datos. ext3 es un buen y fiable sistema de ficheros. Posee una opción adicional para indización basada en árboles B que proporciona un alto rendimiento en casi todas las situaciones. Podemos habilitar esta indización añadiendo -O dir_index al comando mke2fs. En resumen, ext3 es un excelente sistema de ficheros.

ReiserFS es un sistema de ficheros B*-tree (basado en árboles balanceados) que tiene un gran rendimiento y que sobrepasa con creces a ext2 y ext3 cuando se trata de trabajar con ficheros pequeños (archivos menores de 4KB), en ocasiones diez o quince veces mejor. ReiserFS es extremadamente escalable y soporta transaccionalidad. Desde la versión 2.4.18+, ReiserFS es sólido y estable para su uso en escenarios genéricos así como en casos extremos cuando es necesario trabajar por ejemplo con sistemas de ficheros grandes, utilizar múltiples ficheros pequeños o manejar archivos grandes y directorios con miles y miles de ficheros.

XFS es un sistema de ficheros transaccional que cuenta con un juego de características robustas y está optimizado para ser escalable. Sólo recomendamos el uso de este sistema de ficheros para aquellas plataformas Linux que dispongan de dispositivos de almacenamiento SCSI de alto rendimiento y/o almacenamientos de canal de fibra (en inglés, fiber channel) con sistema de alimentación ininterrumpida. Como XFS realiza un almacenamiento temporal agresivo de datos en tránsito en RAM, aquellas aplicaciones con defectos de diseño (aquéllas que no toman las precauciones necesarias durante la escritura de datos al disco, y hay bastantes) pueden perderlos en caso de que el sistema se apague de forma inesperada.

Creación del sistema de ficheros en una partición

Para crear un sistema de ficheros en una partición o volumen existen herramientas específicas para cada sistema de ficheros:

Sistema de Ficheros Comando de Creación
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs

Por ejemplo, para formatear la partición root (/dev/hda4 según el ejemplo) en formato ext3 (siguiendo el ejemplo) utilizaríamos:

Listado de Código 5.1: Creación de un sistema de ficheros en una partición

# mkfs.ext3 /dev/hda4

Ahora podríamos crear todos los sistemas de ficheros en las particiones o volúmenes lógicos recién creados.

Nota: En máquinas Pegasos II la partición que contiene el kernel debe ser ext2 o ext3. Los sistemas NewWorld pueden arrancar desde sistemas de ficheros ext2, ext3, XFS, ReiserFS e incluso HFS/HFS+. En las máquinas OldWorld que arranquen mediante BootX, el núcleo debe ser ubicado en una partición HFS, pero esto se completará al configurar el gestor de arranque.

Activando la partición de intercambio

mkswap es el comando usado para inicializar particiones de intercambio:

Listado de Código 5.2: Inicialización de una partición de intercambio

# mkswap /dev/hda3

Para activar la partición, se usa el comando swapon:

Listado de Código 5.3: Activación de una partición de intercambio

# swapon /dev/hda3

Ahora crearíamos y activaríamos la partición de intercambio.

4.f. Montaje

Ahora que las particiones están inicializadas y albergan sistemas de ficheros, es hora de montarlas. Utilizaremos el comando mount. No hay que olvidarse de crear los puntos de montaje necesarios para cada partición creada. Como ejemplo crearemos un punto de montaje y montaremos la partición de raíz en él:

Listado de Código 6.1: Montaje de particiones

# mkdir /mnt/gentoo
# mount /dev/hda4 /mnt/gentoo

Nota: Si queremos que /tmp resida en una partición diferente, hay que asegurarse de cambiar sus permisos después de haberla montado: chmod 1777 /mnt/gentoo/tmp. Lo mismo se aplicaría a /var/tmp.

También hay que montar el sistema de ficheros proc (la interfaz virtual del núcleo) en /proc. Pero primero necesitaremos situar nuestros ficheros en las particiones.

Ahora continuaremos con Instalación de los ficheros de instalación de Gentoo.

5. Instalando los archivos de instalación Gentoo

5.a. Instalando el Stage comprimido (tarball)

Ajustando la Fecha/Hora correcta

Antes de continuar debes revisar la fecha y la hora y actualizarlos. ¡Un reloj mal configurado puede traer resultados extraños a futuro!

Para comprobar la fecha/hora actual, ejecute el comando date:

Listado de Código 1.1: Verificar la fecha/hora

# date
Fri Mar 29 16:21:18 UTC 2005

Si la fecha/hora está equivocada, actualícela con el comando date MMDDhhmmAAAA, con la siguiente sintaxis (Mes, Día, hora, minuto, siglo (C) y Año). En esta fase se debería utilizar la hora UTC. Podremos definir la zona horaria más adelante. Por ejemplo, para colocar la fecha y hora a las 16:21 horas del 29 de Marzo del 2005:

Listado de Código 1.2: Ajustar la fecha/hora UTC

# date 032916212005

Localizando el archivo Stage3

Si ha configurado su red porque necesita descargar un archivo stage3 correspondiente a su arquitectura, continué con Alternativa: utilizando un stage3 procedente de Internet. De lo contrario lea Por defecto: utilizar un stage3 del CD de instalación.

5.b. Por defecto: utilizar un stage3 del LiveCD

Extrayendo el Stage comprimido (tarball)

Los stages del CD se encuentran en el directorio /mnt/cdrom/stages. Para ver una lista completa de los stages, utilice ls:

Listado de Código 2.1: Comprobar los stages disponibles

# ls /mnt/cdrom/stages

Si el sistema le devuelve un error, quizá necesite montar el CD-ROM:

Listado de Código 2.2: Montar el CD-ROM

# ls /mnt/cdrom/stages
ls: /mnt/cdrom/stages: No such file or directory
# mount /dev/cdroms/cdrom0 /mnt/cdrom
# ls /mnt/cdrom/stages

Ahora sitúese en el punto de montaje de Gentoo (normalmente i /mnt/gentoo):

Listado de Código 2.3: Cambiar de directorio a /mnt/gentoo

# cd /mnt/gentoo

Ahora vamos a descomprimir el stage que haya elegido. Esto lo haremos con la herramienta GNU tar. ¡Asegúrese de usar las mismas opciones xvjpf!. La x se usa para Desempaquetar, la v para ver que pasa durante el proceso de extracción (Ok, sí, es opcional), la j para Descomprimir con bzip2, la p para Preservar los permisos y el f para decir que extraemos un archivo, no la entrada estándar. En el siguiente ejemplo, descomprimimos el stage stage3-<subarch>-2006.0.tar.bz2. Asegúrese de sustituir el nombre del tarball por su propio stage.

Listado de Código 2.4: Descomprimir el stage

# tar xvjpf /mnt/cdrom/stages/stage3-<subarch>-2006.0.tar.bz2

Ahora que el stage está instalado, continué con Instalando Portage.

5.c. Alternativa: utilizando utilizando un stage procedente de Internet

Descargando el stage

Vaya al punto de montaje de Gentoo en donde haya montado los sistemas de archivo (probablemente /mnt/gentoo):

Listado de Código 3.1: Ir al punto de montaje de Gentoo

# cd /mnt/gentoo

Dependiendo del medio de instalación, tendremos un par de herramientas disponibles para descargar el stage. Si disponemos de links, podremos navegar por la lista de servidores réplica de Gentoo y escoger el más cercano a nosotros.

Si no tiene links, debería disponer de lynks. Si necesita pasar a través de un proxy, exporte las variables http_proxy y ftp_proxy:

Listado de Código 3.2: Configurar la información del proxy para lynx

# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"

A partir de ahora asumiremos que tiene links a su disposición.

Luego entre en el directorio releases/ seguido de su arquitectura (por ejemplo x86/ y la versión de Gentoo (2006.0/) para finalizar con el directorio de los stages stages/. Allí deberían aparecer todos los archivos de stage disponibles para su arquitectura. Seleccione uno y presione D para descargarlo. Cuando se haya descargado, presione Q para cerrar el navegador.

Listado de Código 3.3: Navegar por la lista de servidores réplica con links

# links http://www.gentoo.org/main/en/mirrors.xml

(Si necesita soporte para proxy con links:)
# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml

Conviene asegurarse de que ha descargado un archivo stage3 - las instalaciones utilizando un stage1 o stage2 no reciben soporte.

Si quiere comprobar la integridad del tarball de stage que ha descargado, utilice md5sum y compare la salida con la suma de comprobación MD5 que proporciona el servidor réplica. Por ejemplo, para comprobar la validez del tarball de stage de x86:

Listado de Código 3.4: Ejemplo de comprobación de integridad del tarball de stage

# md5sum -c stage3-x86-2006.0.tar.bz2.DIGESTS
stage3-x86-2006.0.tar.bz2: OK

Extraer el Stage comprimido

Ahora desempaquetamos el stage descargado en sistema. Usaremos el tar de GNU para dicha labor y este es el método más fácil.

Listado de Código 3.5: Descomprimir el Stage

# tar xvjpf stage3-*.tar.bz2

Asegúrese de usar las mismas opciones xvjpf). La x se usa para Desempaquetar, la v para ver que pasa durante el proceso de extracción (Ok, sí, es opcional), el j para Descomprimir con bzip2, el p para Preservar los permisos y el f para decir que extraemos un archivo, no la entrada estándar.

Ahora que el stage está instalado sigamos con Instalando Portage.

5.d. Instalando Portage

Instalando una imagen de Portage

Ahora tiene que instalar una imagen de Portage, es un conjunto de archivos que informan a Portage sobre los programas que puede instalar, que perfiles están disponibles, etc.

Descomprimiendo la imagen del CD de instalación

Para instalar la imagen, eche un vistazo a /mnt/cdrom/snapshots/ para comprobar que imagen está disponible:

Listado de Código 4.1: Comprobar el contenido de /mnt/cdrom/snapshots

# ls /mnt/cdrom/snapshots

Ahora extraeremos la imagen siguiendo el siguiente método. De nuevo, asegúrese de usar las opciones correctas para tar. También, la -C que es mayúscula C, no c. En el siguiente ejemplo usaremos portage-<date>.tar.bz2 como nombre de la imagen. Asegúrese de sustituirlo por el nombre de la imagen que tiene en su CD de instalación.

Listado de Código 4.2: Extraer la imagen de Portage

# tar -xvjf /mnt/cdrom/snapshots/portage-<date>.tar.bz2 -C /mnt/gentoo/usr

Copiando los archivos de código fuente

También necesita copiar todo el código fuente desde el CD Universal de instalación.

Listado de Código 4.3: Copiar el código fuente

# mkdir /mnt/gentoo/usr/portage/distfiles
# cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/

5.e. Configurando las opciones de compilación

Introducción

Para optimizar Gentoo, tendrás que ajustar un par de variables que afectarán el comportamiento de Portage. Todas estas variables se pueden fijar como variables de entorno (usando export) pero eso no es permanente. Para mantener tu configuración, Portage dispone de /etc/make.conf, un fichero de configuración para Portage. Este es el fichero que editaremos ahora.

Nota: Una lista comentada de todas las posibles variables puede encontrarse en /mnt/gentoo/etc/make.conf.example. Para una instalación de Gentoo correcta lo único que necesita es configurar las variables que se mencionan en las siguientes líneas.

Usa tu editor favorito (en esta guía nosotros usaremos nano. Así que empezamos con la modificación de las variables.

Listado de Código 5.1: Abrir /etc/make.conf

# nano -w /mnt/gentoo/etc/make.conf

Como probablemente te darás cuenta, el fichero make.conf está estructurado de una manera genérica: Las líneas comentadas empiezan con "#", otras líneas definen variables usando la sintaxis VARIABLE="contenido". Discutiremos muchas de esas variables más adelante.

Aviso: No haga ninguna modificación en la variable USE si va a ejecutar un instalación stage3 con GRP. Puede modificar la variable USE después de tener instalados los paquetes que desee.¡Los Gremlins serán avisados para asaltar su sistema si ignora este aviso!.

CHOST

La variable CHOST declara el objetivo de compilación en su sistema. Esta variable ya debería estar configurada correctamente. No la edite ya que puede romper el sistema. Si la variable CHOST no le parece correcta, entonces quizá este utilizando un archivo stage3 incorrecto.

CFLAGS y CXXFLAGS

Las variables CFLAGS y CXXFLAGS, definen los parámetros de optimización para el compilador de C y C++ de gcc respectivamente. Aunque generalmente se definen aquí, tendrás el máximo rendimiento si optimizas estos parámetros para cada programa por separado. La razón es que cada programa es diferente.

En el fichero make.conf deberás definir los parámetros de optimización que pienses que vayan a hacer tu sistema el mejor en todas las situaciones. No coloques parámetros experimentales en esta variable; un nivel demasiado alto de optimización puede hacer que los programas se comporten mal (cuelgues, o incluso peor, funcionamientos erróneos).

No explicaremos todas las opciones posibles para la optimización. Pero si quieres conocerlas todas, léete El manual en línea de GNU o la página información de gcc (info gcc -- Solo en un sistema Linux funcional). El fichero make.conf también contiene una gran cantidad de ejemplos e información; no olvides leerlo también.

La primera variable es el parámetro -march=, que especifica el nombre de la arquitectura seleccionada. Las posibles opciones están descritas en el fichero make.conf (como comentarios). Por ejemplo, para la arquitectura x86 Athlon XP:

Listado de Código 5.2: El parámetro march de GCC

# Los usuarios de AMD64 que quieran utilizar un sistema nativo de 64 bits deben utilizar -march=k8
# Los usuarios de EM64T deberían utilizar -march=nocona
-march=athlon-xp

Seguida de esta, está el parámetro -O, que especifica la clase optimización de gcc. Las clases posibles son s (para tamaño optimizado), 0 (para no optimizar), 1, 2 or 3 para la optimización de velocidad (cada clase tiene los mismos parámetros que la primera, más algunos extras). Por ejemplo para una optimización de clase 2:

Listado de Código 5.3: El parámetro O de GCC

-O2

Otros parámetros de optimización bastante populares son los -pipe (usando tuberías en lugar de ficheros temporales para la comunicación entre las diferentes etapas de compilación).

Cuidado con utilizar -fomit-frame-pointer (el cual no mantiene el puntero de macro en un registro para las funciones que no lo necesiten) pues podría tener graves repercusiones en la depuración de errores en aplicaciones.

Cuando definimos las variables CFLAGS y CXXFLAGS, deberías combinar algunos parámetros de optimización, como en el ejemplo siguiente:

Listado de Código 5.4: Definir las variables CFLAGS y CXXFLAGS

CFLAGS="-march=athlon-xp -pipe -O2"    # Los usuarios de AMD64 utilizan march=k8
                                       # Los usuarios de EM64T deberían utilizar -march=nocona
CXXFLAGS="${CFLAGS}"                   # Usa las mismas opciones para las dos variables

MAKEOPTS

Con la variable MAKEOPTS definimos cuantas compilaciones paralelas pueden hacerse al mismo tiempo cuando instalamos un paquete. El número sugerido es la cantidad de CPUs de tu sistema, más uno

Listado de Código 5.5: MAKEOPTS para un sistema normal de 1-CPU

MAKEOPTS="-j2"

¡Preparados, listos, ya!

Actualiza tu /mnt/gentoo/etc/make.conf con tus propios parámetros y guarda los cambios. Ahora estamos listos para continuar con Instalando el sistema base de Gentoo.

6. Instalando el sistema base de Gentoo

6.a. Chrooting

Montar el sistema de archivos /proc y /dev

Monte el sistema de ficheros /proc en /mnt/gentoo/proc para permitir a la instalación utilizar la información proporcionada por el kernel incluso dentro del entorno chroot y, posteriormente, montar (de forma transparente) el sistema de archivos /dev.

Listado de Código 1.1: Montar /proc

# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

Opcional: Copiar la información DNS

Si ha configurado su red para descargar posteriormente el stage correspondiente desde Internet, necesita copiar la información DNS guardada en /etc/resolv.conf a /mnt/gentoo/etc/resolv.conf. Este archivo contiene los nombres de los servidores que su sistema utiliza para resolver los nombres y las direcciones IP.

Listado de Código 1.2: Copiar los DNS

# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Entrando al nuevo entorno

Ahora que todas las particiones están inicializadas y el sistema base instalado, es hora de entrar en nuestro nuevo entorno de instalación chrooting. Esto significa pasar desde el actual entorno de instalación (LiveCD o otro medio de instalación) hacia tu entorno de instalación (o sea, las particiones inicializadas).

El cambio de raíz se hace en tres pasos. Primero cambiamos la raíz desde / (en el medio de instalación) a /mnt/gentoo (en tus particiones) usando chroot. Después crearemos un nuevo entorno usando env-update, el cual, en esencia crea las variables de entorno. Finalmente, cargamos esas variables en memoria tecleando source.

Listado de Código 1.3: Entrando al nuevo entorno

# chroot /mnt/gentoo /bin/bash
# env-update
 * Caching service dependencies...
# source /etc/profile
# export PS1="(chroot) $PS1"

¡Enhorabuena! Estás dentro de tu nuevo entorno Gentoo Linux. Por supuesto aún no hemos terminado, todavía quedan unas cuantas secciones ;)

Crear la caché de Portage

Ya tiene instalado el árbol de Portage, pero debería crear ahora la caché de Portage para acelerar futuras instalaciones. emerge --metadata se encarga de hacer esto por nosotros.

Listado de Código 1.4: Crear la caché de Portage

# emerge --metadata

6.b. Configurando la variable USE

¿Qué es la variable USE?

USE es una de las variables más importantes que Gentoo proporciona a sus usuarios. Muchos programas pueden ser compilados con o sin soporte opcional para ciertas cosas. Por ejemplo, algunos programas pueden ser compilados con soporte gtk,o con soporte qt. Otros programas pueden ser compilados con o sin soporte SSL. Algunos programas pueden ser compilados con soporte framebuffer en lugar de soporte X11 (servidor X).

Muchas distribuciones compilan sus paquetes con el mayor soporte posible, aumentando el tamaño de los programas y su tiempo de carga, sin mencionar una cantidad enorme de dependencias. Con Gentoo puedes definir con que opciones debe ser compilado un paquete. Ahí es donde actúa la variable USE.

En la variable USE definimos palabras clave que son mapeadas a opciones de compilación. Por ejemplo ssl compilará los programas que lo requieran con soporte ssl.-X quitara el soporte para el servidor X (nótese el signo menos delante). gnome gtk -kde -qt compilará tus programas con soporte para gnome y gtk, pero sin soporte para kde (y qt), haciendo tu sistema completamente compatible con GNOME.

Modificando la variable USE

Aviso: No haga ninguna modificación en la variable USE si va a ejecutar un instalación stage3 con GRP. Puede modificar la variable USE después de tener instalados los paquetes que desee.¡Los Gremlins serán avisados para asaltar su sistema si ignora este aviso!.

Los valores por defecto de la variable USE se encuentran en make.defaults, archivos de su perfil. Encontrará los archivos make.defaults en el directorio al cual apunte /etc/make.profile y todos sus directorios padres. El valor predeterminado de configuración de la variable USE es la suma de todas las configuraciones de USE en todos los archivos make.defaults. Lo que modifique en /etc/make.conf se calcula contra estos valores. Si pone algún valor en su USE, es añadido a la lista por defecto. Si elimina algo en su variable USE, poniéndole un signo menos delante, es eliminado de la lista por defecto (si estaba en ella claro). Nunca cambie nada en /etc/make.profile ya que se sobreescribirá cuando actualice Portage!

Puede encontrar una descripción más amplia sobre la variable USE en la segunda parte del Manual de Gentoo Capítulo 1: Variables USE. Encontrará una descripción más extensa sobre las opciones de la variable USE en su sistema, en /usr/portage/profiles/use.desc.

Listado de Código 2.1: Ver las opciones disponibles

# less /usr/portage/profiles/use.desc
(Puede desplazarse arriba y abajo utilizando sus teclas de flechas y salir pulsando 'q')

Como ejemplo, te mostramos unas opciones USE para un sistema basado en KDE con DVD, ALSA y soporte para grabar CD's.

Listado de Código 2.2: Abrir /etc/make.conf

# nano -w /etc/make.conf

Listado de Código 2.3: Configurar la variable USE

USE="-gtk -gnome qt kde dvd alsa cdr"

7. Configurando el kernel

7.a. Zona horaria

Primero necesita seleccionar su zona horaria para que su sistema sepa dónde está ubicado. Busque su zona horaria en /usr/share/zoneinfo, luego cópiela en /etc/localtime . Por favor, evite las zonas horarias /usr/share/zoneinfo/Etc/GMT* ya que los nombres no indican las zonas esperadas. Por ejemplo, GMT-8 es realmente GMT+8.

Listado de Código 1.1: Configurar la zona horaria

# ls /usr/share/zoneinfo
(Suponiendo que queremos usar GMT)
# cp /usr/share/zoneinfo/GMT /etc/localtime

7.b. Instalar las fuentes

Elegir un núcleo

El centro alrededor de la cual se construyen todas las distribuciones es el núcleo (kernel) de Linux. Es la capa entre los programas de usuario y el hardware del sistema. Gentoo proporciona a sus usuarios varias fuentes de kernel. Una lista completa está disponible en la Guía Gentoo del Kernel.

Sugerimos utilizar en PPC tanto las vanilla-sources como las gentoo-sources, ambos núcleos 2.6. El último está disponible para una instalación sin red. Vamos, pues, a continuar con la instalación o emerge de las fuentes del kernel. La USE="-doc" es necesaria en este momento para prevenir la instalación de xorg-x11 u otras dependencias. USE="symlink" no es necesario en una instalación nueva, pero nos asegura una correcta creación del enlace /usr/src/linux.

Listado de Código 2.1: Instalar fuentes del kernel

# USE="-doc symlink" emerge gentoo-sources

En /usr/src se encuentra un enlace simbólico llamado linux apuntando a las fuentes del núcleo actual. En nuestro caso, el enlace a las fuentes del núcleo instaladas apunta a gentoo-sources-2.6.15. Tenga en cuenta que su versión puede ser diferente.

Listado de Código 2.2: Ver el enlace a las fuentes del kernel

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           22  Mar 18 16:23 /usr/src/linux -> 
linux-2.6.15

Ahora vamos a configurar y compilar las fuentes del núcleo. Puede usarse genkernel para ello, ya que crea un núcleo genérico como el usado por el CD de instalación. Sin embardo explicamos primero la configuración "manual" porque es la mejor manera de optimizar nuestro entorno.

Para configurar manualmente el núcleo, podemos seguir en Predeterminado: Configuración manual. En cambio,para usar genkernel podemos leer Alternativa: Usar genkernel.

7.c. Predeterminado: Configuración manual

Introducción

Configurar manualmente un núcleo se ve frecuentemente como el procedimiento más difícil al que tiene que enfrentarse un usuario de Linux. Nada mas lejos de la realidad: después de configurar un par de núcleos no recordaremos si fue difícil la primera vez ;)

Sin embargo, una cosa es cierta: debemos conocer nuestro sistema para configurar el núcleo manualmente. Mucha de la información necesaria se puede recolectar instalando pciutils (emerge pciutils) que contiene lscpi. Ahora podremos utilizar lscpi en el entorno del chroot. Se puede ignorar sin riesgo cualquier aviso relativo a pcilib (como "pcilib: cannot open /sys/bus/pci/devices"). Alternativamente, se puede ejecutar lscpi desde un entorno no chroot. Los resultados serían los mismos. También se puede ejecutar lsmod para ver que módulos del núcleo usa el CD de instalación (puede proporcionar buenos consejos sobre qué habilitar). Otro lugar para buscar posibles pistas sobre que componentes habilitar es comprobar los mensajes del kernel que se obtienen durante el proceso de inicio. Ejecute dmesg para ver los mensajes del kernel.

Ahora hay que ir al directorio de las fuentes, para configurar el núcleo. Se recomienda incluir inicialmente la configuración por defecto con make defconfig. Una vez que la configuración por defecto haya sido incluida, ejecutaremos make menuconfig que lanzará un menú de configuración basado en ncurses.

Listado de Código 3.1: Invocar a menuconfig

# cd /usr/src/linux
# make defconfig
# make menuconfig

Nos darán la bienvenida varias secciones de configuración. Listaremos primero algunas opciones que se deben activar (de otro modo Gentoo no funcionará, o no funcionará adecuadamente sin configuración adicional).

Activar opciones necesarias

Primero que nada, activaremos el uso de código y dispositivos en desarrollo y experimentales. Es necesario, porque algunos dispositivos o código importante no aparecerían:

Listado de Código 3.2: Seleccionar código/dispositivo expremiental

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers
General setup --->
  [*] Support for hot-pluggable devices

Ahora, en File Systems seleccionaremos el soporte para los sistemas de ficheros empleados. No deben compilarse como módulos, en cuyo caso el sistema Gentoo no sería capaz de montar las particiones. También debe seleccionarse el /proc file system y Virtual memory.

Listado de Código 3.3: Selecionar los sistemas de ficheros necesarios

File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)
    
(Deben seleccionarse una o más de las siguientes opciones según se necesite)
  <*> Reiserfs support
  <*> Ext3 journalling file system support  
  <*> Second extended fs support
  <*> XFS filesystem support

Si usamos PPPoE o un módem para conectar a Internet, necesitaremos las siguientes opciones del núcleo:

Listado de Código 3.4: Seleccionar los controladores necesarios para PPPoE

Device Drivers --->
  Networking support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

Las dos opciones de compresión no molestan pero no son necesarias. La opciónPPP over Ethernet tampoco es obligatoria, tal vez solo sea usada por rp-pppoe cuando se configure PPPoE en modo núcleo.

Si es necesario, no hay que olvidar incluir el soporte en el núcleo para la tarjeta ethernet.

Los usuarios de sistemas NewWorld y OldWorld querrán igualmente activar el soporte HFS. Los usuarios de OldWorld lo necesitan para poder copiar el núcleo en la partición MacOS. Los usuarios de NewWorld lo necesitan para configurar la partición especial Apple_Bootstrap:

Listado de Código 3.5: Activar el soporte HFS

File Systems --->
  [*] HFS Support

En el momento presente, la característica de núcleo preentivo es todavía inestable en PPC y puede causar fallos de compilación y de segmentación aleatorios. Se sugiere encarecidamente no usar esta opción.

Listado de Código 3.6: Asegurarse que la opción Preemptible Kernel está desactivada

Platform options --->
  [ ] Preemptible Kernel

Si estamos arrancando desde Firewire, necesitaremos habilitar estas opciones. Si no queremos compilar el soporte embebido, necesitaremos incluir estos módulos y sus dependencias en un initrd.

Listado de Código 3.7: Activar soporte para dispositivos firewire en el arranque

  Device Drivers --->
    IEEE 1394 (FireWire) support --->
      <*> IEEE 1394 (FireWire) support
      <*>   OHCI-1394 support
      <*>   SBP-2 support (Harddisks etc.)

Si estamos arrancando desde USB, necesitaremos habilitar estas opciones, si no queremos compilar el soporte embebido, necesitaremos incluir estos módulos y sus dependencias en un initrd.

Listado de Código 3.8: Activar soporte para dispositivos USB en el arranque

  Device Drivers --->
    USB support --->
      <*> Support for Host-side USB
      <*>   OHCI HCD support
      <*>   USB Mass Storage support

No desactivaremos el soporte en el núcleo para el framebuffer porque se necesita para un arranque satisfactorio. Si utilizamos un chipset basado en NVIDIA deberemos utilizar el framebuffer de OpenFirmware. Si utilizamos un chipset basado en ATI, deberemos utilizar el controlador de framebuffer basado en el chipset (Mach64, Rage128 or Radeon).

Listado de Código 3.9: Elegir un Controlador de Framebuffer

  Device Drivers --->
  Graphics support --->
    <*> Support for frame buffer devices
    [*] Open Firmware frame buffer device support
    <*> ATI Radeon display support
    <*> ATI Rage128 display support
    <*> ATI Mach64 display support
    Console display driver support --->
      <*> Framebuffer Console support

Nota: Si seleccionamos más de un dispositivo de framebuffer puede que se utilice por defecto un controlador no óptimo. Podemos tanto utilizar un sólo framebuffer como especificar el que queremos utilizar pasándolo como parámetro del núcleo durante el arranque, como por ejemplo video=radeonfb.

Continuaremos con Compilar e instalar al acabar de configurar el núcleo.

Compilar e instalar

Ahora que ya está configurado el núcleo, es el momento para compilarlo e instalarlo. Saldremos de la configuración y comenzaremos con el proceso de compilación:

Listado de Código 3.10: Compilar el núcleo

# make && make modules_install

Cuando el núcleo haya terminado de compilar, se ha de copiar la imagen a /boot (hay que asegurarse que esté correctamente montada en ordenadores Pegasos). Si estamos utilizando BootX para arrancar, copiaremos el núcleo después.

Yaboot y BootX usan un núcleo sin comprimir a diferencia de otros gestores de arranque. El núcleo sin comprimir se llama vmlinux y se encontrará en /usr/src/linux una vez que el núcleo haya terminado de compilarse. Si está utilizando una máquina Pegasos, el microcódigo del Pegasos necesita un núcleo comprimido llamado zImage.chrp que puede encontrarse en /usr/src/linux/arch/ppc/boot/images.

Listado de Código 3.11: Instalar el kernel

cd /usr/src/linux
reemplace <kernel-version> con la versión correspondiente del núcleo
(Apple/IBM)
# cp vmlinux /boot/<kernel-version>
(Pegasos)
# cp arch/ppc/boot/images/zImage.chrp /boot/<kernel-version>

Ahora hay que continuar con Instalar módulos del núcleo separadamente.

7.d. Instalar módulos del núcleo separadamente

Configurar los módulos

Se deben poner los módulos que queramos cargar automáticamente en /etc/modules.autoload.d/kernel-2.6. Se pueden agregar opciones extras a los módulos si así se quiere.

Para ver todos los módulos disponibles, se puede ejecutar el comando find. No hay que olvidar sustituir "<versión del kernel>" con la versión del kernel que hemos compilado:

Listado de Código 4.1: Ver todos los módulos disponibles

# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'

Por ejemplo, para cargar automáticamente el módulo 3c59x.o, hay que editar el fichero kernel-2.6 y escribir en él el nombre del módulo.

Listado de Código 4.2: Editar /etc/modules.autoload.d/kernel-2.6

# nano -w /etc/modules.autoload.d/kernel-2.6

Listado de Código 4.3: /etc/modules.autoload.d/kernel-2.6

3c59x

Continuaremos la instalación con Configurar el sistema.

7.e. Alternativa: Usar genkernel

Si hemos llegado a esta sección, es porque habremos elegido usar el guión genkernel para configurar el kernel.

Ahora que el árbol de las fuentes del núcleo está instalado, es hora de compilarlo usando el guión genkernel que automáticamente construirá uno por nosostros. genkernel trabaja configurando un núcleo prácticamente idéntico al núcleo del CD de instalación. Esto significa que cuando se usa genkernel para construir el núcleo, el sistema generalmente detectará todo el hardware durante el arranque, tal como lo hace el CD de instalación. Debido a que genkernel no requiere ninguna configuración manual del núcleo, es una solución ideal para esos usuarios que no se sienten cómodos compilando sus propios núcleos.

Ahora, veamos como usar genkernel. Primero, hay que hacer emerge al ebuild de genkernel:

Listado de Código 5.1: Instalar genkernel

# emerge genkernel

A continuación, hay que copiar la configuración del núcleo empleada por el CD de instalación al sitio donde genkernel busca la configuración predeterminada del núcleo:

Listado de Código 5.2: Copiar la configuración del kernel del CD de instalación

# zcat /proc/config.gz > /usr/share/genkernel/ppc/kernel-config-2.6

Si estamos usando firewire o USB para arrancar, necesitaremos añadir los módulos al initrd. Editaremos /usr/share/genkernel/ppc/modules_load y cambiaremos MODULES_FIREWIRE="ieee1394 ohci1394 sbp2" para el soporte de firewire o MODULES_USB="usbcore ohci-hcd ehci-hcd usb-storage" para el soporte de USB.

Ahora hay que compilar las fuentes del núcleo ejecutando genkernel --genzimage all. Para Pegasos necesitaremos usar una configuración diferente y crear una zImage en lugar del núcleo vmlinux usado en las máquinas Apple. Recordaremos que como genkernel compila un núcleo que soporta casi todo el hardware, esta compilación ¡tardará un rato en terminar!

Observaremos que si la partición de arranque no usa ext2 o ext3 como sistema de archivos, se necesita configurar manualmente el núcleo usando genkernel --menuconfig --genzimage all para agregar soporte para el sistema de archivos correspondiente en el núcleo (no como módulo). Los usuarios de EVMS2 o LVM2 probablemente querrán añadir también los argumentos --evms2 or --lvm2.

Listado de Código 5.3: Ejecutar genkernel

# genkernel --genzimage all

Listado de Código 5.4: Ejecutar genkernel en el Pegasos

# genkernel --genzimage --kernel-config=/usr/share/genkernel/ppc/Pegasos all

Una vez que genkernel haya terminado, un núcleo, un conjunto completo de módulos y un disco raíz de inicio (initrd) habrán sido creados. Usaremos el núcleo e initrd para configurar un gestor de arranque más tarde en este documento. Escribiremos los nombres del núcleo y de initrd ya que se necesitarán para el archivo de configuración del gestor de arranque. initrd se iniciará inmediatamente después del arranque para realizar la autodetección de hardware (igual que en el CD de instalación) antes que se inicie el sistema "real". Nos aseguraremos de escribir también los parámetros de arranque necesarios, puesto que se requieren para un arranque correcto con genkernel.

Listado de Código 5.5: Verificar los nombres del kernel e initrd creados

# ls /boot/kernel* /boot/initramfs*

Si queremos que nuestro sistema sea más parecido al CD de instalación deberemos, cuando la instalación de Gentoo esté hecha, instalar coldplug. Mientras initrd autodetecta el hardware necesario para arrancar el sistema, coldplug autodetecta casi todo lo demás.coldplug está disponible como uno de los paquetes del Package CD.

Listado de Código 5.6: Instalar y habilitar coldplug

(Hacer esto después de la instalación, durante las intrucciones de instalación de GRP)
# emerge -k coldplug
# rc-update add coldplug boot

Si queremos que nuestro sistema tenga en cuenta los eventos de hotplug, deberemos instalar y configurar hotplug así:

Listado de Código 5.7: Instalar y habilitar hotplug

# emerge hotplug
# rc-update add hotplug default

Ahora continuaremos con Configurar el sistema.

8. Configurando su sistema

8.a. Información del Sistema de Ficheros

¿Qué es el fstab?

En Linux, todas las particiones usadas por el sistema deben estar reflejadas en /etc/fstab. Este fichero contiene los puntos de montaje de esas particiones (donde se encuentran en la estructura del sistema de ficheros), cómo deben ser montadas y con que opciones especiales (automáticamente o no, si los usuarios pueden montarlas o no, etc.).

Creando el /etc/fstab

/etc/fstab usa una sintaxis especial. Cada línea está formada por seis campos, separados por espacios en blanco (espacio(s), tabuladores o una combinación). Cada campo tiene su propio significado:

  • El primer campo muestra la partición descrita (la ruta al fichero de dispositivo)
  • El segundo campo muestra el punto de montaje donde la partición debe montarse
  • El tercer campo muestra el sistema de ficheros usado por la partición
  • El cuarto campo muestra las opciones de montaje usadas por mount cuando trata de montar la partición. Como cada sistema de ficheros tiene sus propias opciones de montaje, le animamos a leer la página man de mount (man mount) para un listado completo. Cuando existen múltiples opciones se separan por comas.
  • El quinto campo es usado por dump para determinar si la partición necesita ser volcada o no. En general puede dejar esto como 0 (cero).
  • El sexto campo es usado por fsck para determinar el orden en que los sistemas de ficheros deben ser comprobados si el sistema no se apagó correctamente. La partición raíz debe tener un 1 mientras que el resto puede tener 2 (o 0 en el caso en que la comprobación del sistema de ficheros no sea necesaria).

El archivo /etc/fstab que proporciona Gentoo de manera predeterminada no es un archivo fstab válido, así que ejecute nano (o su editor favorito) para crear su propio /etc/fstab:

Listado de Código 1.1: Abriendo /etc/fstab

# nano -w /etc/fstab

Vamos a ver como anotaremos las opciones para la partición /boot . Esto es sólo un ejemplo, si su arquitectura no requiere una partición /boot (como por ejemplo las máquinas PPC de Apple), no lo copie al pie de la letra.

En nuestro ejemplo de particionamiento estándar para x86, /boot es la partición /dev/hda1, con un sistema de ficheros ext2. Esta necesita ser comprobada durante el arranque. Entonces escribiríamos:

Listado de Código 1.2: Un ejemplo de línea /boot para /etc/fstab

/dev/hda1   /boot     ext2    defaults        1 2

Algunos usuarios no quieren que su partición /boot sea montada automáticamente para mejorar la seguridad de su sistema. Estos usuarios deberían sustituir defaults por noauto. Esto implica la necesidad de montar manualmente la partición cada vez que se quiera usarla.

Para aumentar el rendimiento, la mayoría de usuarios podrían querer agregar la opción noatime como opción de montaje, que desemboca en un sistema más rápido, puesto que los tiempos de acceso no son registrados (de todas formas, no necesitará esto en general):

Listado de Código 1.3: Una línea /boot mejorada para /etc/fstab

/dev/hda1   /boot     ext2    defaults,noatime    1 2

Si seguimos estos pasos, acabaríamos con las siguientes tres líneas (para /boot, / y la partición de swap):

Listado de Código 1.4: Tres líneas del /etc/fstab

/dev/hda1   /boot     ext2    defaults,noatime  1 2
/dev/hda2   none      swap    sw                0 0
/dev/hda3   /         ext3    noatime           0 1

Para finalizar, debería agregar una línea para /proc, tmpfs (requerido) y sus dispositivos CD-ROM (y por supuesto, si tiene otras particiones o dispositivos, para ellos también):

Listado de Código 1.5: Un ejemplo de /etc/fstab completo

/dev/hda1   /boot     ext2    defaults,noatime       1 2
/dev/hda2   none      swap    sw                   0 0
/dev/hda3   /         ext3    noatime              0 1

none        /proc     proc    defaults             0 0
none        /dev/shm  tmpfs   nodev,nosuid,noexec  0 0

/dev/cdroms/cdrom0    /mnt/cdrom    auto      noauto,user    0 0

auto provoca que mount intente adivinar el sistema de archivos (se recomienda para los dispositivos extraíbles ya que pueden ser creados con distintos sistemas de ficheros) y user hace posible a los usuarios que no pertenezcan a root monten el CD.

Ahora haga uso del ejemplo anterior, para crear su /etc/fstab. Si es un usuario de SPARC, además debería añadir la siguiente línea a su /etc/fstab:

Listado de Código 1.6: Añadiendo el sistema de ficheros openprom al /etc/fstab

none        /proc/openprom  openpromfs    defaults      0 0

Repase su /etc/fstab, guarde los cambios y salga para continuar.

8.b. Información de red

Nombre de Host, Nombre de Dominio, etc.

Una de las elecciones que un usuario ha de hacer es el nombre de su PC. Esto parece muy fácil, pero muchos usuarios tienen dificultades eligiendo el nombre apropiado para su PC-Linux. Para acelerar las cosas, sepa que el nombre que elija puede cambiarlo mas tarde. Para el caso que nos preocupa, usted puede llamar su sistema simplemente tux y su dominio redcasera.

Usaremos esos nombres en los siguientes ejemplos. Primero ajustaremos el nombre de host:

Listado de Código 2.1: Ajustando el nombre de Host

# nano -w /etc/conf.d/hostname
(Configure la variable HOSTNAME con el nombre del host)
HOSTNAME="tux"

En segundo lugar ajustaremos el nombre del dominio:

Listado de Código 2.2: Ajustando el nombre de Host

# nano -w /etc/conf.d/domainname
 
(Configure la variable DNSDOMAIN con su nombre de dominio)
DNSDOMAIN="homenetwork"

Si dispone de un dominio NIS (si no sabe lo que es, entonces no lo tiene), necesita definirlo también:

Listado de Código 2.3: Ajustando el nombre del dominio NIS

# nano -w /etc/conf.d/domainname
 
(Configura la variable NISDOMAIN con su nombre de dominio NIS)
NISDOMAIN="my-nisdomain"

Configurando su Red

Antes de llegar a experimentar esa sensación "Hey, ya lo tengo todo", debes recordar que la red que configuraste en el inicio de la instalación de Gentoo fue tan solo para la instalación. A partir de ahora vamos a configurar la red permanentemente para su sistema Gentoo.

Nota: Información más detallada sobre redes, incluyendo temas más avanzados como bonding, bridging, 802.1Q VLANs o redes inhalámbricas está disponible en la sección Configuración de redes en Gentoo.

Toda la información de red esta reunida en /etc/conf.d/net. Este fichero usa una directa, aunque no intuitiva sintaxis si no se sabe como configurar una red manualmente. Pero no se asuste, se lo explicaremos todo. Un ejemplo completamente comentado que cubre los distintos tipo de configuraciones, puede encontrarse en /etc/conf.d/net.example.

DHCP se emplea por defecto y no requiere ningún tipo de configuración.

Si se necesita configurar la conexión de red porque es necesario incluir opciones de DHCP específicas o porque no utiliza DHCP, abra /etc/conf.d/net con su editor favorito (nano se emplea en este ejemplo):

Listado de Código 2.4: Abriendo /etc/conf.d/net para su edición

# nano -w /etc/conf.d/net

Verá el siguiente fichero:

Listado de Código 2.5: Archivo /etc/conf.d/net por defecto

# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).

Para introducir su propia dirección IP, máscara de red y pasarela, necesita configurar tanto config_eth0 como routes_eth0:

Listado de Código 2.6: Configurar manualmente la información IP para eth0

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )

Para utilizar DHCP y añadir opciones específicas, defina, config_eth0 y dhcp_eth0:

Listado de Código 2.7: Obtener una dirección IP automáticamente para eth0

config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"

Por favor, consulte /etc/conf.d/net.example para conocer una lista con todas las opciones disponibles.

Si tiene varias interfaces de red, repita los pasos anteriores utilizando config_eth1, config_eth2, etc.

Ahora guarde la configuración y salga para continuar.

Inicio automático de red en el arranque

Para disponer de su interfaz de red activada en el arranque, necesita agregarla al nivel de ejecución por defecto (default). Si dispone de interfaces PCMCIA debe saltarse este paso puesto que las interfaces PCMCIA son iniciadas por el script de inicialización PCMCIA

Listado de Código 2.8: Agregando net.eth0 al nivel de ejecución default

# rc-update add net.eth0 default

Si tiene distintas interfaces de red, necesitara crear los apropiados net.eth1, net.eth2 etc. scripts de inicio. Puede usar ln para hacer esto:

Listado de Código 2.9: Creando scripts de inicio adicionales

# cd /etc/init.d
# ln -s net.eth0 net.eth1
# rc-update add net.eth1 default

Anotando la Información de la Red

Necesita informar a Linux sobre su red. Esto se define en /etc/hosts y ayuda a transformar los nombres de host a direcciones IP para aquellas máquinas que no se resuelven a través de su servidor de nombres (DNS). Por ejemplo, si su red interna consiste en tres PCs llamados jenny (192.168.0.5), benny (192.168.0.6) y tux (192.168.0.7 - este sistema) abra /etc/hosts y complete los valores:

Listado de Código 2.10: Abriendo /etc/hosts

# nano -w /etc/hosts

Listado de Código 2.11: Completando la información de red

127.0.0.1     localhost
192.168.0.5   jenny.redlocal jenny
192.168.0.6   benny.redlocal benny
192.168.0.7   tux.redlocal tux

Si su sistema es el único presente (o los servidores de nombres se encargan de todas las resoluciones) una única línea es suficiente. Por ejemplo, si quiere llamar a su sistema tux:

Listado de Código 2.12: /etc/hosts para un solo PC o varios plenamente integrados

127.0.0.1     localhost tux

Guarde y salga del editor para continuar.

Si no tiene PCMCIA, puede continuar con Información del Sistema. Los usuarios de PCMCIA deberían leer el siguiente apartado sobre PCMCIA.

Opcional: Hacer funcionar el PCMCIA

Nota: pcmcia-cs está solamente disponible para plataformas x86, amd64 y ppc.

Los usuarios de PCMCIA deben instalar primero el paquete pcmcia-cs. Esto también incluye a los usuarios que estén trabajando con un kernel 2.6 (incluso aunque no quieran utilizar los controladores PCMCIA de este paquete). El empleo de USE="-X" es necesario para evitar la instalación de xorg-x11 en este momento.

Listado de Código 2.13: Instalando pcmcia-cs

# USE="-X" emerge pcmcia-cs

Cuando pcmcia-cs esté instalado, agregue pcmcia al nivel de arranque default:

Listado de Código 2.14: Agregando pcmcia al nivel de arranque por defecto

# rc-update add pcmcia default

8.c. Información del sistema

Contraseña de administrador (Root)

Primero fijamos la contraseña de administrador escribiendo:

Listado de Código 3.1: Configurando la contraseña de administrador

# passwd

Si desea que el administrador sea capaz de entrar en el sistema a través de un consola de serie (tts), añada tts/0 al fichero /etc/securetty:

Listado de Código 3.2: Añadiendo tts/0 a /etc/securetty

# echo "tts/0" >> /etc/securetty

Información del sistema

Gentoo usa el fichero /etc/rc.conf para una configuración general del sistema. Abra el /etc/rc.conf y disfrute de todos los comentarios que hay en él :)

Listado de Código 3.3: Abriendo el fichero /etc/rc.conf

# nano -w /etc/rc.conf

Cuando haya terminado de configurar /etc/rc.conf, guarde los cambios y salga.

Como puede ver, este fichero está bien comentado para ayudarle a ajustar las variables de configuración necesarias. Puede configurar el sistema para que utilice unicode y definir su editor predeterminado y su gestor de inicio (cómo gdm o kdm).

Gentoo utiliza /etc/conf.d/keymaps para gestionar la configuración del teclado. Edítelo y configure su teclado.

Listado de Código 3.4: Abrir /etc/conf.d/keymaps

# nano -w /etc/conf.d/keymaps

Tenga especial cuidad con KEYMAP: si selecciona un KEYMAP incorrecto, conseguirá extraños resultados escribiendo en su teclado.

Nota: Los usuarios de sistemas SPARC basados en USB y los clones de SPARC podrían necesitar seleccionar un mapeo del teclado i386 (como "su") en vez de utilizar "sunkeymap". PPC utiliza mapeos de teclado x86 en la mayoría de sus sistemas. Los usuarios que quieren disponer de mapeos ADB en el arranque, necesitan activar "ADB keycode sendings" en su kernel y tener configurado un mapeo de teclado mac/ppc en /etc/conf.d/keymaps.

Cuando termine de configurar /etc/conf.d/keymaps, guárde los cambios y salga.

Gentoo utiliza /etc/conf.d/clock para fijar las opciones del reloj. Edítelo de acuerdo a sus necesidades.

Listado de Código 3.5: Abriendo /etc/conf.d/clock

# nano -w /etc/conf.d/clock

Si su reloj hardware no está utilizando UTC, necesita añadir CLOCK="local" al archivo. De lo contrario notará como su reloj no funciona correctamente. Si vamos un poco más lejos, Windows asume que el reloj utiliza la hora local, así que si se dispone de arranque dual, debería configurarse está variable adecuadamente, de lo contrario el reloj se volverá loco.

Cuando haya acabado de configurar /etc/conf.d/clock, guárdelo y salga.

Si no está instalando Gentoo en un hardware IBM PPC64, continué con Instalando las herramientas de sistema necesarias .

Configurar la consola

Nota: La siguiente sección se aplica a las plataformas hardware IBM PPC64.

Si está ejecutando Gentoo en un hardware IBM PPC64 y utiliza una consola virtual, debería descomentar la línea apropiada en /etc/inittab para que la consola virtual muestre un símbolo de entrada al sistema (prompt).

Listado de Código 3.6: Activando el soporte hvc en /etc/inittab

hvc0:12345:respawn:/sbin/agetty -L 9600 hvc0
hvsi:12345:respawn:/sbin/agetty -L 19200 hvsi0

También debería revisar que la consola apropiada figura en /etc/securetty.

Puede continuar con Instalando las herramientas de sistema necesarias .

9. Instalando herramientas necesarias para el sistema

9.a. Bitácora del Sistema

Algunas herramientas no están incluidas en el archivo stage3 porque varios paquetes pueden proporcionar la misma funcionalidad. Es una decisión personal elegir cual se quiere instalar.

La primera herramienta por la que tiene que decidirse es la que proporciona el registro y las bitácoras para su sistema. Unix y Linux tienen una excelente historia en sus capacidades de registros -- si lo quisiera podría registrar todo lo que pasa en su sistema en bitácoras. Esto sucede con el registro del sistema.

Gentoo ofrece varios sistemas de registro para elegir. Están sysklogd, que es el conjunto tradicional de demonios de bitácoras, sysklogd, un sistema de bitácora avanzado, y metalog que es una bitácora de sistemas altamente configurable. También puede haber otros en el Portage - el número de paquetes disponibles crece día a día.

Si está pensando utilizar sysklogd o syslog-ng quizá quiera instalar posteriormente logrotate ya que esos logeadores no proporcionan ningún mecanismo de rotación para los archivos de log.

Para instalar la bitácora del sistema de su elección, use emerge y agrégelo al nivel de arranque predeterminado usando rc-update. El siguiente ejemplo instala syslog-ng. Desde luego, sustitúyalo por el sistema de bitácora de su elección:

Listado de Código 1.1: Instalar un sistema de bitácoras

# emerge syslog-ng
# rc-update add syslog-ng default

9.b. Opcional: Demonio Cron

El siguiente es el demonio cron. Aunque es opcional y no lo requiere su sistema es recomendable instalar uno. ¿Pero que es un demonio cron? Un demonio cron ejecuta comandos en horarios planificados. Es muy cómodo si necesita ejecutar comandos regularmente (por ejemplo diario, cada semana o mensualmente).

Sólo proporcionamos vixie-cron para instalaciones sin red. Si quiere otro demonio cron puede esperar e instalarlo más tarde.

Listado de Código 2.1: Instalar un demonio cron

# emerge vixie-cron
# rc-update add vixie-cron default

9.c. Opcional: Indexar Archivos

Si quiere crear un índice de su sistema de archivos para habilitar su rápida localización usando la herramienta locate, necesita instalar sys-apps/slocate.

Listado de Código 3.1: Instalar slocate

# emerge slocate

9.d. Herramientas del Sistema de Archivos

Dependiendo en que sistema de archivos este usando, necesita instalar las utilerías necesarias (para verificar la integridad del sistema de archivos, crear adicionales, etc.).

La siguiente tabla lista las herramientas que necesita instalar según un sistema de archivos determinado. No todos los sistemas de ficheros están disponibles para cada una de las arquitecturas.

Sistema de Archivos Herramienta Comando para Instalar
XFS xfsprogs emerge xfsprogs
ReiserFS reiserfsprogs emerge reiserfsprogs
JFS jfsutils emerge jfsutils

Si es usuario de EVMS, necesita instalar también evms:

Listado de Código 4.1: Instalar herramientas EVMS

# USE="-gtk" emerge evms

El USE="-gtk" previene la instalación de dependencias. Si se quiere activar las herramientas gráficas de evms, puede recompilar evms más adelante.

Si no necesita ninguna herramienta adicional relacionada con la red (como rp-pppoe o un cliente dhcp) continué con Configuración del Cargador de Arranque.

9.e. Herramientas de Red

Opcional: Instalar un Cliente DHCP

Si necesita que Gentoo obtenga automáticamente una dirección IP para sus interfaces de red, necesita instalar en su sistema dhcpcd (o cualquier otro cliente DHCP) . Si no lo hace, ¡tal vez no sea capz de conectarse a Internet después de la instalación!

Listado de Código 5.1: Instalar dhcpcd

# emerge dhcpcd

Opcional: Instalar un Cliente PPPoE

Si necesita rp-pppoe para conectarse a la red, necesita instalarlo.

Listado de Código 5.2: Instalar rp-pppoe

# USE="-X" emerge rp-pppoe

El USE="-X" le prohibe a xorg-x11 instalarse como una dependencia (rp-pppoe tiene herramientas gráficas; si quiere habilitarlas, puede recompilar rp-pppoe más tarde o cuando xorg-x11 ya esté instalado -- porque toma mucho tiempo en compilarse).

Opcional: Utilidades RAID para hardware IBM

Si se está empleando un RAID SCSI en un sistema basado en POWER5, se debería considerar la instalación de iprutils lo cual le permitirá trabajar con el RAID de discos, conocer el estado de los discos del array, y actualizar el microcódigo entre otras funciones.

Listado de Código 5.3: Instalar iprutils

# emerge iprutils

Ahora continúe con Configurar el Cargado de Arranque.

10. Configurando el gestor de arranque

10.a. Elegir un gestor de arranque

Introducción

Ahora que su núcleo está configurado y compilado se necesita un gestor de arranque, o bootloader, para poder iniciar su nueva instalación de linux. El gestor de arranque que usaremos dependerá del tipo de máquina PPC de que se trate.

Si está utilizando una máquina IBM o Apple NewWorld, necesita usar yaboot. Con las máquinas Apple OldWorld tenemos dos opciones, BootX (recomendado) y quik. Las Pegasos no necesitan gestor de arranque, pero se necesita instalar BootCreator para crear un menú de inicio SmartFirmware.

10.b. Por defecto: yaboot

Introducción

Importante: ¡yaboot sólo puede usarse en sistemas NewWorld Apple e IBM!

Para poder encontrar los dispositivos de arranque yaboot necesita acceder a los nodos de dispositivo creados por udev durante el arranque y al sistema de ficheros sysfs. Esos dos sistemas de ficheros se encuentran respectivamente en /dev y sys. Para hacer esto, necesitaremos hacer un "bind mount" de esos sistemas de ficheros en el directorio root del CD de instalación a los puntos de montaje /dev y /sys dentro del entorno de chroot. Si ya lo hemos hecho no es necesario volver a hacerlo.

Listado de Código 2.1: Montar y enlazar los sistemas de ficheros de dispositivo y sysfs

# exit   # para salir del chroot
# mount -o bind /dev /mnt/gentoo/dev
# mount -o bind /sys /mnt/gentoo/sys
# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile 

Para configurar yaboot, puede usar yabootconfig para que se cree automáticamente un fichero de configuración. Si estamos instalando Gentoo en un G5 (donde yabootconfig no siempre funciona), o pensamos arrancar desde firewire o USB, debemos configurarlo manualmente.

Nota: Necesitaremos editar el fichero yaboot.conf si usamos genkernel, incluso habiendo utilizado yabootconfig. La sección de la imagen del núcleo de yaboot.conf deberá ser modificada así:

Listado de Código 2.2: Añadir opciones de arranque de genkernel a yaboot.conf

###########################################################
## Esta sección se puede duplicar si tenemos más de un 
## núcleo o conjunto de opciones de arranque - reemplazaremos 2.6.15
## con el nombre exacto del fichero del núcleo
###########################################################
image=/boot/kernel-2.6.15
  label=Linux
  root=/dev/ram0
  partition=3
  append="real_root=/dev/hda3 init=/linuxrc"
  # Podemos añadir argumentos adicionales al núcleo como por ejemplo
  # rootdelay=10 para un arranque USB/Firewire
  read-only
##########################################################

Por defecto: yabootconfig

yabootconfig autodetectará las particiones en nuestra máquina y configurará un arranque múltiple con Linux, Mac OS y Mac OS X.

Para usar yabootconfig, el disco debe tener una partición Apple_Bootstrap, y /etc/fstab debe estar configurado para reflejar nuestras las particiones Linux. Estos pasos deberían haberse hecho ya, pero no estaría de más volver a comprobar /etc/fstab. Ahora nos aseguraremos de tener yaboot instalado.

Listado de Código 2.3: Instalación de yaboot con GRP

# emerge --usepkg yaboot

Ahora saldremos del chroot y ejecutaremos yabootconfig --chroot /mnt/gentoo. Primero, el programa pedirá confirmación de la ubicación de la partición de bootstrap. Si estamos utilizando el esquema de particionamiento sugerido, la partición de arranque será /dev/hda2. Pulsaremos Y si lo mostrado es correcto. Si no lo es, comprobaremos nuestro /etc/fstab. yabootconfig revisará entonces la configuración del sistema, creará /etc/yaboot.conf y ejecutará mkofboot. mkofboot se utiliza para formatear la partición Apple_Bootstrap, e instalar el fichero de configuración de yaboot en ella. Después de esto, entraremos en el chroot nuevamente.

Listado de Código 2.4: Volver a entrar en el chroot

# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile

Puede que queramos verificar el contenido de /etc/yaboot.conf. Si lo modificamos (por ejemplo para indicar el sistema operativo por defecto) debemos asegurarnos de volver a ejecutar ybin -v para aplicar los cambios en la partición Apple_Bootstrap.

Ahora, continuaremos en Reiniciando el sistema.

Alternativa: Configuración manual de yaboot

En primer lugar, nos aseguraremos que se ha instalado en el sistema yaboot.

Listado de Código 2.5: Instalación de yaboot con GRP

# emerge --usepkg yaboot

A continuación se encuentra un ejemplo del fichero yaboot.conf, pero deberemos adaptarlo a nuestras necesidades. Los usuarios de un G5 y los que arranquen de firewire o USB deben tener cuidado que sus discos sean vistos como discos SCSI por el núcleo Linux, por lo que necesitaremos cambiar /dev/hda por /dev/sda).

Listado de Código 2.6: /etc/yaboot.conf

## /etc/yaboot.conf
##
## Más detalles en "man yaboot.conf". ¡No se deben hacer cambios hasta
## haberlo consultado!
## Hay más ejemplos de configuración en /usr/share/doc/yaboot/examples.
##
## En un menú de arranque múltiple, se añadirían una o más de las
## siguientes opciones:
## bsd=/dev/hdaX, macos=/dev/hdaY, macosx=/dev/hdaZ

## nuestra partición de bootstrap:

boot=/dev/hda2

## ofboot es la forma openfirmware para especificar la partición de arranque.
## Si no se especifica nada, yaboot falla en los G5 y algunos G4 (a menos que
## se pasen los parámetros necesarios al programa mkofboot/ybin program).
## hd:X significa /dev/sdaX (o /dev/hdaX).
## 
## ¡¡Los usuarios de G5 deben descomentar esta línea!!

#ofboot=hd:2

## Los usuarios que arranquen desde firewire deben usar una línea similar 
## a esta:
# ofboot=fw/node/sbp-2/disk@0:

## Los usuarios que arranquen desde USB deben tener algo como:
# ofboot=usb/disk@0:

## hd: es la abreviatura del primer disco duro que ve OpenFirmware
device=hd:

## Los usuarios de Firewire y USB deberán especificar el nombre entero
## del dispositivo OF.
## Se puede encontrar usando ofpath, incluido con yaboot.

# device=fw/node@0001d200e00d0207/sbp-2@c000/disk@0:


delay=5
defaultos=macosx
timeout=30
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot

#################
## Esta sección puede duplicarse si tiene más de un núcleo o conjunto de
## opciones de arranque - reemplazaremos 2.6.9 con nuestra versión del núcleo
#################
image=/boot/kernel-2.6.9
  label=Linux
  root=/dev/hda3
  partition=3
  #  append="rootdelay=10"  # Necesario para arranque con
  USB/Firewire
  read-only
##################

## Los usuarios de G5 y algunos de G4 deben indicar
##   macos=hd:13
##   macosx=hd:12
## en lugar de los valores de ejemplo.
macos=/dev/hda13
macosx=/dev/hda12
enablecdboot
enableofboot

Una vez que yaboot.conf esté configurado, ejecutaremos mkofboot -v para formatear la partición Apple_bootstrap e instalar las configuraciones. Si cambiamos yaboot.conf después de que la partición Apple_bootstrap haya sido creada deberemos actualizar la configuración ejecutando ybin -v.

Para más información a cerca de yaboot, se puede hojear yaboot project. Ahora continuaremos la instalación con Reiniciando el sistema.

10.c. Alternativa: BootX

Importante: ¡BootX sólo puede usarse en sistemas Apple OldWorld con MacOS 9 o anterior!

Puesto que BootX arranca Linux después de MacOS, el núcleo necesitará ser copiado desde la partición Linux a la partición MacOS. Primero montaremos la partición MacOS fuera del chroot. Usaremos mac-fdisk -l para encontrar el número de la partición MacOS, que en el ejemplo siguiente será sda6. Una vez que la partición esté montada, copiaremos el núcleo en la carpeta del sistema donde BootX pueda encontrarlo.

Listado de Código 3.1: Copia del kernel en la partición MacOS

# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/usr/src/linux/vmlinux "/mnt/mac/System Folder/Linux Kernels"

Si se usa genkernel, tanto el núcleo como el initrd deberán ser copiados en la partición MacOS.

Listado de Código 3.2: Copia del kernel e initrd compilados con genkernel a la partición MacOS

# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/boot/kernel-* "/mnt/mac/System Folder/Linux Kernels"
cdimage ~# cp /mnt/gentoo/boot/initramfs-* "/mnt/mac/System Folder"

Ahora que el núcleo ha sido copiado, necesitaremos reiniciar para configurar BootX.

Listado de Código 3.3: Desmontar todas las particiones y reiniciar

cdimage ~# cd /
cdimage ~# umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo /mnt/mac
cdimage ~# reboot

Desde luego, no nos olvidemos de extraer el CD arrancable, en caso contrario el CD volverá a iniciarse en lugar de MacOS.

Ahora que la máquina ha arrancado en MacOS, abriremos el panel de control de BootX. Si no estamos usando genkernel seleccionaremos Options, desactivando Use specified RAM disk. Usando genkernel, nos aseguraremos que el initrd de genkernel está seleccionado en lugar del initrd del CD de instalación. Si no se usa genkernel, hay una opción para especificar el disco y la partición raíz de Linux. La rellenaremos con los valores apropiados. Dependiendo de la configuración del núcleo probablemente deberemos aplicar algunos parámetros adicionales de inicio del núcleo.

BootX puede ser configurado para arrancar Linux en el inicio. Si queremos hacer esto primero haremos arrancar la máquina en MacOS y después, durante el arranque, se cargará BootX que a su vez iniciará Linux. Hay más información disponible en Boot X home page.

Importante: Debemos asegurarnos de tener soporte para los sistemas de fichero HFS y HFS+ en el núcleo, en caso contrario, no podremos actualizar o cambiar el núcleo en la partición MacOS.

Ahora reiniciaremos otra vez cargando Linux, y luego continuaremos con Finalizando la instalación de Gentoo.

10.d. Alternativa: quik

quik permite a los Macs OldWorld arrancar sin MacOS. Sin embargo, no está bien soportado y tiene algunas peculiaridades. Si tiene opción, es recomendable usar BootX en su lugar, porque es mucho más de fiar y fácil de configurar que quik.

Primero, necesitamos instalar quik:

Listado de Código 4.1: Emerge quik

# emerge quik

A continuación, necesitaremos configurarlo. Editaremos /etc/quik.conf e indicaremos la imagen del núcleo que hemos copiado en la partición de arranque.

Listado de Código 4.2: Configuración de quik.conf

# Ejemplo de quik.conf
init-message = "Gentoo 2006.0\n"
partition = 2           # Esta es la partición de boot
root = /dev/hda4
timeout = 30
default = gentoo
image = /vmlinux-2.6.15
        label = gentoo

El fichero quik.conf debe estar en el mismo disco que las imágenes de arranque quik, sin embargo puede estar en una partición diferente del mismo disco, a pesar de lo cual es recomendable tenerlo en la partición de arranque.

Listado de Código 4.3: Mover quik.conf a /boot

# mv /etc/quik.conf /boot/quik.conf

Necesitaremos ahora indicar las variables de arranque que cargará quik al inicio. Para hacerlo, usaremos un programa llamado nvsetenv. Las variables que hay que configurar cambian de una máquina a otra, por lo que es mejor buscar primero nuestra máquina en quirks antes de hacer esto.

Listado de Código 4.4: Indicar las variables de arranque

# nvsetenv auto-boot true # Establezca a false si quiere arrancar en OF, no todos los modelos muestran los mensajes de OF
# nvsetenv output-device video # Mire la página de quirks, hay algunas variantes posibles
# nvsetenv input-device kbd
# nvsetenv boot-device scsi/sd@1:0 # Para SCSI
# nvsetenv boot-device ata/ata-disk@0:0 # Para ATA
# nvsetenv boot-file /boot/vmlinux-2.6.15 root=/dev/hda4  # El primer ítem es la ruta al núcleo, el segundo es la partición root. Se pueden añadir las opciones del núcleo al final de esta línea.
# nvsetenv boot-command boot # Establezca esta opción para arrancar desde Linux

Nota: También es posible cambiar las variables de arranque desde MacOS. Dependiendo del modelo, tanto bootvars o Apple System Disk pueden usarse. Por favor, busque más información en la página de quik.

Ahora que hemos configurado la máquina para el arranque, necesitaremos asegurarnos que las imágenes de arranque están correctamente instaladas. Ejecutaremos quik -v -C /boot/quik.conf. Nos deberá decir que ha instalado el primer "stage QUIK boot block".

Nota: Si algo no ha ido bien, siempre se puede inicializar la PRAM con los valores por defecto pulsando command + option + p + r antes de apagar la máquina. Esto borra los valores establecidos con nvsetenv y debería permitir arrancar tanto con un disco de inicio MacOS como un disco de inicio Linux.

Ahora, seguiremos con Reiniciando el sistema.

10.e. Alternativa: BootCreator

Importante: BootCreator creará un bonito menú de arranque SmartFirmware escrito en Forth para el Pegasos.

Primero, nos aseguraremos de tener bootcreator instalado en el sistema:

Listado de Código 5.1: Instalación de bootcreator

# emerge --usepkg bootcreator

Ahora copiaremos el fichero /etc/bootmenu.example en /etc/bootmenu y lo editaremos convenientemente:

Listado de Código 5.2: Edición del fichero de configuración de bootcreator

# cp /etc/bootmenu.example /etc/bootmenu
# nano -w /etc/bootmenu

A continuación se encuentra un fichero de configuración completo de /etc/bootmenu. Lo modificaremos convenientemente:

Listado de Código 5.3: fichero de configuración de bootcreator

#
# Ejemplo de fichero de configuración para bootcreator 1.1
#

[VERSION]
1

[TITLE]
Boot Menu

[SETTINGS]
AbortOnKey = false
Timeout    = 9
Default    = 1

[SECTION]
Local HD -> Morphos      (Normal)
ide:0 boot2.img ramdebug edebugflags="logkprintf"

[SECTION]
Local HD -> Linux 2.6.15 (Normal)
ide:0 linux-2.6.15 video=radeonfb:1024x768@70 root=/dev/hda3

[SECTION]
Local HD -> Genkernel (Normal)
ide:0 kernelz-2.6.15 root=/dev/ram0 real_root=/dev/hda3 init=/linuxrc

Finalmente, el bootmenu debe transferirse a Forth y copiarse a la partición de inicio para que SmartFirmware pueda leerlo. Para ello deberemos llamar a bootcreator:

Listado de Código 5.4: Instalación de bootmenu

# bootcreator /etc/bootmenu /boot/menu

Nota: Durante el siguiente reinicio nos aseguraremos de revisar en la configuración de SmartFirmware que menu es el fichero que se cargará por defecto.

Ahora continuaremos con la instalación en Reiniciando el sistema.

10.f. Reiniciando el sistema

Saldremos del entorno chroot y desmontaremos todas las particiones. Luego teclearemos el comando mágico que estabamos esperando: reboot.

Listado de Código 6.1: Desmontar todas las particiones y reiniciar

# exit
livecd ~# umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo
livecd ~# reboot

Una vez que se haya reiniciado nuestra instalación de Gentoo, acabaremos con Finalizando la instalación de Gentoo.

11. Finalizando su instalación Gentoo

11.a. Administración del Usuario

Añadir un Usuario para uso cotidiano

Trabajar como root en un sistema Unix/Linux es peligroso y su uso debería evitarse tanto como sea posible. Es por ello que se recomienda encarecidamente añadir un usuario para el uso cotidiano del sistema.

Los grupos a los que pertenece el usuario definen que actividades puede realizar. La siguiente tabla muestra una lista de los grupos más importantes que podría querer utilizar.

Grupo Descripción
audio para ser capaz de acceder a los dispositivos de audio
cdrom para poder acceder directamente al cdrom
floppy para poder acceder directamente a los dispositivos de disquete
games para poder utilizar los juegos
portage para ser capaz de utilizar emerge --pretend como usuario normal
usb para poder acceder a los dispositivos USB
plugdev para poder montar y utilizar dispositivos móviles como cámaras o llaveros USB
video para acceder al hardware capturador de video y a la aceleración por hardware
wheel para poder utilizar su

Por ejemplo, para crear un usuario llamado juan que pertenezca a los grupos wheel, users y audio, entre en el sistema como root (sólo root puede crear usuarios) y ejecute useradd:

Listado de Código 1.1: Añadiendo un usuario de uso cotidiano

Login: root
Password: (Su contraseña de root)

# useradd -m -G users,wheel,audio -s /bin/bash juan
# passwd juan
Password: (Introduzca la contraseña para juan)
Re-enter password: (Vuelva a introducir la contraseña para verificar)

Si alguna vez este usuario necesita realizar alguna tarea como root, puede utilizar su - para obtener temporalmente privilegios de root. Otra forma es utilizar el paquete sudo el cual, correctamente configurado, es muy seguro.

11.b. Opcional: Instalar Paquetes PRG

Importante: Esta parte es solo para los usuarios de PRG. El resto deberían saltarse esta parte y continuar con ¿A dónde ir desde aquí?.

Ahora que su sistema está iniciado, entre con el usuario que creó anteriormente (por ejemplo, juan) y utilice su - para obtener privilegios de root:

Listado de Código 2.1: Obteniendo privilegios de root

$ su -
Password: (Introduzca su contraseña de root)

Ahora necesitamos cambiar la configuración de Portage para buscar los binarios pre-compilados del segundo CD (CD de Paquetes de Gentoo). Primero monte éste CD:

Listado de Código 2.2: Monte el CD de Paquetes

(Ponga el CD de Paquetes de Gentoo en la bandeja del CD-ROM)
# mount /mnt/cdrom

Ahora configure Portage para usar /mnt/cdrom para sus paquetes pre-compilados:

Listado de Código 2.3: Configurando Portage para usar /mnt/cdrom

# ls /mnt/cdrom

(Si hay un directorio /mnt/cdrom/packages:)
# export PKGDIR="/mnt/cdrom/packages"

(Si no:)
# export PKGDIR="/mnt/cdrom"

Ahora instale los paquetes que quiera. El CD de Paquetes contiene varios binarios pre-compilados, como por ejemplo KDE y GNOME:

Listado de Código 2.4: Instalar GNOME

# emerge --usepkg gnome

Para conocer que paquetes recompilados existen, haga un listado rápido de los archivos en /mnt/cdrom/All. Por ejemplo, para comprobar si KDE se puede instalar:

Listado de Código 2.5: Comprobar que KDE se puede instalar

# ls /mnt/cdrom/All/kde*

Asegúrese de instalar los binarios ahora. Cuando haga un emerge --sync para actualizar Portage (como aprenderá más adelante), los binarios pre-compilados quizá no correspondan con los ebuilds de su Portage actualizado. Puede tratar de solventar este problema utilizando emerge --usepkgonly en lugar de emerge --usepkg.

Enhorabuena, ¡Su sistema está ahora completamente equipado! Continué con ¿A dónde ir desde aquí? para aprender algo más sobre Gentoo.

12. ¿Y ahora qué?

12.a. Documentación

¡Enhorabuena! Ya tiene funcionando un sistema Gentoo. Pero ¿A donde ir desde aquí? ¿Cuáles son ahora sus opciones? ¿Qué explorar primero? Gentoo ofrece a sus usuarios muchas posibilidades y, por lo tanto, muchas características documentadas (y menos documentadas).

Definitivamente usted debería ojear la siguiente parte del Manual de Gentoo titulada Trabajando con Gentoo la cual explica cómo mantener su software al día, cómo instalar más software, qué parámetros USE hay, cómo funciona el sistema de inicialización de Gentoo (Gentoo Init system), etc.

Si está interesado en la optimización de su sistema para uso de escritorio, o quiere aprender cómo configurarlo para que sea un completo sistema de escritorio, consulte nuestra extensa Guía de Configuración del Escritorio. Además, quizá también quiera utilizar nuestra guía de localización para hacer que el sistema se sienta cómo en casa.

También disponemos de un Manual de seguridad en Gentoo cuya lectura puede ser muy valiosa.

Para obtener un completo listado de toda nuestra documentación disponible, revise nuestra página de Recursos de Documentación.

12.b. Gentoo en línea

Por supuesto, usted es siempre bienvenido a nuestros Foros de Gentoo o a alguno de nuestros canales de IRC.

También tenemos varias listas de correo abiertas para todos nuestros usuarios. La información de cómo entrar en las mismas está disponible en esa página.

Ahora nos callaremos y le dejaremos que disfrute de su instalación :)

12.c. Cambios en Gentoo desde 2006.0

¿Cambios?

Gentoo está en continuo movimiento. Las siguientes secciones describen importantes cambios que afectan a la instalación de Gentoo. Solamente se recogen aquellos comunes a la instalación, no los cambios de paquetes que no ocurren durante la instalación.

No se han producido cambios significativos.

B. Trabajando con Gentoo

1. Introducción al sistema Portage

1.a. Bienvenido a Portage

Portage es probablemente la más importante innovación de Gentoo en la gestión de software. Debido a su potente flexibilidad y una gran cantidad de funcionalidades, es frecuentemente apreciado como la mejor herramienta de gestión de software disponible para Linux.

Portage esta completamente escrito en Python y Bash y, por tanto, totalmente a la vista de los usuarios al ser ambos lenguajes interpretados.

La mayoría de usuarios trabajarán con Portage a través de la herramienta emerge. Este capítulo no pretende duplicar la información disponible en la página de man sobre emerge. Para una completa información sobre las opciones de emerge, por favor, consulte la página del manual:

Listado de Código 1.1: Leer la página del manual sobre emerge

$ man emerge

1.b. El árbol Portage

Ebuilds

Cuando hablamos sobre paquetes, nos referimos normalmente a programas software disponibles para los usuarios de Gentoo a través del árbol Portage. El árbol Portage es una colección de ebuilds, archivos que contienen toda la información que Portage necesita para mantener el software (instalar, buscar, ...). Estos ebuilds residen por defecto en /usr/portage.

Cuando se pida a Portage que ejecute alguna acción relacionada con los programas, éste utilizará los ebuilds de su sistema como base. Por tanto, es importante que actualice los ebuilds de su sistema para que Portage conozca el nuevo software, actualizaciones de seguridad, etc.

Actualizando el árbol Portage

El árbol Portage se actualiza normalmente con rsync, una utilidad rápida de transferencia de archivos incremental. La actualización es muy sencilla, ya que la orden emerge proporciona una interfaz para rsync:

Listado de Código 2.1: Actualizar el árbol Portage

# emerge --sync

Si no es capaz de realizar rsync debido a restricciones de cortafuegos puede actualizar su árbol Portage a través de nuestras tres imágenes de Portage generadas diariamente. La herramienta emerge-webrsync automáticamente comprueba e instala la última en su sistema.

Listado de Código 2.2: Ejecutar emerge-webrsync

# emerge-webrsync

Una ventaja adicional de utilizar emerge-webrsync es que permite al administrador descargar únicamente instantáneas del árbol portage que están firmadas con la clave GPG del equipo de ingeniería de versiones de Gentoo. Se puede encontrar más información sobre esto en la sección Características de Portage en Obteniendo instantáneas validadas del árbol Portage.

1.c. Mantenimiento de Software

Buscar software

Para buscar software utilizando el árbol de Portage, puede emplear las funcionalidades de búsquedas propias de emerge. Por defecto, emerge --search devuelve el nombre de los paquetes cuyo nombre coincide (tanto total como parcialmente) con el término de búsqueda introducido.

Por ejemplo, para buscar todos los paquetes que tengan "pdf" en su nombre:

Listado de Código 3.1: Buscar paquetes cuyo nombre tenga pdf

$ emerge --search pdf

Si quiere buscar también en las descripciones puede utilizar la opción --searchdesc (o -S).

Listado de Código 3.2: Buscar paquetes relacionados con pdf

$ emerge --searchdesc pdf

Cuando eche un vistazo al resultado, notará que le proporciona mucha información. Los campos son etiquetados claramente con lo cual no entraremos en explicar sus significados.

Listado de Código 3.3: Ejemplo de salida de emerge --search

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2

Instalar Software

Una vez que haya encontrado el nombre del software que necesite, puede fácilmente instalarlo con emerge: simplemente añada el nombre del paquete. Por ejemplo, para instalar gnumeric:

Listado de Código 3.4: Instalar gnumeric

# emerge gnumeric

Muchas aplicaciones dependen unas de otras, esto implica que cualquier intento de instalar un cierto paquete de software podría derivar en la instalación de varias dependencias. No se preocupe. Portage maneja también las dependencias. Si quiere conocer qué instalará Portage cuando le pida que instale un cierto paquete, añada la opción --pretend. Por ejemplo:

Listado de Código 3.5: Simular la instalación de gnumeric

# emerge --pretend gnumeric

Cuando le pida a Portage que instale un paquete, descargará las fuentes necesarias desde Internet (si fuera necesario) y las guardará por defecto en /usr/portage/distfiles. Después, el paquete será descomprimido, compilado e instalado. Si quiere que portage solamente descargue las fuentes sin instalarlas, añada la opción --fetchonly a la orden emerge:

Listado de Código 3.6: Descargar el código fuente de gnumeric

# emerge --fetchonly gnumeric

Encontrar la documentación de un paquete instalado

Muchos paquetes vienen con su propia documentación. Algunas veces, el ajuste USE doc determina si la documentación debe instalarse o no. Puede comprobar la existencia del ajuste USE doc con la orden emerge -vp <nombre paquete>.

Listado de Código 3.7: Comprobar la existencia del ajuste USE doc

(alsa-lib es tan solo un ejemplo)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.14_rc1  -debug +doc 698 kB

La mejor manera de activar el ajuste USE doc es por paquete, por medio de /etc/portage/package.use, de manera que solo obtendrá la documentación para los paquetes que le interesan. Activando este ajuste de manera global puede causar problemas con dependencias circulares. Para más información, por favor lea el capítulo acerca de los Ajustes USE.

Una vez que el paquete está instalado, su documentación se encuentra normalmente en un subdirectorio llamado igual que el paquete, bajo el directorio /usr/share/doc. También puede obtener un listado de todos los archivos instalados con la herramienta equery la cual es parte del paquete app-portage/gentoolkit.

Listado de Código 3.8: Localizar la documentación de un paquete

# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1
 total 28
 -rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
 -rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
 drwxr-xr-x  2 root root 8560 May 17 21:54 html
 -rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

 (Como alternativa, utilizamos equery para localizar los
 archivos que nos interesan:)
 # equery files alsa-lib | less
 media-libs/alsa-lib-1.0.14_rc1
 * Contents of media-libs/alsa-lib-1.0.14_rc1:
 /usr
 /usr/bin
 /usr/bin/alsalisp
 (salida cortada)

Desinstalando Software

Cuando quiera desinstalar un paquete software de su sistema, utilice emerge --unmerge. Esto le indicará a Portage que desinstale todos los archivos instalados por el paquete en su sistema excepto los archivos de configuración de esa aplicación si la había modificado después de la instalación. Esto le permite continuar trabajando con los mismos archivos de configuración si alguna vez decide volver a instalar la aplicación.

Sin embargo, hemos de tener algo muy en cuenta: Portage no comprueba si el paquete que está intentando desinstalar es necesario para algún otro. A pesar de esto, le avisará cuando quiera eliminar un paquete importante que pueda romper su sistema si lo desinstala.

Listado de Código 3.9: Desinstalar gnumeric del sistema

# emerge --unmerge gnumeric

Cuando desinstala un paquete de su sistema, las dependencias de ese paquete que se instalaron automáticamente cuando instaló el software, permanecerán. Para hacer que Portage localice todas las dependencias que puede ser eliminadas actualmente, utilice la funcionalidad de emerge --depclean. Hablaremos de esto un poco más adelante.

Actualizando su Sistema

Para mantener su sistema en perfecto estado (sin mencionar la instalación de los últimas actualizaciones de seguridad) necesita actualizarlo frecuentemente. Partiendo de que Portage solamente comprueba los ebuilds en su árbol Portage, lo primero sería actualizar el propio árbol. Cuando tenga el árbol Portage actualizado, puede actualizar su sistema con emerge --update @world. En el siguiente ejemplo, además hemos utilizado la opción --ask que le indica a Portage que muestre la lista de paquetes que quiere actualizar y pregunte si se quiere continuar:

Listado de Código 3.10: Actualizar su sistema

# emerge --update --ask @world

Portage buscará entonces las nuevas versiones de las aplicaciones que explícitamente haya instalado (las listadas en /var/lib/portage/world), sin embargo, no revisa minuciosamente sus dependencias. Si desea actualizar también esas dependencias, añada la opción --deep:

Listado de Código 3.11: Actualizar su sistema incluyendo las dependencias

# emerge --update --deep @world

Aunque esto no indica todos los paquetes: algunos paquetes de su sistema son necesarios durante los procesos de compilación y construcción de los paquetes, pero, una vez que los paquetes se han instalado, estas dependencias ya no se necesitan. Portage denomina a éstas dependencias de construcción (build dependencies). Para incluirlas en un ciclo de actualización, añada --with-bdeps=y:

Listado de Código 3.12: Actualizar su sistema completamente

# emerge --update --deep --with-bdeps=y @world

Ya que las actualizaciones de seguridad también afectan a paquetes que no han sido explícitamente instalados en el sistema (pero que son dependencias de otros programas), es recomendable ejecutar la orden de arriba de vez en cuando.

Si ha cambiado últimamente alguno de sus ajustes USE quizá quiera añadir también --newuse. Portage comprobará si los cambios requieren la instalación de nuevos paquetes o la recompilación de los existentes:

Listado de Código 3.13: Realizar una actualización completa

# emerge --update --deep --with-bdeps=y --newuse @world

Meta-paquetes

Algunos paquetes del árbol Portage no tienen contenido real pero son utilizados para instalar un conjunto de paquetes. Por ejemplo, el paquete kde-meta instalará un entorno KDE completo en su sistema incluyendo varios paquetes relacionados con KDE y también sus dependencias.

Si quiere desinstalar dicho paquete de su sistema, ejecutando emerge --unmerge sobre el paquete no tendrá efecto total ya que las dependencias permanecerán en su sistema.

Portage tiene la funcionalidad de eliminar las dependencias huérfanas, pero la disponibilidad de software necesita que primero actualice completamente su sistema, incluyendo los nuevos cambios que ha aplicado si actualizó los ajustes USE. Después de esto, puede ejecutar emerge --depclean para eliminar las dependencias huérfanas. Cuando haya terminado, necesitará reconstruir las aplicaciones que estuvieran enlazadas dinámicamente a las que acaban de ser eliminadas pero no son necesarias.

Todo esto se lleva a cabo a través de tres órdenes:

Listado de Código 3.14: Desinstalar dependencias huérfanas

# emerge --update --deep --newuse @world
# emerge --depclean
# revdep-rebuild

revdep-rebuild es parte del paquete gentoolkit; no olvide instalarlo primero:

Listado de Código 3.15: Instalar el paquete gentoolkit

# emerge gentoolkit

1.d. Licencias

A partir de la versión 2.1.7 de Portage, puede aceptar o rechazar la instalación de software basada en esta licencia. Todos los paquetes del árbol contienen una entrada LICENSE en sus ebuilds. Ejecutando emerge --search nombredepaquete le mostrará la licencia del paquete.

Por defecto Portage permite todas las licencias, excepto Acuerdos Finales de la Licencia de Usuario (End User License Agreements o EULAs) que requieren la lectura y firma de un acuerdo de aceptación.

La variable que controla las licencias permitidas es ACCEPT_LICENSE, la cual se puede ajustar en /etc/portage/make.conf. En el siguiente ejemplo, se muestra este valor por defecto:

Listado de Código 4.1: Ajustar ACCEPT_LICENSE en /etc/portage/make.conf

ACCEPT_LICENSE="* -@EULA"

Con esta configuración, los paquetes que requieren interacción durante la instalación para aprobar su EULA no se podrán instalar. Los paquetes sin una EULA se podrán instalar.

Puede ajustar ACCEPT_LICENSE globalmente en /etc/portage/make.conf, o puede especificarlo en de forma que afecte a solo un paquete en /etc/portage/package.license.

Por ejemplo, si quiere permitir la licencia truecrypt-2.7 para app-crypt/truecrypt, añada lo siguiente a /etc/portage/package.license:

Listado de Código 4.2: Especificando una licencia truecrypt en package.license

app-crypt/truecrypt truecrypt-2.7

Esto permite la instalación de versiones de truecrypt que tengan la licencia truecrypt-2.7, pero no versiones con la licencia truecrypt-2.8.

Importante: Las licencias se almacenan en /usr/portage/licenses, y los grupos de licencias se guardan en /usr/portage/profiles/license_groups. La primera entrada de cada línea en letras MAYÚSCULAS, es el nombre del grupo de licencias, y cada entrada detrás de ésta es una licencia individual.

Los grupos de licencias definidos en ACCEPT_LICENSE se prefijan con un el símbolo @. Un ajuste que se demanda frecuentemente es el de permitir únicamente la instalación de software y documentación libres. Para conseguir esto, se pueden eliminar todas las licencias aceptadas (mediante -*) y a continuación permitir solo las licencias en el grupo FREE, tal y como se muestra a continuación:

Listado de Código 4.3: Permitir únicamente las licencias de software y documentación libres en /etc/portage/make.conf

ACCEPT_LICENSE="-* @FREE"

En este caso, "free" está definido por la FSF y la OSI. Cualquier paquete cuya licencia no se ajuste a estos requisitos no se podrá instalar en su sistema.

1.e. Cuando Portage se queja...

Sobre SLOTs, paquetes virtuales, ramas, arquitecturas y perfiles

Como mencionamos anteriormente, Portage es muy potente y soporta muchas características de las que carecen otras herramientas de gestión de software. Para comprender esto, explicaremos unos cuantos aspectos de Portage sin profundizar demasiado en los detalles.

Con Portage, diferentes versiones de un mismo paquete pueden coexistir en un sistema. Mientras otras distribuciones tienden a renombrar el paquete con sus versiones (por ejemplo freetype and freetype2). Portage usa una tecnología llamada SLOTs (ranuras). Un ebuild declara un cierto SLOT para su versión. Ebuilds con diferentes SLOTs pueden coexistir en el mismo sistema. Por ejemplo, el paquete freetype tiene ebuilds con SLOT="1" y SLOT="2".

También existen paquetes que proporcionan la misma funcionalidad pero están implementados de maneras distintas. Por ejemplo, metalogd, sysklogd y syslog-ng son todos paquetes de registro del sistema. Aplicaciones que necesitan la disponibilidad de un "registrador del sistema" no pueden depender, por ejemplo, de metalogd, ya que el resto de registradores del sistema son igualmente válidos. Portage permite virtuals: cada paquete de registro del sistema se lista como una dependencia "exclusiva" del servicio de registro en el paquete virtual logger de la categoría virtual, de esta forma las aplicaciones pueden depender del paquete virtual/logger. Cuando se instala el paquete, se obtendrá el primer paquete de registro mencionado, a menos que ya se haya instalado previamente un paquete que ofrezca el servicio (en este caso, la dependencia virtual ya está satisfecha).

Los programas en el árbol Portage puede residir en diferentes ramas. Por defecto, su sistema solamente acepta paquetes que Gentoo considera estables. La mayoría de los paquetes nuevos, cuando son aceptados, ingresan en la rama inestable. Esto implica que necesitan hacerse más pruebas antes de marcarlo como estable. Aunque puede ver los ebuilds de ese software en su árbol de Portage, Portage no los actualizará hasta que sean marcados como estables.

Algunos programas solo están disponibles para unas pocas arquitecturas. O los programas no funcionan en otras arquitecturas, o necesitan más pruebas, o el desarrollador que añade el programa a Portage no es capaz de verificar si el paquete funciona en diferentes arquitecturas.

Cada instalación de Gentoo adhiere un cierto perfil el cual contiene, entre otra información, la lista de paquetes necesarios para que el sistema funcione normalmente.

Paquetes bloqueados

Listado de Código 5.1: Aviso de Portage sobre paquetes bloqueados (con --pretend)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

Listado de Código 5.2: Aviso de Portage sobre paquetes bloqueados (sin --pretend)

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers.

Los Ebuilds contienen campos específicos que informan a Portage sobre sus dependencias. Hay dos posibles dependencias: dependencias de compilación, declaradas en DEPEND y dependencias en tiempo de ejecución, declaradas en RDEPEND. Cuando una de estas dependencias marca explícitamente un paquete o paquete virtual como no compatible, se dispara un bloqueo.

Aunque las versiones recientes de Portage son lo suficientemente inteligentes para resolver los bloqueos de menor importancia sin necesidad de la intervención del usuario, ocasionalmente necesitará resolverlo a mano como se explica abajo.

Para solucionar un bloqueo, puede elegir no instalar el paquete o desinstalar primero el paquete conflictivo. En el ejemplo anterior, puedes optar por no instalar postfix o eliminar primero ssmtp.

También puede ocurrir que vea los paquetes en conflicto con operadores lógicos concretos, como por ejemplo <media-video/mplayer-1.0_rc1-r2. En este caso, actualizar a la versión más reciente del paquete bloqueante debería eliminar el bloqueo.

También es posible que dos paquetes que aún no se han instalado se estén bloqueando mutuamente. En este caso (poco frecuente), se debería investigar por que necesitamos instalar ambos. En la mayoría de los casos se puede realizar con uno solo de los paquetes. Si no, por favor envíe un informe de error al sistema de seguimiento de errores de Gentoo.

Paquetes enmascarados (masked)

Listado de Código 5.3: Aviso de Portage sobre paquetes enmascarados

!!! all ebuilds that could satisfy "bootsplash" have been masked.

Listado de Código 5.4: Aviso de Portage sobre paquetes enmascarados - razón

!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
- net-im/skype-2.1.0.81 (masked by: skype-eula license(s))

Cuando quiera instalar un paquete que no está disponible para su sistema, recibirá un error de enmascaramiento. Debería probar a instalar una aplicación distinta que este disponible para su sistema o esperar hasta que el paquete este disponible. Siempre hay una razón para que un paquete esté enmascarado:

  • ~arch keyword implica que la aplicación no esta probada lo suficiente para ser parte de la rama estable. Espere unos cuantos días o semanas y vuelva a intentarlo.
  • -arch keyword o -* keyword implica que la aplicación no funciona en su arquitectura. Si cree que el paquete funcionará, cree un bug en nuestro sitio web bugzilla.
  • missing keyword indica que la aplicación aún no ha sido probada para su arquitectura. Pida al correspondiente equipo de arquitectura que pruebe el paquete o pruébelo por ellos e informe de su experiencia en nuestro sitio web bugzilla.
  • package.mask implica que el paquete se ha encontrado corrupto, inestable o peor y ha sido marcada deliberadamente para que no se use.
  • profile implica que el paquete no está disponible para su perfil. La aplicación podría romper su sistema si la instala o no es compatible con el perfil que está usando.
  • license significa que la licencia del paquete no es compatible con su ajuste ACCEPT_LICENSE. Debe permitir explícitamente su licencia o grupo de licencias ajustándolo en /etc/portage/make.conf o en /etc/portage/package.license. Consulte Licencias para aprender cómo se gestionan las licencias.

Cambios necesarios en los ajustes USE

Listado de Código 5.5: Advertencia de Portage acerca de cambios requeridos en los ajustes USE

The following USE changes are necessary to proceed:
#required by app-text/happypackage-2.0, required by happypackage (argument)
>=app-text/feelings-1.0.0 test

También puede que se muestre el siguiente mensaje de error, si no se ha habilitado --autounmask:

Listado de Código 5.6: Error de Portage acerca de cambios requeridos en los ajustes USE

emerge: there are no ebuilds built with USE flags to satisfy "app-text/feelings[test]".
!!! One of the following packages is required to complete your request:
- app-text/feelings-1.0.0 (Change USE: +test)
(dependency required by "app-text/happypackage-2.0" [ebuild])
(dependency required by "happypackage" [argument])

Esta advertencia y error suceden cuando se quiere instalar un paquete que no solo depende de otro paquete, sino que requiere que ese paquete se haya construido con un ajuste USE en particular (o un conjunto de ajustes USE). En el ejemplo dado, el paquete app-text/feelings necesita construirse con USE="test", sin embargo, este ajuste USE no está habilitado en el sistema.

Para resolver esta situación, puede añadir el ajuste USE requerido a sus ajustes globales en /etc/portage/make.conf, o definirlo específicamente para el paquete en /etc/portage/package.use.

Dependencias perdidas

Listado de Código 5.7: Aviso de Portage sobre dependencias perdidas

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3-4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.

La aplicación que está tratando instalar depende de otro paquete que no esta disponible para su sistema. Por favor, compruebe bugzilla para ver si el problema se conoce o no, en este caso informe de ello. A menos que este mezclando ramas esto no debería ocurrir y lo consideraremos un error.

Nombre ambiguo del Ebuild

Listado de Código 5.8: Aviso de Portage sobre nombre ambiguos en ebuild

[ Results for search key : listen ]
[ Applications found : 2 ]

*  dev-tinyos/listen [ Masked ]
      Latest version available: 1.1.15
      Latest version installed: [ Not Installed ]
      Size of files: 10,032 kB
      Homepage:      http://www.tinyos.net/
      Description:   Raw listen for TinyOS
      License:       BSD

*  media-sound/listen [ Masked ]
      Latest version available: 0.6.3
      Latest version installed: [ Not Installed ]
      Size of files: 859 kB
      Homepage:      http://www.listen-project.org
      Description:   A Music player and management for GNOME
      License:       GPL-2

!!! The short ebuild name "listen" is ambiguous. Please specify
!!! one of the above fully-qualified ebuild names instead.

La aplicación que quiere instalar tiene un nombre que corresponde con más de un paquete. Necesita aportar también el nombre de la categoría. Portage le informará de los posibles casos entre los que puede elegir.

Dependencias Circulares

Listado de Código 5.9: Aviso de Portage sobre dependencias circulares

!!! Error: circular dependencies:

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2

Dos (o más) paquetes que quiere instalar dependen uno de otro y, por tanto, no pueden instalarse. Esto casi siempre se considera un error en el árbol Portage. Por favor, vuelva a sincronizar después de un tiempo e inténtelo de nuevo. También puede comprobar bugzilla para saber si se tiene conocimiento sobre el tema o si no, en cuyo caso informe sobre ello.

Fallo en la descarga

Listado de Código 5.10: Aviso de Portage sobre un fallo en la descarga

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portage no es capaz de descargar las fuentes para una aplicación específica y tratará de continuar instalando el resto de aplicaciones (si es posible). Este fallo puede deberse a que un servidor réplica no esta bien sincronizado o a que el ebuild apunta a una localización incorrecta. El servidor donde residen las fuentes podría estar caído por alguna razón.

Pruebe después de una hora y vea si el problema persiste.

Protección del Perfil de Sistema

Listado de Código 5.11: Aviso de Portage sobre un paquete protegido por perfil

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

Está intentando eliminar un paquete que es parte del fundamental de su sistema. Éste se haya en su perfil y es necesario, por tanto, no debería ser eliminado del sistema.

Errores en la verificación del digest

A veces, al intentar hacer emerge a un paquete, éste fallará, con el siguiente mensaje:

Listado de Código 5.12: Falla en la suma de control

>>> checking ebuild checksums

Esta es una señal que hay algún problema con el árbol Portage -- muchas veces esto es porque un desarrollador ha cometido una equivocación al ingresar un paquete en el árbol.

Cuando falla la verificación del digest, no intente recalcularlo. El ejecutar ebuild foo manifest no va a resolver el problema; seguramente ¡lo empeorará!

En lugar de esto, espere una o dos hora que el árbol estabilice. Es probable que el error haya sido detectado enseguida, pero podrá tomar algún tiempo para que propague la corrección al árbol Portage. Mientras espera, revise Bugzilla a ver si alguien ha reportado el problema, si no, siga adelante y archive un "bug" reportando el paquete roto.

Una vez que compruebe que el error ha sido reparado, tal vez quiera re-sincronizar para recoger la suma de control reparada.

Importante: ¡Esto no implica que vaya re-sincronizar su árbol Portage múltiples veces! Tal como se establece en la directriz de rsync (al ejecutar emerge --sync), los usuarios que sincronicen con demasiada frecuencia ¡serán bloqueados! De hecho, es mejor esperar a su próxima sincronización programada para no sobrecargar los servidores rsync.

2. Los parámetros USE

2.a. ¿Qué son los ajustes USE?

Las ideas que hay detrás de los ajustes USE

Mientras esté instalando Gentoo (o cualquier otra distribución, incluso otro sistema operativo), tomará varias decisiones dependiendo del entorno en el que esté trabajando. Una instalación para un servidor es distinta a una para una estación de trabajo. También una estación de trabajo dedicada a juegos es diferente a una estación de trabajo que se use para renderizados en 3D.

Estas diferencias no solo dependen de los paquetes instalados, si no también de las características para las que ciertos paquetes tienen soporte. Si no necesita OpenGL, ¿para qué molestarse en instalar OpenGL y construir la mayoría de sus aplicaciones con soporte OpenGL? Si no quiere usar KDE, ¿para qué molestarte en compilar paquetes con soporte para KDE si podrían funcionar perfectamente sin él?

Para ayudar a los usuarios a decidir qué instalar/activar o no, necesitamos que el usuario especifique su entorno de una manera sencilla. Esto obliga al usuario a decidir que es lo que realmente quiere; además de facilitar a Portage, nuestro sistema de gestión de paquetes, la tarea de tomar decisiones útiles.

Definición de un ajuste USE

Comencemos por definir qué son los ajustes USE. Un ajuste USE es una palabra clave que incorpora información de soporte y dependencias para un concepto en concreto. Si define un determinado ajuste USE, Portage sabrá que el usuario desea soporte para la palabra clave escogida. Por supuesto, también altera las dependencias de un paquete.

Veamos un ejemplo específico: la palabra clave kde. Si no la tiene en su variable USE, todos los paquetes que tengan soporte opcional para KDE se construirán sin él. Los que tengan una dependencia opcional con KDE se instalarán sin instalar las librerías de KDE (como dependencia). Si ha definido la palabra clave kde, entonces dichos paquetes se construirán con soporte para KDE, y las librería de KDE serán instaladas

Definiendo correctamente las palabras clave, conseguirá un sistema confeccionado específicamente para sus necesidades.

¿Qué ajustes USE existen?

Hay dos tipos de ajustes USE: globales y locales.

  • Un ajuste USE global lo usan varios paquetes, en todo el sistema. Es lo que la mayoría de la gente entiende como ajustes USE.
  • Un ajuste USE local lo utiliza un solo paquete para tomar decisiones específicas para dicho paquete.

Puede encontrar una lista de los ajustes USE globales en línea o localmente en /usr/portage/profiles/use.desc.

Se puede encontrar una lista de los ajustes USE locales en línea o localmente en /usr/portage/profiles/use.local.desc.

2.b. Usando los ajustes USE

Declarar ajustes USE permanentes

Esperamos que se haya convencido de la importancia de los ajustes USE. Ahora pasaremos a explicar como se declaran estos ajustes.

Como ya se ha dicho anteriormente, todos los ajustes USE se declaran dentro de la variable USE. Para simplificar al usuario la tarea de buscar y escoger ajustes USE, ya proporcionamos una configuración predeterminada. Esta configuración es un compendio de ajustes que creemos se utilizan frecuentemente por los usuarios de Gentoo. Dicha configuración predeterminada se declara en los ficheros make.defaults que forman parte de su perfil.

El perfil al que atiende su sistema lo indica el enlace simbólico /etc/portage/make.profile. Cada perfil funciona sobre otro, más extenso, y el resultado final es una suma de todos ellos. El perfil más alto es el perfil base (/usr/portage/profiles/base).

Echemos un vistazo a la configuración predeterminada para el perfil 13.0:

Listado de Código 2.1: Variable USE acumulada de make.defaults para el perfil 13.0

(Este es un ejemplo de la suma de configuraciones en: base, default/linux, default/linux/x86 y default/linux/x86/13.0/)
USE="a52 aac acpi alsa branding cairo cdr dbus dts dvd dvdr emboss encode exif
fam firefox flac gif gpm gtk hal jpeg lcms ldap libnotify mad mikmod mng mp3
mp4 mpeg ogg opengl pango pdf png ppds qt3support qt4 sdl spell
startup-notification svg tiff truetype vorbis unicode usb X xcb x264 xml xv
xvid"

Como puede ver, esta variable contiene bastantes palabras clave. No modifique el fichero make.defaults para ajustar la variable USE a sus necesidades: ¡los cambios se perderán al actualizar el árbol del Portage!

Para modificar esta configuración predeterminada, necesita añadir o eliminar palabras clave a la variable USE. Para llevarlo a cabo, se define la variable USE en /etc/portage/make.conf. En esta variable añada los ajustes USE que necesite o elimine los que no quiera. Para eliminarlos coloque el símbolo menos ("-") delante.

Por ejemplo, para eliminar el soporte para KDE y QT además de añadir soporte para ldap, puede definirse el siguiente ajuste USE en /etc/portage/make.conf:

Listado de Código 2.2: Un ejemplo de confirmación USE en /etc/portage/make.conf

USE="-kde -qt4 ldap"

Declarar ajustes USE para paquetes específicos

A veces le interesará establecer un cierto ajuste USE tan solo para una o dos aplicaciones, pero no para todo el sistema. Para solventar, esto, necesitará crear el directorio /etc/portage (si no existiera) y editar /etc/portage/package.use. Esta ruta es generalmente un único fichero pero podria ser un directorio; vea man portaga para más información. Los siguientes ejemplos asumirán que package.use es un único fichero.

Por ejemplo, si no le interesa soporte global para berkdb pero lo quiere para mysql, necesita añadir:

Listado de Código 2.3: Ejemplo de /etc/portage/package.use

dev-db/mysql berkdb

Por supuesto también puede desactivar el empleo específico de un ajuste USE para una aplicación en concreto. Por ejemplo si no quiere soporte para java en PHP:

Listado de Código 2.4: Segundo ejemplo de /etc/portage/package.use

dev-php/php -java

Declarar ajustes USE temporales

A veces necesitará utilizar una cierta configuración de USE tan solo una vez. En lugar de editar /etc/portage/make.conf dos veces (una para hacer y otra para deshacer los cambios) puede declarar la variable USE como una variable de entorno. Recuerde que, si utiliza este método, cuando vuelva a emerger o actualice este aplicación (tanto si es particular como si forma parte de una actualización del sistema) ¡Perderá los cambios!

Como ejemplo, vamos a eliminar temporalmente el ajuste USE java durante la instalación de seamonkey.

Listado de Código 2.5: Utilizar USE como una variable de entorno

# USE="-java" emerge seamonkey

Precedencia

Por supuesto, hay una determinada precedencia respecto a qué configuración tiene prioridad sobre la configuración del USE. No querrá declarar USE="-java" y comprobar posteriormente que java continua utilizándose debido a una configuración que tiene mayor prioridad. La precedencia para la configuración del USE es (el primero tiene la mínima prioridad):

  1. Configuración predeterminada de USE declarada en los archivos make.defaults de su perfil.
  2. Configuración definida por el usuario en /etc/portage/make.conf
  3. Configuración definida por el usuario en /etc/portage/package.use
  4. Configuración definida por el usuario como variable de entorno

Para observar el valor final del USE tal y como lo verá Portage, ejecute emerge --info. Se listarán una serie de variables importantes (incluyendo la variable USE) con sus valores correspondientes.

Listado de Código 2.6: Ejecutar emerge info

# emerge --info

Adaptar su sistema completamente a los nuevos ajustes USE

Si ha cambiado sus ajustes USE y desea actualizar todo su sistema para que utilice el nuevo ajuste, utilice la opción de emerge llamada --newuse:

Listado de Código 2.7: Recompilar todo el sistema

# emerge --update --deep --newuse @world

A continuación, ejecute una limpieza completa de Portage para eliminar las dependencias que habían sido instaladas en su "antiguo" sistema pero que han quedado obsoletas por los nuevos ajustes USE.

Aviso: Ejecutar emerge depclean es una operación peligrosa y debería tratarse con cuidado. Revise en profundidad la lista de paquetes "obsoletos" y asegúrese de que no elimina ningún paquete que necesite. En el siguiente ejemplo hemos añadido -p para mostrar la lista de paquetes que serían eliminados pero sin eliminarlos físicamente.

Listado de Código 2.8: Desinstalar los paquetes obsoletos

# emerge -p depclean

Cuando haya finalizado la limpieza, ejecute revdep-rebuild para recompilar las aplicaciones que están enlazadas dinámicamente con los objetos que proporcionaban los paquetes eliminados. revdep-rebuild forma parte del paquete gentoolkit; no olvide hacer emerge primero.

Listado de Código 2.9: Ejecutar revdep-rebuild

# revdep-rebuild

Cuando todo esto haya terminado, su sistema estará utilizando la nueva configuración de los ajustes USE.

2.c. Ajuste USE específicos de un paquete

Viendo los ajustes USE disponibles

Veamos el ejemplo de seamonkey: ¿Qué ajustes USE influyen sobre él? Para averiguarlo, usamos emerge con las opciones --pretend (simula llevar a cabo la acción) y --verbose (obtener una salida más detallada):

Listado de Código 3.1: Ver los ajustes USE utilizados

# emerge --pretend --verbose seamonkey
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java -debug -ipv6
-ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
-moznoroaming -postgres -xinerama -xprint" 0 kB

emerge no es la única herramienta disponible para esta labor. De hecho, tenemos una herramienta llamada equery dedicada a obtener información sobre los paquetes; la cual se encuentra en el paquete gentoolkit. En primer lugar, instale gentoolkit:

Listado de Código 3.2: Instalar gentoolkit

# emerge gentoolkit

Ahora ejecute equery con el argumento uses para ver los ajustes USE de un paquete en concreto. Por ejemplo, en el caso del paquete gnumeric:

Listado de Código 3.3: Utilizar equery para ver los ajustes USE utilizados

# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column  (U) - USE flags from make.conf              ]
[        : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
 U I
 - - debug  : Enable extra debug codepaths, like asserts and extra output.
              If you want to get meaningful backtraces see
              http://www.gentoo.org/proj/en/qa/backtraces.xml .
 + + gnome  : Adds GNOME support
 + + python : Adds support/bindings for the Python language
 - - static : !!do not set this during bootstrap!! Causes binaries to be
              statically linked instead of dynamically

3. Características de Portage

3.a. Características de Portage

Portage tiene varias características adicionales que hacen de su experiencia con Gentoo algo mucho mejor. Muchas de estas características residen en ciertas herramientas software que mejoran el rendimiento, la estabilidad, la seguridad, ...

Para activar o desactivar ciertas características de Portage necesita editar la variable FEATURES del archivo /etc/portage/make.conf. Esta variable contiene una lista con las palabras clave de cada característica separadas por un espacio en blanco. En algunos casos necesita además instalar la herramienta que implementa la característica.

No todas las características que soporta Portage están aquí reflejadas. Para una consulta completa por favor revise la página de la ayuda referente a make.conf

Listado de Código 1.1: Consultar la página de ayuda sobre make.conf

$ man make.conf

Para conocer qué características están siendo utilizadas por defecto, ejecute emerge --info y busque la variable FEATURES o utilice grep:

Listado de Código 1.2: Conocer qué características están definidas

$ emerge --info | grep ^FEATURES=

3.b. Compilación Distribuida

Usar distcc

distcc es un programa para distribuir un trabajo de compilación a través de muchas, no necesariamente idénticas, máquinas en una red. Los clientes de distcc envían toda la información necesaria a los servidores DistCC disponibles (corriendo distccd) así pueden compilar trozos de código fuente para el cliente. El resultado final, es un tiempo de compilación más rápido.

Puede encontrar información más detallada sobre distcc (e información de como tenerlo funcionando sobre Gentoo) en nuestra Documentación Gentoo sobre Distcc.

Instalar distcc

Distcc se distribuye con un monitor gráfico para monitorizar las tareas que su computador está enviando para compilar. Si usa Gnome entonces ponga 'gnome' en su configuración USE. De todas formas, si no usa Gnome pero sigue deseando disponer de un monitor, entonces debería poner 'gtk' en su configuración USE.

Listado de Código 2.1: Instalar distcc

# emerge distcc

Activar el soporte en Portage

Añada distcc a la variable FEATURES dentro de /etc/portage/make.conf. Hecho esto, edite la variable MAKEOPTS conforme a sus necesidades. Una pauta conocida para configurarla es poner -jX con X representando el número de CPUs que ejecutan distccd (incluyendo la máquina local) más uno, pero quizá obtenga mejores resultados con otros números.

Ahora ejecute distcc-config y cree una lista de los servidores distcc disponibles. Para un ejemplo simple, supondremos que los servidores DistCC son 192.168.1.102 (el host local), 192.168.1.103 y 192.168.1.104 (los dos hosts "remotos"):

Listado de Código 2.2: Configurar distcc para usar los tres servidores DistCC disponibles

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

Por supuesto, no se olvide ejecutar también el demonio distccd:

Listado de Código 2.3: Arrancar el demonio distcc

# rc-update add distccd default
# /etc/init.d/distccd start

3.c. Compilación utilizando caché

Acerca de ccache

ccache es un caché de compilación rápida. Cuando compila un programa, puede cachear resultados intermedios, de forma que, si recompila el mismo programa, el tiempo de compilación se reducirá ampliamente. La primera vez que se ejecuta ccache, ésta será más lenta que una compilación normal. Recompilaciones posteriores deberían ser más rápidas. La herramienta ccache solo es útil si va a recompilar la misma aplicación muchas veces; por lo tanto en la mayoría de los casos es útil únicamente para los desarrolladores de software.

Si esta interesado en los pros y los contras de ccache, por favor visite la página web de ccache.

Aviso: ccache puede causar numerosos fallos de compilación. Algunas veces ccache mantendrá objetos con código obsoleto o ficheros corruptos que pueden llevar a que no se pueda hacer emerge de ciertos paquetes. Si esto ocurre (Si obtiene errores como "File not recognized: File truncated"), intente recompilar la aplicación con ccache deshabilitado (FEATURES="-ccache" en /etc/portage/make.conf) antes de informar de una incidencia bug. A menos que esté realizando trabajo de desarrollo, no active ccache.

Instalar ccache

Para instalar ccache, ejecute emerge ccache:

Listado de Código 3.1: Instalar ccache

# emerge ccache

Activar el Soporte en Portage

Primero, edite el fichero /etc/portage/make.conf y añada a la variable FEATURES la palabra clave ccache. A continuación, añada una nueva variable llamada CCACHE_SIZE y dele el valor "2G":

Listado de Código 3.2: Editar CCACHE_SIZE en /etc/portage/make.conf

CCACHE_SIZE="2G"

Para comprobar si ccache funciona, pídale a ccache que te muestre las estadísticas. Ya que Portage utiliza un directorio diferente para guardar los datos, se necesita fijar la variable CCACHE_DIR para reflejar esto:

Listado de Código 3.3: Observar las estadísticas de ccache

# CCACHE_DIR="/var/tmp/ccache" ccache -s

La ruta /var/tmp/ccache es el directorio por defecto que emplea Portage para ccache; si quiere cambiar esta variable, configure CCACHE_DIR en /etc/portage/make.conf.

Sin embargo, si ejecuta ccache, empleará como directorio por defecto ${HOME}/.ccache, que es la razón por la cual necesita configurar la variable CCACHE_DIR cuando se le pide a Portage que muestre las estadísticas de ccache.

Utilizar ccache para compilaciones de C sin relación con Portage

Si quiere utilizar ccache para compilaciones que no tengan que ver con Portage, añada /usr/lib/ccache/bin al principio de su variable PATH (antes de /usr/bin). Esto puede llevarse a cabo editando el fichero .bash_profile de su directorio home de usuario. .bash_profile es una de las maneras de definir las variables PATH.

Listado de Código 3.4: Editar .bash_profile

PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"

3.d. Soporte para Paquetes Binarios

Crear paquetes binarios

Portage soporta la instalación de paquetes precompilados. A pesar de que Gentoo no proporciona paquetes precompilados por sí mismo, Portage puede funcionar perfectamente con paquetes precompilados.

Para crear un paquete precompilado puede utilizar quickpkg si el paquete está instado en su sistema, o emerge con las opciones --buildpkg o --buildpkgonly.

Si quiere que Portage cree paquetes precompilados de cada paquete individual que instale, añada buildpkg a la variable FEATURES.

Puede encontrar mayor soporte para la creación de conjuntos de paquetes precompilados con catalyst. Para más información sobre catalyst, por favor lea las Preguntas frecuentes sobre Catalyst (en inglés).

Instalar Paquetes Precompilados

A pesar de que Gentoo no proporciona uno, puede crear un repositorio central donde almacene paquetes precompilados. Si quiere utilizar este repositorio, necesita que Portage lo conozca a través de la variable PORTAGE_BINHOST que debe apuntar al repositorio. Por ejemplo, si los paquetes precompilados están en ftp://buildhost/gentoo:

Listado de Código 4.1: Configurar PORTAGE_BINHOST en /etc/portage/make.conf

PORTAGE_BINHOST="ftp://buildhost/gentoo"

Cuando quiera instalar un paquete precompilado, añada la opción --getbinpkg a la orden emerge junto a la opción --usepkg. La primera le indica a emerge que descargue el paquete precompilado del servidor definido previamente, mientras que el segundo indica a emerge que intente instalar el paquete precompilado antes de buscar el código fuente y compilarlo.

Por ejemplo, para instalar gnumeric a través de paquetes precompilados:

Listado de Código 4.2: Instalar el paquete precompilado gnumeric

# emerge --usepkg --getbinpkg gnumeric

Más información sobre las opciones para utilizar paquetes precompilados con emerge puede consultarse en la página de la ayuda:

Listado de Código 4.3: Leer la página de ayuda sobre emerge

$ man emerge

3.e. Descargar los Ficheros

Parallel fetch

Al hacer emerge a una serie de paquetes, Portage puede obtener las fuentes para el siguiente paquete en el lista aún mientras está compilando otro paquete, acortando los tiempos de instalación. Para hacer uso de esta opción agregue "parallel-fetch" a su variable FEATURES. Observe que está activada por defecto de modo que no necesitaría activarla explícitamente.

Userfetch

Cuando Portage se ejecuta por el usuario root, FEATURES="userfetch" permitirá que Portage ejecute sin los privilegios de superusuario mientras obtiene las fuentes. Este es una pequeña mejora en la seguridad.

3.f. Obtener instantáneas validadas del árbol Portage

Como administrador, puede optar por actualizar únicamente su árbol Portage local con una instantánea del árbol validada criptográficamente tal y como publica el equipo de infraestructura de Gentoo. Con esto se asegura que ningún otro servidor réplica falso está añadiendo código no deseado u otros paquete en el árbol que está descargando.

Para configurar Portage, en primer lugar cree un almacén de confianza en el cual pueda descargar y aceptar las claves del equipo de infraestructura de Gentoo responsable del firmado de las instantáneas del árbol Portage. Desde luego, si lo desea puede validar esta clave GPG tal y como muestran estas instrucciones (por ejemplo comprobar la huella digital). Puede encontrar una lista de las claves GPG usadas por el equipo de ingeniería de lanzamientos en su página de proyecto.

Listado de Código 6.1: Crear un almacén de confianza para Portage

# mkdir -p /etc/portage/gpg
# chmod 0700 /etc/portage/gpg
(... Sustituya las claves con las mencionadas en el sitio del
proyecto de ingeniería de lanzamientos ...)
# gpg --homedir /etc/portage/gpg --keyserver subkeys.pgp.net --recv-keys 0xDB6B8C1F96D8BF6D
# gpg --homedir /etc/portage/gpg --edit-key 0xDB6B8C1F96D8BF6D trust

A continuación, edite el fichero /etc/portage/make.conf y active el soporte para la validación de las instantáneas del árbol Portage firmadas (usando FEATURES="webrsync-gpg") y deshabilite la actualización del árbol Portage usando el método común emerge --sync.

Listado de Código 6.2: Actualizar make.conf

FEATURES="webrsync-gpg"
PORTAGE_GPG_DIR="/etc/portage/gpg"

Listado de Código 6.3: Actualizar repos.conf

# Asegúrese de que sync-type y sync-uri están comentadas
# sync-type = rsync
# sync-uri = ...

Eso es todo. La próxima vez que ejecute emerge-webrsync, únicamente las instantáneas con una firma válida se expandirán en su sistema de ficheros.

4. Guiones de inicio

4.a. Niveles de ejecución

Iniciando su sistema

Al iniciar, notará que pasará al frente suyo una gran cantidad de texto. Si pone atención, notará que estos textos son iguales cada vez que reinicie su sistema. La secuencia de todas estas acciones se llama la secuencia de inicio y es (más o menos) definido estáticamente.

En primer lugar, su gestor de arranque cargará en memoria la imagen del núcleo que definió en la configuración del gestor de arranque, después de lo cual, se indica a la CPU que debe ejecutar el núcleo. Al ser cargado y luego ejecutado inicializa todas las estructuras y tareas específicas del núcleo e inicia el proceso init.

Este proceso asegura que todos los sistemas de archivo (definidos en /etc/fstab) estén montados y listos para usar. Luego ejecuta varios guiones en /etc/init.d, correspondientes a los servicios requeridos para tener un sistema correctamente iniciado.

Finalmente, al concluir la ejecución de los guiones, init activa los terminales (generalmente solo las consolas virtuales accesibles con Alt-F1, Alt-F2, etc.) fijándoles un proceso especial denominado agetty. Este proceso hará posible que pueda ingresar al sistema a través de uno de estos terminales ejecutando login.

Guiones de inicio (init scripts)

Ahora bien, init no solamente ejecuta los guiones contenidos en /etc/init.d de manera aleatoria. Aún más, no ejecuta todos los guiones del /etc/init.d, solamente los que han sido seleccionados para ejecutar. Los guiones seleccionados para ejecutar se encuentran dentro del directorio /etc/runlevels.

Primero, init ejecuta todos los guiones de /etc/init.d cuyos vínculos simbólicos se encuentran dentro de /etc/runlevels/boot. Usualmente los iniciará en orden alfabético, pero algunos guiones tienen información relativa a dependencias, para lo cual otros guiones deben ser iniciados anteriormente.

Cuando se ejecuten todos los guiones referenciados en /etc/runlevels/boot, init continua su trabajo con los guiones en /etc/runlevels/default. Una vez más, usará el orden alfabético, salvo cuando hay dependencias, en cuyo caso es alterado el orden de inicio para realizar una secuencia válida de arranque.

¿Cómo funciona Init?

Por supuesto que init no decide todo eso por su cuenta. Requiere un archivo de configuración que especifica las acciones a tomar. Este archivo es /etc/inittab.

Si recuerda al secuencia de inicio recién explicada, recordará que la primera acción de init es montar todos los sistemas de archivo. Esto está definido en la siguiente línea de /etc/inittab:

Listado de Código 1.1: La línea de inicialización del sistema en /etc/inittab

si::sysinit:/sbin/rc sysinit

Esa línea dice a init que debe ejecutar /sbin/rc sysinit al iniciar el sistema. Los guiones /sbin/rc se encargan de la inicialización, con lo que podríamos decir que init no hace mucho, delega la tarea de inicialización del sistema a otro proceso.

En segundo lugar, init ejecutó los guiones con vínculos simbólicos en /etc/runlevels/boot. Esto se define en la siguiente línea:

Listado de Código 1.2: Inicialización del sistema, continuada

rc::bootwait:/sbin/rc boot

Una vez más, el guión rc lleva a cabo las tareas necesarias. Note que la opción de rc (boot) corresponde al subdirectorio usado bajo /etc/runlevels.

Ahora init revisa su archivo de configuración para ver que nivel de ejecución debe ejecutar. Para decidirlo, lee la siguiente línea de /etc/inittab:

Listado de Código 1.3: La línea init por defecto (default)

id:3:initdefault:

En este caso (para la mayoría de usuarios Gentoo), el identificador del nivel de ejecución será el 3. Con esta información init revisa qué debe ejecutar para iniciar el nivel de ejecución 3:

Listado de Código 1.4: Definiciones de niveles de ejecución

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot

La línea que define el nivel 3, de nuevo usa el guión rc para iniciar los servicios (ahora con el parámetro por defecto default). Note una vez más que el parámetro pasado al guión rc corresponde al subdirectorio de /etc/runlevels.

Al terminar rc, init decide cuáles consolas virtuales debe activar y qué órdenes se deben ejecutar para cada una:

Listado de Código 1.5: Definición de las consolas virtuales

c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

¿Qué es un nivel de ejecución?

Ha visto que init utiliza un esquema de numeración para decidir cual nivel de ejecución debe activar. Un nivel de ejecución es un estado en el cual su sistema está corriendo y contiene guiones (del nivel de ejecución o initscripts) que serán ejecutados al ingresar o salir del nivel de ejecución.

En Gentoo, hay siete niveles de ejecución definidos: tres internos y cuatro definidos por el usuario. Los internos se llaman sysinit, shutdown y reboot y hacen exactamente lo que implican sus nombres, inicialización, apagado y reinicio del sistema.

Los niveles de ejecución definidos por el usuario están acompañados de un subdirectorio bajo /etc/runlevels: boot, default, nonetwork y single. El nivel de ejecución boot inicia los servicios necesarios que requieren los demás niveles de ejecución. Los tres niveles de ejecución restantes difieren respecto a los servicios que inician: default es para uso diario, nonetwork en caso de no requerirse la red y single es utilizado en caso de necesitar arreglar el sistema.

Trabajando con los guiones de inicio

Los guiones iniciados por el proceso rc son llamados guiones de inicio o init scripts. Cada guión en /etc/init.d puede ser ejecutado con los parámetros start, stop, restart, zap, status, ineed, iuse, needsme, usesme o broken.

Para iniciar, parar o reiniciar un servicio (y sus respectivas dependencias), deben usarse start, stop y restart:

Listado de Código 1.6: Iniciar postfix

# /etc/init.d/postfix start

Nota: Solo los servicios que necesiten (need) del servicio nombrado serán parados o reiniciados. Los demás servicios, aquellos que usen (use) el servicio nombrado, pero que no lo necesiten) continuarán sin ser tocados.

Si desea parar un servicio, pero no los que dependan de el, puede usar el parámetro --nodeps junto con el comando stop:

Listado de Código 1.7: Detener postfix, manteniendo la ejecución de los demás servicios

# /etc/init.d/postfix --nodeps stop

Si desea ver el estado de un servicio (iniciado, parado, ...) puede usar el parámetro status:

Listado de Código 1.8: Estado del servicio postfix

# /etc/init.d/postfix status

Si la respuesta a status indica que el servicio está corriendo, pero realmente no es así, puede reajustarlo manualmente con el parámetro zap:

Listado de Código 1.9: Reajustar la información de estado del servicio postfix

# /etc/init.d/postfix zap

Para preguntar por las dependencias que tiene un servicio, puede usar iuse o ineed. Con ineed puede ver cuales servicios son realmente necesarios para el correcto funcionamiento del servicio nombrado. Por otra parte, el parámetro iuse muestra los servicios que pueden ser usados por el servicio nombrado, pero que no son requeridos para su correcto funcionamiento.

Listado de Código 1.10: Solicitar una lista de servicios de los cuales depende postfix

# /etc/init.d/postfix ineed

De igual manera, puede indagar que servicios requieren el servicio nombrado (needsme) o cuáles pueden usarlo (usesme):

Listado de Código 1.11: Solicitar una lista de todos los servicios que requieren postfix

# /etc/init.d/postfix needsme

Finalmente, puede indagar cuales dependencias son requeridas y están faltando:

Listado de Código 1.12: Solicitar una lista de dependencias faltantes para postfix

# /etc/init.d/postfix broken

4.b. Trabajando con rc-update

¿Qué es rc-update?

El sistema de inicio (init) de Gentoo usa un árbol de dependencias para decidir qué servicios deben iniciarse primero. Como ésta es una tarea tediosa, que no deseamos que nuestros usuarios tengan que hacer manualmente, hemos creado unas herramientas para facilitar la administración de los niveles de ejecución y los guiones de inicio.

Con rc-update puede añadir o quitar guiones de inicio a un nivel de ejecución. La herramienta rc-update automáticamente usará el guión depscan.sh para reconstruir el árbol de dependencias.

Añadiendo y removiendo servicios

Ya hemos agregado guiones de inicio al nivel de ejecución por defecto durante la instalación de Gentoo. En ese instante tal vez no haya tenido una idea clara acerca del uso de un nivel de ejecución "por defecto", aunque ahora sí. El guión rc-update requiere un segundo parámetro que define la acción a llevar a cabo: add, del o show para agregar, borrar o mostrar.

Para añadir o quitar un guión de inicio, use rc-update con el parámetro add o del, seguido por el nombre del guión de inicio y el nivel de ejecución, por ejemplo:

Listado de Código 2.1: Quitar postfix del nivel de ejecución por defecto

# rc-update del postfix default

La orden rc-update -v show mostrará todos los guiones de inicio con los niveles de ejecución donde ejecutarán:

Listado de Código 2.2: Recibir información de los guiones de inicio

# rc-update -v show

Es posible ejecutar también rc-update show (sin -v) simplemente para ver los guiones de inicio activos y sus respectivos niveles de ejecución.

4.c. Configuración de servicios

¿Porqué requerimos configuración adicional?

Los guiones de inicio pueden ser bastante complejos, por lo cual no es interesante que los usuarios modifiquen directamente el guión de inicio, ya que esto puede ser propenso a errores. Sin embargo es importante poder configurar estos servicios, en caso que se quieren dar más opciones al servicio.

Una segunda razón para mantener esta información fuera del guión de inicio es para poder actualizar estos guiones sin que los cambios de configuración sean perdidos.

El directorio /etc/conf.d

Gentoo provee una manera fácil de configurar estos servicios: cada guión de inicio configurable tiene un archivo dispuesto en /etc/conf.d. Por ejemplo, el guión de inicio apache2 (llamado /etc/init.d/apache2) tiene un archivo de configuración de nombre /etc/conf.d/apache2, el cual contiene las opciones a pasar al servidor web Apache 2 en el momento de inicio:

Listado de Código 3.1: Variables definidas en /etc/conf.d/apache2

APACHE2_OPTS="-D PHP5"

Este tipo de archivo de configuración contiene solamente variables (como /etc/portage/make.conf), lo que facilita la configuración de servicios. También nos permite suministrar información adicional acerca de las variables (en forma de comentarios).

4.d. Escribiendo guiones de inicio

¿Realmente tengo que hacerlo?

Realmente, no. Escribir un guión de inicio usualmente no hace falta, ya que Gentoo provee guiones listos para usar para todos los servicios suministrados. Sin embargo, puede haber instalado un servicio sin usar Portage, en cuyo caso probablemente tenga que crear un guión de inicio.

No use el guión de inicio suministrado por el servicio si no está explícitamente escrito para Gentoo: los guiones de inicio de Gentoo ¡no son compatibles con los de las demás distribuciones!

Disposición

La disposición básica de un guión de inicio se muestra a continuación.

Listado de Código 4.1: Disposición básica de un guión de inicio

#!/sbin/runscript

depend() {
  (Información acerca de las dependencias)
}

start() {
  (Órdenes requeridas para iniciar el servicio)
}

stop() {
  (Órdenes requeridos para parar el servicio)
}

Cualquier guión de inicio requiere la definición de la función start(). Todas las demás son opcionales.

Dependencias

Hay dos dependencias que puede definir: use y need. Tal como hemos mencionado anteriormente, la dependencia need es más estricta que la dependencia use. Siguiendo este esquema, se declaran los servicios que dependen de éste o la dependencia virtual. Existen dos ajustes relacionados con las dependencias que puede definir y que influyen en el arranque o secuenciación de los guiones de inicio: use y need. Aparte de estas dos, existen también dos métodos que influyen en el orden llamados: before y after. Estos últimos no son dependencias en sí mismos, no provocan el fallo del guión de inicio si el guión seleccionado no está programado para ser iniciado (o falla al iniciar).

  • Los ajustes use informan al sistema de inicio que este guión utiliza funcionalidad ofrecida por el guión seleccionado, sin embargo no depende directamente de él. Un buen ejemplo sería use logger o use dns. Si estos servicios están disponibles, se usarán de forma correcta, pero aunque no tenga instalado un programa de registro (logger) o servidor DNS, los servicios funcionarán de todos modos. Si estos servicios están presentes en su sistema, entonces se arrancarán antes del guión que los utiliza.
  • El ajuste need es una dependencia inevitable. Esto significa que el guión que necesita otro guión, no podrá arrancar antes de que el otro guión se arranque de forma correcta. Si el otro guión es reiniciado, entonces el guión que depende de él será reiniciado igualmente.
  • Cuando se utiliza before, el guión dado es arrancado antes del guión seleccionado si el seleccionado forma parte del nivel de inicio. Por lo tanto, si el guión de inicio xdm define before alsasound, será arrancado antes que el guión alsasound, pero solo si alsasound está también programado para ser arrancado en el mismo nivel de inicio. Si alsasound no está programado para arrancar, entonces este ajuste en particular no tiene efecto y el guión xdm será arrancado cuando el sistema de inicio lo juzgue apropiado.
  • De modo similar, after informa al sistema de inicio que el guión dado debería ser arrancado antes que el seleccionado si el guión seleccionado forma parte de nivel de inicio. En caso contrario, el ajuste no tiene efecto y el guión será arrancado por el sistema de inicio cuando éste lo juzgue apropiado.

Debería quedar claro una vez leida la parte de arriba, que need es el único ajuste que define un "auténtica" dependencia ya que afecta al hecho de que el guión sea arrancado o no. Las demás son simplemente apuntes al sistema de inicio para clarificar el orden en el que los guiones deben (o deberían ser arrancados).

Si echa un vistazo al muchos de los guiones de inicio disponibles en Gentoo, observará que algunos tienen dependencias de objetos que no son guiones de inicio. Estos "objetos" son los llamados virtuals (virtuales).

Una dependencia virtual es una suministrada por un servicio, pero no solo por ese servicio. Su guión de inicio puede depender de un gestor de registro de sistema, habiendo disponibilidad de varios (metalogd, syslog-ng, sysklogd, ...). Como no se necesitan todos (ningún sistema normal tiene todos estos gestores de registro instalados y corriendo) nos aseguramos que todos estos servicios provean una dependencia virtual.

Examinemos la información de dependencia del servicio postfix.

Listado de Código 4.2: Información de dependencias de postfix

depend() {
  need net
  use logger dns
  provide mta
}

Como podemos ver, el servicio postfix:

  • requiere la dependencia (virtual) net (suministrada por, en este caso, /etc/init.d/net.eth0)
  • usa la dependencia (virtual) logger (suministrada por, en este caso, /etc/init.d/syslog-ng)
  • usa la dependencia virtual (virtual) dns (suministrada por, en este caso, /etc/init.d/named)
  • provee la dependencia (virtual) mta (común a todos los servidores de correo electrónico)

Controlando el orden

Tal y como se ha descrito en la sección anterior, puede indicarle al sistema de inicio qué orden debe seguir para arrancar (o parar) los guiones. Este orden es manejado tanto por los ajustes de dependencia use y need, como por los ajustes de orden before y after. Como ya hemos descrito estos ajustes, echemos un vistazo al servicio Portmap como ejemplo de guión de inicio.

Listado de Código 4.3: La función depend() en el servicio portmap

depend() {
  need net
  before inetd
  before xinetd
}

También puede usar el carácter que engloba "*" para todos los servicios, aunque no es aconsejable.

Listado de Código 4.4: Ejecutando un guión de inicio como el primer guión del nivel de ejecución

depend() {
  before *
}

Si su servicio debe escribir a discos locales, debe necesitar localmount. Si escribe algo en /var/run como un archivo pid, entonces debería comenzar después de bootmisc:

Listado de Código 4.5: Función ejemplo de depend()

depend() {
  need localmount
  after bootmisc
}

Funciones estándar

Junto con la función depend(), hará falta definir la función start(), que contiene las órdenes necesarias para inicializar su servicio. Es aconsejable usar las funciones ebegin y eend para informarle al usuario acerca de lo que está ocurriendo:

Listado de Código 4.6: Ejemplo de función start()

start() {
  if [ "${RC_CMD}" = "restart" ];
  then
    # Hacer algo en caso de que restart requiera algo más que para y arrancar
  fi

  ebegin "Starting my_service"
start-stop-daemon --start --exec /path/to/my_service \
                  --pidfile /path/to/my_pidfile
  eend $?
}

Ambos --exec y --pidfile deben usarse en las funciones start y stop. Si el servicio no crea un archivo pid, entonces use --make-pidfile si es posible, aunque debe probar esto para estar seguro. De otra manera, no use archivos pid. Puede también agregar --quiet a las opciones al start-stop-daemon, pero esto no es recomendado a no ser que el el servicio sea extremadamente verboso. Usando --quiet puede interferir con la depuración si el servicio no logra arrancar.

Otro ajuste notable usado en el ejemplo de arriba es la comprobación de los contenidos de la variable RC_CMD. Al contrario que el sistema de guiones de inicio anterior, el nuevo sistema openrc no soporta funcionalidad de reinicio específica de los guiones. En lugar de esto, el guión necesita comprobar el contenido de la variable RC_CMD para var si una función (sea start() o stop()) se llama como parte del reinicio o no.

Nota: Asegúrese que --exec de hecho llame un servicio y no solamente un guión que lanza un servicio y termina -- después de todo, eso es lo que el guión de inicio está supuesto de hacer.

Si requiere más ejemplos de funciones start(), favor leer directamente las fuentes de los guiones de inicio en su directorio /etc/init.d.

Otra función que puede definir es stop(). Sin embargo, ¡No está obligado a definir esta función! Nuestro sistema de inicio es lo suficientemente inteligente para rellenar esta función por sí mismo si utiliza start-stop-daemon.

A continuación se muestra un ejemplo de la función stop():

Listado de Código 4.7: Función stop() de ejemplo

stop() {
  ebegin "Stopping my_service"
  start-stop-daemon --stop --exec /path/to/my_service \
    --pidfile /path/to/my_pidfile
  eend $?
}

Si su servicio corre otro guión (por ejemplo, bash, python o perl), y este guión luego cambia algún nombre (por ejemplo, foo.py a foo), entonces hará falta agregar --name al start-stop-daemon. Debe especificar el nombre al cual cambiará el guión. En este ejemplo, un servicio inicia foo.py, el cual cambia de nombre a foo:

Listado de Código 4.8: Un servicio que inicia el guión foo

start() {
  ebegin "Starting my_script"
  start-stop-daemon --start --exec /path/to/my_script \
    --pidfile /path/to/my_pidfile --name foo
  eend $?
}

El start-stop-daemon tiene una excelente página man si requiere más información:

Listado de Código 4.9: Obteniendo la página man para el start-stop-daemon

$ man start-stop-daemon

La sintaxis de los guiones de inicio de Gentoo está basada en el intérprete de comandos POSIX, de manera que es libre de usar construcciones compatibles con sh dentro del guión de inicio. No utilice otras construcciones, por ejemplo las del tipo bash, en los guiones de inicio para asegurarse de que los guiones funcionen en el futuro incluso si se cambia el sistema de inicio de Gentoo.

Añadiendo opciones personalizadas

Si desea que su guión de inicio soporte un mayor número de opciones de las que hemos encontrado hasta ahora, debe agregar la opción a la variable extra_commands y crear una función con el mismo nombre que la opción. Por ejemplo, para dar soporte a una opción llamada restartdelay:

Listado de Código 4.10: Soporte para la opción restartdelay

extra_commands="restartdelay"

restartdelay() {
  stop
  sleep 3    # Espere 3 segundo antes de reiniciar
  start
}

Importante: ¡La función restart() no puede ser sobreescrita en openrc!.

Variables para la configuración de servicios

No hay que hacer nada para soportar un archivo de configuración en /etc/conf.d: si su guión de inicio se ejecuta, los siguientes archivos serán automáticamente leídos (sourced) y las variables estarán disponibles para usar.

  • /etc/conf.d/<su guión de inicio>
  • /etc/conf.d/basic
  • /etc/rc.conf

También, si su guión de inicio provee una dependencia virtual (como net), el archivo asociado a esa dependencia (el /etc/conf.d/net) será leído también.

4.e. Cambiando el comportamiento del nivel de ejecución

¿Quién puede beneficiarse de esto?

Muchos usuarios de equipos portátiles conocen la situación: en casa necesita iniciar net.eth0 mientras que puede no querer iniciar net.eth0 mientras está de viaja (cuando no hay una red disponible). Con Gentoo puede modificar el comportamiento del nivel de ejecución para sus propios propósitos.

Por ejemplo puede crear un segundo nivel de ejecución "default" con el cual puede arrancar y que utiliza otros guiones de inicio que le han sido asignados. Puede seleccionar al arrancar que nivel de ejecución quiere utilizar.

Utilizando softlevel

Antes de nada, cree el directorio para su segundo nivel de ejecución "default". Como ejemplo vamos a crear el nivel de ejecución offline:

Listado de Código 5.1: Creando el directorio para el nivel de ejecución

# mkdir /etc/runlevels/offline

Añada los guiones de inicio necesarios para el nuevo nivel de ejecución. Por ejemplo, si quiere una copia exacta de su actual "default" pero sin net.eth0:

Listado de Código 5.2: Añadiendo los guiones de inicio necesarios

(Copiar todos los servicios desde el nivel de ejecución default al nivel offline)
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
(Eliminar servicios no deseados en el nivel offline)
# rc-update del net.eth0 offline
(Mostrar los servicios activos en el nivel offline)
# rc-update show offline
(Salida incompleta de ejemplo)
               acpid | offline
          domainname | offline
               local | offline
            net.eth0 |

Incluso aunque se haya eliminado net.eth0 del nivel de ejecución offline, puede que udev quiera intentar iniciar cualquier dispositivo que detecte y lanzar los servicios apropiados, una funcionalidad llamada hotplugging (enchufado en caliente). Por defecto Gentoo no habilita esta funcionalidad.

Si quiere habilitar el hotplugging pero solo para un conjunto seleccionado de guiones, utilice la variable rc_hotplug en /etc/rc.conf:

Listado de Código 5.3: Deshabilitando los servicions iniciados por dispositivos en /etc/rc.conf

# Permite enchufar en caliente net.wlan así como cualquier otro
# servicio excepto los que concuerden con net.*
rc_hotplug="net.wlan !net.*"

Nota: Para más información sobre los servicios iniciados en función de dispositivos, consulte los comentarios del archivo /etc/rc.conf.

Ahora edite la configuración de su gestor de arranca y añada una nueva entrada para el nivel de ejecución offline. Por ejemplo, en /boot/grub/grub.conf:

Listado de Código 5.4: Añadiendo una entrada para el nivel de ejecución offline

title Gentoo Linux Offline Usage
  root (hd0,0)
  kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline

Listo, ha terminado de configurarlo. Si arranca su sistema y selecciona la nueva entrada al inicio, el nivel de ejecución offline será el utilizado en lugar del default.

Utilizando bootlevel

Utilizar bootlevel es completamente análogo a softlevel. La única diferencia es que se define un segundo nivel de ejecución "boot" en lugar de un segundo "default".

5. Variables de entorno

5.a. ¿Variables de Entorno?

¿Qué son?

Una variable de entorno es un objeto designado para contener información usada por una o más aplicaciones. Algunos usuarios (especialmente aquellos nuevos en Linux) encuentran esto un poco extraño o inmanejable. Sin embargo esto no es cierto: usando variables de entorno hace que cualquiera pueda cambiar una opción de configuración para una o más aplicaciones fácilmente.

Ejemplos Importantes

La siguiente tabla muestra un listado de variables de entorno usado por un sistema Linux y describe su uso. Los valores de ejemplo se encuentran después de la tabla.

Variable Descripción
PATH Esta variable contiene una lista de directorios separados por ":" en la cual el sistema buscará los archivos ejecutables. Al introducir el nombre de un ejecutable (como ls, rc-update o emerge) que no se encuentre en un de los directorios listados, el sistema no lo encontrará, (a menos que se introduzca la ruta completa, por ejemplo: /bin/ls).
ROOTPATH Esta variable tiene la misma función que PATH, pero únicamente contiene los directorios que el sistema debe revisar cuando el usuario root introduce una orden.
LDPATH Esta variable contiene una lista de directorios separados por ":" en la cual el enlazador dinámico busca para encontrar una librería.
MANPATH Esta variable contiene una lista de directorios separados por ":" en los cuales la orden man buscará las páginas de manual.
INFODIR Esta variable contiene una lista de directorios separados por ":" en la cual la orden info buscará las páginas info.
PAGER Esta variable contiene la ruta hacia el programa utilizado para mostrar el contenido de los ficheros (como less o more).
EDITOR Esta variable contiene la ruta hacia el programa utilizado para modificar el contenido de los archivos (como nano o vi).
KDEDIRS Esta variable contiene una lista de directorios separados por ":" los cuales contienen material específico de KDE.
CONFIG_PROTECT Esta variable una lista de directorios separados por espacio los cuales deben ser protegidos por Portage durante las actualizaciones.
CONFIG_PROTECT_MASK Esta variable una lista de directorios separados por espacio los cuales no deben ser protegidos por Portage durante las actualizaciones.

A continuación puedes encontrar ejemplos de definiciones para todas estas variables:

Listado de Código 1.1: Definiciones de ejemplo

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"

5.b. Definiendo variables globalmente

El directorio /etc/env.d

Para centralizar la definición de estas variables, Gentoo introduce el directorio /etc/env.d. Dentro de este directorio se encuentran varios ficheros como por ejemplo 00basic, 05gcc, etc. los cuales contienen las variables necesarias para la aplicación de la cual llevan el nombre.

Por ejemplo, al instalar gcc, un fichero llamado 05gcc que contiene la definición de las siguientes variables, fue creado por el ebuild:

Listado de Código 2.1: /etc/env.d/05gcc

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

Otras distribuciones le piden modificar o añadir definiciones de variables de entorno semejantes en /etc/profile o en otros sitios. Por otro lado, Gentoo nos hace (y a Portage) más fácil mantener y manejar las variables de entorno sin tener que prestar atención a los numerosos ficheros que pueden contenerlas.

Por ejemplo, cuando gcc es actualizado, también es actualizado el fichero /etc/env.d/05gcc sin ser necesaria ninguna interacción por parte del usuario.

Esto no solo beneficia a Portage, sino también al usuario. En ocasiones se podrá pedir establecer cierta variable de entorno para todo el sistema. Como ejemplo, tomamos la variable http_proxy. En lugar de perder el tiempo con /etc/profile, puedes crear el fichero (/etc/env.d/99local) y introducir la(s) definición(es) en él:

Listado de Código 2.2: /etc/env.d/99local

http_proxy="proxy.server.com:8080"

Usando el mismo fichero para todas las variables, se obtiene una visión rápida de las variables que definidas por uno mismo.

El guión env-update

Varios archivos de /etc/env.d definen la variable PATH. esto no es un error: cuando ejecute env-update, este concatenará las múltiples definiciones antes de actualizar las variables de entorno, haciendo más fácil a los paquetes (o usuarios) añadir sus propias opciones en las variables de entorno sin interferir con los valores ya existentes.

El guión env-update concatenará los valores alfabéticamente ordenados por el nombre de los ficheros de /etc/env.d. Los nombres de fichero deben comenzar con dos dígitos decimales.

Listado de Código 2.3: Update order used by env-update

         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

La concatenación de variables no siempre funciona, solo con las siguientes variables: ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH y PYTHONPATH. Para el resto de variables, se utiliza el último valor definido (en orden alfabético de ficheros en /etc/env.d).

Puede incluir más variables en esta lista de variables concatenadas añadiendo el nombre de la variable a la variable COLON_SEPARATED o a la variable SPACE_SEPARATED (definidas también en el fichero env.d).

Cuando ejecute env-update, el guión creará todas las variables de entorno y las colocará en /etc/profile.env (el cual es usado por /etc/profile). Además, también extraerá la información de la variable LDPATH y la usará para crear /etc/ld.so.conf. Después de esto, ejecutará ldconfig para recrear el archivo usado por el enlazador dinámico: /etc/ld.so.cache.

Si quiere observar el efecto de env-update inmediatamente después de ejecutarlo, ejecute la siguiente orden para actualizar su entorno. Posiblemente, los usuarios que instalaron Gentoo ellos mismos, recordarán estas instrucciones de la instalación:

Listado de Código 2.4: Actualizar el entorno

# env-update && source /etc/profile

Nota: La orden anterior actualiza únicamente las variables en la terminal actual, en las nuevas consolas y sus hijas. Sabiendo esto, si se está trabajando en X11, necesitará ejecutar source /etc/profile en las nuevas terminales que abra o reiniciar las X para que las nuevas terminales definan las nuevas variables. Si está utilizando un gestor de inicio, conviértase en root y ejecute /etc/init.d/xdm restart. En caso contrario, necesitará salir de la sesión y volver a entrar para que las X generen hijos con las nuevas variables.

Importante: No se pueden utilizar las variables del terminal para definir otras variables. Esto implica que cosas como FOO="$BAR" (donde $BAR es otra variable) están prohibidas.

5.c. Definiendo variables locales

Específicas de usuario

No siempre queremos definir variables de entorno globales. Por ejemplo, podríamos querer añadir /home/my_user/bin y el directorio de trabajo actual (en el cual nos encontramos), a la variable PATH, pero no queremos que todos los usuarios de nuestro sistema lo tengan en su PATH. Si queremos definir una variable localmente, debemos usar ~/.bashrc o ~/.bash_profile:

Listado de Código 3.1: Ampliar el PATH para uso local en: ~/.bashrc

(Dos puntos sin incluir después un directorio son tratados como
el directorio de trabajo actual)
PATH="${PATH}:/home/my_user/bin:"

Cuando vuelva a iniciar la sesión, su variable PATH será actualizada.

Específicas de sesión

En ocasiones, se requieren definiciones aún más estrictas. Puede querer usar binarios de un directorio temporal que ha creado sin tener que usar la trayectoria completa a los binarios o sin editar ~/.bashrc. Para estos momentos necesitará esto.

En este caso, puede definir la variable PATH en su sesión activa usando la orden export. Mientras no cierre la sesión, la variable PATH usará los valores temporales.

Listado de Código 3.2: Definir una variable específica a la sesión

# export PATH="${PATH}:/home/my_user/tmp/usr/bin"

C. Trabajando con Portage

1. Archivos y directorios

1.a. Ficheros de Portage

Directivas de configuración

Portage viene con una configuración predefinida guardada en /usr/share/portage/config/make.globals. Cuando le eche un vistazo, comprobará que toda la configuración de Portage se realiza a través de variables. A qué variables atiende Portage y que significan se describe un poco después.

Como muchas directivas de configuración varían de unas arquitecturas a otras, Portage también posee algunos archivos de configuración que son parte de perfil. Su perfil está apuntado por el enlace simbólico /etc/portage/make.profile; las configuraciones de Portage se realizan en los archivos make.defaults de su perfil y de todos los perfiles padres. Explicaremos algo más sobre perfiles y el directorio /etc/portage/make.profile más adelante.

Si está pensando en cambiar una variable de configuración, no modifique /usr/share/portage/config/make.globals o make.defaults. En lugar de eso utilice /etc/portage/make.conf el cual tiene preferencia sobre los archivos anteriores. También encontrará usr/share/portage/config/make.conf.example. Como su propio nombre indica, este archivo es meramente un ejemplo y Portage no lo utilizará con ningún propósito.

También puede definir una variable de configuración para Portage como una variable de entorno, pero no es recomendable.

Información específica del perfil

Ya hemos hablado del directorio /etc/portage/make.profile. Bien, exactamente no es un directorio pero es un enlace simbólico a un perfil, por defecto uno perteneciente a /usr/portage/profiles también puede crear un perfil en cualquier otro lado y apuntarlo. El perfil al cual apunta el enlace simbólico será el que tenga en cuenta su sistema.

Un perfil contiene información específica para Portage sobre cada arquitectura, tal como una lista de paquetes que pertenecen al sistema correspondiente con ese perfil, una lista de paquetes que no funcionan (o están enmascarados) para ese perfil, etc.

Configuración específica para usuarios

Cuando necesite sobreescribir una característica de Portage relativa a la instalación de software, necesitará editar los archivos contenidos en /etc/portage.¡ Se recomienda encarecidamente que utilice los archivos pertenecientes a /etc/portage y está desaconsejada la sobreescritura de estas características con variables de entorno.!

Dentro de /etc/portage puede crear los siguientes archivos:

  • package.mask el cual especifica los paquetes que nunca quiere que Portage instale en su sistema.
  • package.unmask especifica los paquetes que quiere instalar a pesar de haber sido desaconsejados por los desarrolladores.
  • package.accept_keywords especifica los paquetes que quiere instalar a pesar de no haber sido considerados adecuados para su sistema o arquitectura (todavía).
  • package.use especifica la lista de variables USE que quiere utilizar para unos determinados paquetes sin tener que configurar el sistema por completo para que use esas variables USE.

Estos no tienen que ser archivos; también pueden ser directorios que contengan un archivo por paquete. Podemos obtener más información acerca del directorio /etc/portage y una lista de archivos que pueden crearse allí en la página man de Portage.

Listado de Código 1.1: Leyendo la página del manual sobre Portage

$ man portage

Cambiando el fichero de Portage y el lugar del directorio

Los archivos de configuración mencionados anteriormente no pueden ser guardados en ningún otro sitio, Portage siempre los buscará en esos lugares exactos. Sin embargo, Portage utiliza otras muchos lugares para varios propósitos: el directorio de compilación, el lugar donde guardar el código fuente, la localización del árbol de Portage, ...

Todos estos propósitos tienen unas direcciones predeterminadas muy claras pero puede cambiarlas por las que más le gusten indicándolo en /etc/portage/make.conf. El resto de este capítulo explica los lugares destinados a un propósito especial que utiliza Portage y como puede ser modificado su emplazamiento en el sistema de ficheros.

Este documento no pretende ser utilizado como referencia. Si necesita una cobertura 100%, por favor consulte las páginas del man relativas a Portage y make.conf:

Listado de Código 1.2: Leyendo las páginas del manual sobre Portage y make.conf

$ man portage
$ man make.conf

1.b. Guardando ficheros

El árbol Portage

La ubicación predeterminada del árbol de Portage es /usr/portage. Esta definida por la variable PORTDIR. Cuando guarde el árbol de Portage en cualquier otro lugar (modificando esta variable), no olvide cambiar el enlace simbólico /etc/portage/make.profile de acuerdo con su cambio.

Si modifica la variable PORTDIR, seguramente quiera cambiar las siguientes variables ya que no tienen constancia del cambio de PORTDIR. Esto es debido a cómo Portage maneja las variables: PKGDIR, DISTDIR, RPMDIR.

Binarios Pre-compilados

Aunque Portage no utilice binarios pre-compilados por defecto, tiene un buen soporte para ellos. Cuando a Portage se le indica que trabaje con paquetes pre-compilados, los buscará en /usr/portage/packages. Esta ubicación está definida por la variable PKGDIR.

Código Fuente

El código fuente de las aplicaciones se guarda por defecto en /usr/portage/distfiles. Esta ubicación viene definida por la variable DISTDIR.

Base de datos de Portage

Portage guarda el estado del sistema (que paquetes están instalados, qué archivos pertenecen a cada paquete, ...) en /var/db/pkg. ¡No se deben modificar estos archivos manualmente! Podría romper el conocimiento que tiene Portage sobre el sistema.

Caché de Portage

La caché de Portage (con modificaciones temporales, paquetes virtuales, árbol de dependencias, ...) se guarda en /var/cache/edb. Esta ubicación es una verdadera caché: se puede limpiar si no se está ejecutando ninguna aplicación que tenga relación con Portage en este momento.

1.c. Compilando aplicaciones

Ficheros temporales de Portage

Los ficheros temporales de portage se guardan por defecto en /var/tmp. Esta ubicación se define en la variable PORTAGE_TMPDIR.

Si modifica la variable PORTAGE_TMPDIR, necesitará cambiar las siguientes variables ya que no tendrán constancia del cambio. Esto es debido a cómo Portage maneja la variable: BUILD_PREFIX.

Directorio de compilación

Portage crea directorios de compilación específicos para cada paquete que se emerge dentro de /var/tmp/portage. Esta ubicación viene definida por la variable BUILD_PREFIX.

Ubicación del sistema de ficheros

Por defecto, Portage instala todas los archivos en el sistema de ficheros activo (/), pero puede cambiarse esta configuración a través de la variable de entorno ROOT. Esto es útil cuando quiera crear nuevas imágenes compiladas.

1.d. Características de registro de acciones (log)

Registro de acciones de Ebuilds

Portage puede crear un registro por ebuild, pero solamente cuando la variable PORT_LOGDIR esté configurada y apuntando a una dirección con permisos de escritura para Portage (usuario Portage). De manera predeterminada está variable está desactivada. Si no configura PORT_LOGDIR no recibirá los registros con el sistema de registro actual, aunque tal vez reciba algún registro del nuevo elog. Si no tiene definido PORT_LOGDIR y usa elog, recibirá los registros de construcción de paquetes y cualquier otro registro salvado por elog, como se explica a continuación.

Portage ofrece un control de grano fino sobre el registro de sistema mediante el uso de elog:

  • PORTAGE_ELOG_CLASSES: Es donde se define cuáles mensajes serán registrados. Puede utilizarse cualquier cualquier combinación separada por espacios en blanco de info, warn, error, log and qa.
    • info: Registra los mensajes "einfo" generados por un ebuild
    • warn: Registra los mensajes "ewarn" generados por un ebuild
    • error: Registra los mensajes "eerror" generados por un ebuild
    • log: Registra los mensajes "elog" encontrados en algunos ebuilds
    • qa:: Registra los mensajes del tipo "QA Notice" mostrados por un ebuild.
  • PORTAGE_ELOG_SYSTEM: Selecciona el (los) módulos para procesar los mensajes de registro. Si se deja sin definir, se desactiva la función de registro. Puede usar cualquier combinación separada por espacios en blanco de save, custom, syslog , mail, save_summary y mail_summary. Debe seleccionar al menos un módulo para poder usar elog.
    • save: Almacena un registro por paquete en $PORT_LOGDIR/elog, o /var/log/portage/elog si $PORT_LOGDIR no está definido.
    • custom: Pasa todos los mensajes a una orden definida por el usuario en $PORTAGE_ELOG_COMMAND; esto se discutirá más adelante.
    • syslog: Envía todos los mensajes al gestor de registro de sistema instalado.
    • mail: Pasa todos los mensaje a un servidor de correo definido por el usuario en $PORTAGE_ELOG_MAILURI; esto se discutirá más adelante. Las características de correo de elog requieren >=portage-2.1.1.
    • save_summary: parecido a save, pero fusionando todos los mensajes en $PORT_LOGDIR/elog/summary.log, o /var/log/portage/elog/summary.log si $PORT_LOGDIR fue definido.
    • mail_summary: parecido a mail, pero envía todos los mensajes en un solo mensaje de correo cuando emerge finaliza.
  • PORTAGE_ELOG_COMMAND: Esto solamente se usa al activarse el módulo custom. Aquí podemos especificar una orden con la cual se procesarán los mensajes de registro. Observe que puede hacer uso de dos variables de entorno: ${PACKAGE} es el nombre del paquete y la versión, mientras que ${LOGFILE} es la ruta absoluta del archivo de registro. A continuación se muestra un posible uso:
    • PORTAGE_ELOG_COMMAND="/trayectoria/al/gestor -p '\${PACKAGE}' -f '\${LOGFILE}'"
  • PORTAGE_ELOG_MAILURI: Contiene la configuración del módulo mail, tal como dirección, usuario, contraseña, servidor de correo y número de puerto. Por defecto está configurado a "root@localhost localhost".
  • Aquí presentamos un ejemplo para un servidor smtp que requiere autenticación con nombre de usuario y contraseña en un puerto en particular (el puerto por defecto es el 25):
    • PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
  • PORTAGE_ELOG_MAILFROM: Permite configurar la dirección "from" de los correos de registro; su valor por defecto es "portage".
  • PORTAGE_ELOG_MAILSUBJECT: Permite la creación de una línea de asunto para los correos de registro. Note que puede hacer uso de dos variables de entorno: ${PACKAGE} mostrará el nombre y la versión del paquete, mientras que ${HOST} es el nombre del dominio completo del anfitrión donde está corriendo Portage.
  • Aquí está un posible uso:
    • PORTAGE_ELOG_MAILSUBJECT="El paquete \${PACKAGE} fue instalado en \${HOST} con algunos mensajes"

Importante: Si ha usado enotice con Portage-2.0.*, elimine enotice, ya que es incompatible con elog.

2. Configuración por medio de variables

2.a. Configuración del sistema Portage

Como hemos indicado previamente, Portage se puede configurar mediante múltiples variables de entorno que se deben definir en /etc/portage/make.conf o en uno de los subdirectorios de /etc/portage. Por favor, eche un vistazo a las páginas del manual de make.conf y portage para obtener información detallada.

Listado de Código 1.1: Leer las páginas del manual

$ man make.conf
$ man portage

2.b. Opciones al momento de construcción

Opciones de configuración y del compilador

Cuando Portage construye las aplicaciones, pasa el contenido de las siguientes variables al guión de compilación y configuración:

  • CFLAGS & CXXFLAGS define los parámetros deseados para la compilación de fuentes en C y C++.
  • CHOST define la plataforma correspondiente a la máquina en la que se construye para el guión de configuración
  • MAKEOPTS se pasa a la orden make para definir el grado de paralelismo al compilar. Para más información acerca de sus opciones, vea la página man de make.

El parámetro USE también se usa al configurar y compilar, pero éste ha sido explicado ampliamente en capítulos previos.

Opciones al integrar

Cuando Portage integra una versión más nueva de algún paquete de software, también eliminará los archivos obsoletos de la versión anterior del sistema. Portage otorga un tiempo de gracia de 5 segundos al usuario antes de llevar esta tarea a cabo. Este tiempo se define por medio de la variable CLEAN_DELAY.

Puede decirle a emerge que use ciertas opciones cada vez que sea ejecutado configurando la variable EMERGE_DEFAULT_OPTS. algunas opciones útiles podrían ser --ask, --verbose, --tree, etc.

2.c. Protección de los archivos de configuración

Ubicaciones protegidas por Portage

Portage sobreescribe los archivos provistos por versiones más nuevas de un paquete si estos no estan almacenados en un lugar protegido. Estos lugares protegidos se definen con la variable CONFIG_PROTECT y generalmente corresponden a rutas de archivos de configuración. Este listado de directorios es delimitado con espacios en blanco.

Los archivos de configuración nuevos que se escriban en rutas protegidas lo serán con un nombre modificado y el usuario será advertido acerca de su presencia.

Puede averiguar qué lugares están protegidos en la variable CONFIG_PROTECT con la salida de la orden emerge --info:

Listado de Código 3.1: Obtener información acerca del contenido de CONFIG_PROTECT

$ emerge --info | grep 'CONFIG_PROTECT='

Más información acerca de la protección de archivos de configuración por Portage está disponible en la sección de archivos de configuración (CONFIGURATION FILES) de la página man de emerge:

Listado de Código 3.2: Más información acerca de la protección de archivos de configuración

$ man emerge

Exclusión de directorios

Para 'desproteger' ciertos subdirectorios en directorios protegidos, use la variable CONFIG_PROTECT_MASK.

2.d. Opciones de descarga

Ubicaciones de servidores

Cuando la información o datos no están disponibles en su sistema, Portage los descargará de la Internet. Las ubicaciones de los servidores para los canales de información y datos se definen mediante los siguientes variables:

  • GENTOO_MIRRORS define una lista de servidores que contienen código fuente (distfiles)
  • PORTAGE_BINHOST define un servidor en particular que contiene paquetes pre-compilados para su sistema

Un tercer parámetro involucra la ubicación del servidor rsync utilizado al actualizar el árbol Portage. Esto se define en el fichero /etc/portage/repos.conf (o en un fichero dentro de ese directorio si se ha definido como tal):

  • sync-type define el tipo de servidor y su valor por defecto es "rsync"
  • sync-uri define un servidor en particular desde el que Portage obtiene el árbol

Las variables GENTOO_MIRRORS, sync-type y sync-uri se pueden definir automáticamente mediante la orden mirrorselect. Debe hacer emerge mirrorselect antes de usarla. Para más información, vea la ayuda de mirrorselect en línea:

Listado de Código 4.1: Más información acerca de mirrorselect

# mirrorselect --help

Si su entorno requiere el uso de un servidor proxy, configure las variables http_proxy, ftp_proxy y RSYNC_PROXY para declararlos.

Órdenes para descargar

Cuando Portage requiera descargar fuentes, utiliza por defecto la orden wget. Puede cambiar esto usando la variable FETCHCOMMAND.

Portage puede continuar una descarga hecha en forma parcial. Usa wget por defecto, pero puede cambiarlo usando la variable RESUMECOMMAND.

Asegúrese que sus FETCHCOMMAND y RESUMECOMMAND guarde las fuentes en la ubicación correcta. Al definir las variables debe usar \${URI} y \${DISTDIR} para apuntar a la ubicación de las fuentes y la ubicación del directorio distfiles respectivamente.

Puede definir manejadores específicos por protocolo con FETCHCOMMAND_HTTP, FETCHCOMMAND_FTP, RESUMECOMMAND_HTTP, RESUMECOMMAND_FTP, etc.

Configuración de rsync

Aunque no se puede alterar la orden rsync usada para actualizar el árbol Portage, podrá configurar algunas de las variables para modificar su comportamiento:

  • PORTAGE_RSYNC_OPTS configura un número de variables por defecto usadas durante la sincronización, separado por espacios en blanco. Estos no deberían ser cambiados a no ser que sepa exactamente lo que está haciendo. Note que ciertas opciones requeridas con obligatoriedad serán siempre usadas aunque PORTAGE_RSYNC_OPTS no tenga valor asignado.
  • PORTAGE_RSYNC_EXTRA_OPTS puede ser usado para configurar opciones adicionales al sincronizar. Cada opción deberá ser separada con un espacio en blanco.
    • --timeout=<number>: define la cantidad de segundos que una conexión rsync puede permanecer sin que caduque. Esta variable tiene un valor por defecto 180, pero los usuarios con conexiones dialup o individuos con computadoras lentas podrían aumentar a 300 o más.
    • --exclude-from=/etc/portage/rsync_excludes: Esto apunta a un archivo que lista los paquetes y/o categorías que rsync debe ignorar durante el proceso de actualización. En este caso, apunta a /etc/portage/rsync_excludes. Por favor lea Utilizando un subconjunto del árbol Portage para la sintaxis de este archivo.
    • --quiet: Reduces output to the screen
    • --verbose: Prints a complete filelist
    • --progress: Displays a progress meter for each file
  • PORTAGE_RSYNC_RETRIES defines how many times rsync should try connecting to the mirror pointed to by the SYNC variable before bailing out. This variable defaults to 3.

For more information on these options and others, please read man rsync.

2.e. Configuración de Gentoo

Selección de rama

Puede escoger su rama por defecto a través de la variable ACCEPT_KEYWORDS. El valor por defecto es la rama estable de su plataforma. Para más información acerca de las ramas de Gentoo, vea el capítulo siguiente.

Características de Portage

Puede activar ciertas características de Portage por medio de la variable FEATURES. Estas han sido discutidas en capítulos previos, por ejemplo Características de Portage.

2.f. Comportamiento de Portage

Manejo de recursos

Con la variable PORTAGE_NICENESS, puede aumentar o reducir el valor "nice" con el que ejecuta Portage. El valor de la variable PORTAGE_NICENESS se suma al valor "nice" actual.

Para más información acerca de valores "nice", vea la página man de nice:

Listado de Código 6.1: Más información acerca de nice

$ man nice

Comportamiento de la salida

El valor de NOCOLOR, que por defecto es "falso", define si Portage desactiva el uso de los colores en su salida.

3. Mezcla de ramales de software

3.a. Utilizando una sola rama

La rama estable

La variable ACCEPT_KEYWORDS define que rama de programas va a utilizar en su sistema. Como predeterminada figura la rama estable para su arquitectura, por ejemplo x86.

Recomendamos que solamente utilice la rama estable. Sin embargo si no le importa demasiado la estabilidad y quiere ayudar a Gentoo a través del envío de informes de error a http://bugs.gentoo.org, siga leyendo.

La rama de pruebas

Si quiere utilizar los programas más recientes, puede considerar utilizar la rama de pruebas. Para que Portage utilice la rama de pruebas, añada un ~ delante de su arquitectura.

La rama de pruebas es exactamente para eso - pruebas. Si un paquete se encuentra en pruebas, eso significa que los desarrolladores creen que funciona, pero no ha sido probado concienzudamente. Podría, perfectamente, ser el primero en descubrir un error en el paquete, en cuyo caso puede rellenar un informe para ponerlo en conocimiento de los desarrolladores.

Aunque se debe tener cuidado, se pueden experimentar problemas de estabilidad, gestión del paquete imperfecta (por ejemplo dependencias erróneas), actualizaciones demasiado frecuentes (que dan cómo resultado múltiples compilaciones) o paquetes que no funcionan. Si no se conoce cómo funciona Gentoo y como resolver los problemas, recomendamos que se quede con la rama probada y estable.

Por ejemplo, para seleccionar la rama de pruebas en una arquitectura x86, edite /etc/portage/make.conf y escriba:

Listado de Código 1.1: Configurar la variables ACCEPT_KEYWORDS

ACCEPT_KEYWORDS="~x86"

Si actualiza su sistema ahora, encontrará que muchos paquetes serán actualizados. Tenga cuidado ya que: cuando haya actualizado su sistema para emplear la rama inestable, normalmente no hay una manera sencilla de volver a la rama estable (excepto mediante el empleo de copias de seguridad, claro).

3.b. Mezclando ramales estable con pruebas

La ubicación package.accept_keywords

Puede pedirle a Portage que le permita utilizar la rama de pruebas para algunos paquetes pero seguir utilizando la rama estable en el resto del sistema. Para realizar esto, añada la categoría del paquete y el nombre si quiere utilizar la rama de pruebas al fichero /etc/portage/package.accept_keywords. Además podría crear un directorio (con este mismo nombre) y situar allí el paquete en un fichero. Por ejemplo, para utilizar la rama de pruebas con gnumeric:

Listado de Código 2.1: Configurar /etc/portage/package.accept_keywords para gnumeric

app-office/gnumeric

Probando versiones específicas

Si quiere utilizar una versión específica de algún paquete de la rama de pruebas pero no quiere que portage utiliza esa rama de pruebas para las siguientes versiones, puede añadir la versión a package.accept_keywords. En este caso se debe utilizar el operador =. También puede introducir un rango de versiones con los operadores <=, <, > or >= .

En cualquier caso, si añade información sobre una versión, debe utilizar un operador. Si lo deja sin información sobre la versión, no puede emplear un operador.

En el siguiente ejemplo indicamos a Portage que acepte gnumeric-1.2.13:

Listado de Código 2.2: Utilizar una versión específica de gnumeric

=app-office/gnumeric-1.2.13

3.c. Empleo de paquetes enmascarados

La ubicación package.unmask

Importante: Los desarrolladores de Gentoo no darán soporte al empleo de estos archivos. Por favor, tenga cuidado cuando haga esto. Las peticiones de soporte relacionadas con package.unmask y/o package.mask no serán respondidas. Considérese advertido.

Cuando un paquete ha sido enmascarado por los desarrolladores de Gentoo y aún así desea utilizarlo a pesar de la razón que se menciona en el fichero package.mask (situado por defecto en /usr/portage/profiles), añada la versión deseada (normalmente será exactamente la misma línea de profiles) en el fichero /etc/portage/package.unmask (o en un archivo dentro de ese directorio, si es que es un directorio).

Por ejemplo, si =net-mail/hotwayd-0.8 está enmascarado, puede desenmascararlo añadiendo exactamente la misma línea en package.unmask:

Listado de Código 3.1: /etc/portage/package.unmask

=net-mail/hotwayd-0.8

Nota: Si una entrada en /usr/portage/profiles/package.mask contiene un rango de versiones de paquete, necesitará desenmascarar únicamente la versión o versiones que realmente necesita. Por favor, lea la sección previa para aprender cómo especificar versiones en package.unmask.

La ubicación package.mask

Cuando no quiera que Portage instale un paquete en concreto o una versión específica de un paquete en su sistema, puede enmascararlo simplemente añadiendo la línea apropiada a /etc/portage/package.mask (tanto si es un fichero como si es un directorio y se hace en un fichero dentro de él).

Por ejemplo, si no quiere que Portage instale otras fuentes del núcleo que no sean gentoo-sources-2.6.8.1, añada la siguiente línea a package.mask:

Listado de Código 3.2: ejemplo de /etc/portage/package.mask

>sys-kernel/gentoo-sources-2.6.8.1

4. Herramientas adicionales de portage

4.a. dispatch-conf

dispatch-conf es una herramienta diseñada para combinar los archivos ._cfg0000_<name>. Los archivos ._cfg0000_<name> son generados por Portage cuando intenta sobreescribir un archivo en un directorio protegido por la variable CONFIG_PROTECT.

Empleando dispatch-conf, se puede actualizar la configuración mientras se registran todos los cambios realizados. dispatch-conf guarda las diferencias entre las distintas configuraciones como parches utilizando el sistema de control de versiones RCS. Esto implica que, si se comete un error en la actualización de un archivo de configuración, se puede regresar a la versión anterior del archivo en cualquier momento.

Cuando se utiliza dispatch-conf, se le puede indicar que deje el archivo de configuración tal cual, que utilice la nueva configuración, que permita editar la configuración actual o que combine los cambios interactivamente. dispatch-conf además dispone de algunas funcionalidades adicionales:

  • Automáticamente actualizar el fichero de configuración si las actualizaciones solamente afectan a comentarios
  • Automáticamente actualizar los ficheros de configuración que sólo difieren en la cantidad de espacios en blanco.

Hay que asegurarse de primero editar /etc/dispatch-conf.conf y crear el directorio al que hace referencia la variable archive-dir.

Listado de Código 1.1: Ejecutar dispatch-conf

# dispatch-conf

Cuando se ejecuta dispatch-conf, se procesan todos los ficheros de configuración que cambian, uno por uno. Pulse u para actualizar (reemplazar) el fichero actual por el nuevo y continuar con el siguiente. Pulse z para omitir (borrar) el nuevo fichero de configuración y continuar con el siguiente. Una vez que se hayan procesado todos los ficheros , dispatch-conf terminará. También se puede pulsar q en cualquier momento.

Para más información, consulte la página del manual de dispatch-conf. Allí se detalla como combinar interactivamente los de configuración actuales y los nuevos, editar nuevos archivos de configuración, comprobar las diferencias entre archivos y mucho más.

Listado de Código 1.2: Consultar la página del manual de dispatch-conf

$ man dispatch-conf

4.b. etc-update

También se puede utilizar etc-update para instalar los ficheros de configuración. No es tan simple como dispatch-conf, ni dispone de tantas funcionalidades, pero proporciona un método de combinación interactivo y también puede realizar actualizaciones triviales de manera automática.

Sin embargo, al contrario que dispatch-conf, etc-update no conserva las versiones antiguas de los archivos de configuración. Una vez se ha actualizado el fichero, la versión anterior se habrá eliminado de manera permanente. Ha de ser cuidadoso, ya que utilizar etc-update es sensiblemente menos seguro que dispatch-conf.

Listado de Código 2.1: Ejecutar etc-update

# etc-update

Después de combinar los cambios sencillos, se presentará una lista con los ficheros protegidos que tienen una actualización pendiente. Al final se muestran las opciones posibles:

Listado de Código 2.2: etc-update options

Por favor, seleccione el fichero a editar introduciendo el número correspondiente.
           (-1 para salir) (-3 para auto-combinar todos los ficheros restantes)
                           (-5 para auto-combinar SIN usar 'mv -i'):

Si se indica -1, etc-update terminará y no continuará con el resto. Si se introduce -3 o -5, todos los ficheros de configuración listados serán sobreescritos con las nuevas versiones. Por tanto es muy importante seleccionar primero los ficheros de configuración que no deben ser automáticamente actualizados. Esto se consigue simplemente indicando el número que aparece a la izquierda del fichero de configuración.

Como ejemplo, seleccionamos el fichero de configuración /etc/pear.conf:

Listado de Código 2.3: Actualizar un fichero de configuración concreto

Comienzo de diferencias entre /etc/pear.conf y /etc/._cfg0000_pear.conf
[...]
Fin de diferencias entre /etc/pear.conf y /etc/._cfg0000_pear.conf
1) Reemplazar el original con la actualización
2) Borrar la actualización, manteniendo el original inalterado
3) Combinar interactivamente el original y la actualización
4) Mostrar de nuevo las diferencias

Ahora puede ver las diferencias entre los dos ficheros. Si cree que el fichero de configuración actualizado puede ser utilizado sin problemas, indique 1. Si cree que el fichero de configuración actualizado no es necesario, o no proporciona ninguna información nueva o útil, indique 2. Si quiere actualizar su fichero de configuración actual de forma interactiva, introduzca 3.

Por ahora, no tiene sentido profundizar más sobre la actualización interactiva. Para completarlo, listaremos los comandos que están disponibles durante la combinación interactiva de ambos ficheros. Son mostradas dos líneas (la original, y la nueva propuesta) y un punto indicativo en el cual puede introducir uno de los comandos siguientes:

Listado de Código 2.4: Comandos disponibles en la combinación interactiva

ed:     Editar usando ambas versiones, cada una decorada con una cabecera.
eb:     Editar usando ambas versiones.
el:     Editar usando la versión de la izquierda.
er:     Editar usando la versión de la derecha.
e:      Editar una nueva versión.
l:      Usar la versión de la izquierda.
r:      Usar la versión de la derecha.
s:      Incluir las líneas comunes sin comentarios.
v:      Incluir las líneas comunes con comentarios.
q:      Salir.

Cuando haya acabado de actualizar los ficheros de configuración importantes, puede actualizar automáticamente el resto. etc-update acabará si no encuentra más ficheros de configuración para actualizar.

4.c. quickpkg

Con quickpkg se pueden crear archivos de paquetes que ya han sido instalados en el sistema. Estos archivos pueden usarse como paquetes precompilados. Ejecutar quickpkg es sencillo: basta añadir los nombres de los paquetes que se quiere archivar.

Por ejemplo, para archivar curl, orage y procps:

Listado de Código 3.1: Ejemplo de uso de quickpkg

# quickpkg curl orage procps

Los paquetes precompilados se almacenarán en $PKGDIR (por defecto /usr/portage/packages/). Los paquetes serán ubicados en $PKGDIR/<category>.

5. Divergiendo del árbol oficial

5.a. Utilizando un subconjunto del árbol Portage

Excluyendo categorías/paquetes

Puede realizar una actualización selectiva de ciertas categorías/paquetes e ignorar el resto. Esto se realiza indicando a rsync que excluya categorías/paquetes durante el proceso emerge --sync.

Necesita definir el nombre del fichero que contiene los patrones de exclusión en la variable PORTAGE_RSYNC_EXTRA_OPTS de su /etc/portage/make.conf.

Listado de Código 1.1: Definir el archivo de exclusiones en /etc/portage/make.conf

PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"

Listado de Código 1.2: Excluir todos los juegos en /etc/portage/rsync_excludes

games-*/*

Recuerde que esto puede provocar ciertos problemas con las dependencias, ya que paquetes nuevos y aceptados en su sistema pueden depender de otros excluidos.

5.b. Añadiendo Ebuilds no oficiales

Definiendo un directorio extensión de Portage (overlay)

Puede indicarle a Portage que utilice ebuilds que no están disponibles oficialmente a través del árbol de Portage. Cree un nuevo directorio (por ejemplo /usr/local/portage) en el cual guardará los ebuilds procedentes de otras fuentes. Utilice la misma estructura de directorios que tenemos en Portage.

Después defina la variable PORTDIR_OVERLAY en /etc/portage/make.conf y haga que apunte al directorio creado previamente. Cuando ahora utilice Portage, éste tendrá en cuenta aquellos ebuilds para no eliminarlos/sobreescribirlos la próxima vez que ejecute emerge --sync.

Trabajando con varias extensiones (overlays)

Para los usuarios que desarrollan en varias extensiones, probar los paquetes antes de que lleguen al árbol de Portage o simplemente que quieren utilizar ebuilds no oficiales procedentes de varias fuentes, el paquete app-portage/layman incorpora layman, una herramienta que ayudará a conservar las extensiones actualizadas.

En primer lugar, instale y configure layman como se muestra en la Guía del Usuario de Overlays de Gentoo, y añada los repositorios que desee con layman -a <overlay-name>.

Suponiendo que tiene dos repositorios llamados java (para las ebuilds en desarrollo) y entapps (para aplicaciones desarrolladas en casa para su empresa). Puede actualizar estos repositorios con la orden:

Listado de Código 2.1: Usando layman para actualizar todos los repositorios

# layman -S

Para más información sobre el trabajo con extensiones, por favor, lea man layman y la Guía de usuario de layman/overlay.

5.c. Software no mantenido por Portage

Utilizando Portage con programas con auto-mantenidos

En algunos casos querrá configurar, instalar y mantener programas por sí mismo sin que Portage automatice el proceso, incluso aunque Portage pueda suministrarle esos programas. Conocidos son los casos de las fuentes del núcleo y los controladores de nvidia. Puede configurar Portage para que conozca cuando un determinado paquete ha sido instalado manualmente en el sistema. Este proceso recibe el nombre de inyectar y está soportado por Portage a través del archivo /etc/portage/profile/package.provided.

Por ejemplo, si quiere que Portage le informe sobre gentoo-sources-2.6.11.6 el cual ha sido instalado manualmente, añada la siguiente línea a /etc/portage/profile/package.provided:

Listado de Código 3.1: Línea de ejemplo para package.provided

sys-kernel/gentoo-sources-2.6.11.6

6. La aplicación de Ebuilds

D. Configuración de Redes en Gentoo

1. Iniciándonos

1.a. Comenzando

Nota: Este documento asume que se tiene correctamente configurado el núcleo, los módulos para su hardware y que conoce el nombre de su interfaz hardware. También asumiremos que se está configurando eth0, pero podría tratarse de eno0, ens1, wlan0, enp1s0 etc.

Para comenzar a configurar su tarjeta de red, necesitamos que el sistema RC (guiones de inicio) de Gentoo la reconozca. Esto se hace creando un enlace simbólico desde net.lo a net.eth0 (o el nombre que tenga la interfaz de red en su sistema) en /etc/init.d.

Listado de Código 1.1: Crear el enlace simbólico net.eth0 apuntando a net.lo

# cd /etc/init.d
# ln -s net.lo net.eth0

El sistema RC de Gentoo ahora conoce la interfaz. También necesita saber cómo configurar la nueva interfaz. Todas las interfaces de red son configuradas en /etc/conf.d/net.
A continuación se muestra un ejemplo de configuración para DHCP y direcciones estáticas:

Listado de Código 1.2: Ejemplos de /etc/conf.d/net

# Para DHCP
config_eth0="dhcp"

# Para una IP estática usando notación CIDR
config_eth0="192.168.0.7/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"

# Para una IP estática usando notación de máscara de red
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"

Nota: Si no especifica una configuración para la interfaz entonces se asume el uso de DHCP.

Nota: CIDR (Classless InterDomain Routing) Originariamente, las direcciones IPv4 fueron clasificadas en A, B, o C. Esta clasificación temprana no tuvo en cuenta la gran popularidad que obtendría Internet, y ahora corre el riesgo de no tener suficientes direcciones únicas. CIDR es un esquema de direccionamiento que permite que una dirección IP designe muchas direcciones IP. Una dirección IP CIDR es igual que una dirección IP normal excepto que termina con una barra invertida seguida de un número; por ejemplo: 192.168.0.0/16. CIDR se describe en RFC 1519.

Ahora que ya hemos configurado nuestra interfaz, podemos iniciarla o detenerla utilizando las siguientes órdenes:

Listado de Código 1.3: Comenzar y detener los guiones de red

# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop

Importante: Cuando esté solucionando problemas con la red, échele una mirada a /var/log/rc.log. A no ser que haya configurado rc_logger="NO" en /etc/rc.conf, encontrará información almacenada en este archivo de registro acerca de las actividades al arrancar.

Ahora que ya ha iniciado y detenido la interfaz de red, quizá quiera que comience automáticamente cuando Gentoo arranca. Aquí tiene cómo hacerlo. La última orden "rc" indica a Gentoo que inicie todos los guiones en el nivel de ejecución actual que todavía no se hayan sido iniciado.

Listado de Código 1.4: Configurar una interfaz de red para que inicie en el arranque

# rc-update add net.eth0 default
# rc

2. Configuración Avanzada

2.a. Configuración Avanzada

La variable config_eth0 es el corazón de la configuración de una interfaz. Es una lista de instrucciones de alto nivel para configurar la interfaz (eth0 en este caso). Cada orden en la lista de instrucciones se ejecuta de manera secuencial. La interfaz será evaluada como OK si, al menos, un orden funciona.

Aquí tiene una lista de instrucciones integradas:

Orden Descripción
null No hace nada
noop Si la interfaz está funcionando y existe una dirección entonces aborta la configuración con éxito.
una dirección IPv4 o IPv6 Añade la dirección a la interfaz
dhcp,adsl o apipa (o una orden propia perteneciente a un módulo de terceras partes) Ejecuta el módulo que proporciona la orden. Por ejemplo dhcp ejecutará un módulo que proporcione dhcp, que pudiera ser uno cualquiera de los siguientes: dhcpcd, dhclient o pump.

Si una orden falla, puede especificar una orden de retorno (fallback). El retorno tiene que coincidir exactamente con la estructura de la configuración.

Puede encadenar estas órdenes. A continuación se muestran algunos ejemplos reales:

Listado de Código 1.1: Ejemplos de configuración

# Añadir tres direcciones IPv4
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"

# Añadir una dirección IPv4 y dos IPv6
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"

# Mantener la dirección asignada por el núcleo, a menos que la
interfaz se caiga, entonces asignar otra vía DHCP. Si DHCP falla entonces
añadir una dirección estática determinada mediante APIPA

config_eth0="noop
dhcp"
fallback_eth0="null
apipa"

Nota: Cuando se utiliza el módulo ifconfig y se añade más de una dirección, se crean alias de interfaz para cada dirección extra. De esta manera los dos ejemplos anteriores tendrán interfaces eth0, eth0:1 y eth0:2. No se puede hacer nada especial con estas interfaces ya que el núcleo y otros programas simplemente tratan eth0:1 y eth0:2 como eth0.

Importante: ¡La orden de retorno es importante! Si no especificamos la opción null, la orden apipa se ejecutaría solo si la orden noop falla.

Nota: APIPA y DHCP serán tratados más adelante.

2.b. Dependencias de red

Los guiones en /etc/init.d pueden depender de una interfaz de red específica o, simplemente, de net (red). Todos los interfaces de red en el sistema de inicio de Gentoo proporcionan algo llamado net.

Si está configurado rc_depend_strict="YES" en /etc/rc.conf, entonces todos los interfaces de red que proporcionen net deben estar activos antes que pueda considerarse cumplida la dependencia en "net". En otras palabras, si tienen los interfaces net.eth0 y net.eth1 y un guión de inicio depende de "net", ambos deben estar activados.

Por otro lado, si está configurado rc_depend_strict="NO", entonces la dependencia de "net" se considera cumplida al momento de estar activo al menos uno de los interfaces de red.

Pero, ¿y qué pasa si net.br0 depende de net.eth0 y net.eth1? net.eth1 podría ser un dispositivo wireless o ppp que necesita configurarse antes de añadirse al puente. Esto no puede hacerse en /etc/init.d/net.br0 ya que es un enlaces simbólico a net.lo.

La respuesta es definir nuestra propia requerimiento rc_need_ en /etc/conf.d/net

Listado de Código 2.1: Dependencia de net.br0 en /etc/conf.d/net


rc_need_br0="net.eth0 net.eth1"

Lo anterior no es suficiente. Los guiones de inicio de Gentoo utilizan una dependencia virtual llamada net para informar al sistema cuando está disponible la conexión a red. Claramente, en el caso de arriba la conexión a red debería marcarse como disponible cuando net.br0 está funcionando, no cuando lo están las otras. Por lo que tenemos que indicar también esto en /etc/conf.d/net:

Listado de Código 2.2: Actualizar las dependencias y provisiones para los servicios de red

rc_net_lo_provide="!net"
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"

Para una lectura más detallada sobre dependencias, consulte la sección Guiones de Inicio en el manual de Gentoo. Se puede encontrar más información acerca de /etc/rc.conf en los comentarios dentro del propio archivo.

2.c. Nombre de variables y valores

Los nombre de variables son dinámicos. Normalmente sigue la estructura variable_${interface|mac|essid|apmac}. Por ejemplo, la variable dhcpcd_eth0 guarda los valores para las opciones de dhcpcd para eth0 y dhcpcd_essid los valores para dhcpcd cuando cualquier interfaz se conecta al ESSID "essid".

Sin embargo, no hay ninguna regla que indique que los nombre de las interfaces sean ethx. De hecho, muchas interfaces wireless tienen nombres como wlanx, rax o ethx. También, algunas interfaces definidas por el usuario como pueden ser puentes puede tener cualquier nombre, como foo. Para hacer la vida un poco más interesante, los puntos de acceso wireless pueden tener nombres con caracteres no alfanuméricos - esto es importante porque puede configurar los parámetros de red por ESSID.

La desventaja de todo esto es que Gentoo usa variables bash para la red - y bash no puede utilizar nada fuera de caracteres alfanuméricos ingleses. Para solucionar esta limitación cambiamos cada carácter que no sea alfanumérico inglés por un carácter _.

Otra desventaja de bash es el contenido de las variables - algunos caracteres necesitan especificarse de manera especial. Esto se hace utilizando \ delante del carácter. A continuación tenemos una lista de caracteres especiales que necesitamos indicar de esta manera. ",' y \.

En este ejemplo utilizamos ESSID wireless ya que puede contener un amplio abanico de caracteres. Deberemos utilizar ESSID My "\ NET:

Listado de Código 3.1: Ejemplo de nombre para la variable

(Esto funciona, pero el dominio no es válido)
dns_domain_My____NET="My \"\\ NET"

(Lo que hay arriba configura el dominio dns a My "\ NET cuando una
tarjeta wireless se conecta a un AP cuyo ESSID es My "\ NET)

2.d. Nombrado de las interfaces de red

Cómo funciona

Los nombres de la interfaces de red no se obtienen de forma arbitraria, el núcleo Linux y el gestor de dispositivos (la mayoría de sistemas utilizan udev como gestor de dispositivos, aunque existen otros) obtiene el nombre de la interfaz mediante una serie de reglas prefijadas.

Cuando se detecta una interfaz en un sistema, el núcleo Linux recolecta los datos disponibles para esa tarjeta de red. Estos datos incluyen:

  1. el nombre registrado de tarjeta de red (en la propia interfaz) y que más tarde se podrá obtener a través del parámetro ID_NET_NAME_ONBOARD;
  2. la ranura en la cual se ha insertado la tarjeta de red y que más tarde se podrá obtener a través del parámetro ID_NET_NAME_SLOT;
  3. la ruta a través de la cual se accede a la tarjeta de red y que más tarde se podrá obtener a través del parámetro ID_NET_NAME_PATH;
  4. la dirección MAC (que ofrece el fabricante) de la tarjeta y que más tarde se podrá obtener mediante el parámetro ID_NET_NAME_MAC;

Basándose en esta información, el gestor de dispositivos decide como nombrar a las interfaces presentes en el sistema. Por defecto, utiliza el primero de los tres primeros parámetros que se muestran arriba (ID_NET_NAME_ONBOARD, _SLOT o _PATH). Por ejemplo, si se encuentra un valor para ID_NET_NAME_ONBOARD y éste es eno1, entonces la interfaz de red se llamará eno1.

Si sabe el nombre de su interfaz, puede ver los valores de los parámetros mediante la orden udevadm:

Listado de Código 4.1: Leer la información de la tarjeta de interfaz de red

# udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.
ID_NET_NAME_PATH=enp3s0

Como el primer (y realmente el único) de los parámetros que aparecen es ID_NET_NAME_PATH, su valor se utiliza para nombrar al interfaz de red. Si no se encuentra ninguno de los parámetros, entonces el sistema utiliza los nombres que ofrece el núcleo (eth0, eth1, etc.)

Utilizar el nombrado al viejo estilo del núcleo

Antes de este cambio, era el núcleo el que ponía los nombres a las tarjetas de red, dependiendo del orden en el que se cargaran sus controladores (entre otras, probablemente oscuras razones). Este comportamiento se puede aún activar definiendo la opción net.ifnames=0 en el gestor de arranque.

Usar sus propios nombres

La idea detrás de este cambio en el nombrado es la de no confundir a la gente y hacer los cambios de nombre de forma fácil. Suponga que tiene dos interfaces que se llamarían eth0 y eth1. Una se utiliza para acceder a la red a través de cable y la otra es inalámbrica. Con el soporte para el nombrado de interfaces, puede llamarlas lan0 (cableada) y wifi0 (inalámbrica, es mejor evitar usar los nombres anteriores bien conocidos como eth* y wlan* ya que todavía pueden parecerse a los nombres que hemos sugerido).

Todo lo que necesita ahora es encontar los parámetros para las tarjetas y utilizar esta información para definir su propia regla de nombrado:

Listado de Código 4.2: Definir el nombre lan0 para la interfaz actual eth0

# udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76
ID_OUI_FROM_DATABASE=Quanta Computer Inc.

# vim /etc/udev/rules.d/76-net-name-use-custom.rules
# La primera utilizar información de la dirección MAC
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_MAC}=="enxc80aa9429d76", NAME="lan0"
# La segunda utilizar información del parámetro ID_NET_NAME_PATH
SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"

Debido a que las reglas se disparan antes de la regla por defecto (las reglas se disparan en orden alfanumérico, por lo que la 70 se lee antes que la 80), los nombres ofrecidos en el fichero de reglas se utilizarán en lugar de los que se usan por defecto. El número asignado al fichero debería estar entre 76 y 79 (las variables de entorno se definen mediante una regla que comienza por 75 y el nombrado por defecto lo realiza una regla con el número 80).

3. Trabajo Modular con Redes

3.a. Módulos de Red

Ahora tenemos soporte para guiones de red, lo cual significa que podemos fácilmente añadir soporte para nuevos tipos de interfaces y módulos de configuración mientras mantenemos la compatibilidad con los actuales.

Los módulos se cargan por defecto si el paquete que los requiere está instalado. Si especifica un modulo aquí que no tiene su paquete instalado, entonces obtendrá un error acerca del paquete que necesita instalar. Lo ideal sería que solamente use la configuración con módulos si tiene dos o más paquetes que proporcionen el mismo servicio y necesita marcar su preferencia de uno sobre los otros.

Nota: Todas las configuraciones que aquí se comentan, son almacenadas en /etc/conf.d/net a menos que se especifique lo contrario.

Listado de Código 1.1: Preferencias en los módulos

# Preferir ifconfig sobre iproute2
modules="ifconfig"

# También se puede especificar otros módulos para una interfaz
# En este caso preferimos a udhcpc sobre dhcpcd
modules_eth0="pump"

# También podemos especificar módulos que no queremos utilizar -
# por ejemplo, puede querer utilizar un suplicante o linux-wlang-ng
# para controlar la configuración inalámbrica, pero querer seguir
# configurando la red por ESSID asociado.
modules="!iwconfig"

3.b. Manejadores de interfaces

Proporcionamos dos manejadores de interfaces: ifconfig e iproute2. Hará falta uno de estos para cualquier tipo de configuración de red.

Por defecto se instala ifconfig (el paquete net-tools es parte del perfil system). El paquete iproute2 es más poderoso y flexible, pero no se incluye por defecto.

Listado de Código 2.1: Para instalar iproute2

# emerge sys-apps/iproute2

# Para preferir ifconfig sobre iproute2 si ambos están instalados y debido a que openrc
# utilizar iproute2, debe hacer:
modules="ifconfig"

Ya que ifconfig e iproute2 hacen cosas muy parecidas, nos permitimos usar la misma configuración básica para ambos. Los ejemplos a continuación funcionarán sin importar cuál módulo tenga instalado.

Listado de Código 2.2: Ejemplos de ifconfig e iproute2

config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"

# También podemos especificar la dirección de difusión
config_eth0="192.168.0.2/24 brd 192.168.0.255"
config_eth0="192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"

3.c. DHCP

El DHCP es un medio para obtener información de red (dirección IP, servidores DNS, puerta de enlace, etc) de un servidor DHCP. Si existe un servidor DHCP en su red, apenas tendrá que decirle a cada cliente que utilice DHCP y el servidor se encargará de configurar el resto. Por supuesto, tendrá que configurar otras cosas la red inalámbrica, el ppp, etc. u otros si hacen falta antes de poder utilizar DHCP.

DHCP puede ser proporcionado por: dhclient, dhcpcd o pump. Cada módulo DHCP tiene sus propios pros y contras - aquí tiene un pequeño resumen:

Módulo DHCP Paquete Pros Contras
dhclient net-misc/dhcp Creado por la ISC, la misma gente que hacen el software dns BIND. Muy configurable Configuración excesivamente complicada, software bastante hinchado, no se puede obtener servidores NTP desde DHCP, no envía el nombre de host por defecto.
dhcpcd net-misc/dhcpcd Durante largo tiempo ha sido la opción por defecto de Gentoo, no depende de herramientas externas, activamente desarrollada por Gentoo. Puede ser un poco lento a veces, no se convierte en demonio cuando el arrendamiento de la dirección es infinito.
pump net-misc/pump Ligero, no depende de herramientas externas. Ya no es mantenido por los desarrolladores, no es fiable especialmente a través de modems, no se puede obtener servidores de NIS desde DHCP.

Si tiene más de un cliente DHCP instalado, hará falta especificar cuál utilizar - sino, utilizaremos dhcpcd por defecto, si está disponible.

Para enviar opciones específicas al módulo dhcp, utilizamos module_eth0="..."(cambie "module" por el nombre del módulo dhcp que vaya a utilizar - por ejemplo: dhcpcd_eth0).

Tratamos que el servicio DHCP sea relativamente agnóstico, de manera que soportamos las siguientes órdenes usando la variable dhcp_eth0. Por defecto no se configuran ninguno de ellos.

  • release- suelta la dirección IP para ser re-utilizada
  • rnodns - no sobre-escriba el /etc/resolv.conf
  • rnontp - no sobre-escriba el /etc/ntp.conf
  • rnonis - no sobre-escriba el /etc/yp.conf

Listado de Código 3.1: Ejemplo de configuración DHCP en /etc/conf.d/net

# Solamente necesita hacerlo si tiene más de un módulo
instalado
modules="dhcpcd"

config_eth0="dhcp"
dhcpcd_eth0="-t 10" # Espera agotada (timeout) después de 10
segundos
dhcp_eth0="release nodns nontp nonis" # Solamente obtenga la
dirección IP

Nota: dhcpcd y dpump envían el nombre de máquina al servidor DHCP por defecto así que no necesita especificarlo más.

3.d. ADSL con PPPoE/PPPoA

Primero necesitamos instalar el software ADSL.

Listado de Código 4.1: Instalar el paquete rp-pppoe

# emerge net-dialup/ppp

Segundo, cree el guión de red PPP y el guión de red para la interfaz ethernet que se utilizará con PPP:

Listado de Código 4.2: Crear los guiones para PPP y ethernet

# ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
# ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

Asegúrese de configurar rc_depend_strict a "YES" en /etc/conf.d/rc.

Ahora necesitamos configurar /etc/conf.d/net.

Listado de Código 4.3: Una configuración básica PPPoE

config_eth0=null (Especifique su intefaz ethernet)
config_ppp0="ppp"
link_ppp0="eth0" (Especifique su interfaz ethernet)
plugins_ppp0="pppoe"
username_ppp0='user'
password_ppp0='password'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"

rc_need_ppp0="net.eth0"

También puede configurar su password en /etc/ppp/pap-secrets.

Listado de Código 4.4: Ejemplo /etc/ppp/pap-secrets

# Ojo: el * es importante
"nombre-usuario" * "contraseña"

Si utiliza PPPoE con un modem USB necesitará instalar br2684ctl. Por favor, lea /usr/portage/net-dialup/speedtouch-usb/files/README para conseguir la información de cómo configurarlo adecuadamente.

Importante: Por favor, lea con detenimiento la sección sobre ADSL y PPP en /usr/share/doc/netifrc-*/net.example.bz2. Contiene muchas explicaciones mucho más detalladas de las configuraciones que su instalación PPP podría necesitar.

3.e. APIPA Direccionamiento Privado Automático (Automatic Private IP Addressing)

APIPA intenta encontrar una dirección libre en el rango 169.254.0.0-169.254.255.255 haciendo arping a direcciones aleatorias en ese rango para el interfaz. Si no se obtiene respuesta, se asigna esa dirección al interfaz.

Esto es útil solamente en redes donde no hay servidor DHCP y no hay conexión directa al Internet y que todos los demás computadores también usen APIPA.

Para soporte APIPA, haga emerge net-misc/iputils o net-analyzer/arping.

Listado de Código 5.1: Configuración de APIPA en /etc/conf.d/net

# Intentar DHCP primero - y si falla, entonces usar APIPA
config_eth0="dhcp"
fallback_eth0="apipa"

# Usar únicamente APIPA
config_eth0="apipa"

3.f. Bonding

Para unir enlaces con bonding/trunking haga emerge net-misc/ifenslave.

El "bonding" se utiliza para aumentar el ancho de banda hacia la red. Si tiene dos interfaces que van a usar la misma red, puede unirlos (bond, en inglés) para que las aplicaciones vean solo uno, aunque en realidad use ambos interfaces.

En primer lugar, elimine la configuración de las interfaces que van a participar.

Listado de Código 6.1: Eliminar la configuración de las interfaces en /etc/conf.d/net

config_eth0="null"
config_eth1="null"
config_eth2="null"

An continuación defina el bonding entre las interfaces:

Listado de Código 6.2: Definir el bonding

slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"

Elimine los servicios net.eth* de los niveles de ejecución, cree un servicio net.bond0 y añádalo al nivel de ejecución adecuado.

3.g. Puentes (soporte para 802.1d)

Para soportar puentes, haga emerge net-misc/bridge-utils.

Los puentes se usan para unir redes. Por ejemplo, puede tener un servidor conectando al internet vía modem ADSL y una tarjeta inalámbrica para que otros computadores se conecten al internet por medio del modem ADSL. Se puede crear un puente para unir ambos interfaces.

Listado de Código 7.1: Configurar un puente en /etc/conf.d/net

# Configure el puente - para más detalles vea "man brctl"
brctl_br0="setfd 0
sethello 2
stp on"

# Para agregar puertos al puente br0
bridge_br0="eth0 eth1"

# Hará falta configurar los puertos a valores nulos para no
iniciar dhcp
config_eth0="null"
config_eth1="null"

# Finalmente, déle una dirección al puente - para esto puede usar DHCP también
config_br0="192.168.0.1/24"

# Depend de eth0 y eth1 ya que pueden requerir configuración adicional
rc_need_br0="net.eth0 net.eth1"
}

Importante: Para usar algunas configuraciones de puente, tal vez tenga que consultar la documentación de Configuración por medio de variables.

3.h. Dirección MAC

Si lo requiere, también puede cambiar la dirección MAC de los interfaces por medio del archivo de configuración de red.

Listado de Código 8.1: Ejemplo de cambio de una dirección MAC

# Establecer una dirección MAC de un interfaz
mac_eth0="00:11:22:33:44:55"

# Para cambiar aleatoriamente solo los últimos 3 bytes
mac_eth0="random-ending"

# Para cambiar aleatoriamente entre tipos de conexión
# físicamente iguales (por ejemplo: fibra óptica, cobre, inalámbrica),
# para todos los proveedores
mac_eth0="random-samekind"

# Para cambiar aleatoriamente entre cualquier tipo físico de
# conexión (por ejemplo fibra óptica, cobre, inalámbrica),
# para todos los proveedores
mac_eth0="random-anykind"

# Generación completamente aleatoria -
# ADVERTENCIA: algunas direcciones MAC generadas de esta manera
# tal vez NO se comporten de la forma esperada
mac_eth0="random-full"

3.i. Haciendo túneles

No se requiere hacer emerge de paquete alguno para túneles, ya que el manejador del interfaz se encarga de esto.

Listado de Código 9.1: Configuración de túneles en /etc/conf.d/net

# Para túneles GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# Para túneles IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# Para configurar el interfaz
config_vpn0="192.168.0.2 peer 192.168.1.1"

3.j. VLAN (soporte para 802.1q)

Para dar soporte a VLAN, asegúrese de que se ha instalado sys-apps/iproute2 y también que se utiliza iproute2 como módulo de configuración en lugar de ifconfig.

Las redes virtuales son un grupo de dispositivos de red que se comportan como si estuviesen conectados a un solo segmento de red - aunque no lo estén. Miembros de una VLAN solo pueden ver miembros de la misma VLAN, aunque no compartan la misma red física.

Para configurar VLANs, en primer lugar especifique los números de VLAN en /etc/conf.d/net del siguiente modo:

Listado de Código 10.1: Especificar los números VLAN

lans_eth0="1 2"

A continuación, configure el interfaz para cada VLAN:

Listado de Código 10.2: Configurar la interface para cada VLAN

config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"

config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"

Las configuraciones específicas se VLAN se realizan con vconfig del siguiente modo:

Listado de Código 10.3: Configurar las VLANs

vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"

Importante: Para usar algunas configuraciones de VLAN, tal vez haga falta consultar la documentación de Configuración por medio de variables.

4. Redes Inalámbricas

4.a. Introducción

Las redes inalámbricas en Linux, normalmente se configuran de forma fácil. Hay dos formas de realizar esta configuración: clientes gráficos y la línea de comandos.

La forma más fácil es usar el cliente gráfico, una vea haya instalado un entorno de escritorio. La mayoría de clientes gráficos, como wicd y NetworkManager, son bastante autoexplicativos. Ofrecen una interfaz del tipo apuntar y hacer clic que le conectan a una red en cuestión de segundos.

Nota: wicd ofrece una utilidad de línea de comandos además de la interfaz gráfica principal. Puede obtenerla haciendo emerge de wicd con el ajuste USE ncurses activado. Esta utilidad wicd-curses es particularmente útil para aquéllos que no usan un entrono de escritorio basado en gtk, pero quieren una herramienta de línea de comandos fácil que no requiere configuración a mano de los ficheros.

Sin embargo, si no quiere usar un cliente gráfico, puede configurar la red inalámbrica con la línea de comandos, editando unos pocos ficheros de configuración. Esto toma un poco más de tiempo, pero también requiere de menos paquetes que descargar e instalar. Ya que los clientes gráficos son en su mayoría autoexplicativos (con capturas de pantalla útiles en sus páginas oficiales), nos centraremos en las alternativas de línea de comandos.

Puede configurar una red inalámbrica usando la línea de comandos, instalando wireless-tools o wpa_supplicant. Lo importante a recordar es que puede configurar las redes locales de forma global, no dependiendo de la interfaz.

La mejor opción es wpa_supplicant. Para un listado de los controladores soportados, lea la página de wpa_supplicant. Además, actualmente, wpa_supplicant sólo puede conectarse a SSIDs para los cuales haya sido configurado.

Los wireless-tools soportan casi todas las tarjetas y controladores, pero no puede conectarse a PAs (puntos de acceso) con WPA solamente. Si sus redes ofrecen únicamente cifrado WEP o están completamente abiertas, puede que prefiera la simpleza de wireless-tools.

Aviso: Actualmente el controlador linux-wlan-ng no está soportado por baselayout. Esto es debido a que linux-wlan-ng tiene su propia configuración que es completamente diferente a las demás. Se rumorea que los desarrolladores de linux-wlan-ng están pensando en cambiar su configuración a wireless-tools. Cuando esto suceda, podremos utilizar linux-wlan-ng con baselayout.

Algunas tarjetas inalámbricas están desactivadas por defecto. Para activarlas, por favor, consulte la documentación de su hardware. Algunas de estas tarjetas se pueden desbloquear mediante la aplicación rfkill. Si es éste el caso, utilice "rfkill list" para ver las tarjetas disponibles y "rfkill unblock <index>" para activar la funcionalidad inalámbrica. En otro caso, puede que tenga que desbloquear la tarjeta inalámbrica mediante un botón, conmutador o combinación especial de teclas en su ordenador portátil.

4.b. WPA Supplicant

WPA Supplicant es un paquete que le permite conectarse a puntos de acceso habilitados con WPA.

Listado de Código 2.1: Instalación de wpa_supplicant

# emerge net-wireless/wpa_supplicant

Importante: Debe activar CONFIG_PACKET en su kernel para que funcione wpa_supplicant. Intente ejecutar grep CONFIG_PACKET /usr/src/linux/.config para comprobar si lo tiene activado en su núcleo.

Nota: Dependiendo de sus ajustes USE, wpa_supplicant puede instalar una interfaz gráfica escrita en Qt4, que se integrará de forma adecuada con KDE. Para obtenerla, ejecute echo "net-wireless/wpa_supplicant qt4" >> /etc/portage/package.use como root antes de hacer emerge de wpa_supplicant.

Ahora debemos configurar /etc/conf.d/net para elegir wpa_supplicant sobre wireless-tools (si ambos están instalados, wireless-tools será usado por defecto).

Listado de Código 2.2: Configurar /etc/conf.d/net para wpa_supplicant

# Preferimos wpa_supplicant sobre wireless-tools
modules="wpa_supplicant"

# Es importante decirle a wpa_supplicant cuál controlador
# debemos usar ya que todavía no adivina bien
wpa_supplicant_eth0="-Dmadwifi"

Nota: Si está usando el controlador host-ap, hará falta colocar el interfaz en modalidad gestión (Managed mode) antes de poder usarlo correctamente con wpa_supplicant. Para esto puede usar iwconfig_eth0="mode managed" en /etc/conf.d/net.

Eso fue sencillo, ¿verdad? Sin embargo, todavía nos queda configurar wpa_supplicant, que es algo más difícil, dependiendo de cuán seguros son los PAs a los cuales tratamos de conectarnos. A continuación mostramos un ejemplo simplificado del archivo /etc/wpa_supplicant.conf.example, parte del paquete wpa_supplicant.

Listado de Código 2.3: Un ejemplo de /etc/wpa_supplicant.conf

# No cambie la siguiente línea, a riesgo que no funcione
ctrl_interface=/var/run/wpa_supplicant

# Asegúrese que sólo root puede leer la configuración de WPA
ctrl_interface_group=0

# Permítale a wpa_supplicant encargarse del barrido y selección de los PA
ap_scan=1

# Caso sencillo: WPA-PSK, PSK como contraseña-frase ASCII,
# permitir todas las encriptaciones válidas
network={
  ssid="sencillo"
  psk="contraseña-frase muy secreta"
  # A mayor prioridad, más rápido nos conectaremos
  priority=5
}

# Igual que el ejemplo anterior, pero barriendo por un SSID
# específico (para los PAs que rechazan transmitir el SSID)
network={
  ssid="segundo ssid"
  scan_ssid=1
  psk="contraseña-frase muy secreta"
  priority=2
}

# Solamente estamos usando WPA-PSK. Se aceptada cualquier encriptación válida
network={
  ssid="ejemplo"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}

# Conexión sin encriptar (sin WPA, o IEEE 802.1X)
network={
  ssid="prueba-noencriptada"
  key_mgmt=NONE
}

# Conexión con clave WEP compartida (sin WPA, o IEEE 802.1X)
network={
  ssid="prueba-estatica-wep"
  key_mgmt=NONE
  # Claves entrecomilladas son ASCII
  wep_key0="abcde"
  # Claves sin comillas en hexadecimal
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}

# Conexión con clave WEP compartida (sin WPA, o IEEE 802.1X)
# usando autentificación con clave compartida IEEE 802.11
network={
  ssid="prueba-estatica-wep2"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
  auth_alg=SHARED
}

# Red IBSS/ad-hoc con WPA-None/TKIP
network={
  ssid="prueba adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="contraseña-frase secreta"
}

4.c. Wireless Tools

Configuración inicial y modo manejado

Los Wireless Tools proveen una manera genérica para configurar los interfaces inalámbricos básicos hasta el nivel de seguridad WEP. Aunque WEP es un sistema de seguridad débil, también es el más prevalente.

La configuración de Wireless Tools es controlado por algunas variables principales. El archivo ejemplo de configuración a continuación deberá describir todo lo requerido. Algo para mantener presente es que ninguna configuración significa "conectarse al punto de acceso sin encriptación que tenga la señal más fuerte" - de manera que siempre tratará de conectarse con lo que sea.

Listado de Código 3.1: Instalar wireless-tools

# emerge net-wireless/wireless-tools

Nota: Aunque pueda almacenar su configuración inalámbrica en /etc/conf.d/wireless, esta guía le recomienda hacerlo en /etc/conf.d/net.

Importante: Hará falta consultar la documentación acerca de nombres de variables.

Listado de Código 3.2: Configuración ejemplo con iwconfig en /etc/conf.d/net

# Prefiera iwconfig sobre wpa_supplicant
modules="iwconfig"

# Configure las claves WEP para los PAs ESSID1 y ESSID2
# Pueden configurarse hasta 4 claves WEP, pero solo una puede
# estar activa a la vez, así que tenemos un índice por defecto
# de [1] para la clave [1] y luego otra vez para cambiar la clave activa a [1]
# Hacemos esto en caso que defina otros ESSIDs para usar claves WEP que no sean 1
#
# El prefijar la clave con s: significa que es una clave ASCII,
# porque sino es una clave HEX
#
# enc open especifica seguridad abierta (máxima seguridad)
# enc restricted especifica seguridad restringida (menos segura)
key_ESSID1="[1] s:suclaveaqui key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"

# Los ejemplos a continuación solo funcionan una vez que se
# haya barrido para los PAs disponibles.

# A veces se registra más de un PA, así que hará falta definir
# un orden de preferencia para conectarse
preferred_aps="'ESSID1' 'ESSID2'"

Afinamiento en la selección de puntos de acceso

Puede agregar opciones adicionales para afinar la selección de puntos de acceso, pero normalmente esto no hace falta.

Puede decidirse si conectarse solamente a PAs preferidos o no. Por defecto, si falla todo lo configurado y nos podemos conectar a un PA no encriptado, entonces se hará. Esto puede ser controlado con la variable associate_order (orden asociado). Sigue una tabla de valores y como estos ejercen este control.

Valor Descripción
any (cualquiera) Comportamiento por defecto
preferredonly (solo preferidos) Solamente nos conectaremos a PAs visibles en la lista de preferidos
forcepreferred (obligado a preferidos) Nos conectaremos obligatoriamente a los PAs en el orden preferido aunque no se encuentren en un barrido
forcepreferredonly (solamente preferidos obligados) No barrer buscando PAs - solo tratar de conectar a cada uno en orden
forceany (obligar a cualquiera) Igual que forcepreferred y además se conecta a cualquier otro disponible

Finalmente podemos hacer una lista negra de PAs (blacklist_aps) y seleccionar un único PA (unique_ap). blacklist_aps funciona de manera similar a preferred_aps. unique_ap es un valor si o no (yes o no) que determina si un segundo interfaz inalámbrico se puede conectar al mismo punto de acceso que el primer interfaz.

Listado de Código 3.3: Ejemplo de blacklist_aps y de unique_ap

# A veces nunca queremos conectarnos a algunos PAs
blacklist_aps="'ESSID3' 'ESSID4'"

# Si tiene más de una tarjeta inalámbrica, puede determinar
# que cada interfaz se asocie al mismo PA o no
# Los valores son "yes" y "no"
# El valor por defecto es "yes"
unique_ap="yes"

Modos Ad-Hoc y Master

Si desea establecerse como un nodo Ad-Hoc al no lograr conectarse a algún PA en modo manejado, puede hacerlo también.

Listado de Código 3.4: Usar modo ad-hoc en caso de no conectar en modo manejado

adhoc_essid_eth0="This Adhoc Node"

Y ¿qué tal conectarse a redes Ad-Hoc o funcionar en modo Master para convertirse en PA? ¡Aquí tenemos una configuración justo para eso! Tal vez tenga que especificar alguna clave WEP como se muestra arriba.

Listado de Código 3.5: Ejemplo de configuración ad-hoc/master

# Establezca el modo - que puede ser manejado (por defecto), ad-hoc o master
# No todos los manejadores soportan todos los modos
mode_eth0="ad-hoc"

# Establezca el ESSID del interfaz
# En modo manejado, esto obliga el interfaz intentar conectarse al
# ESSID especificado solamente
essid_eth0="This Adhoc Node"

# Usamos el canal 3 si no se establece otro
channel_eth0="9"

Importante: A continuación citamos la documentación wavelan de BSD encontrado en la documentación de NetBSD Existen 14 canales posibles; Se nos informa que los canales 1-11 son legales para Norteamérica , los canales 1-13 para la mayor parte de Europa, los canales 10-13 para Francia y sólo el canal 14 para el Japón. En caso de duda, por favor eche un vistazo a la documentación que acompaña la tarjeta o el PA. Asegúrese que el canal que selecciona es el mismo del PA (o de la otra tarjeta en caso de ser red ad-hoc). Para las tarjetas vendidas en Norteamérica y la mayor parte de Europa, es el canal 3 por defecto; en Francia el 11 y en el Japón es el 14.

Solucionar problemas con Wireless Tools

Existen más variables que sirven para ayudar a configurar y operar una red inalámbrica por problemas ambientales o del manejador. Aquí presentamos una tabla de otras cosas para intentar.

Variable Valor por defecto Descripción
iwconfig_eth0 Vea la página man de iwconfig para detalles acerca de qué enviar a iwconfig
iwpriv_eth0 Vea la página man de iwpriv para detalles acerca de qué enviar a iwpriv
sleep_scan_eth0 0 La cantidad en segundos a dormir antes de intentar un barrido. Esto hace falta cuando el manejador/firmware requiere de más tiempo para activarse antes de poder usarlos.
sleep_associate_eth0 5 La cantidad en segundos a esperar para que el interfaz se asocie con el PA antes de continuar al siguiente.
associate_test_eth0 MAC Algunos manejadores no resetean la dirección MAC asociada a una inválida cuando pierden la señal o intentan asociarse. Algunos manejadores no resetean el nivel de calidad cuando pierden la señal o intentan asociarse. La configuraciones válidas son MAC, quality y all.
scan_mode_eth0 Algunos manejadores tienen que hacer el barrido en modo ad-hoc, así que, si falla el barrido, intente configurar aquí como ad-hoc.
iwpriv_scan_pre_eth0 Envía algunas órdenes iwpriv al interfaz antes del barrido. Consulte la página man de iwpriv para más detalles.
iwpriv_scan_post_eth0 Envía algunas órdenes iwpriv al interfaz después del barrido. Vea la página man de iwpriv para más detalles.

4.d. Definir la configuración de la red por ESSID

A veces, se necesita una dirección IP estática cuando se conecta a un ESSID1 y cuando lo hace a ESSID2, se utiliza DHCP. De hecho, casi todas las variables de módulo pueden cambiarse por ESSID. A continuación mostramos cómo se hace.

Nota: Esto funciona sin importar si usa WPA Supplicant o Wireless Tools.

Importante: Necesitará consultar la documentación variable name.

Listado de Código 4.1: Reemplazar configuración de red por ESSID

config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"

config_ESSID2="dhcp"
fallback_ESSID2="192.168.3.4/24"
fallback_route_ESSID2="default via 192.168.3.1"

# Podemos definir servidores DNS y otras cosas también
# NOTA: DHCP reemplazará esta configuración a menos que se le indique que no debe hacerlo
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_domain_ESSID1="algun.dominio"
dns_search_domains_ESSID1="busque.eneste.dominio busque.enaquel.dominio"

# Reemplace usando la dirección MAC del PA
# Esto es muy útil si usa distintas ubicaciones con el mismo ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"

5. Agregando Funcionalidad

5.a. Puntos de enlace standard en las funciones

Se pueden definir cuatro funciones en /etc/conf.d/net, que pueden ser llamadas antes o después de las operaciones start/stop, de arranque/parada. Sus nombres se componen empezando con el nombre de interfaz, de manera que una función puede controlar múltiples interfaces.

Los valores de retorno de las funciones preup y predown deben ser cero (éxito) indicando que la configuración o la des-configuración de los interfaces pueden continuar. Si preup devuelve un valor no-cero, se detendrá la configuración del interfaz. Si predown devuelve un valor no-cero, no se permite que el interfaz continúe desconfigurándose.

Los valores de retorno de las funciones postup() y postdown() serán ignorados, ya que no hay nada que hacer si hay indicación de algún fallo.

${IFACE} es el interfaz que será encendido/apagado, ${IFVAR} es ${IFACE} convertido a un nombre de variable válido según bash.

Listado de Código 1.1: Ejemplo de funciones pre/post up/down

preup() {
        # Comprobación del enlace de la interfaz antes de activarla.
        # Esto solamente funciona con algunos interfaces de red y necesita
        # que el paquete ethtool este instalado.
        if ethtool ${IFACE} | grep -q 'Link detected: no'; then
                ewarn "No link on ${IFACE}, aborting configuration"
                return 1
        fi

        # Recordamos devolver cero si todo fue correcto
        return 0
}

predown() {
        # Por defecto en el guión de inicio se comprueba si
        # el sistema (root) está montado por NFS y en ese caso no permitir
        # que las interfaces se desactiven. Tenga en cuenta que, si
        # especifica una función predown() sobreescribirá está regla.
        # Aquí la tiene en caso de que todavía quiera utilizarla...
        if is_net_fs /; then
                eerror "root filesystem is network mounted -- can't stop ${IFACE}"
                return 1
        fi

        # Recordamos devolver cero si todo fue correcto
        return 0
}

postup() {
        # Esta función podría utilizarse, por ejemplo, para
        # registrarse en un servicio dinámico de DNS. Otra posibilidad
        # sería enviar un correo cada vez que la interfaz se conecta.
       return 0
}

postdown() {
        # Esta función está aquí mayormente para redondear ...
        Aún no hemos pensado en algo interesante que pueda hacer ;-)
        return 0
}

Nota: Para mayor información acerca de escribir sus propias funciones, agradecemos lea /usr/share/doc/netifrc-*/net.example.bz2.

5.b. Puntos de enlace para las herramientas inalámbricas

Nota: Esto no funcionará con WPA suplicante - pero las variables ${ESSID} y ${ESSIDVAR} están disponibles en la función postup().

Se pueden definir dos funciones en /etc/conf.d/net que se ejecutan antes y después de la función asociada referida. Estas funciones se nombran antecediéndole el nombre del interfaz, de manera que la misma función puede controlar múltiples interfaces.

El valor retornado por la función preassociate() debe ser 0 (éxito) para indicar que la configuración o desconfiguración del interfaz puede continuar. Si la función preassociate() retorna un valor no-cero, se interrumpirá la configuración del interfaz.

El valor retornado por la función postassociate() se ignora, ya que no hay nada que hacer si llegase a indicarse una falla.

A ${ESSID} se le asigna el ESSID exacto del PA al cual se está conectando, ya que ${ESSIDVAR} es ${ESSID}, convertido a un nombre de variable permitido por bash.

Listado de Código 2.1: Funciones pre/post asociación en /etc/conf.d/net

preassociate() {
        # A continuación se agregan 2 variables
        # de configuración leap_user_ESSID y leap_pass_ESSID. Cuando
        # ambos estén configurados para el ESSID al que se conectan,
        # corremos el guión LEAP de CISCO.

        local user pass
        eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
        eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"

        if [[ -n ${user} && -n ${pass} ]]; then
                if [[ ! -x /opt/cisco/bin/leapscript ]]; then
                        eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
                        return 1
                fi
                einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
                if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
                        ewarn "Login Failed for ${user}"
                        return 1
                fi
        fi

        return 0
}

postassociate() {
        # Esta función existe mayormente para completar ...
        # aunque no he pensado en algo interesante para hacer acá
        # todavía ;-)

        return 0
}

Nota: Las variables ${ESSID} y ${ESSIDVAR} no están disponibles en las funciones predown() y postdown().

Nota: Para mayor información acerca de cómo escribir sus propias funciones, agradecemos lea /usr/share/doc/netifrc-*/net.example.bz2.

6. Manejo de Redes

6.a. Gestión de la red

Si el ordenador está en continuo movimiento, no siempre tendrá un cable ethernet conectado o un punto de acceso disponible. También, puede querer que la red funcione automáticamente cuando un cable ethernet se conecte o se encuentre un punto de acceso.

Aquí se encuentran algunas herramientas que puede ayudar a gestionar esto.

Nota: Esto documento solamente tiene habla sobre ifplugd, pero hay alternativas como netplub. netplug es una alternativa ligera a ifplugd, pero confía en que tus controladores de red del núcleo funcionen correctamente, cosa que muchas veces no es así.

6.b. ifplugd

ifplugd es un demonio que arranca y para las interfaces de red cuando un cable se conecta o se desconecta. También puede gestionar la detección asociándose a un punto de acceso o cuando uno nuevo entra dentro del radio de detección.

Listado de Código 2.1: Instalar ifplugd

# emerge sys-apps/ifplugd

La configuración de ifplugd es bastante clara. El archivo de configuración se encuentra en /etc/conf.d/net. Ejecute man ifplugd para obtener más detalles sobre las variables disponibles. Además, puede consultar más ejemplos en /usr/share/doc/netifrc-*/net.example.bz2.

Listado de Código 2.2: Ejemplo de configuración de ifplug

(Sustituya eth0 con la interfaz que quiera monitorizar)
ifplugd_eth0="..."

(Para monitorizar una interfaz wireless)
ifplugd_eth0="--api-mode=wlan"

Además, para manejar múltiples conexiones de red, quizá quiera instalar una herramienta que facilita el trabajo con múltiples configuraciones y servidores DNS. Es realmente útil cuando se recibe la dirección IP via DHCP. Simplemente instale openresolv.

Listado de Código 2.3: Instalar openresolv

# emerge openresolv

Consulte man resolvconf para aprender más cosas sobre sus características.

Imprimir

Página actualizada 12 de abril, 2014

Esta traducción ha dejado de tener soporte

Sumario: Este es el Manual Gentoo, un esfuerzo para centralizar la información acerca de Gentoo/Linux. Este manual contiene las instrucciones de instalación para sistemas PPC y distintas partes sobre trabajo con Gentoo y Portage.

Sven Vermeulen
Autor

Roy Marples
Autor

Daniel Robbins
Autor

Chris Houser
Autor

Jerry Alexandratos
Autor

Seemant Kulleen
Desarrollador Gentoo x86

Tavis Ormandy
Desarrollador Gentoo Alpha

Jason Huebel
Desarrollador Gentoo AMD64

Guy Martin
Desarrollador Gentoo HPPA

Pieter Van den Abeele
Desarrollador Gentoo PPC

Joe Kallar
Desarrollador Gentoo SPARC

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Erwin
Editor

Joshua Kinard
Editor

Tobias Scherbaum
Editor

Lars Weiler
Editor

Jochen Maes
Editor

Xavier Neys
Editor

Joseph Jezak
Editor

Grant Goodyear
Revisor

Gerald J. Normandin Jr.
Revisor

Donnie Berkholz
Revisor

Ken Nowack
Revisor

José Alberto Suárez López
Traductor

John Christian Stoddart
Traductor

José Luis Rivero
Traductor

Carles Ferrer
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.