Difference between revisions of "Arch boot process (Español)"

From ArchWiki
Jump to: navigation, search
(Actualización: 2012-09-21)
Line 7: Line 7:
 
[[ru:Arch Boot Process]]
 
[[ru:Arch Boot Process]]
 
[[zh-CN:Arch Boot Process]]
 
[[zh-CN:Arch Boot Process]]
{{Article summary start}}
+
{{Article summary start|Sumario}}
{{Article summary text|?}}
+
{{Article summary text|En este artículo se describe un recorrido cronológico del proceso de arranque de Arch.}}
{{Article summary heading|Overview}}
+
{{Article summary heading|Descripción}}
{{Article summary text|{{Boot process overview}}}}
+
{{Article summary text|Para iniciar Arch Linux, es necesario tener instalado en el [[Master_Boot_Record_(Español)|Master Boot Record (MBR)]] o en la [[GUID_Partition_Table_(Español)|GUID Partition Table (GPT)]] un gestor de arranque compatible con Linux como [[GRUB2_(Español)|GRUB(2)]], [[Syslinux|Syslinux]], [[LILO|LILO]] o [[GRUB_Legacy|GRUB Legacy]]. El gestor de arranque es responsable de cargar el kernel y el [[Mkinitcpio_(Español)|ramdisk inicial]] antes de iniciar el '''proceso de arranque de Arch'''.}}
{{Article summary heading|Related}}
+
{{Article summary heading|Relacionado}}
 
{{Article summary wiki|fstab}}
 
{{Article summary wiki|fstab}}
 
{{Article summary wiki|rc.conf}}
 
{{Article summary wiki|rc.conf}}
 +
{{Article summary wiki|Autostarting}}
 
{{Article summary end}}
 
{{Article summary end}}
{{translateme}}
 
Este articulo tiene como objetivo dar una visión cronológica del proceso de arranque de Arch, los archivos y procesos involucrados, proveyendo enlaces a artículos relevantes de la wiki cuando es necesario. Arch sigue la convención de init de BSD, en lugar del común SysV. Esto significa que hay poca distinción entre los niveles de ejecución, debido a que el sistema por defecto esta configurado para usar los mismos módulos y ejecutar los mismos procesos en todos los niveles de ejecución. La ventaja es que los usuarios tienen una simple manera de configurar el proceso de inicio (ver [[rc.conf]]); la desventaja es que algunas opciones de configuración muy especificas que ofrece SysV, son perdidas. Ver [[Adding Runlevels]] para poder agregar configuraciones parecidas a SysV en Arch. Ver [[Wikipedia:init]] para mas información en las diferencias entre los estilos SysV y BSD.
 
  
== Antes de init ==
+
Este artículo pretende describir el orden cronológico del proceso de arranque del Arch y de los archivos involucrados, proporcionando enlaces a artículos de la  wiki pertinentes cuando sea necesario. Arch como BSD utiliza init, contrariamente al más común SysV. Esto implica una leve distinción entre los niveles de ejecución, dado que el sistema por defecto está configurado para utilizar los mismos módulos y los mismos procesos en todos los niveles de ejecución. La ventaja es que los usuarios tienen una forma sencilla de configurar el proceso de inicio (consulte [[rc.conf]]); la desventaja es que algunas opciones de configuración interesantes que ofrece SysV se pierden. Consulte la guía sobre [[Adding_Runlevels|cómo agregar niveles de ejecución]] para poder utilizar algunas opciones de SysV en Arch. Consulte [[Wikipedia:init]] para más información sobre las diferencias entre SysV y el método BSD.
Luego de que el sistema es encendido y que [[Wikipedia:Power-on self-test|POST]] es completado, la BIOS localizara el medio preestablecido de arranque y transferira el control de este dispositivo al [[Master Boot Record]]. En un sistema GNU/Linux, comúnmente se encuentra un gestor de arranque como [[GRUB]] o [[LILO]] que luego se carga desde el MBR. El gestor de arranque presentara al usuario un rango de opciones para arrancar, por ejemplo Arch Linux o Windows en [[Windows and Arch Dual Boot|dual-boot setup]]. Una vez que Arch es seleccionado, la imagen del kernel en el directorio {{ic|/boot}} (actualmente {{ic|kernel26.img}}) es descomprimida y cargada en memoria.
+
  
El kernel es el núcleo de un sistema operativo. Este funciona en bajo nivel (''kernelspace'') interactuando entre el hardware y los programas ejecutandose. Para hacer un uso eficiente del CPU, el kernel usa un planificador para decidir cuales tareas tienen mayor prioridad a cada momento, creando la ilusión (para la percepción humana) de que varias tareas están siendo ejecutadas simultáneamente (multitasking).
+
==Antes de init==
 +
Después de que el sistema está encendido y el [[Wikipedia: Power-on self-test|POST]] se ha completado, los BIOS identifica el dispositivo configurado para arrancar y pasa el control al sector de arranque [[Master Boot Record]] de este dispositivo. En una máquina GNU/Linux a menudo se instala en el MBR un gestor de arranque como [[GRUB]] o [[LILO]]. El gestor de arranque presenta al usuario una gama de opciones para el arranque, por ejemplo, Arch Linux y Windows [[Windows_and_Arch_Dual_Boot|configurando un arranque dual]]. Una vez que se ha seleccionado Arch, el bootloader carga el kernel ({{ic|vmlinuz-linux}}) y el ramdisk inicial ({{ic|initramfs-linux.img}}) en la memoria y luego se inicializa el kernel, pasando la dirección a la memoria de la imagen.
  
Luego de que el kernel es cargado, este lee el [[initramfs]] (sistema de archivos RAM inicial). El propósito de initramfs es de llevar al sistema a un punto donde este puede acceder al sistema de archivos raíz (ver [[FHS]] para detalles). Esto significa que cualquier modulo requerido por dispositivos como IDE, SCSI, o SATA (o USB/FW, si se esta arrancando desde una unidad USB/FW) tiene que ser cargado. Una vez que initramfs carga los módulos adecuados, manualmente o mediante [[udev]], este pasa el control a el kernel y el proceso de arranque continua. Por esta razón, initrd solo necesita contener los módulos necesarios para acceder al sistema de archivos raíz; no necesita contener cualquier otro modulo que uno requiera usar después. La mayoría de los módulos serán cargaos mas tarde por udev, durante el proceso init.
+
El kernel es el núcleo de un sistema operativo. Funciona en un nivel bajo (''kernelspace'') que interactúan entre el hardware de la máquina y los programas que requieren los recursos para funcionar. Para hacer un uso eficiente de la CPU, el kernel utiliza un sistema de programación para arbitrar qué tareas tienen prioridad en un momento dado, creando la ilusión (para la precepción humana) que varias tareas se están ejecutando simultáneamente.
  
El kernel luego busca el programa {{ic|init}} que reside en {{ic|/sbin/init}}. {{ic|init}} se basa en {{ic|glibc}}, la biblioteca C GNU. Las bibliotecas son colecciones de rutinas de programa frecuentemente usadas y son ifentificables mediante la extension {{ic|*.so}}. Estas son escenciales para la funcionalidad basica del sistema. Esta parte del proceso de arranque es llamada ''early userspace''.
+
Después de estar cargado, el Kernel descomprime el [[initramfs]] (sistema de archivos RAM inicial), el cual se convierte en el sistema de archivos del root inicial. El kernel, seguidamente, ejecuta {{ic|/init}} como primer proceso. El ''early userspace'' comienza.
  
== init: Los scripts de arranque de Arch ==
+
El propósito de initramfs es arrancar el sistema hasta el punto donde se puede acceder al sistema de archivos raíz (consulte [[FHS]] para más detalles). Esto significa que los módulos que se requieren para dispositivos como IDE, SCSI, SATA (o USB/FireWire, si se efectúa el arranque desde una de estas unidades) deben ser cargables desde el initramfs si no están compilados en el kernel; una vez que los módulos necesarios se cargan (ya sea a través de un programa, ya sea a través de un script que tramite [[udev]]), el proceso de arranque continúa. Por esta razón, el initramfs sólo debe contener los módulos necesarios para acceder al sistema de archivos raíz, no tiene por qué contener todos los módulos que sirven al completo funcionamiento de la máquina. La mayoría de los módulos se cargarán más tarde por udev, durante la fase init.
El principal proceso de arranque de Arch es iniciado por el programa {{ic|init}}, que llama a todos los demás procesos. El propósito de {{ic|init}} es el de brindad el sistema a un estado utilizable, usando los scripts de arranque para lograrlo. Como se menciono previamente, Arch usa scripts de arranque de estilo BSD. {{ic|init}} lee el archivo {{ic|/etc/inittab}}. Por defecto, {{ic|/etc/inittab}} empieza con lo siguiente:
+
  
{{hc|/etc/inittab
+
En la etapa final del early userspace, la verdadera raíz está montada, y reemplaza al sistema de archivos raíz inicial. {{ic|/sbin/init}} se ejecuta, sustituyendo el proceso {{ic|/init}}.
 +
 
 +
Consulte también: [http://archlinux.me/brain0/2010/02/13/early-userspace-in-arch-linux/ Early Userspace en Arch Linux]
 +
 
 +
==Init y los scripts de arranque de Arch==
 +
El principal proceso de arranque del Arch es iniciado por el programa {{ic|init}}, que genera todos los demás procesos. El propósito de {{ic|init}} es llevar el sistema a un estado que pueda ser utilizado, sirviéndose de los scripts de arranque para hacerlo. Como se mencionó anteriormente, Arch utiliza los script de arranque similares a los de BSD. {{ic|init}} lee el archivo {{ic|/etc/inittab}}; el archivo {{ic|inittab}}, por defecto, comienza con lo siguiente:
 +
 
 +
{{hc
 +
|/etc/inittab
 
|<nowiki>
 
|<nowiki>
 
...
 
...
 +
 
# Boot to console
 
# Boot to console
 
id:3:initdefault:
 
id:3:initdefault:
Line 43: Line 50:
 
rh:06:wait:/etc/rc.shutdown
 
rh:06:wait:/etc/rc.shutdown
 
su:S:wait:/sbin/sulogin
 
su:S:wait:/sbin/sulogin
 +
 
...
 
...
 
</nowiki>}}
 
</nowiki>}}
  
La primer linea no comentada define el nivel de ejecución del sistema por defecto (3). Cuando el kernel llama init:
+
La primera línea no comentada define el nivel de ejecución por defecto del sistema (3). Cuando el kernel llama a init:
 +
 
 +
* En primer lugar, el script de inicialización principal se ejecuta, {{ic|/etc/rc.sysinit}} (un script [[Bash]]).
 +
* Seguidamente, si se inicia en modo monousuario (nivel 1 ó S), el script {{ic|/etc/rc.single}} será lanzado.
 +
* Si, por el contrario, se ejecuta otro nivel (2-5), será lanzado en su lugar {{ic|/etc/rc.multi}}.
 +
* La última secuencia de comandos a ejecutar es {{ic|/etc/rc.local}} (a  través de {{ic|/etc/rc.multi}}) que está vacío de forma predeterminada.
  
* Primero, el principal script de inicializacion es ejecutado, {{ic|/etc/rc.sysinit}} (un script [[Bash]]).
+
{{Nota|Usted puede obtener mas información acerca de init e inittab [[Init_and_inittab_(Español)|aquí]]}}
* Si se inicia en modo de usuario simple (nivel de ejecución 1 o S), el script {{ic|/etc/rc.single}} sera ejecutado.
+
* Si se inicia en cualquier otro nivel (2-5), se ejecuta en vez {{ic|/etc/rc.multi}}.
+
* El ultimo script ejecutado sera {{ic|/etc/rc.local}} (mediante {{ic|/etc/rc.multi}}), que esta vació por defecto.
+
  
=== {{ic|/etc/rc.sysinit}} ===
+
===/etc/rc.sysinit===
{{ic|rc.sysinit}} es un gran script de inicio que básicamente se hace cargo de toda la configuración de hardware y de la inicialización general de tareas. Este puede ser identificado por su primer tarea, imprimiendo las lineas:
+
El archivo {{ic|etc/rc.sysinit}} es un gran script que se ocupa de toda la configuración del hardware, y realiza tareas generales de inicialización. Puede ser identificado por una de sus primeras tareas, imprimiendo las líneas:
  
 
  Arch Linux
 
  Arch Linux
 
  http://www.archlinux.org
 
  http://www.archlinux.org
Copyright 2002-2007 Judd Vinet
 
Copyright 2007-2010 Aaron Griffin
 
Distributed under the GNU General Public License (GPL)
 
  
Una vision aproximada de sus tareas:
+
Las tareas de {{ic|rc.sysinit}} son los siguientes:
* Toma el script {{ic|/etc/rc.conf}}
+
# Incluir el archivo {{ic|/etc/rc.conf}}.
* Toma el script {{ic|/etc/rc.d/functions}}
+
# Incluir el archivo de script {{ic|/etc/rc.d/functions}}.
* Muestra un mensaje de bienvenida
+
# Mostrar un mensaje de bienvenida.
* Monta varios sistemas de archivos virtuales
+
# Montar varios sistemas de archivos virtuales.
* Crea falsos archivos de dispositivo
+
# Asegurarse que rootfs se monta en sólo lectura (si es necesario).
* Inicia [[minilogd]]
+
# Iniciar [[bootlogd]].
* Muestra salida de [[dmesg]]
+
# Mostrar advertencias de desaprobación.
* Configura el reloj de hardware
+
# Configurar el reloj del hardware.
* Borra el archivo {{ic|/proc/sys/kernel/hotplug}}
+
# Iniciar [[udev]], cargar módulos desde la matriz {{ic|MODULES}} definidos en [[rc.conf]], y esperar a que termine de procesar udev eventos coldplug.
* Inicia [[udev]] y chequea eventos de udev
+
# Iniciar la interfaz de [[loopback]] .
* Inicia la interfaz [[loopback]]
+
# Configurar RAID, btrfs y las asignaciones del sistema de archivos cifrados.
* Carga modulos del arreglo {{ic|MODULES}} definido en [[rc.conf]]
+
# Verificar particiones ([[fsck]]).
* Configura mapeo de sistemas de archivos RAID y encriptados
+
# Volver a montar rootfs con el fin de aplicar las opciones de [[fstab|/etc/fstab.]]
* Ejecuta un chequeo forzado de particiones ([[fsck]]) en el archivo [[fstab|/etc/fstab]] contiene instrucciones para hacerlo
+
# Montar sistemas de archivos locales (unidades de red no se montan antes de un perfil de red está arriba).
* Monta particiones locales y swap (unidades de red no son montadas hasta que se inicia la red)
+
# Iniciar la supervisión de los grupos de volúmenes LVM.
* Activa areas [[swap]]
+
# Activar áreas [[swaps]] .
* Setea el nombre del equipo, localizacion y reloh del sistema como se define en {{ic|rc.conf}}
+
# Configurar la zona horaria.
* Elimina varios archivos temporales, como {{ic|/tmp/*}}
+
# Inicializar la semilla random.
* Configura el [[locale]], la consola y el mapeo del teclado
+
# Eliminar los residuos de los diversos archivos temporales, como {{ic|/tmp/*}}.
* Setea la fuente de consola
+
# Ajustar el nombre de la máquina (hostname), locale y reloj del sistema tal como se define en {{ic|rc.conf}}.
* Escribe salida de dmseg a {{ic|/var/log/dmesg.log}}
+
# Configurar [[locale]], la consola y la distribución del teclado.
 +
# Establecer la fuente de la consola.
 +
# Escribir la salida del comando en {{ic|/var/log/dmesg.log}}.
  
{{ic|/etc/rc.sysinit}} es un script y no un lugar para configuraciones. Sus orígenes (por ejemplo lecturas de variables y funciones) [[rc.conf]] para configuraciones y {{ic|/etc/rc.d/functions}} para funciones que producen la salida gráfica (colores, alineación, , etc.) No hay necesidad de editar este archivo, aunque algunos puede ser que lo deseen para mejorar tiempos de arranque.
+
{{ic|/etc/rc.sysinit}} es un script y no un archivo de configuración. Ésto incluye (cuando obtiene las variables de) [[rc.conf]] para las configuracines y {{ic|/etc/rc.d/functions}} para las funciones que producen salida gráfica (colores, alineaciones, cambiar del demonio 'busy' a 'done', etc.) Este archivo no debe modificarse manualmente dado que se sobreescribe en la actualización de {{pkg|initscripts}}. Para añadir personalizaciones es aconsejable utilizar los hooks como se describe a continuación.
  
=== {{ic|/etc/rc.single}} ===
+
===/etc/rc.single===
El modo de único usuario arrancara el sistema directamente en la cuenta de usuario root y debe ser usado si uno no puede arrancar el sistema normalmente. Este script asegura que no hay demonios ejecutándose  excepto por los mínimos requeridos (syslog-ng y udev). El modo de único usuario es útil para hacer una recuperación del sistema donde se previene que usuarios remotos que hagan cualquier cosa que pueda causar perdida de datos o dano. En este modo, los usuarios pueden continuar con el arranque estándar (multi-usuario) escribiendo exit en la consola.
+
La modalidad de usuario único (single-user mode) se iniciará como usuario root y sólo debe utilizarse si el sistema no puede arrancar normalmente o en caso de recuperación del sistema. Este script asegura que no se inicien otros demonios que no sean los esenciales: syslog-ng y udev. El modo single-user es útil para la recuperación del sistema impidiendo a usuarios remotos conectarse previniendo así que puedan hacer cualquier cosa que pudiera causar pérdida de datos o daños. En el modo de un solo usuario, los usuarios pueden volver a acceder a la sesión normal (multi-user) escribiendo "exit" en el prompt del sistema.
  
=== {{ic|/etc/rc.multi}} ===
+
===/etc/rc.multi===
{{ic|/etc/rc.multi}} is run on any multi-user runlevel (i.e. 2, 3. 4 and 5) which basically means any ordinary boot. Typically, users will not notice the transition from {{ic|rc.sysinit}} to {{ic|rc.multi}} as {{ic|rc.multi}} also uses the functions file to produce output. This script has three tasks:
+
{{ic|/etc/rc.multi}} se ejecuta por todos los runlevel multiusuario (esto es, 2, 3, 4, y 5), es decir, en cada arranque normal. Por lo general, los usuarios no se dan cuenta de la transición de {{ic|rc.sysinit}} a {{ic|rc.multi}} porque también utiliza {{ic|/etc/rc.d/functions}} para el manejo de video. Este script:
  
* First, it runs sysctl (to modify kernel parameters at runtime) which applies the settings in {{ic|/etc/sysctl.conf}}. Arch has very few of these by default; mainly networking settings.
+
# inicia [[sysctl]] (para modificar los parámetros del kernel en runtime) haciendo referencia a la configuración presente en {{ic|/etc/sysctl.conf}}. Arch tiene muy pocas opciones de éstos por defecto (principalmente la configuración de red).
* Secondly, and most importantly, it starts [[daemons]], as per the {{ic|DAEMONS}} array in {{ic|rc.conf}}.
+
# se ocupa de iniciar los [[DAEMONS|demonios]], según lo dispuesto en la matriz {{ic|DAEMONS}} en {{ic|rc.conf}}.
* Finally, it will run {{ic|/etc/rc.local}}.  
+
# ejecuta {{ic|/etc/rc.local}} para tratar las personalizaciones de usuario.
  
=== {{ic|/etc/rc.local}} ===
+
===/etc/rc.local===
{{ic|rc.local}} is the local multi-user startup script. Empty by default, it is a good place to put any last-minute commands the system should run at the very end of the boot process. Most common system configuration tasks (like loading modules, changing
+
the console font, or setting up devices) usually have a dedicated place where they belong. To avoid confusion, ensure that whatever one intends to add to {{ic|rc.local}} is not already residing in {{ic|/etc/profile.d}}, or any other existing configuration location instead.
+
  
When editing this file, keep in mind that it is run '''after''' the basic setup (modules/daemons), as the '''root''' user, and '''whether or not''' X starts. Here is an example which just un-mutes the ALSA sound settings:
+
{{ic|/etc/rc.local}} es el script del arranque local para las sesiones multiusuarios. Vacío por defecto, es un buen lugar donde insertar eventuales comandos de última hora que deben ser iniciados al final del proceso de arranque. La mayoría de las tareas comunes de configuración del sistema (carga de módulos, cambio de fuente de consola, encendido de periféricos), por lo general, tienen un lugar especial en el que se introducen. Para evitar confusiones, asegúrese de que los comandos introducidos en {{ic|rc.local}} no sea posible insertarlos en {{ic|/etc/profile.d}}, o en cualquier otro archivo de configuración.
 +
 
 +
Al editar este archivo, tenga en cuenta que se ejecutará '''después''' de la configuración básica (módulos/demonios), se iniciará como usuario '''root''', y '''tanto si el servidor gráfico (X) se inicia como si no'''. En este ejemplo, el archivo {{ic|rc.local}} se utiliza para quitar el silencio a algunos canales de audio de ALSA:
  
 
{{hc|/etc/rc.local
 
{{hc|/etc/rc.local
|<nowiki>
+
|output=<nowiki>
 
#!/bin/bash
 
#!/bin/bash
  
Line 114: Line 123:
 
</nowiki>}}
 
</nowiki>}}
  
Another common usage for {{ic|rc.local}} is to apply various hacks when one cannot make the ordinary initialization work correctly.
+
==Hooks personalizados==
  
== Custom hooks ==
+
Los Hooks se pueden usar para incluir códigos personalizados en varias partes del script rc.*
Hooks can be used to include custom code in various places in the rc.* scripts.
+
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! scope="col" | Hook Name
+
! scope="col" | Nombre del Hook
! scope="col" | When hook is executed
+
! scope="col" | Tiempo de ejecución del hook
 
|-
 
|-
 
| sysinit_start
 
| sysinit_start
| At the beginning of rc.sysinit
+
| Al comienzo de rc.sysinit
 
|-
 
|-
 
| sysinit_udevlaunched
 
| sysinit_udevlaunched
| After udev has been launched in rc.sysinit
+
| Después que udev ha sido lanzado en rc.sysinit
 
|-
 
|-
 
| sysinit_udevsettled
 
| sysinit_udevsettled
| After uevents have settled in rc.sysinit
+
| Después que uevents se ha estabilizado en rc.sysinit
 
|-
 
|-
 
| sysinit_prefsck
 
| sysinit_prefsck
| Before fsck is run in rc.sysinit
+
| Antes que fsck se ejecute en rc.sysinit
 
|-
 
|-
 
| sysinit_postfsck
 
| sysinit_postfsck
| After fsck is run in rc.sysinit
+
| Después que fsck se ejecute en rc.sysinit
 
|-
 
|-
 
| sysinit_premount
 
| sysinit_premount
| Before local filesystems are mounted, but after root is mounted read-write in rc.sysinit
+
| Antes que los sistemas de archivos locales sean montados, pero después de que la raíz está montada en modo lectura y escritura en rc.sysinit
 
|-
 
|-
 
| sysinit_end
 
| sysinit_end
| At the end of rc.sysinit
+
| Al final de rc.sysinit
 
|-
 
|-
 
| multi_start
 
| multi_start
| At the beginning of rc.multi
+
| Al comienzo de rc.multi
 
|-
 
|-
 
| multi_end
 
| multi_end
| At the end of rc.multi
+
| Al final de rc.multi
 
|-
 
|-
 
| single_start
 
| single_start
| At the beginning of rc.single
+
| Al comienzo de rc.single
 
|-
 
|-
 
| single_prekillall
 
| single_prekillall
| Before all processes are being killed in rc.single
+
| Antes que todos los procesos estén terminando en rc.single
 
|-
 
|-
 
| single_postkillall
 
| single_postkillall
| After all processes have been killed in rc.single
+
| Después que todos los procesos estén terminando en rc.single
 
|-
 
|-
 
| single_udevlaunched
 
| single_udevlaunched
| After udev has been launched in rc.single
+
| Después que udev ha sido lanzado en rc.single
 
|-
 
|-
 
| single_udevsettled
 
| single_udevsettled
| After uevents have settled in rc.single
+
| Después que uevents se ha estabilizado en rc.single
 
|-
 
|-
 
| single_end
 
| single_end
| At the end of rc.single
+
| Al final de rc.single
 
|-
 
|-
 
| shutdown_start
 
| shutdown_start
| At the beginning of rc.shutdown
+
| Al comienzo de rc.shutdown
 
|-
 
|-
 
| shutdown_prekillall
 
| shutdown_prekillall
| Before all processes are being killed in rc.shutdown
+
| Antes que todos los procesos que están acabando en rc.shutdown
 
|-
 
|-
 
| shutdown_postkillall
 
| shutdown_postkillall
| After all processes have been killed in rc.shutdown
+
| Después que todos los procesos han acabado en rc.shutdown
 +
|-
 +
| shutdown_preumount
 +
| Después de la última escritura del sistema de archivos (demonios han sido terminados), antes de desmontar el sistema de archivos
 +
|-
 +
| shutdown_postumount
 +
| Después que los sistemas de archivos se han desmontado
 
|-
 
|-
 
| shutdown_poweroff
 
| shutdown_poweroff
| Directly before powering off in rc.shutdown
+
| Justo antes de apagar en rc.shutdown
 
|}
 
|}
  
To define a hook function, create a file in /etc/rc.d/functions.d using:
+
Para definir una función hook, cree un archivo en /etc/rc.d/functions.d usando:
{{bc|
+
{{bc|1=function_name() {
function_name() {
+
 
   ...
 
   ...
 
}
 
}
add_hook hook_name function_name
+
add_hook hook_name function_name}}
}}
+
Files in /etc/rc.d/functions.d are sourced from {{ic|/etc/rc.d/functions}}.
+
You can register multiple hook functions for the same hook, as well as registering the same hook function for multiple hooks. Don't define functions named add_hook or run_hook in these files, as they are defined in {{ic|/etc/rc.d/functions}}.
+
  
==== Example ====
+
Los archivos en /etc/rc.d/functions.d proceden de {{ic|/etc/rc.d/functions}}.
Adding the following file will disable the write-back cache on a hard drive <i>before</i> any daemons are started (useful for drives containing MySQL InnoDB files).
+
Se pueden registrar múltiples funciones hooks para el mismo hook, así como registrar la misma función hook por hook múltiples. No defina funciones denominadas add_hook o run_hook en estos archivos, ya que están definidas en {{ic|/etc/rc.d/functions}}.
{{hc|/etc/rc.d/functions.d/hd_settings|hd_settings() {
+
 
 +
====Ejemplo====
 +
 
 +
Agregando el siguiente archivo se permite la desactivación de la caché write-back en un disco duro <i>antes</i> que todos los daemons se inicien (útil para unidades que contienen archivos de MySQL InnoDB).
 +
 
 +
{{hc|/etc/rc.d/functions.d/hd_settings|output=<nowiki>hd_settings() {
 
     /sbin/hdparm -W0 /dev/sdb
 
     /sbin/hdparm -W0 /dev/sdb
 
}
 
}
 
add_hook sysinit_udevsettled hd_settings
 
add_hook sysinit_udevsettled hd_settings
add_hook single_udevsettled  hd_settings
+
add_hook single_udevsettled  hd_settings</nowiki>}}
}}
+
 
First it defines the function hd_settings, and then registers it for the single_udevsettled and sysinit_udevsettled hooks. The function will then be called immediately after uvents have settled in {{ic|/etc/rc.d/rc.sysinit}} or {{ic|/etc/rc.d/rc.single}}.
+
En primer lugar, se define la función hd_settings, y luego la registra para los hooks '''single_udevsettled''' y '''sysinit_udevsettled'''. La función se llamará inmediatamente después que uvents se haya estabilizado en {{ic|/etc/rc.d/rc.sysinit}} o {{ic|/etc/rc.d/rc.single}}.
  
== init: Login ==
+
==init: Login==
By default, after the Arch boot scripts are completed, the {{ic|/sbin/agetty}} program prompts users for a login name. After a login name is received, {{ic|/sbin/agetty}} calls {{ic|/bin/login}} to prompt for the login password.
+
  
Finally, with a successful login, the {{ic|/bin/login}} program starts the user's default shell. The default shell and environment variables may be globally defined within {{ic|/etc/profile}}. All variables within a user's home directory shall take precedence over those globally defined under {{ic|/etc}}. For instance, if two conflicting variables are specified within {{ic|/etc/profile}} and {{ic|~/.bashrc}}, the one dictated by {{ic|~/.bashrc}} shall prevail.
+
Por defecto, después que los scripts de arranque de Arch se han completado, el programa {{ic|/sbin/agetty}} pide a los usuarios el nombre del login. Después que el nombre de usuario se recibe, {{ic|/sbin/agetty}} solicita {{ic|/bin/login}} el cual solicita la contraseña.
  
Other options include [[Automatic login to virtual console|mingetty]] which allows for auto-login and [[rungetty]] which allows for auto-login and automatically running commands and programs, e.g. the always useful htop.  
+
Finalmente, una vez efectuado el acceso, {{ic|/bin/login}} iniciará la shell predeterminada del usuario. El shell por defecto y las variables de entorno pueden ser definidos en el archivo {{ic|/etc/profile}}. Todas las variables dentro del directorio personal tendrán prioridad para sustituir las definidas en {{ic|/etc}}. Por ejemplo, si una misma variable está definida en {{ic|/etc/profile}} y en {{ic|~/.bashrc}}, la definida en {{ic|~/.bashrc}} prevalecerá.
  
The majority of users wishing to start an [[X]] server during the boot process will want to install a display manager, and see [[Display Manager]] for details. Alternatively, [[Start X at Boot]] outlines methods that do not involve a display manager.
+
Otras alternativas son [[Automatic login to virtual console_(Español)|mingetty]], que permite el inicio de sesión automático (agetty tiene la opción de inicio de sesión automático a partir de la versión 2.20 con {{Pkg|util-linux}}) o [[rungetty]], donde el primero permite auto-login y el segundo la ejecución automática de comandos y programas, por ejemplo {{ic|htop}}.
  
== See also ==
+
La mayoría de los usuarios que deseen iniciar un servidor gráfico [[Xorg_(Español)|X]] durante el proceso de arranque, deberían instalar un gestor de ventanas para efectuar el acceso (consulte [[Display Manager_(Español)|Display Manager]] para más detalles). Alternativamente, [[Start X at boot (Español)|este artículo]] describe métodos que no implican un gestor de ventanas.
  
* [[Startup files]]
+
== Véase también ==
  
== External resources ==
+
* [[Improve Boot Performance|Mejorar el Rendimiento de Inicio]]
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Boot Linux Grub Into Single User Mode]
+
* [[Runlevels|Niveles de ejecución]]
* [http://www.linuxjournal.com/article/4622 Boot with GRUB]
+
* [http://www.cyberciti.biz/faq/grub-boot-into-single-user-mode/ Del Arranque de Linux con GRUB en Modo Single User]
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]
+
* [http://www.linuxjournal.com/article/4622 Arrancar con GRUB]
* [http://linux.about.com/library/cmd/blcmdl5_sysctl.conf.htm Linux / Unix Command: sysctl.conf]
+
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Dentro del Proceso de Arranque de Linux]
* [http://bbs.archlinux.org/search.php?action=search&keywords=rc.local&search_in=topic&sort_dir=DESC&show_as=topics Search the forum for rc.local examples]
+
* [http://linux.about.com/library/cmd/blcmdl5_sysctl.conf.htm Linux/Unix Comando: sysctl.conf]
* [[Wikipedia:Linux startup process]]
+
* [http://bbs.archlinux.org/search.php?action=search&keywords=rc.local&search_in=topic&sort_dir=DESC&show_as=topics Buscar en el foro ejemplos de rc.local]
* [[Wikipedia:initrd]]
+
* [[Wikipedia:Linux startup process|Wikipedia: Proceso de inicio de Linux]]
 +
* [[Wikipedia:initrd|Wikipedia: initrd]]

Revision as of 09:15, 21 September 2012

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Este artículo pretende describir el orden cronológico del proceso de arranque del Arch y de los archivos involucrados, proporcionando enlaces a artículos de la wiki pertinentes cuando sea necesario. Arch como BSD utiliza init, contrariamente al más común SysV. Esto implica una leve distinción entre los niveles de ejecución, dado que el sistema por defecto está configurado para utilizar los mismos módulos y los mismos procesos en todos los niveles de ejecución. La ventaja es que los usuarios tienen una forma sencilla de configurar el proceso de inicio (consulte rc.conf); la desventaja es que algunas opciones de configuración interesantes que ofrece SysV se pierden. Consulte la guía sobre cómo agregar niveles de ejecución para poder utilizar algunas opciones de SysV en Arch. Consulte Wikipedia:init para más información sobre las diferencias entre SysV y el método BSD.

Antes de init

Después de que el sistema está encendido y el POST se ha completado, los BIOS identifica el dispositivo configurado para arrancar y pasa el control al sector de arranque Master Boot Record de este dispositivo. En una máquina GNU/Linux a menudo se instala en el MBR un gestor de arranque como GRUB o LILO. El gestor de arranque presenta al usuario una gama de opciones para el arranque, por ejemplo, Arch Linux y Windows configurando un arranque dual. Una vez que se ha seleccionado Arch, el bootloader carga el kernel (vmlinuz-linux) y el ramdisk inicial (initramfs-linux.img) en la memoria y luego se inicializa el kernel, pasando la dirección a la memoria de la imagen.

El kernel es el núcleo de un sistema operativo. Funciona en un nivel bajo (kernelspace) que interactúan entre el hardware de la máquina y los programas que requieren los recursos para funcionar. Para hacer un uso eficiente de la CPU, el kernel utiliza un sistema de programación para arbitrar qué tareas tienen prioridad en un momento dado, creando la ilusión (para la precepción humana) que varias tareas se están ejecutando simultáneamente.

Después de estar cargado, el Kernel descomprime el initramfs (sistema de archivos RAM inicial), el cual se convierte en el sistema de archivos del root inicial. El kernel, seguidamente, ejecuta /init como primer proceso. El early userspace comienza.

El propósito de initramfs es arrancar el sistema hasta el punto donde se puede acceder al sistema de archivos raíz (consulte FHS para más detalles). Esto significa que los módulos que se requieren para dispositivos como IDE, SCSI, SATA (o USB/FireWire, si se efectúa el arranque desde una de estas unidades) deben ser cargables desde el initramfs si no están compilados en el kernel; una vez que los módulos necesarios se cargan (ya sea a través de un programa, ya sea a través de un script que tramite udev), el proceso de arranque continúa. Por esta razón, el initramfs sólo debe contener los módulos necesarios para acceder al sistema de archivos raíz, no tiene por qué contener todos los módulos que sirven al completo funcionamiento de la máquina. La mayoría de los módulos se cargarán más tarde por udev, durante la fase init.

En la etapa final del early userspace, la verdadera raíz está montada, y reemplaza al sistema de archivos raíz inicial. /sbin/init se ejecuta, sustituyendo el proceso /init.

Consulte también: Early Userspace en Arch Linux

Init y los scripts de arranque de Arch

El principal proceso de arranque del Arch es iniciado por el programa init, que genera todos los demás procesos. El propósito de init es llevar el sistema a un estado que pueda ser utilizado, sirviéndose de los scripts de arranque para hacerlo. Como se mencionó anteriormente, Arch utiliza los script de arranque similares a los de BSD. init lee el archivo /etc/inittab; el archivo inittab, por defecto, comienza con lo siguiente:

/etc/inittab
...

# Boot to console
id:3:initdefault:
# Boot to X11
#id:5:initdefault:

rc::sysinit:/etc/rc.sysinit
rs:S1:wait:/etc/rc.single
rm:2345:wait:/etc/rc.multi
rh:06:wait:/etc/rc.shutdown
su:S:wait:/sbin/sulogin

...

La primera línea no comentada define el nivel de ejecución por defecto del sistema (3). Cuando el kernel llama a init:

  • En primer lugar, el script de inicialización principal se ejecuta, /etc/rc.sysinit (un script Bash).
  • Seguidamente, si se inicia en modo monousuario (nivel 1 ó S), el script /etc/rc.single será lanzado.
  • Si, por el contrario, se ejecuta otro nivel (2-5), será lanzado en su lugar /etc/rc.multi.
  • La última secuencia de comandos a ejecutar es /etc/rc.local (a través de /etc/rc.multi) que está vacío de forma predeterminada.
Nota: Usted puede obtener mas información acerca de init e inittab aquí

/etc/rc.sysinit

El archivo etc/rc.sysinit es un gran script que se ocupa de toda la configuración del hardware, y realiza tareas generales de inicialización. Puede ser identificado por una de sus primeras tareas, imprimiendo las líneas:

Arch Linux
http://www.archlinux.org

Las tareas de rc.sysinit son los siguientes:

  1. Incluir el archivo /etc/rc.conf.
  2. Incluir el archivo de script /etc/rc.d/functions.
  3. Mostrar un mensaje de bienvenida.
  4. Montar varios sistemas de archivos virtuales.
  5. Asegurarse que rootfs se monta en sólo lectura (si es necesario).
  6. Iniciar bootlogd.
  7. Mostrar advertencias de desaprobación.
  8. Configurar el reloj del hardware.
  9. Iniciar udev, cargar módulos desde la matriz MODULES definidos en rc.conf, y esperar a que termine de procesar udev eventos coldplug.
  10. Iniciar la interfaz de loopback .
  11. Configurar RAID, btrfs y las asignaciones del sistema de archivos cifrados.
  12. Verificar particiones (fsck).
  13. Volver a montar rootfs con el fin de aplicar las opciones de /etc/fstab.
  14. Montar sistemas de archivos locales (unidades de red no se montan antes de un perfil de red está arriba).
  15. Iniciar la supervisión de los grupos de volúmenes LVM.
  16. Activar áreas swaps .
  17. Configurar la zona horaria.
  18. Inicializar la semilla random.
  19. Eliminar los residuos de los diversos archivos temporales, como /tmp/*.
  20. Ajustar el nombre de la máquina (hostname), locale y reloj del sistema tal como se define en rc.conf.
  21. Configurar locale, la consola y la distribución del teclado.
  22. Establecer la fuente de la consola.
  23. Escribir la salida del comando en /var/log/dmesg.log.

/etc/rc.sysinit es un script y no un archivo de configuración. Ésto incluye (cuando obtiene las variables de) rc.conf para las configuracines y /etc/rc.d/functions para las funciones que producen salida gráfica (colores, alineaciones, cambiar del demonio 'busy' a 'done', etc.) Este archivo no debe modificarse manualmente dado que se sobreescribe en la actualización de initscripts. Para añadir personalizaciones es aconsejable utilizar los hooks como se describe a continuación.

/etc/rc.single

La modalidad de usuario único (single-user mode) se iniciará como usuario root y sólo debe utilizarse si el sistema no puede arrancar normalmente o en caso de recuperación del sistema. Este script asegura que no se inicien otros demonios que no sean los esenciales: syslog-ng y udev. El modo single-user es útil para la recuperación del sistema impidiendo a usuarios remotos conectarse previniendo así que puedan hacer cualquier cosa que pudiera causar pérdida de datos o daños. En el modo de un solo usuario, los usuarios pueden volver a acceder a la sesión normal (multi-user) escribiendo "exit" en el prompt del sistema.

/etc/rc.multi

/etc/rc.multi se ejecuta por todos los runlevel multiusuario (esto es, 2, 3, 4, y 5), es decir, en cada arranque normal. Por lo general, los usuarios no se dan cuenta de la transición de rc.sysinit a rc.multi porque también utiliza /etc/rc.d/functions para el manejo de video. Este script:

  1. inicia sysctl (para modificar los parámetros del kernel en runtime) haciendo referencia a la configuración presente en /etc/sysctl.conf. Arch tiene muy pocas opciones de éstos por defecto (principalmente la configuración de red).
  2. se ocupa de iniciar los demonios, según lo dispuesto en la matriz DAEMONS en rc.conf.
  3. ejecuta /etc/rc.local para tratar las personalizaciones de usuario.

/etc/rc.local

/etc/rc.local es el script del arranque local para las sesiones multiusuarios. Vacío por defecto, es un buen lugar donde insertar eventuales comandos de última hora que deben ser iniciados al final del proceso de arranque. La mayoría de las tareas comunes de configuración del sistema (carga de módulos, cambio de fuente de consola, encendido de periféricos), por lo general, tienen un lugar especial en el que se introducen. Para evitar confusiones, asegúrese de que los comandos introducidos en rc.local no sea posible insertarlos en /etc/profile.d, o en cualquier otro archivo de configuración.

Al editar este archivo, tenga en cuenta que se ejecutará después de la configuración básica (módulos/demonios), se iniciará como usuario root, y tanto si el servidor gráfico (X) se inicia como si no. En este ejemplo, el archivo rc.local se utiliza para quitar el silencio a algunos canales de audio de ALSA:

/etc/rc.local
#!/bin/bash

# /etc/rc.local: Local multi-user startup script.

amixer sset 'Master Mono' 50% unmute &> /dev/null
amixer sset 'Master' 50% unmute &> /dev/null
amixer sset 'PCM' 75% unmute &> /dev/null

Hooks personalizados

Los Hooks se pueden usar para incluir códigos personalizados en varias partes del script rc.*

Nombre del Hook Tiempo de ejecución del hook
sysinit_start Al comienzo de rc.sysinit
sysinit_udevlaunched Después que udev ha sido lanzado en rc.sysinit
sysinit_udevsettled Después que uevents se ha estabilizado en rc.sysinit
sysinit_prefsck Antes que fsck se ejecute en rc.sysinit
sysinit_postfsck Después que fsck se ejecute en rc.sysinit
sysinit_premount Antes que los sistemas de archivos locales sean montados, pero después de que la raíz está montada en modo lectura y escritura en rc.sysinit
sysinit_end Al final de rc.sysinit
multi_start Al comienzo de rc.multi
multi_end Al final de rc.multi
single_start Al comienzo de rc.single
single_prekillall Antes que todos los procesos estén terminando en rc.single
single_postkillall Después que todos los procesos estén terminando en rc.single
single_udevlaunched Después que udev ha sido lanzado en rc.single
single_udevsettled Después que uevents se ha estabilizado en rc.single
single_end Al final de rc.single
shutdown_start Al comienzo de rc.shutdown
shutdown_prekillall Antes que todos los procesos que están acabando en rc.shutdown
shutdown_postkillall Después que todos los procesos han acabado en rc.shutdown
shutdown_preumount Después de la última escritura del sistema de archivos (demonios han sido terminados), antes de desmontar el sistema de archivos
shutdown_postumount Después que los sistemas de archivos se han desmontado
shutdown_poweroff Justo antes de apagar en rc.shutdown

Para definir una función hook, cree un archivo en /etc/rc.d/functions.d usando:

function_name() {
   ...
}
add_hook hook_name function_name

Los archivos en /etc/rc.d/functions.d proceden de /etc/rc.d/functions. Se pueden registrar múltiples funciones hooks para el mismo hook, así como registrar la misma función hook por hook múltiples. No defina funciones denominadas add_hook o run_hook en estos archivos, ya que están definidas en /etc/rc.d/functions.

Ejemplo

Agregando el siguiente archivo se permite la desactivación de la caché write-back en un disco duro antes que todos los daemons se inicien (útil para unidades que contienen archivos de MySQL InnoDB).

/etc/rc.d/functions.d/hd_settings
hd_settings() {
    /sbin/hdparm -W0 /dev/sdb
}
add_hook sysinit_udevsettled hd_settings
add_hook single_udevsettled  hd_settings

En primer lugar, se define la función hd_settings, y luego la registra para los hooks single_udevsettled y sysinit_udevsettled. La función se llamará inmediatamente después que uvents se haya estabilizado en /etc/rc.d/rc.sysinit o /etc/rc.d/rc.single.

init: Login

Por defecto, después que los scripts de arranque de Arch se han completado, el programa /sbin/agetty pide a los usuarios el nombre del login. Después que el nombre de usuario se recibe, /sbin/agetty solicita /bin/login el cual solicita la contraseña.

Finalmente, una vez efectuado el acceso, /bin/login iniciará la shell predeterminada del usuario. El shell por defecto y las variables de entorno pueden ser definidos en el archivo /etc/profile. Todas las variables dentro del directorio personal tendrán prioridad para sustituir las definidas en /etc. Por ejemplo, si una misma variable está definida en /etc/profile y en ~/.bashrc, la definida en ~/.bashrc prevalecerá.

Otras alternativas son mingetty, que permite el inicio de sesión automático (agetty tiene la opción de inicio de sesión automático a partir de la versión 2.20 con util-linux) o rungetty, donde el primero permite auto-login y el segundo la ejecución automática de comandos y programas, por ejemplo htop.

La mayoría de los usuarios que deseen iniciar un servidor gráfico X durante el proceso de arranque, deberían instalar un gestor de ventanas para efectuar el acceso (consulte Display Manager para más detalles). Alternativamente, este artículo describe métodos que no implican un gestor de ventanas.

Véase también