{"id":26167519,"url":"https://github.com/pladon112/win_cloudimage_builder","last_synced_at":"2025-08-23T13:38:26.116Z","repository":{"id":281819361,"uuid":"946517575","full_name":"pladon112/win_cloudimage_builder","owner":"pladon112","description":"Build your customized Windows images for Cloud","archived":false,"fork":false,"pushed_at":"2025-08-20T21:18:50.000Z","size":487,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-20T23:29:56.587Z","etag":null,"topics":["bash","cloud-images","kvm","linux","openstack","powershell","python","qemu","qemu-img","virtualization","windows","windows-image"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pladon112.png","metadata":{"files":{"readme":"README-RU.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-11T09:10:13.000Z","updated_at":"2025-08-20T21:18:53.000Z","dependencies_parsed_at":"2025-07-25T13:39:54.895Z","dependency_job_id":"d988bd84-0102-4660-8b3e-aed9ec805293","html_url":"https://github.com/pladon112/win_cloudimage_builder","commit_stats":null,"previous_names":["pladon112/win_cloudimage_builder"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pladon112/win_cloudimage_builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pladon112%2Fwin_cloudimage_builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pladon112%2Fwin_cloudimage_builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pladon112%2Fwin_cloudimage_builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pladon112%2Fwin_cloudimage_builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pladon112","download_url":"https://codeload.github.com/pladon112/win_cloudimage_builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pladon112%2Fwin_cloudimage_builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271749155,"owners_count":24814138,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","cloud-images","kvm","linux","openstack","powershell","python","qemu","qemu-img","virtualization","windows","windows-image"],"created_at":"2025-03-11T17:38:27.079Z","updated_at":"2025-08-23T13:38:26.095Z","avatar_url":"https://github.com/pladon112.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Win-Cloudimage-Builder - это небольшой инструментарий для быстрой и автоматической сборки Windows образов для облака под Linux операционными системами.  \nПроект не является системно безопасным на данном этапе развития, так как использует небезопасные функции и пути: например работа с libvirt и системными путями, по этому мы рекомендуем запускать его в виртуальных машинах с поддержкой KVM, либо в контейнерах.   \nСейчас проект находится в ранней стадии разработки и в будущем разные аспекты и функции могут измениться, но уже сейчас он готов к применению.  \n\nПомимо скриптов для сборки так же в репозитории поставляются готовые примеры элементов и образов.  \nЛюбая обратная связь приветствуется: пожелания, багрепорты, пуллреквесты и фичреквесты. Оставьте их в Issue и мы обязательно их увидим.  \n\nНиже описаны основные принципы работы.  \n### 1. Концепция и структура  \n\nwin-cloudimage-builder позволяет в автоматическом режиме собирать облачные образы Windows на Linux хостах, используя Qemu/KVM и Libvirt.  \nВ основе лежат:  \n1. Базовый ISO образ Windows  \n2. Элементы использующие PowerShell  \n3. Описание образа в виде конфига  \n4. Скрипты для запуска и автоматизации сборки.  \n\n### 2. Делаем свой образ  \nПри работе \"с нуля\" необходимо:  \n1. Залить ISO образ в папку /ISO  \n2. Добавить нужные элементы в /elements  \n3. По шаблону набросать конфиг образа:  \n```\n[SETTINGS]\n\t#Полное имя образа. Используется при выгрузке в OpenStack. %date пока единственная доступная переменная\nosName=Windows Server 2025 Standard RU ($date) - GameReady Driver\n    #Короткое имя без пробелов и специальных символов, запрещенных в файловой системе. Будет использоваться как уникальное имя конечного файла и точки монтирования\nname=win25stru_game\n\t#Модуль для сборки. Если планируется использовать в одном режиме всегда - лучше указать в conf/winbuilder.conf\nbuilder=virt_win\n\t#Модуль для выгрузки. Так же лучше указать в conf/winbuilder.conf в секции [DEFAULTS], если не планируется часто изменять\nuploader=glance\n    #Путь, по которому будет сохранен файл образа\npathSave=/opt/client-resources\n    #Путь к оригинальному ISO образу Windows\npathIso=./ISO/win25ru.iso\n    #Опционально: Путь к Unnatend.xml который будет использован для старта Audit Mode при первом запуске сборки \npathUnattend=./elements/windows_general/unnatend/2025.xml\n\t#Опционально: Путь к оверлею WinPE, который будет развернут поверх чистого WinPE образа. \n        #             Планируется убрать и генерировать оверлей автоматически в зависимости от параметров разделов.\npathWinPE=./resources/winpe\n\t#Название редакции Windows так же, как указано в архиве WIM\neditionName=Windows Server 2025 SERVERSTANDARD\n    #Размер образа используемый на стадии сборки.\nbuildSize=50G\n    #Опционально: Если указан, то при сборке будет работать spice на указанном порте\nspicePort=5920\n\t#Опционально: Можем указать дополнительные параметры для QEMU на стадии WinPE. Полезно для WinServer 2025.\nwinPeQemuCmdline=-cpu Skylake-Client-v3\n\t#Опционально: Таймаут сборки в секундах. Полезно при шансе зависания установки какого-либо пакета или ОС. Если не указан применяется таймаут указанный в winbuilder.conf, либо 30000 секунд.\nbuildTimeout=20000\n    #Список элементов для установки в виде путей\n[ELEMENTS] \n./elements/general.d/windows_general\n./elements/general.d/cloudbase-init\n./elements/general.d/nv-gameready\n./elements/general.d/virtio\n./elements/general.d/geforceexp\n./elements/general.d/baremetaldrv\n./elements/general.d/non-existing\n\n    #Опционально: Экспорт перемеенных окружения в сборочное окружение.\n[EXPORTS]\nTESTVAR=123\n\n    #Параметры разделов. Можно указать любое число, но:\n    #1. buildSize распространяется только на размер последнего раздела на стадии сборки.\n    #   Другие разделы не изменят своего размера. Позже исправим на ресайз указанного системного раздела.\n    #2. После точки указывается имя. На этом примере будет создано два раздела с именами BOOT и SYSTEM\n[PARTITION.BOOT]\nsize=100M\nfilesystem=fat32\n#Полный список флагов доступен по ссылке: https://github.com/dcantrell/pyparted/blob/main/src/parted/__init__.py#L159\nflags=PARTITION_MSFT_RESERVED;PARTITION_BOOT\n\n[PARTITION.SYSTEM]\nsize=25500M\nfilesystem=ntfs\n\t#Параметр system ниже указывает, на какой раздел будет устаовлен Windows.\nsystem=true\n```\n4. Запустить \u003cUsername\u003e-openrc.sh, который Вы можете получить в OpenStack Horizon для возможности автоматической загрузки в Horizon.\n5. Запустить ```./buildImage.py ./path/to/windows.config``` скрипт с указанием конфига образа. Сборка началась.  \n6. Через SPICE клиенты можем подключиться по указанному в spicePort порту. Отлавливаем некорректное поведение, отлаживаем элементы.  \n7. Образ собран и залит. Можно тестировать на серверах.  \n\n### 3. Быстрая сборка из готовых  \nВсе готовые конфиги образов лежат в /images/ каталоге. Запустить можно следующим образом:  \n```\ncd \u003cкорень репозитория\u003e/\nsudo ./buildImage.py ./images/base/2022StandardRu_gameready.conf\n```\nИ по желанию ручной аплоад. Образ и так будет залит, если указаны переменные окружения (openstack.rc) для подключения к OpenStack:  \n```\nopenstack image create --container-format bare --disk-format raw  --file ./result/win10.raw --private --property hw_disk_bus=virtio --property hw_rescue_device=disk --property hw_rescue_bus=virtio --property hw_firmware_type=uefi --progress \"Windows 10 RU (May 2024) - GameReady Driver\"\n```\n\n### 4. Разработка элементов  \nЭлемент - это единица изменений. Представляет собой каталог с необходимыми скриптами и программами. При указании элемента содержимое копируется в образ и выполняется на стороне виртуальной машины. Скрипты пишутся на PowerShell или CMD. PS предпочтительнее.  \n\nБазовая структура элемента, в порядке выполнения:  \n```\n/elements/\u003cназвание элемента\u003e/prerun \u003c-- Выполнение скриптов перед запуском машины\n/elements/\u003cназвание элемента\u003e/configure \u003c-- Преднастройка\n/elements/\u003cназвание элемента\u003e/install \u003c-- Установка программ\n/elements/\u003cназвание элемента\u003e/clean \u003c-- Этап очистки перед sysprep\n/elements/\u003cназвание элемента\u003e/root \u003c-- Копируется целиком в корень диска C:/.  \n/elements/\u003cназвание элемента\u003e/version.txt \u003c-- Версия пакета и опционально имя. При отсутствии версия будет 'none'\n```\n\nВ каталоги раскладываются PS скрипты, которые будут выполнять действия по настройке и установке программ и ОС.   \n\nВ каталог `/elements/\u003cназвание элемента\u003e/root` стоит добавлять различные исполняемые файлы, либо файлы, накладываемые на диск C:/. Например, `/elements/\u003cназвание элемента\u003e/root/testfolder/testfile.txt` на хосте будет выглядеть как `C:/testfolder/testfile.txt`.  \n\nВ prerun директории можно добавить bash скрипты, которые будут выполнены после монтирования системной ФС и перед копированием элементов. Может подойти для скачивания дистрибутивов программ и драйверов до запуска машины, обновления version.txt или других действий.\nДля prerun скриптов доступны следующие переменные:  \n```\n$WCB_PATH_SYSPART - Путь точки монтирования системного раздела образа (Диск с Windows, проще говоря) \n$WCB_PATH_ELEMENT - Путь в системе к элементу\n$WCB_PATH_ISO - Путь точки монтирования исходного ISO образа Windows\n```\n\nДля элементов доступны следующие дочерние функции с примерами:  \nВывод в лог timestamp + stdout + serial:  \n```\nlogInfo \"Installing GameReady Driver\"\n```\nПроверить необходимость перезагрузки и перезагрузиться при необходимости:  \n```\ncheckReboot\n```\n\nУстановить драйверы из каталога рекурсивно. В примере будут установлены все .inf и .cat, которые содержат \"2022\" в полном пути:  \n```\ninstallDrivers -path_drv \"C:/my/drivers/folder\" -filter \"*2022*\"\n```\n\n### 5. Модульность:\nМодули алгоритмов сборки доступны в `./lib/builders`   \nМодули выгрузки образов сборки в `./lib/uploaders`  \nМодули интеграций доступны в `./lib/integrations`  \n\nSimiliar projects:  \n[Cloudbase windows-imaging-tools](https://github.com/cloudbase/windows-imaging-tools)  \n[Openstack diskimage-builder](https://github.com/openstack/diskimage-builder)  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpladon112%2Fwin_cloudimage_builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpladon112%2Fwin_cloudimage_builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpladon112%2Fwin_cloudimage_builder/lists"}