Linux Network Administration — Грузим линукс по сети
Припозднился, сон не идет, решил перевести тот самый пост. Вначале расскажу о чем это и для чего, сам перевод - под катом.
Часто мы грузим ОС с харда, реже - с компакт-диска, реже - с флешки. Но кто видел более-менее свежие настройки БИОСов, наверняка замечал пункт загрузки по сети.
Как это? Это очень интересно. По сути, это первый шаг к построению тонких клиентови прочих вкусных няшек. Прошу не путать с установкой линукса по сети, загрузка - это именно загрузка. Надо сказать, что в современном мире сиди-приводы уходят в небытье, и например владельцам нетбуков эта статья может понравится. Кроме того, автор лично видел P2 как тонкий клиент на нехеровом сервере, так там все летало.
Итак, перевод ниже.
Возможность вашей машины грузиться по сети целиком и полностью определяется PXE (Preboot Execution Enviroment). Для этого необходимо иметь BIOS, который позволяет просматривать сетевой трафик и обнаруживать в нем нужное без оглядки на жесткий диск или другие загрузочные устройства. В этом случае, клиент просматривает сеть в поисках сигнала от сервера, который определяет дальнейшуюсудьбу загрузку машины. Собственно их описания настройки такого сервера статья и создана.
1. Установка DNS-сервера
Когда клиент включается, он пытается инициализировать сетевой интерфейс и подключится к сети через шлюз. Чтобы это сделать, ему необходим IP-адрес и возможность найти сервер. IP адрес необходимо получить через DHCP - обычно это не требуется, но для работы загрузки по сети это важно. К счастью, есть программа, совмещающая в себе функции DHCP и DNS сервер - dnsmasq.
Найдите в своем менеджере пакетов эту программу и установите ее. В ubuntu - это пакеты dnsmasq и dnsmasq-base.
2. Конфигурирование DHCP-сервера
Конфигурационный файл dnsmasqбанально называется dnsmasq.conf и находится в /etc (само собой, появляется только после установки пакета с программой). Чтобы его редактировать, необходимы права root. Далее достаточно открыть его emacs любимым текстовым редактором добавить в конец файла следующие записи:
dhcp-range=192.168.198.130, 192.168.198.140,12h #в исходном тексте как я понимаю ошибка в этом месте
dhcp-boot=pxelinux.0,192.168.198.128 #тоже, там пробел лишний по идее
dhcp-option=3,192.168.198.2
dhcp-option=6,192.168.198.2
Первая строчка характеризует диапазон адресов, которые будут обслуживаться DHCP-сервером. В примере - это сеть 192.168.198.0 с адресами в интервале от 130 до 140. Вторая строчка - адрес сервера сетевой загрузки, 'pxelinux.0' говорит о том, что клиент должен искать именно такую загрузочную запись. Последние две строки имеют отношение к шлюзу (192.168.198.128 в нашем случае). Если у вас возникают проблемы с определением правильных IP адресов, наберите в консоли:
ifconfig eth0 | grep inet
Это выведет список текущих адресов вашего сервера. Чтобы узнать адрес шлюза, выведите список маршрутов командой route. Строка с default - то, что вам нужно - IP адрес шлюза, который и надо вводить в последних двух строках.
После внесения изменений в конфиг, перезапустите dnsmasq командой:
sudo /etc/init.d/dnsmasq restart
или из-под рута /etc/init.d/dnsmasq restart.
3. Установка TFTP-сервера
После того, как клиент получит адрес и узнает, что необходимо цеплять pxelinux, следующий шаг - обеспечить ему это. Осуществляется такая задача при помощи TFTP (Trivial File Transfer Protocol) сервера, который по сути использует более примитивную версию протокола FTP. Примитивность здесь выгодна тем, что в этом случае PXE код помещается в скромные нужды BIOS. Распространненым TFTP-сервером является aTFTP, его и установим. После установки необходимо отредактировать файл конфигурации /etc/default/atftpd.conf.
Всего-навсего нужно изменить первую строку: 'USE_INETD=true' - поменять 'true' на 'false' и убедиться, что остальные параметры не противоречат настройкам сети/системы. По умолчанию, загрузочные файлы хранятся в /var/lib/tftpboot. На самом деле, не важно, где лежат сами файлы, важно, чтобы путь к ним был корректно прописан
Если вы работаете в сети с фаерволом, убедитесь, что порт 69 открыт. После проверки всей конфигурации сохраните ее и перезапустите atftp:
sudo /etc/init.d/atftpd restart
4. Создание загрузочных образов
Итак, сетевое взаимодействие налажено, теперь необходимо подсунуть клиенту те самые образы загрузки. Существует множество способов создания и добавления этих файлов, да причем и в разных дистрибутивах. Например, можно запустить полностью функциональную LiveCD систему, но мы ограничимся образом для сетевой установки ubuntu. Теперь их не добавляют в стандартный диск по соображениям нехватки места, но их можно достать тут. После скачивания поместите эти файлы в /var/lib/tftpboot (если специально не изменили директорию при настройке).
Разархивируйте архив и посмотрите на содержимое. Здесь находится pxelinux.0, на который мы уже ссылались, и директория 'pxelinux.cfg' - там хранится файл, аналогичный GRUB'овскому menu.lst - а значит, и работать с ним можно аналогично. Поэтому все изменения, касаемые процесса загрузки можно вводить там.
5. Загрузка клиета
Убедимся, что все демонына измене работают. Воспользуемся утилитой netstat:
netstat -nulp выведет информацию об используемом протоколе UDP.
Если все работает - смело включайте клиент, выбирайте загрузку по LAN и наслаждайтесьположительными эмоциями, качественным сервисом процессом загрузки.
Что делать, если BIOS не поддерживает загрузку по сети?
Авторы статьи рекомендуют сделать фиктивный тонкий клиент - то есть осуществлять загрузку, например, с флешки, а работать исключительно по сети через смонтированные сетевые папки (как бы в chroot'е).
Как загрузиться по сети в LiveCD
Задача тривиальна. Необходим собственно образ диска, а точнее, его содержимое. Его-то и нужно копировать в NFS-шару и соответственно поменять файл конфигурации:
LABEL Hardy-Heron kernel hardy/vmlinuz append boot=casper
netboot=nfs
nfsroot=192.168.198.128:/path/to/nfs/share initrd=hardy/initrd.gz
В этом примере ядро и initrd лежат в /var/lib/tftpboot/hardy - заметьте, как записаны пути к ним в конфиге, а само содержимое диска лежит в 192.168.198.128:/path/to/nfs/share - то есть, куда положим.
На этом все :)
Часто мы грузим ОС с харда, реже - с компакт-диска, реже - с флешки. Но кто видел более-менее свежие настройки БИОСов, наверняка замечал пункт загрузки по сети.
Как это? Это очень интересно. По сути, это первый шаг к построению тонких клиентов
Итак, перевод ниже.
Возможность вашей машины грузиться по сети целиком и полностью определяется PXE (Preboot Execution Enviroment). Для этого необходимо иметь BIOS, который позволяет просматривать сетевой трафик и обнаруживать в нем нужное без оглядки на жесткий диск или другие загрузочные устройства. В этом случае, клиент просматривает сеть в поисках сигнала от сервера, который определяет дальнейшую
1. Установка DNS-сервера
Когда клиент включается, он пытается инициализировать сетевой интерфейс и подключится к сети через шлюз. Чтобы это сделать, ему необходим IP-адрес и возможность найти сервер. IP адрес необходимо получить через DHCP - обычно это не требуется, но для работы загрузки по сети это важно. К счастью, есть программа, совмещающая в себе функции DHCP и DNS сервер - dnsmasq.
Найдите в своем менеджере пакетов эту программу и установите ее. В ubuntu - это пакеты dnsmasq и dnsmasq-base.
2. Конфигурирование DHCP-сервера
Конфигурационный файл dnsmasq
dhcp-range=192.168.198.130, 192.168.198.140,12h #в исходном тексте как я понимаю ошибка в этом месте
dhcp-boot=pxelinux.0,192.168.198.128 #тоже, там пробел лишний по идее
dhcp-option=3,192.168.198.2
dhcp-option=6,192.168.198.2
Первая строчка характеризует диапазон адресов, которые будут обслуживаться DHCP-сервером. В примере - это сеть 192.168.198.0 с адресами в интервале от 130 до 140. Вторая строчка - адрес сервера сетевой загрузки, 'pxelinux.0' говорит о том, что клиент должен искать именно такую загрузочную запись. Последние две строки имеют отношение к шлюзу (192.168.198.128 в нашем случае). Если у вас возникают проблемы с определением правильных IP адресов, наберите в консоли:
ifconfig eth0 | grep inet
Это выведет список текущих адресов вашего сервера. Чтобы узнать адрес шлюза, выведите список маршрутов командой route. Строка с default - то, что вам нужно - IP адрес шлюза, который и надо вводить в последних двух строках.
После внесения изменений в конфиг, перезапустите dnsmasq командой:
sudo /etc/init.d/dnsmasq restart
или из-под рута /etc/init.d/dnsmasq restart.
3. Установка TFTP-сервера
После того, как клиент получит адрес и узнает, что необходимо цеплять pxelinux, следующий шаг - обеспечить ему это. Осуществляется такая задача при помощи TFTP (Trivial File Transfer Protocol) сервера, который по сути использует более примитивную версию протокола FTP. Примитивность здесь выгодна тем, что в этом случае PXE код помещается в скромные нужды BIOS. Распространненым TFTP-сервером является aTFTP, его и установим. После установки необходимо отредактировать файл конфигурации /etc/default/atftpd.conf.
Всего-навсего нужно изменить первую строку: 'USE_INETD=true' - поменять 'true' на 'false' и убедиться, что остальные параметры не противоречат настройкам сети/системы. По умолчанию, загрузочные файлы хранятся в /var/lib/tftpboot. На самом деле, не важно, где лежат сами файлы, важно, чтобы путь к ним был корректно прописан
Если вы работаете в сети с фаерволом, убедитесь, что порт 69 открыт. После проверки всей конфигурации сохраните ее и перезапустите atftp:
sudo /etc/init.d/atftpd restart
4. Создание загрузочных образов
Итак, сетевое взаимодействие налажено, теперь необходимо подсунуть клиенту те самые образы загрузки. Существует множество способов создания и добавления этих файлов, да причем и в разных дистрибутивах. Например, можно запустить полностью функциональную LiveCD систему, но мы ограничимся образом для сетевой установки ubuntu. Теперь их не добавляют в стандартный диск по соображениям нехватки места, но их можно достать тут. После скачивания поместите эти файлы в /var/lib/tftpboot (если специально не изменили директорию при настройке).
Разархивируйте архив и посмотрите на содержимое. Здесь находится pxelinux.0, на который мы уже ссылались, и директория 'pxelinux.cfg' - там хранится файл, аналогичный GRUB'овскому menu.lst - а значит, и работать с ним можно аналогично. Поэтому все изменения, касаемые процесса загрузки можно вводить там.
5. Загрузка клиета
Убедимся, что все демоны
netstat -nulp выведет информацию об используемом протоколе UDP.
Если все работает - смело включайте клиент, выбирайте загрузку по LAN и наслаждайтесь
Что делать, если BIOS не поддерживает загрузку по сети?
Авторы статьи рекомендуют сделать фиктивный тонкий клиент - то есть осуществлять загрузку, например, с флешки, а работать исключительно по сети через смонтированные сетевые папки (как бы в chroot'е).
Как загрузиться по сети в LiveCD
Задача тривиальна. Необходим собственно образ диска, а точнее, его содержимое. Его-то и нужно копировать в NFS-шару и соответственно поменять файл конфигурации:
LABEL Hardy-Heron kernel hardy/vmlinuz append boot=casper
netboot=nfs
nfsroot=192.168.198.128:/path/to/nfs/share initrd=hardy/initrd.gz
В этом примере ядро и initrd лежат в /var/lib/tftpboot/hardy - заметьте, как записаны пути к ним в конфиге, а само содержимое диска лежит в 192.168.198.128:/path/to/nfs/share - то есть, куда положим.
На этом все :)