Популярность решений с использованием платформы 1С:Предприятие на базе Linux только растет, при этом растет и количество вопросов по администрированию и обслуживанию данной связки. Наиболее остро стоит вопрос обновления платформы, потому как ручное обновление пакетов на большом количестве машин вряд ли можно назвать приемлемым в наше время. Также не работают многие привычные по платформе Windows механизмы. К счастью, в Linux есть свои методы, позволяющие автоматизировать этот процесс, один из них - это создание собственного репозитория.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Как мы уже обсуждали в статье нашего курса для начинающих, современные 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
Синтаксис команды прост, в качестве параметров указываем внутреннее имя репозитория и каталог с пакетами.
Теперь мы вплотную подошли к одному важному моменту - публикации репозитория. Вы можете добавлять или удалять пакеты, но все изменения будут применены только тогда, когда вы опубликуете репозиторий (или обновите публикацию). Это позволяет, например, спокойно добавить пакеты в рабочее время, а публикацию выполнить вечером, не создавая неудобств работающим коллегам и сэкономив при этом свое личное время.
Так как наш репозиторий является сугубо внутренним и полностью нами контролируется, то мы не будем использовать цифровую подпись, а также ограничимся для доступа протоколом HTTP.
Для публикации следует выполнить:
aptly publish repo -skip-signing stable
aptly publish repo -skip-signing oldstable
Ключ -skip-signing обозначает публикацию репозитория без цифровой подписи, также в этой команде следует использовать не имя репозитория, а его distribution.
В выводе команды обратите внимание на адрес вашего репозитория, следует его запомнить или записать.
Репозитории опубликованы, но клиенты все еще не могут получить к ним доступ, для этого нам потребуется соответствующим образом настроенный веб-сервер. Так как репозиторий может быть размещен совместно с сервером 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, если вы увидите следующую картину - то все работает правильно.
Теперь подключим репозиторий на клиентских ПК и серверах. Это можно сделать добавив необходимые строки непосредственно в файл /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 в командной строке или графическими утилитами из состава окружения рабочего стола.
Как видим, одной головной болью стало меньше, теперь пользователи смогут обновить 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.
Для применения изменений публикацию репозитория необходимо обновить.
Несмотря на то, что мы удалили пакеты из репозитория физически они остаются храниться на диске и удалить их можно будет только после того, как они перестанут использоваться во всех опубликованных репозиториях. Поэтому если мы удалили пакеты платформы 8.3.14 из репозитория stable, но оставили их в oldstable, либо не опубликовали изменения, то удалить с диска эти пакеты нельзя. Для удаления неиспользуемых пакетов используйте команду:
aptly db cleanup
После этого ненужные пакеты будут удалены, а место на диске освобождено.
Как видим, создать и использовать собственный репозиторий несложно, даже не располагая глубокими знаниями Linux, мы намеренно ограничились самыми необходимыми действиями, чтобы не перегружать и не усложнять статью.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Последние комментарии