"Шоколадная" установка 1С


Статья о том, как быстро установить и настроить платформу 1С через одну команду: choco install 1c.

Поскольку и по правилам Chocolatey и по правилам 1С, я не имею права публиковать готовые пакеты, расскажу, как эти пакеты создать и настроить внутренний репозиторий.

Пакетная установка chocolatey.

Chocolatey это менеджер пакетов для Windows. Что-то вроде apt-get в Linux. Позволяет ставить и настраивать большое количество ПО одно командой, без скачивания msi и нажатия кнопки Далее >>.

Так же есть возможность создавать собственные пакеты для установки. Воспользуемся этим и создадим пакет для установки 1с.

Зачем?

  1. Just for funs. Это удобно. Не надо помнить, где лежат архивы с платформой. Скачивать их, распаковывать, проходить мастер установки. Потом надо не забыть прописать путь к hasp ключу и отключить Защиту от опасных действий. Можно конечно написать bat-ник… Но почему бы не попробовать что-то новое.
  2. Настройка тестового окружения. Мне для поднятия тестового окружения надо поставить несколько программ: git, 7zip, OBS… Удобно ставить их через choco. Почему бы не ставить и платформу через choco.

Необходимое ПО и подготовка.

Первое. Необходимо установить chocolatey. Ставится через командную строку

@"%SystemRoot%System32WindowsPowerShellv1.0powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%chocolateyin"

или 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 и сделал общедоступным. Таким образом есть доступ как через веб:

http://mysecrectserver/choco

и по сети:

\mysecretserverwwwchoco

 

Далее все команды буду выполнять в 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 + "inconfconf.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. Это файл копируем в \mysecretserverwwwchocopackages

Потратив немного времени, можно собрать пакеты для всех платформ.

Подключение своего репозитория

Для подключения нового репозитория надо выполнить команду

choco source add -n=platforms1c -s=\MySecretServerwwwchoco1cpackages

Параметр -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

41 Comments

  1. lustin

    (0) огонь. уехало по ленте.

    Reply ↓
  2. kraynev-navi

    Очень нужная публикация! Спасибо! В топ!

    Reply ↓
  3. pm74

    (0) чем это лучше обычной шары с файликом ibcommon

    Reply ↓
  4. Scorpion4eg

    (3)

    ibcommon

    Это не общие базы. Это установка платформы.

    Reply ↓
  5. pm74

    (4) я тоже говорю про установку

    Reply ↓
  6. Scorpion4eg

    (5) Хорошо. На этот вопрос я не отвечу. Мне choco нужно для поднятия тестового окружения через vagrant.

    Reply ↓
  7. SlavaKron

    Параметр конфигурационного файла (.cfg) DistributiveLocation — содержит указание на каталог, в котором будет производится поиск новой версии для автоматической установки.

    Reply ↓
  8. olegtymko

    Автор, где ты был раньше?? =)

    Жирный плюс!

    Reply ↓
  9. kauksi

    Мне одному кажется, что создать общую шару и положить туда папку с платформой, 1cestart.exe и файлик 1CESCmn.cfg следуюшего содержания

    DistributiveLocation=\Mainsrv1cbasesDistr

    InstalledLocation=C:Program Files1cv8

    InstallComponents=DESIGNERALLCLIENTS=1 THINCLIENTFILE=1 THINCLIENT=1 WEBSERVEREXT=0 SERVER=0 CONFREPOSSERVER=0 CONVERTER77=0 SERVERCLIENT=1 LANGUAGES=RU

    CommonInfoBases=\Mainsrv1cbasesDistrALL.v8i

    UseHWLicenses=1

    куда проще чем мудохацца со всем вышенаписанным?

    при очередном обновлении просто добавить папку со свежей платформой

    Reply ↓
  10. kauksi

    раз уж у пользователя права локального админа…

    Reply ↓
  11. Scorpion4eg

    (10)

    раз уж у пользователя права локального админа…

    Все дело в решаемое задаче. Еще раз. Я с этим всем разобрался ради автоматизации развертывания тестового стенда.

    У меня ноут с ssd. Место бережно храню и не хочу ставить себе все возможные платформы.

    Если при приходит тикет: Ошибка на БУ 3.0….. платформа 8.3.9.1234. То я одной командой ставлю платформу, все проверяю и так же одной командой удаляю.

    К чему хочется прийти: «Проверить модуль 1.2.3.4 на БУ 3.0.1.2 платформа 8.3.9.1234» -> готовая виртуальная машина со всеми настройками.

    Reply ↓
  12. kauksi

    ну если вы разработчик… и у вас ноут со 120 гигами ССД, так добавьте стоимость пары часов 1сника и купите уже на 256, а то стыдно уже на скрепках экономить ))

    и поставьте все последние 10 платформ, ибо сожрут они ну 5 гигов от силы… и просто в настройках базы меняйте версию, чем туда-сюда ставить удалять.

    Reply ↓
  13. Scorpion4eg

    (12)

    и у вас ноут со 120 гигами ССД,

    256. Базы же еще) и git репозитории.

    Мне для работы нужны все платформы от 8.2.15 до 9.x.x.x(если она выйдет)

    Reply ↓
  14. GlebBR

    хорошая статья, очень понравилось.

    Reply ↓
  15. fotov

    У меня только один вопрос — а зачем столько версий платформ? Платформа 8.3.12 поддерживает работу баз 8.3.11, 8.3.10 и так далее.

    Для файлового режима — достаточно одной версии.

    Защита от опасных действий отключается для всех версий разом в папке C:Program Files1cv8conf

    И потом — установленную версию можно просто безболезненно перенести из C:Program Files1cv8 на файловую шару и обратно

    Если вопрос «на интерес» — предлагаю сделать скрипт по разворачиванию разных версий 1С в виртуальные машины.

    Чтобы например по команде up1c 8.3.12.1234 с удаленного сервера копировался файл виртуальной машины с установленной версией 8.3..12.1234, и запускалась виртуальная машина

    Reply ↓
  16. Scorpion4eg

    (15) см. (11) Установка через choco это просто побочный эффект задачи по автоматизации тестового окружения.

    Reply ↓
  17. acsent

    А каков реальный кейс этого инструмента?

    Я понимаю внешние репозитории в линукс. Но тут же нужно эту репу самому создать? В чем цимус?

    Reply ↓
  18. Scorpion4eg

    (17)

    А каков реальный кейс этого инструмента?

    См. (16). Это побочный эффект решения задачи автоматизации настройки виртуального окружения на Windows.

    Reply ↓
  19. JohnyDeath

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

    Нельзя ли сделать так, чтобы чоко ломился не в локальную шару, а на сайт релизов 1С? Так и актуальность платформ не надо будет поддерживать и держать у себя все архивы с платформами.

    У серебряной пули было что-то такое (по-моему «в кластере для нищебродов»)

    Reply ↓
  20. kraynev-navi

    (19) а в чем засада? Имхо из локальной лучше. Мало ли чего там в вебе переделают: авторизацию, ссылки, недоступность сайта опять таки.

    Reply ↓
  21. Scorpion4eg

    (20) Была у меня такая идея: нет платформы — скачать с сайта. Нельзя пользоваться параметром —version, так как он предопределенный.

    Но как-то тяжело скачивать платформу с сайта или не доразобрался. Все что на release1c скачивается в rar. Можно скачивать zip через обновление текущей платформы — но там ссылка только на последнюю версию.

    Reply ↓
  22. asdf_88

    за статью респект

    choco v0.9.10.1+ использует внутри себя 7z, поэтому не нужно париться с перепаковкой в zip

    This unzips files using the 7-zip command line tool 7z.exe.

    Supported archive formats are listed at:

    https://sevenzip.osdn.jp/chm/general/formats.htm

    исходник

    поэтому сама идея с логином на сайт релизов выглядит несложной (останется придумать как не протерять логин-пароль в открытом виде)

    (21)

    Reply ↓
  23. asdf_88

    Похоже не хватает плагина для 1Script, который будет поднимать (и обновлять) Web-сервер со всей нужной структурой папок и файлов?

    Reply ↓
  24. AntonSm

    (22) я помню, что Лустин как-то делал скачивание платформы с users.v8 вот здесь:

    vanessa-nishebrod-cluster

    Reply ↓
  25. Scorpion4eg

    (23) тут скорее докер. но choco плохо шарит пакеты через веб, если это не IIS. Может поднять докер с nano-windows… Жду комментарии на github)

    Reply ↓
  26. Scorpion4eg

    (23) Хотя… WebServer обновлять каждый раз не надо, а вот оскрипт который соберет платформы и пакеты для установки — вполне можно подумать.

    Reply ↓
  27. lustin

    (24) Там скрипт был не мой, а стороннего разработчика с gitHub

    Reply ↓
  28. GROOVY

    Что-то я не въехал.

    На компе клиента есть групповые политики и через них офигенно все разворачивается.

    На компе разработчика, я бы очень осознанно устанавливал платформу.

    Просветите меня еще раз. Не понимаю фишку.

    Reply ↓
  29. lustin

    (28) Паш ты чего… Это же про автоматическое развертывание софта, применяется для операции подготовки «образов» операционных систем

    и вот тебе нужно настроить машину разработчика — виртуалку например и сделать это единообразно. В таком случае у тебя применяется 2 утилиты

    * packer — создает образа в формате «для любой» системы виртуализации

    * choco — устанавливает нужный софт

    Тогда скрипт создания образа будет выглядеть просто

    choco install msgit
    choco install jdk
    choco install vscode
    choco install 1C-Krapivin-Infostart
    choco install oscript
    choco install wget
    choco install curl
    choco install soapui
    choco install gitkraken
    choco install imagemagick
    

    Показать

    Reply ↓
  30. GROOVY

    (29) Старею. Но опять нифига не понял. Чего люди делают???

    Что все эти буквы значат?

    Reply ↓
  31. lustin

    (30) попробую по другому. В эру виртуализации рулят уже не групповые политики, а образа операционных систем и затем инструменты актуализации софта по компании в зависимости от роли машины

    для этого теперь применяются несколько обновленные инструменты

    1. создатели ISO образов компании

    2. сервера пакетов валидных в компании

    3. наблюдатели и обновляторы софта по компании

    важно заметить что в компании могут применятся windows и linux машины

    В статье описан пункт как сделать «собственный сервер обновлений 1С инсталяторов» и использование его применительно к инструменту обновлятора windows

    выше я тебе написал список софта который ставим мы на машину разработчика 1С — одним скриптом.

    Нет больше нужны писать инструкцию по скачиванию — достаточно скрипта и описания софта в табличке

    Reply ↓
  32. lustin

    (30) могу объяснить еще проще — смотри, например

    0. ты хочешь машину разработчика «Как у Лустина»

    1. я даю тебе ссылку на скачивание — ты запускаешь скрипт

    2. скрипт устанавливает и настраивает тебе Виртуальную машину «Как у Лустина»

    3. proffit (ну или красноглазие) — потому что у меня на Windows машине разработчика установлено чуть больше софта чем я тебе написал выше

    Reply ↓
  33. Scorpion4eg

    (30) А еще условно можно сделать

    Для Платформа = «8.2.16.ххх» по «8.3.12.xxxx» Цикл

    Для Каждого РелизБух = «3.0.9.4» по «3.0.63.22» Цикл

    Машина = ПоднятьВиртуальнуюМашину(«Windows10»);

    Машина.УстановитьПлатформу(Платформа);

    Машина.РазвернутьБазу(РелизБух);

    Машина.ВыполнитьТесты();

    КонецЦикла

    КонецЦикла

    Reply ↓
  34. anemov

    Автору большой респект и уважение!

    Очень удобное решение не только для автоматизации виртуализации, но и для аутсорсеров (как по ИТ так и по 1С)

    Разворачиваешь свой репозиторий. Клиенты все постоянные, т.е. со временем школадка стоять будет у всех.

    Зашел, запустил команду — пошел пить чай. дистры скачались и установились.

    Reply ↓
  35. Gureev

    (13)

    Мне для работы нужны все платформы от 8.2.15 до 9.x.x.x(если она выйдет)

    Что за адская работа?

    Reply ↓
  36. Scorpion4eg

    (35) Отличная работа на которой можно поэксперементировать.

    Разработка универсальной обработки для ОФ и УФ одновременно.

    Reply ↓
  37. strange2007

    (12) Не обязательно менять версии. Можно просто запускать нужный ярлык 1С и всё нормально (именно так и поступаю). Проблема возникает когда надо производить отладку клиент-серверной базы, но тут отдельная история, которую пока простым способом не знаю как реализовать.

    Reply ↓
  38. serge_focus

    Всем привет!

    Немного перепилив скрипт произвожу установку и 1С сервера.

    использую команду:

    Start-Process msiexec.exe -Wait -ArgumentList ‘/I «1CEnterprise 8.msi» /qr TRANSFORMS=adminstallrelogon.mst;1049.mst DESIGNERALLCLIENTS=1 THICKCLIENT=1 THINCLIENTFILE=1 THINCLIENT=1 WEBSERVEREXT=1 SERVER=1 CONFREPOSSERVER=1 CONVERTER77=0 SERVERCLIENT=1 LANGUAGES=RU’

    пользователя .USR1CV8 создаю отдельно до установки

    Может кто-то подскажет — как передать пароль для этого пользователя, а то приходится игнорить запуск сервиса и затем руками задавать пароль…

    Reply ↓
  39. user708180_baranov

    (38), если Вы используете PowerShell, то можете воспользоваться апплетом Get-Credential из модуля Microsoft.PowerShell.Security.

    Reply ↓
  40. serge_focus

    (39) Спасибо, а в установщике 1С есть возможность передачи пароля подобная mssql (через параметр

    … /SAPWD -) или каким параметром можно устанавливать сервер , но не создавать службу Агент сервера 1С:Предприятия 8.3 ? Get-Credential — требует ручного ввода пароля…

    Reply ↓
  41. Scorpion4eg

    (40) К сожалению, я такого параметра не нашел. На ИТС так себе документация по параметрам. Самая полная — здесь же, на Инфостарте.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *