Следующая версия | Предыдущая версия |
init:как_загружается_linux [2015/10/07 13:28] – внешнее изменение 127.0.0.1 | init:как_загружается_linux [2019/12/09 20:14] (текущий) – mirocow |
---|
{{tag>linux}} | {{tag>debian remove systemd sysv system init}} |
| |
====== Как загружается Linux ====== | ====== Как загружается Linux ====== |
Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (/etc/inittab, /etc/rc*, /etc/init.d/*, ...) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, ...). Надо отметить серьёзные размеры и сложность этих скриптов - чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы. | Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (/etc/inittab, /etc/rc*, /etc/init.d/*, ...) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, ...). Надо отметить серьёзные размеры и сложность этих скриптов - чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы. |
Когда меня окончательно достал RedHat, я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет! | Когда меня окончательно достал RedHat, я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет! |
Проработав 2.5 года на своём дистрибутиве (PoWeR Linux) я мигрировал на Gentoo (на качественную поддержку своего просто не хватало времени). Изучив загрузочные скрипты Gentoo я пришёл в ужас! Их размеры и сложность были ещё больше, чем у старого RedHat. После детального изучения стала ясна причина: один и тот же комплект загрузочных скриптов использовался и для LiveCD и для обычной системы - такой себе универсальный монстрик. Так что при переходе на Gentoo я решил взять загрузочные скрипты из PoWeR Linux а стандартные Gentoo-шные не использовать (т.е. у меня от Gentoo используется только portage). И с тех пор ещё 4 года эти скрипты работают у меня на домашней рабочей станции и кучке удалённых серверов. | Проработав 2.5 года на своём дистрибутиве (PoWeR Linux) я мигрировал на Gentoo (на качественную поддержку своего просто не хватало времени). Изучив загрузочные скрипты Gentoo я пришёл в ужас! Их размеры и сложность были ещё больше, чем у старого RedHat. После детального изучения стала ясна причина: один и тот же комплект загрузочных скриптов использовался и для LiveCD и для обычной системы - такой себе универсальный монстрик.\\ |
| <text> </text>Так что при переходе на Gentoo я решил взять загрузочные скрипты из PoWeR Linux а стандартные Gentoo-шные не использовать (т.е. у меня от Gentoo используется только portage). И с тех пор ещё 4 года эти скрипты работают у меня на домашней рабочей станции и кучке удалённых серверов. |
| |
===== Характеристики ===== | ===== Характеристики ===== |
| |
| |
Для загрузки я вместо SysVinit использую Runit. Runit не поддерживает /etc/inittab, вместо этого в нём используется простая схема: | Для загрузки я вместо SysV init использую Runit. Runit не поддерживает /etc/inittab, вместо этого в нём используется простая схема: |
При загрузке запускается скрипт /etc/runit/1. Его задача полностью проинициализировать систему. | При загрузке запускается скрипт /etc/runit/1. Его задача полностью проинициализировать систему. |
По завершению скрипта /etc/runit/1 запускается скрипт /etc/runit/2, который должен запустить все необходимые сервисы (syslog, getty, ssh, apache, ...). | По завершению скрипта /etc/runit/1 запускается скрипт /etc/runit/2, который должен запустить все необходимые сервисы (syslog, getty, ssh, apache, ...). |
При желании можно настроить SysVinit для работы в том же стиле: | При желании можно настроить SysVinit для работы в том же стиле: |
Запуск /etc/runit/{1,2,3} из SysVinit: /etc/inittab | Запуск /etc/runit/{1,2,3} из SysVinit: /etc/inittab |
id:3:initdefault: | |
rc::bootwait:/etc/runit/1 | id:3:initdefault: |
l0:0:wait:/bin/sh -c '/etc/runit/3; exec /sbin/halt' | rc::bootwait:/etc/runit/1 |
l3:3:once:/etc/runit/2 | l0:0:wait:/bin/sh -c '/etc/runit/3; exec /sbin/halt' |
l6:6:wait:/bin/sh -c '/etc/runit/3; exec /sbin/reboot' | l3:3:once:/etc/runit/2 |
ca:12345:ctrlaltdel:/sbin/shutdown -r now | l6:6:wait:/bin/sh -c '/etc/runit/3; exec /sbin/reboot' |
| ca:12345:ctrlaltdel:/sbin/shutdown -r now |
| |
Сервисы | Сервисы |