Guía de Migración de Baselayout y OpenRC
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 |
modules_2_6="ivtv cx88_dvb"
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 |
modules_2_6_23_gentoo_r5="ivtv"
modules_2_6_23="cx88_dvb"
modules_2_6="tun usbserial"
modules="ohci1394 ieee1394"
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
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.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|