NetInstall start: различия между версиями
Нет описания правки |
|||
(не показано 47 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{ | {{DISPLAYTITLE:Загрузка по PXE для начинающих}} | ||
{{Note|Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам. | {{Note|Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.<br>Официальная и более подробная документация [[NetInstall|'''здесь''']].}} | ||
=Установка по сети= | =Установка по сети= | ||
==Техническая часть== | ==Техническая часть== | ||
Строка 91: | Строка 90: | ||
Сохраняем и закрываем файл. | Сохраняем и закрываем файл. | ||
Укажите сетевой интерефейс, через который будет работать DHCP-сервер | |||
{{Note|Укажите в данном файле тот интерфейс, к которому будет подключен кабель соединяющий сервер (компьютер с PXE-сервером) и клиент}} | |||
# mcedit /etc/sysconfig/dhcpd | |||
<syntaxhighlight lang="ini"> | |||
DHCPDARGS=enps0 | |||
</syntaxhighlight> | |||
Запускаем DHCP-сервер: | Запускаем DHCP-сервер: | ||
<syntaxhighlight lang="bash"># systemctl enable --now dhcpd</syntaxhighlight> | <syntaxhighlight lang="bash"># systemctl enable --now dhcpd</syntaxhighlight> | ||
Мы настроили DHCP-сервер с определенным диапазоном (10.0.2.70-10.0.2.80) и определенной подсетью (10.0.2.0). | Мы настроили DHCP-сервер с определенным диапазоном (10.0.2.70-10.0.2.80) и определенной подсетью (10.0.2.0) на интерфейсе enps0. | ||
Любой компьютер с поддержкой PXE получит загрузчик указанный в настройках DHCP. Для UEFI это будет shimx64.efi, для BIOS — файл pxelinux.0. | Любой компьютер с поддержкой PXE получит загрузчик указанный в настройках DHCP. Для UEFI это будет shimx64.efi, для BIOS — файл pxelinux.0. | ||
Строка 124: | Строка 131: | ||
# systemctl restart xinetd | # systemctl restart xinetd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
====Публикация образа==== | ====Развертывание дистрибутива ALT==== | ||
=====Публикация образа===== | |||
Скачиваем любой дистрибутив ALT Linux, например, Starterkit XFCE - http://nightly.altlinux.org/p10/permalink/alt-p10-xfce-latest-x86_64.iso. | Скачиваем любой дистрибутив ALT Linux, например, Starterkit XFCE - http://nightly.altlinux.org/p10/permalink/alt-p10-xfce-latest-x86_64.iso. | ||
Строка 145: | Строка 155: | ||
<syntaxhighlight lang="bash"># umount /mnt/iso/</syntaxhighlight> | <syntaxhighlight lang="bash"># umount /mnt/iso/</syntaxhighlight> | ||
==== Настройка установки в Legacy ==== | ===== Настройка установки в Legacy ===== | ||
Создаем подкаталог для хранения файлов загрузочного образа в {{path|/var/lib/tftpboot}}: | Создаем подкаталог для хранения файлов загрузочного образа в {{path|/var/lib/tftpboot}}: | ||
{{Note|Да, это каталог с именем '''pxelinux.cfg'''}} | {{Note|Да, это каталог с именем '''pxelinux.cfg'''}} | ||
Строка 154: | Строка 164: | ||
Создаем файл конфигурации загрузчика по умолчанию {{path|/var/lib/tftpboot/pxelinux.cfg/default}} и файл {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}} | Создаем файл конфигурации загрузчика по умолчанию {{path|/var/lib/tftpboot/pxelinux.cfg/default}} и файл {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}} | ||
<!-- | |||
{{note|Можно скопировать файл конфигурации загрузчика {{path|/var/lib/tftpboot/pxelinux.cfg/default}} с диска: | {{note|Можно скопировать файл конфигурации загрузчика {{path|/var/lib/tftpboot/pxelinux.cfg/default}} с диска: | ||
<syntaxhighlight lang="bash"># cp /var/lib/tftpboot/images/ALT/syslinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default | <syntaxhighlight lang="bash"># cp /var/lib/tftpboot/images/ALT/syslinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default | ||
# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default | # chmod 644 /var/lib/tftpboot/pxelinux.cfg/default | ||
</syntaxhighlight>}} | </syntaxhighlight>}}--> | ||
Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default}}. | Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default}}. | ||
Строка 168: | Строка 178: | ||
timeout 120 | timeout 120 | ||
prompt 1 | prompt 1 | ||
default | default 1 | ||
display pxelinux.cfg/default.msg | display pxelinux.cfg/default.msg | ||
Строка 178: | Строка 188: | ||
{{Note|Тут нам нужно обратить внимание на следующие параметры: | {{Note|Тут нам нужно обратить внимание на следующие параметры: | ||
*в kernel указывается путь {{path|images/ALT/boot/vmlinuz}} | |||
*в initrd указывается путь {{path|images/ALT/boot/initrd.img}} | |||
*server - Адрес компьютера с PXE-сервером (см. таблицу в начале) | *server - Адрес компьютера с PXE-сервером (см. таблицу в начале) | ||
*directory - путь {{path|/ | *directory - путь {{path|<nowiki>directory:/ALT</nowiki>}} - потому что мы указываем путь относительно {{path|/var/lib/tftpboot/images}} | ||
*stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться}} | *stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться | ||
}} | |||
Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}}. | Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}}. | ||
Строка 192: | Строка 205: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Настройка установки в UEFI ==== | ===== Настройка установки в UEFI ===== | ||
Копируем файлы загрузчика shimx64.efi и grubx64.efi в каталог, указанный в конфигурации TFTP: | |||
<syntaxhighlight lang="bash"># cp /usr/lib64/efi/shimx64.efi /var/lib/tftpboot | <syntaxhighlight lang="bash"># cp /usr/lib64/efi/shimx64.efi /var/lib/tftpboot | ||
# cp /usr/lib64/efi/grubx64.efi /var/lib/tftpboot</syntaxhighlight> | # cp /usr/lib64/efi/grubx64.efi /var/lib/tftpboot</syntaxhighlight> | ||
Создаем файл конфигурации загрузчика по умолчанию grub.cfg в {{path|/var/lib/tftpboot}}. | |||
{{note|Можно взять файл с диска: | {{note|Можно взять файл с диска: | ||
Строка 218: | Строка 231: | ||
{{Note|Тут нам нужно обратить внимание на следующие параметры: | {{Note|Тут нам нужно обратить внимание на следующие параметры: | ||
*в linux указывается путь {{path|/images/ALT/boot/vmlinuz}} | |||
*server - Адрес компьютера с PXE-сервером (см. таблицу в начале) | *server - Адрес компьютера с PXE-сервером (см. таблицу в начале) | ||
*directory - путь {{path|/var/lib/tftpboot/images}} будет указан в настройках FTP-сервера позднее, а сейчас мы указываем каталог с ОС - {{path|/ALT}} - путь в который мы распаковали образ ALT Linux. | *directory - путь {{path|/var/lib/tftpboot/images}} будет указан в настройках FTP-сервера позднее, а сейчас мы указываем каталог с ОС - {{path|/ALT}} - путь в который мы распаковали образ ALT Linux. | ||
*stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться}} | *stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться | ||
*в initrd указывается путь {{path|/images/ALT/boot/initrd.img}} | |||
}} | |||
Где: | Где: | ||
Строка 227: | Строка 243: | ||
*''linux''— определяет файла ядра (путь до ядра ОС относительно пути, указанного в конфигурации TFTP) и параметры, которые должны быть добавлены при загрузке ядра, например расположение установочных пакетов и способы доступа к этим пакетам; | *''linux''— определяет файла ядра (путь до ядра ОС относительно пути, указанного в конфигурации TFTP) и параметры, которые должны быть добавлены при загрузке ядра, например расположение установочных пакетов и способы доступа к этим пакетам; | ||
*''initrd''— путь к корневой файловой системе для начальной загрузки (относительно пути, указанного в конфигурации TFTP). | *''initrd''— путь к корневой файловой системе для начальной загрузки (относительно пути, указанного в конфигурации TFTP). | ||
=====Ошибки===== | |||
======Not find server====== | |||
[[Файл:PXE_ALT_bug_2_1.png|PXE_ALT_bug_2_1.png]] | |||
[[Файл:PXE_ALT_bug_2_2.png|PXE_ALT_bug_2_2.png]] | |||
{{Note|Проверьте IP-адрес FTP-сервера в файле {{path|/var/lib/tftpboot/pxelinux.cfg/default}} или {{path|/var/lib/tftpboot/grub.cfg}}}} | |||
Проверьте в следующих строчках загрузчиков параметр {{path|server}}. Он должен соответствовать не адресу DHCP сервера, а адресу PXE-сервера. | |||
*GRUB: | |||
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT/ stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU | |||
*PXE Linux | |||
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU | |||
======File not found====== | |||
[[Файл:PXE_ALT_bug_1.png|PXE_ALT_bug_1.png]] | |||
Проверьте в файле {{path|/var/lib/tftpboot/pxelinux.cfg/default}} что в строке: | |||
<syntaxhighlight lang="bash"> | |||
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU | |||
</syntaxhighlight> | |||
'''v1 - Каталог с системой''' | |||
{{Note|Слеш перед указанной папкой обязателен}} | |||
Параметр: | |||
directory: | |||
Должен быть прописан как: | |||
directory:/ALT | |||
А не просто: | |||
directory:ALT | |||
В противном случае загрузчик не найдет каталог с системой. | |||
'''v2 - Файл образа''' | |||
{{Note|Указанный в stagename файл зависит от выбранного вами образа}} | |||
Параметр: | |||
stagename= | |||
В примере он прописан как: | |||
stagename=live | |||
Но, в разных дистрибутивах файл образа может иметь разные названия. Ориентируйтесь на файл с большим объемом в [[#Файловая_часть|файловой части]]. | |||
'''v3 - неверный путь stage''' | |||
[[Файл:PXE_ALT_bug_2.png|PXE_ALT_bug_2.png]] | |||
{{Note|В '''directory''' должна указываться папка относительно {{path|/var/lib/tftpboot/images}} }} | |||
Если у вас файлы образа лежат в {{path|/var/lib/tftpboot/images/ALT}}, то в параметре {{path|directory:}} вы должны указать: | |||
*не полный путь - {{path|/var/lib/tftpboot/images/ALT}} | |||
*не путь относительно {{path|tftpboot}} - {{path|/images/ALT}} | |||
А путь относительно {{path|images}} - {{path|/ALT}} | |||
====Развертывание LiveCD ReactOS==== | |||
Для дополнительной практики или может кому-то пригодится для дела, мы попробуем развернуть RAM-образ ReactOS. | |||
=====Публикация образа===== | |||
Скачиваем LiveCD образ - https://reactos.org/getbuilds/ | |||
Получаем файл вида {{path|reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z}} | |||
Например, образ скачан в {{path|~/Загрузки/reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z}}. | |||
Переходим в каталог и извлекаем | |||
<syntaxhighlight lang="bash"> | |||
$ cd ~/Загрузки/ | |||
$ 7z x reactos-livecd-*.7z | |||
</syntaxhighlight> | |||
Переименовываем | |||
<syntaxhighlight lang="bash"> | |||
$ mv reactos-livecd-*.iso reactos-livecd.iso | |||
</syntaxhighlight> | |||
Копируем образ в хранилище: | |||
<syntaxhighlight lang="bash"> | |||
# cp ~/Загрузки/reactos-livecd.iso /var/lib/tftpboot/ | |||
</syntaxhighlight> | |||
Разрешите всем на чтение (без этого у меня зависало на загрузке): | |||
<syntaxhighlight lang="bash"> | |||
# chmod 444 '/var/lib/tftpboot/reactos-livecd.iso' | |||
</syntaxhighlight> | |||
===== Настройка для загрузки в Legacy ===== | |||
Правим файл: | |||
<syntaxhighlight lang="bash"> | |||
# mcedit /var/lib/tftpboot/pxelinux.cfg/default | |||
</syntaxhighlight> | |||
Заменяем все на строки: | |||
<syntaxhighlight lang="cfg"> | |||
kernel chain.c32 | |||
append file=freeldr.sys seg=0x0F80 keeppxe | |||
</syntaxhighlight> | |||
Копируем файл загрузчика syslinux: | |||
<syntaxhighlight lang="bash"> | |||
# cp /usr/lib/syslinux/chain.c32 /var/lib/tftpboot/ | |||
</syntaxhighlight> | |||
Копируем файлы загрузчика freeldr: | |||
<syntaxhighlight lang="bash"> | |||
# mkdir -p /mnt/iso/ | |||
# mount -o loop '~/Загрузки/reactos-livecd.iso' /mnt/iso | |||
# cp '/mnt/iso/loader/setupldr.sys' /var/lib/tftpboot/freeldr.sys | |||
# cp '/mnt/iso/freeldr.ini' /var/lib/tftpboot/freeldr.ini | |||
# umount /mnt/iso | |||
</syntaxhighlight> | |||
Содержимое файла freeldr.ini по адресу {{path|/var/lib/tftpboot/freeldr.ini}} заменяем на следующее содерждимое: | |||
<syntaxhighlight lang="ini"> | |||
[FREELOADER] | |||
DefaultOS=LiveCD_Debug | |||
TimeOut=3 | |||
[Display] | |||
TitleText=ReactOS LiveCD | |||
MinimalUI=Yes | |||
[Operating Systems] | |||
LiveCD="LiveCD" | |||
LiveCD_Debug="LiveCD (Debug)" | |||
LiveCD_Screen="LiveCD (Screen)" | |||
[LiveCD] | |||
BootType=Windows2003 | |||
SystemPath=ramdisk(0)\reactos | |||
Options=/MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD | |||
[LiveCD_Debug] | |||
BootType=Windows2003 | |||
SystemPath=ramdisk(0)\reactos | |||
Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD | |||
[LiveCD_Screen] | |||
BootType=Windows2003 | |||
SystemPath=ramdisk(0)\reactos | |||
Options=/DEBUG /DEBUGPORT=SCREEN /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD | |||
</syntaxhighlight> | |||
Правим меню PXE: | |||
<syntaxhighlight lang="bash"> | |||
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="ini"> | |||
Type one of: | |||
2 - ReactOS | |||
</syntaxhighlight> | |||
Настраиваем загрузчик PXE: | |||
<syntaxhighlight lang="bash"> | |||
# mcedit /var/lib/tftpboot/pxelinux.cfg/default | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="cfg"> | |||
timeout 120 | |||
prompt 1 | |||
default 2 | |||
display pxelinux.cfg/default.msg | |||
label 2 | |||
kernel chain.c32 | |||
append file=freeldr.sys seg=0x0F80 keeppxe | |||
</syntaxhighlight> | |||
Перезапускаем xinetd: | |||
<syntaxhighlight lang="bash"> | |||
# systemctl restart xinetd | |||
</syntaxhighlight> | |||
=====Ошибки===== | |||
======Образ загружается очень медленно====== | |||
Честно, не знаю с чем это связано. Мне помог перезапуск служб. | |||
<syntaxhighlight lang="bash"> | |||
# systemctl restart xinetd tftp.socket vsftpd.socket | |||
</syntaxhighlight> | |||
==== Общие файлы ==== | |||
Файлы конфигурации, если вы хотите "все". | |||
<syntaxhighlight lang="bash"> | |||
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="ini"> | |||
Type one of: | |||
1 - ALT Linux | |||
2 - ReactOS | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
# mcedit /var/lib/tftpboot/pxelinux.cfg/default | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="cfg"> | |||
timeout 120 | |||
prompt 1 | |||
default 2 | |||
display pxelinux.cfg/default.msg | |||
label 1 | |||
kernel images/ALT/boot/vmlinuz | |||
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU | |||
label 2 | |||
kernel chain.c32 | |||
append file=freeldr.sys seg=0x0F80 keeppxe | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
# systemctl restart xinetd | |||
</syntaxhighlight> | |||
=== Настройка FTP === | === Настройка FTP === | ||
# | # Устанавливаем FTP-сервер: | ||
#: <syntaxhighlight lang="bash"># apt-get install vsftpd</syntaxhighlight> | #: <syntaxhighlight lang="bash"># apt-get install vsftpd</syntaxhighlight> | ||
# | # Редактируем файл {{path|/etc/xinetd.d/vsftpd}} и убеждаемся что FTP-сервер включен: | ||
#: <syntaxhighlight lang="ini">disable = no</syntaxhighlight> | #: <syntaxhighlight lang="ini">disable = no</syntaxhighlight> | ||
# | # Перезапускаем сервис xinetd: | ||
#: <syntaxhighlight lang="bash"># systemctl restart xinetd</syntaxhighlight> | #: <syntaxhighlight lang="bash"># systemctl restart xinetd</syntaxhighlight> | ||
# | # Создаем ссылку с {{path|/var/ftp}} на {{path|/var/lib/tftpboot/images}}: | ||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
# rm -f /var/ftp | # rm -f /var/ftp | ||
Строка 248: | Строка 484: | ||
<pre> | <pre> | ||
/var/lib/tftpboot | /var/lib/tftpboot | ||
├── grub.cfg | ├── chain.c32 <----- файл загрузчика syslinux, необходимый для загрузки RAM-образа ReactOS | ||
├── grubx64.efi | ├── freeldr.ini <----- файл загрузчика ReactOS | ||
├── freeldr.sys <----- файл загрузчика ReactOS | |||
├── grub.cfg <----- файл настройки GRUB | |||
├── grubx64.efi <----- UEFI-загрузчик GRUB | |||
├── images | ├── images | ||
│ └── ALT <- директория указываемая для загрузки при PXE в MBR или UEFI | │ └── ALT <----- директория указываемая для загрузки при PXE в MBR или UEFI | ||
│ ├── <...> - некоторые файлы опущены | │ ├── <...> - некоторые файлы опущены | ||
│ ├── ALTLinux | │ ├── ALTLinux | ||
Строка 269: | Строка 508: | ||
│ │ │ ├── unifont.pf2 | │ │ │ ├── unifont.pf2 | ||
│ │ │ └── x86_64-efi | │ │ │ └── x86_64-efi | ||
│ │ ├── initrd.img <- файл initrd для типа загрузки "Legacy", метки "label 1" параметра "append initrd" ИЛИ "initrd" в GRUB. | │ │ ├── initrd.img <----- файл initrd для типа загрузки "Legacy", метки "label 1" параметра "append initrd" ИЛИ "initrd" в GRUB для UEFI. | ||
│ │ ├── memtest.bin | │ │ ├── memtest.bin | ||
│ │ ├── memtest.efi | │ │ ├── memtest.efi | ||
│ │ ├── shell.efi | │ │ ├── shell.efi | ||
│ │ └── vmlinuz <- файл vmlinuz для типа загрузки "Legacy", метки "label 1" параметра "Kernel" ИЛИ "linux" в GRUB. | │ │ └── vmlinuz <----- файл vmlinuz для типа загрузки "Legacy", метки "label 1" параметра "Kernel" ИЛИ "linux" в GRUB. | ||
│ ├── EFI | │ ├── EFI | ||
│ │ ├── BOOT | │ │ ├── BOOT | ||
Строка 285: | Строка 524: | ||
│ │ └── enroll | │ │ └── enroll | ||
│ │ └── altlinux.cer | │ │ └── altlinux.cer | ||
│ ├── live <- загружаемый модуль с системой, параметр "stagename=" | │ ├── live <----- загружаемый модуль с системой, параметр "stagename=" | ||
│ └── syslinux | │ └── syslinux | ||
│ └── isolinux.cfg | │ └── isolinux.cfg | ||
├── pxelinux.0 | ├── pxelinux.0 <----- файл загрузчика PXE-Linux | ||
├── pxelinux.cfg | ├── pxelinux.cfg | ||
│ ├── default | │ ├── default <----- меню PXE-Linux | ||
│ └── default.msg | │ └── default.msg <----- отображаемое меню PXE-Linux с пунктами | ||
└── shimx64.efi | ├── reactos-livecd.iso <----- iso-образ LiveCD ReactOS | ||
└── shimx64.efi <----- файл загрузчика GRUB2 | |||
</pre> | </pre> | ||
==Сама загрузка== | |||
*Вы включаете компьютер (который подключен к той же сети что и PXE-сервер). | |||
*Выбираете загрузку по PXE | |||
*Компьютер получает с него адрес | |||
*Появляется меню загрузчика | |||
*Вы выбираете пункт и система загружается по сети как и с CD/DVD флешки | |||
*Вы работаете в LiveCD/устанавливливаете с установщика | |||
{{Category navigation|title=Начинающему системному администратору|category=Начинающему системному администратору|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Начинающему системному администратору|category=Начинающему системному администратору|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 14:01, 2 мая 2024
Официальная и более подробная документация здесь.
Установка по сети
Техническая часть
Многие компьютеры и серверы поддерживают установку системы не только с CD/DVD и флешек, но так же по сети.
Данный вариант загрузки обеспечивается с помощью технологии PXE - (Preboot eXecution Environment, произносится пикси) — среды для загрузки компьютера с помощью сетевой карты без использования локальных носителей данных (жёсткого диска, USB-накопителя и пр).
Для организации загрузки системы в PXE используются следующие протоколы:
- IP - сетевой протокол объединяющий сегменты сети в единую сеть, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов.
- UDP - сетевой протокол транспортного уровня, с ним компьютерные приложения могут посылать сообщения другим хостам по IP-сети без необходимости предварительного сообщения для установки специальных каналов передачи или путей данных.
- BOOTP - сетевой протокол прикладного уровня, используемый для автоматического получения клиентом IP-адреса. Это обычно происходит во время загрузки компьютера.
- TFTP - (Trivial File Transfer Protocol — простой протокол передачи файлов) - используется, в основном, для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.
PXE-код, обычно находящийся в ПЗУ сетевой карты, получает из сети по протоколу TFTP (получив адрес TFTP-сервера по BOOTP) исполняемый файл, после чего передаёт ему управление.
Практическая часть
Параметры нашей сети (для примера) | |
---|---|
Параметр | Значение |
Сеть | 10.0.2.0 |
Маска | 255.255.255.0 |
Шлюз | 10.0.2.1 |
Адрес компьютера с PXE-сервером | 10.0.2.5 |
Адрес с DHCP-сервером (в примере тот же компьютер) | 10.0.2.5 |
Настраиваем на компьютере/сервере статический адрес
См. Etcnet_start
Устанавливаем пакеты
# apt-get install dhcp-server tftp-server-xinetd syslinux
Настраиваем DHCP-сервер
DHCP-сервер для автоматической настройки сетевых интерфейсов в локальной сети, именно он присваивает каждому устройству в локальной сети IP-адреса (если настроена раздача таких адресов автоматически). Нам же нужно настроить этот сервер таким образом, чтобы компьютер при запуске загрузки по сети автоматически получил адрес TFTP-сервера и загрузил с него образ системы.
В качестве DHCP-сервера выбран dhcpd. Настраиваем его через файл - /etc/dhcp/dhcpd.conf.
# mcedit /etc/dhcp/dhcpd.conf
Скопируйте в файл следующие значения, обратив внимание на комментарии.
option arch code 93 = unsigned integer 16;
if option arch = 00:06 {
# EFI IA32 => Grub2
filename "shimx64.efi";
} else if option arch = 00:07 {
# EFI BC => Grub2
filename "shimx64.efi";
} else if option arch = 00:09 {
# EFI x86-64 => Grub2
filename "shimx64.efi";
} else {
# Intel x86PC (BIOS) => PXELinux
filename "pxelinux.0";
}
# Здесь ↓ указываем адрес и маску нашей сети
subnet 10.0.2.0 netmask 255.255.255.0 {
# Здесь ↓ указываем адрес компьютера, на котором будет располагаться TFTP-сервер. В нашем примере он там же, где DHCP-сервер
next-server 10.0.2.5;
# корневой каталог для образов
option root-path "/var/lib/tftpboot";
# адрес шлюза сети
option routers 10.0.2.1;
# адрес DNS-сервера сети или внешний адрес для обслуживания DNS-имен
option domain-name-servers 10.0.2.2;
# Срок аренды в секундах - стандартное и максимальное
default-lease-time 3600;
max-lease-time 3600;
# Область DHCP
range 10.0.2.70 10.0.2.80;
}
Сохраняем и закрываем файл.
Укажите сетевой интерефейс, через который будет работать DHCP-сервер
# mcedit /etc/sysconfig/dhcpd
DHCPDARGS=enps0
Запускаем DHCP-сервер:
# systemctl enable --now dhcpd
Мы настроили DHCP-сервер с определенным диапазоном (10.0.2.70-10.0.2.80) и определенной подсетью (10.0.2.0) на интерфейсе enps0.
Любой компьютер с поддержкой PXE получит загрузчик указанный в настройках DHCP. Для UEFI это будет shimx64.efi, для BIOS — файл pxelinux.0.
Настраиваем TFTP-сервер
TFTP-сервер - Trivial File Transfer Protocol - используется для загрузки загрузочного образа на клиентскую машину.
Правим файл /etc/xinetd.d/tftp:
# mcedit /etc/xinetd.d/tftp
Приводим строчку disable к следующему виду:
disable = no
Правим файл /etc/xinetd.conf:
# mcedit /etc/xinetd.conf
Приводим строчку only_from = 127.0.0.1 к следующему виду:
# only_from = 127.0.0.1
Перезапускаем службу xinetd:
# systemctl restart xinetd
Развертывание дистрибутива ALT
Публикация образа
Скачиваем любой дистрибутив ALT Linux, например, Starterkit XFCE - http://nightly.altlinux.org/p10/permalink/alt-p10-xfce-latest-x86_64.iso.
Например, образ скачан в /home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso.
Монтируем данный ISO-образ:
# mkdir -p /mnt/iso/
# mount -o loop '/home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso' /mnt/iso
Создаем каталог для ОС:
# mkdir -p /var/lib/tftpboot/images/ALT/
Копируем образ ОС выполнив команду
# cp -vR /mnt/iso/* /var/lib/tftpboot/images/ALT/
Отмонтируем образ:
# umount /mnt/iso/
Настройка установки в Legacy
Создаем подкаталог для хранения файлов загрузочного образа в /var/lib/tftpboot:
# mkdir -p /var/lib/tftpboot/pxelinux.cfg
Копируем файл загрузчика pxelinux в каталог, указанный в конфигурации TFTP:
# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/
Создаем файл конфигурации загрузчика по умолчанию /var/lib/tftpboot/pxelinux.cfg/default и файл /var/lib/tftpboot/pxelinux.cfg/default.msg
Содержимое файла /var/lib/tftpboot/pxelinux.cfg/default.
Правим следующей командой:
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
timeout 120
prompt 1
default 1
display pxelinux.cfg/default.msg
label 1
kernel images/ALT/boot/vmlinuz
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU
Где:
- в kernel указывается путь images/ALT/boot/vmlinuz
- в initrd указывается путь images/ALT/boot/initrd.img
- server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
- directory - путь directory:/ALT - потому что мы указываем путь относительно /var/lib/tftpboot/images
- stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться
Содержимое файла /var/lib/tftpboot/pxelinux.cfg/default.msg.
Правим следующей командой:
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
Type one of:
1 - install ALT
Настройка установки в UEFI
Копируем файлы загрузчика shimx64.efi и grubx64.efi в каталог, указанный в конфигурации TFTP:
# cp /usr/lib64/efi/shimx64.efi /var/lib/tftpboot
# cp /usr/lib64/efi/grubx64.efi /var/lib/tftpboot
Создаем файл конфигурации загрузчика по умолчанию grub.cfg в /var/lib/tftpboot.
# cp /var/lib/tftpboot/images/ALT/boot/grub/grub.cfg /var/lib/tftpboot/
# chmod 644 /var/lib/tftpboot/grub.cfg
Пример файла /var/lib/tftpboot/grub.cfg:
set timeout=120
set default=ftp
menuentry $"ALT " {
echo $"Loading Linux vmlinuz ..."
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT/ stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU
echo $"Loading initial ramdisk ..."
initrd /images/ALT/boot/initrd.img
}
}
- в linux указывается путь /images/ALT/boot/vmlinuz
- server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
- directory - путь /var/lib/tftpboot/images будет указан в настройках FTP-сервера позднее, а сейчас мы указываем каталог с ОС - /ALT - путь в который мы распаковали образ ALT Linux.
- stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться
- в initrd указывается путь /images/ALT/boot/initrd.img
Где:
- default— загрузочная запись по умолчанию указывает на метку ftp;
- timeout— загружает клиент, используя загрузочную запись по умолчанию, после таймаута в 120 секунд;
- linux— определяет файла ядра (путь до ядра ОС относительно пути, указанного в конфигурации TFTP) и параметры, которые должны быть добавлены при загрузке ядра, например расположение установочных пакетов и способы доступа к этим пакетам;
- initrd— путь к корневой файловой системе для начальной загрузки (относительно пути, указанного в конфигурации TFTP).
Ошибки
Not find server
Проверьте в следующих строчках загрузчиков параметр server. Он должен соответствовать не адресу DHCP сервера, а адресу PXE-сервера.
- GRUB:
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT/ stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU
- PXE Linux
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU
File not found
Проверьте в файле /var/lib/tftpboot/pxelinux.cfg/default что в строке:
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU
v1 - Каталог с системой
Параметр:
directory:
Должен быть прописан как:
directory:/ALT
А не просто:
directory:ALT
В противном случае загрузчик не найдет каталог с системой.
v2 - Файл образа
Параметр:
stagename=
В примере он прописан как:
stagename=live
Но, в разных дистрибутивах файл образа может иметь разные названия. Ориентируйтесь на файл с большим объемом в файловой части.
v3 - неверный путь stage
Если у вас файлы образа лежат в /var/lib/tftpboot/images/ALT, то в параметре directory: вы должны указать:
- не полный путь - /var/lib/tftpboot/images/ALT
- не путь относительно tftpboot - /images/ALT
А путь относительно images - /ALT
Развертывание LiveCD ReactOS
Для дополнительной практики или может кому-то пригодится для дела, мы попробуем развернуть RAM-образ ReactOS.
Публикация образа
Скачиваем LiveCD образ - https://reactos.org/getbuilds/
Получаем файл вида reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z
Например, образ скачан в ~/Загрузки/reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z.
Переходим в каталог и извлекаем
$ cd ~/Загрузки/
$ 7z x reactos-livecd-*.7z
Переименовываем
$ mv reactos-livecd-*.iso reactos-livecd.iso
Копируем образ в хранилище:
# cp ~/Загрузки/reactos-livecd.iso /var/lib/tftpboot/
Разрешите всем на чтение (без этого у меня зависало на загрузке):
# chmod 444 '/var/lib/tftpboot/reactos-livecd.iso'
Настройка для загрузки в Legacy
Правим файл:
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
Заменяем все на строки:
kernel chain.c32
append file=freeldr.sys seg=0x0F80 keeppxe
Копируем файл загрузчика syslinux:
# cp /usr/lib/syslinux/chain.c32 /var/lib/tftpboot/
Копируем файлы загрузчика freeldr:
# mkdir -p /mnt/iso/
# mount -o loop '~/Загрузки/reactos-livecd.iso' /mnt/iso
# cp '/mnt/iso/loader/setupldr.sys' /var/lib/tftpboot/freeldr.sys
# cp '/mnt/iso/freeldr.ini' /var/lib/tftpboot/freeldr.ini
# umount /mnt/iso
Содержимое файла freeldr.ini по адресу /var/lib/tftpboot/freeldr.ini заменяем на следующее содерждимое:
[FREELOADER]
DefaultOS=LiveCD_Debug
TimeOut=3
[Display]
TitleText=ReactOS LiveCD
MinimalUI=Yes
[Operating Systems]
LiveCD="LiveCD"
LiveCD_Debug="LiveCD (Debug)"
LiveCD_Screen="LiveCD (Screen)"
[LiveCD]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD
[LiveCD_Debug]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD
[LiveCD_Screen]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=SCREEN /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD
Правим меню PXE:
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
Type one of:
2 - ReactOS
Настраиваем загрузчик PXE:
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
timeout 120
prompt 1
default 2
display pxelinux.cfg/default.msg
label 2
kernel chain.c32
append file=freeldr.sys seg=0x0F80 keeppxe
Перезапускаем xinetd:
# systemctl restart xinetd
Ошибки
Образ загружается очень медленно
Честно, не знаю с чем это связано. Мне помог перезапуск служб.
# systemctl restart xinetd tftp.socket vsftpd.socket
Общие файлы
Файлы конфигурации, если вы хотите "все".
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
Type one of:
1 - ALT Linux
2 - ReactOS
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
timeout 120
prompt 1
default 2
display pxelinux.cfg/default.msg
label 1
kernel images/ALT/boot/vmlinuz
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU
label 2
kernel chain.c32
append file=freeldr.sys seg=0x0F80 keeppxe
# systemctl restart xinetd
Настройка FTP
- Устанавливаем FTP-сервер:
# apt-get install vsftpd
- Редактируем файл /etc/xinetd.d/vsftpd и убеждаемся что FTP-сервер включен:
disable = no
- Перезапускаем сервис xinetd:
# systemctl restart xinetd
- Создаем ссылку с /var/ftp на /var/lib/tftpboot/images:
# rm -f /var/ftp # ln -s /var/lib/tftpboot/images /var/ftp
Файловая часть
Чтобы понять, что где лежит, опишу структуру каталогов:
/var/lib/tftpboot ├── chain.c32 <----- файл загрузчика syslinux, необходимый для загрузки RAM-образа ReactOS ├── freeldr.ini <----- файл загрузчика ReactOS ├── freeldr.sys <----- файл загрузчика ReactOS ├── grub.cfg <----- файл настройки GRUB ├── grubx64.efi <----- UEFI-загрузчик GRUB ├── images │ └── ALT <----- директория указываемая для загрузки при PXE в MBR или UEFI │ ├── <...> - некоторые файлы опущены │ ├── ALTLinux │ ├── boot │ │ ├── grub │ │ │ ├── bios.img │ │ │ ├── boot.cat │ │ │ ├── fonts │ │ │ │ └── unicode.pf2 │ │ │ ├── grub.cfg │ │ │ ├── i386-efi │ │ │ ├── i386-pc │ │ │ ├── locale │ │ │ │ └── ru.mo │ │ │ ├── themes │ │ │ │ └── starterkit │ │ │ ├── unifont.pf2 │ │ │ └── x86_64-efi │ │ ├── initrd.img <----- файл initrd для типа загрузки "Legacy", метки "label 1" параметра "append initrd" ИЛИ "initrd" в GRUB для UEFI. │ │ ├── memtest.bin │ │ ├── memtest.efi │ │ ├── shell.efi │ │ └── vmlinuz <----- файл vmlinuz для типа загрузки "Legacy", метки "label 1" параметра "Kernel" ИЛИ "linux" в GRUB. │ ├── EFI │ │ ├── BOOT │ │ │ ├── bootia32.efi │ │ │ ├── bootx64.efi │ │ │ ├── grub.cfg │ │ │ ├── grubia32.efi │ │ │ ├── grubx64.efi │ │ │ ├── mmia32.efi │ │ │ └── mmx64.efi │ │ └── enroll │ │ └── altlinux.cer │ ├── live <----- загружаемый модуль с системой, параметр "stagename=" │ └── syslinux │ └── isolinux.cfg ├── pxelinux.0 <----- файл загрузчика PXE-Linux ├── pxelinux.cfg │ ├── default <----- меню PXE-Linux │ └── default.msg <----- отображаемое меню PXE-Linux с пунктами ├── reactos-livecd.iso <----- iso-образ LiveCD ReactOS └── shimx64.efi <----- файл загрузчика GRUB2
Сама загрузка
- Вы включаете компьютер (который подключен к той же сети что и PXE-сервер).
- Выбираете загрузку по PXE
- Компьютер получает с него адрес
- Появляется меню загрузчика
- Вы выбираете пункт и система загружается по сети как и с CD/DVD флешки
- Вы работаете в LiveCD/устанавливливаете с установщика