iPXE — заливка linux, windows, утилит по сети

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Предисловие

Полагаю буду следующим в серии статей-альтернатив:

  1. Раз!

  2. Два!

Раньше у нас использовалась заливка ОС по PXE с использованием syslinux, но как бывает с самодостаточными системами и без достаточного контроля и внимания - быстро превратилась в кашу из конфигураций, библиотек, загрузчиков.

Так же была необходимость в поддержке заливки разных ОС в режиме EFI - на тот момент заливка была только в Legacy.

В желании разобраться в этом наследстве, упростить и облегчить добавление новых образов в список, я познакомился с iPXE.

Оглавление

  1. Подготовка стендового сервера

  2. Сборка загрузчиков

  3. Написание меню загрузки

  4. Добавление образов debian, windows, утилит

  5. Итог

1. Подготовка стенда

Раздел частично отсылает к Загрузочный сервер — как загрузочная флешка..., первичная подготовка схожа - для базы используется чистый Debian Bullseye, но думаю, использование другого дистрибутива не будет сильно отличаться.

Дано

  • VM VirtualBox

    • Ram: 1 Гб

    • VDI: 8Gb

    • CPU: 1 Core

    • Network: - NAT, подсеть 10.0.2.0, без DHCP, шлюз 10.0.2.1

  • Debian 11.4

Необходимо установить:

  1. TFTP

  2. Samba

  3. Apache2

  4. DHCP

1.1. TFTP

Используется для загрузчиков и ipxe скриптов:

apt install tftpd-hpa

Вношу изменения в /etc/default/tftpd-hpa:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp" # путь к папке tftp
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -l -vvv -r blksize -m /etc/tftpd.remap"

Замена слешей Windows на Linux /etc/tftpd.remap:

rg \\ /

Оглавление Начало раздела

1.2. Samba

Используется для установки Windows-образов, в процессе монтируя папку образа, как диск:

apt install samba

В конце /etc/samba/smd.conf добавил:

[images]
comment = images
path = /srv/tftp/images
create mask = 0660
directory mask = 0771
writable = yes
guest ok = yes
browseable = yes
locking = no
public = yes

Создал папку, выдал права, перезапустил samba:

mkdir /srv/tftp/images
chmod 777 /srv/tftp/images
service smbd restart

Оглавление Начало раздела

1.3. Apache2

Используется для загрузки образа WinPE, Linux и прочих данных по протоколу HTTP (быстрее TFTP):

apt install apache2

Настройки на стенде по умолчанию, в папке /var/www/html/ создаю директории:

  • /images/ - для папок ОС

  • /photo/ - для фонов меню, но не обязательно

mkdir -p /var/www/html/images/photo

Оглавление Начало раздела

1.4. DHCP-сервер

Выдает IP адреса в сети. Для настройки iPXE на Windows Server лучше обратиться к документации.

apt install isc-dhcp-server

Задаю статический IP адрес для стенда.

/etc/network/interfaces:

allow-hotplug ens0s3
iface ens33 inet static
address 10.0.2.5
netmask 255.255.255.0
broadcast 10.0.2.255
network 10.0.2.0
gateway 10.0.2.1

Назначаю интерфейс для прослушивания запросов.

/etc/default/isc-dhcp-server:

INTERFACESv4="enp0s3"

Формирую DHCP подсеть и добавляю ключи для загрузки с iPXE.

/etc/dhcp/dhcpd.conf:
option domain-name "local.loc";
option domain-name-servers 10.0.2.1;
# Переменная для определения архитектуры клиента:
option arch code 93 = unsigned integer 16;
# Объявляю пространство имен для ipxe
option space ipxe;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
# Возможность получать клиентам IP-адреса
authoritative;
# Выделение подсети
subnet 10.0.2.0 netmask 255.255.255.0 {
range 10.0.2.100 10.0.2.200;
option domain-name-servers 10.0.2.1;
option domain-name "local.loc";
option routers 10.0.2.1;
option broadcast-address 10.0.2.255;
default-lease-time 600;
max-lease-time 7200;
}
# Отключение задержки в iPXE ожидания прокси DHCP.
# Экономит пару секунд.
option ipxe.no-pxedhcp = 1;
# Используя ранее установленную переменную,
# в зависимости от режима загрузки клиента,
# идет выбор, какой загрузчик отправить клиенту:
if option arch != 00:00 {
filename "ipxe.efi";
} else {
filename "undionly.kpxe";
}
# Установка корневой директории с загрузчиками и конфигурациями
next-server 10.0.2.5;
option tftp-server-name "10.0.2.5";
option root-path "tftp://10.0.2.5:/srv/tftp/";

На всякий случай проверяю синтаксис конфигурации на ошибки:

dhcpd -t -cf /etc/dhcp/dhcpd.conf

Если всё хорошо, указания ошибок в выводе не будет:

Internet Systems Consortium DHCP Server 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid

Документация:

  1. Настройка DHCP для PXE

  2. Отдача нужного загрузчика, в зависимости от режима загрузки - Legacy/UEFI

  3. Список кодов DHCP сервера

Оглавление Начало раздела

2. Сборка загрузчиков iPXE

В данном разделе будет:

  1. Загрузка пакетов

  2. Скрипт стартовой настройки

  3. Сборка загрузчиков

Оглавление

2.1. Загрузка пакетов

После настройки и проверки стенда, необходимо собрать из исходного кода загрузчики iPXE для режимов Legacy и UEFI.

Обязательно потребуется установить зависимости:

  • gcc

  • binutils

  • make

  • perl

  • liblzma или xz header files

  • mtools

apt install gcc binutils make perl liblzma-dev mtools git

Скачиваю архив кода iPXE, либо клонирую репозиторий. Захожу во внутрь:

git clone git://git.ipxe.org/ipxe.git
cd ipxe/src/

Большинство возможностей iPXE по умолчанию закомментировано и при сборке бинарников, будет недоступно. Полный перечень функций указан тут, перебирая разделы можно выбрать, что нужно и где включить.

В текущем случае нужно:

  • в файле config/gereral.h раскомментировать строки с CONSOLE_CMD, IMAGE_PNG для команд консоли и png картинок.

  • в файле config/console.h раскомментировать строку с CONSOLE_FRAMEBUFFER, тоже для картинок.

Оглавление Начало раздела

2.2. Скрипт стартовой настройки

После загрузки iPXE от DHCP появится приглашение командной строки iPXE. Дальше нужно будет получить ip и начать загрузку скрипта меню. Чтобы этого не делать вручную, можно встроить базовый скрипт в сам бинарник.

Создаю скрипт start.ipxe (имя значения не имеет). Перечень, возможных команд.

#!ipxe
:start
# Механизм получения ip. В случае ошибки - предлагает нажать "s" для запуска командной строки.
# Иначе - начать снова.
dhcp && goto next || prompt --key s --timeout 1500 Press "s" for the iPXE command line... && shell || goto start
:next
# Случае успеха - загрузить "меню" с tftp-сервера (о нём - позже).
chain tftp://10.0.2.5/boot.ipxe

Оглавление Начало раздела

2.3. Сборка загрузчиков

Внимание! Строка имени файла является и его целевой конфигурацией, т.е. какое имя будет выбрано, для той платформы и будет сборка. В ключе EMBED= указывается имя ранее созданного скрипта.

Так же в случае ошибок при сборке, необходимо добавить ключ -fno-pie в Makefile.housekeeping на 451 строке. Предполагается, что это из-за ошибок в gcc.

make bin-i386-efi/ipxe.efi EMBED=start.ipxe
make bin-i386-pcbios/undionly.kpxe EMBED=start.ipxe

Копирую полученные загрузчики в папку tftp PXE сервера

cp bin-i386-efi/ipxe.efi /srv/tftp/
cp bin-i386-pcbios/undionly.kpxe /srv/tftp/

Оглавление Начало раздела

3. Написание меню загрузки

Оглавление

Ранее, в загрузчики был встроен скрипт, который в случае успешного получения ip, загружал и запускал скрипт boot.ipxe.

Создаю его по пути /srv/tftp/boot.ipxe:
#!ipxe
# Глобальные параметры
set pass pAsWoRd                    # Установка пароля на вход в iPXE
set httpServer http://10.0.2.5:80 # Задание адреса HTTP сервера
set menu-timeout 10000 # таймаут выхода из меню
#############################

########## Графика ##########

# Меняю цвет фона на серый
colour --rgb 0x999999 6

# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон букв - прозрачный
cpair -f 0 -b 4 0

# Фоновое изображение и рамка
# ${platform} - переменная iPXE, определяет в каком режиме загружен клиент- pcbios или efi
# Задаю параметры окна, картинку фона (загрузив её по http)
console -l 32 -r 32 -t 32 -b 32 -k --x 1024 --y 768 -d 24 -p {platform}.png

# После установки фона, удаляю картинку из памяти -
# иначе она ломает wimboot загрузку WinPE
imgfree ${platform}.png
#########################

:login
# Запрашивается пароль. Если будет нажат Ctrl+C или Esc будет выход и загрузка с диска
# В идеале, можно использовать для авторизации в сервисах, но в данном случае играет роль заглушки
login || goto cancel

#Если пароль верен, перейти "дальше"-к меню загрузок, иначе - таймаут 5 секунд и повторный запрос пароля
iseq ${password} ${pass} && goto next || goto error_pass

:error_pass
echo Error password. Repeat after 5 seconds
sleep 5
goto login

:cancel
echo You change "Exit". Boot from disk...
sleep 1
exit

# Переход к файлу с меню
:next
chain --replace --autofree menu.ipxe

По пути /var/www/html/images/photo/ кладу подготовленные pcbios.png и efi.png размера 1024х768. В зависимости от того, в каком режиме запустится ПК, у меня всегда будет подсказка на самом фоне меню:

картинки меню

Cоздаю меню загружаемых ОС и утилит.

/srv/tftp/menu.ipxe
#!ipxe
# После предыдущего скрипта, настройки остаются прежними,
# потому переопределяю их, чтобы было видно текст

######## Графика ########

# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон-прозрачный
cpair -f 0 -b 4 0

# Нормальный текст (индекс 1)
# Буквы - черный, фон - прозрачный
cpair -f 0 -b 4 1

# Разделители (индекс 3)
# Буквы - красный, фон - прозрачный
cpair -f 1 -b 4 3

#########################

######## Главное меню ########

# На данный момент "всё в одном", но можно разделить как по разным меню, так и по разным файлам
:start

# Составляю меню
https://ipxe.org/cmd/menu
menu iPXE boot menu
item -k e exit (E)xit and boot from disk
item
item --gap -- -------- Windows Images --------
item -k a win10manager2021 Windows 10 M(a)nager 2021
item
item --gap -- -------- Debian Images --------
item debian11 Debian 11 Bullseye
item
item --gap -- -------- Acronis Images --------
item acronis2021x64 Acronis 2021 64-bit
item

# Для режима Legacy, добавляю утилиты использующие Memdisk
iseq ${platform} pcbios && item --gap -- -------- BIOS Utilites -------- ||
iseq ${platform} pcbios && item memtest Memtest86+ (v5.31) ||
iseq ${platform} pcbios && item mhdd Mhdd (v4.6) ||
iseq ${platform} pcbios && item hddtolls HDDtools ||
iseq ${platform} pcbios && item victory Victory ||
iseq ${platform} pcbios && item diskGenius DiskGenius (disk diagnostics) ||
iseq ${platform} pcbios && item ||

item --gap -- -------- iPXE Utilites --------
item -k c config Start interactive (c)onfiguration tool
item -k s shell Start (S)hell iPXE

choose -d exit -t ${menu-timeout} selected
goto ${selected}

########
# Пункты меню
# В среднем состоят из трёх пунктов:
# kernel - передаю ядро linux и аргументы для запуска
# initrd - пакет данных для ядра
# boot - команда передачи управления ядру linux

########
:debian11
# В данном случае, в kernel передаётся ссылка linux ядра на http-сервере и аргументы запуска
kernel {httpServer}/images/bullseye/install.amd/pxe_${platform}_preseed.cfg netcfg/dhcp_failed=note netcfg/dhcp_options="Retry network autoconfiguration" netcfg/get_domain=  --- quiet initrd=initrd.gz

# так же, ссылкой на http, передается пакет данных для ядра
initrd ${httpServer}/images/bullseye/install.amd/initrd.gz

# команда передачи управления ядру linux и в случае ошибки - переход к обоку обработки ошибок
boot || goto error
goto start

# Разбор файлов для linux - будет ниже
:win10manager2021
# wimboot - загрузчик .wim файлов установщика Windows, который сам патчит BCD, запускает установку и подтягивает скрипты запуска
# https://ipxe.org/wimboot
kernel wimboot
###########################################
# Неизменный блок для любого образа Windows
###########################################
initrd ${httpServer}/images/winpe/Boot/BCD BCD           # Стандартный BCD WinPE
initrd ${httpServer}/images/winpe/Boot/boot.sdi boot.sdi # Стандартный boot.sdi WinPE
initrd ${httpServer}/images/winpe/boot.wim boot.wim      # Стандартный boot.wim
initrd configWPE/winpeshl.ini winpeshl.ini               # Конфиг запускающий скрипт установки.
###########################################

# Изменяемые данные в зависимости от образа
initrd configWPE/win10manager2021/install.bat install.bat   # Скрипт установки образа
boot || goto error

goto start
#############################
# Утилиты загружаемые с iPXE
#############################
# Acronis images

:acronis2021x64
kernel ${httpServer}/images/utils/acr2021/dat10.dat initrd=dat11.dat initrd=dat12.dat vga=vesa MBRCRCS force_modules=usbhid quiet
initrd ${httpServer}/images/utils/acr2021/dat11.dat
initrd ${httpServer}/images/utils/acr2021/dat12.dat
boot || goto error
goto start
# Утилиты загружаются через Memdisk и доступны только для BIOS режима

:memtest
kernel memdisk || goto error
initrd ${httpServer}/images/utils/memtest86+-5.31b.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:victory
kernel memdisk || goto error
initrd ${httpServer}/images/utils/vcr35r.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:mhdd
kernel memdisk || goto error
initrd ${httpServer}/images/utils/mhdd32ver4.6.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:hddtools
kernel memdisk || goto error
initrd ${httpServer}/images/utils/hddtools.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:diskGenius
kernel memdisk || goto error
initrd ${httpServer}/images/utils/DiskGenius.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

# Интерактивное меню редактирования конфигурация iPXE и сетевой карты
:config
config
goto start

# Командная строка iPXE
:shell
shell
goto start

:exit
echo Boot from disk...
sleep 2
exit

# При ошибках выход на командную строку
:error
echo Failed - have error
sleep 1
goto shell
##############################

Оглавление Начало раздела

4. Добавление образов Linux, Windows, утилит

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

Разберу примеры:

  1. Linux

  2. Windows

  3. Утилиты

Оглавление

4.1. Добавление Linux

На стенде создаю папки:

mkdir -p /var/www/html/images/bullseye/install.amd # Для загрузчика, файлов ответа
mkdir -p /var/www/html/images/bullseye/postinstall # Для скриптов и пакетов пост-установки. Скачиваться будут благодаря команде в файле ответов
cd /var/www/html/images/install.amd/

Скачиваю ядро и пакет данных linux:

wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz

Скачиваю драйвера и встраиваю их в пакет ядра:

[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
[ -f firmware.cpio.gz ] || wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/firmware.cpio.gz
cat initrd.gz.orig firmware.cpio.gz > initrd.gz

Создаю 2 файла ответов для debian-installer:

  • pxe_efi_preseed.cfg с разметкой диска под UEFI

  • pxe_pcbios_preseed.cfg с разметкой диска под Legacy

Кладу их по пути /var/www/html/bullseye/install.amd/:

[drwxr-xr-x 4.0K]  bullseye
├── [drwxr-xr-x 4.0K]  install.amd
│   ├── [-rw-r--r-- 138M]  initrd.gz
│   ├── [-rw-r--r-- 6.5M]  linux
│   ├── [-rw-r--r--  15K]  pxe_efi_preseed.cfg
│   └── [-rw-r--r--  15K]  pxe_pcbios_preseed.cfg
└──[drwxr-xr-x 4.0K]  postinstall
Если сейчас попытаться загрузить linux, то все получится

Оглавление Начало раздела

4.2 Добавление Windows

Установки Windows через PXE как тачка на прокачку:

  • Запускаем PXE ->

  • Передаём управление iPXE ->

  • Передаём управление wimboot ->

  • Передаем управление WinPE ->

  • Устанавливаем Windows

Оглавление

Но по порядку.

  1. Для установки Windows понадобится wimboot - загрузчик для wim образов. Умеет патчить BCD, работать с HTTP, переиспользовать память и т.д.

Скачиваю последнюю стабильную версию и кладу рядом с другими загрузчиками /srv/tftp/wimboot

  1. Следом понадобится чистый WinPE, а именно его

    • winpe/media/Boot/BCD

    • winpe/media/Boot/boot.sdi

    • winpe/media/sources/boot.wim

Для использования его как "оболочки" для запуска установки Windows.

Их необходимо будет распаковать в /var/www/html/images/winpe/

  1. В каталог /srv/tftp/images/win10setup/ распаковываю образ установочного диска Windows и создаю там каталог wims - в неё будут складываться пакеты .wim образов и файлы ответов.

  2. В неё кладу заранее подготовленные:

    • win10manager2021.wim - пакет корпоративного образа

    • autounattend_bios_manager.xml и autounattend_efi_manager.xml - файлы ответов к нему для UEFI и Legacy режимов.

  3. Создаю каталоги:

    • /srv/tftp/configWPE/ - для складывания в него настроек для разных образов (по аналогии с Bullseye)

    • /srv/tftp/configWPE/win10manager2021/ - для непосредственно скрипта установки

  4. Создаю файл /srv/tftp/configWPE/winpeshl.ini - конфигурация, которая передаваемая ядру и которая указывает, какой скрипт выполнить при запуске:

[LaunchApps]
"install.bat"
  1. Создаю сам файл:

/srv/tftp/configWPE/win10manager2021/install.bat
@echo off
echo wpeinit start

:: Инициализация среды WinPE
wpeinit

:: Задержка для гарантированного запуска сетевой карты и получение IP
echo We are waiting for 15 seconds for the network card to start
ping -4 -n 15 -w 1000 "">nul
ipconfig /renew

echo
echo wait 5 second pre-mount share folder with distr
ping -4 -n 5 1000 "">nul

::Монтирование каталога с установщиком Windows
net use Y: \10.0.2.5\images\win10setup /user:anonymous anonymous

:: Получение информации, в каком режиме запущен пк - UEFI или Legacy
echo check boot-mode
wpeutil UpdateBootInfo
for /f "tokens=2* delims=        " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B

:: В зависимости от режима выше - выбор нужного образа установки и файла ответов
echo start Setup win10
if %Firmware%==0x1 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_bios_manager.xml /installfrom:Y:\wims\win10manager2021.wim
if %Firmware%==0x2 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_efi_manager.xml /installfrom:Y:\wims\win10manager2021.wim
cmd.exe

При проверке установка успешно запускается (с ошибкой в конце, что на VM мало места, но не суть):

Картинка

По итогу получается:

Дерево каталогов
# Web-сервер
images
├── bullseye         # Файлы образа Linux
│   ├── install.amd/ # Ядро и файлы ответов
│   └── postinstall/ # Скрипты и пакеты для пост-установки
├── photo            # Необязательный каталог для фонов меню
│   ├── efi.png
│   └── pcbios.png
└── winpe            # Файлы для запуска WinPE
    ├── BCD
    ├── boot.sdi
    └── boot.wim
Tftp/Samba-серва
tftp
├── boot.ipxe            # Установка переменных среды iPXE
├── configWPE            # Хранилище конфигураций образов Windows
│   ├── win10manager2021
│   │   └── install.bat  # Скрипт запуска установки, где меняются samba пути
│   └── winpeshl.ini     # Общая для всех конфигурация, запускающая скрипт установки
├── images
│   └── win10setup       # Каталог стандартного установочного диска Windows
│       ├── autorun.inf
│       ├── boot/
│       ├── bootmgr/
│       ├── bootmgr.efi
│       ├── efi/
│       ├── setup.exe
│       ├── sources/
│       ├── support/
│       └── wims/        # Пакеты *.wim и файлы ответов
│           ├── autounattend_bios_manager.xml
│           ├── autounattend_efi_manager.xml
│           └── win10manager2021.wim
├── ipxe.efi             # Загрузчик для UEFI
├── menu.ipxe            # Меню iPXE
├── undionly.kpxe        # Загрузчик для Legacy
└── wimboot              # Загрузчик для Windows

Оглавление Начало раздела

4.3 Утилиты

Для них на Web-сервере создал подкаталог /var/www/html/images/utils/ и складываю либо *.iso образы для запуска через Memdisk, либо передавая в качестве ядра соответствующие файлы (например Acronis)

Оглавление Начало раздела

5. Итог

По итогу получилась система с минимальным количеством файлов для заливки и добавления:

  • 3 загрузчика (Legacy,UEFI,Windows)

  • 3 файл WinPE для Windows

  • По 2-3 файла непосредственно образа

  • По 2 файла ответов на образ

  • По 1 скрипту пост-/установки на образ

  • Простое меню. Если убрать графику, парольную заглушку и оставить TUI - станет еще меньше.

  • Возможность работать с HTTP (..., iSCSI SAN, AoE SAN и т.д.), что ускоряет загрузку.

Оглавление

Ожидаю вашего мнения в комментариях

P.S. Первая статья и тонна мучений с редактором.

  • Использую Firefox, при нажатии на "/" в большинстве случаев ничего не появляется, либо стало появляться только после отключения всех AdBlock-еров.

  • Предпросмотра для ссылок нет - перепроверить ссылки внутри статьи не могу

  • В плане оформления помог плагин Unotes который конвертировал мой markdown в WYSIWYG, но потом вносил коррективы. Если что-то не будет работать - буду исправлять по мере обнаружения.

Источник: https://habr.com/ru/post/681142/


Интересные статьи

Интересные статьи

Идея этого поста - шпаргалка на будущее, но я буду рад, если кому-то пригодится приведенная информация.Если Вы читаете это, значит примерно представляете, что такое Ring. В этом посте речь только об а...
Что-то давно ничего не было слышно от Starlink, компании глобального спутникового интернета. Спутники перестали запускать, без объяснения причин, да и вообще вроде как работа компании чуть затихла. ...
О развертывании DWDM сети на примере одной крупной финансовой организации которая, устав от частых сетевых сбоев на арендованных каналах связи, и исходя из собственных пл...
Холивар. История рунета. Часть 1. Начало: хиппи из Калифорнии, Носик и лихие 90-е Холивар. История рунета. Часть 2. Контркультура: пАдонки, марихуана и Кремль Холивар. История рунета. Часть 3. ...
Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, нат...