eth0.pro

Linux is working. The future is open.



Есть очень простой и полезный скрипт, который показывает какой процесс и в каком объеме использует раздел подкачки.

#!/bin/bash 
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
# Modified by Mikko Rantalainen 2012-08-09
# Pipe the output to "sort -nk3" to get sorted output
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`
    for SWAP in `grep Swap $DIR/smaps 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

31 янв 2013 г. | Теги: Linux


Не знаю почему, но ну никак не запоминается... Будет здесь, чтобы знать где искать.

# Очередь сообщений:
exim4 -bp

# Количество сообщений в очереди:
exim4 -bpc

# Очередь с подробностями, но в более красивом виде:
exim4 -bp | exiqsumm

# "Толкнуть" очередь:
exim4 -qqff

# Секунду на раздумья и Вы увидите что в данный момент делает Exim:
exiwhat

# Имитирует входящую SMTP-сессию с IP-адреса xx.xx.xx.xx, выводит подробную информацию о своих действиях,
# используется для настройки списков доступа ACL:
exim4 -bh xx.xx.xx.xx

# Выведет "трассировку" отправки сообщения:
exim4 -bt root@microsoft.com

# Инструмент для проверки выражений:
exim4 -be

# Показать загруженную конфигурацию:
exim4 -bP

# Консоль для отладки:
exim4 -bd -d+all

31 янв 2013 г. | Теги: Exim


При создании какого-либо проекта Вам может потребоваться генерация пары RSA-ключей для подписи документов, файлов и т. д. У меня появилась такая же необходимость и сейчас расскажу как я делал сие на Python (а конкретнее - в Django, но какая разница).

Для начала нам понадобится библиотека Python-RSA. Ставим ее (должны быть права root'а):

pip install rsa

Далее листинг самого процесса:

# Импортим библиотеку:
import rsa

# Генерируем ключи. В скобках 1024 — "битность" ключа,
# key_pub и key_class — экземпляры классов из библиотеки Python-RSA, которые хранят получившиеся ключи:
(key_pub, key_private) = rsa.newkeys(1024)

# Выводим ключи в текстовом виде:
print key_pub.save_pkcs1()
print key_private.save_pkcs1()

# Если нужно их получить без комментариев одной строкой, я сделал так:
key_pub = key_pub.save_pkcs1().replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "").replace("\n","")
key_private = key_private.save_pkcs1().replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("-----END RSA PRIVATE KEY-----", "").replace("\n","")

Вот так все просто. Далее с полученными key_pub и key_private Вы можете делать что хотите, сохранить в базе данных, вывести в файл или просто print'ануть на стандартный вывод.

31 янв 2013 г. | Теги: Python


Работает у меня проект, сделанный на Django+Nginx+uWSGI. Там есть форма для загрузки картинок. Выявилась проблема, что не загружаются картинки (да и другие файлы, думаю) с кириллическими именами. Сервер возвращал ошибку 500 Internal Server Error.

Чтобы всё заработало, надо в uWSGI включить поддержки UTF8. Делается это очень просто. В конфиг вашего приложения добавьте строчку LANG = ru_RU.UTF-8

/etc/uwsgi/apps-enabled/my_project.ini

[uwsgi]
    ...
    LANG = ru_RU.UTF-8

Может потребоваться сгенерировать локаль. Для этого:

# dpkg-reconfigure locales

отмечаем LANG = ru_RU.UTF-8, и для уверенности:

# locale-gen

Всё.

# /etc/init.d/uwsgi restart

30 янв 2013 г. | Теги: uWSGI Django


В FreeRADIUS'е есть возможность хранить ippool'ы в SQL, что является необходимым для распределенных систем провайдеров. Есть дефолтный файлик с готовыми запросами, которые дают возможность из коробки начать работать с пулами. Но конфигурация по-умолчанию для работы с СУБД MySQL имеет недочеты. В файле sql.conf есть намек на них:

 ################################################################
 #
 #  WARNING: MySQL has certain limitations that means it can
 #           hand out the same IP address to 2 different users.
 #
 #           We suggest using an SQL DB with proper transaction
 #           support, such as PostgreSQL, or using MySQL
 #	     with InnoDB.
 #
 ################################################################

Здесь говорится о том, что MySQL имеет ограничения, из-за которых при определенных обстоятельствах нескольким пользователям может выдастся один и тот же IP-адрес.

Читать далее

30 янв 2013 г. | Теги: RADIUS MySQL


Оказалась тут у меня материнская плата ASRock H61M-GS, собрал, втыкаю кабель во встроенную сетевуху - нету линка. Полазив по BIOS'у включил опцию что то типа Onboard LAN Boot Support, линк появился. Загружаю Debian - интерфейса нету.

Смотрим lspci:

03:00.0 Ethernet controller: Atheros Communications Device 1083 (rev c0)

Идем на официальный сайт (http://www.asrock.com/mb/Intel/H61M-GS/index.ru.asp?cat=Specifications) смотреть спецификацию. Видим что для ЛВС используется чипсет Atheros AR8151. Немного погуглив нашел исходники модуля: http://code.google.com/p/iats/downloads/detail?name=AR81Family-Linux-v1.0.1.9.tar.gz&can=2&q= (файл AR81Family-Linux-v1.0.1.9.tar.gz).

Если не установлено, то ставим:

# apt-get install linux-headers-2.6.32-5-amd64
# apt-get install make gcc

Распаковываем архив, а дальше по технологии make install. Можно глянуть readme, есть интересные параметры.

Останется лишь

modprobe atl1c
echo "1969 1083" > /sys/bus/pci/drivers/atl1c/new_id

29 янв 2013 г. | Теги: Linux


DKIM - это технология аутентификации электронной почты с помощью цифрового ключа домена. Спамеры могут подделывать адреса отправителей почтовых сообщений таким образом, что спам якобы исходит от пользователя определенного домена. Для защиты от злоупотребления такого рода почтовые сервера при отправке писем могут добавлять цифровую подпись в заголовок письма, связанную с легитимным доменом. Проверив такую подпись, получатель (почтовый сервер получателя) может убедиться в том, что сообщение действительно отправлено из соответствующего домена и не было изменено в пути. Для этой аутентификации используется существующая служба DNS для передачи окрытых ключей шифрования.

Начиная с версии 4.70, Exim по умолчанию собирается с поддержкой DKIM, в версии 4.71 были исправлены недочеты, связанные с его работой. Реализация DKIM в Exim'е позволяет как верифицировать входящую почту (в ACL acl_smtp_dkim), так и подписывать отправляемые сообщения (в SMTP транспорте).

Читать далее

29 янв 2013 г. | Теги: Exim


Есть у меня проект, написанный на Django, в нем регистрируются пользователи чтобы получать определенные услуги. В процессе работы код этих услуг должен был аутентифицировать пользователя, проверить, зарегистрирован ли он на сайте (в Django) или нет, и если зарегистрирован - верный ли пароль он вводит. Сначала у меня была идея лезть напрямую в базу данных сайта, придумать как получать нужный хеш пароля и сравнивать его с тем, что лежит в базе.

Читать далее

29 янв 2013 г. | Теги: Django Python


При миграции с Apache+mod_php на Nginx c php5-fpm не всё у меня заработало сразу. В частности некоторые скрипты падали, а в логе было:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2298 bytes) in /var/www/myste/script.php on line 97

Это случается, когда скрипт запрашивает больше памяти, чем ему разрешено использовать. Нужно увеличить доступный максимум. Я бы не стал менять настройку в php.ini, ибо она применится глобально, а указал бы нужное значение специально для виртуального хоста в профайле Nginx'а:

server {
        listen          80;
        ...
        location ~* \.php$ {
                ...
                fastcgi_param   PHP_VALUE "memory_limit=512M";
       }
}

Останется лишь перезапустить Nginx.

29 янв 2013 г. | Теги: Nginx php-fpm


Если Вы собрались писать проект на Django (а может быть и уже написали), когда-нибудь встанет вопрос о том, где его хостить. Есть компании, которые предлагают готовый python-хостинг, но я считаю, что лучшим выбором будет свой VPS-сервер. Процесс его приобретения здесь описывать не вижу смысла, поэтому сразу предположим, что у Вас такой имеется, на нем стоит Debian и вы уже подключились к нему по SSH'у.

Читать далее

29 янв 2013 г. | Теги: Nginx uWSGI Debian Django