LTSP/LocalBoot

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

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

Текущая версия на 13: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@

 
Личные инструменты