Серверы с AMD Ryzen – Супер распродажа! AMD Ryzen 9950X / 7950X, 16 ядер / 4.5 ГГц и 128 ГБ RAM + NVME SSD ⭐ от 10 000 руб. ⭐ Европа и США.
Серверы
  • Готовые серверы
  • Конфигуратор
  • Серверы с 1CPU
  • Серверы с 2CPU
  • 4 поколение AMD EPYC
  • Серверы с AMD Ryzen от 10000 руб.
  • Серверы для хранения данных
  • Cерверы с портом 10 Гбит/c
  • Премиальные серверы
  • Серверы с большим объемом RAM
  • GPU
  • Распродажа
  • VPS
  • VPS / VDS серверы
  • Хостинг с ispmanager
  • GPU
  • Выделенные серверы с GPU
  • Виртуальные серверы с GPU
  • GPU-серверы с Nvidia RTX 5090
  • GPU-серверы с Nvidia RTX 6000 PRO
  • GPU-серверы с AMD Radeon
  • Распродажа
    Маркетплейс
  • Все предустановленные приложения
  • Хостинг с ispmanager
  • Хостинг с Jitsi
  • Хостинг с WordPress
  • Хостинг с n8n Community Edition
  • Персональный AI-чат-бот
  • Colocation
  • Размещение серверов в дата-центре в Москве
  • Обслуживание серверов в других ЦОД
  • Прокат
    Услуги
  • Аренда сетевого оборудования
  • Защита L3-L4 от DDoS атак
  • IPV4 и IPV6 адреса
  • Администрирование серверов
  • Уровни технической поддержки
  • Мониторинг сервера
  • BYOIP
  • USB диск
  • IP-KVM
  • Трафик
  • Коммутация серверов
  • AI-платформа
  • S3 Объектное хранилище
  • О нас
  • Работа в HOSTKEY
  • Панель управления серверами и API
  • Дата-центры
  • Сеть
  • Тест скорости
  • Специальные предложения
  • Отдел продаж
  • Для реселлеров
  • Гранты для специалистов по Data Science
  • Гранты для научных проектов и стартапов
  • Документация и Частые вопросы
  • Новости
  • Блог
  • Оплата
  • Документы
  • Сообщите о нарушении
  • Looking Glass
  • 01.12.2022

    WindowsPE Live-CD в инфраструктуре Jenkins/Foreman

    server one
    HOSTKEY
    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Автор: DevOps Team Leader компании Hostkey Егор Гараджа

    Мы уже рассказывали об устройстве кухни по сборке LiveCD для Linux на базе Centos/RockyLinux, которую мы используем в компании Hostkey. Пришло время поговорить об устройстве сборки WindowsPE-дистрибутива в Linux-инфраструктуре, автоматизации этого процесса с помощью Jenkins и разворачивании систем на базе MS Windows через этот хэлпер.

    Традиционно PXE-deploy Windows реализуется в рамках общей инфраструктуры Microsoft, включая DHCP/DNS/TFTP и прочие сервисы. В нашей инфраструктуре узловым сервером для развертывания ОС является Foreman, и разворачивать деплойную среду отдельно для Microsoft с самого начала казалось нецелесообразным.

    Много лет назад нами был выбран путь с загрузкой wim-образа WindowsPE через iPXE. Образ собирался на инфраструктуре Microsoft вручную, за кухней следил один человек. С ростом компании и усложнением задач мы решили максимально автоматизировать процессы сборки и управления образом. В это же время перед нами возникла задача по поддержке UEFI-инсталляций, оказавшаяся не такой тривиальной, как можно предположить.

    Автоматизация подготовки образа

    Прежде всего  было необходимо отвязаться от инфраструктуры Microsoft для создания образа. Для этой цели мы решили использовать старый проект wimtools, в данном случае поддержка RedHat-систем находится на хорошем уровне, и мы получили готовый SPEC.

    Этот набор консольных утилит позволяет работать с wim-образами и производить их модификацию. Для подготовки образа WindowsPE нам необходимы:

    • ванильный дистрибутив Windows (например, Windows 10);

    • утилита mkwinpeimg из состава wimtools;

    • стартовый cmd-скрипт для WindowsPE.

    В процессе сборки можно оверлеем добавить произвольную директорию с необходимым набором скриптов и ПО. Мы добавляем в WinPE последнюю версию PowerShell с Github Microsoft, набор скриптов для осуществления установки ОС и ряд утилит, также необходимых для взаимодействия с Foreman.

    Пример команды сборки:

    mkwinpeimg --iso --windows-dir=/mnt/windowsrepo --overlay=./PEAddons --start-script=./startpe.cmd windowspe-${BUILD_NUMBER}.iso

    По пути /mnt/windowsrepo доступен ISO-образ ванильной версии Windows 10, смонтированный как loop-устройство.

    В результате длительной работы с образом у нас сформировалась примерно следующая кухня сборки:

    • Задача Jenkins по сборке wimtools-rpm (мы уже рассказывали, как можно организовать базовую работу с пакетами в инфраструктуре).

    • Задача Jenkins по сборке и доставке на центральный репозиторий WindowsPE ISO-образа.

    • Репозиторий Git, содержащий основной набор скриптов и небольших бинарников для работы внутри образа. Те самые startpe.cmd и директория PEAddons, внутри которой мы выделили директорию для PowerShell, bin — для небольших утилит вроде нашего самописного инструмента на Go для работы с syslog и scripts — для дополнительных скриптов и так далее.

    • Репозиторий для драйверов устройств windows_driver_store, который мы также разместили в Git для версионирования; проблема крупных бинарников решается через LFS.

    • Наше внутреннее зеркало с ванильными дистрибутивами, откуда берется ISO-донор для создания PE-образа. Этот же репозиторий используется уже в процессе установки ОС.

    Все, кроме зеркала с ISO-образами, хранится и версионируется в Git. Такой подход очень важен и удобен, когда над инфраструктурой работает более одного человека.

    Если есть все необходимое в Git и набор Linux-утилит для сборки, задача легко автоматизируется в Jenkins:

    #!/usr/bin/env bash
    
    ssh-agent bash -c "ssh-add $GITLAB_KEY; git clone -b $short_branch git@gitlab.example.com:windows_driver_store.git PEAddons/drivers" 
    wget -nv https://github.com/PowerShell/PowerShell/releases/download/v$PWSHVER/PowerShell-$PWSHVER-win-x64.zip
            
    unzip -qqo PowerShell-$PWSHVER-win-x64.zip -d PEAddons/pwsh/ || true
    rm -rf PowerShell-$PWSHVER-win-x64.zip PEAddons/drivers/.git
    sed "1aecho Starting windowspe-${BUILD_NUMBER}" -i ./startpe.cmd
    
    mkwinpeimg --iso --windows-dir=/mnt/windowsrepo --overlay=./PEAddons --start-script=./startpe.cmd windowspe-${BUILD_NUMBER}.iso

    Скрипты и связка с Foreman

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

    По стандарту WindowsPE стартовым скриптом должен быть startpe.cmd. Это, по сути, обычный bat-файл со всеми ограничениями стандартного shell Microsoft, мы используем его для старта PowerShell-скриптов.

    Первым и основным скриптом является одноименный скрипт getforeman.ps1, его и запускает startpe.cmd (код ниже: PowerShell).

    Главная проблема при организации деплоя Windows через вызов его ISO-образа через iPXE заключается в том, что вы не можете прокинуть внутрь образа никакие параметры, то есть образ внутри себя должен получить достаточную информацию, чтобы затем пойти и получить скрипты на Foreman. Сами скрипты генерируются в процессе деплоя и доступны по ссылкам вида:

    http://foreman.example.com/unattended/provision?token=xxxxxxxx

    То есть нам нужен токен хоста. Токен можно получить у самого Foreman, если знать имя хоста, которое передается в том числе через dhcp самому хосту.

    Для получения этого имени в CLI мы используем утилиту dhcptest.exe:

    $dhcphostname = ( & $env:SystemDrive\bin\dhcptest.exe --mac $netinfo.macaddress --query --print-only 12[str] --quiet )

    Далее мы получаем токен хоста, с помощью запроса к Foreman, который делается через пользователя с правами на просмотр:

    $creds = "$($user):$($foremanpass.$location)"
    $uri = $foremanuri.$location
    
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($creds))
    
    $basicAuthValue = "Basic $encodedCreds"
    
    $Headers = @{
      Authorization = $basicAuthValue
    }
    
    $foremanhostinfo = @{ $location=$(Invoke-RestMethod -Uri "$uri/api/hosts/$dhcphostname" -Headers $Headers -SkipCertificateCheck) }
    $token = $foremanhostinfo.$location.token

    С помощью токена мы можем запросить все необходимые provision-скрипты уже непосредственно с Foreman. Задача решена.

    Дальнейшие задачи связаны уже с организацией процедуры установки на Foreman. Это также обширная тема, особенно учитывая UEFI-деплой, которой мы надеемся посвятить отдельную статью. 

    Важным моментом в такой системе остается вопрос безопасности. Адрес Foreman, ограниченного пользователя для взаимодействия с ним и прочие параметры приходится зашивать непосредственно в скрипт получения информации и при их изменении пересобирать образ. Если вопрос удобства решается сборкой, то безопасность — более тонкая материя. Именно вопрос безопасности заставил нас смотреть в сторону более сложных вариантов установки, исключающих WindowsPE. Тем не менее в непубличных инфраструктурах, нуждающихся в Windows, но не требующих большой инфраструктуры Microsoft для его разворачивания, реализация развертывания систем через WindowsPE может оказаться хорошим вариантом.

    Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

    Другие статьи

    29.10.2025

    Осенние будни DevOps: Debian 13 и Proxmox VE 9.0 в продакшене HOSTKEY

    Новая версия Debian 13 и релиз Proxmox VE 9.0 пришли почти одновременно, вызвав ажиотаж у клиентов. В статье рассказываем, как команда HOSTKEY адаптировала свои процессы, автоматизировала деплой и подготовила инфраструктуру под свежие релизы.

    22.10.2025

    Чек-лист: 5 признаков, что вашему бизнесу пора переезжать с облака на выделенный сервер

    Платите за облако, но всё делаете сами? При бюджете от 5 000 ₽ выделенный сервер выгоднее. Смотрите чек-лист и тесты cloud vs bare metal.

    29.09.2025

    Что делать, если ваш ноутбук сломался? Как Kasm превратит даже старый планшет в рабочую станцию

    Когда технические сбои прерывают работу, Kasm Workspaces становится спасением, превращая устаревшие устройства в полноценные рабочие станции через браузер. В статье рассматривается, как платформа решает проблемы сломанных ноутбуков и дефицита оборудования, сравниваются версии (Community, Starter, Enterprise, Cloud), анализируются требования к ресурсам и результаты тестирования на VPS.

    24.09.2025

    Замена Google Meet в условиях блокировок: Jitsi Meet и другие альтернативы для бизнеса

    Когда Google Meet внезапно начал «тормозить» в России, мы оказались перед выбором: Zoom, Яндекс Телемост, NextCloud или self-hosted решения. После тестов мы остановились на Jitsi Meet на VPS и проверили его в боевых условиях. Делимся опытом и подводными камнями.

    18.09.2025

    Мониторинг SSL-сертификатов в oVirt Engine: как мы научились спать спокойно благодаря Go и Prometheus

    Как избежать простоев и сбоев из-за просроченных SSL-сертификатов? Мы в HOSTKEY разработали простой, но надёжный инструмент на Go для oVirt Engine, интегрированный с Prometheus и Grafana. Теперь система сама предупреждает о проблемах — задолго до их возникновения.

    Upload