LTSP/LocalBoot
Организация загрузки терминалов с локальных жёстких дисков
Постановка задачи
Дано: школьный класс с весьма немощными машинками (Pentium 166 + 32..64 RAM + HDD 0.5..2 Gb и Celeron 333 + 64..128 RAM + HDD 4..10 Gb), сетевую загрузку не поддерживают.
Надо: сделать их клиентами ALT Linux Terminal, расположив на локальном HDD initrd.img и vmlinuz, а остальное дисковое пространство отдать под swap.
Шаги по реализации
- Для использования локального HDD под swap на сервере надо указать USE_LOCAL_SWAP=Y в /etc/lts.conf
- На флэшку с терминального сервера сбрасываем /var/lib/ltsp/i586/boot целиком; /etc/lilo.conf можно сразу поправить, у меня выглядит так (понятно, с излишествами в виде рюшечек):
map="/boot/map" lba32 prompt compact timeout="100" install="menu" default="ALTLinuxTerminalClient" vga=NORMAL append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=dhcp" message="/boot/splash/message" boot="/dev/hda" image="/boot/vmlinuz" label="ALTLinuxTerminalClient" initrd="/boot/initrd.img"
read-only
- Берем пару старых маленьких HDD, цепляем их парой master/slave на шлейф. На второй шлейф – DVD-читалку. Для полного счастья втыкаем флэшку (купил дешевый контроллер PCI USB для комфорта). Все, заправочная станция готова.
- Грузимся с установочного диска ALT Linux Terminal, режим rescue (советовали грузиться с LiveCD, но я там не нашел /sbin/lilo).
# ls /dev/hd* – а винты то мои живы? Живы, есть hda и hdb # ls /dev/sd* – а флэшка видна? Ага, sda1 # mkdir /tmp/flash # mount -t vfat /dev/sda1 /tmp/flash – сразу ее примонтируем
- Создаем разделы на жестких дисках:
# fdisk /dev/hda p – что там есть? d – всё, что не нужно n – (новый) p – (primary) 1 – (номер один) [задать размер — как на душу ляжет, требуется всего 3.5 мега] t – тип 1- первого раздела 83 – Linux a – сделать активным 1 – да, первый раздел n – остальное отдадим под swap p 2 [все остальное отдаем под свап] t – (тип) 2 – (второго) 82 – (linux swap) p – (любуемся) w – (запись и выход)
То же самое проделываем со вторым диском /dev/hdb.
- Форматируем созданные разделы и монтируем:
# mkfs.ext3 /dev/hda1 # mkswap /dev/hda2 # mkdir /tmp/hda # mount /dev/hda1 /tmp/hda
То же самое проделываем со вторым диском /dev/hdb.
- Теперь «заправляем» раздел диска:
# mkdir /tmp/hda/boot # mkdir /tmp/hda/etc # mkdir /tmp/hda/dev # mkdir /tmp/hda/sys # mkdir /tmp/hda/proc
С флэшки копируем подручными средствами /boot в /tmp/hda/boot/, lilo.conf – в /tmp/hda/etc/ Повторяем эту процедуру для второго диска.
- Делаем диск загрузочным
# mount --bind /dev /tmp/hda/dev/ # mount --bind /sys /tmp/hda/sys/ # mount --bind /proc /tmp/hda/proc/
И, наконец
# lilo -r /tmp/hda
- Проделать сразу же предыдущий пункт для второго диска у меня не получилось (собственно, не получилось отмонтировать /dev /sys /proc) – поэтому shutdown, отцепляю Master, на Slave переставляю перемычку на Master, снова гружусь rescue, и повторяю
# mkdir /tmp/hda # mount /dev/hda1 /tmp/hda # mount --bind /dev /tmp/hda/dev/ # mount --bind /sys /tmp/hda/sys/ # mount --bind /proc /tmp/hda/proc/ # lilo -r /tmp/hda
Итог
Все. У нас есть пара терминалов! Я прекрасно понимаю, что это не истина последней инстанции, но у меня это получилось. Класс – 11 терминальных станций, и три залитых запасных винта.
PS: Сетевые карточки 10 мегабитные буду выбрасывать – тормоза ;-( PPS: Выпросил денег – серверу памяти до 2 гиг добавить.
Благодарности
Статья написана в качестве «спасибо» всем, кто терпел меня, и в облегчение жизни тем, кто повторит такой путь.
Это не состоялось бы без терпеливого участия Led, Michael Shigorin, Michael A. Kangin
С уважением, Сергей Спиридонов