Июл 15

Логи на удаленный syslog-ng

А все просто, стандартный модуль logging вполне справляется с этим:

import logging
from logging.handlers import SysLogHandler
log = logging.getLogger('loggername')
log.addHandler(SysLogHandler(address=('localhost', 514)))
log.setLever(logging.INFO)
log.info('Log test')

Крайне рекомендуется прочесть logging-cookbook

Июл 14

Как использовать Django из внешнего скрипта

Для асинхронной задачи можно создать команду (django management command), или подключить джагну к своему сприпту:

import sys
sys.path.append('/path/to/django/projectname')
from projectname import settings
from django.core.management import setup_environ
setup_environ(settings)
#Получаем настроенную среду django:
from main.models import Model1
print Model1.objects.all()
Июн 01

OpenOCD & OSX & FTDI-CoLink

Если установлены драйвера FTDI VCP (Virtual Com Port) OpenOCD к Colink не подцепится — канал A уже используется.
Или выгрузить кекст или поправить
/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist
на предмет комментирования секции подключения канала А:

                <key>FT2232C_A</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.FTDI.driver.FTDIUSBSerialDriver</string>
                        <key>IOClass</key>
                        <string>FTDIUSBSerialDriver</string>
                        <key>IOProviderClass</key>
                        <string>IOUSBInterface</string>
                        <key>bConfigurationValue</key>
                        <integer>1</integer>
                        <key>bInterfaceNumber</key>
                        <integer>0</integer>
                        <key>idProduct</key>
                        <integer>24592</integer>
                        <key>idVendor</key>
                        <integer>1027</integer>
                </dict>

ну и перезагрузить кекст.

Апр 23

Админка по-умолчанию для всех моделей

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

from django.contrib import admin
import models
 
#Функция возвращающая список моделей в модуле
def list_models(module):
    import inspect
    from django.db import models
    classes = []
    for name, obj in inspect.getmembers(module):
        if inspect.isclass(obj) and issubclass(obj, models.Model):
            classes.append(obj)
    return classes
 
#Регистрируем все модели
for model in list_models(models):
    admin.site.register(model, admin.ModelAdmin)
Апр 22

OpenSSL self-signed cert

Выжимка из http://www.akadia.com/services/ssh_test_certificate.html

Создаем ключ:

openssl genrsa -out server.key 1024

Создаем CSR (Запрос на подпись сертификата)

openssl req -new -key server.key -out server.csr

В Common Name должно быть полное доменное имя, это важно.
Создаем самоподписанный сертификат:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Апр 22

Mikrotik PEAP & FreeRADIUS

Настройка EAP/PEAP у микротика несколько отличается от настроек обычной точки доступа, прежде всего тем, что Mikrotik сам может из сертификата и EAP сделать PEAP
Если же этого не требуется (например FreeRADIUS и сам вполне может справиться), то настройка сводится к:

  • Подключению RADIUS сервера (с service=wireless)
  • Определению Security-profile с
    • Authentication Types: WPA EAP/WPA2 EAP (authentication-types=wpa-eap,wpa2-eap)
    • EAP Accounting (radius-eap-accounting=yes)
    • EAP Methods: passthrough (eap-methods=passthrough)

Остальные шаманства — на RADIUS-сервере, хотя можно и без шаманств, в той же ubuntu-server все настроено из коробки, только clients.conf поправить и пользователей сделать.

Апр 22

Mikrotik hotspot Uptime-Limit

В догонку к предыдущему посту
Счетчик общей длительности сессий пользователя:

sqlcounter uptimecounter {
    counter-name = Uptime-Total
    check-name = Uptime-Limit
    reply-name = Session-Timeout
    sqlmod-inst = sql
    key = User-Name
    reset = never
    query = "SELECT ifnull(sum(time_to_sec(timediff(acctstoptime,acctstarttime))),0) FROM radacct WHERE username like '%{%k}'"
}

Подключить модуль в секции authorize
Аттрибут Uptime-Limit в стандартных справочниках есть, если что — добавить не сложно.
Время сессии в секундах.