Difference between revisions of "Arch boot process (Česky)"

From ArchWiki
Jump to: navigation, search
(první část překladu (first part of the translation) ...To be continued!)
 
(wikify some external links, use https for archlinux.org)
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
{{Translateme}}
 +
 
[[Category:Boot process (Česky)]]
 
[[Category:Boot process (Česky)]]
 
[[Category:About Arch (Česky)]]
 
[[Category:About Arch (Česky)]]
{{i18n|Arch Boot Process}}
+
[[en:Arch Boot Process]]
 
+
[[es:Arch Boot Process]]
 +
[[fr:Processus de boot]]
 +
[[it:Arch Boot Process]]
 +
[[ru:Arch Boot Process]]
 +
[[zh-CN:Arch Boot Process]]
 
{{Article summary start}}
 
{{Article summary start}}
 
{{Article summary text|?}}
 
{{Article summary text|?}}
Line 12: Line 18:
 
{{Article summary end}}
 
{{Article summary end}}
  
Tento článek má za úkol podat chronologický přehled průběhu bootování v distribuci Arch a také výčet s tím souvisejících systémových souborů a procesů s odkazy na relevantní wiki články, kde to je zapotřebí. Jak je známo, Arch následuje BSD init konvenci na rozdíl od častěji používané SysV metody. To znamená, že nejsou velké rozdíly mezi runlevely, neboť systém je standardně nastaven tak, že používá stejné moduly a procesy ve všech runlevelech.Výhodou je, že uživatelé mohou jednoduše nastavit průběh startu systému (viz. [[rc.conf (Česky)]]); nevýhodou ale je ztráta některých jemných nastavení, které nabízí SysV. V článku [[Adding Runlevels (Česky)]] je popsán způsob, jak nahackovat některé jakoby SysV schopnosti do Archu. V článku[[Wikipedia:init]] jsou popsány další rozdíly mezi SysV a BSD metodou.
+
Tento článek má za úkol podat chronologický přehled průběhu bootování v distribuci Arch a také výčet s tím souvisejících systémových souborů a procesů s odkazy na relevantní wiki články, kde to je zapotřebí. Jak je známo, Arch následuje BSD init konvenci na rozdíl od častěji používané SysV metody. To znamená, že nejsou velké rozdíly mezi runlevely, neboť systém je standardně nastaven tak, že používá stejné moduly a procesy ve všech runlevelech.Výhodou je, že uživatelé mohou jednoduše nastavit průběh startu systému (viz. [[rc.conf (Česky)|rc.conf]]); nevýhodou ale je ztráta možnosti některých jemných nastavení, které nabízí SysV. V článku [[Adding Runlevels (Česky)]] je popsán způsob, jak nahackovat některé jakoby SysV schopnosti do Archu. V článku[[Wikipedia:init]] jsou popsány další rozdíly mezi SysV a BSD metodou.
  
 
== Before init ==
 
== Before init ==
Poté, co je sytém zapnut a [[Wikipedia:Power-on self test|POST]] dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v [[Master Boot Record (Česky)]]na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá bootloader jako je např. [[GRUB (Česky)]] nebo [[LILO (Česky)]]. Bootloader pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv.[[Windows and Arch Dual Boot (Česky)|dual-boot sestavě]]. Jakmile je Arch zvolen, dekomprimuje se a naloaduje do paměti obraz jádra (momentálně {{Filename|kernel26.img}}) ze složky {{Filename|/boot}} v souborovém systému na médiu.
+
Poté, co je sytém zapnut a [[Wikipedia:Power-on self test|POST]] dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v [[Master Boot Record (Česky)]] na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá bootloader jako je např. [[GRUB (Česky)]] nebo [[LILO (Česky)]]. Bootloader pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv.[[Windows and Arch Dual Boot (Česky)|dual-boot sestavě]]. Jakmile je Arch zvolen, dekomprimuje se a naloaduje do paměti obraz jádra (momentálně {{ic|kernel26.img}}) ze složky {{ic|/boot}} v souborovém systému na médiu.
  
The kernel is the core of an operating system. It functions on a low level (''kernelspace'') interacting between the hardware of the machine, and the programs which use the hardware to run. To make efficient use of the CPU, the kernel uses a scheduler to arbitrate which tasks take priority at any given moment, creating the illusion (to human perception) of many tasks being executed simultaneously.  
+
Jádro je základ operačního systému. Operuje v nízké úrovni systému (''kernelspace'') a zprostředkovává interakce mezi hardwarem a programy. K dosažení efektivního využití CPU používá jádro plánovač, který určuje, jaký program bude mít v daném okamžiku prioritu, čímž docílí iluze, že je více programů prováděno zároveň.
  
After the kernel is loaded, it reads from the [[initramfs]] (initial RAM filesystem). The purpose of the initramfs is to bootstrap the system to the point where it can access the root filesystem (see [[FHS]] for details). This means that any modules that are required for devices like IDE, SCSI, or SATA drives (or USB/FW, if booting off a USB/FW drive) must be loaded. Once the initramfs loads the proper modules, either manually or through [[udev]], it passes control to the kernel and the boot process continues. For this reason, the initrd only needs to contain the modules necessary to access the root filesystem; it does not need to contain every module one would ever want to use. The majority of modules will be loaded later on by udev, during the init process.  
+
Poté, co se jádro naloaduje, načte informace z [[initramfs (Česky)|initframs]] (initial RAM filesystem). Účel initramfs je zavést systém do stavu, kdy už má přístup ke kořenovému souborovému systému (viz. [[FHS (Česky)|FHS]] ). To znamená, že moduly potřebné k přístupu k zařízením jako jsou např. IDE, SCSI, or SATA disky (nebo USB/FW, v případě bootování z USB/FW disku) musí být naloadovány. Jakmile se z initramfs naloadují správné moduly, buď manuálně, nebo prostřednictvím [[udev (Česky)|udev]], předá se kontrola zpět jádru a bootování pokračuje. Díky tomu musí v initramfs být pouze moduly potřebné k přístupu ke kořenovému souborovému systému, tudíž nemusí obsahovat všechny ostatní moduly, které by mohly být kdy použity, protože většina modulů bude naloadována později během init procesu.
  
The kernel then looks for the program {{Codeline|init}} which resides at {{Filename|/sbin/init}}. {{Codeline|init}} relies on {{Codeline|glibc}}, the GNU C library. Libraries are collections of frequently used program routines and are readily identifiable through their filename extension of {{Filename|*.so}}. They are essential for basic system functionality. This part of the boot process is called ''early userspace''.
+
Pak jádro vyhledá {{ic|init}} program, který se nachází v {{ic|/sbin/init}}. {{ic|init}} závisí na {{ic|glibc}}, GNU C knihovně. Knihovny jsou sbírky často používaných programových rutin a jsou snadno identifikovatelné rdíky jejich souborové příponě {{ic|*.so}}. Jsou nezbytné pro základní funkčnost systému. Tato část bootování se nazývá ''early userspace''.
  
== init: The Arch boot scripts ==
+
== init: Arch bootovací skripty ==
The main Arch startup process is initiated by the program {{Codeline|init}}, which spawns all other processes. The purpose of {{Codeline|init}} is to bring the system into a usable state, using the boot scripts to do so. As previously mentioned, Arch uses BSD-style boot scripts. {{Codeline|init}} reads the file {{Filename|/etc/inittab}}; the default {{Filename|inittab}} begins with the following:
+
Hlavní spouštěcí proces v Archu je inicializován programem {{ic|init}}, který zavolá všechny ostatní procesy. Účelem {{ic|init}} je dovést systém do použitelného stavu využitím bootovacích skriptů. Jak už bylo řečeno, Arch používá BSD-style boot skripty. {{ic|init}} načte soubor {{ic|/etc/inittab}}; standardní {{ic|inittab}} začíná tímto:
  
{{File
+
{{hc|/etc/inittab
|name=/etc/inittab
+
|<nowiki>
|content=<nowiki>
+
 
...
 
...
  
Line 45: Line 50:
 
</nowiki>}}
 
</nowiki>}}
  
The first uncommented line defines the default system runlevel (3). When the kernel calls init:
+
První nezakomentovaný řádek definuje implicitní systémový runlevel (3). Když jádro zavolá init:
  
* First, the main initialization script is run, {{Filename|/etc/rc.sysinit}} (a [[Bash]] script).  
+
* Nejdřív se spustí inicializační skript {{ic|/etc/rc.sysinit}} (což je [[Bash (Česky)|Bash]] skript).  
* If started in single user mode (runlevel 1 or S), the script {{Filename|/etc/rc.single}} will be run.  
+
* Jestliže je definován ''single user mode'' (runlevel 1 nebo S), spustí se skript {{ic|/etc/rc.single}}.  
* If in any other runlevel (2-5), {{Filename|/etc/rc.multi}} is run instead.
+
* Pro jakýkoli jiný runlevel (2-5) se spustí skript {{ic|/etc/rc.multi}}.
* The last script to run will be {{Filename|/etc/rc.local}} (through {{Filename|/etc/rc.multi}}), which is empty by default.
+
* Poslední spuštěný skript je {{ic|/etc/rc.local}} (prostřednictvím {{ic|/etc/rc.multi}}), který je standardně prázdný.
  
=== {{Filename|/etc/rc.sysinit}} ===
+
=== {{ic|/etc/rc.sysinit}} ===
{{Filename|rc.sysinit}} is a huge startup script that basically takes care of all hardware configuration plus a number of general initialization tasks. It can be identified by its first task, printing the lines:
+
{{ic|rc.sysinit}} je obsáhlý skript, který v se podstatě postará o všechno nastavení hardwaru a další obecné inicializační úlohy. Jeho spuštění lze poznat díky jeho prvním úkonům - vypsání těchto řádků:
  
 
  Arch Linux
 
  Arch Linux
  http://www.archlinux.org
+
  https://www.archlinux.org
 
  Copyright 2002-2007 Judd Vinet
 
  Copyright 2002-2007 Judd Vinet
 
  Copyright 2007-2010 Aaron Griffin
 
  Copyright 2007-2010 Aaron Griffin
 
  Distributed under the GNU General Public License (GPL)
 
  Distributed under the GNU General Public License (GPL)
  
A rough overview of its tasks:
+
Hrubý přehled úloh:
* Sources the {{Filename|/etc/rc.conf}} script
+
* Zavolá (prostřednictvím programu source) {{ic|/etc/rc.conf}} skript
* Sources the {{Filename|/etc/rc.d/functions}} script
+
* Zavolá {{ic|/etc/rc.d/functions}} skript
* Displays a welcome message
+
* Zobrazí uvítací zprávu
* Mounts various virtual file systems
+
* Namountuje různé virtuální souborové systémy
* Creates dummy device files
+
* Vytvoří soubory reprezentující formální zařízení
* Starts [[minilogd]]
+
* Spustí [[minilogd (Česky)|minilogd]]
* Outputs messages from [[dmesg]]
+
* Zobrazí output programu [[dmesg (Česky)|dmesg]]
* Configures the hardware clock
+
* Nastaví hardwarové hodiny
* Empties the {{Filename|/proc/sys/kernel/hotplug}} file
+
* Vyprázdní soubor {{ic|/proc/sys/kernel/hotplug}}
* Starts [[udev]] and checks for udev events
+
* Spustí [[udev (Česky)|udev]] zkontroluje udev události
* Starts the [[loopback]] interface
+
* Spustí [[loopback (Česky)|loopback]] rozhraní
* Loads modules from the {{Codeline|MODULES}} array defined in [[rc.conf]]
+
* Naloaduje moduly definované v {{ic|MODULES}} poli,které je definováno v[[rc.conf (Česky)|rc.conf]]
* Configures RAID and encrypted filesystem mappings
+
* Nastaví RAID a mapování zašifrovaných souborových systémů
* Runs a forced check of partitions ([[fsck]]) if the [[fstab|/etc/fstab]] file contains instructions to do so
+
* Provede vynucenou kontrolu oddílů ([[fsck (Česky|fsck]]) v případě, že se v souboru [[fstab (Česky)|/etc/fstab]] nacházejí potřebné instrukce
* Mounts local partitions and swap (networked drives are not mounted before a network profile is up)
+
* Namountuje lokální oddíly a swap oblasti (síťové disky nejsou namountovány, dokud není aktivován síťový profil)
* Activates [[swap]] areas
+
* Aktivuje [[swap (Česky(|swap]] oblasti
* Sets the hostname, locale and system clock as defined in {{Filename|rc.conf}}
+
* Nastaví hostname, lokální a systémové hodiny na základě definic v {{ic|rc.conf}}
* Removes various leftover/temporary files, such as {{Filename|/tmp/*}}
+
* Odstraní různé zbylé/dočasné soubory, např. {{ic|/tmp/*}}
* Configures the [[locale]], console and keyboard mappings
+
* Nastaví [[locale (Český)|lokalizaci]], mapování konzole a klávesnice
* Sets the console font
+
* Nastaví font pro konzole
* Writes output from dmesg to {{Filename|/var/log/dmesg.log}}
+
* Vypíše výstup dmesg do {{ic|/var/log/dmesg.log}}
  
{{Filename|/etc/rc.sysinit}} is a script and not a place for settings. It sources (i.e. reads and inherits variables and functions) [[rc.conf]] for settings and {{Filename|/etc/rc.d/functions}} for the functions that produce its graphical output (nice colors, alignments, switching 'busy' to 'done', etc.) There is no particular need to edit this file, although some may wish to do so in order to speed up the boot process.
+
{{ic|/etc/rc.sysinit}} je skript a není určen pro deklarace různých nastavení, protože zavolá (programem source - načte a zdědí proměnné a funkce) [[rc.conf (Česky)|rc.conf]] kvůli nastavením {{ic|/etc/rc.d/functions}} kvůli funkcím, které vytváří grafický výstup (hezké barvy, zarovnání, přepínání 'busy' na 'done', atd.). Tudíž neexistuje žádný zvláštní důvod pro editaci tohoto souboru, kromě případu, kdy záměr je urychlit bootování.
  
=== {{Filename|/etc/rc.single}} ===
+
=== {{ic|/etc/rc.single}} ===
Single-user mode will boot straight into the root user account and should only be used if one cannot boot normally. This script ensures no daemons are running except for the bare minimum: syslog-ng and udev. The single-user mode is useful for system recovery where preventing remote users from doing anything that might cause data loss or damage is necessary. In single-user mode, users can continue with the standard (multi-user) boot by entering 'exit' at the prompt.
+
Single-user mód nabootuje přímo do root účtu a měl by tedy být použit pouze v případě, že nelze nabootovat normálním způsobem. Tento skript zaručí, že budou spušteni  pouze tito démoni: syslog-ng a udev. Tento mód je vhodný pro opravu sytému v případě, že je potřeba zamezit přístupu ostatních uživatelů, kteří by mohli způsobit ztrátu dat apod. Z toho módu lze pokračovat do multi-user módu zadáním příkazu 'exit'.
  
=== {{Filename|/etc/rc.multi}} ===
+
=== {{ic|/etc/rc.multi}} ===
{{Filename|/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 {{Filename|rc.sysinit}} to {{Filename|rc.multi}} as {{Filename|rc.multi}} also uses the functions file to produce output. This script has three tasks:
+
{{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:
  
* First, it runs sysctl (to modify kernel parameters at runtime) which applies the settings in {{Filename|/etc/sysctl.conf}}. Arch has very few of these by default; mainly networking settings.
+
* 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.
* Secondly, and most importantly, it starts [[daemons]], as per the {{Codeline|DAEMONS}} array in {{Filename|rc.conf}}.
+
* Secondly, and most importantly, it starts [[daemons]], as per the {{ic|DAEMONS}} array in {{ic|rc.conf}}.
* Finally, it will run {{Filename|/etc/rc.local}}.  
+
* Finally, it will run {{ic|/etc/rc.local}}.  
  
=== {{Filename|/etc/rc.local}} ===
+
=== {{ic|/etc/rc.local}} ===
{{Filename|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
+
{{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 {{Filename|rc.local}} is not already residing in {{Filename|/etc/profile.d}}, or any other existing configuration location instead.
+
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:
 
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:
  
{{File
+
{{hc|/etc/rc.local
|name=/etc/rc.local
+
|<nowiki>
|content=<nowiki>
+
 
#!/bin/bash
 
#!/bin/bash
  
Line 114: Line 118:
 
</nowiki>}}
 
</nowiki>}}
  
Another common usage for {{Filename|rc.local}} is to apply various hacks when one cannot make the ordinary initialization work correctly.
+
Another common usage for {{ic|rc.local}} is to apply various hacks when one cannot make the ordinary initialization work correctly.
  
 
== Custom hooks ==
 
== Custom hooks ==
Line 182: Line 186:
  
 
To define a hook function, create a file in /etc/rc.d/functions.d using:
 
To define a hook function, create a file in /etc/rc.d/functions.d using:
<pre>
+
{{bc|
 
function_name() {
 
function_name() {
 
   ...
 
   ...
 
}
 
}
 
add_hook hook_name function_name
 
add_hook hook_name function_name
</pre>
+
}}
Files in /etc/rc.d/functions.d are sourced from {{Filename|/etc/rc.d/functions}}.
+
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 {{Filename|/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 ====
 
==== Example ====
 
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).
 
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).
{{File|name=/etc/rc.d/functions.d/hd_settings|content=hd_settings() {
+
{{hc|/etc/rc.d/functions.d/hd_settings|hd_settings() {
 
     /sbin/hdparm -W0 /dev/sdb
 
     /sbin/hdparm -W0 /dev/sdb
 
}
 
}
Line 199: Line 203:
 
add_hook single_udevsettled  hd_settings
 
add_hook single_udevsettled  hd_settings
 
}}
 
}}
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 {{Filename|/etc/rc.d/rc.sysinit}} or {{Filename|/etc/rc.d/rc.single}}.
+
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}}.
  
 
== init: Login ==
 
== init: Login ==
By default, after the Arch boot scripts are completed, the {{Codeline|/sbin/agetty}} program prompts users for a login name. After a login name is received, {{Codeline|/sbin/agetty}} calls {{Codeline|/bin/login}} to prompt for the login password.
+
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 {{Codeline|/bin/login}} program starts the user's default shell. The default shell and environment variables may be globally defined within {{Filename|/etc/profile}}. All variables within a user's home directory shall take precedence over those globally defined under {{Filename|/etc}}. For instance, if two conflicting variables are specified within {{Filename|/etc/profile}} and {{Filename|~/.bashrc}}, the one dictated by {{Filename|~/.bashrc}} shall prevail.
+
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.
  
 
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.  
 
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.  
Line 219: Line 223:
 
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]
 
* [http://www.ibm.com/developerworks/linux/library/l-linuxboot/ Inside the Linux boot process]
 
* [http://linux.about.com/library/cmd/blcmdl5_sysctl.conf.htm Linux / Unix Command: sysctl.conf]
 
* [http://linux.about.com/library/cmd/blcmdl5_sysctl.conf.htm Linux / Unix Command: sysctl.conf]
* [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]
+
* [https://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]
 
* [[Wikipedia:Linux startup process]]
 
* [[Wikipedia:Linux startup process]]
 
* [[Wikipedia:initrd]]
 
* [[Wikipedia:initrd]]

Revision as of 04:49, 3 December 2012

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Arch boot process (Česky)#)
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 end

Tento článek má za úkol podat chronologický přehled průběhu bootování v distribuci Arch a také výčet s tím souvisejících systémových souborů a procesů s odkazy na relevantní wiki články, kde to je zapotřebí. Jak je známo, Arch následuje BSD init konvenci na rozdíl od častěji používané SysV metody. To znamená, že nejsou velké rozdíly mezi runlevely, neboť systém je standardně nastaven tak, že používá stejné moduly a procesy ve všech runlevelech.Výhodou je, že uživatelé mohou jednoduše nastavit průběh startu systému (viz. rc.conf); nevýhodou ale je ztráta možnosti některých jemných nastavení, které nabízí SysV. V článku Adding Runlevels (Česky) je popsán způsob, jak nahackovat některé jakoby SysV schopnosti do Archu. V článkuWikipedia:init jsou popsány další rozdíly mezi SysV a BSD metodou.

Before init

Poté, co je sytém zapnut a POST dokončen, nalezne BIOS preferované bootovací médium a předá kontrolu programu v Master Boot Record (Česky) na tomto médiu. Na GNU/Linux počítači se často v MBR nalézá bootloader jako je např. GRUB (Česky) nebo LILO (Česky). Bootloader pak uživateli nabídne možné operační systémy pro bootování, např. Arch Linux a Windows v tzv.dual-boot sestavě. Jakmile je Arch zvolen, dekomprimuje se a naloaduje do paměti obraz jádra (momentálně kernel26.img) ze složky /boot v souborovém systému na médiu.

Jádro je základ operačního systému. Operuje v nízké úrovni systému (kernelspace) a zprostředkovává interakce mezi hardwarem a programy. K dosažení efektivního využití CPU používá jádro plánovač, který určuje, jaký program bude mít v daném okamžiku prioritu, čímž docílí iluze, že je více programů prováděno zároveň.

Poté, co se jádro naloaduje, načte informace z initframs (initial RAM filesystem). Účel initramfs je zavést systém do stavu, kdy už má přístup ke kořenovému souborovému systému (viz. FHS ). To znamená, že moduly potřebné k přístupu k zařízením jako jsou např. IDE, SCSI, or SATA disky (nebo USB/FW, v případě bootování z USB/FW disku) musí být naloadovány. Jakmile se z initramfs naloadují správné moduly, buď manuálně, nebo prostřednictvím udev, předá se kontrola zpět jádru a bootování pokračuje. Díky tomu musí v initramfs být pouze moduly potřebné k přístupu ke kořenovému souborovému systému, tudíž nemusí obsahovat všechny ostatní moduly, které by mohly být kdy použity, protože většina modulů bude naloadována později během init procesu.

Pak jádro vyhledá init program, který se nachází v /sbin/init. init závisí na glibc, GNU C knihovně. Knihovny jsou sbírky často používaných programových rutin a jsou snadno identifikovatelné rdíky jejich souborové příponě *.so. Jsou nezbytné pro základní funkčnost systému. Tato část bootování se nazývá early userspace.

init: Arch bootovací skripty

Hlavní spouštěcí proces v Archu je inicializován programem init, který zavolá všechny ostatní procesy. Účelem init je dovést systém do použitelného stavu využitím bootovacích skriptů. Jak už bylo řečeno, Arch používá BSD-style boot skripty. init načte soubor /etc/inittab; standardní inittab začíná tímto:

/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

...

První nezakomentovaný řádek definuje implicitní systémový runlevel (3). Když jádro zavolá init:

  • Nejdřív se spustí inicializační skript /etc/rc.sysinit (což je Bash skript).
  • Jestliže je definován single user mode (runlevel 1 nebo S), spustí se skript /etc/rc.single.
  • Pro jakýkoli jiný runlevel (2-5) se spustí skript /etc/rc.multi.
  • Poslední spuštěný skript je /etc/rc.local (prostřednictvím /etc/rc.multi), který je standardně prázdný.

/etc/rc.sysinit

rc.sysinit je obsáhlý skript, který v se podstatě postará o všechno nastavení hardwaru a další obecné inicializační úlohy. Jeho spuštění lze poznat díky jeho prvním úkonům - vypsání těchto řádků:

Arch Linux
https://www.archlinux.org
Copyright 2002-2007 Judd Vinet
Copyright 2007-2010 Aaron Griffin
Distributed under the GNU General Public License (GPL)

Hrubý přehled úloh:

  • Zavolá (prostřednictvím programu source) /etc/rc.conf skript
  • Zavolá /etc/rc.d/functions skript
  • Zobrazí uvítací zprávu
  • Namountuje různé virtuální souborové systémy
  • Vytvoří soubory reprezentující formální zařízení
  • Spustí minilogd
  • Zobrazí output programu dmesg
  • Nastaví hardwarové hodiny
  • Vyprázdní soubor /proc/sys/kernel/hotplug
  • Spustí udev zkontroluje udev události
  • Spustí loopback rozhraní
  • Naloaduje moduly definované v MODULES poli,které je definováno vrc.conf
  • Nastaví RAID a mapování zašifrovaných souborových systémů
  • Provede vynucenou kontrolu oddílů (fsck) v případě, že se v souboru /etc/fstab nacházejí potřebné instrukce
  • Namountuje lokální oddíly a swap oblasti (síťové disky nejsou namountovány, dokud není aktivován síťový profil)
  • Aktivuje swap oblasti
  • Nastaví hostname, lokální a systémové hodiny na základě definic v rc.conf
  • Odstraní různé zbylé/dočasné soubory, např. /tmp/*
  • Nastaví lokalizaci, mapování konzole a klávesnice
  • Nastaví font pro konzole
  • Vypíše výstup dmesg do /var/log/dmesg.log

/etc/rc.sysinit je skript a není určen pro deklarace různých nastavení, protože zavolá (programem source - načte a zdědí proměnné a funkce) rc.conf kvůli nastavením /etc/rc.d/functions kvůli funkcím, které vytváří grafický výstup (hezké barvy, zarovnání, přepínání 'busy' na 'done', atd.). Tudíž neexistuje žádný zvláštní důvod pro editaci tohoto souboru, kromě případu, kdy záměr je urychlit bootování.

/etc/rc.single

Single-user mód nabootuje přímo do root účtu a měl by tedy být použit pouze v případě, že nelze nabootovat normálním způsobem. Tento skript zaručí, že budou spušteni pouze tito démoni: syslog-ng a udev. Tento mód je vhodný pro opravu sytému v případě, že je potřeba zamezit přístupu ostatních uživatelů, kteří by mohli způsobit ztrátu dat apod. Z toho módu lze pokračovat do multi-user módu zadáním příkazu 'exit'.

/etc/rc.multi

/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 rc.sysinit to rc.multi as rc.multi also uses the functions file to produce output. This script has three tasks:

  • First, it runs sysctl (to modify kernel parameters at runtime) which applies the settings in /etc/sysctl.conf. Arch has very few of these by default; mainly networking settings.
  • Secondly, and most importantly, it starts daemons, as per the DAEMONS array in rc.conf.
  • Finally, it will run /etc/rc.local.

/etc/rc.local

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 rc.local is not already residing in /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:

/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

Another common usage for rc.local is to apply various hacks when one cannot make the ordinary initialization work correctly.

Custom hooks

Hooks can be used to include custom code in various places in the rc.* scripts.

Hook Name When hook is executed
sysinit_start At the beginning of rc.sysinit
sysinit_udevlaunched After udev has been launched in rc.sysinit
sysinit_udevsettled After uevents have settled in rc.sysinit
sysinit_prefsck Before fsck is run in rc.sysinit
sysinit_postfsck After fsck is run in rc.sysinit
sysinit_premount Before local filesystems are mounted, but after root is mounted read-write in rc.sysinit
sysinit_end At the end of rc.sysinit
multi_start At the beginning of rc.multi
multi_end At the end of rc.multi
single_start At the beginning of rc.single
single_prekillall Before all processes are being killed in rc.single
single_postkillall After all processes have been killed in rc.single
single_udevlaunched After udev has been launched in rc.single
single_udevsettled After uevents have settled in rc.single
single_end At the end of rc.single
shutdown_start At the beginning of rc.shutdown
shutdown_prekillall Before all processes are being killed in rc.shutdown
shutdown_postkillall After all processes have been killed in rc.shutdown
shutdown_poweroff Directly before powering off in rc.shutdown

To define a hook function, create a file in /etc/rc.d/functions.d using:

function_name() {
   ...
}
add_hook hook_name function_name

Files in /etc/rc.d/functions.d are sourced from /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 /etc/rc.d/functions.

Example

Adding the following file will disable the write-back cache on a hard drive before any daemons are started (useful for drives containing MySQL InnoDB files).

/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

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 /etc/rc.d/rc.sysinit or /etc/rc.d/rc.single.

init: Login

By default, after the Arch boot scripts are completed, the /sbin/agetty program prompts users for a login name. After a login name is received, /sbin/agetty calls /bin/login to prompt for the login password.

Finally, with a successful login, the /bin/login program starts the user's default shell. The default shell and environment variables may be globally defined within /etc/profile. All variables within a user's home directory shall take precedence over those globally defined under /etc. For instance, if two conflicting variables are specified within /etc/profile and ~/.bashrc, the one dictated by ~/.bashrc shall prevail.

Other options include 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.

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.

See also

External resources