Поскольку и по правилам Chocolatey и по правилам 1С, я не имею права публиковать готовые пакеты, расскажу, как эти пакеты создать и настроить внутренний репозиторий.
Пакетная установка chocolatey.
Chocolatey это менеджер пакетов для Windows. Что-то вроде apt-get в Linux. Позволяет ставить и настраивать большое количество ПО одно командой, без скачивания msi и нажатия кнопки Далее >>.
Так же есть возможность создавать собственные пакеты для установки. Воспользуемся этим и создадим пакет для установки 1с.
Зачем?
- Just for funs. Это удобно. Не надо помнить, где лежат архивы с платформой. Скачивать их, распаковывать, проходить мастер установки. Потом надо не забыть прописать путь к hasp ключу и отключить Защиту от опасных действий. Можно конечно написать bat-ник… Но почему бы не попробовать что-то новое.
- Настройка тестового окружения. Мне для поднятия тестового окружения надо поставить несколько программ: git, 7zip, OBS… Удобно ставить их через choco. Почему бы не ставить и платформу через choco.
Необходимое ПО и подготовка.
Первое. Необходимо установить chocolatey. Ставится через командную строку
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
или powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Второе. Потребуется Apache или другой веб-сервер, для публикации дистрибутивов платформы 1с.
Третье. Общая папка для организации репозитория пакетов chocolatey.
Четвертое. Надо перепаковать файл с установкой платформы из windows.rar в setup.zip. Потому что с zip проще работать из командной строки.
Пятое. Готовим файловую структуру. Я использовал следующую схему.
В папке distr потом можно будет хранить файлы установки сервера предприятий, x64 платформу.
Каталог choco я опубликовал через Apache и сделал общедоступным. Таким образом есть доступ как через веб:
и по сети:
Далее все команды буду выполнять в powershell.
Создание пакета.
Выбираем папку, где будем работать. Выполняем в этой папке команду
choco new 1c
Таким образом создается шаблон пакета. Сначала отредактируем файл 1c.nuspec. Это файл описания нашего пакета:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>1c</id>
<version>8.3.7.2008</version>
<title>1c (Install)</title>
<authors>Author</authors>
<projectUrl>https://1c.ru</projectUrl>
<iconUrl>http://1c.ru/static/images/logo.png</iconUrl>
<tags>1c</tags>
<summary></summary>
<description>Установка платформы 1с через choco</description>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>
Здесь в тегах version указываете версия платформы, которую будет устанавливать пакет.
Теперь надо отредактировать файл chocolateyinstall.ps1 в папке tools.
$ErrorActionPreference = 'Stop'; # stop on all errors
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$url = 'http://MySecretServer/choco/distr/1c/' + $env:ChocolateyPackageVersion + '/setup.zip' # download url, HTTPS preferred
$packageZipArgs = @{
packageName = $env:ChocolateyPackageName
unzipLocation = $toolsDir
#fileType = 'MSI' #only one of these: exe, msi, msu
url = $url
softwareName = '1c*' #part or all of the Display Name as you see it in Programs and Features. It should be enough to be unique
checksum = 'ba520b5d77f8a48f1b7eddb971d560e5d9dc9802b8d0ef572d8ad7d90218766c'
checksumType = 'sha256' #default is md5, can also be sha1, sha256 or sha512
validExitCodes= @(0, 3010, 1641)
}
$packageMSIArgs = @{
packageName = $env:ChocolateyPackageName
fileType = 'MSI' #only one of these: exe, msi, msu
softwareName = '1c*' #part or all of the Display Name as you see it in Programs and Features. It should be enough to be unique
# MSI
file = $toolsDir + '\1CEnterprise 8.msi'
silentArgs = "/qr DESIGNERALLCLIENTS=1 THICKCLIENT=1 THINCLIENTFILE=1 THINCLIENT=1 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=0 LANGUAGES=RU"
validExitCodes= @(0, 3010, 1641)
}
$path1cconf = "C:\Program Files (x86)\1cv8\" + $env:ChocolateyPackageVersion + "\bin\conf\conf.cfg"
$cmd_break = "/c " + "echo.>>" + """" + $path1cconf + """"
$cmd_unsafe = "/c " + "echo DisableUnsafeActionProtection=.*>>" + """" + $path1cconf + """"
Write-Output "Установка 1с"
Install-ChocolateyZipPackage @packageZipArgs
Install-ChocolateyInstallPackage @packageMSIArgs
Write-Output "Отключаем защиту от опасных действий"
Start-ChocolateyProcessAsAdmin $cmd_break cmd
Start-ChocolateyProcessAsAdmin $cmd_unsafe cmd
В этом файле в надо указать контрольную сумму архива setup.zip в переменную checksum. Можно не указывать, тогда файл будет скачиваться каждый раз.
Что делает этот файл?
- Идет по адресу http://MySecretServer/choco/distr/1c/<Version>/setup.zip
- Cкачивает и распаковывает этот файл.
- Выполняется установка 1с из пакета msi с нужными аргументами, взяты отсюда //infostart.ru/public/296227.
- В файл conf.cfg записываем отключение защиты от опасных действий.
Из-за того, что установка идет через msi файл, не требуется редактировать файл chocolateyuninstall.ps1, в котором описывается удаление пакета.
После этого в каталоге выполняем команду:
choco pack
Если все сделали правильно, в каталоге должен появится файл вида 1c.8.3.7.2008.nupkg. Это файл копируем в \\mysecretserver\www\choco\packages
Потратив немного времени, можно собрать пакеты для всех платформ.
Подключение своего репозитория
Для подключения нового репозитория надо выполнить команду
choco source add -n=platforms1c -s=\\MySecretServer\www\choco\1c\packages
Параметр -n задает имя репозитория, -s путь до папки с пакетами.
То, ради чего все это делали.
Теперь платформу 1с можно устанавливать командой
choco install 1c
Если над определенную версию
choco install 1c --version 8.3.7.2008
А удалять:
choco uninstall 1c
choco uninstall 1c --version 8.3.7.2008
Итого.
Да, по сути это тот же bat-ник. Но вызывать его удобнее. И легко использовать в vagrantfile для подготовки тестового окружения. Дальнейшие планы развития: добавить установку x64 платформы и сервера предприятий.
Ссылка на github: https://github.com/KrapivinAndrey/ChocoInstall1c