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

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Состояние перевода: На этой странице представлен перевод статьи PXE. Дата последней синхронизации: 1 сентября 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ваш ноутбук поставляется без дисковода, и не позволяет загружаться с USB-накопителя? Не бойтесь, вы можете загрузиться с помощью PXE.

Из Википедии:Preboot Execution Environment:

PXE (англ.Preboot eXecution Environment произносится пикси) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы.

В этом руководстве 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 являются взаимоисключающими.

Смотрите также