В этом руководстве я расскажу как установить последнюю версию сервера Debian 9 через PXE-сервер с удаленных зеркал.
Для настройки среды PXE мы будем использовать DHCP-сервер ISC-DHCP, а файлы Netboot Debian будут обслуживаться в локальной сети сервером TFTPD-HPA. Установка системы через PXE может увеличить скорость установки как в случае развертывания нескольких установок Debian в течение короткого периода времени так и в тех случаях, когда машины не оснащены устройством CD/DVD ROM.
Требования
- Debian 9 установленный на выделенной или на виртуальной машине.
- Сетевой интерфейс с настроенным статичным IP адресом в том сегменте сети, который будет использоваться для динамического выделения IP-адреса и других связанных с ним настроек DHCP и PXE.
- Локальный или удаленный аккаунт на сервере Debian с привилегиями root или прямой доступ к root аккаунту через консоль или SSH.
- Интернет подключение необходимое для установки Debian по сети.
Начальная конфигурация
На первом этапе вам необходимо убедиться, что система Debian, которую мы будем использовать для установки новых серверов, имеет сетевой интерфейс, который будет использоваться для привязки к нему DHCP-сервера, настроенному со статическим IP-адресом.
Чтобы вручную настроить карту сетевого интерфейса, откройте файл сетевых интерфейсов и отредактируйте его, используя ваш любимый текстовый редактор, например nano. Замените строки настроек IP, описанные ниже, в соответствии с вашими сетевыми настройками.
sudo nano /etc/network/interfaces
Примерное содержимое файла:
auto ens33 iface ens33 inet static address 192.168.1.102 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers 192.168.1.2 8.8.4.4 dns-search debian.local
После правки файла сетевых настроек сохраните его, закройте и опустите сетевой интерфейс, затем снова его поднимите для применения настроек так как показано ниже. В результате, ваша сетевая карта названная (к примеру) ens33, получит настройки которые вы указали в файле.
ifdown ens33 ifup ens33
Для проверки того что новый IP адрес был применен для сетевого интерфейса можно выполнить следующую команду:
ip a
Иногда настройки IP не применяются при простом перезапуске сети или отключении и включении сетевого интерфейса. В этом случае придётся перезапустить систему.
init 6
или
systemctl reboot
Так же перед продолжением советую выполнить полное обновление системы, если вы по каким-либо причинам его ещё не сделали:
apt update apt upgrade
Следующим шагом будет установка некоторых необходимых утилит, которые будут использоваться для дальнейшего управления вашей системой из командной строки.
apt install wget bash-completion unzip
Установка и настройка сервера ISC-DHCP
Следующий шаг — установка сервера DHCPи настройка PXE, для этого войдите в систему под root или под аккаунтом с привилегиями root и установите пакет isc-dhcp-server из репозитория Debian 9.
apt install isc-dhcp-server
Теперь сохраните резервную копию основного файла настроек сервера ISC-DHCP и измените содержимое конфигурационного файла на следующие настройки:
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup nano /etc/dhcp/dhcpd.conf
Содержимое dhcpcd.conf:
ddns-update-style none; option option-128 code 128 = string; option option-129 code 129 = text; authoritative; log-facility local7; option arch code 93 = unsigned integer 16; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.50 192.168.1.100; option routers 192.168.1.1; option broadcast-address 192.168.1.255; option subnet-mask 255.255.255.0; option ntp-servers 192.168.1.102; option time-servers 192.168.1.102; option domain-name "debian.local"; option domain-name-servers 192.168.1.1, 192.168.1.2; allow booting; allow bootp; if option arch = 00:07 or option arch = 00:09 { filename "bootnetx64.efi"; } else { filename "pxelinux.0"; } next-server 192.168.1.102; #default lease 4H, max lease 8H default-lease-time 14400; max-lease-time 28800; } host nas { hardware ethernet 00:17:a4:f6:b2:2e; fixed-address 192.168.1.105; }
В приведенном выше файле конфигурации замените следующие строки соответственно.
subnet {.. range 192.168.1.50 192.168.1.100;
Для определения диапазона сети в котором DHCP будет выделять IP адресадля вашего сегмента сети
option routers = IP вашего шлюза
option broadcast-address = широковещательный адрес
option subnet-mask = маска подсети
option ntp-servers
option time-servers = IP адрес вашего сетевого сервера времени NTP
option domain-name = доменное имя вашей сети
option domain-name-servers = IP адреса ваших DNS серверов
if option arch = 00:07 or option arch = 00:09 = если конечное устройство это машина с UEFI, загрузка пойдет с помощью файла bootnetx64.efi все другие не UEFI машины будут грузиться используя файла pxelinux.0. Обычно это машины со старым BIOS.
next-server 192.168.1.102 = это IP адрес TFTP сервера где файлы pxelinux.0 или bootnetx64.efi в вашей сети. В нашем случае TFTP сервер расположен на той же самой машине.
default-lease-time = время по умолчанию для выделенного IP адреса, перед тем как истечет срок его аренды.
max-lease-time = максимальное время до срока истечения аренды IP адреса.
host nas { hardware ethernet 00:17:a4:f6:b2:2e; fixed-address 192.168.1.105; }
Тут показано как статичный IP адрес объявляется DHCP сервером. Устройство с MAC адресом указанным в hardware ethernet всегда будет получать один и тот же IP адрес. Имя хоста указанное как nas — не имеет ззначения. вы можете указать любую произвольную строку.
Теперь откройте файл isc-dhcp-server в директории /etc/default/ для правки, переместитесь в конец файла и добавьте вашу сетевую карту настроенную на статичный IP адрес в строку INTERFACESv4 так как показано в примере ниже. Убедитесь что вы добавили соответствующее имя вашего сетевого интерфейса. Используйте команды ip или ifconfig для вывода списка существующих сетевых интерфейсов и поиска правильного имени.
nano /etc/default/isc-dhcp-server
Вывод файла isc-dhcp-server
INTERFACESv4=”ens33”
Наконец, перезапустите демона DHCP для применения изменений. Проверьте статус сервиса DHCP используя приведенную ниже команду, для проверки того, что сервис был корректно запущен.
systemctl restart isc-dhcp-server.service systemctl status isc-dhcp-server.service
так же, выполните команду ss или netstat для вывода списка открытых сокетов и проверки что DHCP сервер работает.
netstat –tulpn ss –tulpn
Если утилита netstat не установлена в системе вы можете установить её этой командой:
apt install net-tools
Установка TFTP сервера
Чтобы обслуживать файлы netboot, нужные клиентам для загрузки Debian удаленно через PXE и TFTP, вам также необходимо установить TFTP-сервер в вашей системе. Одним из наиболее распространенных и защищенных TFTP-серверов, доступных для локальных сетей, является сервер tftpd-hpa. Пакеты TFTP-HPA можно установить из официальных репозиториев, предлагаемых Debian 9. Выполните следующую команду, чтобы установить сервер tftpd-hpa в Debian 9.
apt install tftpd-hpa
После того как пакет будет установлен, откройте файл конфигурации TFTPD-HPA и убедитесь что он имеет следующее содержимое.
nano /etc/default/tftpd-hpa
Вывод файла tftpd-hpa:
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
Если строка TFTP_OPTIONS имеет содержимое как показано ниже, убедитесь, что вы удалили флаг —create, для защиты TFTP-сервера.
TFTP_OPTIONS="--secure --create"
Флаг create позволяет удалённым клиентам загружать файлы на tftp сервер. Этот параметр опасен, поскольку произвольные пользователи могут загружать или удалять файлы из корневого пути сервера TFTP.
Наконец, включите службу в вашей системе и запустите TFTP-сервер. проверьте статус демона tftp, выполнив следующую серию команд:
systemctl enable tftpd-hpa systemctl start tftpd-hpa systemctl status tftpd-hpa
Вы так же можете использовать команду netstat или ss для получения списка всех открытых сетевых сокетов которые слушает ваша система. 67 и 69 порты UDP должны быть открытыми в вашей сети для корректной работы DHCP и TFTP сервера. Вы можете открыть эти порты в вашем фаерволле следующей командой:
ufw allow 67/udp ufw allow 69/udp
Если вы используете правила iptables для управления политикой брандмауэра на своем сервере Debian, добавьте следующие правила, чтобы разрешить входящий трафик на портах 67 и 69 UDP, чтобы клиенты могли обращаться к серверам DHCP и TFTP.
apt-get install iptables-persistent iptables -A INPUT -p udp --dport 67 -j ACCEPT iptables -A INPUT -p udp --dport 69 -j ACCEPT systemctl iptables-persistent save systemctl iptables-persistent reload
На следующем шаге мы установим утилиты загрузчика Syslinux, выполнив следующую команду.
apt install syslinux-utils syslinux
Развертывание файлов сетевой загрузки Debian 9
Далее, идем на страницу Debian с файлами сетевой установки по адресу https://www.debian.org/distrib/netinst и качаем последнюю версию архива Debian netboot используя утилиту wget.
wget http://ftp.nl.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz
После загрузки архива Debian netinstall распакуйте его содержимое напрямую в корень TFTP следующей командой.
tar xfz netboot.tar.gz -C /srv/tftp/
Так же скопируйте файл memdisk поставляемый пакетом Syslinux в корень TFTP и осмотрите содержимое директории TFTP. Директория /srv/tftp должна иметь содержимое как показано на скриншоте.
cp /usr/lib/syslinux/memdisk /srv/tftp/ ls /srv/tftp/
Теперь, создайте символьную ссылку для загрузочного файла UEFI предоставляемого пакетом Debian netinstall в корень TFTP. И выполните длинный вывод списка файлов директории TFTP чтобы проверить что символьная ссылка правильно указывает на файл сетевой загрузки UEFI.
ln -s /srv/tftp/debian-installer/amd64/bootnetx64.efi /srv/tftp/ ls -l /srv/tftp/
Сервер PXE читает и запускает конфигурационные файлы расположенные в директории pxelinux.cfg из корня TFTPв таком порядке: GUID файлы, MAC файлы и файл по умолчанию. Директория pxelinux.cfg уже была нами создана и размещена с конфигурационным по умолчанию файлом PXE потому как ранее мы извлекли требуемые файлы из архива Debian netinstall в директорию/srv/tftp. Нет необходимости дополнительно изменять конфигурационный файл PXE по умолчанию из каталога pxelinux.cfg. Однако, который контролирует актуальное загрузочное меню для Debian называется txt.cfg и расположен в директории /srv/tftp/debian-installer/amd64/boot-screens/ . Дефолтный конфигурационный файл pxe из директории pxelinux.cfg это по сути символьная ссылка на файл txt.cfg. Чтобы изменить или добавить другие параметры, которые нужно передать ядру в процессе сетевой загрузки или добавить другие записи или загрузить другие дистрибутивы Linux через PXE-сервер, вы должны открыть файл конфигурации txt.cfg PXE по умолчанию с помощью следующей команды и сделать соответствующие изменения.
nano /srv/tftp/debian-installer/amd64/boot-screens/txt.cfg
txt.cfg:
Стандартная установка:
label install menu label ^Install kernel debian-installer/amd64/linux append vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet
Если вы хотите использовать режим восстановления Debian через PXE, добавьте запись в этот файл с приведенными ниже настройками.
Режим восстановления:
label rescue menu label ^Rescue mode kernel debian-installer/amd64/linux append vga=788 initrd=debian-installer/amd64/initrd.gz rescue/enable=true --- quiet
Чтобы добавить записи, необходимые для загрузки Debian по сети в экспертном режиме или использовать режим автоматической установки, добавьте дополнительные настройки в файл txt.cfg, как показано в приведенных ниже примерах.
Установка в режиме Expert:
label expert menu label ^Expert install kernel debian-installer/amd64/linux append priority=low vga=788 initrd=debian-installer/amd64/initrd.gz --- include debian-installer/amd64/boot-screens/rqtxt.cfg
Установка в автоматическом режиме:
label auto menu label ^Automated install kernel debian-installer/amd64/linux append auto=true priority=critical vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet
Так же, как вы можете увидеть по содержимому, файлы образов ядра и initrd.gz, загружаемые в оперативную память клиента через сетевой протокол TFTP, после начального меню PXE, расположены в директории /srv/tftp/debian-installer/amd64/. Для дальнейшего обновления ядра и образа init вам достаточно будет заменить эти два файла на новые файлы поставляем Debian.
Вот и всё! Теперь вы можете загружать клиентские машины по сети, используя все те же самые записи в меню, какие отображаются при загрузке Debian с DVD и запускать установку Debian 9 через PXE сервер.
Для просмотра сообщений записываемых в журнал DHCP, которыми обмениваются клиенты и сервер в режиме реального времени, используйте команду tail для файла системного лога syslog.
Записи журнала TFTP-сервера можно посмотреть в файле daemon.log. Нижеприведенные скриншоты иллюстрируют выдержку записей журнала, выданных серверами DHCP и TFTP.
tail -f /var/log/syslog tail -f /var/log/daemon.log
Можете так же выполнить следующую команду, чтобы посмотреть журнал генерируемый сервером TFTP.
journalctl -fu tftpd-hpa
Чтобы посмотреть расширенную информацию об аренде, предоставленной сервером DHCP своим клиентам, отобразите содержимое файла dhcpd.leases с помощью команды cat, как показано в приведенном ниже примере.
cat /var/lib/dhcp/dhcpd.leases
В итоге: у вас теперь есть в вашей сети PXE сервер. Вы можете запускать установку Debian по сети настроив ваши клиентские машины на загрузку по PXE. Вы можете запускать сетевую загрузку клиентских машин по нажатию специальных клавиш во время прохождения инициализации POST. Какие это клавиши, вам потребуется узнавать из документации производителя вашей материнской платы.
Сам процесс установки Debian по сети очень простой и (за несколькими незначительными отличиями) в принципе такой же как установка с DVD или загрузочной USB flash.