DHCP + TFTP + PXELINUX = Netinstall
read in
Disclaimer: Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.
История
- 20.03.2007 - Първа версия
- 25.03.2007 - Английски превод
Мотивация
Преди около седмица в Linux-BG се появи молба за помощ, за един леко прецакан windows. Ситуацията беше, че MBR на системата беше заминал по дяволите, а машината нямаше нито CD, нито флопи, нито пък можеше да стартира от USB. Остава като решение само стартиране от мрежа. Помогнахме му на човека понеже си имам инсталиран такъв сървър в къщи. Тази комбинация от софтуер е полезна и при други ситуации (основно мързел) като инсталация на отдалечени машини, тестове, и някои други добрини.
Цел
Да получим сървър от който да може да се стартира инсталация на операционна система.
Ще демонстрираме как се прави това с Debian, а за други дистрибуции е аналогично.
Необходими компоненти
- Инсталирана и работеща линукс система която ще ползваме за PXE сървър
- DHCP сървър - тук ще опишем настройката му
- TFTP сървър
- PXELINUX - от syslinux системата
- Интернет свързаност или локално копие на необходимите пакети за инсталация
- Желание за работа и малко трезва мисъл
Изхождаме от презумпцията че цялото това нещо ще го реализирате в мрежа която е отделена от основната ви, тъй като едно дребно недоглеждане може да направи много поразии. Ще се постарая да ви спестя проблемите но никога не се знае.
Теория на работата
Доста машини могат да стартират през мрежа, било то за да работят като терминали или по други съображения. За целта мрежовата им карта трябва да поддържа PXE стандарта за предпочитане над версия 0.91. Макар че може да бъде излъгана и с по-ниски версии.
Самият процес протича доста елементарно и като цяло е доста прост:
- Машината стартира и се инициализира биос подсистемата
- Инициализира се PXE подсистемата на мрежовата карта
- Мрежовата карта изпраща заявка за IP адрес
- DHCP сървъра отговаря като в допълнение и предлага да стартира от мрежа и я насочва към следващия сървър (TFTP)
- TFTP сървъра предоставя на мрежовия стек малък файл който играе ролята на boot мениджър
- От този мениджър си избираме една от опциите и стартираме
За повече информация по темата:
- http://syslinux.zytor.com/ - информация за syslinux комплекта от инструменти
- PXE
- DHCP в wikipedia
- http://www.dhcp.org/
Настройка на DHCP сървър
Настройката не е нищо особенно има я подробно описана в документацията на sysllinux/pxelinux. Единственото което ни е необходимо в допълнение към нормален dhcp сървър са две допълнителни опции които ще обясним нагледно с пример.
/etc/dhcpd.conf
# # Sample configuration file for ISC dhcpd for Debian # # $Id: dhcpd.conf,v 1.4.2.2 2002/07/10 03:50:33 peloy Exp $ # # Задължително или няма да може да раздаваме адреси при нормална работа authoritative; # Да ще позволяваме стартирането на стари клиенти (идва от BOOTP протокола) allow bootp; # Да ще позволяваме стартирането на клиенти посредством PXE allow booting; # нашият следващ сървър от където ще си дръпнем boot loader next-server 10.99.3.1; # Как се казва нашият boot loader filename "pxelinux.0"; default-lease-time 14400; max-lease-time 86400; # стандартна конфигурация на dhcp сървър subnet 10.99.3.0 netmask 255.255.255.0 { range 10.99.3.10 10.99.3.200; option domain-name-servers 10.99.3.1; option domain-name "instalations.network"; option routers 10.99.3.1; option subnet-mask 255.255.255.0; option broadcast-address 10.99.3.255; option default-ip-ttl 64; option default-tcp-ttl 64; option time-offset 7200; option time-servers 10.99.3.1; option ntp-servers 10.99.3.1; option netbios-name-servers 10.99.3.1; option netbios-node-type 8; }
Ако нещо не ви е ясно ви съветвам да се обърнете към помощните страници на пакета dhcp
Настройка на TFTP сървър
За тфтп сървър ще използваме tftp hpa работещ в режим на демон.
той се инсталира пределно просто (при debian)
apt-get install tftpd-hpa
Конфигурацията му се намира в /etc/default/tftpd-hpa и е следната:
# ще работим като демон RUN_DAEMON="yes" # опциите са # -l - работим в режим на демон # -v - записваме подробна информация # -s - работим в сигурен режим като сервираме само от тази директория OPTIONS="-l -v -s /tftpboot"
Все още не стартирайте сървъра. Препоръчва се файловете както и директорията /tftpboot да са собственост на root и да са само за четене (от всички)
Настройки на PXELINUX
PXELINUX се намира в серята програми наречена syslinux. Не е необходимо да инсталирате целия пакет тъй като от него ще ползваме само pxelinux.0 и евентуално memdisk ако искате да стартирате дос
Конфигурацията му е до някъде сложна но ще се постарая да я обясня като хората. Самият pxelinux се конфигурира от един текстов файл който указва какво и с какви настройки да бъде стартирано. Също така поддържа възможност различните машини да получават различна конфигурация. Документацията в пакета syslinux е много добра макар и длъжка така че наистина я прочетете поне диагонално.
Нашата инсталация на pxeilinux ще живее в директорията /tftpboot и има следната структура:
/tftpboot/ /tftpboot/initrd/ /tftpboot/kernels/ /tftpboot/pxelinux.0 /tftpboot/pxelinux.cfg/ # нашата конфигурация /tftpboot/pxelinux.cfg/default /tftpboot/texts/
В случая ще демонстрираме една единствена конфигурация за всички машини. За разнообразни конфигурации моля погледнете в документацията. Следва и примерната конфигурация:
/tftpboot/pxelinux.cfg/default
# по подразбиране стартираме от локален диск # прави се за да не стане гаф и да унищожим информация default local # закъснение при стартиране (5 секунди) timeout 50 # да покажем ли промпт prompt 1 # да покажем определен текст display texts/menu.txt label local localboot 0 # етикет за този кернел label deb26n # самият кернел kernel kernels/deb-testing-26.kernel # допълнителни опции append initrd=initrd/deb-testing-26.initrd \ vga=normal \ ramdisk_size=16384 \ root=/dev/rd/0 \ devfs=mount,dall rw label deb26e kernel kernels/deb-testing-26.kernel append initrd=initrd/deb-testing-26.initrd \ DEBCONF_PRIORITY=low \ vga=normal \ ramdisk_size=16384 \ root=/dev/rd/0 \ devfs=mount,dall rw
Забележка: редовете append са разпределени на няколко реда от съображения за четимост, но в конфигурацията трябва да са на един ред.
Кернелът и initrd файла са взети от проекта дебиан и по точно от секцията му нетбоот. Добавени са с лека адаптация и допипване на командния ред
Заключение
Като цяло това е всичко. Не е особенно трудно да се постигне. Евентуален проблем който може да срещнете е че PXE агента на мрежовата карта е малко стар и не иска да работи с tftp сървър а задължително изисква pxe сървър, но това е лесно решимо.
За тези които искат готово решение без много много да си играят ето пакетирано всичко необходимо. Необходимо е само да имате инсталиран dhcp и tftp сървър.
Очаквам въпроси, коментари, предложения и каквото ви хрумне в коментарите.









Аз направих почти същото но имал малки проблеми които все още несъм разрешил. Моята цел е да инсталирам Ubuntu на много машини на ден. Единия проблем беше, че след като получа ип-адрес от DHCP сървъра, по-късно дебиян инсталера не ми хващаше мрежовите настройки и трябва да ги въвеждам на ръка. (в този случаи не съм сложил nex-server тъй като tftp-то и dhcp-to са ми на един компютър.) Другия проблем е, че немогат да се вържат повече от две pc-та.
12. June 2007 at 19:02За множество машини има няколко варианта:
- Инсталация от image - приложим е само за машини с еднакъв хардуер. Изисква допълнителна настройка на всяка машина след инсталирането и, но това се постига относително лесно.
- Инсталация посредством debian instaler (d-i) - неговият недостатък е че не се оправя много добре със раид масиви (софтуерни). И като цяло синтаксиса му е малко смотан. Някъде се моташе един сайт който генерираше автоматизирани инсталатори, но не се сещам кой беше точно.
- Писане на собствена инстал система - тук не мога да помогна, че ако кажа нещо и ще ме съдят.
12. June 2007 at 20:36Тук май всички статии са супер полезни…
19. June 2007 at 16:36Ами старая се до колкото мога. Пък и гледам винаги да ги пиша след като лично съм изтествал всичко.
19. June 2007 at 17:07Приевет
Искам да попитам създателя на темата за нещо което може да му стори смешно но срам не срам питам.
Ситоация
Няколко WinXP машини (всяка си има отделен img направен с “Norton Ghost 2003″ на собстеният си HDD(NTFS)на отделен партишън от OS-a) те са в една локална заедно с една Linux машинка с инсталиран Debian . Нито една машина няма CD или Floppy и ако тотално се замаже се разглобва за да се сложи CD от което да се стартира Hiren’s CD чрез което да се пусне “Norton Ghost 2003″ и от него да се върне img-a .
Въпрос
9. November 2007 at 6:58Може ли да направиш Guide стъпка по стъпка какво да се направи , че да не се налага разглобяването на машината с прецакан WinXP а вместо това да се направи img на диска с Hiren’s които да се сложи на debian-a и когато някои машина се скапе само да се настрои от биоса да зарежда по мрежата , и да се стартира Hiren’s CD чрез което да се пусне “Norton Ghost 2003″ и от него да се върне img-a от харда на повредената машина.
@jorgy: Да това е възможно да се направи. Ще го напиша това HowTo но ще отнеме малко време че в момента съм зает по друга тематика.
9. November 2007 at 10:15Благодаря ти предварително . Сигурен съм , че ще е от голяма полза са доста хора . Ако е направено като наръчник “стъпка по стъпка” доста хора ще могат и да импровизират .
9. November 2007 at 10:31[...] Norton Ghost over network. The idea came thanks to jorgy and more speciffically due to his comment http://www.getoto.net/2007/03/netinstall-with-pxe-tftp-dhcp/#comment-110. Today’s article will build up on the already laid [...]
9. November 2007 at 14:23