Hello world! с помощью mod_python

Написание сайта с использованием mod_python состоит из двух этапов: конфигурирование сервера (apache) и собственно написание кода.

1. Конфигурация сервера:
Вначале установим модуль, если его еще нет:

aptitude install libapache2-mod-python
a2enmod python

Подредактируем, например, на Debian файл /etc/apache2/sites-available/default :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                AddHandler mod_python .py        #говорит апачу передавать обработку файлов *.py в mod_python
                PythonHandler index                     #говорит, в каком файле находится обработчик хэндлеров.
                DirectoryIndex index.py                #указывает, какой файл отображается по-умолчанию в директории
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        AddHandler mod_python .py
        PythonHandler mod_python.publisher
        PythonDebug On                                  #включает выведение ошибок в браузер - удобно пр иотладке
        DirectoryIndex index.py
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Активируем виртуалхост (если он не активен) и перезапускаем веб-сервер, чтобы изменения вступили в силу:

a2ensite default
service apache2 restart

2. Написание кода:
from mod_python import apache          #импорт класса apache
def handler(req):                      #функция обработки хэндлера
    req.content_type = "text/html"     #задаем тип содержимого веб-страницы
    req.send_http_header()             #посылка дефолтового хэдера html-страницы
    req.write("Hello World!")          #отправляем Hello World! на страницу
    return apache.OK                   #рендеринг страницы с кодом ОК

Называем файл index.py и сохраняем в директорию виртуал-хоста (в нашем примере это /var/www), не забывая сменить хозяина файла на www-data. Перед проверкой нужно удалить дефолтовый файл index.html из директории виртуалхоста и удалить русскоязычные буквы из питоновского файла – иначе будет ругаться.

Вот так выглядит Hello World на mod_python:

Кодинг на Python в NetBeans (7.2.1)

Я перепробовал много IDE для написания кода на питончике – начиная с обычного nano и заканчивая платными продуктами – PyCharm и WingIDE. Но в итоге выбор пал на бесплатный NetBeans, т. к. выкладывать 100 баксов за платную ИДЕ как-то не хочется… Итак, приступим (описанное здесь я тестировал на ОС Debian 7 и Oracle Linux 6.3).

1. Качаем Java SE SDK с официального сайта Oracle и устанавливаем

2. Качаем с оф. сайта последнюю стабильную версию (на момент написания статьи это была версия 7.2.1) – http://netbeans.org/downloads/ и качаем любую версию, устанавливаем. При установке может попросить указать папку с Java SDK – указываем (если мы качали .tar.gz).

3. А теперь сама “Магия” 🙂 Запускаем наш свеженький NetBeans и переходим в меню Tools > Plugins, вкладка Settings и нажимаем Add, указываем какое-то вменяемое имя и как URL – http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz

4. Переходим на вкладку Available Plugins и в поиску набираем python. Будет 3 плугина – устанавливаем, презапускаем IDE, ждем пока она проиндексирует питоновские модули, и кодим на питоне с автодополнением и т. п. 🙂

http://geckich.blogspot.com/

Отключения службы фаерволла в Windows Server 2008 и 2012 без потери доступа по RDP

Если просто остановить службу, то у нас отвалится RDP  и порт 3389 будет блокирован на сервере.
Чтобы этого не допустить, то надо не сразу останавливать службу, а вначале выполнить команды в консоли с правами администратора:
netsh firewall set portopening protocol=TCP port=3389 mode=ENABLE
netsh advfirewall set allprofiles state off

Иначе прийдется бежать за монитором 🙂
http://geckich.blogspot.com/

SSH tunneling

Пробросить порт с помощью ssh довольно просто:
ssh -R localip:localport:remoteip:remoteport localuser@localip
пример: 192.168.1.1:8080:192.168.2.1:80 root@192.168.1.1
Т. е. порт на той машине, где запущена эта команда будет форвардиться на порт на удаленной машине. Например, локальная машина имеет vpn-подключение, недоступное другим машинам и они могут через нее коннектиться к какомуто серверу на другом конце vpn.
В примере все запросы на порт 8080 машины 192.168.1.1 будут идти на порт 80 машины 192.168.2.1 и, соответственно, ответы будут приходить обратно. В общем, примерно то же, что и port forwarding в роутере.
http://geckich.blogspot.com/

Установка Skype 4 в Oracle Linux 6 (Redhat 6 / CentOS 6)

Скайпу нужны х86 библиотеки. Установим его зависимости вначале:

yum install alsa-lib.i686 fontconfig.i686 freetype.i686 glib2.i686 libSM.i686 libXScrnSaver.i686 libXi.i686 libXrandr.i686 libXrender.i686 libXv.i686 libstdc++.i686 pulseaudio-libs.i686 qt.i686 qt-x11.i686 zlib.i686

Теперь качаем скайп static билд и распаковываем:

wget –trust-server-names http://www.skype.com/go/getskype-linux-beta-static
mkdir /opt/skype 

tar xvf skype_static* -C /opt/skype –strip-components=1

Сделаем ссылку на библиотеку, которую скайп “не понимает”, но она есть – под другим именем.

cd /usr/lib 

ln -s libtiff.so.3 /usr/lib/libtiff.so.4

Сделаем ссылки в менюшки, чтобы всё было “по фен-шую”

ln -s /opt/skype/skype.desktop /usr/share/applications/skype.desktop 

ln -s /opt/skype/icons/SkypeBlue_48x48.png /usr/share/icons/skype.png 
ln -s /opt/skype/icons/SkypeBlue_48x48.png /usr/share/pixmaps/skype.png 
Сдедаем фейковый бинарник для запуска статика:
touch /usr/bin/skype 
chmod 755 /usr/bin/skype

В нем пропишем:

#!/bin/sh 

export SKYPE_HOME=”/opt/skype” 
 $SKYPE_HOME/skype –resources=$SKYPE_HOME $*

Всё. Запускаем скайп просто из командной строки: skype или из менюшек.
Если будут проблемы со звуком – читаем ниже про настройку alsamixer.
В консоли набираем alsamixer, затем нажимаем F6 и выбираем нашу звуклвую карту.

Теперь нажимаем F4 и в окошке выбираем Input source – Rear Mic и увеличиваем шкалу его громкости и усиления правее. Rear – значит, что он у вас подключен сзади в материнку. Можете попробовать подключить к передней панели корпуса и выбрать Front Mic, но практика показывает, что это не всегда работает.

Затем идем в настройки скайпа – и пробуем сделать тестовый звонок. Если ругается, то выставляем там нужные источники звука вместо дефолтовых (конкретные значения зависят от конкретных материнок и звуковых карт в них, но эбычно то что-то типа … Analog … ) и пробуем – до победного конца 🙂

Устаревшая версия статьи  – для 2й версии Скайпа. Может кому-нибудь пригодится:

Как бы вы не ставили скайп, вначале нужно установить необходимые библиотеки. Эти либы 32-битные ибо скайп только такой… В общем, погнали:

yum install libXi.so.6 libXss.so.1 libasound.so.2 libXv.so.1 libSM.so.6 libXrender.so.1 libXrandr.so.2 libfreetype.so.6 libfontconfig.so.1 libz.so.1 libgthread-2.0.so.0 libstdc++.so.6

Далее есть 2 метода.

1) качаем и ставим рпм-ник скайпа 2.2 (4я версия на RHEL6 не работает! во всяком случае, мне ее запустить так не удалось, хотя на Debian – без проблем).

rpm -Uhv http://download.skype.com/linux/skype-2.2.0.35-fedora.i586.rpm

А теперь самое интересное. Нужно скачать static-билд скайпа и заменить бинарником из него тот, что поставился с rpm.

wget http://download.skype.com/linux/skype_static-2.2.0.35.tar.bz2
tar xvf skype_static-x.x.x.x.tar.bz2
cp skype_static-2.2.0.35/skype /usr/bin/skype
cp: overwrite ‘/usr/bin/skype’ ? Y

2) скипнуть установку из пакета, а юзать целиком static.

http://geckich.blogspot.com/

Изменить временную зону (timezone) в Linux без перезагрузки

Файлы временных зон находятся в папке и подпапках /usr/share/zoneinfo/
Делаем ссылку /etc/localtime на нужную нам зону, перезаписывая существеющую:

ln -sf /usr/share/zoneinfo/Asia/Calcutta /etc/localtime

Проверяем:
date

Поменять дату и время легко командой:

date -s “18 OCT 20113 18:00:00”
Только дату:


date +%Y%m%d -s “20131018”

Только время:


date +%T -s “10:13:13”
http://geckich.blogspot.com/

Nut. Изменить уровень заряда UPS, при котором начинается shutdown event

Допустим, нам необходимо, чтобы ПК начинал выключаться при 40% заряда ИБП, а не при 10% – как задано по-умолчанию.

Для этого нужно в /etc/ups/upsd.users добавить пользователя:

[some_name]

password = some_password
allowfrom = localhost
actions = set

А затем выполнить команду (например, для UPS определенного как apc_backups@localhost) :

upsrw -s battery.charge.low=40 -u some_name -p some_password apc_backups@localhost

Так мы меняем параметр с 10% на 40%. У других UPS этот параметр может называться по-другому, а также он может сбрасываться на дефолтное значение при перезагрузке ПК.

http://geckich.blogspot.com/

Ошибка при доставке почты в dovecot: … status=deferred (temporary failure)

Если на почтовый сервер postfix + dovecot не приходит почта и мы видим ошибку в mail.log примерно такого вида:

postfix/pipe[26239]: 7390F1203B3: to=<user1@domain.com>, relay=dovecot, delay=483, delays=483/0.01/0/0.02, dsn=4.3.0, status=deferred (temporary failure)

То ищем дополнительный лог довекота:

locate dovecot-deliver.log

Смотрим:

tail /home/vmail/dovecot-deliver.log

А там видим такое:

Fatal: Plugin ‘sieve’ not found from directory /usr/lib/dovecot/modules

Это значит, что не хватает плугина Sieve.Ставим (Debian way) и перезапускаем dovecot:

aptitude install dovecot-sieve

service dovecot restart
http://geckich.blogspot.com/

Доступ на ESXi сервер через ssh по ключу

Доступ по ключу удобная штука, и не заменимая при автоматизации.

Для реализации доступа по ключу создаем пару ключей, как я присал в этой статье. Затем, если мы хотим заходить на пользователя root по ключу, то выполняем команду (изменив данные на свои):

cat ~/.ssh/id_dsa.pub | ssh root@esxi.machine.com ‘cat >> /etc/ssh/keys-root/authorized_keys’

Ключи в ESXi хранятся в файле /etc/ssh/keys-ИМЯ_ПОЛЬЗОВАТЕЛЯ/authorized_keys.
Тестируем (не забываем, что в папке ~/.ssh того пользователя, под которым ходим, должен быть приватный ключ с владельцем этот пользователь и правами 400):
ssh root@esxi.machine.com
http://geckich.blogspot.com/