NetInstall start: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «{{stub}} {{Note|Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.}} =Установка по сети= Многие компьютеры и серверы поддерживают установку системы не только с CD/DVD и флешек, но так же по...»)
 
 
(не показаны 83 промежуточные версии этого же участника)
Строка 1: Строка 1:
{{stub}}
{{DISPLAYTITLE:Загрузка по PXE для начинающих}}
{{Note|Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.}}
{{Note|Обратите внимание, что это не официальная документация, а попытка начинающего админа объяснить материал начинающим админам.<br>Официальная и более подробная документация [[NetInstall|'''здесь''']].}}
=Установка по сети=
=Установка по сети=
==Техническая часть==
Многие компьютеры и серверы поддерживают установку системы не только с CD/DVD и флешек, но так же по сети.
Многие компьютеры и серверы поддерживают установку системы не только с CD/DVD и флешек, но так же по сети.


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


==Практическая часть==
{|class="wikitable" style="float:center; margin-left:2em"
!colspan="2"|Параметры нашей сети (для примера)
|-
!Параметр
!Значение
|-
|Сеть
|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. Настраиваем его через файл - {{path|/etc/dhcp/dhcpd.conf}}.
# mcedit /etc/dhcp/dhcpd.conf
Скопируйте в файл следующие значения, обратив внимание на комментарии.
{{Note|Адреса сети вы должны заменить на свои}}
{{Attention|Опция {{path|option root-path}} указывает путь в файловой системе и относительный путь для сетевого хранилища, где будут храниться образы. Если вы прорабатываете данную инструкцию в первый раз, не меняйте ее значение, а расположите образы в указанной папке}}
<syntaxhighlight lang="ini">
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;
}
</syntaxhighlight>
Сохраняем и закрываем файл.
Укажите сетевой интерефейс, через который будет работать DHCP-сервер
{{Note|Укажите в данном файле тот интерфейс, к которому будет подключен кабель соединяющий сервер (компьютер с PXE-сервером) и клиент}}
# mcedit /etc/sysconfig/dhcpd
<syntaxhighlight lang="ini">
DHCPDARGS=enps0
</syntaxhighlight>
Запускаем DHCP-сервер:
<syntaxhighlight lang="bash"># systemctl enable --now dhcpd</syntaxhighlight>
Мы настроили DHCP-сервер с определенным диапазоном (10.0.2.70-10.0.2.80) и определенной подсетью (10.0.2.0) на интерфейсе enps0.
Любой компьютер с поддержкой PXE получит загрузчик указанный в настройках DHCP. Для UEFI это будет shimx64.efi, для BIOS — файл pxelinux.0.
{{Note|Параметр next-server следует указывать даже если для размещения служб DHCP и TFTP используется один и тот же сервер}}
=== Настраиваем TFTP-сервер ===
TFTP-сервер - Trivial File Transfer Protocol - используется для загрузки загрузочного образа на клиентскую машину.
Правим файл {{path|/etc/xinetd.d/tftp}}:
# mcedit /etc/xinetd.d/tftp
Приводим строчку {{path|disable}} к следующему виду:
<syntaxhighlight lang="bash">
disable = no
</syntaxhighlight>
Правим файл {{path|/etc/xinetd.conf}}:
# mcedit /etc/xinetd.conf
Приводим строчку {{path|<nowiki>only_from = 127.0.0.1</nowiki>}} к следующему виду:
<syntaxhighlight lang="bash">
# only_from = 127.0.0.1
</syntaxhighlight>
Перезапускаем службу xinetd:
<syntaxhighlight lang="bash">
# systemctl restart xinetd
</syntaxhighlight>
====Развертывание дистрибутива ALT====
=====Публикация образа=====
Скачиваем любой дистрибутив ALT Linux, например, Starterkit XFCE - http://nightly.altlinux.org/p10/permalink/alt-p10-xfce-latest-x86_64.iso.
{{Note|Вы можете скачать и использовать любой другой дистрибутив. Стартеркит взят для примера.}}
Например, образ скачан в {{path|/home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso}}.
Монтируем данный ISO-образ:
<syntaxhighlight lang="bash"># mkdir -p /mnt/iso/
# mount -o loop '/home/ladmin/Загрузки/alt-p10-xfce-latest-x86_64.iso' /mnt/iso</syntaxhighlight>
Создаем каталог для ОС:
<syntaxhighlight lang="bash"># mkdir -p /var/lib/tftpboot/images/ALT/</syntaxhighlight>
Копируем образ ОС выполнив команду
<syntaxhighlight lang="bash"># cp -vR /mnt/iso/* /var/lib/tftpboot/images/ALT/</syntaxhighlight>
Отмонтируем образ:
<syntaxhighlight lang="bash"># umount /mnt/iso/</syntaxhighlight>
===== Настройка установки в Legacy =====
Создаем подкаталог для хранения файлов загрузочного образа в {{path|/var/lib/tftpboot}}:
{{Note|Да, это каталог с именем '''pxelinux.cfg'''}}
<syntaxhighlight lang="bash"># mkdir -p /var/lib/tftpboot/pxelinux.cfg</syntaxhighlight>
Копируем файл загрузчика pxelinux в каталог, указанный в конфигурации TFTP:
<syntaxhighlight lang="bash"># cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/
</syntaxhighlight>
Создаем файл конфигурации загрузчика по умолчанию {{path|/var/lib/tftpboot/pxelinux.cfg/default}} и файл {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}}
<!--
{{note|Можно скопировать файл конфигурации загрузчика {{path|/var/lib/tftpboot/pxelinux.cfg/default}} с диска:
<syntaxhighlight lang="bash"># cp /var/lib/tftpboot/images/ALT/syslinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
</syntaxhighlight>}}-->
Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default}}.
Правим следующей командой:
<pre># mcedit /var/lib/tftpboot/pxelinux.cfg/default</pre>
<syntaxhighlight lang="cfg">
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
</syntaxhighlight>
Где:
{{Note|Тут нам нужно обратить внимание на следующие параметры:
*в kernel указывается путь {{path|images/ALT/boot/vmlinuz}}
*в initrd указывается путь {{path|images/ALT/boot/initrd.img}}
*server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
*directory - путь {{path|<nowiki>directory:/ALT</nowiki>}} - потому что мы указываем путь относительно {{path|/var/lib/tftpboot/images}}
*stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться
}}
Содержимое файла {{path|/var/lib/tftpboot/pxelinux.cfg/default.msg}}.
Правим следующей командой:
<pre># mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg</pre>
<syntaxhighlight lang="cfg">
Type one of:
1    - install ALT
</syntaxhighlight>
===== Настройка установки в UEFI =====
Копируем файлы загрузчика shimx64.efi и grubx64.efi в каталог, указанный в конфигурации TFTP:
<syntaxhighlight lang="bash"># cp /usr/lib64/efi/shimx64.efi /var/lib/tftpboot
# cp /usr/lib64/efi/grubx64.efi /var/lib/tftpboot</syntaxhighlight>
Создаем файл конфигурации загрузчика по умолчанию grub.cfg в {{path|/var/lib/tftpboot}}.
{{note|Можно взять файл с диска:
<syntaxhighlight lang="bash"># cp /var/lib/tftpboot/images/ALT/boot/grub/grub.cfg /var/lib/tftpboot/
# chmod 644 /var/lib/tftpboot/grub.cfg
</syntaxhighlight>}}
Пример файла {{path|/var/lib/tftpboot/grub.cfg}}:
<syntaxhighlight lang="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
}
}
</syntaxhighlight>
{{Note|Тут нам нужно обратить внимание на следующие параметры:
*в linux указывается путь {{path|/images/ALT/boot/vmlinuz}}
*server - Адрес компьютера с PXE-сервером (см. таблицу в начале)
*directory - путь {{path|/var/lib/tftpboot/images}} будет указан в настройках FTP-сервера позднее, а сейчас мы указываем каталог с ОС - {{path|/ALT}} - путь в который мы распаковали образ ALT Linux.
*stagename - имя большого файла, содержащего ФС образа ALT Linux, в Starterkits это live, в других он может отличаться
*в initrd указывается путь {{path|/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_1.png]]
[[Файл:PXE_ALT_bug_2_2.png|PXE_ALT_bug_2_2.png]]
{{Note|Проверьте IP-адрес FTP-сервера в файле {{path|/var/lib/tftpboot/pxelinux.cfg/default}} или {{path|/var/lib/tftpboot/grub.cfg}}}}
Проверьте в следующих строчках загрузчиков параметр {{path|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|PXE_ALT_bug_1.png]]
Проверьте в файле {{path|/var/lib/tftpboot/pxelinux.cfg/default}} что в строке:
<syntaxhighlight lang="bash">
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
</syntaxhighlight>
'''v1 - Каталог с системой'''
{{Note|Слеш перед указанной папкой обязателен}}
Параметр:
directory:
Должен быть прописан как:
directory:/ALT
А не просто:
directory:ALT
В противном случае загрузчик не найдет каталог с системой.
'''v2 - Файл образа'''
{{Note|Указанный в stagename файл зависит от выбранного вами образа}}
Параметр:
stagename=
В примере он прописан как:
stagename=live
Но, в разных дистрибутивах файл образа может иметь разные названия. Ориентируйтесь на файл с большим объемом в [[#Файловая_часть|файловой части]].
'''v3 - неверный путь stage'''
[[Файл:PXE_ALT_bug_2.png|PXE_ALT_bug_2.png]]
{{Note|В '''directory''' должна указываться папка относительно {{path|/var/lib/tftpboot/images}} }}
Если у вас файлы образа лежат в {{path|/var/lib/tftpboot/images/ALT}}, то в параметре {{path|directory:}} вы должны указать:
*не полный путь - {{path|/var/lib/tftpboot/images/ALT}}
*не путь относительно {{path|tftpboot}} - {{path|/images/ALT}}
А путь относительно {{path|images}} - {{path|/ALT}}
====Развертывание LiveCD ReactOS====
Для дополнительной практики или может кому-то пригодится для дела, мы попробуем развернуть RAM-образ ReactOS.
=====Публикация образа=====
Скачиваем LiveCD образ - https://reactos.org/getbuilds/
Получаем файл вида {{path|reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z}}
Например, образ скачан в {{path|~/Загрузки/reactos-livecd-0.4.15-dev-7932-g5658281-x86-gcc-lin-dbg.7z}}.
Переходим в каталог и извлекаем
<syntaxhighlight lang="bash">
$ cd ~/Загрузки/
$ 7z x reactos-livecd-*.7z
</syntaxhighlight>
Переименовываем
<syntaxhighlight lang="bash">
$ mv reactos-livecd-*.iso reactos-livecd.iso
</syntaxhighlight>
Копируем образ в хранилище:
<syntaxhighlight lang="bash">
# cp ~/Загрузки/reactos-livecd.iso /var/lib/tftpboot/
</syntaxhighlight>
Разрешите всем на чтение (без этого у меня зависало на загрузке):
<syntaxhighlight lang="bash">
# chmod 444 '/var/lib/tftpboot/reactos-livecd.iso'
</syntaxhighlight>
===== Настройка для загрузки в Legacy =====
Правим файл:
<syntaxhighlight lang="bash">
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
</syntaxhighlight>
Заменяем все на строки:
<syntaxhighlight lang="cfg">
  kernel chain.c32
  append file=freeldr.sys seg=0x0F80 keeppxe
</syntaxhighlight>
Копируем файл загрузчика syslinux:
<syntaxhighlight lang="bash">
# cp /usr/lib/syslinux/chain.c32 /var/lib/tftpboot/
</syntaxhighlight>
Копируем файлы загрузчика freeldr:
<syntaxhighlight lang="bash">
# 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
</syntaxhighlight>
Содержимое файла freeldr.ini по адресу {{path|/var/lib/tftpboot/freeldr.ini}} заменяем на следующее содерждимое:
<syntaxhighlight lang="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
</syntaxhighlight>
Правим меню PXE:
<syntaxhighlight lang="bash">
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
</syntaxhighlight>
<syntaxhighlight lang="ini">
Type one of:
2    - ReactOS
</syntaxhighlight>
Настраиваем загрузчик PXE:
<syntaxhighlight lang="bash">
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
</syntaxhighlight>
<syntaxhighlight lang="cfg">
timeout 120
prompt 1
default 2
display pxelinux.cfg/default.msg
label 2
  kernel chain.c32
  append file=freeldr.sys seg=0x0F80 keeppxe
</syntaxhighlight>
Перезапускаем xinetd:
<syntaxhighlight lang="bash">
# systemctl restart xinetd
</syntaxhighlight>
=====Ошибки=====
======Образ загружается очень медленно======
Честно, не знаю с чем это связано. Мне помог перезапуск служб.
<syntaxhighlight lang="bash">
# systemctl restart xinetd tftp.socket vsftpd.socket
</syntaxhighlight>
==== Общие файлы ====
Файлы конфигурации, если вы хотите "все".
<syntaxhighlight lang="bash">
# mcedit /var/lib/tftpboot/pxelinux.cfg/default.msg
</syntaxhighlight>
<syntaxhighlight lang="ini">
Type one of:
1    - ALT Linux
2    - ReactOS
</syntaxhighlight>
<syntaxhighlight lang="bash">
# mcedit /var/lib/tftpboot/pxelinux.cfg/default
</syntaxhighlight>
<syntaxhighlight lang="cfg">
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
</syntaxhighlight>
<syntaxhighlight lang="bash">
# systemctl restart xinetd
</syntaxhighlight>
=== Настройка FTP ===
# Устанавливаем FTP-сервер:
#: <syntaxhighlight lang="bash"># apt-get install vsftpd</syntaxhighlight>
# Редактируем файл {{path|/etc/xinetd.d/vsftpd}} и убеждаемся что FTP-сервер включен:
#: <syntaxhighlight lang="ini">disable = no</syntaxhighlight>
# Перезапускаем сервис xinetd:
#: <syntaxhighlight lang="bash"># systemctl restart xinetd</syntaxhighlight>
# Создаем ссылку с {{path|/var/ftp}} на {{path|/var/lib/tftpboot/images}}:
#: <syntaxhighlight lang="bash">
# rm -f /var/ftp
# ln -s /var/lib/tftpboot/images /var/ftp
</syntaxhighlight>
==Файловая часть==
Чтобы понять, что где лежит, опишу структуру каталогов:
<pre>
/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
</pre>
==Сама загрузка==
*Вы включаете компьютер (который подключен к той же сети что и PXE-сервер).
*Выбираете загрузку по PXE
*Компьютер получает с него адрес
*Появляется меню загрузчика
*Вы выбираете пункт и система загружается по сети как и с CD/DVD флешки
*Вы работаете в LiveCD/устанавливливаете с установщика
{{Category navigation|title=Начинающему системному администратору|category=Начинающему системному администратору|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Начинающему системному администратору|category=Начинающему системному администратору|sortkey={{SUBPAGENAME}}}}

Текущая версия от 17:01, 2 мая 2024

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

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

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

Многие компьютеры и серверы поддерживают установку системы не только с 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/устанавливливаете с установщика