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

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

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

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

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

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

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

1apt update
2apt install aptly

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

1aptly config show

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

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

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

1mv /root/.aptly.conf /etc/aptly.conf
Важно!

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

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

1"rootDir": "/opt/aptly",

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

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

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

1aptly 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 стоит сделать одинаковыми.

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

1aptly 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, там же создадим каталоги.

1cd /root
2mkdir 1C14 1C15

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

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

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

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

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

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

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

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

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

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

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

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

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

1apt install apache2

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

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

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

 1<VirtualHost *:80>
 2
 3ServerName repo.lab
 4ServerAdmin webmaster@localhost
 5DocumentRoot /opt/aptly/public
 6
 7ErrorLog ${APACHE_LOG_DIR}/aptly_error.log
 8CustomLog ${APACHE_LOG_DIR}/aptly_access.log combined
 9
10    <Directory /opt/aptly/public>
11       Options +Indexes +FollowSymLinks +MultiViews
12       AllowOverride All
13       Require all granted
14    </Directory>
15
16</VirtualHost>

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

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

1192.168.111.200 repo.lab

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

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

1a2ensite aptly
2apachectl -t

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

1service apache2 restart

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1aptly db cleanup

После этого ненужные пакеты будут удалены, а место на диске освобождено.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал