"Шоколадная" установка 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 не будет опубликован. Обязательные поля помечены *