Создаем собственный репозиторий для 1С:Предприятие в среде Linux

  • Автор:

1c-repo-000.pngПопулярность решений с использованием платформы 1С:Предприятие на базе Linux только растет, при этом растет и количество вопросов по администрированию и обслуживанию данной связки. Наиболее остро стоит вопрос обновления платформы, потому как ручное обновление пакетов на большом количестве машин вряд ли можно назвать приемлемым в наше время. Также не работают многие привычные по платформе Windows механизмы. К счастью, в Linux есть свои методы, позволяющие автоматизировать этот процесс, один из них - это создание собственного репозитория.

Как мы уже обсуждали в статье нашего курса для начинающих, современные Linux системы подразумевают, что весь софт находится в репозиториях и управляется с помощью менеджеров пакетов, это позволяет устанавливать, удалять или обновлять приложения из различных источников при помощи одних и тех же инструментов, доступных в том числе и в пользовательском режиме. Т.е. обновить платформу до необходимого релиза сможет и сам пользователь с помощью привычных ему инструментов, что актуально для мобильных или удаленных сотрудников.

Что нам для этого понадобиться? Linuх сервер под управлением любого дистрибутива из семейства Debian/Ubuntu и достаточное количество свободного места на диске для размещения всех необходимых пакетов. В нашем случае использовался сервер под управлением Debian 10.

Сразу поставим себе приближенную к реальности задачу. Допустим у нас есть две условные категории клиентов: Бухгалтерия, которая требует частого обновления платформы на последние версии, и Производство, где требования более консервативны, и платформа обновляется гораздо реже и, возможно, на совсем иные релизы. Такое деление условно, но хорошо отражает часто встречающуюся ситуацию, когда разные клиенты должны работать с разными версиями платформы.

Все приведенные ниже команды выполняются с правами суперпользователя.

Есть много способов организовать собственный репозиторий в Linux, но так как нам нужен быстрый результат с минимальным погружением в подробности, то мы будем использовать специально предназначенные для этого высокоуровневые утилиты. Одной из лучших, на наш взгляд, является Aptly, которая позволяет достаточно просто создавать репозитории и управлять ими без необходимости заглядывать глубоко под капот.

Обновим список пакетов и установим утилиту:

apt update
apt install aptly

Следующим шагом нам потребуется создать конфигурационный файл, при установке утилиты не создается ни файла конфигурации, ни структуры репозитория, но есть одна небольшая хитрость, выполним:

aptly config show

В ответ на нашу просьбу показать настройки утилита сообщит нам что файл не найден и создаст конфигурацию с настройками по умолчанию в корневой директории пользователя, от имени которого была выполнена команда.

Config file not found, creating default config at /root/.aptly.conf

Как видно из вывода, в нашем случае путь к файлу /root/.aptly.conf, переместим его в более привычное расположение - /etc:

mv /root/.aptly.conf /etc/aptly.conf

Обратите внимание, что в исходном расположении имя файла начинается с точки (скрытый файл) при перемещении в /etc точку следует убрать.

Затем откроем его и изменим следующую настройку:

"rootDir": "/opt/aptly",

Она задает расположение репозитория и по умолчанию предлагает разместить его в домашней директории, мы не считаем это хорошим решением, поэтому изменили путь на /opt/aptly, но вы можете использовать любое иное расположение, главное - чтобы там было необходимое количество свободного места.

На этом настройки утилиты закончены, можно приступить к созданию собственного репозитория. Точнее двух. В одном мы будем держать самые новые пакеты для условной бухгалтерии, в другом - более старые, для условного производства.

Для создания репозитория выполним:

aptly repo create --comment="1C Enterprise" --distribution="stable" --architectures="i386,amd64" --component="non-free" stable

Параметры команды следует рассмотреть подробнее: comment - комментарии, тут все понятно, необязательный параметр, distribution - выпуск или релиз, обычно здесь указывается кодовое наименование дистрибутива для которого предназначен репозитории или тип выпуска (стабильный, тестовый и т.д.), architectures - архитектура пакетов, так как 1С содержит пакеты только двух архитектур - указываем их, component - указывает ветку репозитория, согласно принятому в Debian соглашении пакеты делятся на свободные - free, с включением закрытых компонентов - contrib и несвободные - non-free. Последним параметром в строке идет внутренне имя репозитория.

При этом все значения, кроме architectures, вы можете задать на собственное усмотрение. Но мы советуем придерживаться следующих соображений, параметр distribution должен давать представление о назначении репозитория, поэтому мы решили выбрать значение stable для первого репозитория с последними версиями пакетов, и oldstable для второго. Также есть еще один момент, в некоторых командах Aptly требуется указывать имя репозитория, а в некоторых - distribution, чтобы уменьшить путаницу внутреннее имя и distribution стоит сделать одинаковыми.

Точно также создадим второй репозиторий:

aptly repo create --comment="1C Enterprise" --distribution="oldstable" --architectures="i386,amd64" --component="non-free" oldstable

Репозитории созданы, теперь в них нужно добавить пакеты. Скачаем с сайта 1С пакеты клиента и сервера для обеих архитектур (если вам не нужны пакеты какой-либо архитектуры, скажем i386, можете их не добавлять и вообще создать репозиторий без их поддержки). Мы скачали пакеты платформы 8.3.15 для stable и 8.3.14 для oldstable, эти архивы следует передать на сервер и распаковать, каждую платформу в свою директорию, в нашем случае это будут условные 1С14 и 1С15, которые предварительно нужно создать.

Будем считать, что скачанные архивы находятся в домашней директории пользователя root, там же создадим каталоги.

cd /root
mkdir 1C14 1C15

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

tar -xzvf deb_8_3_14_1993.tar.gz -C 1C14

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

После того, как вы распаковали все архивы, добавим пакеты из наших директорий в репозитории:

aptly repo add stable /root/1C15
aptly repo add oldstable /root/1C14

1c-repo-001.png

Синтаксис команды прост, в качестве параметров указываем внутреннее имя репозитория и каталог с пакетами.

Теперь мы вплотную подошли к одному важному моменту - публикации репозитория. Вы можете добавлять или удалять пакеты, но все изменения будут применены только тогда, когда вы опубликуете репозиторий (или обновите публикацию). Это позволяет, например, спокойно добавить пакеты в рабочее время, а публикацию выполнить вечером, не создавая неудобств работающим коллегам и сэкономив при этом свое личное время.

Так как наш репозиторий является сугубо внутренним и полностью нами контролируется, то мы не будем использовать цифровую подпись, а также ограничимся для доступа протоколом HTTP.

Для публикации следует выполнить:

aptly publish repo -skip-signing stable
aptly publish repo -skip-signing oldstable

Ключ -skip-signing обозначает публикацию репозитория без цифровой подписи, также в этой команде следует использовать не имя репозитория, а его distribution.

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

1c-repo-002.pngРепозитории опубликованы, но клиенты все еще не могут получить к ним доступ, для этого нам потребуется соответствующим образом настроенный веб-сервер. Так как репозиторий может быть размещен совместно с сервером 1С, то логично будет использовать для этих целей Apache. Установим его, если это не было сделано ранее:

apt install apache2

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

touch /etc/apache2/sites-available/aptly.conf

И внесем в него следующий текст:

<VirtualHost *:80>

ServerName repo.lab
ServerAdmin webmaster@localhost
DocumentRoot /opt/aptly/public

ErrorLog ${APACHE_LOG_DIR}/aptly_error.log
CustomLog ${APACHE_LOG_DIR}/aptly_access.log combined

<Directory /opt/aptly/public>
Options +Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

</VirtualHost>

В качестве ServerName укажем желаемое доменное имя репозитория, можете указать любой FQDN, при этом нежелательно использовать не принадлежащие вам доменные имена в реальных зонах, используйте несуществующие зоны, например, loc или lab. В доменных сетях используйте имя в адресном пространстве вашего домена. Опция DocumentRoot содержит путь к папке public репозитория, расположение которого было задано нами ранее при настройке Aptly.

Для указанного имени узла следует добавить A-запись на вашем DNS-сервере, либо строку следующего вида в /etc/hosts каждого узла, который будет работать с репозиторием:

192.168.111.200 repo.lab

где 192.168.111.200 - IP адрес вашего сервера.

Затем включим виртуальный хост и проверим правильность конфигурации веб-сервера:

a2ensite aptly
apachectl -t

Если проверка не выявит ошибок - перезапустим Apache:

service apache2 restart

Чтобы проверить работоспособность репозитория просто наберите в браузере http://repo.lab, если вы увидите следующую картину - то все работает правильно.

1c-repo-003.pngТеперь подключим репозиторий на клиентских ПК и серверах. Это можно сделать добавив необходимые строки непосредственно в файл /etc/apt/sources.list, либо добавить свой файл с адресами источников пакетов в /etc/apt/sources.list.d. Второй способ является более правильным, поэтому мы будем использовать именно его. Прежде всего создадим файл списка источников:

touch /etc/apt/sources.list.d/1cv83.list

Файл может иметь произвольное имя, но обязательное расширение .list, откроем его и внесем следующую строку:

deb [trusted=yes] http://repo.lab/stable non-free

В данном случае мы подключили репозиторий stable, для oldstable адрес будет:

deb [trusted=yes] http://repo.lab/oldstable non-free

Эти адреса были указаны при публикации репозитория, и мы советовали запомнить их или записать. Опция [trusted=yes] означает что данный репозиторий является доверенным и проверять подпись для него следует.

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

1c-repo-004.pngКак видим, одной головной болью стало меньше, теперь пользователи смогут обновить 1С самостоятельно, привычными инструментами из состава дистрибутива. Более того, при наличии обновлений система сама будет им сообщать об этом с предложением установить их.

Теперь добавим в наш репозиторий новые пакеты. Скажем мы хотим добавить в stable дистрибутив версии 8.3.16 и в oldstable 8.3.15, будем считать, что дистрибутивы уже скачаны и распакованы. Снова воспользуемся командами:

aptly repo add stable /root/1C16
aptly repo add oldstable /root/1C15

Но никаких изменений пока не произойдет, для этого нужно обновить публикацию:

aptly publish update -skip-signing stable
aptly publish update -skip-signing oldstable

Обратите внимание, что при добавлении мы указываем внутреннее имя репозитория, а при публикации - его distribution.

По мере того, как вы будете добавлять в репозитории новые пакеты там будут скапливаться старые версии, которые имеет смысл эпизодически удалять, в том числе и для экономии свободного места. Скажем, мы решили удалить пакеты платформы 8.3.14. Прежде всего удалим их из репозитория, для этого выполните команду:

aptly repo remove stable '(Name (~1c), Version (<=8.3.14.1993))'

В качестве опций укажем фильтры по имени и версии пакетов, при указании версии можно использовать следующие операторы: >=, <=, =, >>, << (последние два обозначают "строго больше" и "строго меньше). В нашем случае мы удаляем все пакеты, имеющие в имени 1С и версией ниже или равной 8.3.14.1993.

1c-repo-005.pngДля применения изменений публикацию репозитория необходимо обновить.

Несмотря на то, что мы удалили пакеты из репозитория физически они остаются храниться на диске и удалить их можно будет только после того, как они перестанут использоваться во всех опубликованных репозиториях. Поэтому если мы удалили пакеты платформы 8.3.14 из репозитория stable, но оставили их в oldstable, либо не опубликовали изменения, то удалить с диска эти пакеты нельзя. Для удаления неиспользуемых пакетов используйте команду:

aptly db cleanup

1c-repo-006.pngПосле этого ненужные пакеты будут удалены, а место на диске освобождено.

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