Gentoo Logo

Guía de Migración de Baselayout y OpenRC

Contenido:

1.  Conceptos previos

¿Qué es baselayout?

Baselayout proporciona un conjunto básico de archivos necesarios para que cualquier sistema funcione correctamente, tal como /etc/hosts. También proporciona la disposición básica del sistema de archivos usado por Gentoo (por ejemplo, los directorios /etc, /var, /usr, /home).

¿Qué es OpenRC?

OpenRC es un sistema de arranque (rc system) con gestión de dependencias que trabaja con cualquier init proporcionado por el sistema, normalmente /sbin/init. Sin embargo, no es un reemplazo para /sbin/init. El init predeterminado de Gentoo Linux es sys-apps/sysvinit, mientras que Gentoo/FreeBSD usa el init de FreeBSD provisto por sys-freebsd/freebsd-sbin.

Entonces ¿por qué migrar?

Originalmente el sistema rc de Gentoo formaba parte de baselayout 1 y estaba escrito completamente en bash. Esto conlleva varias limitaciones. Por ejemplo, se necesita acceder a determinadas llamadas al sistema durante el arranque, y se requiere agregar llamadas en C. Estas llamadas se enlazaban estáticamente, aumentando notablemente el tamaño del sistema rc con el paso del tiempo.

Además, al expandir Gentoo a otras plataformas como Gentoo/FreeBSD y Gentoo Empotrado, se hacía imposible continuar con un sistema rc basado en bash. Esto propulsó el desarrollo de baselayout 2, escrito en C y que solo requiere un intérprete de comandos que cumpla la norma POSIX. Durante el desarrollo de baselayout 2, se determinó que sería mejor si baselayout solo proporcionara los archivos base y disposición de archivos para Gentoo y que el sistema rc fuese separado como un paquete independiente. De manera que así tenemos OpenRC.

OpenRC fue desarrollado inicialmente por Roy Marples hasta el año 2010. Ahora lo mantiene el Proyecto Gentoo OpenRC. OpenRC soporta todas las variaciones actuales de Gentoo (por ejemplo, Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded y Gentoo Vserver), y otras plataformas como FreeBSD y NetBSD.

2.  Migrar a OpenRC

La migración a OpenRC es relativamente sencilla, ya que aparecerá como parte del proceso regular de actualizaciones por medio del gestor de paquetes. De hecho, el paso más importante viene después de instalar los nuevos paquetes >=sys-apps/baselayout-2 y sys-apps/openrc. Es crítico ejecutar dispatch-conf asegurándonos que nuestro directorio /etc esté actualizado antes de reiniciar. El hecho de no actualizar este directorio resultará en un sistema que no arrancará, y se necesitará utilizar el LiveCD de Gentoo para realizar los pasos detallados a continuación con el fin de reparar el sistema.

Una vez actualizados los archivos de configuración debemos verificar algunas cosas antes de reiniciar.

/etc/conf.d/rc

El archivo /etc/conf.d/rc es ahora obsoleto, por lo que cualquier configuración debe ser trasladada a /etc/rc.conf. Por favor, lea los comentarios en /etc/rc.conf y /etc/conf.d/rc y migre la configuración. Una vez terminado, puede borrar /etc/conf.d/rc.

Módulos del núcleo

Normalmente, cuando uno desea cargar ciertos módulos del núcleo al arrancar, se colocan sus nombres y correspondientes parámetros en /etc/modules.autoload.d/kernel-2.6. En baselayout-2 ya no se usa este archivo. Ahora, los módulos a cargar automáticamente y sus parámetros se colocan en un solo archivo, /etc/conf.d/modules, sin importar la versión del núcleo.

Un ejemplo del estilo antiguo de configuración sería:

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

ivtv
cx88_dvb video_br=2

Al transformar este ejemplo, resulta:

Listado de Código 2.2: /etc/conf.d/modules

# Módulos a cargar automáticamente al arrancar
modules_2_6="ivtv cx88_dvb"
# Parámetros del módulo
module_cx88_dvb_args_2_6="video_br=2"

En los anteriores ejemplos, los módulos y sus parámetros, se pasarían únicamente a núcleos de la serie 2.6.x. La nueva configuración permite un control más fino sobre los módulos y los parámetros basados en la versión del núcleo.

Importante: Las variables module* no son acumulativas. Las variables que son específicas de versiones tomarán precedencia sobre las variables generales.

Nota: Por favor, observe la diferencia entre module_ y modules_.

Un ejemplo más completo sería:

Listado de Código 2.3: Ejemplo detallado de /etc/conf.d/modules

# Cargar ivtv solo para el núcleo 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"
# Cargar cx88_dvb solo para núcleos 2.6.23 (distintos a -gentoo-r5)
modules_2_6_23="cx88_dvb"
# Cargar tun y usbserial solo para núcleos de la serie 2.6.x donde x != 23
modules_2_6="tun usbserial"
# De lo contrario cargar ochi1394 y ieee1394
modules="ohci1394 ieee1394"

# Para el núcleo 2.6.23-gentoo-r5, pase video_br=2 a cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# Para núcleos de la serie 2.6.x, siempre pase proveedor y producto
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Siempre pase debug a ieee1394
module_ieee1394_args="debug"

Nivel de ejecución boot

El nivel de ejecución boot realiza varios pasos importantes en cada máquina. Por ejemplo, asegurar que el sistema de archivos raíz esté montado para lectura/escritura, revisar si existen errores en los sistemas de archivo, que los puntos de montaje estén disponibles y que el pseudo sistema de archivos /proc se inicia al arrancar.

Con OpenRC, el manejo de servicios de volúmenes de dispositivos de almacenamiento en bloque ya no se ejecuta automáticamente al iniciar. Esto incluye lvm, raid, particiones de intercambio, device-mapper (dm), dm-crypt y demás. Asegúrese que el guión de inicio apropiado para cada servicio esté en el nivel de ejecución boot, si no ¡es posible que el sistema no arranque!

Aunque el ebuild de OpenRC intentará hacer esta migración por su cuenta, debe verificar que todos los servicios de manejo de volúmenes se hayan migrado correctamente:

Listado de Código 2.4: Mostrar todos los servicios en el nivel de ejecución boot

# ls -l /etc/runlevels/boot/

Si no ve root, procfs, mtab, swap y fsck en el listado anterior, ejecute las siguientes órdenes para agregarlos al nivel de ejecución boot:

Listado de Código 2.5: Agregar los servicios críticos al nivel de ejecución boot

# rc-update add root boot
# rc-update add procfs boot
# rc-update add mtab boot
# rc-update add fsck boot
# rc-update add swap boot

Si utiliza mdraid y lvm y no los ve en la lista anterior, ejecute las siguientes órdenes para agregar los guiones de inicio al nivel de ejecución boot:

Listado de Código 2.6: Agregar mdraid y lvm al nivel de ejcución boot

# rc-update add mdraid boot
# rc-update add lvm boot

Udev

OpenRC ya no inicia udev por defecto, aunque sí necesita estar presente en el nivel de ejecución sysinit para ser iniciado. El ebuild de OpenRC debe detectar si udev estaba activado previamente para agregarlo al nivel de ejecución sysinit. Sin embargo, para estar seguro, revise si udev esta presente:

Listado de Código 2.7: Verificar udev

# ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev

Si udev no está listado, agréguelo al nivel de ejecución correcto:

Listado de Código 2.8: Agregar udev al nivel de ejecución sysinit

# rc-update add udev sysinit

La red

Debido a que baselayout y OpenRC ahora son paquetes separados, el guión net.eth0 podría desaparecer durante el proceso de actualización. Para reemplazar este guión de inicio y añadirlo de nuevo al nivel de ejecución por defecto, haga lo siguiente:

Listado de Código 2.9: Añadir de nuevo el guión net.eth0

# rc-update add net.eth0 default

Si falta algún otro guión de red, siga las instrucciones anteriores para agregarlas otra vez, reemplazando eth0 con el nombre del dispositivo de red.

Además, /etc/conf.d/net (el anterior net) ya no usa estructuras estilo bash para la configuración. Por favor, examine /usr/share/doc/openrc-<versión>/net.example para instrucciones de configuración. La conversión debería ser relativamente sencilla, convirtiendo a lineas nuevas para entradas distintas, por ejemplo, una asignación estática de IP cambiaría así:

Listado de Código 2.10: Estilo anterior de /etc/conf.d/net

config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" "10.0.0.0/8 via 192.168.1.2" )

Listado de Código 2.11: Estilo nuevo /etc/conf.d/net

config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100 10.0.0.0/8 via 192.168.1.2"

Reloj

El archivo de configuración del reloj ha cambiado de nombre, de /etc/conf.d/clock al nombre de la herramienta nativa que ajusta el reloj de su sistema. Esto significa que en Linux será /etc/conf.d/hwclock y en FreeBSD será /etc/conf.d/adjkerntz. Los sistemas que no tengan chip de reloj (RTC) deberán utilizar /etc/init.d/swclock, que ajusta la hora del sistema del mtime de un archivo creado en el momento de apagar el sistema. Los guiones de inicio en /etc/init.d/ también han cambiado su nombre de manera correspondiente, así que asegúrese que el guión apropiado para el sistema se ha agregado al nivel de ejecución boot.

Además, la variable de entorno TIMEZONE ya no se encuentra en este archivo. Su contenido se encuentra ahora en el archivo /etc/timezone. Si este no existe, por supuesto deberá crearlo con su zona horaria. Por favor, revise ambos archivos para estar seguro que estén correctos.

El valor apropiado de este archivo es la trayectoria relativa a la zona horaria desde /usr/share/zoneinfo. Por ejemplo, para alguien que viva en la costa este de los Estados Unidos, la siguiente configuración sería correcta:

Listado de Código 2.12: /etc/timezone

America/New_York

XSESSION

La variable XSESSION ya no se encuentra en /etc/rc.conf. Ahora se puede configurar la variable XSESSION para cada usuario en su ~/.bashrc (o equivalente), o para el sistema entero en /etc/env.d/.

A continuación se muestra un ejemplo de la configuración de la variable XSESSION para todo el sistema:

Listado de Código 2.13: Configurar XSESSION para todo el sistema

# echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession

Importante: Recuerde ejecutar env-update después de crear un archivo en /etc/env.d, salga del sistema y luego vuelva a entrar para que tenga efecto. Si configura la variable en ~/.bashrc, vuelva a leer los valores con source ~/.bashrc.

EDITOR y PAGER

La variable EDITOR ya no se encuentra en /etc/rc.conf. Ambas variables EDITOR y PAGER, se configuran por defecto en /etc/profile. Modifique esto según su conveniencia en su archivo ~/.bashrc (o equivalente) o cree el archivo /etc/env.d/99editor y configure el valor por defecto del sistema allí.

Importante: Debe ejecutar env-update después de crear un archivo en /etc/env.d y después salir del sistema y volver a entrar para que tenga efecto. Si configura la variable en ~/.bashrc, puede leer de nuevo el archivo con source ~/.bashrc.

Mensajes (Log) de Arranque

Anteriormente, se podía registrar el proceso de arranque con app-admin/showconsole. Sin embargo, como ahora OpenRC procesa todos los registros del sistema internamente, ya no es necesario utilizar la utilidad showconsole. Para continuar registrando los mensajes de arranque, establezca la variable apropiada en /etc/rc.conf. Los mensajes se guardarán en /var/log/rc.log.

Listado de Código 2.14: Activar mensajes de arranque en /etc/rc.conf

rc_logger="YES"

local.start y local.stop

En OpenRC ya no se usan los guiones /etc/conf.d/local.start y local.stop. En la migración a OpenRC, estos ficheros se mueven a /etc/local.d y se les añade el sufijo .start o .stop. OpenRC ejecutará estos guiones en orden alfabético.

Subtipos de sistema: Casos especiales de virtualización

En las versiones iniciales de OpenRC, detectábamos explícitamente múltiples tipos de virtualización, y usábamos esta detección para comprobar cuando ciertos guiones de inicio debían ser pasados por alto, usando la llamada keyword en las funciones depend.

Sin embargo, a partir de la versión 0.7.0, se deberá configurar de manera explícita el subtipo con la variable rc_sys en /etc/rc.conf. El subtipo debe ajustarse para concordar con el entorno de virtualización donde esté la raíz. En general, un valor no vacío de rc_sys debe estar entre los contenedores virtuales. El nodo anfitrión tendrá rc_sys="".

Importante: Si no tiene algún subtipo específico, por favor, use el valor predeterminado, una cadena vacía "". Si la variable no está definida, recibirá una advertencia y se intentará usar el antiguo algoritmo de detección.

Nota: Si no sabe qué valor estaba usando su sistema con la detección automática, debe comentar de forma temporal la variable rc_sys y ejecutar la orden de detección rc -S.

Listado de Código 2.15: Ajustar el subtipo de sistema a ninguno en /etc/rc.conf

rc_sys=""

El algoritmo de detección debió ser reemplazado por la configuración manual debido a la introducción de nuevos subtipos y cambios al núcleo que convirtieron a la detección original en poco fiable.

Subtipo Descripción Notas
Valor por defecto, sin subtipo No es igual que dejarlo indefinido; FreeBSD, Linux y NetBSD
jail Jaulas FreeBSD
lxc Contenedores Linux No es autodetectado
openvz Linux OpenVZ
prefix Prefijo No es autodetectado; FreeBSD, Linux y NetBSD
vserver Linux vserver
xen0 Dominio Xen0 Linux y NetBSD
xenU Dominio XenU Linux y NetBSD

Eliminar los ficheros de configuración sobrantes

Después de la migración, deberían quedar algunos ficheros en su sistema que Portage no ha eliminado. Se trata de ficheros de configuración que se han protegido mediante la característica de configuración para la protección de ficheros de configuración que ofrece Portage.

El ejemplo más notable es /etc/conf.d/net.example, el cual es sustituido por /usr/share/doc/openrc-*/net.example.bz2.

Terminar

Una vez haya terminado de actualizar los archivos de configuración y guiones de inicio, solo queda reiniciar. Esto es necesario porque la información acerca del estado del sistema se preserva durante la actualización, de manera que debemos proporcionarla reiniciando el sistema.

3.  Funcionalidad que se ha modificada

La acción pausa

Previamente era posible detener un servicio temporalmente sin parar los servicios dependientes usando /etc/init.d/service pause. La acción pause se ha eliminado de OpenRC y se ha sustituido por /etc/init.d/service --nodeps stop que también funciona en el baselayout anterior.

La entrada rootfs en /etc/mtab

Anteriormente, la entrada inicial rootfs se eliminó de /etc/mtab, y únicamente existía la entrada para la raíz verdadera /. La entrada duplicada rootfs, se añadía durante el proceso de apagado. En OpenRC ambas entradas debían estar presentes para el soporta completo de initramfs y tmpfs-on-root. Esto significa que se requiere menor escritura durante el proceso de apagado.



Imprimir

Página actualizada 15 de noviembre, 2011

Sumario: Esta guía muestra como migrar de baselayout-1 a baselayout-2 y OpenRC.

Doug Goldstein
Autor

Joshua Saddler
Autor

Robin H. Johnson
Autor

Roy Marples
Contribuyente

John Christian Stoddart
Traductor

Manuel Peral González
Traductor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.