• Openvpn и несколько сетей

    merlin-vrn
    @merlin-vrn
    Опция «server» превращает сам OpenVPN как бы в отдельный роутер. Т.е. в нём самом внутри становится нужно настраивать маршруты.

    В общем, начинайте с рисования схемы, а процесс OpenVPN рисуйте как роутер, и соответственно учитывайте, что в нём тоже есть таблица маршрутизации и какая она должна быть.
    Ответ написан
    Комментировать
  • Вопрос о турбореактивных двигателях

    merlin-vrn
    @merlin-vrn
    Во-первых, двигатель не симметричен, «перед» и «зад» отличаются. Вас же не удивляет, что крыло поднимает самолёт вверх, хотя казалось бы, с какой бы стати, почему не вниз — причина та же, оно не симметрично.

    Во-вторых, симметрия дополнительно нарушается при запуске двигателя, а устроен он так, что после запуска реверсирование само по себе произойти не может.
    Ответ написан
    4 комментария
  • Судьба электронный адресов (Email) при увольнении работника (или приходе другого на позицию)?

    merlin-vrn
    @merlin-vrn
    Вообще нулевое правило: учётные записи никогда не удалять, только блокировать — мало ли, что было завязано на учётку и что мы безвозвратно потеряем при удалении.

    Например, система заявок, в которой хранится вся история заявок — удалили какую-нибудь учётку, и база становится несогласованной. Перекидывать заявки удаляемой записи «на НЛО» — семантически это бред, а самое главное — никакого преимущества по сравнению с «просто оставить запись».

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

    А служебные адреса (ну, там, manager, office и т. п.) и так должны быть алиасами на реальных людей. Так что при необходимости можно сделать менеджером или секретарём кого угодно, поменяв назначение алиаса в почтовой системе.
    Ответ написан
    5 комментариев
  • Не понимаю суть переноса домена (как быть с ns-ками)

    merlin-vrn
    @merlin-vrn
    Чтобы домен работал:

    1. DNS-серверы оператора должны делегировать домен на ваши DNS-севреры. Под «ваши» в данном случае имеется ввиду «на те, на которых вы разместили свою зону». Такое делегирование в зоне оператора выглядит так:

    (в зоне com)
    domain2.com. NS ns1.domain1.net.
    domain2.com. NS ns2.domain1.net.

    Если серверы так и расположены в другой зоне, этого достаточно. Если NS-серверы имеют имена в той же самой зоне, то появляются ещё специальные A-записи типа «а где этот сервер найти»:

    (в зоне com)
    domain1.net. NS ns1.domain1.net.
    domain1.net. NS ns2.domain1.net.
    ns1.domain1.net. A 192.168.0.1
    ns2.domain1.net. A 192.168.0.2

    Чтобы оператор это мог сделать, вы сообщаете ему имена, и, если потребуется, адреса DNS-серверов. Делается это через панель управления доменом у вашего регистратора, который там потом разберётся, что куда. Для домена, в котором расположены сами DNS-серверы, указываете вместе с IP-адресами, для остальных доменов, хостящихся на этих же DNS-серверах — без адресов, достаточно указать имена.

    2. Ваши DNS-серверы должны быть правильно сконфигурированы. Это значит:

    2.а: Все серверы имеют одинаковую версию зоны, т.е. один и тот же запрос ко всем серверам вернёт совершенно одинаковый ответ.
    2.б: В них есть служебные SOA-запись и NS-записи, в которых указаны все эти DNS-серверы.

    Т.е. для первого случая, в зоне domain.com будет такая информация:
    domain2.com. SOA ns1.domain1.net. dnsadmin.domain1.net. 2011100976 86400 7200 3600000 172800
    (числа в конце — это номер версии зоны и временные параметры; dnsadmin… — это служебный емейл, в котором @ заменили на .)
    domain2.com NS ns1.domain1.net.
    domain2.com NS ns2.domain1.net.

    Всё остальное здесь — записи domain2.com. A, domain2.com. MX, www.domain2.com. A и прочие — какие вам нужны, то есть, адреса ваших хостингов почты и сайта, jabber-сервер, DKIM-подпись, и тому подобное.

    Для второго случая в зоне нужно указать сами IP-адреса серверов в A-записях, т.к. они являются частью этой зоны:
    domain1.net. SOA ns1.domain1.net. dnsadmin.domain1.net. 2011100976 86400 7200 3600000 172800
    domain1.net. NS ns1.domain1.net.
    domain1.net. NS ns2.domain1.net.
    ns1.domain1.net. A 192.168.0.1
    ns2.domain1.net. A 192.168.0.2

    опять же, всё остальное здесь — записи domain1.net. A, domain1.net. MX, www.domain1.net. A и любые другие — по вашему желанию.
    Ответ написан
    Комментировать
  • Закон о сохранении приватности частной переписки?

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

    Иначе вопрос только этический.
    Ответ написан
    Комментировать
  • 'Низкоуровневое' распознавание речи (звуки)?

    merlin-vrn
    @merlin-vrn
    Возможно, вам вот указали sphinx, читайте про него. Есть версия для джавы (sphinx4), есть — для C (poketsphinx).

    Но.

    Дело в том, что сама схема распознавания речи основана на скрытых марковских моделях (HMM).

    Вот так работает sphinx: вначале происходит обработка звука (фильтрация, получение кепстра), потом из этого кепстра извлекаются особенности (features) — в итоге имеем поток, если не ошибаюсь, 13-мерных feature vectors с частотой 100 Гц. Вот векторы этого потока соотносятся с конкретными звуками — либо там будет переходный процесс, связанный с согласным, либо — много похожих векторов подряд — тянущийся гласный звук.

    Проблема тут в том, что этот поток очень грязный в смысле качества информации. Что там за особенности извлекли — одному Дану Журафски известно. Поток указанный обычно потом направляется в HMM, которая знает именно слова, в смысле — какие звуки обычно идут за какими и т. д., и на основании этих знаний предполагает, что на самом деле должно было получиться на выходе (что «имелось ввиду»). Я плохо представляю себе, как можно что-то делать без фильтрации с HMM.
    Ответ написан
    1 комментарий
  • Распределение памяти по папкам в RAID10?

    merlin-vrn
    @merlin-vrn
    А вы так не делайте. Используйте проверенную годами схему LVM on RAID. Тогда что угодно сможете увеличить потом на лету.

    И второе: избавляйтесь от привычки размечать сразу всё место. У меня часто так бывает — из терабайта размечено поначалу гигов сто, а потом если надо добавить куда-то — нет проблем, lvresize, resize2fs и всё, добавил. В данном случае вас это могло бы выручить даже без lvm: увеличиваем заполненные разделы на дисках (обычным fdiskом можно) а потом mdadm --grow и он растянет собственно RAID до заполнения увеличившихся разделов. А потом уже resize2fs. Но нет, вы всё место разметили, теперь вам /var мешает.

    В данном случае я бы рассыпал RAID и переделал бы систему. Это можно сделать почти без даунтайма, только какое-то время одна «половина» массива будет поддерживать старую, а на «второй» вы построите новую.
    Ответ написан
  • Проблема с загрузкой компьютера с raid

    merlin-vrn
    @merlin-vrn
    Во-первых, да, присоединюсь к запросам — что за материнская плата?

    После установки dmraid в livecd убунту начинает видеть диски? (Должна начать.) Если да, то вы можете как минимум спасти данные и систему (снять образ).

    Что видно в биосе до перезагрузки с убунту (ну, как это сочетается с offline member)? Что видно после перезагрузки?

    btw, 9.04 — это весьма древняя система, вполне реально такое, что в ней старый mdadm, который не умеет, а в новой, например, может суметь. Ориентируйтесь по версии ядра: 2.6.32 не умеет, 3.2 умеет. (Сам по себе dmraid — это гораздо более древнее решение, чем поддержка bios fake raidов в mdraid).
    Ответ написан
  • Перенаправление ejabberd

    merlin-vrn
    @merlin-vrn
    Я бы сделал отдельный виртуалхост с обратным прокси. Тогда даже с сайтами на этой же системе сочетается.
    Ответ написан
    Комментировать
  • Apache + mod_proxy_uwsgi + php — не согласуется результат работы при сходных ProxyPass и ProxyPassMatch?

    merlin-vrn
    @merlin-vrn Автор вопроса
    В общем, с помощью грубого костыля в файле apache2/mod_proxy_uwsgi.c вида

    16a17
    > #include <string.h>
    104a106,113
    >     const char *_path_info = apr_table_get(r->subprocess_env, "PATH_INFO");
    > 
    >     if (script_name && _path_info && (script_name[0] != _path_info[0])) {
    >         // APR bug where value in path_info doesn't correspond to what is defined in CGI spec http://tools.ietf.org/html/rfc3875#section-4.1.5
    >         // we'll fix it here by ourselves, scanning to first '/' and erasing everything before it
    >         apr_table_set(r->subprocess_env, "PATH_INFO", strchr(_path_info, '/'));
    >     }
    > 
    


    удалось запустить работу как надо.
    Ответ написан
    Комментировать
  • Postfix+Amavisd-new: «User unknown» или как не пропускать письма с несуществующими получателями

    merlin-vrn
    @merlin-vrn
    Простите, вы читали www.postfix.org/BACKSCATTER_README.html? Что именно было сделано согласно этой документации и что не получилось?
    Ответ написан
    Комментировать
  • Поиск пользователей в БД, как эффективнее?

    merlin-vrn
    @merlin-vrn
    Так готовые решения есть. Мы пробовали, работает на базе из как раз нескольких тысяч наименований (hardworm поправит меня, если я ошибаюсь). Использовали мы Ajax Autocomplete for jQuery.

    Что касается запроса к таблице из ~5000 наименований — так то ни для какой базы не работа, при условии, что по соответствующему полю есть индекс.
    Ответ написан
  • CISCO UCS Embedded RAID и RedHat?

    merlin-vrn
    @merlin-vrn
    Вообще в 100% случаев моей практики драйверы RAID-контроллера отдельно линуксу были не нужны, т.к. они в него встроены ещё лет десять назад.

    Документация LSI 1.5-летней давности — это вполне нормально и актуально. Даже если у вас более новая железка, вполне вероятно, что документация ей всё равно хотя бы частично соответствует.
    Ответ написан
    Комментировать
  • Проблема с SMTP-сервером

    merlin-vrn
    @merlin-vrn
    Отправляющий сервер использовал слишком много команд «не по теме» протокола, в данном случае, NOOP. Это принимающему серверу не понравилось, он обиделся и не хочет принимать почту от такого грубияна.

    Честно говоря, мне вообще непонятна логика разработчика, который вставил такой код в программу. Зачем вообще мог потребоваться NOOP?

    Это явный косяк отправляющей системы. Разбирайтесь в настройках exim чтобы он не флудил NOOPами, либо, как тут разумно посоветовали, используйте Postfix.
    Ответ написан
    Комментировать
  • CORS + Basic Authentication не работает в большинстве браузеров

    merlin-vrn
    @merlin-vrn
    В общем, я склонен считать, что это баг в jQuery. Я написал код для CORS с Basic Auth «руками» без jQuery, он работает как минимум в Fx 10 и 17 и в Opera 12.10

    Код следующий:
    на клиенте —

    <!DOCTYPE html>
    <html><head>
    
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>CORS testing</title>
    <script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function() {
        document.getElementById("1").addEventListener("click", function() {
            var xhr = new XMLHttpRequest();
            xhr.onload = function(e) {
                document.getElementById("2").textContent = xhr.responseText;
            };
            xhr.open("GET", "http://dev.merlin-vrn.tk/cors/api.php", true);
    
    //        xhr.withCredentials = true;
            xhr.setRequestHeader("Authorization", "Basic dGVzdHVzZXI6dGVzdHBhc3N3b3Jk");
    
            xhr.send();
        }, false);
    }, false);
    </script>
    
    </head><body>
    
    <button id="1">Click me</button>
    <div id="2"></div>
    
    </body></html>
    
    


    на севрере —
    <?php
    
    if (isset($_SERVER['HTTP_ORIGIN']))
        header("Access-Control-Allow-Origin: $_SERVER[HTTP_ORIGIN]");
    
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {                                                                                                                        
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))                                                                                                        
            header("Access-Control-Allow-Methods: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_METHOD]");                                                                         
                                                                                                                                                                          
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))                                                                                                       
            header("Access-Control-Allow-Headers: $_SERVER[HTTP_ACCESS_CONTROL_REQUEST_HEADERS]");                                                                        
    } else {                                                                                                                                                              
        header('WWW-Authenticate: Basic realm="API"');                                                                                                                    
    
        header("Content-Type: application/json");
    
        if (isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == "testuser" && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW'] == "testpassword") {
            header('HTTP/1.1 200 OK');
            echo '{"result": "ok"}';
        } else {
            echo '{"result": "noauth"}';
        }
    }
    
    file_put_contents("api-log.txt", "$_SERVER[REQUEST_METHOD] $_SERVER[REQUEST_URI] $_SERVER[SERVER_PROTOCOL]\n", FILE_APPEND);
    file_put_contents("api-log.txt", print_r($GLOBALS, true), FILE_APPEND);
    file_put_contents("api-log.txt", "\n\n", FILE_APPEND);
    
    ?>
    
    


    Логирование в конце этого скрипта — просто для удобства при тестировании. Живьём можно видеть здесь.

    P.S. господа, подскажите хайлайтер для хабра, а?
    Ответ написан
    3 комментария
  • Почему разные результаты сканирования при сканировании через компьютер и через Sane (на openwrt)? Сканер HP ScanJet 3500c?

    merlin-vrn
    @merlin-vrn
    предлагаю загрузить на компе убунту (хотя бы с флешки) и попробовать сканировать оттуда. Так можно будет сделать вывод — виноват ли это sane-драйвер вообще или глюк в сборке под openwrt.
    Ответ написан
  • Восстановления разделов без потери данных на переносном USB-винте

    merlin-vrn
    @merlin-vrn
    И тем не менее, перед тем, как начинать, найдите друга с 500 гб места, чтобы снять образ. Любые восстановления данных начинаются с этого. Нет такого друга — я бы даже за деньги кого-нибудь попросил, но без образа никак.

    А дальше как угодно — у вас неограниченное количество попыток будет.
    Ответ написан
    Комментировать
  • Best practices при обработке серверных ошибок при Ajax запросе?

    merlin-vrn
    @merlin-vrn
    А это зависит от того, что вообще делалось.

    Если вы отправляли почту через ajax, нужно честно сказать, что при отправке почты произошла ошибка. Пусть это будет не alert, но заметный div с сообщением нужен.
    А если это было просто обновление списка комментариев к записи в фоновом режиме, то лучше всего промолчать, либо просто перезагрузить страницу без ajax.

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