Preboot Execution Environment (Русский)
Ваш ноутбук поставляется без дисковода, и не позволяет загружаться с 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
в строку ядра.
copytoram=n
и archiso_pxe_http
являются взаимоисключающими.