Создание и эффективное использование образов WIM — магия Chocolatey

  • Tutorial

Задача



В своей работе я использую образы Windows Image — всем известные WIM файлы. Подход, которым я хочу сегодня поделиться, прямо противоположен созданию универсального образа с полным наборам софта и сервисов. Ключевым отличием от «Толстого — Thick» подхода является то, что они что в нем находится минимум — только то, что необходимо для запуска puppet agent и дальнейшей установки необходимого софта. Для установки софта я использую chocolatey, все пакеты берутся с chocolatey.org, а для кастомных пакетов имеется репозиторий на сервере в датацентре). Все остальное — ставится потом, в зависимости от требований конфигурации сервера. На мой взгляд это добавляет намного больше гибкости, и все что нужно, фактически, добавлять сервис паки и большие обновления. И вот сегодня — как раз тот день: «Пора бы обновить образ». Если говорить точнее, то сегодня нужно создать образ с нуля для Windows Server 2012 Standard с определенного ISOшника.

Сложности


Сложностей как таковых здесь нет, единственное что принципиально для меня — все должно быть просто, чтобы через год я (или кто-то из моих админов) открыл свой, прочел короткое README и все понял.

Реализация


На том же сервере, где располагается WDS добавлена роль Hyper-V, на котором есть несколько виртуальных машин, предназначенных специально для этого. В даном случае виртуалка с именем «server-2012-std-img» на которой «голая» версия Server 2012 Standard. Снимать образы с виртуалок намного проще, т.к. можно средствами windows примонтировать vhd и сделать wim capture прямо с примонтированного диска. При данном подходе нет необходимости перезагружать реальный сервер.

Настройка образа

Делаем апдейты. Для установки апдейтов в образ пользуюсь триалом wuinstall. Каждый раз приходится загружать заново (ссылка), т.к. срок триала по все видимости зашит в exe файле. Мысли вслух: Надо бы сделать package для chocolatey для wuinstall, тогда будет возможность автоматизировать установку апдейтов, сделать подарочек моему админу по офису...

There's more than one way to do it

Знаю что можно использовать оффлайн апдейты скачанные через wsusoffline, и делать так называемое «Оффлайн обслуживание образа», но в моей ситуации это не подходит во-первых из-за наличия на 70% серверов Server 2008 (не R2), который сильно отличается (в худшую сторону) от R2 и 2012 по управлению пакетами и функционалу offline servicing. А так как я люблю унификацию процессов где это возможно, делаю это через wsusoffline. К тому же интеграция сервис пака часто не работает через offline servicing. Может кто-то знает, где Microsoft хранит WIM или ISO файлы дистрибутивов с последними обновлениями?
Кстати, я не включаю драйвера в сам образ системы, т.к. они берутся из сетевой папки, которая указывается в unattend.xml конфиге, а папка находится в доступном для установщика Windows месте. Не забудьте удостовериться в правах доступа к Вашей папке с драйверами (которые должны быть, естественно, распакованы с доступными файлами inf).

Указываем путь к драйверам в unattend.xml
<settings pass="offlineServicing">
    <component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <DriverPaths>
            <PathAndCredentials wcm:action="add" wcm:keyValue="1">
                <Credentials>
                    <Domain>mydomain</Domain>
                    <Password>wds-password</Password>
                    <Username>wds-user</Username>
                </Credentials>
                <Path>\\wds-server.mydomain.local\REMINST\Drivers</Path>
            </PathAndCredentials>
        </DriverPaths>
    </component>
</settings>


Установка Chocolatey — процесс достаточно простой, главное удостоверьтесь что у Вас стоит фреймворк 3.5.

Устанавливаем Chocolatey
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin


Все, настройка образа на этом закончился. Пора его создать!

Создание образа

Запускаем процесс создания образа
::Config file that contains some paths and date patterns
call config.cmd
SET mountdrive=H

echo Creating image %captured_wims%\server-2012\server-2012x64.standard.sp2.%date%.%RANDOM%.install.wim
utils\imagex\imagex.exe /capture %mountdrive%: %captured_wims%\server-2012x64.standard.sp2.%date%.%RANDOM%.install.wim " Windows Server 2012 SERVERSTANDARD"



Процесс создания образа Server 2012 Standard со всеми апдейтами занимает около 20 минут на виртуальной машине, на живом сервере, конечно быстрее, но не так удобно. Я не сильно переживаю по этому поводу, т.к. процесс это в большинстве случаев плановый.
Долго-ли коротко-ли, образ создался, скрипт положил его куда надо, назвал как надо — теперь я его беру и добавляю в WDS сервер. Готово!

Забегая вперед скажу, что puppet agent нужно будет установить при первой загрузке новой системы, которую мы будем разворачивать на новом железе, а нужно это для того, чтобы сервер стал доступен для настройки при помощи манифестов puppet. Сделать это можно и вручную, но можно и автоматически.

Устанавливаем puppet agent
cinst puppet -ia "PUPPET_MASTER_SERVER=puppet.mydomain.local"

Да, да, если кто не знаком с chocolatey, очень советую испытать эту радость.

В данном случае установится последняя версия этого пакета puppet, которая зарегистрируется на сервере puppet.mydomain.local.

Для желающих сделать регистрацию puppet agent автоматически - добавляем следующее в файл unattend.xml
<component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RunSynchronous>
        <RunSynchronousCommand wcm:action="add">
            <Order>1</Order>
            <Description>Install Puppet</Description>
            <Path>cinst puppet -ia "PUPPET_MASTER_SERVER=puppet.mydomain.local"</Path>
        </RunSynchronousCommand>
        <RunSynchronousCommand wcm:action="add">
            <Order>2</Order>
            <Description>Request Certificate</Description>
            <Path>("C:\Program Files (x86)\Puppet Labs\Puppet\bin\puppet_interactive.bat" --test) && echo OK</Path>
        </RunSynchronousCommand>
         <RunSynchronousCommand wcm:action="add">
            <Order>3</Order>
            <Description>Stop Puppet Service</Description>
            <Path>(sc stop puppet) && echo Service Stop OK</Path>
        </RunSynchronousCommand>
        <RunSynchronousCommand wcm:action="add">
            <Order>4</Order>
            <Description>Start Puppet Service</Description>
            <Path>(sc start puppet) && echo Service Start OK</Path>
        </RunSynchronousCommand>
    </RunSynchronous>
</component>


Заключение


Таким образом, система пакетов Chocolatey заменяет множество индивидуальных конфигураций, и сильно помогает автоматизировать установку, вместе с тем обеспечивая гибкость конфигурирования (помните, Вы не обязаны использовать chocolatey.org в качестве источника пакетов). Использование менеджера пакетов при развертывании Windows Server, по моему мнению, еще один этап на пути к переносу инфраструктуры на IaaC, а выбор между «Тонким» и «Толстым» образами — ключевым в данной ситуации.
В моей сети Windows и Linux работают в тесной связке друг с другом, поэтому я по возможности стараюсь найти универсальные OpenSource решения, которые будут работать на обоих платформах. Я совершенно не оспариваю факт что SCCM — прекрасный продукт для подготовки, поддержки и развертывания Windows, но он официально не поддерживает Linux (пруф) — а это значит что за Ваши деньги, заплаченные за SCCM, с интеграцией придется разбираться самому. К тому же, Open Source делает нашу жизнь лучше!

А как Вы решаете вопросы гетерогенности инфраструктуры? Очень буду рад услышать Ваше мнение, уважаемый Хабр!

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 6

    +1
    Коричневый логотип впечатляет.
      0
      Это производное от логотипа nuget.org image
      Выглядит весело!
      0
      У вас странная ссылка пруф на поддержку Linux. По это ссылке требования к ОС site systems. Серверы управления SCCM действительно только на Windows могут быть. Но клиенты могут быть и на Linux. Вот ссылка на поддерживаемые конфигурации: technet.microsoft.com/en-us/library/da15f702-ba6a-40fb-b130-c624f17e2846#BKMK_ClientDeployPrereqforLnU
        0
        Да, Вы правы, SCCM 2012 начиная с SP1 поддерживает в качестве клиентской операционной системы Linux. Но, к сожалению, это не меняет того, что это прекрасное (и, кстати, не очень дорогое) программное обеспечение — закрытое, и многие (если не все) *nix компании предпочтут использовать альтернативные открытие технологии, не говоря уже об «религиозном» отказе ставить «Винду» :)
        +1
        Заинтересовался Chocolatey, потыркал, идея нравится.

        PS C:\> Find-Package '*paint.net*' -ProviderName Chocolatey
        
        Name                           Version          Source                         Summary                                                                                   
        ----                           -------          ------                         -------                                                                                   
        paint.net                      4.0.6            chocolatey                     Paint.NET is image and photo manipulation software designed to be used on computers tha...

        А актуальная версия 4.0.9.

        В нагрузку ставит нужное для работы репозитория, но совсем не нужные мне autoIT, autohotkey не спрашивая. У части софта при установке ошибки, ярлыки не насоздавались.

        А как все хорошо начиналось то… до автоустановок с ninite.com еще придется попотеть, что бы так же гладко все работало.

        Как я понял репозиторий полуофициальный на добровольных началах.
          0
          С каким софтом возникли проблемы, если не секрет? Сам недавно баловался с Chocolatey. Установил несколько софтин, все с виду прошло гладко. Заметил лишь один недостаток, установленный видеоплеер перехватил ассоциации на форматы которые ему трогать не следовало бы.

        Only users with full accounts can post comments. Log in, please.