LTSP/LocalBoot: различия между версиями
Ilis (обсуждение | вклад) Нет описания правки |
Arc (обсуждение | вклад) |
||
(не показано 8 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
== Организация загрузки терминалов с локальных жёстких дисков == | |||
=== Постановка задачи === | |||
Дано: школьный класс с весьма немощными машинками (Pentium 166 + 32..64 RAM + HDD 0.5..2 Gb и Celeron 333 + 64..128 RAM + HDD 4..10 Gb), сетевую загрузку не поддерживают. | |||
Дано: школьный класс с весьма немощными машинками (Pentium 166 + 32 | |||
Надо: сделать их клиентами ALT Linux Terminal, расположив на локальном HDD <tt>initrd.img</tt> и <tt>vmlinuz</tt>, а остальное дисковое пространство отдать под swap. | |||
=== Шаги по реализации === | |||
* Для использования локального HDD под swap на сервере надо указать <tt>USE_LOCAL_SWAP=Y</tt> в <tt>/etc/lts.conf</tt> | |||
* На флэшку с терминального сервера сбрасываем <tt>/var/lib/ltsp/i586/boot</tt> целиком; <tt>/etc/lilo.conf</tt> можно сразу поправить, у меня выглядит так (понятно, с излишествами в виде рюшечек): | |||
map="/boot/map" | map="/boot/map" | ||
lba32 | lba32 | ||
prompt | prompt | ||
compact | compact | ||
timeout=" | timeout="30" | ||
install="menu" | install="menu" | ||
default=" | default="TerminalClient" | ||
vga=NORMAL | vga=NORMAL | ||
append="root=/dev/nfs nfsroot=/var/lib/ | append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=dhcp" | ||
message="/boot/splash/message" | message="/boot/splash/message" | ||
boot="/dev/hda" | boot="/dev/hda" | ||
image="/boot/vmlinuz" | image="/boot/vmlinuz" | ||
label=" | label="TerminalClient" | ||
initrd="/boot/initrd.img" | initrd="/boot/initrd.img" | ||
read-only | read-only | ||
N.B.! Иногда (когда нет bootsplash в /boot ) рюшечки нужно выкидывать. Тогда комментируем или удаляем строчки строчки: | |||
#install="menu" | |||
#message="/boot/splash/message" | |||
* Берем пару старых маленьких HDD, цепляем их парой master/slave на шлейф. На второй шлейф – DVD-читалку. Для полного счастья втыкаем флэшку (купил дешевый контроллер PCI USB для комфорта). Все, заправочная станция готова. | |||
#ls /dev/hd* – а винты то мои живы? Живы, есть hda и hdb | * Грузимся с установочного диска ALT Linux Terminal, режим rescue (советовали грузиться с LiveCD, но я там не нашел /sbin/lilo). | ||
#ls /dev/sd* – а флэшка видна? Ага, sda1 | # ls /dev/hd* – а винты то мои живы? Живы, есть hda и hdb | ||
# ls /dev/sd* – а флэшка видна? Ага, sda1 | |||
# mkdir /tmp/flash | # mkdir /tmp/flash | ||
# mount -t vfat /dev/sda1 /tmp/flash – сразу ее примонтируем | # mount -t vfat /dev/sda1 /tmp/flash – сразу ее примонтируем | ||
* Создаем разделы на жестких дисках: | |||
# fdisk /dev/hda | |||
fdisk /dev/hda | |||
p – что там есть? | p – что там есть? | ||
d – всё, что не нужно | d – всё, что не нужно | ||
Строка 61: | Строка 62: | ||
p – (любуемся) | p – (любуемся) | ||
w – (запись и выход) | w – (запись и выход) | ||
То же самое проделываем со вторым диском /dev/hdb. | |||
* Создаем каталоги для монтирования корневых разделов | |||
# mkdir /tmp/hd{a,b} | |||
* Форматируем созданные разделы и монтируем: | |||
# mkfs.ext3 /dev/hda1 | |||
# mkswap /dev/hda2 | |||
# mount /dev/hda1 /tmp/hda | |||
То же самое проделываем со вторым диском /dev/hdb. | |||
* Теперь «заправляем» разделы дисков: | |||
# mkdir /tmp/hd{a,b}/{boot,etc,dev,sys,proc} | |||
mkdir /tmp/ | |||
С флэшки копируем подручными средствами <tt>/boot</tt> в <tt>/tmp/hda/boot/</tt>, <tt>lilo.conf</tt> – в <tt>/tmp/hda/etc/</tt> | |||
Повторяем эту процедуру для второго диска. | |||
* Делаем диск загрузочным | |||
# for i in /dev /sys /proc; do mount --bind $i /tmp/hda$i/; done | |||
# | # for i in /dev /sys /proc; do mount --bind $i /tmp/hdb$i/; done | ||
# | |||
Что равносильно: | |||
# mount --bind /dev /tmp/hda/dev/ | # mount --bind /dev /tmp/hda/dev/ | ||
# mount --bind /sys /tmp/hda/sys/ | # mount --bind /sys /tmp/hda/sys/ | ||
# mount --bind /proc /tmp/hda/proc/ | # mount --bind /proc /tmp/hda/proc/ | ||
# mount --bind /dev /tmp/hdb/dev/ | |||
# mount --bind /sys /tmp/hdb/sys/ | |||
# mount --bind /proc /tmp/hdb/proc/ | |||
Записываем загрузчик на оба диска | |||
# lilo -r /tmp/hda | # lilo -r /tmp/hda | ||
# sed -i "s#/dev/hda#/dev/hdb#" /tmp/hdb/etc/lilo.conf | |||
# lilo -r /tmp/hdb | |||
# sed -i "s#/dev/hdb#/dev/hda#" /tmp/hdb/etc/lilo.conf | |||
Поясню последние три строчки: | |||
* В <tt>/tmp/hdb/etc/lilo.conf</tt> меняем <tt>boot="/dev/hda"</tt> на <tt>boot="/dev/hdb"</tt>. Обычно используемый в sed разделитель "/" я заменил на "#", чтобы не экранировать слэши в поисковых шаблонах. | |||
* Записываем загрузчик второго диска | |||
* После чего отменяем исправления <tt>/tmp/hdb/etc/lilo.conf</tt> (чтобы в будущем не наткнуться на давно засыпанные листьями грабли). | |||
Все. У нас есть пара терминалов! | === Итог === | ||
Я прекрасно понимаю, что это не истина последней инстанции, но у меня это получилось. Класс – 11 терминальных станций, и три залитых запасных винта. | Все. У нас есть пара терминалов! Я прекрасно понимаю, что это не истина последней инстанции, но у меня это получилось. Класс – 11 терминальных станций, и три залитых запасных винта. | ||
PS: Сетевые карточки 10 мегабитные буду выбрасывать – тормоза ;-( | PS: Сетевые карточки 10 мегабитные буду выбрасывать – тормоза ;-( | ||
PPS: Выпросил денег – серверу памяти до 2 гиг добавить. | PPS: Выпросил денег – серверу памяти до 2 гиг добавить. | ||
== Благодарности == | |||
Статья написана в качестве «спасибо» всем, кто терпел меня, и в облегчение жизни тем, кто повторит такой путь. | |||
Это не состоялось бы без терпеливого участия Led, Michael Shigorin, Michael A. Kangin | |||
С уважением, Сергей Спиридонов | С уважением, Сергей Спиридонов | ||
==UPD. LocalBoot & static ip address== | |||
Отказ от PXE дает возможность отключить DHCP на сервере терминалов, что бывает полезно при интеграции терминального класса в уже существующую сеть. | |||
Соответственно, каждый терминальный клиент должен иметь статический ip address. | |||
Для этого в /etc/lilo.conf строку: | |||
append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=dhcp" | |||
необходимо изменить, например, на: | |||
append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=192.168.0.55:192.168.0.1:192.168.0.1:255.255.255.0" | |||
где: | |||
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf> | |||
Информация о параметрах, [http://fxr.watson.org/fxr/source/Documentation/nfsroot.txt?v=linux-2.6 тут]. | |||
Все это проверено и работает в одном из классов [http://www.ksu.edu.ru/ КГУ им. Некрасова] | |||
Решение подсказал Lenar Shakirov in ltsp-server@ | |||
{{Category navigation|title=LTSP|category=LTSP|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=LTSP|category=LTSP|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 16:48, 30 апреля 2010
Организация загрузки терминалов с локальных жёстких дисков
Постановка задачи
Дано: школьный класс с весьма немощными машинками (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="30" install="menu" default="TerminalClient" 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="TerminalClient" initrd="/boot/initrd.img" read-only
N.B.! Иногда (когда нет bootsplash в /boot ) рюшечки нужно выкидывать. Тогда комментируем или удаляем строчки строчки:
#install="menu" #message="/boot/splash/message"
- Берем пару старых маленьких 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.
- Создаем каталоги для монтирования корневых разделов
# mkdir /tmp/hd{a,b}
- Форматируем созданные разделы и монтируем:
# mkfs.ext3 /dev/hda1 # mkswap /dev/hda2 # mount /dev/hda1 /tmp/hda
То же самое проделываем со вторым диском /dev/hdb.
- Теперь «заправляем» разделы дисков:
# mkdir /tmp/hd{a,b}/{boot,etc,dev,sys,proc}
С флэшки копируем подручными средствами /boot в /tmp/hda/boot/, lilo.conf – в /tmp/hda/etc/ Повторяем эту процедуру для второго диска.
- Делаем диск загрузочным
# for i in /dev /sys /proc; do mount --bind $i /tmp/hda$i/; done # for i in /dev /sys /proc; do mount --bind $i /tmp/hdb$i/; done
Что равносильно:
# mount --bind /dev /tmp/hda/dev/ # mount --bind /sys /tmp/hda/sys/ # mount --bind /proc /tmp/hda/proc/ # mount --bind /dev /tmp/hdb/dev/ # mount --bind /sys /tmp/hdb/sys/ # mount --bind /proc /tmp/hdb/proc/
Записываем загрузчик на оба диска
# lilo -r /tmp/hda
# sed -i "s#/dev/hda#/dev/hdb#" /tmp/hdb/etc/lilo.conf # lilo -r /tmp/hdb # sed -i "s#/dev/hdb#/dev/hda#" /tmp/hdb/etc/lilo.conf
Поясню последние три строчки:
- В /tmp/hdb/etc/lilo.conf меняем boot="/dev/hda" на boot="/dev/hdb". Обычно используемый в sed разделитель "/" я заменил на "#", чтобы не экранировать слэши в поисковых шаблонах.
- Записываем загрузчик второго диска
- После чего отменяем исправления /tmp/hdb/etc/lilo.conf (чтобы в будущем не наткнуться на давно засыпанные листьями грабли).
Итог
Все. У нас есть пара терминалов! Я прекрасно понимаю, что это не истина последней инстанции, но у меня это получилось. Класс – 11 терминальных станций, и три залитых запасных винта.
PS: Сетевые карточки 10 мегабитные буду выбрасывать – тормоза ;-( PPS: Выпросил денег – серверу памяти до 2 гиг добавить.
Благодарности
Статья написана в качестве «спасибо» всем, кто терпел меня, и в облегчение жизни тем, кто повторит такой путь.
Это не состоялось бы без терпеливого участия Led, Michael Shigorin, Michael A. Kangin
С уважением, Сергей Спиридонов
UPD. LocalBoot & static ip address
Отказ от PXE дает возможность отключить DHCP на сервере терминалов, что бывает полезно при интеграции терминального класса в уже существующую сеть.
Соответственно, каждый терминальный клиент должен иметь статический ip address.
Для этого в /etc/lilo.conf строку:
append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=dhcp"
необходимо изменить, например, на:
append="root=/dev/nfs nfsroot=/var/lib/ltsp/i586,udp ip=192.168.0.55:192.168.0.1:192.168.0.1:255.255.255.0"
где:
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
Информация о параметрах, тут.
Все это проверено и работает в одном из классов КГУ им. Некрасова
Решение подсказал Lenar Shakirov in ltsp-server@