Загрузка рабочей станции состоит из нескольких шагов. Понимание
происходящих процессов позволит гораздо легче решить проблемы, если
таковые появятся.
Данный пример основан на следующей конфигурации:
- Standard x86 based workstation
- Linksys LNE100TX network card with Etherboot bootrom
- Intel i810 based graphics chipset
- Server running Redhat 7.2
- DHCP
- Network address of 192.168.0.0/24
Если на сервере установлена система LTSP, происходит
следующее:
- Когда вы ключаете питание рабочей станции, она проводит
собственный "Power On Self Test" (POST).
- В процессе теста bios будет искать расширения ПЗУ. Сетевая
карта имеет Etherboot bootrom, который является таким
расширением. Bios обнаружит ПЗУ на сетевой карте.
- Как только POST закончен, выполнение перейдет в код
Etherboot
- Код Etherboot ищет сетевую карту. Как только карта
обнаружена, она будет проинициализирована.
- Код Etherboot расссылает DHCP запрос по локальной сети.
Запрос содержит в себе MAC адрес сетевой карты.
- dhcpd daemon на сервере получит запрос от рабочей станции и
начнёт искать в конфигурационных файлах запись, соответствующую
MAC адресу данной рабочей станции.
- Затем демон собирает ответный пакет, содержащий некоторую
информацию Пакет включает в себя:
-
- IP адрес рабочей станции
- Настройки NETMASK для локальной сети
- Путь к ядру для загрузки
- Путь к файловой системе для монтирования
- Некоторые специальные параметры для выполнения ядром
- Etherboot код получает ответ от сервера и конфигурирует
TCP/IP интерфейс в соответствии с заданными сервером
параметрами.
- Используя протокол TFTP Etherboot код начинает скачивание
ядра с сервера.
- Когда ядро полностью загружено, ETHERBOOT код помещает ядро в
отведенное место в памяти.
- После этого контроль переходит к ядру. Ядро инициализирует
всю систему и периферийные устройства.
- А вот здесь и начинается настоящее веселье. В конце ядра
содержится снимок файловой системы. Он загружается в систему как
ramdisk и временно монтируется как файловая система. Значение
root=/dev/ram0 в командной строке ядра приказывает ядру
смонтировать снимок как корневую директорию.
- Обычно, после того, как ядро заканчивает загрузку, оно
запускает программу init. Но в данном случае мы приказали ядру
вместо этого загрузить скрипт оболочки, командой init=/linuxrc в
командной строке ядра.
- Скрипт /linuxrc начинает сканировать шину PCI в поисках
сетевой карты.Для каждого найденного PCI устройства он обращается
в /etc/niclist файл в поисках записи. Как только соответствующая
запись найдена, он передаёт название драйвера обратно, и
соответствующий модуль ядра загружается. Для карт ISA модуль
драйвера ДОЛЖЕН БЫТЬ указан в командной строке ядра, вместе со
всеми необходимыми параметрами IRQ и адресом.
- Как только сетевая карта идентифицирована, скрипт linuxrc
загружает модуль ядра, поддерживающий данную карту.
- Затем будет запущен dh клиент, чтобы сделать другой запрос на
DHCP сервер. Это очень важно, если мы хотим, чтобы NFS и TFTP
серверы не были идентичны.
- Когда dh клиент получит ответ от сервера, он запускает файл
скрипта /etc/dhclient , который, воспользовавшись полученной
информацией, конфигурирует интерфейс eth0
- До этого момента корневая файловая система существовала
только в качестве ram диска. Теперь скрипт /linuxrc смонтирует
новую файловую систему через NFS. Обычно с сервера экспортируется
директория /opt/ltsp/i386. Он не может просто смонтировать
файловую систему как /. Сначала он должен смонтировать её как
/mnt. Затем он создаст pivot_root. Pivot_root заменит текущую
файловую систему на новую. Когда он закончит, файловая система
NFS будет смонтирована на /, а старая файловая система будет
смонтирована на /oldroot.
- Как только монтирование новой файловой системы завершено - мы
закончили со скриптом оболочки/linuxrc и нам необоходимо
запустить реальную init программу.
- Init будет читать/etc/inittab файл и начнет устанавливать
среду рабочей станции.
- Init поддерживает(обслуживает) идею runlevel. Каждый runlevel
устанавливает различный набор сервисов для рабочей станции. LTSP
рабочая станция стартует с runlevel '2'. Это установлено
строкой initdefault в inittab файле.
- Один из первых элементов(пунктов) в inittab файле - rc.local
command ?который будет выполнен, в то время как рабочая станция
находится в состоянии 'sysinit'
- Скрипт rc.local создаст 1МБ ramdisk, чтобы содержать все
данные, которые должны быть записаны в него или изменены.
- Ramdisk будет смонтирован как/tmp каталог. Любые файлы,
которые должны быть написаны, фактически будет существовать в/tmp
каталоге, и будут созданы символические ссылки, указывающие на
эти файлы.
- /Proc файловая система смонтирована.
- Если рабочая станция конфигурирована, чтобы swap по
NFS,/var/opt/ltsp/swapfiles каталог будет смонтирован
как/tmp/swapfiles. Тогда, если нет своп-файла для этой рабочей
станции , он будет создан автоматически. Размер своп-файла
конфигурируется в lts.conf файле. Своп-файл будет запущен ,
используя команду swapon.
- The loopback сетевой интерфейс сконфигурирован. Это - сетевой
интерфейс, который имеет 127.0.0.1 в качестве своего IP
адреса.
- Если Local apps включено, тогда директория /home будет
смонтирована основной каталог будет установлен, так, чтобы apps
могли обращаться к Если Местные приложения допускаются, тогда /
основной каталог будет установлен, так, чтобы приложения могли
обращаться к домашним директориям пользователей.
- Несколько каталогов созданы в/tmp filesystem для хранения
некоторых из переходных файлов, которые необходимы, в то время
как система выполняется. Каталоги типа:
-
- /tmp/compiled
- /tmp/var
- /tmp/var/run
- /tmp/var/log
- /tmp/var/lock
- /tmp/var/lock/subsys
- Теперь будет сконфигурирована графическая оболочка X Windows.
В lts.conf файле, есть параметр с названием XSERVER. Если этот
параметр отсутствует, или установлен на "auto", то
будет предпринят автоматический поиск. Если плата - PCI, тогда мы
получим PCI Vendor and Device id, и будем искать в/etc/vidlist
файле. Если плата поддерживается XFREE86 4. X, pci_scan
подпрограмма возвратит название модуля драйвера. Если она
поддерживается только XFREE86 3.3.6, pci_scan возвратит название
сервера X для использования. Сценарий rc.local может сообщить
различие, потому что старые названия сервера 3.3.6 начинаются с
' XF86 _ '.
- Если используется XFREE86 4.x, тогда будет вызван
скрипт/etc/rc.setupx, чтобы создать XF86CONFIG файл для X4. Если
используется XFREE86 3.3.6, тогда будет вызван
скрипт/etc/rc.setupx3, чтобы создать XF86CONFIG файл. Будет
создан XF86Config файл, основанный на записях из файла
/etc/lts.conf file.
- Когда скрипт rc.setupx закончен, он возвратится назад к
rc.local. Тогда будет создан скрипт /tmp/start_ws. Этот скрипт
отвечает за запуск X сервера.
- Будет создан файл /tmp/syslog.conf . Этот файл будет
содержать информацию, сообщающую syslogd daemon на какой хост в
сети посылать запрос на регистрацию. Syslog хост определен в
lts.conf файле. Есть символическая ссылка,
называемая/etc/syslog.conf, которая указывает на/tmp/syslog.conf
файл.
- Syslogd демон запущен, используя config файл, созданный на
предыдущем шаге.
- Управление переходит назад к init. Init будет читать запись
initdefault вход, чтобы определить, какой runlevel ввести. От
lts_core-2.08, значение initdefault - 2
- Runlevel 2 заставит init выполнять скрипт set_runlevel,
который будет читать lts.conf файл и определит, в каком runlevel
рабочая станция фактически будет работать.
Стандартные runlevels для LTSP - 3, 4 и 5.
- 3 - запускает оболочку. Очень полезно для отладки рабочей
станции.
- 4 - запускает одну или более Telnet сессию.
- 5 - GUI режим. Запускает X Windows и посылает XDMCP запрос на
сервер, который отбразит диалог входа, позволяющий вам войти на
сервер. Вам потребуется display manager типа XDM, GDM или
KDM.
Вернуться к оглавлению