Меню Рубрики

Загрузка linux по сети pxe nfs

PXE загрузка — загружаем LiveCD Ubuntu

PXE загрузка может показаться чем-то сложным на первый взгляд, однако! Собрать систему которая бы реализовывала загрузку можно минут за пять.

Где может понадобиться PXE?

Наверно те, кто сталкивался с частой установкой операционных систем могут заметить, что каждый раз необходимо готовить флешку, конечно можно изготовить флешку с которой будет грузиться все что угодно, но флешек размер ограничен, а что если необходимо установить операционную систему на 10 или скажем 100 компьютеров?

Ответ

Вот тут и поможет загрузка по сети. Какие возможности открываются при этом? Можно загрузить множество систем одновременно на различном количестве ПК не использую физический носитель для загрузки, скорость загрузки остается вполне не плохой, приятным бонусом может стать возможность автоматизации, особенно если вы выполняете сервисное обслуживание.
Еще одно применением загрузки по сети может являться создание тонких клиентов, для этих целей очень подходит операционная система Linux.

Что необходимо для PXE

Первое что необходимо — это локальная сеть, действительно, у нас ведь загрузка через сеть.
Еще нам понадобиться ПК, сервер или роутер чтобы выдавать ip адреса и настройки, в общем DHCP сервер.
Я рассмотрю вариант на Windows 2008R2, isc-dhc-server и dnsmasq, как наиболее часто используемые.

Также нам понадобится tftp, samba и nfs сервера — tftp для первоначальной загрузки все начинается с нее.
В общем то и все что нужно. Все эти службы могут быть установлены как на одном физическом сервере так и на нескольких серверах, сут от этого не поменяется.

Настройка DHCP

Windows server 2008R2

Тут все просто: добавляем две опции в параметры области сети

Первая опция — адрес сервера на котором установлен tftp сервер.
Вторая — имя файла через который будет осуществлятся загрузка, по сути он является ядром сетевой загрузки.

DHCP сервер dnsmasq

Добавляем строку в конфигурационный файл

DHCP сервер ISC-DHCP-SERVER

В секцию описания зоны добавляем название файла (pxelinux.0) для загрузки
и адрес TFTP сервера

TFTP сервер

В качестве TFTP сервера могут использоваться служба tftpd, tftpd-hpa или встроенный tftp сервер в dnsmasq,
стоит отметить что tftpd и tftp в dnsmasq не подходят для загрузки систем у которых пути к файлам имею обратный слеш «\» так как они не поддерживают автозамену путей на лету, поэтому если планируется загружать WinPE то стоит использовать tftpd-hpa.

Настройка tftpd-hpa

Открываем файл /etc/default/tftpd-hpa

nano / etc / default / tftpd-hpa

# /etc/default/tftpd-hpa
TFTP_USERNAME = «tftp»
TFTP_DIRECTORY = «/srv/tftp»
TFTP_ADDRESS = «:69»
TFTP_OPTIONS = «—secure -c -v»

Где взять файлы для загрузки

Для простой загрузки нам понадобится всего два файла — это pxelinux.0 и конфигурационный файл pxelinux.cfg

pxelinux.0 — загрузчик из пакета syslinux, взял версию 4.06, остальные версии не получилось завести.

Первый файл готов, теперь необходимо решить что будем грузить.
Самое простое что можно загрузить — это меню и выполнить загрузку с первого жесткого диска. (Самое бесполезное использование загрузки по сети)
Для этого скопируем необходимые компоненты из syslinux

Скопируются целая куча модулей, нам нужны будут не все, не используемые выявим в процессе настройки.
И так, составляем конфигурационный файл default в каталоге /srv/tftp/pxelinux.cfg/
default — конфигурационный файл который грузится по умолчанию, можно создать конфигурационные файлы по шалону и если ни к одному шаблону не применится правило, то загрузится файл default, но об этом позже, и так, открываем файл

Сохраняем, попробуем загрузиться на клиенте, устанавливаем в БИОС PXE ROM enable (или подобную настройку, часто находится во вкладке advenced) и ставим сетевой адаптер первым в списке загрузке во вкладке boot, сохраняем и перезагружаем

Вводим название пункта (у меня написано hdd) и начинается загрузка с жесткого диска.
Двигаемся дальше, а то загрузка с диска, которая в общем-то загружается и родным способом нормально в целом не несет много пользы, попробуем загрузить liveCD Ubuntu.
Эта система удобна тем что в ней есть режим casper, который позволяет запустить систему без установки.
Скачиваем свеженький образ дистрибутива с официального сайта:ubuntu.ru
помещу его в свой каталог с образами

/images/iso
Образ не обязательно распаковывать, я его просто монтирую.
Создадим каталог для наших образов для PXE загрузки:

/ images / ubuntu-16.04.4-desktop-amd64.iso / srv / tftp / linux / ubuntu / 16.04 /

Затем переходим в каталог /srv/tftp/linux/ubuntu/16.04/casper и ищем как записано ядро и образ памяти

В данном случае ядро называется vmlinuz.efi, а образ памяти initrd.lz, запоминаем эту информацию и правим конфигурационный файл /srv/tftp/pxelinux.cfg/default

Для образа с Ubuntu 18.04 пришлось вносить изменения в строку APPEND, необходимо добавить параметр toram

Как успели заметить тут есть параметр nfs, эту службу необходимо настроить:
в файл конфигурации /etc/exports я вношу строку:

И перезапускаю nfs

Готово, можно попробовать загрузиться


Создание меню в PXE

Чтобы каждый раз не вводить имя образа можно либо прописать автозагрузку определенного образа, либо создать графическое меню.
Создается автозагрузка следующим образом, добавляем параметр default с названием метки:

Графическое меню очень полезно когда у нас множество различных образов, тут нам поможет создать модуль vesamenu.c32
Хороший мануал по настройке меню предвствлен на сайте syslinux

Привожу пример своих настроек цветов, добавляю вначале в /srv/tftp/pxelinux.cfg/default

default vesamenu.c32
ALLOWOPTIONS 0
PROMPT 0
FONT psf / Cyr_a8x16.psf
MENU BACKGROUND back2.jpg
MENU TITLE Boot PXE from Jake Dog ` s
MENU RESOLUTION 800 600
MENU COLOR border 30 ; 40 #000000ff #000000ff none
MENU COLOR title 1 ; 36 ; 40 #ffff6801 #ff010003 std
MENU COLOR unsel 37 ; 40 #ff000000 #00000000 none
MENU COLOR hotkey 1 ; 37 ; 40 #ffffffff #00000000 std
MENU COLOR sel 0 ; 37 ; 40 #c0ff6801 #ff010003 none
MENU COLOR scrollbar 30 ; 40 #ff000000 #ff000000 std
MENU COLOR help 30 ; 40 #ffff6801 #ff010003 none
MENU COLOR timeout_msg 37 ; 40 #ffff6801 #ff010003 none
MENU COLOR timeout 1 ; 37 ; 40 #ffff6801 #ff010003 none
MENU WIDTH 40
MENU MARGIN 1
MENU ENDROW -1
MENU HELPMSGROW 32
MENU HELPMSGENDROW -1
MENU TIMEOUTROW 12
MENU HSHIFT 0
MENU VSHIFT 0

Обращаю внимание что коды цветов идут после решетки! причем первые два — это прозрачность, остальные RGB формат, все значения HEX.
Устанавливаю картинку разрешением 800×600 так как указал параметр MENU RESOLUTION 800 600, если его не указать то будет разрешение 640×480

В итоге получилась такое симпатичное загрузочное меню

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Трудности с Linux

Заметки по ходу настройки «разного» в Linux. Хочу разобраться — читаю исходники. Программирование, администрирование, микроэлектроника, фотографирование и пр.

Страницы

понедельник, 17 сентября 2012 г.

Загрузка по сети. PXE NFSROOT GRUB2

Изготовление окружения сетевой загрузки PXE, для виртуальных машин и контейнеров.

Долгое время, на обычном роутере DD-WRT у меня была доступна загрузка различных образов операционных систем через сеть, на любом компьютере, поддерживающим загрузку по сети.

Решил сделать это же на новом микросервере, но уже для целей виртуальных машин, а также для рабочей системы.

Сетевая загрузка вовлекает много компонентов программного обеспечения — dhcp-сервер, tftp-сервер, загрузчик, клиентский bios.

Замените, в соответствии со своими настройками, строки:
userserver — имя пользователя на сервере
username — имя пользователя на клиенте

Настройка DHCP/TFTP сервера DNSMasq для поддержки сетевой загрузки клиентов

Т.к. сейчас на микросервере используется DNSMasq в качестве DNS/DHCP/TFTP сервера, то укажем его опции настройки.

Опции, относящиеся к DHCP/PXE.
# Указываем загрузчик либо pxelinux.0, либо grub.pxe
dhcp-boot=pxelinux.0
# dhcp-boot=grub.pxe

Опции, относящиеся к настройке TFTP сервера в файле /etc/dnsmasq.conf

# Включение встроенного в dnsmasq TFTP сервера
enable-tftp
# Корень TFTP сервера
tftp-root=/home/userserver/tftproot

Создадим папку tftpboot в домашней папке под простым пользователем сервера «userserver»:
userserver@microserver$ mkdir

Также не забудем установить разрешение на изменение папки всем желающим:

root@microserver# chmod a+rw /home/userserver/tftproot

И для удобства пополнения и редактирования эту папку можно внести в список ресурсов SAMBA либо nfs.

Перезапустить DNSMasq сервис.
# service dnsmasq restart

Настройка PXE меню на основе PXELinux

Для минимальной работоспособности в корне TFTP сервера надо создать папку pxelinux.cfg, а в ней текстовый файл default.

# ls tftproot/pxelinux.cfg/
default vesamenu.c32

На микросервере в файле /etc/exports указываем:

Начиная с версии 3.71, initrd может быть указан отдельной директивой
(INITRD) вместо части директивы APPEND

Попробуем загрузиться. Для этого в BIOS клиентского компьютера выберем в качестве первого устройства загрузки — сеть.
Обычно, если более менее правильно настроено, клиент может загрузить ядро linux. А вот дальнейшая загрузка может сломаться по различным причинам, уже относящимся к конфигурации системы (образа iso).

Преобразование установленной системы Ubuntu 12.10 на жестком диске — в вариант
сетевой загрузки

Заманчивая возможность — установить ubuntu обычным способом на жесткий диск, а затем, внеся некоторые изменения, подключить этот жесткий диск к серверу и обеспечить загрузку клиента по сети. Жесткий диск с usb-подключением.

Во время установки диск разбивается на 4 первичных раздела.
1. swap
2. ext4 — корневая файловая система для обычной загрузки, точка монтирования — /
3 ext4 — будущая корневая файловая система для сетевой загрузки (nfsroot)
4 ext4 — домашняя файловая система, /home

swap располагается в начале диска, т.к. скорость в этом месте выше.

Установка производится во второй раздел (например /dev/sda2) и в четвертый. Далее, после загрузки системы со второго раздела, его содержимое копируется на третий раздел. Настраивается загрузчик syslinux для загрузки с третьего раздела.Система загружается с третьего раздела. Вносятся изменения.

Изменения для сетевой загрузки

1. Изменение initramfs — начальной корневой файловой системы

Итак, установленная новая система Ubuntu Gnome Shell Remix 12.10 на жестком диске usb.

— надо загрузиться в систему, c третьего раздела
— надо скопировать каталог /etc/initramfs-tools/ в другое место
root@client# cp -R /etc/initramfs-tools/ /tmp/initramfs-tools

— отредактировать скопированный файл /tmp/initramfs-tools/initramfs.conf, исправляем опции:
BOOT=nfs

— отредактировать /etc/initramfs-tools/modules, внести драйверы сетевых карт, обычно встречающиеся на компьютерах, у меня forcedeth

— надо сгенерировать новый файл initramfs на основе скопированного каталога
например:
root@client# mkinitramfs -d /tmp/initramfs-tools/ -v -o /tmp/initrd.img-3.5.0-13-net

. Настройки на сервере
В папке tftproot создадим папки system, system/root, system/home. Это будет папки рабочей системы, доступные через NFS.
Папку tftproot/system/root сделаем доступным через NFS, укажем в файле /etc/exports:

# Папка для сетевой загрузки рабочей системы
# 10 сентября 2012
# root — корневая файловая система
# home — домашний каталог
/home/userserver/tftproot/system/root *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)
/home/userserver/tftproot/system/home *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)

. Опции ядра, передаваемые загрузчиком, относящиеся к NFS, указываются в строке APPEND.

root=/dev/nfs — опция, указывает ядру, на то, что надо использовать NFS для монтирования корневой файловой системы, а не обычное блочное устройство

nfsroot=192.168.3.1:/home/userserver/tftproot/system/root,
где — разнообразные опции NFS, через запятую.

nfsrootdebug — включает отладочные сообщения
netboot=nfs — опция casper, указывает ему выполнять монтирование сетевого ресурса.
ip=dhcp — автоконфигурирование ip-адреса.

Сформируем пункт меню «Testing netboot system» для файла меню pxelinux.cfg/default
.

LABEL Testing netboot system
KERNEL system/root/vmlinuz
INITRD system/root/boot/initrd.img-3.5.0-13-net
APPEND root=/dev/nfs nfsroot=192.168.3.1:/home/userservertftproot/system/root ip=dhcp rw noswap nosplash —

Если не удается преобразовать существующую систему для загрузки по сети, то возможно имеет смысл использовать debootstrap для установки на NFS том.

Опция. Установка на NFS посредством debootstrap

Debootstrap — стандартный способ установки системы Debian Linux из запущенной системы Linux.

Опция. PXE загрузка с помощью GRUB 2

Pxelinux не единственный загрузчик, способный загружать систему по сети. GRUB 2 предлагает не менее интересную альтернативу.

Команда grub-mkimage создает загрузочный образ и этот образ может быть сконфигурирован для использования с PXE.

Чтобы образ был доступен для PXE загрузки, надо указать опции:

root@microserver# grub-mkimage —verbose —format=i386-pc-pxe —output=tftproot/grub.pxe —prefix='(pxe)/boot/grub’ pxe pxecmd

Здесь предполагается, что Grub 2 установлен обычным способом в системе. В Ubuntu это так.

Итак, непонятные опции, нам разъяснит руководство по Grub.
—format=i386-pc-pxe, специфический формат загрузчика, для поддержки pxe-загрузки
—output=tftproot/grub.pxe, выходной файл загрузчика, будет сразу расположен в корне TFTP-сервера.

—prefix='(pxe)/boot/grub’ pxe pxecmd, (pxe)- псевдоустройство, означающее корень TFTP-сервера. При использовании из конфигурационного файла, позволяет ссылаться на файлы TFTP-сервера.

Далее, надо создать в корне TFTP сервера, структуру папок для поддержки Grub 2. Можно просто скопировать файлы, а можно воспользоваться встроенной в пакет Grub 2 командой grub-mknetdir.
Что копировать?
1. Сам загрузчик grub.pxe, можно положить в корень TFTP сервера
2. Содержимое папки /boot/grub
3. Файл меню /boot/grub.cfg

Настройть dhcp-сервер (в нашем случае — dnsmasq) на выдачу вместо pxelinux.0 файла grub.pxe, в файле /etc/dnsmasq.conf
.
dhcp-boot=grub.pxe
.

Либо выполним команду grub-mknetdir на микросервере (можно и на клиенте):
root@microserver# grub-mknetdir —net-directory=tftproot
т.к. tftproot находится в домашней папке, поэтому полный путь не указывается, в иных конфигурациях, надо указать полный путь. В результате будет сформирован каталог с содержимым /boot/grub/i386-pc/. Не очень удачно, но можно перенести файлы в /boot/grub.

Надо вручную отредактировать файл tftproot/boot/grub.cfg, т.к. нет возможности создавать его автоматически.
В принципе, можно взять за основу, системный файл /boot/grub/grub.cfg и изменить часть файла, где находятся пункты меню.
Например, вот пункт меню, для загрузки live cd:

.
menuentry ‘Remote boot live CD’ —class ubuntu —class gnu-linux —class gnu —class os <
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
linux (pxe)/ubuntu/livecd/casper/vmlinuz root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd ro
initrd (pxe)/ubuntu/livecd/casper/initrd.lz
>

Опция. Расширение системного загрузчика на диске, для загрузки по сети

Можно добавить в обычный загрузчик GRUB, меню для сетевой загрузки. Это приятная особенность, чтобы не перезагружать компьютер, т.к. BIOS иногда достаточно долго отрабатывает.

Опция. Пакет syslinux
Последние версии пакета syslinux можно получить по адресу:
http://www.kernel.org/pub/linux/utils/boot/syslinux/

Опция. «Раскраска» меню PXE загрузчика
Берем кисть и .

Опция. Загрузка iso-образа посредством memdisk (диска в памяти)

Memdisk (входит в состав syslinux, копируем в /tftproot/).
Загрузочный образ копируется в память и загружается.

.
LABEL Test memdisk
KERNEL memdisk
APPEND initrd=ubuntu/current-ubuntu.iso
.

Опция. Загрузка iso-образа посредством Grub II. Loopback booting

Grub 2 умеет загружать iso-образы, находящиеся на любом разделе, с любой файловой системой (практически).

Чтобы освоить данную возможность, надо создать папку, например /opt/boot-images и поместить туда образы дисков.
Далее, в Grub 2 существует файл /etc/grub.d/40_custom, который позволяет добавлять пользовательские пункты меню.

Синтаксис несколько отличается от syslinux и предыдущего Grub I. Возможно использование русских букв, в меню.

menuentry «Локальный образ Ubuntu 12.10» <
iso_path=/opt/boot-images/ubuntu.iso
export iso_path
search —set —file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path quiet splash
initrd /casper/initrd.lz
>

menuentry «Локальный образ Ubuntu 12.10 консольный режим» <
iso_path=/opt/boot-images/ ubuntu.iso
export iso_path
search —set —file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path text
initrd /casper/initrd.lz
>

Для диагностики можно использовать консольный режим (опция text or textonly ) и режим отключения граф.загрузки (удалить опции quiet splash).

Потом даем команду:
root@mir#update-grub

Перезагружаемся и выбираем iso-образ в меню Grub II.

Также возможно сделать загрузку iso-образа при использовании PXE загрузчика Grub II.
Например, добавить пункт меню в файл tftproot/boot/grub/grub.cfg:

.
menuentry «Test network boot ISO live CD» —class ubuntu —class gnu-linux —class gnu —class os <
iso_path=/ubuntu/current-ubuntu.iso
export iso_path
search —set —file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path —
initrd /casper/initrd.lz
>

Для небольших образов, вполне работоспособное решение.

Опция. Утилита графической настройки Grub Customizer

Команды для установки:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Загрузка linux без initrd
  • Загрузка kali linux с флешки
  • Зависает linux mint намертво
  • Завести пользователя в linux
  • Завершить сеанс пользователя linux