Нашёл решение "неудобной" задачи.
Не очень красивое - но работает. Лучше чем вот так напрягать sed через шелл:
var2=`echo $(var) | sed s/\ /,/g`
Нужно в Makefile заменить в переменной все пробелы запятыми. Если бы меняли все двоеточия на точки с запятой - проблем никаких:
$(subst :,;,$(var))
А нужная нам конструкция явно не работает:
$(subst ,,,$(var))
Решение - сделать переменные содержащие пробел и запятую. Более того - переменные можно сделать с "говорящими" именами: $(,) и $( ). На самом деле можно их использовать как "$ " и "$," - без кавычек :) Вот "код":
, := ,
space :=
space +=
$(space) :=
$(space) +=
После него работает, например, такой вызов:
$(subst $ ,$(,),$(var))
2009-07-07
акм и все-все-все
Никто может и не заметил, но в К+ с какого-то времени появилась замечательная опция: /makeqr
Что крайне удобно для автоматической онлайн-регистрации.
Клоны АКМ работают "по-старинке" - то есть ищут окошки, нажимают кнопки, копируют и вставляют текст..
А процедура "онлайн-регистрации" куда проще..
0. Сносите регистрацию и историю пополнений. По желанию.
del DISTR\BIS\*.BIS
1. Формируете файлы SEND\*.QR:
cons.exe /makeqr
2. Отправляете файлы на сервер регистрации.
3. Получаете архив с файлами ответов (*.AR).
4. Распаковываете его в папку RECEIVE
5. Запускаете cons.exe /REG
"Все базы зарегистрированы"
Причём если запросы не поменялись (например всего лишь были приняты обновления на другой машине - и базы перенесены оттуда, или была переустановленна система
== если те же din и тот же BIOS), то и ответы будет идентичными :)
То есть ответы на регистрацию могут использоваться неоднократно. Надо только сохранить архив с ответами и выполнять пункты 4 и 5 :)
Например в скрипте, автоматически рассылающем через rsync обновлённые базы..
Если ваш комплект содержит DIN от разных ИЦ - кроме cons.qr появляются индивидуальные файлы запросов. Лучше всего их собрать в один файл - если номер ИЦ вас не беспокоит. Да и всем так удобнее и проще..
Для работы "в автоматическом режиме" есть пара скриптиков для такой "активности".
1. Active Perl (клиентская часть: создаёт QR, собирает в один файл, отправляет на сервер, принимает архив, распаковывает, запускает регистрацию..)
Может быть эту часть проще переписать на .net - чтобы уйти от зависимости перла.. Хотя опять же - проще использовать Gen чтобы формировать ответы на месте. Но тогда уже есть АКМС - переписанный на Цэ Gen.. Только его исходников особо не видно.. Но можно использовать бинарник..
Вариантов много, благодаря автору Gen открывшего источник получения магических чисел :)
2. perl+CGI+Gen.html (серверная часть: принимает запросы от клиентов, ищет в них запросы консультанта, запускает javascript-функцию из "Генератора циферок", собирает ответы в zip файл и посылает клиенту).. Для работы нужен javascript Gen.html (который может быть без особого труда найден на просторах рунета) :)
Без Gen'а, имхо, всё выглядит вполне "лицензионно чистым" и ничьих прав в принципе даже и не нарушает - нет программ "нарушающих работу баз данных".. Останется проблема легализации нахождения у вас К+..
Что крайне удобно для автоматической онлайн-регистрации.
Клоны АКМ работают "по-старинке" - то есть ищут окошки, нажимают кнопки, копируют и вставляют текст..
А процедура "онлайн-регистрации" куда проще..
0. Сносите регистрацию и историю пополнений. По желанию.
del DISTR\BIS\*.BIS
1. Формируете файлы SEND\*.QR:
cons.exe /makeqr
2. Отправляете файлы на сервер регистрации.
3. Получаете архив с файлами ответов (*.AR).
4. Распаковываете его в папку RECEIVE
5. Запускаете cons.exe /REG
"Все базы зарегистрированы"
Причём если запросы не поменялись (например всего лишь были приняты обновления на другой машине - и базы перенесены оттуда, или была переустановленна система
== если те же din и тот же BIOS), то и ответы будет идентичными :)
То есть ответы на регистрацию могут использоваться неоднократно. Надо только сохранить архив с ответами и выполнять пункты 4 и 5 :)
Например в скрипте, автоматически рассылающем через rsync обновлённые базы..
Если ваш комплект содержит DIN от разных ИЦ - кроме cons.qr появляются индивидуальные файлы запросов. Лучше всего их собрать в один файл - если номер ИЦ вас не беспокоит. Да и всем так удобнее и проще..
Для работы "в автоматическом режиме" есть пара скриптиков для такой "активности".
1. Active Perl (клиентская часть: создаёт QR, собирает в один файл, отправляет на сервер, принимает архив, распаковывает, запускает регистрацию..)
Может быть эту часть проще переписать на .net - чтобы уйти от зависимости перла.. Хотя опять же - проще использовать Gen чтобы формировать ответы на месте. Но тогда уже есть АКМС - переписанный на Цэ Gen.. Только его исходников особо не видно.. Но можно использовать бинарник..
Вариантов много, благодаря автору Gen открывшего источник получения магических чисел :)
2. perl+CGI+Gen.html (серверная часть: принимает запросы от клиентов, ищет в них запросы консультанта, запускает javascript-функцию из "Генератора циферок", собирает ответы в zip файл и посылает клиенту).. Для работы нужен javascript Gen.html (который может быть без особого труда найден на просторах рунета) :)
Без Gen'а, имхо, всё выглядит вполне "лицензионно чистым" и ничьих прав в принципе даже и не нарушает - нет программ "нарушающих работу баз данных".. Останется проблема легализации нахождения у вас К+..
Ngnix как почтовый прокси сервер
Возникла задачка - закинуть почту из старого корпоративного сервера в гугль аппс..
Сборщик POP3 у гугля естественно есть. Провайдер даёт pop3 доступ.
Казалось бы всё просто. Ан-нет!
Провайдер (ЦентрТелеком) не пускает к себе на POP3 из внешних сетей.
То есть порт то открыт - но всегда auth failed.
Сначала решение "в лоб". Попытаться открыть ssh туннель.
Но пол-часика помучившись - так и не удалось.
Руки кривые и что-то не так делал :)
Второе решение - разобраться таки с nginx.
Ну чего там - "прокси сервер" :)
Но вот где адрес сервера к которому подключаться надо - в конфигах
"прокси" подозрительно не находилось. Всё указывало на необходимость
использовать какой-то http_auth.
Опять же - для этого нужен внешний скрипт, а скрипты к ngnix'у прикручивать..
Безопасно пока не научился :)
Однако можно заставить самого nginx отвечать на свои же запросы :)
1. Ставим:
sudo apt-get install nginx
sudo apt-get build-dep nginx
2. Скачиваем nginx с родного сайта.
И распаковываем. unp nginx*
Тот, что идёт в комплекте с убунтой во-первый старый, (даже из самой свежей репки не говоря о харди что у меня стоит). Во вторых собран без поддержки mail proxy.
Можно, конечно, сделать apt-get source nginx
Добавить в файле debian/rules опцию --with-mail
и сделать apt-get source -b nginx
Но это слишком просто :)
3. В папке создаём файлик config-run
Конфиг взял из убунты - благо он крайне простой - добавил и убрал что не нужно.
4. Собираем:
. config-run
make
5. Копируем на будущий прокси обновлённый бинарник.
scp objs/nginx root@myproxy:/usr/sbin/
6. Правим конфиг /etc/nginx/nginx.conf
7. Запускаем и проверяем.
Что ещё можно. Можно проверять доступ - запрос на /auth содержит поле Client-IP.
Можно сделать "настоящий" скрипт. Или использовать возможности rewrite самого nginx..
Например для перенаправления на разные pop сервера для разных IP - или например для разных логинов..
Сборщик POP3 у гугля естественно есть. Провайдер даёт pop3 доступ.
Казалось бы всё просто. Ан-нет!
Провайдер (ЦентрТелеком) не пускает к себе на POP3 из внешних сетей.
То есть порт то открыт - но всегда auth failed.
Сначала решение "в лоб". Попытаться открыть ssh туннель.
Но пол-часика помучившись - так и не удалось.
Руки кривые и что-то не так делал :)
Второе решение - разобраться таки с nginx.
Ну чего там - "прокси сервер" :)
Но вот где адрес сервера к которому подключаться надо - в конфигах
"прокси" подозрительно не находилось. Всё указывало на необходимость
использовать какой-то http_auth.
Опять же - для этого нужен внешний скрипт, а скрипты к ngnix'у прикручивать..
Безопасно пока не научился :)
Однако можно заставить самого nginx отвечать на свои же запросы :)
1. Ставим:
sudo apt-get install nginx
sudo apt-get build-dep nginx
2. Скачиваем nginx с родного сайта.
И распаковываем. unp nginx*
Тот, что идёт в комплекте с убунтой во-первый старый, (даже из самой свежей репки не говоря о харди что у меня стоит). Во вторых собран без поддержки mail proxy.
Можно, конечно, сделать apt-get source nginx
Добавить в файле debian/rules опцию --with-mail
и сделать apt-get source -b nginx
Но это слишком просто :)
3. В папке создаём файлик config-run
./configure --conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-mail
Конфиг взял из убунты - благо он крайне простой - добавил и убрал что не нужно.
4. Собираем:
. config-run
make
5. Копируем на будущий прокси обновлённый бинарник.
scp objs/nginx root@myproxy:/usr/sbin/
6. Правим конфиг /etc/nginx/nginx.conf
user www-data;
worker_processes 1;
events {worker_connections 10;}
http {server {
listen 8080;
location /auth { # mailcheck
add_header Auth-Status OK;
add_header Auth-Server 212.26.224.70;# pop3.ryazan.ru;
add_header Auth-Port 110;
return 204;
}
}}
mail {
auth_http localhost:8080/auth;
server {
listen 110;
protocol pop3;
proxy on;
}
}
7. Запускаем и проверяем.
Что ещё можно. Можно проверять доступ - запрос на /auth содержит поле Client-IP.
Можно сделать "настоящий" скрипт. Или использовать возможности rewrite самого nginx..
Например для перенаправления на разные pop сервера для разных IP - или например для разных логинов..
Подписаться на:
Сообщения (Atom)