Centaurus: Бездисковый клиент

Материал из ALT Linux Wiki

Класс бездисковых клиентов обеспечивает следующий порядок работы:

  • Сервер предоставляет образ LiveCD в качестве загрузочного образа.
  • Клиенты загружают ОС по сети.
  • Работа на клиентах не отличается от работы на LiveCD:
    • можно использовать рабочие места с различным аппаратным профилем;
    • ВНИМАНИЕ: суперпользователь (root) и пользователь по умолчанию (altlinux) не имеют паролей.

Класс бездисковых клиентов в составе домена дополнительно предоставляет возможность работы пользователя домена с произвольного клиентского компьютера с подключением его домашнего каталога.

Порядок настройки

Сначала необходимо удостовериться, что на сервере определены внутренний и внешний сетевые интерфейсы, и включён режим трансляции внутренних адресов (NAT). Класс будет функционировать и без NAT, и вовсе без внешнего сетевого интерфейса, но доступ в Интернет, а во втором случае — и DNS придётся настраивать отдельно. THICK-00-ExtIf.png

Для работы сервера сетевых загрузок на внутреннем интерфейсе должна быть поднята служба сетевых настроек DHCP. Обратите внимание, что параметры «домен поиска» и «DNS-сервер» на этом шаге вводятся временно, впоследствии их будет предоставлять Kerberos/LDAP домен. THICK-01-DHCP.png

Домен задаётся стандартным способом. Стоит иметь в виду, что для корректной работы класса DHCP необходимо настроить до задания домена. Обратите также внимание на успешную диагностику работы всех необходимых служб. При использовании систем, не подразумевающих включение в домен, рекомендуется останавливать эту службу. Включение LDAP «с нуля» сопровождается созданием множества файлов и перезапуском зависимых служб, поэтому этот шаг может потребовать времени. THICK-02-DOMAIN.png

Функциональность бездискового клиента обеспечивается загрузкой ALT Linux Centaurus 6.0 LiveCD в качестве «установочного» образа подсистемы сетевой установки. В случае использования дисков со множественной загрузкой (например, ALT Linux Centaurus 6.0 Install DVD), выбирается первая конфигурация. Другую конфигурацию можно временно указать во время загрузки клиента или в файле `/var/lib/tftpboot/pxelinux.cfg/default` на сервере (этот файл генерируется при каждом выборе загружаемого образа). THICK-03-ADDIMAGE.png

Образ на диске создаётся довольно долго. THICK-04-ADDING.png

Обратите внимание, что создания образа недостаточно, его необходимо явно отметить. THICK-05-SELECT.png

Запуск клиента

Для запуска клиента достаточно включить в BIOS на постоянной основе сетевую загрузку (по протоколу PXE). Для того, чтобы сетевая загрузка работала, необходимо наличие на сетевой карте BootROM (это касается также и встроенных сетевых карт; кроме того, на них BootROM иногда включается отдельно настройкой BIOS). В некоторых случаях сетевую загрузку можно произвести с внешнего носителя (см. проект http://etherboot.org/ и конкретно http://www.rom-o-matic.net/ ).

Модернизация загружаемого образа

Стандартный загруженный образ LiveCD обладает некоторыми свойствами, которые нужны для LiveCD, но плохо применимы при массовой загрузке, например, учебного компьютерного класса. Пересборка образа — дело непростое, поэтому Live-дистрибутивы Шестой платформы имеют дополнительный механизм модернизации системы, загружаемой на клиенте. Опишем этот механизм подробнее.

Изначально загрузка системы по сети устроена так:

  1. Загрузка по протоколу PXE (DHCP+tftp) вторичного загрузчика pxelinux.
  2. Загрузка вторичным загрузчиком по протоколу tftp автоматически изготовленного конфигурационного файла /var/lib/tftpboot/pxelinux.cfg/default, после чего — указанных в этом файле ядра и стартового виртуального диска.
  3. Стартовый виртуальный диск Live-версии содержит подсистему propagator, которая, анализируя параметры, переданные ядру, определяет тип дальнейшей загрузки.
  4. В частности, при загрузке Live-версии происходит следующее:
    1. монтируется по NFS каталог /srv/public/netinst/;
    2. из этого каталога монтируется как loop-device файл current (это символьная ссылка на выбранный ISO-образ);
    3. из смонтированного таким образом каталога (/image), в свою очередь, монтируется как loop-device Squashfs-образ, определяемый параметром ядра stagename;
    4. полученный каталог (/.ro) содержит всю файловую систему клиента, доступную, разумеется, только для чтения. Для обеспечения возможности записи этот каталог монтируется «внахлёст» при помощи AUFS с пустым каталогом /.rw. Результат становится корневым каталогом клиента.

Однако в AUFS между «нижним» каталогом /.ro и «верхним» /.rw можно вставить произвольное число дополнительных readonly-каталогов, перекрывающих содержимое /.ro. Для этого при загрузке проверяется наличие ISO-образов в каталоге /srv/public/netinst/overlays-live на сервере, и каждый такой образ в алфавитно-цифровом порядке монтируется в виде каталога и включается в AUFS поверх /.ro.

Начиная с P7 поддерживается профилирование заплаток. Если задать параметр загрузки ядра profile=что-то, то монтироваться будут только образы из подкаталога /srv/public/netinst/overlays-live/что-то/.

Создание образа-«заплатки»

Например, для эксплуатации компьютерного класса необходимо модифицировать следующее:

  • Пароль root и altlinux. Пароль root по умолчанию пустой, это нехорошо, если на машине есть ещё какая-то операционка. Достаточно в терминале сказать su - (пароль пустой), а затем выполнить команду passwd. Если беспарольный пользователь altlinux не нужен, его можно удалить командой userdel -r altlinux.
  • Установка и удаление пакетов. Можно поставить какое угодно количество пакетов, если файловая система /.rw, располагающаяся в памяти, предоставляет достаточно места. Если нет, можно попробовать сделать это в несколько этапов (создать последовательно несколько заплаток).
  • Настройки по месту. Всяческие другие системные настройки (включение swap, если найден раздел с особой меткой, включение и предварительная настройка служб, например, ssh, и т. п.) производятся обычным порядком, в терминале от root. Например, для установки пакетов необходимо отредактировать настройку APT (скажем, раскомментировать две строки в /etc/apt/sources.list.d/alt.list и запустить apt-get update).
  • Настройка рабочего стола и домашнего каталога пользователя по умолчанию. Пользователь altlinux по умолчанию не имеет пароля, а если домен не используется, происходит автоматический вход в систему. Настройки, сделанные для этого пользователя, также можно сохранить в «заплатке» (предварительно следует завершить сеанс работы пользователя: некоторые настройки записываются на диск только после этого).

Все изменения аккумулируются в каталоге /.rw. Для создания заплатки достаточно изготовить из этого каталога ISO-образ и положить его на сервер в каталог /srv/public/netinst/overlays-live:

[root@localhost ~]# sync; mkisofs -q -R -o- /.rw | ssh user@ldap 'cat > patch0.iso'

Обратите внимание, что файл-«заплатка» получается довольно большим, и его небезопасно хранить в файловой системе клиента (может закончиться память), поэтому на сервере заводится пользователь (в примере «user»), в домашний каталог которого временно помещается файл. При включённом домене можно использовать имя сервера ldap, в противном случае — его IP-адрес.

Размер заплатки получается большим из-за dist-upgrade: перестраиваются базы пакетов RPM и APT. Поскольку при следующей модификации, скорее всего, придётся заново делать dist-upgrade, можно исключить из ISO каталоги с кешами и списками файлов, а также файлами, которые создаются в процессе работы системы.

[root@localhost ~]# sync; mkisofs -q -R -m /.rw/var/lib/rpm -m /.rw/var/lib/apt -m /.rw/var/cache/apt -m /.rw/var/run -m /.rw/var/log -o- /.rw | ssh user@ldap 'cat > patch0.iso'

На сервере «заплатка» перемещается в каталог/srv/public/netinst/overlays-live:

[root@server ~]# mv ~user/patch0.iso /srv/public/netinst/overlays-live/

TODO

Автоматизация кастомизации

Имеется четыре вида доработки:

  1. /etc — настройка системы (/etc/apt/sources.list.d, passwd root и т. п.)
  2. /usr/local и /opt — файлы, скопированные вручную
  3. /home — пользовательские настройки (в первую очередь /home/altlinux)
  4. установка и удаление пакетов

Ещё есть /var/lib (в котором хранятся настройки чрутованных служб), /var/cache (содержимое которого, вопреки FHS не всегда можно удалять) и ещё что-то, но это всё для LiveCD несущественно.

Предлагается следующий workflow:

  1. Подготовка "стартовой" заплатки на /etc
    • Настройка apt, задание пароля рута и т. п.
  2. Подготовка "системной" заплатки на /
    • Установка и удаление пакетов
    • Сохранение списка всех пакетов
  3. Подготовка "настроечной" заплатки на /etc
    • Ручная настройка дополнительных пакетов
  4. Подготовка "пользовательской" заплатки
    • Настройка рабочего стола, приложений и т. п.
    • Раскладывание мусора в /usr/local и /opt

Процесс отладки кастомной прошивки с большим числом накопившихся заплаток:

  • Пользовательские заплатки не зависят от системных. Более того, их имеет смысл делать не кумулятивными (из /.rw), а абсолютными (складывать в ISO-образ непосредственно /home, /usr/local и /opt
  • Системные заплатки можно слить в одну, загрузившись с одной только стартовой заплаткой и установив/удалив соответствующие пакеты (сравнив со списком, добытым из последней системной заплатки). Внимание! Если сразу ставить слишком много пакетов, они могут не влезть в TMPFS.
  • Настроечные заплатки придётся рассматривать на предмет того, что было изменено, и тоже объединять в одну.

Другие задачи и направления модернизации класса бездисковых клиентов

  • Кастомизация initrd (выполнение в /sbin/init-bottom сценария из только что смонтированного каталога)
  • Монтирование заплаток в формате, отличном от ISO (в первую очередь удобных для ручной правки, добавления и удаления файлов)
  • Многосистемная загрузка с помощью vesamenu из syslinux
  • Использование под swap разделов или файлов на локальных дисках
  • Кеширование NFS с помощью cachefilesd