Глава 1. Теория работы системы.

Загрузка рабочей станции состоит из нескольких шагов. Понимание происходящих процессов позволит гораздо легче решить проблемы, если таковые появятся.

Данный пример основан на следующей конфигурации:

Если на сервере установлена система LTSP, происходит следующее:

  1. Когда вы ключаете питание рабочей станции, она проводит собственный "Power On Self Test" (POST).
  2. В процессе теста bios будет искать расширения ПЗУ. Сетевая карта имеет Etherboot bootrom, который является таким расширением. Bios обнаружит ПЗУ на сетевой карте.
  3. Как только POST закончен, выполнение перейдет в код Etherboot
  4. Код Etherboot ищет сетевую карту. Как только карта обнаружена, она будет проинициализирована.
  5. Код Etherboot расссылает DHCP запрос по локальной сети. Запрос содержит в себе MAC адрес сетевой карты.
  6. dhcpd daemon на сервере получит запрос от рабочей станции и начнёт искать в конфигурационных файлах запись, соответствующую MAC адресу данной рабочей станции.
  7. Затем демон собирает ответный пакет, содержащий некоторую информацию Пакет включает в себя:
  8. Etherboot код получает ответ от сервера и конфигурирует TCP/IP интерфейс в соответствии с заданными сервером параметрами.
  9. Используя протокол TFTP Etherboot код начинает скачивание ядра с сервера.
  10. Когда ядро полностью загружено, ETHERBOOT код помещает ядро в отведенное место в памяти.
  11. После этого контроль переходит к ядру. Ядро инициализирует всю систему и периферийные устройства.
  12. А вот здесь и начинается настоящее веселье. В конце ядра содержится снимок файловой системы. Он загружается в систему как ramdisk и временно монтируется как файловая система. Значение root=/dev/ram0 в командной строке ядра приказывает ядру смонтировать снимок как корневую директорию.
  13. Обычно, после того, как ядро заканчивает загрузку, оно запускает программу init. Но в данном случае мы приказали ядру вместо этого загрузить скрипт оболочки, командой init=/linuxrc в командной строке ядра.
  14. Скрипт /linuxrc начинает сканировать шину PCI в поисках сетевой карты.Для каждого найденного PCI устройства он обращается в /etc/niclist файл в поисках записи. Как только соответствующая запись найдена, он передаёт название драйвера обратно, и соответствующий модуль ядра загружается. Для карт ISA модуль драйвера ДОЛЖЕН БЫТЬ указан в командной строке ядра, вместе со всеми необходимыми параметрами IRQ и адресом.
  15. Как только сетевая карта идентифицирована, скрипт linuxrc загружает модуль ядра, поддерживающий данную карту.
  16. Затем будет запущен dh клиент, чтобы сделать другой запрос на DHCP сервер. Это очень важно, если мы хотим, чтобы NFS и TFTP серверы не были идентичны.
  17. Когда dh клиент получит ответ от сервера, он запускает файл скрипта /etc/dhclient , который, воспользовавшись полученной информацией, конфигурирует интерфейс eth0
  18. До этого момента корневая файловая система существовала только в качестве ram диска. Теперь скрипт /linuxrc смонтирует новую файловую систему через NFS. Обычно с сервера экспортируется директория /opt/ltsp/i386. Он не может просто смонтировать файловую систему как /. Сначала он должен смонтировать её как /mnt. Затем он создаст pivot_root. Pivot_root заменит текущую файловую систему на новую. Когда он закончит, файловая система NFS будет смонтирована на /, а старая файловая система будет смонтирована на /oldroot.
  19. Как только монтирование новой файловой системы завершено - мы закончили со скриптом оболочки/linuxrc и нам необоходимо запустить реальную init программу.
  20. Init будет читать/etc/inittab файл и начнет устанавливать среду рабочей станции.
  21. Init поддерживает(обслуживает) идею runlevel. Каждый runlevel устанавливает различный набор сервисов для рабочей станции. LTSP рабочая станция стартует с runlevel '2'. Это установлено строкой initdefault в inittab файле.
  22. Один из первых элементов(пунктов) в inittab файле - rc.local command ?который будет выполнен, в то время как рабочая станция находится в состоянии 'sysinit'
  23. Скрипт rc.local создаст 1МБ ramdisk, чтобы содержать все данные, которые должны быть записаны в него или изменены.
  24. Ramdisk будет смонтирован как/tmp каталог. Любые файлы, которые должны быть написаны, фактически будет существовать в/tmp каталоге, и будут созданы символические ссылки, указывающие на эти файлы.
  25. /Proc файловая система смонтирована.
  26. Если рабочая станция конфигурирована, чтобы swap по NFS,/var/opt/ltsp/swapfiles каталог будет смонтирован как/tmp/swapfiles. Тогда, если нет своп-файла для этой рабочей станции , он будет создан автоматически. Размер своп-файла конфигурируется в lts.conf файле. Своп-файл будет запущен , используя команду swapon.
  27. The loopback сетевой интерфейс сконфигурирован. Это - сетевой интерфейс, который имеет 127.0.0.1 в качестве своего IP адреса.
  28. Если Local apps включено, тогда директория /home будет смонтирована основной каталог будет установлен, так, чтобы apps могли обращаться к Если Местные приложения допускаются, тогда / основной каталог будет установлен, так, чтобы приложения могли обращаться к домашним директориям пользователей.
  29. Несколько каталогов созданы в/tmp filesystem для хранения некоторых из переходных файлов, которые необходимы, в то время как система выполняется. Каталоги типа:
    1. /tmp/compiled
    2. /tmp/var
    3. /tmp/var/run
    4. /tmp/var/log
    5. /tmp/var/lock
    6. /tmp/var/lock/subsys

  30. Теперь будет сконфигурирована графическая оболочка 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 _ '.
  31. Если используется XFREE86 4.x, тогда будет вызван скрипт/etc/rc.setupx, чтобы создать XF86CONFIG файл для X4. Если используется XFREE86 3.3.6, тогда будет вызван скрипт/etc/rc.setupx3, чтобы создать XF86CONFIG файл. Будет создан XF86Config файл, основанный на записях из файла /etc/lts.conf file.
  32. Когда скрипт rc.setupx закончен, он возвратится назад к rc.local. Тогда будет создан скрипт /tmp/start_ws. Этот скрипт отвечает за запуск X сервера.
  33. Будет создан файл /tmp/syslog.conf . Этот файл будет содержать информацию, сообщающую syslogd daemon на какой хост в сети посылать запрос на регистрацию. Syslog хост определен в lts.conf файле. Есть символическая ссылка, называемая/etc/syslog.conf, которая указывает на/tmp/syslog.conf файл.
  34. Syslogd демон запущен, используя config файл, созданный на предыдущем шаге.
  35. Управление переходит назад к init. Init будет читать запись initdefault вход, чтобы определить, какой runlevel ввести. От lts_core-2.08, значение initdefault - 2
  36. Runlevel 2 заставит init выполнять скрипт set_runlevel, который будет читать lts.conf файл и определит, в каком runlevel рабочая станция фактически будет работать.

Стандартные runlevels для LTSP - 3, 4 и 5.


Вернуться к оглавлению