Назад | Перейти на главную страницу

Бесплатный загрузочный сервер PXE для Windows или OS X

В OS X (леопард, а не сервер), похоже, есть tftp и какой-то встроенный DHCP-сервер, которого, кажется, было бы достаточно для загрузки PXE, но я действительно не знаю, с чего начать. У меня также есть рабочие станции с Windows (XP и 7).

Я бы предпочел быстрые и грязные решения надежным, поскольку это всего лишь временная мера, пока я снова не запустил свой сервер debian. :-)

Я пытался установить Arch linux на настольный компьютер через свой ноутбук с macOS. Это немного сложно, но вы можете сделать это с помощью MacOS bootpd (комбинированный BOOTP и DHCP) и tftp-серверов.

Сначала загрузите iPXE образ сетевой загрузки для вашего дистрибутива, в моем случае ipxe.pxe в арочные релизы:

wget https://www.archlinux.org/static/netboot/ipxe.8da38b4a9310.pxe

Теперь подключите вашу систему macOS к клиентскому компьютеру, на котором вы хотите установить загрузку PXE. Я использовал кабель Ethernet от моего порта thunderbolt, который оставил WiFi моего ноутбука подключенным к Интернету.

Затем установите ручной IP-адрес в MacOS -> клиентский интерфейс. Выберите свой интерфейс в сетевых настройках и укажите IP-адрес вручную. 192.168.2.254 и при необходимости использовать подсеть 255.255.255.0.

На этом этапе я включил Совместное использование Интернета в Системные настройки, который создает мостовой адаптер между Wi-Fi и Ethernet. Важно, чтобы клиентский компьютер уже был подключен, иначе /etc/bootpd.plist файл конфигурации не будет создан правильно.

Теперь скопируйте образ сетевой загрузки в корневой каталог tftp-сервера. По умолчанию это каталог, принадлежащий пользователю root с полными правами чтения в /private/tftpboot. Скопируйте образ сетевой загрузки в этот каталог:

sudo cp ipxe.8da38b4a9310.pxe /private/tftpboot

Затем вы должны изменить файл конфигурации сервера bootpd, чтобы он указывал на образ сетевой загрузки и сервер tftp. Сначала вам нужно закодировать имя файла образа сетевой загрузки как base64, что можно сделать следующим образом:

printf %s00 `echo -n ipxe.8da38b4a9310.pxe | xxd -p` | xxd -r -p | openssl base64

Теперь откройте файл конфигурации вашего сервера bootpd.

sudo nano /etc/bootpd.plist

и добавьте свой статический IP-адрес и имя файла в кодировке base64 в конец <subnet> <array> <dict>:

<key>dhcp_option_66</key>
<string>192.168.2.254</string>
<key>dhcp_option_67</key>
<data>aXB4ZS44ZGEzOGI0YTkzMTAucHhlAA==</data>

Мой bootpd.plist теперь выглядело так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Subnets</key>
    <array>
        <dict>
            <key>_creator</key>
            <string>com.apple.NetworkSharing</string>
            <key>allocate</key>
            <true/>
            <key>dhcp_domain_name_server</key>
            <array>
                <string>192.168.2.1</string>
            </array>
            <key>dhcp_router</key>
            <string>192.168.2.1</string>
            <key>interface</key>
            <string>bridge100</string>
            <key>lease_max</key>
            <integer>86400</integer>
            <key>lease_min</key>
            <integer>86400</integer>
            <key>name</key>
            <string>192.168.2/24</string>
            <key>net_address</key>
            <string>192.168.2.0</string>
            <key>net_mask</key>
            <string>255.255.255.0</string>
            <key>net_range</key>
            <array>
                <string>192.168.2.2</string>
                <string>192.168.2.254</string>
            </array>
            <key>dhcp_option_66</key>
            <string>192.168.2.254</string>
            <key>dhcp_option_67</key>
            <data>aXB4ZS44ZGEzOGI0YTkzMTAucHhlAA==</data>
        </dict>
    </array>
    <key>bootp_enabled</key>
    <false/>
    <key>detect_other_dhcp_server</key>
    <array>
        <string>bridge100</string>
    </array>
    <key>dhcp_enabled</key>
    <array>
        <string>bridge100</string>
    </array>
    <key>dhcp_ignore_client_identifier</key>
    <true/>
    <key>ignore_allow_deny</key>
    <array>
        <string>bridge100</string>
    </array>
    <key>use_server_config_for_dhcp_options</key>
    <false/>
</dict>
</plist>

Теперь перезапустите / включите сервер MacOS bootpd и tftp, запустив:

sudo launchctl unload -w /System/Library/LaunchDaemons/{bootps,tftp}.plist
sudo launchctl load -w /System/Library/LaunchDaemons/{bootps,tftp}.plist

Теперь вы должны протестировать свой tftp-сервер, подключившись локально и загрузив образ сетевой загрузки:

tftp localhost
tftp> get ipxe.8da38b4a9310.pxe
Received 343580 bytes in 0.1 seconds
tftp> quit

Теперь загрузите свою клиентскую систему с включенным PXE, и она должна найти ваш DHCP-сервер macOS (через bootpd), назначить IP-адрес, найти TFTP-сервер, передать и запустить образ сетевой загрузки! Успех!

Чтобы отключить серверы bootpd и tftp после того, как вы закончите:

launchctl unload -w /System/Library/LaunchDaemons/{bootps,tftp}.plist

IIRC, для создания среды загрузки PXE дома я использовал:

Кажется, что Tftpd32 также включает в себя DHCP-сервер, и я не помню точно, почему вместо этого использовал Small HTTP-сервер.