NetInstall start

Материал из ALT Linux Wiki
Примечание: Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.
Официальная и более подробная документация здесь.

Установка по сети

Техническая часть

Многие компьютеры и серверы поддерживают установку системы не только с CD/DVD и флешек, но так же по сети.

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

Для организации загрузки системы в PXE используются следующие протоколы:

  • IP - сетевой протокол объединяющий сегменты сети в единую сеть, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов.
  • UDP - сетевой протокол транспортного уровня, с ним компьютерные приложения могут посылать сообщения другим хостам по IP-сети без необходимости предварительного сообщения для установки специальных каналов передачи или путей данных.
  • BOOTP - сетевой протокол прикладного уровня, используемый для автоматического получения клиентом IP-адреса. Это обычно происходит во время загрузки компьютера.
  • TFTP - (Trivial File Transfer Protocol — простой протокол передачи файлов) - используется, в основном, для первоначальной загрузки бездисковых рабочих станций. TFTP, в отличие от FTP, не содержит возможностей аутентификации (хотя возможна фильтрация по IP-адресу) и основан на транспортном протоколе UDP.

PXE-код, обычно находящийся в ПЗУ сетевой карты, получает из сети по протоколу TFTP (получив адрес TFTP-сервера по BOOTP) исполняемый файл, после чего передаёт ему управление.

Практическая часть

Параметры нашей сети (для примера)
Параметр Значение
Сеть 10.0.2.0
Маска 255.255.255.0
Шлюз 10.0.2.1
Адрес компьютера с PXE-сервером 10.0.2.5
Адрес с DHCP-сервером (в примере тот же компьютер) 10.0.2.5

Настраиваем на компьютере/сервере статический адрес

См. Etcnet_start

Устанавливаем пакеты

# apt-get install dhcp-server tftp-server-xinetd syslinux

Настраиваем DHCP-сервер

DHCP-сервер для автоматической настройки сетевых интерфейсов в локальной сети, именно он присваивает каждому устройству в локальной сети IP-адреса (если настроена раздача таких адресов автоматически). Нам же нужно настроить этот сервер таким образом, чтобы компьютер при запуске загрузки по сети автоматически получил адрес TFTP-сервера и загрузил с него образ системы.

В качестве DHCP-сервера выбран dhcpd. Настраиваем его через файл - /etc/dhcp/dhcpd.conf.

# mcedit /etc/dhcp/dhcpd.conf

Скопируйте в файл следующие значения, обратив внимание на комментарии.

Примечание: Адреса сети вы должны заменить на свои
Внимание! Опция option root-path указывает путь в файловой системе и относительный путь для сетевого хранилища, где будут храниться образы. Если вы прорабатываете данную инструкцию в первый раз, не меняйте ее значение, а расположите образы в указанной папке
option arch code 93 = unsigned integer 16;
if option arch = 00:06 {
    # EFI IA32 => Grub2
    filename "shimx64.efi";
    } else if option arch = 00:07 {
    # EFI BC => Grub2
    filename "shimx64.efi";
    } else if option arch = 00:09 {
    # EFI x86-64 => Grub2
    filename "shimx64.efi";
    } else {
    # Intel x86PC (BIOS) => PXELinux
    filename "pxelinux.0";
}

# Здесь ↓ указываем адрес и маску нашей сети
subnet 10.0.2.0 netmask 255.255.255.0 {
        # Здесь ↓ указываем адрес компьютера, на котором будет располагаться TFTP-сервер. В нашем примере он там же, где DHCP-сервер
        next-server 10.0.2.5;
        # корневой каталог для образов
        option root-path "/var/lib/tftpboot";
        # адрес шлюза сети  
        option routers 10.0.2.1;
        # адрес DNS-сервера сети или внешний адрес для обслуживания DNS-имен
        option domain-name-servers 10.0.2.2;
        # Срок аренды в секундах - стандартное и максимальное
        default-lease-time 3600;
        max-lease-time 3600;
        # Область DHCP
        range 10.0.2.70 10.0.2.80;
}

Сохраняем и закрываем файл.

Укажите сетевой интерефейс, через который будет работать DHCP-сервер

Примечание: Укажите в данном файле тот интерфейс, к которому будет подключен кабель соединяющий сервер (компьютер с PXE-сервером) и клиент
# mcedit /etc/sysconfig/dhcpd
DHCPDARGS=enps0

Запускаем DHCP-сервер:

# systemctl enable --now dhcpd

Мы настроили DHCP-сервер с определенным диапазоном (10.0.2.70-10.0.2.80) и определенной подсетью (10.0.2.0) на интерфейсе enps0.

Любой компьютер с поддержкой PXE получит загрузчик указанный в настройках DHCP. Для UEFI это будет shimx64.efi, для BIOS — файл pxelinux.0.

Примечание: Параметр next-server следует указывать даже если для размещения служб DHCP и TFTP используется один и тот же сервер


Настраиваем TFTP-сервер

TFTP-сервер - Trivial File Transfer Protocol - используется для загрузки загрузочного образа на клиентскую машину.

Правим файл /etc/xinetd.d/tftp:

# mcedit /etc/xinetd.d/tftp

Приводим строчку disable к следующему виду:

 disable = no

Правим файл /etc/xinetd.conf:

# mcedit /etc/xinetd.conf

Приводим строчку only_from = 127.0.0.1 к следующему виду:

 # only_from = 127.0.0.1

Перезапускаем службу xinetd:

 # systemctl restart xinetd

Развертывание дистрибутива ALT

Публикация образа

Скачиваем любой дистрибутив ALT Linux, например, Starterkit XFCE - http://nightly.altlinux.org/p10/permalink/alt-p10-xfce-latest-x86_64.iso.

Примечание: Вы можете скачать и использовать любой другой дистрибутив. Стартеркит взят для примера.


Например, образ скачан в /home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso.

Монтируем данный ISO-образ:

# mkdir -p /mnt/iso/
# mount -o loop '/home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso' /mnt/iso

Создаем каталог для ОС:

# mkdir -p /var/lib/tftpboot/images/ALT/

Копируем образ ОС выполнив команду

# cp -vR /mnt/iso/* /var/lib/tftpboot/images/ALT/

Отмонтируем образ:

# umount /mnt/iso/
Настройка установки в Legacy

Создаем подкаталог для хранения файлов загрузочного образа в /var/lib/tftpboot:

Примечание: Да, это каталог с именем pxelinux.cfg
# mkdir -p /var/lib/tftpboot/pxelinux.cfg

Копируем файл загрузчика pxelinux в каталог, указанный в конфигурации TFTP:

# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/

Создаем файл конфигурации загрузчика по умолчанию /var/lib/tftpboot/pxelinux.cfg/default и файл /var/lib/tftpboot/pxelinux.cfg/default.msg

Содержимое файла /var/lib/tftpboot/pxelinux.cfg/default.

Правим следующей командой:

# mcedit /var/lib/tftpboot/pxelinux.cfg/default
timeout 120
prompt 1
default 1
display pxelinux.cfg/default.msg

label 1
  kernel images/ALT/boot/vmlinuz
  append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU

Где:

Примечание: Тут нам нужно обратить внимание на следующие параметры:
  • в kernel указывается путь images/ALT/boot/vmlinuz
  • в initrd указывается путь images/ALT/boot/initrd.img
  • server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
  • directory - путь directory:/ALT - потому что мы указываем путь относительно /var/lib/tftpboot/images
  • stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться


Содержимое файла /var/lib/tftpboot/pxelinux.cfg/default.msg.

Правим следующей командой:

# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
Type one of:
1     - install ALT
Настройка установки в UEFI

Копируем файлы загрузчика shimx64.efi и grubx64.efi в каталог, указанный в конфигурации TFTP:

# cp /usr/lib64/efi/shimx64.efi /var/lib/tftpboot
# cp /usr/lib64/efi/grubx64.efi /var/lib/tftpboot

Создаем файл конфигурации загрузчика по умолчанию grub.cfg в /var/lib/tftpboot.

Примечание: Можно взять файл с диска:
# cp /var/lib/tftpboot/images/ALT/boot/grub/grub.cfg /var/lib/tftpboot/
# chmod 644 /var/lib/tftpboot/grub.cfg


Пример файла /var/lib/tftpboot/grub.cfg:

set timeout=120
set default=ftp
menuentry $"ALT " {
  echo $"Loading Linux vmlinuz ..."
  linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT/ stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU 
  echo $"Loading initial ramdisk ..."
  initrd /images/ALT/boot/initrd.img
}
}
Примечание: Тут нам нужно обратить внимание на следующие параметры:
  • в linux указывается путь /images/ALT/boot/vmlinuz
  • server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
  • directory - путь /var/lib/tftpboot/images будет указан в настройках FTP-сервера позднее, а сейчас мы указываем каталог с ОС - /ALT - путь в который мы распаковали образ ALT Linux.
  • stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться
  • в initrd указывается путь /images/ALT/boot/initrd.img


Где:

  • default— загрузочная запись по умолчанию указывает на метку ftp;
  • timeout— загружает клиент, используя загрузочную запись по умолчанию, после таймаута в 120 секунд;
  • linux— определяет файла ядра (путь до ядра ОС относительно пути, указанного в конфигурации TFTP) и параметры, которые должны быть добавлены при загрузке ядра, например расположение установочных пакетов и способы доступа к этим пакетам;
  • initrd— путь к корневой файловой системе для начальной загрузки (относительно пути, указанного в конфигурации TFTP).
Ошибки
Not find server

PXE_ALT_bug_2_1.png

PXE_ALT_bug_2_2.png

Примечание: Проверьте IP-адрес FTP-сервера в файле /var/lib/tftpboot/pxelinux.cfg/default или /var/lib/tftpboot/grub.cfg


Проверьте в следующих строчках загрузчиков параметр server. Он должен соответствовать не адресу DHCP сервера, а адресу PXE-сервера.

  • GRUB:
linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT/ stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU
  • PXE Linux
append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU
File not found

PXE_ALT_bug_1.png

Проверьте в файле /var/lib/tftpboot/pxelinux.cfg/default что в строке:

 linux /images/ALT/boot/vmlinuz fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 vga=normal mpath lang=ru_RU

v1 - Каталог с системой

Примечание: Слеш перед указанной папкой обязателен


Параметр:

directory:

Должен быть прописан как:

directory:/ALT

А не просто:

directory:ALT

В противном случае загрузчик не найдет каталог с системой.

v2 - Файл образа

Примечание: Указанный в stagename файл зависит от выбранного вами образа


Параметр:

stagename=

В примере он прописан как:

stagename=live

Но, в разных дистрибутивах файл образа может иметь разные названия. Ориентируйтесь на файл с большим объемом в файловой части.


v3 - неверный путь stage

PXE_ALT_bug_2.png

Примечание: В directory должна указываться папка относительно /var/lib/tftpboot/images


Если у вас файлы образа лежат в /var/lib/tftpboot/images/ALT, то в параметре directory: вы должны указать:

  • не полный путь - /var/lib/tftpboot/images/ALT
  • не путь относительно tftpboot - /images/ALT

А путь относительно images - /ALT

Развертывание LiveCD ReactOS

Для дополнительной практики или может кому-то пригодится для дела, мы попробуем развернуть RAM-образ ReactOS.

Публикация образа

Скачиваем LiveCD образ - https://reactos.org/getbuilds/

Получаем файл вида reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z

Например, образ скачан в ~/Загрузки/reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z.

Переходим в каталог и извлекаем

 $ cd ~/Загрузки/
 $ 7z x reactos-livecd-*.7z

Переименовываем

 $ mv reactos-livecd-*.iso reactos-livecd.iso

Копируем образ в хранилище:

 # cp ~/Загрузки/reactos-livecd.iso /var/lib/tftpboot/

Разрешите всем на чтение (без этого у меня зависало на загрузке):

 # chmod 444 '/var/lib/tftpboot/reactos-livecd.iso'
Настройка для загрузки в Legacy

Правим файл:

 # mcedit /var/lib/tftpboot/pxelinux.cfg/default

Заменяем все на строки:

  kernel chain.c32
  append file=freeldr.sys seg=0x0F80 keeppxe

Копируем файл загрузчика syslinux:

 # cp /usr/lib/syslinux/chain.c32 /var/lib/tftpboot/

Копируем файлы загрузчика freeldr:

 # mkdir -p /mnt/iso/
 # mount -o loop '~/Загрузки/reactos-livecd.iso' /mnt/iso
 # cp '/mnt/iso/loader/setupldr.sys' /var/lib/tftpboot/freeldr.sys
 # cp '/mnt/iso/freeldr.ini' /var/lib/tftpboot/freeldr.ini
 # umount /mnt/iso

Содержимое файла freeldr.ini по адресу /var/lib/tftpboot/freeldr.ini заменяем на следующее содерждимое:

[FREELOADER]
DefaultOS=LiveCD_Debug
TimeOut=3

[Display]
TitleText=ReactOS LiveCD
MinimalUI=Yes

[Operating Systems]
LiveCD="LiveCD"
LiveCD_Debug="LiveCD (Debug)"
LiveCD_Screen="LiveCD (Screen)"

[LiveCD]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD

[LiveCD_Debug]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD

[LiveCD_Screen]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=SCREEN /SOS /MININT /RDPATH=net(0)\reactos-livecd.iso /RDEXPORTASCD

Правим меню PXE:

 # mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
 Type one of:
 2     - ReactOS

Настраиваем загрузчик PXE:

 # mcedit /var/lib/tftpboot/pxelinux.cfg/default
 timeout 120
 prompt 1
 default 2
 display pxelinux.cfg/default.msg

 label 2
  kernel chain.c32
  append file=freeldr.sys seg=0x0F80 keeppxe

Перезапускаем xinetd:

 # systemctl restart xinetd
Ошибки
Образ загружается очень медленно

Честно, не знаю с чем это связано. Мне помог перезапуск служб.

 # systemctl restart xinetd tftp.socket vsftpd.socket

Общие файлы

Файлы конфигурации, если вы хотите "все".

 # mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
 Type one of:
 1     - ALT Linux
 2     - ReactOS
 # mcedit /var/lib/tftpboot/pxelinux.cfg/default
 timeout 120
 prompt 1
 default 2
 display pxelinux.cfg/default.msg

 label 1
  kernel images/ALT/boot/vmlinuz
  append initrd=images/ALT/boot/initrd.img fastboot changedisk automatic=method:ftp,network:dhcp,server:10.0.2.5,directory:/ALT stagename=live ramdisk_size=669397 showopts nosplash mpath lang=ru_RU

 label 2
  kernel chain.c32
  append file=freeldr.sys seg=0x0F80 keeppxe
 # systemctl restart xinetd

Настройка FTP

  1. Устанавливаем FTP-сервер:
    # apt-get install vsftpd
    
  2. Редактируем файл /etc/xinetd.d/vsftpd и убеждаемся что FTP-сервер включен:
    disable = no
    
  3. Перезапускаем сервис xinetd:
    # systemctl restart xinetd
    
  4. Создаем ссылку с /var/ftp на /var/lib/tftpboot/images:
    # rm -f /var/ftp
    # ln -s /var/lib/tftpboot/images /var/ftp
    

Файловая часть

Чтобы понять, что где лежит, опишу структуру каталогов:

/var/lib/tftpboot
├── chain.c32 <----- файл загрузчика syslinux, необходимый для загрузки RAM-образа ReactOS
├── freeldr.ini <----- файл загрузчика ReactOS
├── freeldr.sys <----- файл загрузчика ReactOS
├── grub.cfg <----- файл настройки GRUB
├── grubx64.efi <----- UEFI-загрузчик GRUB
├── images
│   └── ALT <----- директория указываемая для загрузки при PXE в MBR или UEFI
│       ├── <...> - некоторые файлы опущены
│       ├── ALTLinux
│       ├── boot
│       │   ├── grub
│       │   │   ├── bios.img
│       │   │   ├── boot.cat
│       │   │   ├── fonts
│       │   │   │   └── unicode.pf2
│       │   │   ├── grub.cfg
│       │   │   ├── i386-efi
│       │   │   ├── i386-pc
│       │   │   ├── locale
│       │   │   │   └── ru.mo
│       │   │   ├── themes
│       │   │   │   └── starterkit
│       │   │   ├── unifont.pf2
│       │   │   └── x86_64-efi
│       │   ├── initrd.img <----- файл initrd  для типа загрузки "Legacy", метки "label 1" параметра "append initrd" ИЛИ "initrd" в GRUB для UEFI. 
│       │   ├── memtest.bin
│       │   ├── memtest.efi
│       │   ├── shell.efi
│       │   └── vmlinuz <----- файл vmlinuz для типа загрузки "Legacy", метки "label 1" параметра "Kernel" ИЛИ "linux" в GRUB. 
│       ├── EFI
│       │   ├── BOOT
│       │   │   ├── bootia32.efi
│       │   │   ├── bootx64.efi
│       │   │   ├── grub.cfg
│       │   │   ├── grubia32.efi
│       │   │   ├── grubx64.efi
│       │   │   ├── mmia32.efi
│       │   │   └── mmx64.efi
│       │   └── enroll
│       │       └── altlinux.cer
│       ├── live <----- загружаемый модуль с системой, параметр "stagename="
│       └── syslinux
│           └── isolinux.cfg
├── pxelinux.0 <----- файл загрузчика PXE-Linux
├── pxelinux.cfg
│   ├── default <----- меню PXE-Linux
│   └── default.msg <----- отображаемое меню PXE-Linux с пунктами
├── reactos-livecd.iso <----- iso-образ LiveCD ReactOS
└── shimx64.efi <----- файл загрузчика GRUB2

Сама загрузка

  • Вы включаете компьютер (который подключен к той же сети что и PXE-сервер).
  • Выбираете загрузку по PXE
  • Компьютер получает с него адрес
  • Появляется меню загрузчика
  • Вы выбираете пункт и система загружается по сети как и с CD/DVD флешки
  • Вы работаете в LiveCD/устанавливливаете с установщика