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

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

From ArchWiki
Jump to navigation Jump to search
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` являются взаимоисключающими.

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

- PXE

Categories:

- Installation process (Русский)
- Networking (Русский)
- Boot process (Русский)