LINUX.ORG.RU

Сообщения alozovskoy

 

AJAX/Websocket + БД

Привет!

Пишу небольшую вебморду, которая будет просто отдавать данные из БД. Данные в БД - информация о работе некоторых скриптов - они пишут в одну таблицу время запуска\окончания работы, exit code и т.д., в другую - данные по промежуточным этапам своей работы, принцип тот же. С учетом того, что большой нагрузки не предвидится (максимум 3..4 простых инсерта в секунду в «пике») я взял sqlite (да и полноценный сервер БД тащить совсем не хочется).

В вебморде есть несколько вариантов отображения информации - текущие выполняемые скрипты, небольшая статистика - например, сколько из последних 10 скриптов отработали успешно, а сколько «упали», и т.п. Другой случай - отображение информации по текущему выполняемому скрипту (те самые промежуточные шаги).

Хочется сделать это все в реалтайме, но не могу понять как это делать правильно. Изначально планировал взять AJAX, с ним я уже сталкивался, да и сама технология, на мой взгляд, довольно простая - отправляй запросы, сервер его обрабатывает (селект в БД делает) и отдает ответ. Но потом почитал интернеты (и тут тоже топик завел), где и узнал о websocket'ах. WS показался интересным, решил в качестве сервера использовать tornado (python). С учетом того, что у меня планируются постоянные соединения клиент<>сервер и отправка данных не только по запросу пользователя, мне кажется что лучше будет не на каждый поток по определенному таймеру выполнять селекты той же статистики, а выбрать ее один раз и разослать клиентам. Не будет ли это слишком «тяжелой» задачей по сравнению с AJAX (там то клиентские запросы «размазаны» по времени) или все-таки каждый поток обрабатывать отдельно? Стоит ли использовать ws везде? То есть, например, статистику по текущим таскам и «лог» текущей задачи лучше показывать в реалтайме, а вот информацию о «последних 10 задачах» может вынести в AJAX и дергать раз в какие-нибудь 10 секунд (тут реалтайм не критичен)? Опять же везде пишут что ws хорошо работает с маленькими частыми порциями данных, но тут у меня получится что одна строчка из бд будет весить минимум байт 200 (хотя все равно меньше размера заголовков в случае AJAX получается). Всякую статику, я так понимаю, вообще нет смысла отдавать через websocket? В общем с виду технология крутая, но как правильно использовать - не пойму.

Ну и еще один вопрос вдогонку - стоит ли как-то кэшировать данные из sqlite, и если да то может что-то посоветуете?

Заранее спасибо!

 ,

alozovskoy
()

Зачем ноутбуку «открываться» на 180°

Собственно, сабж (иллюстрация).

Есть ноут который может так открываться, никак не пойму зачем это нужно - обычно у меня угол между клавиатурой и дисплеем примерно 90..100°. Расскажите о своих юзкейсах этой фичи, пожалуйста.

 

alozovskoy
()

Что полезного сделать на локалхосте

Привет!

Собственно, что такого можно поделать на локалхосте, что в будущем может пригодится при работе каким-нибудь сисадмином или вроде того? Думаю что умение писать виджеты для осома да пересобирать генту вряд ли пригодится, а разворачивать отказоустойчивый кластер БД и прочие хайлоады не имеет смысла просто потому что должную нагрузку локалхостом не создашь, соответственно полезный опыт будет практически нулевой.

Сейчас потихоньку разбираюсь с LXC, думаю это может пригодится. Что еще можете посоветовать, ну или может есть истории успеха?

 ,

alozovskoy
()

Помогите с NAT'ом

Добрый день!

Есть ПК (дальше «хост»), на котором есть LXC-контейнер (дальше «контейнер»). Хост по vpn подключен к другой сети, в которую хочу получить доступ из контейнера. Пингую хост за vpn из контейнера - ответов не получаю. На хосте в tcpdump вижу такую картину - пинг уходит с ip контейнера в качестве источника, а ответ приходит с ip хоста (не контейнера) в качестве назначения и дальше в контейнер пакет не натится. Ресурсы в интернетах из контейнера доступны. Виртуалка в virtualbox на этом же хосте нормально может общаться с хостами за vpn. В случае с virtualbox в настройках сетевого адаптера указан просто NAT, конфиг контейнера:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = virbr0
lxc.network.ipv4 = 192.168.122.2/24

ifconfig хоста (lo не стал писать)

tap0      Link encap:Ethernet  HWaddr 02:ac:36:d9:56:3a  
          inet addr:172.16.3.31  Bcast:172.16.3.255  Mask:255.255.255.0
          inet6 addr: fe80::ac:36ff:fed9:563a/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1380  Metric:1

virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          
wlan0     Link encap:Ethernet  HWaddr 74:e5:43:78:d4:f0  
          inet addr:10.0.1.210  Bcast:10.0.1.255  Mask:255.255.255.0
          inet6 addr: fe80::76e5:43ff:fe78:d4f0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

tap0 - это интерфейс vpn-клиента, virbr0 - интерфейс lxc, wlan0 - wifi, то есть выход в интернеты.

iptables

*mangle
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT


*nat
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT

*filter
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
COMMIT

Правила в iptables не меняются при включении\отключении виртуалки в virtualbox. На мой взгляд все в норме, но явно что-то упускаю.

В общем я не знаю куда копать, подскажите, пожалуйста. Заранее огромное спасибо!

 , ,

alozovskoy
()

Расскажите про systray

Привет!

Расскажите мне, пожалуйста, как работает systray, для примера на pypanel (мало кода, python, все должно быть просто). Судя по http://standards.freedesktop.org/systemtray-spec/systemtray-spec-latest.html и если я правильно понял в трее находятся не какие-то «иконки», а окна, то есть трей просто располагает «окно» нужного размера в определенном месте экрана. Со стороны приложения это позволяет еще и все что угодно в этом «окне» рисовать (как, например, в skype, который показывает количество непрочитанных сообщений). Если начать ковырять трей в pypanel то я могу максимум получить имя окна, которое пытается попасть в трей, никаких путей для иконок я там не нашел.

В общем, у меня два вопроса: правильно ли я понял как это все работает и есть ли возможность (а может быть готовое решение) как заменить иконки в трее например на текст? Во втором случае мне еще нужно как-то отследить что пытается отобразить приложение - всякие IM могут там показывать сетевой статус, новые сообщения и неизвестно что еще. Это реально?

 , ,

alozovskoy
()

Поиск opensource проектов

Привет!

Периодически выдается свободное время, которое хочется потратить с пользой, и иногда это время хочется использовать с пользой не только для себя. Как вариант - пописать что-нибудь для opensource. Но я никак не могу найти интересных (и при этом не слишком громоздких и сложных) проектов на том же GitHub, например. Как вы ищете подобное? Может где-то есть сайт, на котором разработчики пишут что-то вроде «я вот пилю интересную штуку, присоединяйтесь!» или даже «помогите написать скрипт»? Про фриланс в курсе, но это не то, что мне нужно - хочется делать до, что самому интересно, и самому контролировать свое участие в проекте, а не исполнять прихоти заказчика.

Пока пытаюсь писать для того, что использую - WM, система мониторинга etc, но иногда «хочется чего-то нового».

 , ,

alozovskoy
()

Зачем форкать?

Товарищи, объясните, пожалуйста, зачем делают форки? Вот в теме про RIP CrunchBang'а на вопрос «чем он отличается от Debian» мне сказали что «там был годно настроенный openbox». Настройки openbox, на сколько мне известно, это просто xml'ка (ну может еще дополнительно какие пакеты поставить придется), это нельзя было просто залить в апстрим или вообще просто выложить эти конфиги? Зачем форкать целый дистр просто для того чтоб впилить туда иначе настроенное DE?

Или вот Ubuntu - зечем нужны всякие Kubuntu, Lubuntu, Xubuntu etc, вопрос по выбору DE нельзя было вынести в установщик и поддерживать одну какую-нибудь Megabuntu?

Или кто-то там форкает Debian чтоб выпилить из него systemd - нельзя просто на этапе установки дать выбор системы инициализации, а потом просто собирать пакеты с нужными опциями (или держать в репах две версии пакетов)? Ведь очевидно, что гораздо проще поддерживать один дистр, чем over9000 слегка отличающихся? Дело в фатальном недостатке «форкуемой» системы?

В общем, я не понимаю, зачем небольшие изменения выносить в отдельные форки, поясните, пожалуйста!

 ,

alozovskoy
()

Realtime вывод результатов команды на страницу

Привет!

Подскажите, пожалуйста, чем можно реализовать realtime вывод результатов выполнения скрипта\команды на вебстраницу используя python (планируется использовать «встроенный» вебсервер, то есть Nginx\Apache и прочие использоваться не будут). Вариант дергать «обработчик» скрипта через небольшие промежутки времени через Ajax мне не очень нравится, да и вообще нужен реалтайм. Может проще для этого встроить какой-нибудь webshell с ограниченной функциональностью? Гуглятся варианты с node.js в основном, нашел еще вот такой вариант, но в браузере у меня не работает, текст выводится только после окончания выполнения скрипта (через curl все в норме).

В общем, как обычно решаются такие задачи? Заранее огромное спасибо!

 ,

alozovskoy
()

LUG Воронеж

Так как форум Воронежского LUG лежит (SQL ERROR [ postgres ]) спрошу тут - товарищи, у нас LUG «заглох»? Встреча в 2013 году похоже последняя была, на форум вот не попасть. Или куда-то перекатились? Кастану тех кто был в прошлой новости про встречу LUG, ссори если кого лишнего прихватил:

dexpl hippi90 MikeB Solace imul ns_ramesses BattleCoder DarkAmateur xroff mish_mish elve smalldeb Sauron_AZM selivan

 ,

alozovskoy
()

Ограничить область перемещения курсора

Привет!

Есть два монитора, конфигурирую через xrandr, wm - qtile. Хочу ограничить область перемещения курсора мыши одним монитором, то есть чтоб за границы монитора (на второй монитор) курсор не перебегал. Нашел несколько похожих топиков, в том числе и тут, но простого рабочего варианта не увидел. Что пробовал:

* Отслеживать координаты курсора и перемещать курсор при помощи xdotool в скрипте с while true - жрет CPU, выглядит ужасно - курсор дергается около границы, а не «упирается» в нее.

* dualscreen-mouse-utils (David Antliff) 2009 года (советуют на гентувики и аналогичных топиках) - тут предлагается использовать перемещение курсора между разными screen, в ситуации когда у меня один screen из двух мониторов оно не работает.

Сейчас рассматриваю вариант запуск двух xserver на разных мониторах, но такой вариант, как я думаю, несет в себе проблемы с перемещением окон между мониторами (это висит на хоткеях WM сейчас и проблем с этим нет, то есть курсор мне для перемещения не нужен) и буфером обмена (тут можно, конечно, закостылить).

И, да, курсор перекидывать между двумя мониторами мне удается через xdotool mousemove с параметром --screen, так что тут проблем нет.

В общем, что можете посоветовать? Может есть какой-то WM (в первую очередь интересуют тайловые) где это есть «из коробки»?

Заранее спасибо!

 , , ,

alozovskoy
()

«Легальный» открытый wi-fi

Привет!

Хочу у себя открытую точку доступа поднять из альтруистических соображений, в связи с чем два вопроса из области «законодательства»:

1. Должен ли я как-то предупреждать пользователя что у меня могут сохраниться его маки, логи dns-запросов и так далее? Не «окажется» ли что я шпионю за своими соседями?

2. Если клиент моей открытой сети в интернетах напишет «вася - редиска», могу я как-то объяснить что хоть ip и мой, но писал не я? Баны на всяких форумах меня не очень интересуют, меня больше заботят вопросы, которыми занимается роскомнадзор.

Пишу сюда потому, что здесь есть специалисты и опытные товарищи по любому вопросу, да и работать все это будет под управление GNU/Linux.

Заранее спасибо за информацию!

 

alozovskoy
()

DD-WRT, деградация соединения

Привет!

Есть роутер, который работает под управлением DD-WRT v24-sp2 (12/03/14) std (SVN revision 25544), со временем (около 3-5 дней примерно) связь с роутером ухудшается, например пинги идут около 200 мс, при чем ухудшается постоянно - на второй день после рестарта связь хуже, чем на первый и т.д. После перезагрузки роутера пинг становится стабильным, около 1-2 мс. Еще интересно что время ответа на пинги выглядит вот так:

icmp_seq=14 time=25.3
icmp_seq=15 time=23.4
icmp_seq=16 time=22.0
icmp_seq=17 time=20.5
icmp_seq=18 time=50.5
icmp_seq=19 time=17.0
icmp_seq=20 time=15.7
icmp_seq=21 time=14.7
icmp_seq=22 time=11.9
icmp_seq=23 time=10.7
icmp_seq=24 time=8.75
icmp_seq=25 time=6.92
icmp_seq=26 time=5.61
icmp_seq=27 time=3.74
icmp_seq=28 time=1.76
icmp_seq=29 time=99.8
icmp_seq=30 time=97.9
icmp_seq=31 time=96.8
icmp_seq=32 time=94.9
icmp_seq=33 time=93.9

Подскажите, пожалуйста, куда копать? По вебморде роутера проблем с памятью\CPU\количеством соединений нет.

Заранее огромное спасибо!

 , ,

alozovskoy
()

Посоветуйте логику хранения конфигов

Привет!

Не могу продумать логику хранения конфигурационных файлов, надеюсь у кого-то есть истории успеха и он ими поделится.

Конфиги планирую хранить в git, но это не обязательно.

У меня есть несколько хостов, например host1...host4. На всех 4 хостах есть каталог configdir. На всех хостах в configdir есть файл config1, он везде одинаковый. На хостах host1 и host3 есть конфиг config2, и его содержимое на каждом хосте разное (на host2 и host4 этого файла нет вообще). Так вот, если делать это на уровне веток то их (веток) будет очень много - это у меня в примере 4 хоста = 3 ветки, по факту их гораздо больше (хотя тут можно решить путем заведения отдельных реп для разных групп хостов). Но как быть с ситуацией если я меняю что-то в config1? мне нужно пробежаться по веткам и смержить туда master, что не очень удобно. Опять же, если исправить config1 в немастер-ветке то эти изменения по сути пропадут.

Другой вариант использовать симлинки, но как это прикрутить к vcs мне не понятно.

В общем, нужны советы. Заранее спасибо!

 

alozovskoy
()

Как определить что ip адрес статический?

В правилах написано

Личная информация о пользователях

Модераторы сайта имеют доступ к информации о пользователе, недоступной обычным пользователям. Следующая информация считается личной:

<...>

  • IP-адрес пользователя, географическое местоположение, факт наличия статического IP, факт наличия нескольких пользователей на этом IP;

<...>

А как это можно определить что мне выдается статический адрес? По истории постов посмотреть с какого адреса были? Google что-то не помог. Интересует именно как из вне понять что пришли со статического адреса, параметры моего подключения мне известны.

Вроде как вопрос для толксов, хоть и не про Linux и технический.

 

alozovskoy
()

Дублируются клики беспроводной мыши

Привет! Есть беспроводная мышь Defender Magnifico MM-505, периодически замечаю что клики дублируются либо вообще происходят «фантомно» - выделяешь что-нибудь мышью, раз - выделение сбросилось. Дублирование отловил по xev - делаю один клик, xev пишет две пары press-release. Такое происходит не часто, примерно раз в 10 - 15 кликов, но начинает доставать. Под оффтопом попробовал - такого эффекта нет, при этом мое местоположение, а также окружающих с их техникой не меняется, откуда делаю вывод что дело таки в онтопике. Где и что в таком случае можно попробовать донастроить? Заранее спасибо!

 ,

alozovskoy
()

Iceweasel не резолвит домен, заканчивающийся на .local

Привет! У меня в качестве DNS-сервера используется dnsmasq, который перенаправляет запросы разным внешним dns-серверам в зависимости от url. Но это не суть, просто чтоб описать логику работы. Проблема в том, что iceweasel даже не пытается резолвить через мой dnsmasq адреса, которые заканчиваются на .local (это «видно» в логе dns-сервера, то есть видно что запросов не приходит). Как можно решить эту проблему? И, да, dns-сервер корректно такие запросы обрабатывает, т.е. через nslookup я мормально могу резолвить адрес foobar.local, а вот через iceweasel - нет. Заранее спасибо за ваши советы!

 ,

alozovskoy
()

Ограничить пользователю доступ в один из своих каталогов

Привет! Возможно ли ограничить доступ пользователю в один из своих каталогов, используя пароль или что-то вроде. Ситуация - есть удаленный сервер, на котором есть пользователь user - это общая учетка для нескольких пользователей, которые подключаются по ssh. В домашней директории этого пользователя есть разные файлы, которые могут эти ssh-пользовватели просматривать. Схема устоявшаяся, и что-то менять будет сложно. Нужно в этом же ~user сделать каталог, вход в который будет ограничен для всех этих ssh-пользователей кроме некоторых. Внутри этого каталога в vitualenv будет развернуто несколько проектов на python если это важно. Возможно ли такое? В силу специфики администрирования этого удаленного сервера заводить еще одного пользователя не желательно, а запретить всем, кто подключается по ssh запускать скрипты из этого каталога с окружением python устно или письменно просто нереально. Буду очень благодарен за ваши советы.

 , ,

alozovskoy
()

Разные dns-сервера в зависимости от домена

Привет! Подскажите, пожалуйста, возможно ли настроить dns-клиент так, чтоб он обращался к разным серверам в зависимости от того, хост какого домена мне нужно найти? То есть, например, домен local я хочу искать на 192.168.0.111, домены ru, com, org - на 8.8.8.8, а все остальное пусть мне возвращает тот dns-сервер, который пришел по dhcp. Такое возможно? Заранее спасибо!

 

alozovskoy
()

«Сценарии» для pulseaudio

Привет!

Можно как-то «сказать» pulseaudio как действовать при подключении разных устройств, или в зависимости от каких-то внешних факторов менять уровни громкости разных каналов и так далее? Ну как пример - подключил наушники в ноут - колонки отключаются, уровень звука делаем 50%, отключили наушники - мьют оставляем, а громкость поднимаем до 100%? Вопрос в общем в том, есть ли что-то готовое для этого или нужно писать свои велосипеды?

Заранее спасибо!

P.S. Pulseaudio сносить не буду, управлять тоже желательно через pulseaudio а не напрямую alsa'ой.

 

alozovskoy
()

Понять причину «зависания» команды

Привет!

Ситуация такая - периодически приходится выполнять команды по ssh на нескольких хостах сразу, то есть я не захожу на каждый хост интерактивно, а использую конструкцию следующего вида (конечно, используется система управления, но пока это не важно, так что упрощаю):

ssh username@hostname command

Все предусмотреть нереально, и по-этому периодически встречаю ситуацию, когда моя команда повисает - может потребоваться интерактивность в определенном случае, могут быть проблемы с аргументами и т.д. Самый простой пример:

ssh localhost 'grep test'

Можно прибить ssh, но как понять что нужно команде по информации на хосте? Найдя этот процесс в /proc можно посмотреть, что он «спит», при попытке посмотреть его файловые дескрипторы я вижу что-то вроде

$ ls -l
total 0
lr-x------ 1 username username 64 Aug 18 11:08 0 -> pipe:[10856516]
l-wx------ 1 username username 64 Aug 18 11:08 1 -> pipe:[10856517]
l-wx------ 1 username username 64 Aug 18 11:08 2 -> pipe:[10856518]

Иногда команда (прежде чем ожидать получения чего-то от пользователя) выводит что-то на экран, как получить эти данные мне тоже не понятно.

В общем жду рекомендаций о том, как понять что нужно процессу, желательно без установки дополнительного софта (средствами ОС). Заранее спасибо!

 , ,

alozovskoy
()

RSS подписка на новые темы