Перевел: Graf
Дата перевода: октябрь 2023 г.
Оригинал: http://slackware.osuosl.org/slackware-15.0/usb-and-pxe-installers/README_PXE.TXT
PXE: Установка Slackware по сети |
---|
Когда придет время для установки Slackware на ваш компьютер, вы обнаружите ограниченное число вариантов расположения установочных пакетов Slackware. Либо это (не) официальный Slackware CDROM или DVD, либо уже существующий раздел жесткого диска с предварительно скопированными на него пакетами перед началом процедуры установки, либо это пакеты скачанные с сетевого сервера ( при помощи NFS, HTTP или FTP-протокола).
Количество доступных опций для загрузки Slackware инсталлятора точно так же ограничено: либо вы загрузите компьютер с первого загрузочного CD диска из множества Slackware CD, либо с DVD, либо с использованием USB накопителя. Есть даже LOADLIN, DOS на основе Linux загрузчика, но давайте не будем касаться прошлого, тем более с Slackware 12,0 отказались от загрузочной дискеты в целом.
Но что делать, если у вашего компьютера нет CD-ROM привода и он не загружаться с USB накопителя? Многие известные на рынке бренды ПК (например, ультра-портативные ноутбуки), которые не в состоянии установить Slackware традиционным способом. Тем не менее,эти машины обычно оснащены сетевыми устройствами, такими как Bluetooth, беспроводными и проводными сетевыми картами. Как решить эту дилемму? Купить внешний CD привод?
Есть другой способ загрузки компьютера, который поддерживает установщик Slackware. То есть «сетевая загрузка». Сетевая загрузка, или PXE загрузка, должна поддерживаться вашей сетевой картой и BIOS. Кроме того, вместо установки пакетов из Slackware CD или DVD, вам понадобится сетевой сервер, который сможет указать вашему компьютеру как получить эти пакеты из сети.
В этом README, я покажу вам, как выполнить установку, которая использует сеть в качестве носителя, с сервера в локальной сети, который содержит ядро и корневую файловую систему (которая содержит настройки программы), а также все пакеты Slackware. Это означает, что нет необходимости для дискет или компакт-дисков.
Будьте осторожны: установка всего этого не тривиальна, и вам необходимо знаний Linux большее, чем на уровне начинающего, но этот текст и сопровождающие сценарии, например, в последнем разделе должны помочь вам и будут работать, даже если вы не вполне понимаете, что происходит
Обычно, метод загрузки компьютера по сети называется PXE или «Preboot Execution Environment». Если вы хотите, чтобы ваш компьютер загружался с PXE, он должен иметь сетевую карту с PXE-совместимой прошивкой, и BIOS, который поддерживает сетевую загрузку. Большинство современных сетевых карт (и компьютеров) продаются на рынке уже с такой поддержкой. При загрузке компьютера по сети, сетевая карта загружает загрузчик, ядро и файловую систему при этом, любая операционная система, которая была установлена на компьютере до этого, останется нетронутой. Вы можете, так же хорошо, загрузиться в бездисковых компьютерах с помощью PXE - на самом деле это работает как тонкие клиенты и Linux Terminal Server Project.
Конечно же, другой конец сети тоже требует нашего внимания. PXE сервер должен быть доступен по локальной сети. Прошивка (микропрограмма) PXE в вашей сетевой карте компьютера, будет запрашивать у этого сервера какой-нибудь загрузочный программный код для последующей его загрузки. Что происходит после загрузки компьютера не имеет более ничего общего с этапом загрузки PXE, а вот процесс начальной загрузки нас интересует больше всего. Требования для такого сервера, мы рассмотрим в одном из следующих параграфах.
Процесс инсталляции Slackware по сети выглядит примерно так:
Как было сказано до этого, требования для компьютера на который вы хотите установить Slackware, следующие:
Больше никаких требований не нужно для инсталляции из сети, кроме тех которые уже отвечают возможности инсталлировать и запускать Slackware.
Это интересная часть (поскольку по моему мнению многие люди считают это черной магией). PXE сервер на самом деле смесь нескольких компонентов. Нам необходимо:
Мы рассмотрим, как настроить DHCP, TFTP и NFS службы на Slackware компьютере так, чтобы они работали вместе в качестве сервера PXE. В качестве упражнения для пользователя, остается узнать, как настроить Apache (HTTP) или ProFTPD (FTP) в случае установки через HTTP или FTP. В более поздних примерах, я буду считать, что следующая ссылка является действительной для вашего HTTP/FTP сервера:
http://192.168.0.1/mirror/slackware/slackware-13.37 ftp://192.168.0.1/pub/mirror/slackware/slackware-13.37
Сервер будет запускать все необходимые службы, то есть будет выступать в качестве DNS, DHCP, TFTP и NFS (или HTTP/FTP/Samba) сервера в локальной сети. Если вы решили отделить DHCP и TFTP службы на два разных сервера (не имеет значения, где NFS/HTTP/FTP/Samba сервер работает), я включил информацию о том, что вы должны знать в следующий раздел, посвященный DHCP.
Для простоты обучения, я сделаю несколько предположений. Эти предположения нашли свое отражение в IP-адресах и диапазонах адресов, которые я использую в моих примерах, в именах каталогов, компьютеров и сетевых доменов. Это означает, что если вы используете примеры, приведенные в этой статье, вы должны убедиться, что замените все вхождения этих особенностей на значения, которые относятся к вашей сети.
Скорее всего у вас уже есть DHCP сервер запущенный в сети. Вы можете попробовать изменить его конфигурацию таким образом, что он будет выполнять то что мы хотим или, если это невозможно (например, потому что DHCP сервер запущен на DSL/Cable маршрутизаторе) вы можете остановить (запретить) его и настроить Slackware DHCP сервер для вашей сети с более расширенной функциональностью.
Slackware включает пакет сервера ISC DHCP (dhcpd). Два примера конфигурационных файлов /etc/dhcpd.conf для этого DHCP сервера включены в последний раздел статьи.
Если вы не хотите утруждаться сложными конфигурациями и хотите быстрого решения, которое просто будет работать в вашей сети, используйте первый пример файла /etc/dhcpd.conf также как и стартовый скрипт /etc/rc.d/rc.dhcpd и вы можете поднять и запустить сервер за минуты. Это не требует редактирования файлов, примеры работают прямо из коробки.
Если вы знаете что вы делаете и понимаете (более или менее) как работает DHCP сервер, вы можете взглянуть на второй, более сложный, /etc/dhcpd.conf пример, который имеет больше свойств и предлагает управление над компьютерами, которым позволено выполнять сетевую загрузку.
Остальная часть этой статьи посвящена настройке со сложной конфигурацией DHCP.
По умолчанию, нам не следует позволять сетевую загрузку в нашей сети (это безопасный курс - представьте компьютер который выполняет непреднамеренную загрузку с сети и вдруг обнаруживает себя с запущенным инсталлятором Slackware!). В файл конфигурации /etc/dhcpd.conf мы добавим секцию «group» в которой сможем добавить те компьютеры, которым позволительно загружаться с сети; типичный оператор host для компьютера выглядит так:
host t43 { hardware ethernet 00;12:34:56:78:9a; fixed-address 192.168.0.3; }
Ничего показательного; компьютер определяется по аппаратному адресу (Mac-адрес) сетевой карты и мы позволяем DHCP серверу всегда назначать один и тот же IP-адрес. Все параметры конкретной загрузки содержатся в блоке «group» и выглядят так:
group { allow bootp; next-server 192.168.0.1; use-host-decl-names on; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/slackware-13.37/pxelinux.0"; } host ABC { ... } host XYZ { ... } }
Это позволяет серверу DHCP обнаружить клиентов со сетевой загрузкой, которые используют PXE и обслужить их, PXElinux загрузчик мы делаем доступными в «/slackware-13.37/pxelinux.0». Что делает этот загрузчик, будет объяснено ниже по статье.
Параметр next-server содержит IP-адрес TFTP сервера. Это, часто, идентично IP-адресу DHCP сервера, но если у вас есть TFTP сервер который работает на другом IP-адресе, отличным от DHCP сервера (т.е. работают на различных серверах), то вместо этого вы можете добавить удаленный IP-адрес, подобный этому (предположим что TFTP сервер работает на адресе 192.168.0.254):
next-server 192.168.0.254;
Если вы используете версию программы «ISC» dhcpd > = 3.0.3, то добавление строки «next-server <ipaddress>;» является обязательным. Для старых релизов это требуется, только тогда, когда TFTP и DHCP серверы на самом деле имеют различные адреса.
Если вы не укажите адрес «next-server», то поле данных «siaddr» возвращается клиенту установленным на ноль, где потом оно, по умолчанию, будет с таким же IP-адресом, как и у DHCP сервера (который, очень часто, может быть и IP-адресом TFTP сервера). Клиент PXE использует 'siaddr' поле, чтобы определить IP-адрес сервера TFTP, таким образом PXE загрузка остановится в точке поиска сервера TFTP.
Если вы уже используете «dnsmasq» как ваш DNS/DHCP сервер, тогда вышеуказанные инструкции для ISC DHCP сервера не применимы к вашей установке. Вместо этого, вы должны настроить dnsmasq со следующими эквивалентными параметрами:
dnsmasq --dhcp-boot=/slackware-13.37/pxelinux.0,"192.168.0.1",192.168.0.1
или добавить строку в /etc/dnsmasq.conf:
dhcp-boot=/slackware-13.37/pxelinux.0,"192.168.0.1",192.168.0.1
IP-адрес «192.168.0.1» встречается дважды; они всегда должны быть идентичными, и должны быть адресом сервера TFTP.
Сервис tftpd управляется inetd. Разрешите строку tftpd в /etc/inetd.conf удалением символа комментария в начале строки:
tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -v -s /tftpboot -r blksize
и перезагрузите inetd:
# /etc/rc.d/rc.inetd restart
Нам нужно создать каталог /tftpboot где будут содержаться файлы начальной загрузки, которые tftpd будет обслуживать:
# mkdir /tftboot
Этот будет корневым безопасным каталогом (параметр -s /tftpboot в /etc/inetd.conf). Сервис tftpd теперь настроен и работает. Нам просто нужно заполнить этот корневой католог, но я оставлю это для другого параграфа.
В качестве альтернативы in.tftpd, вы можете использовать встроенный TFTP сервер Dnsmasq. Если вы уже используете Dnsmasq в качестве сервера DHCP, это имело бы смысл. Добавить два следующие параметры командной строки для Dnsmasq :
--enable-tftp --tftp-root=/tftpboot
или добавьте две следующие строчки в /etc/dnsmasq.conf :
enable-tftp tftp-root=/tftpboot
Вам нужно экспортировать каталог, где вы храните ваши локальные копии пакетов Slackware, например, добавив следующее в /etc/exports:
/mirror/slackware 192.168.0.0/24(ro,sync,insecure,all_squash,subtree_check)
Если ваши пакеты Slackware находятся где-то ниже /mirror/Slackware (как в нашем примере), то вышеуказанные строки делают это дерево каталогов доступным (для чтения) NFS клиентам в локальной сети определенным в диапазоне 192.168.0.0/24. Если вы добавили эту строку в файл /etc/exports, то вам необходимо перезапустить сервер NFS:
# /etc/rc.d/rc.nfsd restart
Для простоты:
Оставшаяся часть этой главы является списком шагов, необходимых, для того, чтобы это просто работало, не имея опыта работы с NFS и не имея такого работающего сервера на данный момент (помните, что любые пути/IP-адреса, используемые здесь и относящиеся к нашей сети, используемой в качестве примера - нужно откорректировать по мере необходимости):
/mirror/slackware 192.168.0.0/24(ro,sync,insecure,all_squash)
# chmod +x /etc/rc.d/rc.nfsd
# /etc/rc.d/rc.nfsd start
В предыдущем пункте описано в общих терминах, как настроить службу TFTP, но он не рассказывает вам, как заполнить структуру каталога TFTP. Сетевые клиенты, которые загружают файлы с сервера TFTP будут получать файлы, которые есть в этой структуре каталогов.
PXELinux похож на isolinux, который является загрузчиком используемым для загрузочного Slackware CDROM №1. На самом деле обе программы написаны одним и тем же автором и доступны из пакета syslinux.
Как видно из раздела о DHCP, сервер DHCP был настроен так, что предлагал любому заинтересованному клиенту PXE (т.е. компьютеру с сетевой картой) файл «/slackware-13.37/pxelinux.0» - этот файл содержит загрузочный код, который скачавается первым и запускает ядро Linux, а затем загружает и извлекает корневую файловую систему, содержащую программу установки и все остальное, что нам нужно. Файл «/slackware-13.37/pxelinux.0» указывает путь относительно корня сервера TFTP. PXE клиент будет использовать TFTP протокол для получения этого загрузчика.
Итак, что мы сделаем:
создадим каталог «Slackware-13,37» и скопируем туда необходимые файлы.
Во-первых, сам PXELINUX загрузчик:
mkdir /tftpboot/slackware-13.37 mkdir /tftpboot/slackware-13.37/pxelinux.cfg cp /usr/share/syslinux/pxelinux.0 /tftpboot/slackware-13.37/
Кроме того, нам нужны файлы из Slackware CDROM которые показывают информативные сообщения в самом начале. Предположим, что локальная копия релиза Slackware находится в «/mirror/slackware/slackware-13.37» (измените путь в командах ниже, если у вас другое местоположение):
cp /mirror/slackware/slackware-13.37/isolinux/message.txt /tftpboot/slackware-13.37/ cp /mirror/slackware/slackware-13.37/isolinux/f2.txt /tftpboot/slackware-13.37/
Очень важно: ещё нам нужны исходный образ виртуального диска (initrd.img) и файл конфигурации pxelinux, который содержит инструкции для клиентов PXE:
cp /mirror/slackware/slackware-13.37/isolinux/initrd.img /tftpboot/slackware-13.37/ cp /mirror/slackware/slackware-13.37/usb-and-pxe-installers/pxelinux.cfg_default /tftpboot/slackware-13.37/pxelinux.cfg/default
И наконец нам нужны все ядра которые вы можете выбрать после загрузки инсталлятора:
cp -a /mirror/slackware/slackware-13.37/kernels /tftpboot/slackware-13.37/
Теперь у вас есть полностью настроенный PXE сервер. Попробуйте! Возьмите компьютер, который может загружаться с сети, запустите его и наблюдайте за тем, как он контактирует с сервером PXE, загружает код PXE, загружает и представляет вам знакомое окно установки Slackware! С этого момента вы находитесь на знакомой территории: выберите ядро, и вперед.
Если вы не знакомы с сетевыми установками, вот несколько советов:
Программа установки использует UDEV, чтобы загрузить нужный драйвер(ы) для вашей сетевой карты. Вы можете войти как root, использовать (с)FDISK для создания разделов и запустить «setup». К тому времени вы добираетесь до точки, где выберите предпочтительный способ установки по сети, программа установки попросит вас предоставить параметры конфигурации сети (IP адрес, маску подсети, шлюз). Если сервер DHCP был найден в вашей локальной сети, то у вас будет альтернативный вариант использования DHCP и автоматической настройки интерфейса.
Как только появится диалоговое окно, вы сможете выбрать варианты установки «Install from NFS (Network File System)»,«Install from FTP/HTTP server» или «Install froma Samba share» в зависимости от того, что из этого вы настроили для использования и есть в наличии. Вам нужно будет поставить пару значения для IP-адреса и каталога на сетевом сервере.
В качестве первого упражнения, указаны значения для использования с сервером NFS (для нашей сети в примере):
Ваш IP-адрес (выбрать любой неиспользуемый): 192.168.0.111 Ваша маска: 255.255.255.0 Шлюз: 192.168.0.10 Адрес NFS сервера: 192.168.0.1 Каталог со Slackware на сервере NFS: /mirror/slackware/slackware-13.37/slackware
Несколько следующих примерных значений для использования с FTP сервером (для нашей сети в примере):
Ваш IP-адрес (выбрать любой неиспользуемый): 192.168.0.111 Ваша маска: 255.255.255.0 Шлюз: 192.168.0.10 Адрес FTP сервера: ftp://192.168.0.1 Каталог со Slackware на ftp сервере: /pub/mirror/slackware/slackware-13.37
Несколько следующих примерных значений для использования с HTTP сервером (для нашей сети в примере):
Ваш IP-адрес (выбрать любой неиспользуемый): 192.168.0.111 Ваша маска: 255.255.255.0 Шлюз: 192.168.0.10 Адрес HTTP сервера: http://192.168.0.1 Каталог со Slackware на веб сервере: /mirror/slackware/slackware-13.37
Заключительные примерные значения для использования с Samba ресурсом (для наше сети в примере):
Ваш IP-адрес (выбрать любой неиспользуемый): 192.168.0.111 Ваша маска: 255.255.255.0 Шлюз: 192.168.0.10 Samba ресурс: //192.168.0.1/mirror
С этого момента, установка проводится так же, как если бы источником был CDROM.
Удачи!
Eric Hameleers.
Простой /etc/dhcpd.conf для вашего DHCP-сервера, где все компьютеры могут загружаться по сети с помощью PXE.
# dhcpd.conf # # Файл конфигурации для ISC dhcpd # # Если этот сервер DHCP является официальным сервером DHCP # для локальной сети, авторитетный директивы должны быть задействованы. authoritative; ddns-update-style none; # Разрешить запросы BOOTP allow bootp; # Указатель на TFTP сервер next-server 192.168.0.1; # По умолчанию аренда составляет 1 неделю (604800 сек.) default-lease-time 604800; # Максимальная аренда составляет 4 недели (2419200 сек.) max-lease-time 2419200; subnet 192.168.0.0 netmask 255.255.255.0 { option domain-name "my.lan"; option broadcast-address 192.168.0.255; option subnet-mask 255.255.255.0; option domain-name-servers 192.168.0.1; option routers 192.168.0.10; range dynamic-bootp 192.168.0.50 192.168.0.100; use-host-decl-names on; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/slackware-13.37/pxelinux.0"; } }
Более продвинутый /etc/dhcpd.conf для вашего DHCP сервера, в котором вы можете указать, какие именно компьютеры могут загружаться по сети с помощью PXE (но вам придется собрать их MAC-адреса и поместить в отдельную запись host{} ):
# dhcpd.conf # # Файл конфигурации для ISC dhcpd # # Если этот сервер DHCP является официальным сервером DHCP # для локальной сети, авторитетный директивы должны быть задействованы. authoritative; ddns-update-style none; # Игнорировать запросы BOOTP ignore bootp; # общая опция определения для всех сконфигурированных сетей.. option domain-name-servers 192.168.0.1; subnet 192.168.0.0 netmask 255.255.255.0 { option domain-name "my.lan"; option broadcast-address 192.168.0.255; option subnet-mask 255.255.255.0; option routers 192.168.0.10; # Мы оставляем диапазон с 192.168.0.1 до 192.168.0.49 для статических IP-адресов pool { # Известные клиенты (т.е. настроены с заявленым "host"), # которые запрашивают IP-адреса через DHCP range 192.168.0.50 192.168.0.100; # аренда по умолчанию 1 неделя (604800 сек.) default-lease-time 604800; # максимальная аренда 4 недели (2419200 сек.) max-lease-time 2419200; deny unknown clients; } pool { # Гости range 192.168.0.150 192.168.0.200; # аренда по умолчанию 8 часов (28800 сек.) default-lease-time 28800; # максимальная аренда 24 часа (86400 сек.) max-lease-time 86400; deny known clients; } } # Хосты, которые требуют специальной опции могут быть # перечислены в принимающих хостах. Если адрес не указан, то адрес будет # выделен динамически (если это возможно), но конкретный хост по-прежнему будет # получать информацию от декларированного хоста. # Так же могут быть указаны фиксированные IP адреса для хостов. Но эти адреса # не должны быть указаны как доступные для динамического # назначения. Хосты, для которых были указаны фиксированные IP адреса # могут загрузиться с помощью BOOTP или DHCP. Хосты, без # постоянного адреса могут загружаться только с DHCP, если есть # диапазон адресов в подсети, к которой BOOTP клиент соединяется с установленным dynamic-bootp флагом # ==== Группа определений ======= # Определение группы компьютеров, которым необходимо уделять особое внимание. group { # машины без PXE # по умолчанию время аренды 1 неделя (604800 сек.) default-lease-time 604800; # максимальное время аренды 2 недели (1209600 сек.) max-lease-time 1209600; # host penguin { # hardware ethernet xx:xx:xx:xx:xx:xx; # fixed-address 192.168.0.2; # } } group { # PXEboot # по умолчанию время аренды 1 день(86400 сек.) default-lease-time 86400; # максимальное время аренды 2 дня (172800 сек.) max-lease-time 172800; # Разрешить запросы BOOTP для этой группы: allow bootp; # Указатель на сервер TFTP (обязательный параметр!): next-server 192.168.0.1; # Если вы хотите журналировать процесс загрузки, вам нужно будет настроить # logserver, чтобы разрешить журналирование с удаленных хостов. #option log-servers 192.168.0.1; use-host-decl-names on; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/slackware-13.37/pxelinux.0"; } else if substring (option vendor-class-identifier, 0, 9) = "Etherboot" { filename "/slackware-13.37/kernels/hugesmp.s/bzImage"; } host t43 { # Добавьте сюда МАС адрес вашего компьютера: hardware ethernet yy:yy:yy:yy:yy:yy; fixed-address 192.168.0.3; } } # конец группы PXEboot
Скрипт старта/остановки для DHCP сервера вы можете сохранить как «/etc/rc.d/rc.dhcpd».
Не забудьте сделать его исполняемым:
chmod +x /etc/rc.d/rc.dhcpd
Вы можете добавить следующую строку в /etc/rc.d/rc.local для автоматического запуска DHCP во время загрузки сервера:
if [ -x /etc/rc.d/rc.dhcpd ]; then # Start the DHCP server: /etc/rc.d/rc.dhcpd start fi
Содержимое файла «/etc/rc.d/rc.dhcpd»:
#!/bin/sh # # /etc/rc.d/rc.dhcpd # Этот скрипт заботится о запуске и остановке службы ISC DHCPD # # вставьте параметры командной строки здесь, те что вы хотите передать DHCPD DHCPD_OPTIONS="-q eth0" [ -x /usr/sbin/dhcpd ] || exit 0 [ -f /etc/dhcpd.conf ] || exit 0 start() { # Start daemons. echo -n "Starting dhcpd: /usr/sbin/dhcpd $DHCPD_OPTIONS " /usr/sbin/dhcpd $DHCPD_OPTIONS echo } stop() { # Stop daemons. echo -n "Shutting down dhcpd: " killall -TERM dhcpd echo } status() { PIDS=$(pidof dhcpd) if [ "$PIDS" == "" ]; then echo "dhcpd is not running!" else echo "dhcpd is running at pid(s) ${PIDS}." fi } restart() { stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $0 {start|stop|status|restart}" ;; esac exit 0
Автор:
Eric Hameleers alien@slackware.com 21-mar-2011
Wiki ссылка:
http://www.slackware.com/~alien/dokuwiki/doku.php?id=slackware:pxe