Preboot Execution Environment (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
PXE
. Дата последней синхронизации: 1 сентября 2018. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Бездисковая система
Ваш ноутбук поставляется без дисковода, и не позволяет загружаться с USB-накопителя? Не бойтесь, вы можете загрузиться с помощью PXE.
Из
Википедии:Preboot Execution Environment
:
PXE
(англ.
P
reboot e
X
ecution
E
nvironment произносится
пикси
) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы.
В этом руководстве PXE используется для загрузки установочного носителя с соответствующей опцией-rom, которая поддерживает PXE в целевом объекте. Это хорошо работает, когда у вас уже установлен сервер.
Как это работает
Грубое описание процесса загрузки с помощью PXE:
клиент (тот компьютер на который вы хотите установить) подключается к сети и опрашивает DHCP-сервера для аренды IP.
DHCP-сервер передает клиенту IP и другую, необходимую для сетевой загрузки, информацию.
затем клиент, на основе полученной информации, подключается к TFTP-серверу по протоколу TFTP (который очень похож на обычный FTP) и загружает файлы.
после этого клиент загружает систему со скаченных файлов. После загрузки системы можно отключить сетевое соединение (образ полностью загружается в память).
Подготовка
Загрузите последний официальный установочный образ со
страницы загрузки
.
Затем смонтируйте образ:
# mkdir -p /mnt/archiso
# mount -o loop,ro archlinux-2017.12.01-x86_64.iso /mnt/archiso
Настройка сервера
Вам необходимо установить DHCP,
TFTP
и
HTTP-сервер
для настройки сети, загрузки pxelinux/kernel/initramfs, и, наконец, загрузки корневой файловой системы (соответственно).
На данный момент Arch поддерживает загрузку PXE только в стиле BIOS. Для получения дополнительной информации смотрите
FS#50188
.
Сеть
Подключите проводную сетевую карту и назначьте ее соответствующим образом.
# ip link set eth0 up
# ip addr add 192.168.0.1/24 dev eth0
DHCP + TFTP
Для настройки сети на устройстве вам потребуется как DHCP, так и TFTP-сервер, чтобы облегчить передачу файлов между сервером PXE и клиентом;
dnsmasq
делает и то, и другое, и очень прост в настройке.
Установите
пакет
dnsmasq
.
Настройте
dnsmasq
:
# /etc/dnsmasq.conf
port=0
interface=eth0
bind-interfaces
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=/arch/boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=66,192.168.0.1
enable-tftp
tftp-root=/mnt/archiso
Запустите
dnsmasq.service
.
HTTP
Благодаря недавним изменениям в
archiso
, теперь можно загрузиться с  HTTP (
archiso_pxe_http
initcpio hook) или NFS (
archiso_pxe_nfs
initcpio hook); среди всех альтернатив, darkhttpd на сегодняшний день является самым тривиальным (и самым легким) для настройки.
Сначала,
установите
пакет
darkhttpd
.
Затем запустите
darkhttpd
, используя наш
/mnt/archiso
в качестве корневого документа:
# darkhttpd /mnt/archiso
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:80/
Обратите внимание, что важно, чтобы сервер работал на
80
порту. Если вы запустите
darkhttpd
без доступа суперпользователя, по умолчанию он будет
8080
. Клиент попытается получить доступ к 80 порту, и загрузка завершится неудачно.
Установка
Для этой части вам нужно выяснить, как сообщить клиенту выбрать загрузку PXE; в углу экрана вместе с обычными сообщениями обычно появляется подсказка о том, какую клавишу нажать, чтобы сначала запустить загрузку PXE. На IBM x3650 при нажатии
F12
появляется меню загрузки, первым вариантом которого является
Network
; на Dell PE 1950/2950 нажатие
F12
инициирует загрузку PXE напрямую.
Загрузка
Просмотр
journald
на сервере PXE даст дополнительную информацию о том, что именно происходит на ранних этапах процесса загрузки PXE:
# journalctl -u dnsmasq.service -f
dnsmasq-dhcp[2544]: DHCPDISCOVER(eth1) 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPOFFER(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPREQUEST(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPACK(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/pxelinux.0 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/whichsys.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_choose.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/ifcpu64.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_both_inc.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_head.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe32.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe64.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_tail.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/vesamenu.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110
После загрузки
pxelinux.0
и
archiso.cfg
через TFTP вам (надеюсь) будет представлено меню загрузки
syslinux
с несколькими параметрами, в которых вы можете выбрать
Boot Arch Linux (x86_64) (HTTP)
.
Затем ядро и initramfs (подходящие для выбранной вами архитектуры) будут переданы снова через TFTP:
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/vmlinuz to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/archiso.img to 192.168.0.110
Если все пойдет хорошо, вы должны увидеть активность на darkhttpd исходящую от PXE-target; на этом этапе ядро будет загружено на PXE-target и инициализировано:
1348347586 192.168.0.110 "GET /arch/aitab" 200 678 "" "curl/7.27.0"
1348347587 192.168.0.110 "GET /arch/x86_64/root-image.fs.sfs" 200 107860206 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/x86_64/usr-lib-modules.fs.sfs" 200 36819181 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"
После того, как корневая файловая система загружается через HTTP, вы в конечном итоге окажетесь в обычном запросе суперпользователя
zsh
.
После загрузки
Если вы не хотите, чтобы весь трафик маршрутизировался через ваш PXE-сервер (который не будет работать в любом случае, если вы
не настроите его правильно
), вы захотите
остановить
dnsmasq.service
и получить новую аренду на цели установки, в зависимости от вашего сетевого расположения.
Вы также можете убить
darkhttpd
; объект уже загрузил корневую файловую систему, поэтому он больше не нужен. Пока он активен, вы также можете размонтировать установочный образ:
# umount /mnt/archiso
На этом этапе вы можете следовать
Руководство по установке
.
Альтернативные способы
Как видно из меню syslinux, существует несколько других альтернатив:
NFS
Вам нужно будет настроить
сервер NFS
с экспортом в корне вашего смонтированного установочного носителя, который будет
/mnt/archiso
, если вы следовали за разделом
#Подготовка
. После настройки сервера добавьте следующую строку в файл
/etc/exports
:
/etc/exports
mnt/archiso 192.168.0.0/24(ro,no_subtree_check)
Если сервер уже запущен, повторно экспортируйте файловые системы с помощью
exportfs -r -a -v
.
Настройки по умолчанию в установщике ожидают найти NFS в
/run/archiso/bootmnt
, поэтому вам нужно будет отредактировать параметры загрузки. Для этого нажмите вкладку в соответствующем выборе меню загрузки и отредактируйте параметр
archiso_nfs_srv
соответственно:
archiso_nfs_srv=${pxeserver}:/mnt/archiso
Кроме того, вы можете использовать
/run/archiso/bootmnt
для всего процесса.
После загрузки образа ядра начальной загрузки Arch скопирует корневую файловую систему через NFS на загрузочный хост. Это может занять некоторое время. Как только это завершится, у вас появится работающая система.
NBD
Установите
пакет
nbd
и настройте его:
/etc/nbd-server/config
[generic]
[archiso]
    readonly = true
    exportname = /srv/archlinux-2017.12.01-x86_64.iso
Запустите
nbd.service
.
Существующий сервер PXE
Если у вас есть PXE-сервер с настроенной системой
PXELINUX
(например, комбинация DHCP и
TFTP
), вы можете добавить в файл
pxelinux.cfg
следующие пункты меню, чтобы загрузить Arch предпочтительным для вас способом:
LABEL 2
        MENU LABEL Arch Linux x86_64
        LINUX
/путь/до/распакованного/Arch/ISO
/arch/boot/x86_64/vmlinuz
        INITRD
/путь/до/распакованного/Arch/ISO
/arch/boot/intel_ucode.img,
/путь/до/распакованного/Arch/ISO
/arch/boot/amd_ucode.img,
/путь/до/распакованного/Arch/ISO
/arch/boot/x86_64/archiso.img
        APPEND archisobasedir=arch archiso_http_srv=
http://httpserver/путь/до/распакованного/Arch/ISO
/ ip=::
        SYSAPPEND 2
        TEXT HELP
        Arch Linux 2018.09.01 x86_64
        ENDTEXT
Вы можете заменить
archiso_http_srv
на
archiso_nfs_srv
для NFS или
archiso_nbd_srv
для NBD. Добавление инструкции
ip=
необходимо, чтобы дать указание ядру вызвать сетевой интерфейс, прежде чем попытаться смонтировать установочный носитель по сети. Смотрите
README.bootparams
, чтобы узнать доступные параметры загрузки.
Ошибка переименования интерфейса DHCP
FS#36749
вызывает
предсказуемое переименование сетевого интерфейса
по умолчанию, а затем отказ клиента dhcp из-за него. Обходным путем является добавление параметра загрузки ядра
net.ifnames=0
, чтобы отключить предсказуемые имена интерфейсов.
Системы с небольшим объемом памяти
Опция
copytoram
initramfs
может использоваться для контроля того, должна ли корневая файловая система полностью копироваться в оперативную память в полном объеме в начале загрузки.
Настоятельно рекомендуется оставить этот параметр в покое, и его следует отключать только в случае необходимости (системы с физической памятью размером менее 256 МБ). Если вы хотите это сделать, добавьте
copytoram=n
в строку ядра.
Примечание
Поскольку для этого требуются loop-mounting squashfs из смонтированной удаленной файловой системе,
copytoram=n
и
archiso_pxe_http
являются взаимоисключающими.
Смотрите также
PXE