четверг, 16 февраля 2012 г.

Настройка прокси сервера с авторизацией за 5 минут

Раньше я думал, что squid сложен в настройке и всячески его избегал. Как оказалось - зря. Настроить HTTP прокси сервер с авторизацией в нём очень просто. Итак, рецепт (проверял на debian, на ubuntu тоже точно работает, в других дистрибутивах нюансы могут отличаться)

Установка

Тут как обычно:

$ sudo apt-get install squid

Настройка

Файл конфигурации squid находится в /etc/squid/ и называется squid.conf. Следующие параметры в нём заслуживают внимания:

http_port 3128 - устанавливает порт, по какому будет слушать squid.
http_access deny all - устанавливает права доступа

Если необходимо настроить прокси без авторизации - то достаточно просто изменить http_access с deny all на allow all и перезапустить squid. Так как нам нужен прокси с авторизацией, то ничего не трогаем и идем дальше. Находим секцию auth_param и добавляем туда:

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd

Эта строка указывает squid, какой модуль использовать для авторизации и в каком файле искать логины и пароли.

Создадим файл с логинами и паролями:

$ sudo htpasswd -c /etc/squid/passwd drakmail
Enter a password for user 'drakmail':
Again:
$ sudo htpasswd /etc/squid/passwd mag
Another password:
Again:

Далее, настроим права доступа. Для этого в секцию ACL надо добавить следующие строки:

acl magUser proxy_auth mag
acl drakmailUser proxy_auth drakmail
http_access allow magUser
http_access allow drakmailUser

После этого остаётся только перезапустить squid:

sudo /etc/init.d/squid restart

И наслаждаться настроенным прокси.

Обработка нажатий вложенного div в javascript

Недавно встала задача по обработке событий onClick для 2-х div'ов - один вложен в другой. Пример:

Мне нужно было обрабатывать нажатия по коричневому div'у (который был вложен в синий div) так, чтобы onClick для синего div'а не срабатывал. Мне помог этот тред на javascript.ru.

Ну и вот пример:

 
<div id="parent" style="width: 200px;height:200px;background-color: #0000aa;">
    <div id="nested" style="width:100px; height:100px; background:#CC6600;">
    </div>
</div>
<script>
    $("#parent").click(function() {alert("parent");});

    $("#nested").bind("click", function(e) {
        alert('nested');
        stop_bubbling(e);
    });
    
    function stop_bubbling(e) {
        if (e.stopPropagation) e.stopPropagation();
        else e.cancelBubble = true;
    }
</script>

четверг, 2 февраля 2012 г.

Аренда серверов left 4 dead 2

Всем читателем моего бложка посвящается — открыто публичное бета-тестирование аренды серверов Left 4 Dead 2 по невероятно низким ценам. Наши серверы расположены в Германии и Москве, укомплектованы мощным аппаратным обеспечением и работают на Debian Linux 6.0.4. По требованию мы предоставляем выделенные IP. Цены — от 100р. в месяц. Бесплатная техническая поддержка и консультации.

Только на период бета-тестирования (до 23.02.12) — скидка 5%! Для получения скидки необходимо при заказе ввести код купона MEFROMBLOG.

Более подробная информация и заказ

суббота, 7 января 2012 г.

Bash: удаление всех директорий кроме указанной

Можно обойтись простой командой:

rm -rf $(ls -d */ | grep -v SAVETHISDIRECTORY)

Здесь список директорий передается как параметр команды rm с помощью блока $(). Параметр -d у ls необходим для вывода лишь каталогов.

Еще один вариант

find -maxdepth 1 -mindepth 1 -type d ! -name 'SAVETHISDIRECTORY' -exec rm -rf {} \;

В этом случае используется вызов команды rm -rf для всех найденных директорий в текущем каталоге, исключая указанную.
Параметры maxdepth 1 и mindepth 1 нужны для того, чтобы не удалялись вложенные директории внутри SAVETHISDIRECTORY, а также чтобы не производилось попытки удалить текущий каталог (".").
-type d необходим для поиска только директорий.
Самая важная часть здесь - это ! -name 'SAVETHISDIRECTORY'. Она указывает find на то, что необходимо пропустить ("!") все элементы, имя которых ("-name") соответствует шаблону SAVETHISDIRECTORY.
Ну и -exec rm -rf {} \; удаляет все найденные find каталоги.

среда, 30 марта 2011 г.

Сказ о том, как из ПК часы делались

Как-то в этом месяце, на работе, было принято решение повесить в цехе красивые часы, которые будут показывать единое время для работников цеха, и оповещать их сигналом о началах и окончаниях перерыва. Занимались этим я и MAG_delta.Деньги были выделены, комплектующие были куплены, и тут началось самое интересное...

Сборка ПК

При сборке были использованы следующие комплектующие:
  • Мат. плата ASUS "AT3IONT-I Deluxe"
  • Дешевый 23" монитор от Samsung, собранный в России
  • Простенький корпус mini-ITX
  • VESA крепление для монитора
  • харды, CD-ROM'ы, периферия, прочее...

Монитор

Небольшие проблемы начались с самого начала. Приступив к осмотру пришедшего монитора, был обнаружен небольшой дефект: отверстия для крепления в корпусе были неправильно пробиты (как казалось). Сначала MAG_delta попробовал пробить новые отверстия, и это даже получилось. Отверстия пробиты, все довольны, вроде, можно приступить к следующему шагу. Но не тут-то было :) Оказалось, что если потрясти монитор, там весело что-то гремит. Посмотрев еще раз на заднюю крышку монитора, мы обнаружили, что с внутренней стороны отвалилось одно крепления для VESA держалки. Было решено разобрать монитор и посмотреть, что там за фигня происходит. Монитор не стал быстро сопротивляться и мы увидели красиво запечатанный в металл экран монитора. Очень понравилось. В общем, проблема была решена, железка для крепления приделано обратно, все довольны, монитор собран почти без повреждений (не считая утопленной вглубь лампочки питания). В общем, слава Российской сборке! На этом проблемы с монитором закончились. Начался следующий этап...

VESA крепление

Предыстория: так как в нашем любимом Ф-центре мы VESA креплений не нашли, то было решено купить его перед поездкой на работу. Приехав на савок, не долго ища, мы нашли магазин "Другой Мир" (или как-то так), в котором был богатый выбор креплений. Не долго думая, было решено купить самое-самое большое крепление, чтобы хоть одно из отверстий подошло. А продавец всё хотел втюхать какое то маленькое. Убедив продавца, что нам отлично подойдёт именно самое большое, купили его и поехали на работу )
Приехав на работу, и помучившись с монитором, мы взялись за крепление. И тут всё началось с fail'а - крепление, внезапно, оказалось слишком большим, и закрывало отверстие для VGA кабеля и кабеля питания. В общем, пришлось идти в цех и просить отрезать лишнюю часть крепления. Заодно, показали куда это всё надо вешать. В итоге, крепление было красиво отрезано и хорошо прикручено. На чем эпопея с ним закончилась. Параллельно с этим мы занимались установкой и настройкой системного блока...

Системный блок

Тут началось самое интересное. Был распакован маленький mini-ITX корпус, безжалостно вынут оттуда встроенный блок питания. Была распакована маленькая mini-ITX материнская плата, которая выглядела очень заманчиво, на первый взгляд. Было всё это собрано, подключен НЖМД на 500Гб от сигейта, CD-ROM для установки, 2Гб памяти (меньше не было :) ), включен внешний блок питания для материнской платы, и всё было к решительному моменту включения. Кнопка включения была нажата и... 0 реакции. Еще раз - тот же результат. Пришлось задуматься, что бы это могло быть. Через некоторое время раздумий мы решили, что не хватает питания. Было решено отключить жёсткий диск, оставить только CD-ROM. Со второго раза всё включилось и... вся серверная провоняла первым за этот день убитым CD-ROM'ом. Немного почесав в затылке, было решено проверить всё это на еще одном CD-ROM'е. Скажу сразу, это была плохая идея, так как серверная снова провоняла горелой проводкой. Прошло еще немного времени, мы уже вовсю прорабатывали метод установки ОС с флешки на флешку, возможность использования старого-древнего компа уже, на крайний случай, но MAG_delta было мало - он решил убить еще и жесткий диск :) Хитро подключив питание во время работы злополучного компа, это ему удалось. Так кровожадная материнка приняла очередную, и последнюю, жертву. Мы перешли к следующему шагу...

Установка ОС

Установить на эти кровожадные часы-убийцу было решено самый знакомый и близкий мне дистрибутив - AgiliaLinux. Также он поддерживает легкую установку на флешку, что было очень важно для нас. Так как флешка была всего одна (и та - моя), наш хитрый план был примерно таким: записать установщик на флешку, загрузиться с неё, установить Агилию на эту же флешку, дальше - по обстоятельствам. Внезапно, оказалось, что всё это вполне реально и возможно, и даже работает. Загрузившись с флешки, мы смогли лицезреть приглашение логина. Теперь немного о программной части...

Программное обеспечение

Для самого показа часов было испробовано множество вариантов, даже conky, но мы остановились на xdaliclock, который был в репозитории (правда, только для 64-х битного варианта, но собрать пакет - дело не долгое). Были подобраны опции запуска, настроен автостарт. При помощи пользователя "medved" jabber конференции agilialinux был быстро настроен автовход в иксы под нужным пользователем, в общем, всё это само запускалось и работало. Дальше, мы собрали вместе системный блок, монитор, кучу проводов и ИБП и понесли всё это в цех.

Сборка всего вместе и установка

Придя на место, мы еще раз подивились красиво установленному и отрезанному креплению, водрузили туда монитор, поставили в соседнее помещение системник с ИБП, соединили всё это и включили... загрузка пошла, как это не удивительно :) AgiliaLinux загрузился, но максимальное разрешение экрана было - 1024х768. Как оказалось, проблема была в предварительно заказанном VGA кабеле, который брался "с запасом". В общем, его длина была 30 метров, это говорит само за себя). Плюнув на это дело, поставили разрешение (пришлось бегать за клавой-мышью) 800х600, чтобы наверняка, поправили параметры запуска часов и взялись за протягивание сетевого кабеля. Но через 10 минут было обнаружено, что благодаря настройкам энергосбережения монитор выключается сам через эти самые 10 минут. В спешке настроив сеть, я записал магические строчки

xset s off &
xset -dpms &
xset s noblank &

в autostart.sh, и эту проблему тоже удалось решить. На этом можно считать первую часть настройки компочасов оконченной. Ждите новостей на следующей неделе.

Итоги

В итоге, потратив не более 8 часов, нам удалось собрать, настроить и установить отличные часы, которые синхронизируются с ntp сервером каждый час, показывают большое, видно на всей территории цеха, время, поддерживают удаленное управление и предоставляют кучу других возможностей. Причем всё это собрано в компактном, бесшумном корпусе (из движущихся частей - только маленький кулер на корпусе, который почти не шумит).
Из еще не решенных задач: создание аудио оповещений, доработка часов под себя.

"Слайды" :)







С этими, некоторыми другими фото Вы можете ознакомиться по этой ссылке :)

понедельник, 14 марта 2011 г.

Эффективное управление вебкамерой с использование motion + bluetooth

"Everything is better with bluetooth" (c) The Big Bang Theory.

Предисловие

Для наблюдения за посещением серверной я уже больше года использую отличную программу motion. Единственная сложность, возникающая при использовании - не забыть выключать видеонаблюдение при входе в серверную и включать при выходе из серверной (что делалось по ssh). Недавно мне это надоело, тем более, что под руку попал USB донгл с bluetooth.

Немного магии shell

после этого меня посетила интересная мысль. Так как я и мой друг и напарник в одном лице mag_delta (спасибо ему за техническую базу :) ) имеем телефоны с поддержкой bluetooth, то почему бы не сделать автоматическое включение камеры, когда оба наших устройства находятся вне области доступности, и автоматическое выключение, как только мы в ней появляемся? Реализовать это все было задумано на bash. В общем, после пары минут написания и тестирования, я написал вот такой простенький скрипт:


#!/bin/sh
#Переменная,в которой хранится предыдущее состояние (в серверной мы или нет)
HERE=0
#Бесконечный цикл
while [ 1 -eq 1 ]; do
#Сканирование на предмет наличия наших телефонов
hcitool info XX:XX:XX:XX:XX:XX > /dev/null
V1RUS=$?
hcitool info XX:XX:XX:XX:XX:XX > /dev/null
MAG=$?
#В случае, если хоть один из телефонов в области досигаемости
if [ $V1RUS -eq 0 -o $MAG -eq 0 ] ; then
#Выводим на stdout сообщения...
echo "HE IS HERE"
if [ $V1RUS -eq 0 ] ; then
echo "V1RUS HERE"
fi
if [ $MAG -eq 0 ] ; then
echo "MAG HERE"
fi
#И, если предыдущее состояние равно нулю (нас здесь не было, а теперь появились), то убиваем motion, останавливая видеонаблюдение
if [ $HERE -eq 0 ]; then
echo "Stopping motion..."
killall motion
fi
#Устанавливаем переменную в значение 1 (мы здесь)
HERE=1
else
#Тоже самое, только включаем motion, если мы перед этим здесь были
echo "HE IS NOT HERE"
if [ $V1RUS -eq 1 ] ; then
echo "V1RUS NOT HERE"
fi
if [ $MAG -eq 1 ] ; then
echo "MAG NOT HERE"
fi

if [ $HERE -eq 1 ]; then
echo "Starting motion..."
motion
fi
HERE=0
fi
#Для избежания разных неприятных эффектов, устанавливаем интервал сканирования в примерно 10 секунд.
sleep 10
done


Итого:

Этот простой скрипт, хоть и написан в спешке, может быть сколь угодно расширен (например, можно добавлять данные о посещаемости в БД :)), а также он экономит кучу времени и нервов. Надеюсь, он кому-нибудь пригодится.

PS.

Вы можете спросить, почему используется hcitool info MAC_ADDRESS, а не hcitool scan? Ответ прост: bluetooth на телефоне может быть в скрытом режиме, и hcitool scan его не обнаружит, в то время как hcitool info найдет его.

среда, 2 марта 2011 г.

Семь смертных грехов

AntRulkAnt'у посвещается...

  • Коммуникабельность
  • Активность
  • Желание работать в команде
  • Целеустремлённость
  • Быстрообучаемость
  • Исполнительность
  • Стрессоустойчивость

По мотивам http://juick.com/1243994