Re-fresh
Re-fresh -- это компонент для обновления существующих proxy-сертификатов на различных точках нашей инфраструктуры. Сейчас видны 3 точки, где обновление необходимо: Web UI, Pilot и GRAM.
На данный момент реализована только часть, предоставляющая сервис обновления для Pilot. Обновления обычных файлов в файловой системе пока не делается.
Инсталляция
- Взять исходники с https://svn.ngrid.ru/re-fresh/trunk;
- Установить в систему модуль config для Python: easy_install config;
- Собрать дистрибутив re-fresh: make sdist;
- Установить его: sudo make install.
Настройка
Нужно взять из исходного архива файл dot.re-fresh.conf и поместить либо в /etc/re-fresh.conf, либо к пользователю, от которого будет запускаться все хозяйство, в ~/.re-fresh.conf.
Можно редактировать следующие параметры конфигурации из секции main:
- db: полный путь к базе запросов -- каталогу, который будет хранить всю информацию; есть два требования:
- каталог должен лежать на локальном диске;
- все содержимое каталога должно располагаться в пределах одной файловой системы.
- proxytool: полный путь до утилиты proxytool;
- client_socket: полный путь до локального сокета, который будет использоваться для общения клиента и сервера.
Если вы хотите править конфигурацию логов, то прочитайте http://docs.python.org/library/logging.html.
Все компоненты используют один и тот же файл конфигурации (но он может различаться для различных пользователей, от которых выполняются компоненты, поэтому будьте внимательны).
Компоненты
На данный момент есть три компонента:
- re-freshd: демон, который планирует и производит обновления;
- re-fresh-interd: демон, который общается с клиентской частью: добавляет новые запросы и посылает сообщения keep-alive для старых;
- re-fresh: CLI для общения с демонизированными компонентами (на самом деле, только с re-fresh-interd).
Все компоненты в данный момент могут запускаться от непривелегированных пользователей.
Контроллер компонентов re-fresh-ctl
Демонов можно запускать и вручную, но удобнее это делать с помощью компонента re-fresh-ctl. Она поддерживает команды "start", "stop", "restart" и "status". re-fresh-ctl читает свой файл конфигурации из ~/.re-fresh-ctl.conf или из /etc/re-fresh-ctl.conf, что найдет раньше. Это обычные текстовые файлы в формате "переменная=значение" на каждой строчке, вокруг знака "равно" не должно быть пробелов. Распознаются следующие параметры конфигурации:
REFRESHD=/usr/bin/re-freshd REFRESH_INTERD=/usr/bin/re-fresh-interd REFRESHD_PID=/var/run/re-freshd.pid REFRESH_INTERD_PID=/var/run/re-fresh-interd.pid
Первые две переменные -- расположение демонов, вторые две -- расположение их PID-файлов.
Параметры CLI
re-fresh subscribe
Этот режим добавляет новый запрос на обновление в очередь re-freshd.
Параметры:
- --putback-cmd: shell-команда для возвращения обновленного proxy-сертификата клиенту; на ее стандартный ввод подается содержимое proxy-сертификата, если она возвращает ненулевой код завершения, то считается, что возвращение не удалось и запрос на обновление из очереди удаляется;
- --retrieve-cmd: shell-команда для вытягивания сертификата, который нужно обновлять; должна выдавать на стандартный вывод содержимое сертификата, если она возвращает ненулевой код завершения, то считается, что получение обновляемого proxy не удалось и запрос на обновление из очереди удаляется;
- --keepalive-period: [по-умолчанию, один час] сколько секунд запрос будет жить в очереди без получения сообщения keep-alive (другими словами, максимальный период между двумя сообщениями keep-alive); если в течение этого периода keep-alive не приходит, запрос из очереди обновления удаляется;
- --renewed-validity: [по-умолчанию, один день] сколько секунд будет действителен обновленный proxy-сертификат.
При нормальном завершении код возврата будет нулевым, а на стандартный вывод будет распечатан идентификатор запроса. При ошибке код возврата будет ненулевым, а на стандартный поток ошибок (на самом деле, туда, куда сказано в конфигурации logger-а из re-fresh.conf) будет выведено сообщение о причине неудачи.
re-fresh keepalive
Посылает сообщение keep-alive, чтобы запрос не был удален из очереди на обновление в течение следующего периода времени, указанного как keepalive-period, при subscribe.
Параметры:
- идентификатор запроса, обязательный параметр.
При нормальном завершении код возврата будет нулевым, а на стандартный вывод будет распечатан идентификатор запроса. При ошибке код возврата будет ненулевым, а на стандартный поток ошибок (на самом деле, туда, куда сказано в конфигурации logger-а из re-fresh.conf) будет выведено сообщение о причине неудачи.
Демон re-freshd
Запускается и производит необходимые обновления proxy-сертификатов, используя Proxytool в качестве провайдера для механизма обновлений.
Параметры:
- --config: путь к файлу конфигурации.
Демон re-fresh-interd
Общается с клиентской частью, добавляет в очередь новые запросы, посылает сообщения keep-alive.
Параметры:
- --config: путь к файлу конфигурации.
Техническая информация, в-основном, для разработчиков и прямых потребителей сервиса
Минимально необходимая функциональность:
- [не требуется, есть только keep-alive] подписать существующий proxy на обновление в режиме "обновляем, пока мы не отменим подписку",
- подписать существующий proxy на обновление в режиме "обновляем, пока идут keep-alive запросы для данного proxy",
- отсылка keep-alive запросов для указанного proxy,
- есть только keep-alive, то этого не требуется отмена подписки для указанного proxy;
- [неясно, где это нужно, пока не требуется] возможность навешивания глобальных pre-renewal и post-renewal hooks.
Простое обновление нужно на Pilot и GRAM, keep-alive режим -- на Web UI.
Обновляется и proxy-сертификат, и VOMS-расширения, если они есть. Список VOMS-расширений берется из сертификата, который был подписан на обновление; указывать их при подписке не нужно.
Renewal hooks
При подписке можно указать две команды, одна из которых будет выдавать на стандартный вывод proxy-сертификат, который нужно обновлять, другая -- получать на стандартный ввод обновленный сертификат. Они нужны на Pilot, чтобы можно было забрать у Pilot proxy, который нужно обновить, и отдать ему обновленный proxy.
Обновление на GRAM
Есть два решения:
- обновление с Pilot при помощи globus-credential-refresh, производимое, скажем, из post-renewal hook;
- обновление на самом GRAM.
Первый способ:
- снижает нагрузку на VOMS-сервер и MyProxy -- не нужно забирать одни и те же credentials дважды;
- добавляет нагрузки на Pilot;
- естественным образом делает так, что на GRAM появляется цепочка с последним сертификатом, у которого нет VOMS-расширений -- раньше у LCMAPS/LCAS были проблемы, если VOMS ACs лежат в последнем из сертификатов цепочки (я спросил у В.Вознесенского, актуальна ли сейчас эта проблема --rea).
Второй способ:
- требует возможности получать на GRAM уведомления о двух событиях: начало задачи и конец задачи; и нужна информация о расположении proxy-сертификата для этой задачи;
- не вовлекает Pilot, но добавляет нагрузку на VOMS и MyProxy;
- возможно, будет необходимо искуственно надставлять цепочку делегирования, чтобы избавиться от VOMS AC в последнем proxy-сертификате цепочки.
Лев сказал, что первый способ может быть реализован на Pilot; я пока полагаюсь именно на этот вариант, но если с GRAM будет все хорошо и будет время -- можно подумать и над вторым вариантом.
