Создание нескольких инсталляционных пакетов в рамках единой процедуры

Для создания инсталляционных пакетов для большого числа пользователей в рамках единой процедуры предлагается использовать сценарии PowerShell, вызывающие в цикле утилиту make_inst.exe. Далее описаны несколько типичных сценариев. На компьютере администратора должна быть создана специальная папка для файлов пользователей. В этой папке создаются подпапки, которые называются по имени пользователей. Например, папка c:\vpn_client, в ней подпапки c:\vpn_client\alice и c:\vpn_client\bob (важно, чтобы не было посторонних подпапок). В этих подпапках лежит файл localcert.cer, а также для некоторых сценариев могут лежать файлы ca.cer, lsp.txt и pwd.txt (пароль на контейнер).

Сценарии пишутся в виде текстового файла с расширением ps1, например, make_clients.ps1. Запускаются из консоли PowerShell, например: c:\make_clients\make_clients.ps1.

Обычно по умолчанию запрещен вызов неподписанных сценариев. Можно разрешить запуск любых сценариев из текущей консоли, не затрагивая системных настроек: Set-ExecutionPolicy -ExecutionPolicy  Unrestricted -Scope  Process.

Сценарий 1. В этом сценарии контейнеры с секретными ключами пользователей имеют пустой пароль. Получаемые SFX-файлы кладутся в папки пользователей под именем <Имя_папки>.exe. В папках пользователей лежат локальные сертификаты. Используется один CA сертификат и одна LSP для всех пользователей:

$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'

$TEMPLATE_DIR = 'c:\vpn_client'

$CONTAINER_NAME = 'file_p15://container'

$LSP_PATH = "$TEMPLATE_DIR\lsp.txt"

$CA_PATH = "$TEMPLATE_DIR\ca.cer"

 

$pkg_count = 0

 

Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {

    Write-Output "Сборка пакета $_"

 

    $curr_full_name = $_.FullName

    $process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$curr_full_name\$_.exe`" -c `"$CA_PATH`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$LSP_PATH`" -q normal"

 

    if ( $process.ExitCode -ne 0 ) {

        Write-Error "Ошибка при сборке пакета $_"

        Exit 1

    }

 

    Write-Output "Пакет $_ успешно собран"

    Write-Output "==================="

 

    $pkg_count += 1

}

 

Write-Output "Собрано пакетов: $pkg_count"

Используются следующие настройки:

TEMPLATE_DIR – папка, в которой лежат подпапки пользователей. Путь должен быть без пробелов.

MAKE_INST_PATH – путь к утилите make_inst.exe.

CONTAINER_NAME – имя контейнера.

LSP_PATH – путь к общей LSP.

CA_PATH  – путь к общему CA сертификату.

Здесь и далее:

·       в успешной ситуации выдается сообщение вида «Собрано пакетов: <n>»,

·       при ошибке выдается сообщение об ошибке, выполнение сценария прерывается.

 

Сценарий 2. Используется общий пароль для всех контейнеров с секретными ключами всех пользователей. Получаемые SFX-файлы кладутся в папки пользователей под именем <Имя_папки>.exe. Каждый пользователь имеет свой CA сертификат и своя LSP. Получаемые файлы кладутся в одну папку:

$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'

$TEMPLATE_DIR = 'c:\vpn_client'

$CONTAINER_NAME = 'file_p15://container'

$CONTAINER_PASSWORD = 'somepwd'

$SFX_DIR = 'c:\sfx'

 

$pkg_count = 0

 

Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {

    Write-Output "Сборка пакета $_"

 

    $curr_full_name = $_.FullName

    $process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -up `"$CONTAINER_PASSWORD`" -q normal"

 

    if ( $process.ExitCode -ne 0 ) {

        Write-Error "Ошибка при сборке пакета $_"

        Exit 1

    }

 

    Write-Output "Пакет $_ успешно собран"

    Write-Output "==================="

 

    $pkg_count += 1

}

 

Write-Output "Собрано пакетов: $pkg_count"

Новые настройки:

CONTAINER_PASSWORD – общий пароль

SFX_DIR – папка, в которую кладутся получаемые файлы.

 

Сценарий 3. Все условия аналогичны сценарию 2, но получаемые файлы кладутся в одну папку с именами <username.exe> (где <username> совпадает с именем пользовательской подпапки, например alice.exe или bob.exe). Также в каждой пользовательской папке дополнительно лежит файл pwd.txt, содержащий пароль контейнера для данного пользователя. Кроме того, агент должен ставиться в папку c:\my  vpn (с пробелом):

$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'

$TEMPLATE_DIR = 'c:\vpn_client'

$CONTAINER_NAME = 'file_p15://container'

$SFX_DIR = 'c:\sfx'

 

$pkg_count = 0

 

Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {

    Write-Output "Сборка пакета $_"

 

    $curr_full_name = $_.FullName

    $process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -ufp `"$curr_full_name\pwd.txt`" -a `"INSTALLDIR=\`"c:\my vpn\`"`" -q normal"

 

    if ( $process.ExitCode -ne 0 ) {

        Write-Error "Ошибка при сборке пакета $_"

        Exit 1

    }

 

    Write-Output "Пакет $_ успешно собран"

    Write-Output "==================="

 

    $pkg_count += 1

}

 

Write-Output "Собрано пакетов: $pkg_count"

Здесь

SFX_DIR – папка, в которую размещаются получаемые файлы.

 

Сценарий 4. На компьютере администратора присутствуют контейнеры с именами, совпадающими с именами пользовательских папок (например, file_p15://alice и file_p15://bob). Пароли на контейнеры на компьютере администратора совпадают с паролями на компьютере пользователя. Контейнеры переносятся с компьютера администратора на компьютер пользователя через инсталляционный пакет. В каждой пользовательской папке присутствует файл transport_pwd.txt с транспортным паролем, который нужно ввести при установке пакета. (Примечание: транспортный пароль не должен совпадать с основным паролем.) Также в пользовательской папке присутствует файл с лицензией lic.txt.

$MAKE_INST_PATH = 'c:\Program Files (x86)\S-Terra Client AdminTool st\make_inst.exe'

$TEMPLATE_DIR = 'c:\vpn_client'

$CONTAINER_NAME = 'file_p15://container'

$SFX_DIR = 'c:\sfx'

 

$pkg_count = 0

 

Get-ChildItem $TEMPLATE_DIR -Directory | ForEach-Object {

    Write-Output "Сборка пакета $_"

 

    $curr_full_name = $_.FullName

    $process = Start-Process -PassThru -NoNewWindow -Wait -FilePath $MAKE_INST_PATH -ArgumentList "-o `"$SFX_DIR\$_.exe`" -c `"$curr_full_name\ca.cer`" -u `"$curr_full_name\localcert.cer`" -uc $CONTAINER_NAME -l `"$curr_full_name\lsp.txt`" -ufp `"$curr_full_name\pwd.txt`" -lic `"$curr_full_name\lic.txt`" -uac `"file_p15://$_`" -uafp `"$curr_full_name\pwd.txt`" -uaftp `"$curr_full_name\transport_pwd.txt`" -ucpkgcopy on -chksecret on"

 

    if ( $process.ExitCode -ne 0 ) {

        Write-Error "Ошибка при сборке пакета $_"

        Exit 1

    }

 

    Write-Output "Пакет $_ успешно собран"

    Write-Output "==================="

 

    $pkg_count += 1

}

 

Write-Output "Собрано пакетов: $pkg_count"