Давненько я не писал мануалов для линуксойдов. Исправляюсь.
Сегодня напишу интересную тему.
Начну с небольшой предыстории.
Лежал у меня на столе старенький HP Proliant Netserver LP 1000r, купленный когда-то за несколько тысяч с молотка. К сожалению, его владелец перед отправкой снял с него CD-привод и отправил со спокойной совестью. В сервере 3 scsi-винта, на одном из которых этот гений не постеснялся поставить пиратскую Windows XP Home Edition. Само собой, ставить я туда собрался Gentoo. Вопрос - как? CD-привода нет. Есть usb-порты, но по неведомой причине ни флешку, ни usb-cd-привод сервер в них не видит, а в bios'е ничего на этот счет нет. Снимать винты и ставить на другом компе систему - не вариант. Все сервера заняты, а покупать отдельный scsi-контроллер, стоящий в 5 раз дороже пролианта - бессмысленно. Остается последний вариант - загружаться в любую линуху по pxe, а там уже без проблем качать и ставить gentoo. Тем более, что на моем компе как раз гента и стоит. Вобщем, будем пробовать PXE. Соорудим из нашей генты настойщий MainFrame! :)
Надо быть уверенным, что ваш компьютиер/сервер имеет возможность вообще загружаться по сети. Это можно проверить в bios'е и выставить приоритет загрузки по Lan.
Весь процесс настроек можно описать в несколько простых шагов:
0. Создание всех директорий и файлов.
1. Настройка DHCP
2. Настройка TFTP
3. Создание pxe-загрузчика
4. Установка системы для pxe-загрузуи в chroot.
5. Конфигурирование pxe-ядра
Вобщем-то, все довольно просто и понятно. Справится даже новичок.
0. Создание всех директорий и файлов.
Создадим в корне системы директорию /netboot, в которой будем строить дерево нашей новой системы, которая будет грузиться на клиентской машинке. В ней создаем директорию /netboot/boot, в которой будет позже ядро, загрузчик и прочие данные для загрузки системы.
1. Настройка DHCP
Это обязательно. Если вы выставили в bios'е загрузку по Lan, компьютер практически сразу после опроса всего железа отправит широковещательный запрос с вопросом "Ау!!?? Кто я такой!!?? Кто здесь!!??". На что наш dhcp-сервер должен, согласно своим настройкам, выдать это пока бомжу ip-адреса интерфейса, маску, шлюз и адрес tftp-сервера. Даю примерный конфиг:
ddns-update-style none;
host netboot {
hardware ethernet 00:30:6e:11:13:57;
fixed-address 10.10.254.28;
next-server 10.10.254.25;
option tftp-server-name "10.10.254.25";
filename "/netboot/boot/pxelinux.0";
}
В последних двух строчках мы указываем путь к конфигу и загрузчику. Об этом подробней немного позже.
10.10.254.25 - это адрес нашей машинки, на которой мы, собственно, все пока и настраиваем.
10.10.254.28 - этот адрес получит наш сервер от dhcp-сервера.
Запускаем dhcp-сервер (/etc/init.d/dhcpd start).
2. Настройка TFTP
После получения всех реквизитов адресации, наша типа бездисковая машинка будет автоматом обращаться на tftp-сервер и выкачивать оттуда загрузчик, который, в свою очередь, расскажет машинке дальнейшие инструкции, где и что и откуда брать и загружать.
В качестве tftp-сервера я установил net-ftp/tftp-hpa. Он очень прост в настройке и работает отлично.
Прописываем в /etc/conf.d/in.tftpd путь к дереву новой системы и нужные нам опции запуска:
INTFTPD_PATH="/netboot"
INTFTPD_OPTS="-l -vvvvvv -s ${INTFTPD_PATH}"
Запускаем tftp-сервер (/etc/init.d/in.tftp start)
3. Создание pxe-загрузчика
Устанавливаем sys-boot/syslinux, который соберет нам pxelinux.0 - это тоже загрузчик, типа lilo или grub, который загружает систему по pxe, только все свои инструкции (где ядро, начальная файловая система и проч.) он получает по tftp.
Копируем наш свежий загрузчик и создаем конфиг для него:
# cp /usr/share/syslinux/pxelinux.0 /netboot/boot
# mkdir /netboot/boot/pxelinux.cfg
# vim /netboot/boot/pxelinux.cfg/default
В конфиге прописываем путь к ядру и начальной файловой системе:
DEFAULT /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=10.10.254.25:/netboot
4. Установка системы для pxe-загрузуи в chroot.
Теперь можно установить в /netboot новую gentoo-систему по вашему вкусу.
Распаковывем stage3-* в /netboot и дальше по хендбуку. Не забываем установить nfs-utils и в /etc/exports прописать разрешения для загрузки по NFS наших данных:
/netboot 10.10.254.28(rw,sync,no_root_squash,no_subtree_check)
При конфигурировании /etc/fstab, пишем следующее:
/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs nodev,nosuid,noexec 0 0
5. Конфигурирование pxe-ядра
При конфигурировании ядра необходимо обратить внимание на следующие опции и включить их не модулем, а в ядро:
- Отмечаем поддержку вашей сетевой карточки (на клиенте)
(В ядре, а не модулем!)
- Лезем в "Networking options" :
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
- Лезем в "File systems --> Network File Systems" :
<*> NFS file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS
Далее по ману компилим ядро. Теперь необходимо поставить пакет net-misc/mknbi, в котором есть утилита mkelf-linux. Она всего лишь оптимизирует наше готовое ядро для его использования при загрузке по сети. Теперь обрабатываем готовое ядро и копируем его в нашу новую систему:
# mkelf-linux -ip=dhcp bzImage > /netboot/boot/bzImage
--
Вобщем-то, на этом все! :)
Теперь можно пробовать включать клиента и грузиться по сети.
Если возникают какие-то проблемы, ставим tcpdump на нашей основной машинке и смотрим логи. А также /var/log/messages.