Python, извлечение параметров из Post или Get запросов.

Извлекать параметры, введенные в форму (get или post), довольно легко. В этом поможет следующая конструкция:

from mod_python import util

def handler(req):
form_data = util.FieldStorage(req, keep_blank_values=1)
myparameter = form_data.getfirst("parameter")

В myparameter теперь находится значение того, что было передано с именем “parameter”. Например, того, что было в ведено в “EditBox1”.

http://geckich.blogspot.com/

Настройка сетевого интерфейса в RHEL6 (RedHat, CentOS, Oracle Linux)

Решил вот сделать заметку о настройке сетевых интерфейсов RHEL (RedHat, CentOS, Oracle Linux, Fedora).

Вначале редактируем файлик настройки интерфейса, например eth1 (<> – означает специфические значения):

nano /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=”eth1″

TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.1.2
PREFIX=24
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=”System eth1″
UUID=<>
ONBOOT=yes
HWADDR=<>
GATEWAY=192.168.1.1
DNS1=192.168.1.1
DNS2=8.8.8.8
VLAN=yes
MASTERr=bond0
SLAVE=yes
Строки говорят сами за себя. HWADDR и UUID проще не указывать, чтобы система сама их розчехлила, а если и указывать, то точно для вашего адаптера.

  • BOOTPROTO=none – при задании статического адреса. Для получения динамического адреса, здесь необходимо указать =dhcp
  • VLAN=yes – если мы настраиваем интерфейс для работы с тегами VLAN.
  • MASTERr=bond0 – если мы настраиваем интерфейс как часть бонда
  • SLAVE=yes – если мы настраиваем интерфейс как часть бонда
  • NETMASK=255.255.255.0 – указываем только ОДИН из параеметров – или NETMASK или PREFIX
Далее редактируем:

nano /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=host.example.com

GATEWAY=192.168.1.1
GATEWAYDEV=eth1
NOZEROCONF=yes

  • GATEWAY и GATEWAYDEV – определяют адрес и сетевой интерфейс шлюза по-умолчанию (можно не указывать, если не нужно). 
  • NOZEROCONF=yes – убрать zeroconf маршрут (169.254.0.0)

Теперь стоит подредактировать файлик серверов доменных имен:

nano /etc/resolv.conf

nameserver 192.168.1.1
nameserver 8.8.8.8
search example.com

search – указываются домены, которые будут автоматически добавляться к коротким именам. Например, в этом случае по host будет искатся host.example.com.

Про добавление статического маршрута (роута) написано здесь

http://geckich.blogspot.com/

Подсветка синтаксиса в Blogger

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

Подсветка синтаксиса использует Java-script библиотеку SyntaxHighlighter

Итак, открываем панель блоггера, переходим в Шаблон › Изменить HTML и находим там строчку такого вида (у вас может быть другая, главное – чтобы были теги <title>):

<title><data:blog.pageTitle/></title>

После этой строчки дописываем следующее:

<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css"></link>
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" rel="stylesheet" type="text/css"></link>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
</script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript">
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js' type='text/javascript'/>

<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = false;
SyntaxHighlighter.all();
</script>

Также, чтобы в браузере Google Chrome не было глюков с нумерацией строк, нужно найти строчку:


/* Content
----------------------------------------------- */

И прописать под ней:

.syntaxhighlighter table td.gutter .line
{
padding: 0 5px !important;
}

Всё, теперь чтобы сделать подсветку кода нужно сделать следующее: во время написания статьи переходим из режима Создать в HTML. и в нужном месте делаем теги и вставляем туда код (например, для подсветки синтаксиса Python):

<pre class="brush:python">
...
</pre>

После brush: указываем язык кода: html, js, css и т. д. А между ними вставляем код. Для питона код можно вставлять “как есть”, а вот если код html, то нужно его закодировать html-кодировкой спец символов – для того, чтобы код поспринимался именно как текст, а не как теги. Делается это или вручную 🙂 или с помощью сайтов вроде этого http://www.string-functions.com/htmlencode.aspx

http://geckich.blogspot.com/

Сеть 1Gb (1000BaseT) на контроллерах RTL8111/8168B встроенных в материнскую плату

Недавно столкнулся с тем, что драйвер для  интегрированного в материнскую плату сетевого адаптера RealTek RTL8111/8168B/8169, идущий вместе с ОС Debian / Oracle Linux 6 ни в какую не хочет работать в режиме 1Gb.
Проблема эта решается установкой свежей версии драйвера.
В Debian 7 я эту проблему решил установкой драйвера из исходников:

1.  Переходим на сайт разработчика Realtek и качаем нужную нам версию (LINUX driver for kernel 3.x and 2.6.x and 2.4.x) с миррора поближе к нам. Ссылки там сделаны в виде жабаскриптов, потому из консоли мне скачать не удалось, да и не беда это. Скачиваем, затем по scp или ещё как копируем на сервер файлик r8168-8.034.00.tar.bz.

2. Распаковываем и переходим в директорию:

tar -xjvf r8168-8.034.00.tar.bz
cd r8168-8.034.00

3. Устанавливаем необходимые пакеты, если их еще нет:

aptitude install build-essential linux-headers-$(uname -r)

4. Запускаем скрипт инсталлятора – он всё сделает сам и в конце перезагружаем машину.
./autorun.sh
shutdown -r now

После ребута, если ваше сетевое оборудование поддерживает стандарт 1000baseT, то драйвер поднимет линк на этой скорости автоматически. Если нет, то выполняем команды:

ethtool -s eth0 speed 1000 duplex full
mii-tool -vv eth0

Для RedHEL-ов в этом случае попроще – ставим необходимую rpm-ку и ребутимся:

rpm -Uhv ftp://ftp.pbone.net/mirror/elrepo.org/elrepo/el6/x86_64/RPMS/kmod-r8169-6.017.00-1.el6.elrepo.x86_64.rpm
shutdown -r now

http://geckich.blogspot.com/

SQLAlchemy в Python

В python для работы с MySQL есть библиотечка SQLAlchemy.

У неё много всяких фишек-плюшек, но я в подавляющем большинстве случаев использую конструкции такого типа:

from sqlalchemy import create_engine
b_connection_string = 'mysql://user:password@localhost/db_name'
user = "admin"
db = create_engine(db_connection_string)
for row in db.execute("select Permissions from users where Name = "%s""%(user)):
result.append(str(row))
Где в 1й строчке мы импортируем функцию, затем создаем соединение с БД, а затем выполняем какой-то запрос. В итоге мы получим такую конструкцию (в данном примере):

[“(‘On, Off, Bla-bla’,)”]

Теперь можно облагородить результат, добавив , например:

result = result[0].replace("('","")
result = result.replace("',)","")
result = result.replace(", ", ",")

Получим в result:  ‘On, Off, Bla-bla’

http://geckich.blogspot.com/

Как с помощью iptables разрешить доступ к локальному порту только для списка IP адресов

Возможно, есть способы и попроще, но я сделал так.
Защищать будем, например, Asterisk (по-умолчанию порт для протокола SIP 5060)

Создаем новую цепочку:

iptables -N asterisk-manual
iptables -I INPUT -i eth0 -p udp –dport 5060 -j asterisk-manual

Прописываем, из каких адресов можно подключаться и в конце запрещаем остальным:

iptables -A asterisk-manual -s 192.168.1.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.2.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.3.0/24 -j ACCEPT
iptables -A asterisk-manual -s 192.168.4.2 -j ACCEPT
iptables -A asterisk-manual -j DROP

И сохраняем правила:

iptables-save

Чтобы добавить новый адрес вначале удалим последнюю строчку (по ее номеру), а затем добавим новую и восстановим запрещающую:

iptables -L asterisk-manual -n –line-numbers
iptables -D asterisk-manual 5
iptables -A asterisk-manual -s 192.168.4.3 -j ACCEPT
iptables -A asterisk-manual -j DROP

Не забываем сохраняться:

iptables-save

http://geckich.blogspot.com/

Как разрешить обычному пользователю Linux выполнять команду shutdown

В некоторых дистрибутивах обычный пользователь не может из консоли выключить/перезагрузить компьютер под управлением ОС Linux. Разрешаем так:

which shutdown
chmod u+s /sbin/shutdown

http://geckich.blogspot.com/

Быстрое сохраниение и восстановление конфигурации alsa в Linux

Чтобы сохранить текущую конфигурацию выполняем:

alsactl store -f ./alsamixer.conf

Для восстановления конфигурации:

alsactl restore -f ./alsamixer.conf

http://geckich.blogspot.com/

Открытие портов в iptables в RHEL дистрибутивах (RedHat, Oracle Linux, CentOS, etc.)

nano /etc/sysconfig/iptables

Добавляем запись, например:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

Сохраняем и рестартуем iptables:

/etc/init.d/iptables restart

Возможно Selinux будет ругаться при рестарте. Придется его отключить:

nano /etc/selinux/config 

И изменяем строчку SELINUX:
SELINUX=disabled
http://geckich.blogspot.com/

Добавление статического роута в RHEL дистрибутивах (RedHat, Oracle, CentOS, etc.)

Роуты нужно класть в папку /etc/sysconfig/network-scripts/ в виде текстового файлика route-X где Х – имя интерфейса. Например:

nano /etc/sysconfig/network-scripts/route-eth0

в формате

192.168.1.0/24 via 192.168.1.1

или

ADDRESS0=192.168.1.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.1

Если роутов нужно больше одного, то для первого формата просто записываем с новой строки, а для второго – меняем цифру:

ADDRESS1=192.168.2.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.2.1

Проверяем:

netstat -rn
route -n

Добавить не статический роут можно командой:

route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1

http://geckich.blogspot.com/