Устройство Альтератора
Запуск Альтератора
alterator -c <layout> -l ...
Параметры:
- -c <layout> выбрать режим работы (layout)
- -l режим отладки (добавление ./ к директориям, ALTERATOR_DATADIR, ALTERATOR_LIBDIR, не-демонизирование в layout'е configd)
Также сделаны скрипты типа alterator-cmdline, alterator-standalone, acc, configd и т.д., просто вызывающие alterator -c <соответствующий layout>.
Для поиска файлов Альтератор использует две директории: ALTERATOR_DATADIR и ALTERATOR_LIBDIR. В соответствующие переменные окружения можно записывать несколько директорий через “:". Если переменные пусты – устанавливаются значения по умолчанию (/usr/share/alterator и /usr/lib/alterator), если дан ключ -l, к ним спереди добавляется ".". Исключение — поиск desktop-файлов – только в /usr/share/alterator. См. также текст про отладку модулей.
Кроме того, configd.layout использует переменную окружения ALTERATOR_HTMLDIR (по умолчанию /var/www) — для поддержки старых модулей с template-* backend'ами, шаблоны которых лежат в /var/www... И еще кое-где жестко прописана директория /var/www
Layout'ы — список
см. /usr/share/alterator/layouts/
- configd — HTML интерфейс с выбором модулей через меню
- acc — QT-интерфейс с выбором модулей через меню
- wizard — QT-интерфейс с последовательностью модулей и кнопками вперед-назад
- standalone — QT-интерфейс для показа одного модуля
- cmdline — общение с модулями через command line
- autoinstall
- configd-cmdline — Дать команду работающему configd (для перезапуска ahttpd из-под alterator-ahttpd)
- fbi-stdin — для alterator-ovz
- attach
Layout'ы — устройство
Каждый layout собирает несколько модулей на шину woo-bus (см transport.scm)
Шина строится в виде цепочки функций, каждая из которых получает два аргумента – команду и следующую функцию. Функция как-то реагирует на команду, вызывает следующую функцию, получает от нее ответ и отдает свой ответ в предыдущую функцию...
Команды на шине: woo.scm. Описание команд (не всех).
- configd.layout:
- (server-socket «/var/run/configd/.sock» “root” “_configd”) — сокет для управления configd, почти не используется
- (configd) — заполнение html-шаблонов и обработка запросов от ahttpd
- (ensign) — общение с бекэндами
- acc.layout:
- (pipe-in «/usr/bin/alterator-browser-x11») — (через /etc/alternatives – на /usr/bin/alterator-browser-qt)
- (lookout) — работа с qt-frontend'ами
- (ensign) — общение с бекэндами
- — acc.smap
- wizard.layout
- (pipe-in «/usr/bin/alterator-browser-qt» «/tmp»)
- (lookout)
- (logfile «/tmp/wizard.log»)
- (ensign) — общение с бекэндами
- — wizard.smap
- standalone.layout
- (pipe-in «/usr/bin/alterator-browser-x11»)
- (lookout)
- (ensign) — общение с бекэндами
- — (define-operation add-view)
- — standalone.smap
- cmdline.layout
- (cmdline-in (option-ref options '() '()))
- (ensign) — общение с бекэндами
- autoinstall.layout
- (autoinstall *profile*)
- (ensign) — общение с бекэндами
- configd-cmdline
- (lambda (cmds next) (write (next (list (cons “woo” (option-ref options '() '() ))))) (newline))
- (client-socket «/var/run/configd/.sock»))
- fbi-stdin
- (std-in #t)
- (css-embed)
- (client-socket «/var/run/configd/.sock»))
- attach.layout
- (pipe-in «/usr/bin/qtbrowser») — gate to qtbrowser
- (client-socket) — gate to other alterator
qtbrowser, alterator-browser-qt, alterator-browser-x11 — одно и тоже :)
alterator-browser-qt принимает параметр – каталог, куда засунется его сокет. Это важно в wizard.layout, поскольку в процессе chroot'а при инсталляции нужно этот каталог не потерять.
Таким образом, на шине встречаются следующие штуки:
- (ensign) — общение с бекэндами. Через ensign/backend3.scm — работа с backend3, через ensign/midshipman.scm — работа с backend2
- (lookout) — работа с qt-frontend'ами
- (configd) — заполнение html-шаблонов и обработка запросов от ahttpd
- (server-socket <socket name> <user> <group>) — создать сокет (по умолчанию /tmp/alterator-sock) (transport/server-socket.scm)
- (client-socket <socket name>)
- (pipe-in <prog> <prog args>) — запуск программы и общение с ней через pipe
- (cmdline-in (option-ref options '() '()))
- (std-in #t)
- (logfile <log file>) — запись проходящих команд в log-файл
- (autoinstall <profile>)
- (lambda (cmds next) (write (next (list (cons “woo” (option-ref options '() '() ))))) (newline))
- (css-embed) использует свой html-root!
Карты
Чем отличается acc.layout, wizard.layout, stanalone.layout?