Saturday, 31 December 2011
Всех с наступающим Новым Годом!
Желаю всем как можно больше аптайма, как можно больше новых релизов любимого ПО и любимых ОС :) Как можно меньше критичных багов! А еще побольше улыбок и удовлетворения от работы! :)
Thursday, 29 December 2011
MySQL Memory storage: Dec 29 18:55:07 stat mysqld: 111229 18:55:07 [ERROR] /usr/sbin/mysqld: The table 'domains' is full
Подобная ошибка также может быть выдана ПО, осуществляющим добавление данных в MEMORY таблицу, так как кончилось место, зарезервированное под таблицы данного типа, чтобы исправить проблему, нужно увеличить лимит.
В блок [mysqld] добавляем:
Перезапускаем СУБД:
vim /etc/mysql/my.cnf
В блок [mysqld] добавляем:
max_heap_table_size=2048M
Перезапускаем СУБД:
/etc/init.d/mysql restart
Monday, 26 December 2011
Логгирование выдачи интерактивных команд посредством утилиты script
Суть задачки легко можно понять по сабжу поста. Честно говоря, был искренне удивлен, найдя столь стандартное решение.
Запускаем интерактивное ПО в оболочке и выполняем там какие-либо действия:
Просмтриваем лог программы, в котором отразились все действия:
Запускаем интерактивное ПО в оболочке и выполняем там какие-либо действия:
script -q -a /var/log/mylog -c 'telnet ya.ru 80'
Trying 87.250.251.3...
Connected to ya.ru.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Server: nginx
Date: Mon, 26 Dec 2011 16:31:18 GMT
Content-Type: text/html; charset=windows-1251
Content-Length: 166
Connection: close
400 Bad Request
400 Bad Request
nginx
Connection closed by foreign host.
root@ovzgate:~#
Просмтриваем лог программы, в котором отразились все действия:
cat /var/log/mylog
Script started on Mon Dec 26 19:31:08 2011
Trying 87.250.251.3...
Connected to ya.ru.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Server: nginx
Date: Mon, 26 Dec 2011 16:31:18 GMT
Content-Type: text/html; charset=windows-1251
Content-Length: 166
Connection: close
400 Bad Request
400 Bad Request
nginx
Connection closed by foreign host.
CentOS 6 + OpenVZ = ужас с зависимостями при обновлении
Итак, имеется совершенно чистый CentOS 6 (без каких-либо репозиториев кроме стандартных) с установленным OpenVZ ядром. А также желание сделать: yum update (а также наличие обычных ядер в грядущем апдейте).
Это желание разбивается вдребезги конфликтом зависимостей kernel-firmware :
Если обновление ядра не критично, то можно забить и игнорировать ошибки:
А что делать если критично? Фиксить!
Итак, посмотрим, какие версии пакета firmware у нас есть:
Попробуем его снести:
Пробуем снова обновиться:
Увы, не помогло и появились ошибки, так как данный пакет нужен системе и от него зависит пара пакетов.
Ставим пакет обратно:
отключаем rhel-6 kernel репо (напротив rhel6 enabled=1 меняем на enabled=0):
Пробуем обновить:
Снова сносим нафиг пакет:
И успешно выполняем апдейт:
После этого, снова включаем репозиторий openvz (enabled=1) и еще раз обновляем систему:
Итого, kernel-firmware был почему-то замещен vzkernel-firmware. Скорее всего, при следующем апдейте ядра система вылетит снова. И баг, скорее всего, в OpenVZ репо, оно почему-то замещает собой стандартный пакет.
Итого, план фикса следующий:
1) Отключаем репо openvz (enabled=0): vi /etc/yum.repos.d/openvz.repo
2) Удаляем пакет: yum remove -y vzkernel-firmware
3) Обновляемся: yum update -y
4) Включаем репо openvz: vi /etc/yum.repos.d/openvz.repo
5) Обновляем систему (при этом, vzkernel-firmware будет установлен вновь): yum update -y
6) Устанавливаем новое ядро стандартным: vim /boot/grub/grub.conf
7) Радуемся :)
Описание бага в багзилле OpenVZ: http://bugzilla.openvz.org/show_bug.cgi?id=2129
Это желание разбивается вдребезги конфликтом зависимостей kernel-firmware :
Error: Package: kernel-2.6.32-220.2.1.el6.x86_64 (updates)
Requires: kernel-firmware >= 2.6.32-220.2.1.el6
Installed: vzkernel-firmware-2.6.32-042stab044.11.noarch (@openvz-kernel-rhel6)
kernel-firmware = 2.6.32-131.21.1.el6
Available: kernel-firmware-2.6.32-220.el6.noarch (base)
kernel-firmware = 2.6.32-220.el6
Available: kernel-firmware-2.6.32-220.2.1.el6.noarch (updates)
kernel-firmware = 2.6.32-220.2.1.el6
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
Если обновление ядра не критично, то можно забить и игнорировать ошибки:
yum update --skip-broken
А что делать если критично? Фиксить!
Итак, посмотрим, какие версии пакета firmware у нас есть:
rpm -qa |grep kernel-firm
vzkernel-firmware-2.6.32-042stab044.11.noarch
Попробуем его снести:
yum remove vzkernel-firmware-2.6.32-042stab044.11.noarch
Loaded plugins: fastestmirror
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package vzkernel-firmware.noarch 0:2.6.32-042stab044.11 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================================================================
Removing:
vzkernel-firmware noarch 2.6.32-042stab044.11 @openvz-kernel-rhel6 3.9 M
Transaction Summary
=========================================================================================================================================================================================
Remove 1 Package(s)
Installed size: 3.9 M
Is this ok [y/N]: Y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : vzkernel-firmware-2.6.32-042stab044.11.noarch 1/1
Removed:
vzkernel-firmware.noarch 0:2.6.32-042stab044.11
Complete!
Пробуем снова обновиться:
yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centosg4.centos.org
* extras: centosg4.centos.org
* openvz-kernel-rhel6: mirror.softaculous.com
* openvz-utils: mirror.softaculous.com
* updates: mirror.nsc.liu.se
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:2.6.32-220.2.1.el6 will be installed
--> Processing Dependency: kernel-firmware >= 2.6.32-220.2.1.el6 for package: kernel-2.6.32-220.2.1.el6.x86_64
Package kernel-firmware is obsoleted by vzkernel-firmware, but obsoleting package does not provide for requirements
--> Finished Dependency Resolution
Error: Package: kernel-2.6.32-220.2.1.el6.x86_64 (updates)
Requires: kernel-firmware >= 2.6.32-220.2.1.el6
Available: kernel-firmware-2.6.32-220.el6.noarch (base)
kernel-firmware = 2.6.32-220.el6
Available: kernel-firmware-2.6.32-220.2.1.el6.noarch (updates)
kernel-firmware = 2.6.32-220.2.1.el6
Available: vzkernel-firmware-2.6.32-042stab044.11.noarch (openvz-kernel-rhel6)
kernel-firmware = 2.6.32-131.21.1.el6
You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
kernel-2.6.32-131.17.1.el6.x86_64 has missing requires of kernel-firmware >= ('0', '2.6.32', '131.17.1.el6')
vzkernel-2.6.32-042stab044.11.x86_64 has missing requires of kernel-firmware >= ('0', '2.6.32', '131.21.1.el6')
Увы, не помогло и появились ошибки, так как данный пакет нужен системе и от него зависит пара пакетов.
Ставим пакет обратно:
yum install -y vzkernel-firmware
отключаем rhel-6 kernel репо (напротив rhel6 enabled=1 меняем на enabled=0):
vi /etc/yum.repos.d/openvz.repo
Пробуем обновить:
yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centosg4.centos.org
* extras: centosg4.centos.org
* openvz-utils: mirror.softaculous.com
* updates: mirror.nsc.liu.se
openvz-utils | 1.2 kB 00:00
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:2.6.32-220.2.1.el6 will be installed
--> Processing Dependency: kernel-firmware >= 2.6.32-220.2.1.el6 for package: kernel-2.6.32-220.2.1.el6.x86_64
--> Running transaction check
---> Package kernel-firmware.noarch 0:2.6.32-220.2.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================================================================
Installing:
kernel x86_64 2.6.32-220.2.1.el6 updates 24 M
Installing for dependencies:
kernel-firmware noarch 2.6.32-220.2.1.el6 updates 6.2 M
Transaction Summary
=========================================================================================================================================================================================
Install 2 Package(s)
Total download size: 31 M
Installed size: 120 M
Is this ok [y/N]: Y
Downloading Packages:
http://mirror.nsc.liu.se/CentOS/6.2/updates/x86_64/Packages/kernel-2.6.32-220.2.1.el6.x86_64.rpm: [Errno 14] PYCURL ERROR 7 - "couldn't connect to host"
Trying other mirror.
(1/2): kernel-2.6.32-220.2.1.el6.x86_64.rpm | 24 MB 00:05
(2/2): kernel-firmware-2.6.32-220.2.1.el6.noarch.rpm | 6.2 MB 00:01
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 1.1 MB/s | 31 MB 00:27
Running rpm_check_debug
Running Transaction Test
Transaction Check Error:
file /lib/firmware/3com/3C359.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/3com/typhoon.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/acenic/tg1.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/acenic/tg2.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/adaptec/starfire_rx.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/adaptec/starfire_tx.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/advansys/3550.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/advansys/38C0800.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/advansys/38C1600.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/advansys/mcode.bin from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
file /lib/firmware/atmsar11.fw from install of kernel-firmware-2.6.32-220.2.1.el6.noarch conflicts with file from package vzkernel-firmware-2.6.32-042stab044.11.noarch
Error Summary
-------------
Снова сносим нафиг пакет:
yum remove vzkernel-firmware-2.6.32-042stab044.11.noarch
И успешно выполняем апдейт:
yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centosg4.centos.org
* extras: centosg4.centos.org
* openvz-utils: mirror.softaculous.com
* updates: mirror.nsc.liu.se
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:2.6.32-220.2.1.el6 will be installed
--> Processing Dependency: kernel-firmware >= 2.6.32-220.2.1.el6 for package: kernel-2.6.32-220.2.1.el6.x86_64
--> Running transaction check
---> Package kernel-firmware.noarch 0:2.6.32-220.2.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================================================================
Installing:
kernel x86_64 2.6.32-220.2.1.el6 updates 24 M
Installing for dependencies:
kernel-firmware noarch 2.6.32-220.2.1.el6 updates 6.2 M
Transaction Summary
=========================================================================================================================================================================================
Install 2 Package(s)
Total size: 31 M
Installed size: 120 M
Is this ok [y/N]: Y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : kernel-firmware-2.6.32-220.2.1.el6.noarch 1/2
Installing : kernel-2.6.32-220.2.1.el6.x86_64 2/2
Installed:
kernel.x86_64 0:2.6.32-220.2.1.el6
Dependency Installed:
kernel-firmware.noarch 0:2.6.32-220.2.1.el6
Complete!
После этого, снова включаем репозиторий openvz (enabled=1) и еще раз обновляем систему:
yum update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centosg4.centos.org
* extras: centosg4.centos.org
* openvz-kernel-rhel6: mirror.softaculous.com
* openvz-utils: mirror.softaculous.com
* updates: mirror.nsc.liu.se
openvz-kernel-rhel6 | 951 B 00:00
openvz-utils | 1.2 kB 00:00
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package kernel-firmware.noarch 0:2.6.32-220.2.1.el6 will be obsoleted
---> Package vzkernel-firmware.noarch 0:2.6.32-042stab044.11 will be obsoleting
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================================================================================================================================
Package Arch Version Repository Size
=========================================================================================================================================================================================
Installing:
vzkernel-firmware noarch 2.6.32-042stab044.11 openvz-kernel-rhel6 2.9 M
replacing kernel-firmware.noarch 2.6.32-220.2.1.el6
Transaction Summary
=========================================================================================================================================================================================
Install 1 Package(s)
Total download size: 2.9 M
Is this ok [y/N]: Y
Downloading Packages:
vzkernel-firmware-2.6.32-042stab044.11.noarch.rpm | 2.9 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : vzkernel-firmware-2.6.32-042stab044.11.noarch 1/2
Erasing : kernel-firmware-2.6.32-220.2.1.el6.noarch 2/2
Installed:
vzkernel-firmware.noarch 0:2.6.32-042stab044.11
Replaced:
kernel-firmware.noarch 0:2.6.32-220.2.1.el6
Complete!
Итого, kernel-firmware был почему-то замещен vzkernel-firmware. Скорее всего, при следующем апдейте ядра система вылетит снова. И баг, скорее всего, в OpenVZ репо, оно почему-то замещает собой стандартный пакет.
Итого, план фикса следующий:
1) Отключаем репо openvz (enabled=0): vi /etc/yum.repos.d/openvz.repo
2) Удаляем пакет: yum remove -y vzkernel-firmware
3) Обновляемся: yum update -y
4) Включаем репо openvz: vi /etc/yum.repos.d/openvz.repo
5) Обновляем систему (при этом, vzkernel-firmware будет установлен вновь): yum update -y
6) Устанавливаем новое ядро стандартным: vim /boot/grub/grub.conf
7) Радуемся :)
Описание бага в багзилле OpenVZ: http://bugzilla.openvz.org/show_bug.cgi?id=2129
Wednesday, 21 December 2011
Удобная работа с MySQL из Python посредством oursql
Зачем? Во-первых, MySQL DB в чистом виде черезчур аскетичен и нет таких удобных вещей как плейсхолдеров (параметризированных запросов), а без них работать с MySQL совершенно не камильфо. Модуль написан на C, так что не стоит бояться тормозов.
Ставим зависимости:
Собираем oursql:
Вот пример кода, которого достаточно для удобной работы с MySQL:
Визуально, модуль работает не просто быстро, а ОЧЕНЬ быстро! Что очень радует!
Офсайт: http://packages.python.org/oursql/
Ставим зависимости:
apt-get install -y libmysqlclient-dev python-mysqldb
Собираем oursql:
pip install oursql
Вот пример кода, которого достаточно для удобной работы с MySQL:
#!/usr/bin/python
import oursql
import stat_config
conn = oursql.connect(host='127.0.0.1', user='db_user', passwd='db_password', db='db_name')
# return rows as dicts
curs = conn.cursor(oursql.DictCursor)
# return row as arrays
# curs = conn.cursor()
curs.execute("SELECT * FROM domains WHERE domain_id = ? LIMIT ?", (1, 10))
for row in curs:
print row
Визуально, модуль работает не просто быстро, а ОЧЕНЬ быстро! Что очень радует!
Офсайт: http://packages.python.org/oursql/
Профилирование проектов на Python
apt-get install -y python-profiler
Запускаем скрипт:
python -m profile login_to_mysql.py
test data
6 function calls in 0.000 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(execfile)
1 0.000 0.000 0.000 0.000 :0(setprofile)
1 0.000 0.000 0.000 0.000:1( )
1 0.000 0.000 0.000 0.000 login_to_mysql.py:3()
1 0.000 0.000 0.000 0.000 profile:0(execfile('login_to_mysql.py'))
0 0.000 0.000 profile:0(profiler)
1 0.000 0.000 0.000 0.000 testinclude.py:4()
Вот так вот легко и просто :)
Monday, 19 December 2011
Как собрать в MySQL таблице только уникальные данные?
Вот потребовалось собирать в таблице только уникальные данные. Причем, требуется, чтобы при добавлении значение, которое уже есть в таблице, новая запись просто игнорировалась. Как это сделать?
Очень просто - добавить для поля ограничение UNIQUE, а при использовании INSERT использовать конструкцию вида: INSERT IGNORE INTO ips (ip) VALUES('11.22.33.44'). При этом, не будет выдаваться ошибка при вставке значения, которое уже имеется в таблице, но и не будет осуществляться само добавление.
Очень просто - добавить для поля ограничение UNIQUE, а при использовании INSERT использовать конструкцию вида: INSERT IGNORE INTO ips (ip) VALUES('11.22.33.44'). При этом, не будет выдаваться ошибка при вставке значения, которое уже имеется в таблице, но и не будет осуществляться само добавление.
Где можно взять актуальное содержимое Full BGP таблицы?
Вот тут в текстовом формате: ftp://archive.routeviews.org/oix-route-views/
А вот тут в бинарном (MRT TABLE DUMP V2 ): ftp://archive.routeviews.org/bgpdata/2011.12/RIBS/
Подробнее о проекте: http://routeviews.org/
А вот тут в бинарном (MRT TABLE DUMP V2 ): ftp://archive.routeviews.org/bgpdata/2011.12/RIBS/
Подробнее о проекте: http://routeviews.org/
Получить номер ASN по IP адресу
Для этого есть замечательный быстрый сервис (впрочем, искомую информацию всегда можно найти руками): http://asn.cymru.com/
И тогда все можно сделать в одну строку:
apt-get install -y ipv6calc
И тогда все можно сделать в одну строку:
host -t txt `ipv6calc 159.253.17.1 --in ipv4addr --out revipv4 | sed 's/.in-addr.arpa.//'`.origin.asn.cymru.com | sed 's/"//' | awk '{print $4}'
Sunday, 18 December 2011
Не работает LOAD DATA INFILE от рядового пользователя MySQL
При этом, от рута LOAD DATA INFILE работает отлично.
Как пофиксить? Нужно нашему пользователю дать дополнительные права:
Как пофиксить? Нужно нашему пользователю дать дополнительные права:
grant file on *.* to db_user@localhost;
flush privileges;
Saturday, 17 December 2011
Использование замкнутых циклов в Python
Возможно, с темой поста не все так гладко, но постараюсь описать, что я хотел. Имеется задача - создается заданное число классов и каждый класс должен получить при иницилизации 1 из нескольких (адреса серверов) идентификаторов. Как это реализовать красиво и нэтивно? Сразу в голову пришел кольцевой цикл и он, оказывается, уже есть в Питоне :)
Вот такой простенький код:
Вот такой простенький код:
from itertools import cycle
my_cycle = cycle( [1,2,3] )
>>> print my_cycle.next()
1
>>> print my_cycle.next()
2
>>> print my_cycle.next()
3
>>> print my_cycle.next()
1
>>> print my_cycle.next()
2
>>> print my_cycle.next()
3
Friday, 16 December 2011
Просмотр статистики PowerDNS recursor
rec_control get-all
all-outqueries 17950
dlg-only-drops 0
outgoing-timeouts 342
tcp-outqueries 0
throttled-out 14
throttled-outqueries 14
unreachables 58
answers-slow 307
answers0-1 228
answers1-10 0
answers10-100 2746
answers100-1000 3102
case-mismatches 0
chain-resends 2
client-parse-errors 0
edns-ping-matches 0
edns-ping-mismatches 0
ipv6-outqueries 0
no-packet-error 7896
noedns-outqueries 17949
noerror-answers 5694
noping-outqueries 0
nsset-invalidations 103
nxdomain-answers 15
over-capacity-drops 0
qa-latency 50242
questions 11548
resource-limits 0
server-parse-errors 0
servfail-answers 5839
spoof-prevents 0
tcp-client-overflow 0
tcp-questions 0
unauthorized-tcp 0
unauthorized-udp 0
unexpected-packets 0
cache-entries 15959
cache-hits 228
cache-misses 6155
concurrent-queries 0
negcache-entries 168
nsspeeds-entries 7474
packetcache-entries 6100
packetcache-hits 5165
packetcache-misses 6383
sys-msec 2129
throttle-entries 516
uptime 1055
user-msec 1760
Увеличение числа рабочих потоков у PowerDNS Recursor
Осуществляется в файле:
Директивой:
После этого необходим перезапуск (Debian 6 Squeeze):
Итого:
vim /etc/powerdns/recursor.conf
Директивой:
threads=12
После этого необходим перезапуск (Debian 6 Squeeze):
/etc/init.d/pdns-recursor restart
Итого:
cat /var/log/daemon.log |grep pdns | grep threads
Dec 13 19:04:28 stat pdns_recursor[11710]: Launching 2 threads
Dec 15 18:39:33 stat pdns_recursor[3534]: Launching 2 threads
Dec 15 18:40:21 stat pdns_recursor[3569]: Launching 2 threads
Dec 16 21:37:11 stat pdns_recursor[15655]: Launching 2 threads
Dec 16 22:53:09 stat pdns_recursor[17691]: Launching 12 threads
Thursday, 15 December 2011
Установка SQLAlchemy на Debian 6 Squeeze
Ставим нужные пакеты (С-зависимости необходимы для сборки бинарных библиотек, ускоряющих работу SQLAlchemy):
Ставим библиотеку:
Ставим библиотеку для поддержки требуемого движка СУБД:
Убеждаемся, что все установилось корректно:
Все!
Написано на базе инструкции: http://phpsuxx.blogspot.com/2009/10/pylons_18.html
apt-get install -y python-pip gcc python2.6-dev
Ставим библиотеку:
pip install sqlalchemy
Ставим библиотеку для поддержки требуемого движка СУБД:
apt-get install -y python-mysqldb
Убеждаемся, что все установилось корректно:
python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlalchemy
>>> sqlalchemy.__version__
'0.7.4'
>>>
Все!
Написано на базе инструкции: http://phpsuxx.blogspot.com/2009/10/pylons_18.html
Очень грамотная и правильная мысль при решении нетрвиальных задач
Обращаю внимание именно на второй ответ!
Взято с: http://vostryakov.ru/blog/38-intoduction-ai/
При ответе на вопросы в рамках office hours (то есть ответы на вопросы от учеников от преподавателей курса) было как минимум два интерсных вопроса-ответа. Далее вольный перевод по памяти с моими возможными добавками:
Ученик: Почему вы делаете эти курсы бесплатно для всех?
Себастиан: Мы делаем это из-за вас (показывает в экран). because of you! Так восхитительно делиться знаниями с таким огномных количеством людей. У меня никогда не было такой огромной группы!
Ученик: Что вы посоветуете читать?
Себастиян: Ничего не читайте. Выберите задачу, которая вам интересна (она может быть даже уже решена кем-то) и попробуйте решить ее. И когда вы ее решите своим способом, то потом вы можете почитать как она решалась другими. И я так же гарантирую (что-то вроде этого слова), что пока вы решаете такого рода задачи вы увидите около 10 задач, которые еще не решены и вот их-то и будет понастоящему интересно решать.
Взято с: http://vostryakov.ru/blog/38-intoduction-ai/
pip или easy_install?
Есди верить официальной документации pip, то именно его нужно использовать, так как он являестя более новой заменой для easy_install:
Кроме этого, у pip есть функция uninstall, которая ставит его на голову выше easy_install!
Установка на Debian:
Источник: http://www.pip-installer.org/en/latest/index.html
pip is a tool for installing and managing Python packages, such as those found in the Python Package Index. It’s a replacement for easy_install.
Кроме этого, у pip есть функция uninstall, которая ставит его на голову выше easy_install!
Установка на Debian:
apt-get install -y python-pip
Источник: http://www.pip-installer.org/en/latest/index.html
Простейшее многопоточное приложение на Python
#!/usr/bin/python
from threading import Thread
import time
class testThread(Thread):
def __init__(self, number):
Thread.__init__(self)
self.number = number
def run(self):
time.sleep(2)
print "Hello from thread %d" % self.number
threads_list = []
for i in range (1,10):
test_thread_object = testThread(i)
threads_list.append(test_thread_object)
test_thread_object.start()
for thread in threads_list:
thread.join()
Вот трейс исполнения:
time python threads.py
Hello from thread 3Hello from thread 1
Hello from thread 5
Hello from thread 6
Hello from thread 4Hello from thread 2
Hello from thread 7Hello from thread 9
Hello from thread 8
real 0m2.050s
user 0m0.035s
sys 0m0.015s
Вообще, очень красиво и лаконично все. Да и по отзывам, в отличие от Перла, у Питона с многопоточностью все хорошо.
Источники: http://www.wellho.net/solutions/python-python-threads-a-first-example.html и http://docs.python.org/library/threading.html#thread-objects
Отличная статья по асинхронному DNS резволвингу посредством adns из Python
http://www.catonmat.net/blog/asynchronous-dns-resolution/
Ставить сие чудо очень просто:
Результаты обоих вариантов (slow и fast) на моей машине примерно следующие:
Это при условии, что на машине работал локальный DNS резольвер (PowerDNS).
Ставить сие чудо очень просто:
apt-get install -y python-adns
Результаты обоих вариантов (slow и fast) на моей машине примерно следующие:
python slow.py
It took 31.14 seconds to resolve 100 hosts.
python fast.py
It took 7.30 seconds to resolve 100 hosts.
Это при условии, что на машине работал локальный DNS резольвер (PowerDNS).
Wednesday, 14 December 2011
Вышел Solaris 11!
Лучше поздно, чем никогда :) Не могу такое событие оставить без вниамния http://www.opennet.ru/opennews/art.shtml?num=32267
Виртуальная машина для выполнения PHP от Facebook
Прошу: https://www.facebook.com/notes/facebook-engineering/the-hiphop-virtual-machine/10150415177928920 ! Весьма интересный проект, рекомендую с описанием ознакомиться всем.
Яндекс Спамооборона - RIP
Все, коммерческая версия данного продукта более не продается: http://so.yandex.ru/news/2011/index.xml#2011-07-04, всем клиентам рекомендуют переход на SaaS решение "Яндекс Почта для домена".
Вспоминая, сколько дней у меня заняла борьба с кривостями скриптов, настоящая война с выжиранием ресурсов демоном so, а также проверка демона so на факт жизнедеятельонсти всевозможными могниторингами... хочется удалить приписку "RIP" и заменить на что-нибудь недоброе, но как говорят... либо никак, либо хорошо.
Вспоминая, сколько дней у меня заняла борьба с кривостями скриптов, настоящая война с выжиранием ресурсов демоном so, а также проверка демона so на факт жизнедеятельонсти всевозможными могниторингами... хочется удалить приписку "RIP" и заменить на что-нибудь недоброе, но как говорят... либо никак, либо хорошо.
Защита от DDoS сайтов в Chrome
Если часто обновлять страничку, которая выдает код 5xx, то на 2й-3й раз Chrome выдаст предупреждение, что так делать не нужно:
In order to prevent Distributed Denial of Service (DDoS) attacks from being perpetrated by web pages and extensions that run within Chrome, the HTTP throttling mechanism keeps track of errors requesting a given URL (minus the query parameters), and after a few 5xx errors in a row, starts exponentially increasing an interval during which requests to the given URL are disallowed.
You may enable or disable the feature below. Please let us know if the feature is causing problems for your web site. More details and contact information at http://dev.chromium.org/throttling.
Throttle HTTP requests if the server has been overloaded or encountered an error.
Tuesday, 13 December 2011
Ускорение скорости резолвинга за счет использования PowerDNS recursor на Debian Squeeze
Итак, имеем необходимость в частых DNS запросах:
Скорость, как видно, очень низкая и подобная скорость реакции может стать узким горлышком приложения.
Чтобы исправить подобное поведение, можно поставить локальный кэширующий DNS, мне нравится PowerDNS Recursor:
После установки необходимо сделать установленный DNS сервер основным в системе:
И в самый верх добавляем следующее, а имеющиеся записи комментируем диезом:
Повторяем тест:
Все, результат достигнут, на множестве одинаковых запросов будет достигаться серьезное повышение скорости работы.
time for i in `seq 1 100`; do host ya.ru > /dev/null; done
real 0m4.938s
user 0m0.160s
sys 0m0.149s
root@stat:~# time for i in `seq 1 1000`; do host ya.ru > /dev/null; done
real 0m50.746s
user 0m1.601s
sys 0m1.465s
Скорость, как видно, очень низкая и подобная скорость реакции может стать узким горлышком приложения.
Чтобы исправить подобное поведение, можно поставить локальный кэширующий DNS, мне нравится PowerDNS Recursor:
apt-get install -y powerdns-recursor
После установки необходимо сделать установленный DNS сервер основным в системе:
vim /etc/resolv.conf
И в самый верх добавляем следующее, а имеющиеся записи комментируем диезом:
nameserver 127.0.0.1
Повторяем тест:
time for i in `seq 1 1000`; do host ya.ru > /dev/null; done
real 0m3.400s
user 0m1.456s
sys 0m1.735s
root@stat:~# time for i in `seq 1 1000`; do host ya.ru > /dev/null; done
real 0m3.520s
user 0m1.532s
sys 0m1.735s
root@stat:~# time for i in `seq 1 1000`; do host ya.ru > /dev/null; done
real 0m3.487s
user 0m1.452s
sys 0m1.782s
Все, результат достигнут, на множестве одинаковых запросов будет достигаться серьезное повышение скорости работы.
HTTP PUT vs POST для загрузки файлов, что лучше?
По инфе с stackoverflow:
Информация из мана cURL подтверждает, что для загрузки файлов PUT - лучший вариант:
The PUT method, though not as widely used as the POST method is perhaps the more efficient way of uploading files to a server. This is because in a POST upload the files neede to be combined together into a multipart message and this message has to be decoded at the server. In contrast, the PUT method allows you to simply write the contents of the file to the socket connection that is established with the server.
Информация из мана cURL подтверждает, что для загрузки файлов PUT - лучший вариант:
5. PUT
The perhaps best way to upload data to a HTTP server is to use PUT. Then
again, this of course requires that someone put a program or script on the
server end that knows how to receive a HTTP PUT stream.
Put a file to a HTTP server with curl:
curl --upload-file uploadfile http://www.example.com/receive.cgi
Saturday, 10 December 2011
Вышел CentOS 6.1 !
Ну наконец-то! Ссылка: http://www.centos.org/
Как убрать warning у Python Paramiko: No handlers could be found for logger "paramiko.transport"
Фиксится легко, достаточно перед кодом с paramiko указать логгер:
paramiko.util.log_to_file('paramiko.log')
Friday, 2 December 2011
Debian Squeeze и часовой пояс Киева
В связи с рядом обсуждений в Раде, так не понятно, отменили переход на летнее время или нет. В итоге из-за этой неопределенности, в Debian Squeeze некорректные данные по часовой зоне Киева.
До фикса:
Фикс (пакет от wheezy):
После фикса:
Выпиcка из баг-трекера Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=647830
До фикса:
zdump -v /usr/share/zoneinfo/Europe/Kiev | grep 2011
/usr/share/zoneinfo/Europe/Kiev Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0 gmtoff=7200
/usr/share/zoneinfo/Europe/Kiev Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 FET isdst=0 gmtoff=10800
Фикс (пакет от wheezy):
wget http://ftp.us.debian.org/debian/pool/main/t/tzdata/tzdata_2011n-1_all.deb
dpkg -i tzdata_2011n-1_all.deb
После фикса:
zdump -v /usr/share/zoneinfo/Europe/Kiev | grep 2011
/usr/share/zoneinfo/Europe/Kiev Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0 gmtoff=7200
/usr/share/zoneinfo/Europe/Kiev Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 EEST isdst=1 gmtoff=10800
/usr/share/zoneinfo/Europe/Kiev Sun Oct 30 00:59:59 2011 UTC = Sun Oct 30 03:59:59 2011 EEST isdst=1 gmtoff=10800
/usr/share/zoneinfo/Europe/Kiev Sun Oct 30 01:00:00 2011 UTC = Sun Oct 30 03:00:00 2011 EET isdst=0 gmtoff=7200
Выпиcка из баг-трекера Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=647830
Thursday, 1 December 2011
Установка CentOS 6 по VNC
В инсталляторе корректируем первый пункт через tab и дописываем "vnc". После этого будет предложено выбрать сетевую карту и сконфигурировать ее.
После этого, машина напишет, что VNC запущен и укажет порт и айпи: Please manually connect your vnc client to 192.168.1.110:1 to begin install. После этого подключаемся VNC клиентом и ставим ОС. Очень актуально в случаях, когда по тем или иным причинам не запускается графический инсталлятор, но в то же время требуется кастомная разбивка, которая отсутсвтует в текстовой версии инсталлера.
После этого, машина напишет, что VNC запущен и укажет порт и айпи: Please manually connect your vnc client to 192.168.1.110:1 to begin install. После этого подключаемся VNC клиентом и ставим ОС. Очень актуально в случаях, когда по тем или иным причинам не запускается графический инсталлятор, но в то же время требуется кастомная разбивка, которая отсутсвтует в текстовой версии инсталлера.
Проблема с кастомной разбивкой дисков при CentOS 6 text install
К сожалению, нет возможности настроить разделы вручную, об этом сказано в документации:
Источник: http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.0
The text installer has limited capabilities compared to the GUI installer. Most notably there is no support for configuring partition layout, storage methods or package selection. Please refer to the official documentation for details. Here you can find some useful information on creating and using kickstart files which can be used to perform advanced configuring without the need for the GUI installer.
Источник: http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.0
Как запустить инсталлятор CentOS 6 в текстовом режиме?
В окне выбора опций установки tab на первом пункте и дописываем через пробел: text.
Monday, 28 November 2011
Когда оканчивается поддержка дистрибутива Debian Lenny?
Явно это нигде не указано:
А Debian 6 Squeeze вышел 8 фефраля 2011 года: http://www.debian.org/releases/stable/index.ru.html
Путем недолгого продолжения логических рассуждений, понимаем, что окончание поддержки выпадает на февраль 2012 года.
Источник: http://www.debian.org/security/faq
Q: How long will security updates be provided?
A: The security team tries to support a stable distribution for about one year after the next stable distribution has been released, except when another stable distribution is released within this year. It is not possible to support three distributions; supporting two simultaneously is already difficult enough.
А Debian 6 Squeeze вышел 8 фефраля 2011 года: http://www.debian.org/releases/stable/index.ru.html
Путем недолгого продолжения логических рассуждений, понимаем, что окончание поддержки выпадает на февраль 2012 года.
Источник: http://www.debian.org/security/faq
Friday, 25 November 2011
FreeBSD - загрузка с USB
При загрузке FreeBSD с usb, очень распространена ситуация, когда система не дождалась инициализации USB и выдала "кант маунт рут", но в dmesg при этом видно, что флешка подмонтировалась, но с задержкой.
Для борьбы с этим, нужно увеличить таймаут ожидания root устройства:
И добавить там:
Источник: http://forums.freebsd.org/showthread.php?t=23349
Для борьбы с этим, нужно увеличить таймаут ожидания root устройства:
vi /boot/loader.conf
И добавить там:
kern.cam.boot_delay=10000
Источник: http://forums.freebsd.org/showthread.php?t=23349
Monday, 21 November 2011
VDSManager & CentOS 6 = все очень странно работает
У нас чистый CentOS 6 с VDSManager создает контейнеры с некорректными настройками памяти - мы задаем гигабайт, два, пять, а памяти все равно 256 мб. А виной тому, что неявно используется не шаблон ve-basic, а шаблон ve-vswap:
Который в принципе не совместим со старым типом к настроек UBC. Больше информации можете прочесть либо у меня в блоге http://phpsuxx.blogspot.com/2011/11/ubc-openvz-rhelcentos-6.html либо в оф источнике: http://wiki.openvz.org/VSwap
Порылись в проблеме поглубже, выяснилось следующее - так ведет себя новый vzctl, я сейчас просто руками создавал VPS и он сам вкатил щаблон ve-swap:
Лог стрейса внизу:
Иными словами, ранее он молча подозревал, что используется шаблон ve-basic, но с новой версии он юзает ve-swap, который не совместим со старым вариантом настроек UBC.
Вот так.. в итоге - без напильника ничего не работает вообще.
Итого фикс:
ls /etc/vz/conf/ | grep vswap
ve-vswap-1024m.conf-sample
ve-vswap-256m.conf-sample
ve-vswap-512m.conf-sample
Который в принципе не совместим со старым типом к настроек UBC. Больше информации можете прочесть либо у меня в блоге http://phpsuxx.blogspot.com/2011/11/ubc-openvz-rhelcentos-6.html либо в оф источнике: http://wiki.openvz.org/VSwap
Порылись в проблеме поглубже, выяснилось следующее - так ведет себя новый vzctl, я сейчас просто руками создавал VPS и он сам вкатил щаблон ve-swap:
strace -o trace -f /usr/sbin/vzctl create 56131 --ostemplate debian-6.0-x86_64 --ipadd 176.9.219.67 --hostname test.ru
Лог стрейса внизу:
26170 link("/vz/lock/56131.lckqsZEVT", "/vz/lock/56131.lck") = 0
26170 unlink("/vz/lock/56131.lckqsZEVT") = 0
26170 rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7fed4b433980}, NULL, 8) = 0
26170 stat("/etc/vz/conf/56131.conf", 0x7fffb7f445b0) = -1 ENOENT (No such file or directory)
26170 stat("/etc/vz/conf/ve-vswap-256m.conf-sample", {st_mode=S_IFREG|0644, st_size=1581, ...}) = 0
26170 stat("/etc/vz/conf/ve-vswap-256m.conf-sample", {st_mode=S_IFREG|0644, st_size=1581, ...}) = 0
26170 open("/etc/vz/conf/ve-vswap-256m.conf-sample", O_RDONLY) = 5
26170 open("/etc/vz/conf/56131.conf", O_RDWR|O_CREAT, 0100644) = 6
26170 read(5, "# Copyright (C) 2000-2011, Para"..., 4096) = 1581
26170 write(6, "# Copyright (C) 2000-2011, Para"..., 1581) = 1581
26170 read(5, "", 4096) = 0
26170 close(5) = 0
26170 close(6) = 0
26170 open("/etc/vz/conf/ve-vswap-256m.conf-sample", O_RDONLY) = 5
26170 stat("/etc/vz/conf/ve-vswap-256m.conf-sample", {st_mode=S_IFREG|0644, st_size=1581, ...}) = 0
26170 fstat(5, {st_mode=S_IFREG|0644, st_size=1581, ...}) = 0
26170 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fed4bdb3000
26170 read(5, "# Copyright (C) 2000-2011, Para"..., 4096) = 1581
26170 read(5, "", 4096) = 0
Иными словами, ранее он молча подозревал, что используется шаблон ve-basic, но с новой версии он юзает ve-swap, который не совместим со старым вариантом настроек UBC.
Вот так.. в итоге - без напильника ничего не работает вообще.
Итого фикс:
/etc/vz/vz.conf
@@ -33,7 +33,7 @@
## Defaults for containers
VE_ROOT=/vz/root/$VEID
VE_PRIVATE=/vz/private/$VEID
-CONFIGFILE="vswap-256m"
+CONFIGFILE="basic"
DEF_OSTEMPLATE="centos-5"
Friday, 18 November 2011
RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases
Имеем баг:
Чтобы пофиксить открываем Питон-файл:
И комментируем следующие строки:
После этого проблема исчезнет, но, обращаю внимания, это немного некорректный фикс.
python -c "import paramiko"
/usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken
RandomPool_DeprecationWarning)
Чтобы пофиксить открываем Питон-файл:
vim /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py
И комментируем следующие строки:
#warnings.warn("This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken",
# RandomPool_DeprecationWarning)
После этого проблема исчезнет, но, обращаю внимания, это немного некорректный фикс.
Использование замены UBC в OpenVZ для RHEL/CentOS 6
В версии OpenVZ для 2.6.32 есть два варианта ограничения ресурсов контейнера, старый классический UBC и новый - vSwap.
Для создания VPS с классическими лимитами можно использовать команду:
UB параметры контейнера будут иметь следующий вид:
Конфиг контейнера тоже будет выглядить как и раньше:
В итоге получим следующий вид параметров BC:
И намного более простой конфиг VPS:
Вот так :)
Больше информации: http://wiki.openvz.org/VSwap
Для создания VPS с классическими лимитами можно использовать команду:
vzctl create 101 --ostemplate debian-5-x86_64 --config basic --hostname testvps.fastvps.ru
UB параметры контейнера будут иметь следующий вид:
cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
101: kmemsize 2737572 4407296 14372700 14790164 0
lockedpages 0 0 2048 2048 0
privvmpages 1378 14003 65536 69632 0
shmpages 0 0 21504 21504 0
dummy 0 0 0 0 0
numproc 10 36 240 240 0
physpages 5174 10811 0 9223372036854775807 0
vmguarpages 0 0 33792 9223372036854775807 0
oomguarpages 914 914 26112 9223372036854775807 0
numtcpsock 4 4 360 360 0
numflock 1 4 188 206 0
numpty 0 0 16 16 0
numsiginfo 1 18 256 256 0
tcpsndbuf 69760 69760 1720320 2703360 0
tcprcvbuf 65536 65536 1720320 2703360 0
othersockbuf 6936 8456 1126080 2097152 0
dgramrcvbuf 0 1288 262144 262144 0
numothersock 32 33 360 360 0
dcachesize 1383859 1440285 3409920 3624960 0
numfile 127 245 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 128 128 0
Конфиг контейнера тоже будет выглядить как и раньше:
cat /etc/vz/conf/101.conf
# Copyright (C) 2000-2011, Parallels, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# UBC parameters (in form of barrier:limit)
KMEMSIZE="14372700:14790164"
LOCKEDPAGES="2048:2048"
PRIVVMPAGES="65536:69632"
SHMPAGES="21504:21504"
NUMPROC="240:240"
PHYSPAGES="0:unlimited"
VMGUARPAGES="33792:unlimited"
OOMGUARPAGES="26112:unlimited"
NUMTCPSOCK="360:360"
NUMFLOCK="188:206"
NUMPTY="16:16"
NUMSIGINFO="256:256"
TCPSNDBUF="1720320:2703360"
TCPRCVBUF="1720320:2703360"
OTHERSOCKBUF="1126080:2097152"
DGRAMRCVBUF="262144:262144"
NUMOTHERSOCK="360:360"
DCACHESIZE="3409920:3624960"
NUMFILE="9312:9312"
AVNUMPROC="180:180"
NUMIPTENT="128:128"
# Disk quota parameters (in form of softlimit:hardlimit)
DISKSPACE="2G:2.2G"
DISKINODES="200000:220000"
QUOTATIME="0"
# CPU fair scheduler parameter
CPUUNITS="1000"
HOSTNAME="testvps.fastvps.ee"
VE_ROOT="/vz/root/$VEID"
VE_PRIVATE="/vz/private/$VEID"
OSTEMPLATE="debian-5.0-x86_64"
ORIGIN_SAMPLE="basic"
IP_ADDRESS="176.9.54.124"
vzctl create 101 --ostemplate debian-5-x86_64 --config vswap-256m --hostname testvps.fastvps.ru
В итоге получим следующий вид параметров BC:
cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
101: kmemsize 3369468 4431872 121634816 134217728 0
lockedpages 0 0 32768 32768 0
privvmpages 2461 14151 9223372036854775807 9223372036854775807 0
shmpages 18 354 9223372036854775807 9223372036854775807 0
dummy 0 0 0 0 0
numproc 10 33 9223372036854775807 9223372036854775807 0
physpages 5989 10780 0 65536 0
vmguarpages 0 0 0 9223372036854775807 0
oomguarpages 1145 1145 0 9223372036854775807 0
numtcpsock 5 6 9223372036854775807 9223372036854775807 0
numflock 2 4 9223372036854775807 9223372036854775807 0
numpty 0 0 9223372036854775807 9223372036854775807 0
numsiginfo 0 21 9223372036854775807 9223372036854775807 0
tcpsndbuf 87200 104640 9223372036854775807 9223372036854775807 0
tcprcvbuf 81920 98304 9223372036854775807 9223372036854775807 0
othersockbuf 6936 28720 9223372036854775807 9223372036854775807 0
dgramrcvbuf 0 2312 9223372036854775807 9223372036854775807 0
numothersock 32 36 9223372036854775807 9223372036854775807 0
dcachesize 1535996 1595162 60817408 67108864 0
numfile 180 250 9223372036854775807 9223372036854775807 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 9223372036854775807 9223372036854775807 0
И намного более простой конфиг VPS:
cat /etc/vz/conf/101.conf
# Copyright (C) 2000-2011, Parallels, Inc. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# This config is valid for VSwap-enabled kernel (which currently means
# any RHEL6-based kernel, i.e. 042test* or 042stab*).
# UBC parameters (in form of barrier:limit)
PHYSPAGES="0:256M"
SWAPPAGES="0:512M"
KMEMSIZE="116M:128M"
DCACHESIZE="58M:64M"
LOCKEDPAGES="128M"
PRIVVMPAGES="unlimited"
SHMPAGES="unlimited"
NUMPROC="unlimited"
VMGUARPAGES="0:unlimited"
OOMGUARPAGES="0:unlimited"
NUMTCPSOCK="unlimited"
NUMFLOCK="unlimited"
NUMPTY="unlimited"
NUMSIGINFO="unlimited"
TCPSNDBUF="unlimited"
TCPRCVBUF="unlimited"
OTHERSOCKBUF="unlimited"
DGRAMRCVBUF="unlimited"
NUMOTHERSOCK="unlimited"
NUMFILE="unlimited"
NUMIPTENT="unlimited"
# Disk quota parameters (in form of softlimit:hardlimit)
DISKSPACE="2G:2.2G"
DISKINODES="200000:220000"
QUOTATIME="0"
# CPU fair scheduler parameter
CPUUNITS="1000"
HOSTNAME="testvps.fastvps.ru"
VE_ROOT="/vz/root/$VEID"
VE_PRIVATE="/vz/private/$VEID"
OSTEMPLATE="debian-5.0-x86_64"
ORIGIN_SAMPLE="vswap-256m"
IP_ADDRESS="176.9.54.124"
NAMESERVER="213.133.98.98 213.133.100.100 213.133.99.99"
Вот так :)
Больше информации: http://wiki.openvz.org/VSwap
Sunday, 13 November 2011
Fibre vs fiber
Имея дело с оптико-волоконным оборудованием, часто встречаешься с обоими вариантами написания. Так в чем же отличие?
Очень просто, fiber - предпочитаемое написание в случае Американского английского, а fibre в случае Британского, Канадского, Австралийского и Индийского английского.
Источник: http://www.grammarist.com/spelling/fiber-fibre/
Очень просто, fiber - предпочитаемое написание в случае Американского английского, а fibre в случае Британского, Канадского, Австралийского и Индийского английского.
Источник: http://www.grammarist.com/spelling/fiber-fibre/
Friday, 11 November 2011
В каких отношениях находятся Quagga и Zebra?
Quagga - это продвинутый вариант Zebrba, так как Zebra уже несколько лет как остановилась в развитии: http://ru.wikipedia.org/wiki/Quagga
Wednesday, 9 November 2011
Monday, 7 November 2011
Wednesday, 26 October 2011
Sunday, 16 October 2011
Wednesday, 12 October 2011
libcap-ng на CentOS 6
Весьма полезная утилитка:
yum install -y libcap-ng-utils
/usr/bin/netcap
ppid pid acct command type port capabilities
1 1439 root sshd tcp 22 full
1 1516 root master tcp 25 full
1 1334 rpcuser rpc.statd tcp 55144 net_bind_service +
1439 2129 root sshd tcp 22 full
1 1439 root sshd tcp6 22 full
1 1334 rpcuser rpc.statd tcp6 41515 net_bind_service +
1 1334 rpcuser rpc.statd udp 46340 net_bind_service +
1 1334 rpcuser rpc.statd udp 662 net_bind_service +
1 1334 rpcuser rpc.statd udp6 60407 net_bind_service +
Friday, 7 October 2011
Ручная генерация содержимого shadow файла на примере Debian 6 Squeeze
Итак, препарировать будем Debian 6.
Вот такой вид имеет запись в shadow файле для пользователя root:
Где, 6 - это тип хеша, используемого для генерации пароля, 6 соответствует SHA-512. Далее идет salt (соль) строка "KlLePXXM", с ней хешируется наш пароль для повышения его криптостойкости. Соль может достигать 16 символов в длину. Далее следует как раз хеш пароля: vak689Mz42.4HncLulKHvzWFqiVQ1KzBe6h1BZqf9.E1q9w8VJtAs9TbYbSh9h4F5rwISZqD4s9PXLvZsTjEc1.
Вот так можно воспроизвести мой пароль, приведенный выше, это qwerty11:
В ответ будет выдана строка:
Как видите, они идентичны.
К сожалению, данная утилита отсутствует в RH (RHEL 6) дистрибутивах и там нужно искать обходной путь, я его нашел (источник):
Источник: http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html
Вот такой вид имеет запись в shadow файле для пользователя root:
cat /etc/shadow| grep root
root:$6$KlLePXXM$vak689Mz42.4HncLulKHvzWFqiVQ1KzBe6h1BZqf9.E1q9w8VJtAs9TbYbSh9h4F5rwISZqD4s9PXLvZsTjEc1:15250:0:99999:7:::
Где, 6 - это тип хеша, используемого для генерации пароля, 6 соответствует SHA-512. Далее идет salt (соль) строка "KlLePXXM", с ней хешируется наш пароль для повышения его криптостойкости. Соль может достигать 16 символов в длину. Далее следует как раз хеш пароля: vak689Mz42.4HncLulKHvzWFqiVQ1KzBe6h1BZqf9.E1q9w8VJtAs9TbYbSh9h4F5rwISZqD4s9PXLvZsTjEc1.
Вот так можно воспроизвести мой пароль, приведенный выше, это qwerty11:
mkpasswd -m sha-512 --salt=KlLePXXM qwerty11
В ответ будет выдана строка:
$6$KlLePXXM$vak689Mz42.4HncLulKHvzWFqiVQ1KzBe6h1BZqf9.E1q9w8VJtAs9TbYbSh9h4F5rwISZqD4s9PXLvZsTjEc1
Как видите, они идентичны.
К сожалению, данная утилита отсутствует в RH (RHEL 6) дистрибутивах и там нужно искать обходной путь, я его нашел (источник):
perl -e 'print crypt(q/qwerty11/, q/$6$KlLePXXM$/), "\n"'
$6$KlLePXXM$vak689Mz42.4HncLulKHvzWFqiVQ1KzBe6h1BZqf9.E1q9w8VJtAs9TbYbSh9h4F5rwISZqD4s9PXLvZsTjEc1
Источник: http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html
sed - удаление строки из файла
Это довольно просто:
При этом будет удалена строка, содержащая подстроку "nrg".
sed '/nrg/d' '/etc/shadow'
При этом будет удалена строка, содержащая подстроку "nrg".
ext4 & Debian 6 Squeeze
Разработчики Debian рекомендуют ext4 (production ready) как стандартную ФС начиная с Debian Squeeze 6
Источник: http://wiki.debian.org/Ext4
Источник: http://wiki.debian.org/Ext4
Monday, 3 October 2011
Сколько места нужно grub?
The GRUB development team generally recommends embedding GRUB before the first partition, unless you have special requirements. You must ensure that the first partition starts at least 31 KiB (63 sectors) from the start of the disk; on modern disks, it is often a performance advantage to align partitions on larger boundaries anyway, so the first partition might start 1 MiB from the start of the disk.
Источник: http://www.gnu.org/software/grub/manual/grub.html
guestfish и очень медленный tar-in
Это победить очень легко, вместо:
Источник: http://libguestfs.org/FAQ.html#slowwrites
moount /dev/vda1 /используем:
mount-options "" /dev/vda1 /
Источник: http://libguestfs.org/FAQ.html#slowwrites
Замена OpenSSH ключей на Debian 6 Squeeze
Итак, стоит задача - регенерировать ключи OpenSSH сервера.
Певроначальная попытка просто удалить ключи в надежде, что регенерируются сами ничего не дала, к сожалению:
При перезагрузке была выдана ошибка:
Чтобы ее не выдавало, нужно было сразу выполнить команду:
Он создаст новые ключи и задача будет выполнена.
Источник: http://www.cyberciti.biz/faq/howto-regenerate-openssh-host-keys/
Певроначальная попытка просто удалить ключи в надежде, что регенерируются сами ничего не дала, к сожалению:
rm /etc/ssh/ssh_host_*
При перезагрузке была выдана ошибка:
Starting OpenBDS Secure Shell Server: sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Чтобы ее не выдавало, нужно было сразу выполнить команду:
dpkg-reconfigure openssh-server
Он создаст новые ключи и задача будет выполнена.
Источник: http://www.cyberciti.biz/faq/howto-regenerate-openssh-host-keys/
Continious Release или обновление CentOS до версии 6.1
Если Вы используете CentOS 6 и хотите иметь обновленное ПО как в RHEL 6.1, то сделать это так:
64 бита:
32 бита:
После этого запускаем yum update и ждем пока система будет обновлена до актуальной версии. Обращаю внимание, данное "пред обновление" в будущем не вызовет никаких проблем (по заявлениям мейнтенеров CentOS) и как только выйдет CentOS 6.1 обновиться до новой версии будет очень просто.
Источник: http://lists.centos.org/pipermail/centos-announce/2011-September/018078.html
64 бита:
wget http://mirror.centos.org/centos/6/extras/x86_64/RPMS/centos-release-cr-6-0.el6.centos.x86_64.rpm
rpm -ihv centos-release-cr-6-0.el6.centos.x86_64.rpm
32 бита:
wget http://mirror.centos.org/centos/6/extras/i386/RPMS/centos-release-cr-6-0.el6.centos.i686.rpm
rpm -ihv centos-release-cr-6-0.el6.centos.i686.rpm
После этого запускаем yum update и ждем пока система будет обновлена до актуальной версии. Обращаю внимание, данное "пред обновление" в будущем не вызовет никаких проблем (по заявлениям мейнтенеров CentOS) и как только выйдет CentOS 6.1 обновиться до новой версии будет очень просто.
Источник: http://lists.centos.org/pipermail/centos-announce/2011-September/018078.html
Sunday, 2 October 2011
Как добавить SRPM репо в CentOS 6 (CentOS 6.0 source repository, SRPM)
Создаем файл репозитория:
Добавляем в него следующую информацию:
vim /etc/yum.repos.d/CentOS-SRPMS.repo
Добавляем в него следующую информацию:
[base-SRPMS]
name=CentOS-$releasever - Base SRPMS
baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[updates-SRPMS]
name=CentOS-$releasever - Updates SRPMS
baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Monday, 19 September 2011
VirtualBox + Mac OS 32 бита + 64 битный Core 2 Duo = запуск 64 разрядной Windows 2008
file /bin/bash /bin/bash: Mach-O universal binary with 2 architectures /bin/bash (for architecture i386): Mach-O executable i386 /bin/bash (for architecture ppc7400): Mach-O executable ppcКак такое вообще возможно на 32 битной версии Mac OS? А вот так:
1.6 64-bit guests Starting with Version 2.0, VirtualBox also supports 64-bit guest operating systems. Starting with Version 2.1, you can even run 64-bit guests on a 32-bit host operating system, so long as you have sufficient hardware. In detail, 64-bit guests are supported under the following conditions: 1. You need a 64-bit processor with hardware virtualization support (see chapter 1.2, Software vs. hardware virtualization (VT-x and AMD-V), page 10). 2. You must enable hardware virtualization for the particular VM for which you want 64-bit support; software virtualization is not supported for 64-bit VMs. Note: On most systems, the hardware virtualization features first need to be enabled in the BIOS before VirtualBox can use them. 3. If you want to use 64-bit guest support on a 32-bit host operating system, you must also select a 64-bit operating system for the particular VM. Since supporting 64 bits on 32-bit hosts incurs additional overhead, VirtualBox only enables this support upon explicit request. On 64-bit hosts, 64-bit guest support is always enabled, so you can simply install a 64-bit operating system in the guest.Источник: http://geekswithblogs.net/twickers/archive/2009/02/06/129243.aspx
Windows 7 + VirtualBox = не работает printscreen
Нужно делать скриншот вот так: Host (нажать и отпустить), Alt+PrintScreen!
http://forum.virtualbox.org/viewtopic.php?f=9&t=8434&start=0&hilit=printscreen
Работа с WIndows SMB из Mac OS
Достаточно в Сафари указать идентификатор протокола и все заработает: smb://192.168.1.5
Sunday, 18 September 2011
Tuesday, 13 September 2011
Работа с geoip из Perl в Debian
Устанавливаем ПО:
Вызываем из кода:
В ответ скриптом будет выдан
apt-get install -y libgeo-ip-perl
Вызываем из кода:
perl -e 'use Geo::IP; my $gi = Geo::IP->open("/usr/share/GeoIP/GeoIP.dat", GEOIP_STANDARD); print $gi->country_code_by_addr("81.21.yy.xx");'
В ответ скриптом будет выдан
Monday, 12 September 2011
Saturday, 10 September 2011
Как расшифровывается KVM?
Очень банально - Keyboard Video Mouse.
Что такое WD IntelliPower
IntelliPower is a fine-tuned balance of spin speed, transfer rate, and caching algorithms designed to deliver both significant power savings and solid performance. Additionally, GreenPower drives consume less current during start up allowing more drives to spin up simultaneously resulting in faster system readiness.
Источник: http://wdc.custhelp.com/app/answers/detail/a_id/3665/p/227%2C294/session/L3RpbWUvMTMxNTY3NjAyMS9zaWQvX0ludXdMRGs%3D
Monday, 5 September 2011
Friday, 2 September 2011
Вышел Parallels Virtuozzo Containers 4.6 !
Ограничение I/O диска
Задавайте ограничения на пропускную способность, доступную контейнерам для выполнения I/O-операций на диске. Ограничение пропускной способности I/O диска поможет предотвратить воздействие отдельных контейнеров на производительность всех остальных. Обеспечивает сервис-провайдерам защиту от DoS-атак и перерасхода ресурсов подписчиками. Позволяет предлагать VPS или облачные услуги с ограничением I/O диска.
Ограничения I/O диска при резервном копировании и миграции
Задайте ограничения на характеристики I/O диска для определенных процессов, включая резервное копирование, восстановление и миграцию, чтобы исключить риск снижения производительности всего сервера.
Учет I/O диска
Подробная статистика I/O диска доступна для каждого контейнера. С помощью этой статистики сервис-провайдеры могут следить за характеристиками I/O и процессами отдельных контейнеров. Эту информацию можно использовать для выявления контейнеров, которые создают самую большую нагрузку на I/O диска, что позволяет своевременно увидеть возможности для дополнительных продаж.
Улучшения vzstat
Помимо статистики учета i/o диска также доступна улучшенная статистика расхода процессорных ресурсов. Статистическую информацию можно легко получить через групповой и текстовый режимы, что упрощает интеграцию со сценариями и сторонними решениями.
Офссылка: http://www.parallels.com/ru/products/pvcl/whatsnew/#accounting
Задавайте ограничения на пропускную способность, доступную контейнерам для выполнения I/O-операций на диске. Ограничение пропускной способности I/O диска поможет предотвратить воздействие отдельных контейнеров на производительность всех остальных. Обеспечивает сервис-провайдерам защиту от DoS-атак и перерасхода ресурсов подписчиками. Позволяет предлагать VPS или облачные услуги с ограничением I/O диска.
Ограничения I/O диска при резервном копировании и миграции
Задайте ограничения на характеристики I/O диска для определенных процессов, включая резервное копирование, восстановление и миграцию, чтобы исключить риск снижения производительности всего сервера.
Учет I/O диска
Подробная статистика I/O диска доступна для каждого контейнера. С помощью этой статистики сервис-провайдеры могут следить за характеристиками I/O и процессами отдельных контейнеров. Эту информацию можно использовать для выявления контейнеров, которые создают самую большую нагрузку на I/O диска, что позволяет своевременно увидеть возможности для дополнительных продаж.
Улучшения vzstat
Помимо статистики учета i/o диска также доступна улучшенная статистика расхода процессорных ресурсов. Статистическую информацию можно легко получить через групповой и текстовый режимы, что упрощает интеграцию со сценариями и сторонними решениями.
Офссылка: http://www.parallels.com/ru/products/pvcl/whatsnew/#accounting
Thursday, 1 September 2011
Thursday, 25 August 2011
Отладка плагинов munin
Осуществляет вот примерно такой командой:
/usr/bin/munin-cron --debug --nofork --host srv1.domain.ru --service if_eth0
Wednesday, 24 August 2011
Tuesday, 23 August 2011
Потребление электричества Датацентрами мира
По оценкам Greenpeace, потребление электроэнергии всеми Дата-Центрами мира, составляет от 1,5 до 2 процентов от общемирового спроса и с каждый год эта потребность увеличивается на 12%. Если бы Интернет был страной, то он бы занял пятое место по объему потребления электроэнергии после России и Японии.
Источник: http://telecombloger.ru/7971
Источник: http://telecombloger.ru/7971
Thursday, 18 August 2011
Подсчет pps в Линуксе
Если с просмотром утилизации канала в Линукс нет никаких проблем, что с просмотром числа пакетов в секунду на приеме/передаче - небольшие сложности.
Вариант 1: iptraf
Устанавливаем:
Используем:
iptraf - Detailed interface statistics │ - eth0
Вариант 2: tcpstat
Устаналиваем:
Используем:
В ответ будет выдано примерно следующее:
Вариант 3: собственный скрипт.
Написать его крайне легко, а для получения данных можно использовать приведенные ниже источники:
Вариант 1: iptraf
Устанавливаем:
yum install -y iptraf
apt-get install -y iptraf
Используем:
iptraf - Detailed interface statistics │ - eth0
Вариант 2: tcpstat
Устаналиваем:
apt-get install -y tcpstat
yum install -y tcpstat
Используем:
tcpstat -o "%p\n" -i eth0 1
В ответ будет выдано примерно следующее:
418.00
606.00
559.00
1645.00
1695.00
491.00
334.00
536.00
416.00
Вариант 3: собственный скрипт.
Написать его крайне легко, а для получения данных можно использовать приведенные ниже источники:
ifconfig eth0 | grep pack
RX packets:6494715125 errors:0 dropped:28045132 overruns:0 frame:0
TX packets:7270808826 errors:0 dropped:0 overruns:0 carrier:0
cat /sys/class/net/eth0/statistics/tx_packets
cat /sys/class/net/eth0/statistics/rx_packets
Tuesday, 16 August 2011
Monday, 15 August 2011
Sunday, 14 August 2011
Friday, 12 August 2011
Санкт-Петербургские IRC сервера сети RusNet
irc.run.net и irc.spbu.ru
Thursday, 11 August 2011
Tuesday, 9 August 2011
MySQL: миграция с ENUM на VARCHAR
Перед началом работ необходимо сделать бэкап.
Итак, есть поле таблицы:
Напрямую, насколько я понял, конвертировать его в VARCHAR нельзя. Поэтому пойдем по пути через промежуточное поле, создаем его:
Итого, у нас теперь два поля в табоице:
Итак, сейчас у нас следующее содержимое таблиц:
Копируем значения:
Итого:
После этого переименовываем старую таблицу:
Переименовываем новую в требуемое имя:
Стираем старый филд с enum:
Првоеряем новый тип поля:
Делаем контрольную выборку:
Все! :)
Итак, есть поле таблицы:
`status` enum('new','suspended','complete') default NULL,
Напрямую, насколько я понял, конвертировать его в VARCHAR нельзя. Поэтому пойдем по пути через промежуточное поле, создаем его:
alter table mod_ressrvlist add newstatus varchar(255) not null;
Итого, у нас теперь два поля в табоице:
`status` enum('new','suspended','complete') default NULL,
`newstatus` varchar(255) NOT NULL,
Итак, сейчас у нас следующее содержимое таблиц:
select status, newstatus from sometable;
+-----------+-----------+
| status | newstatus |
+-----------+-----------+
| new | |
| suspended | |
| new | |
| new | |
| suspended | |
| new | |
| new | |
| new | |
| new | |
| new | |
| new | |
| suspended | |
| suspended | |
| new | |
| suspended | |
| suspended | |
| suspended | |
| new | |
| new | |
| new | |
| new | |
| suspended | |
| new | |
| new | |
| new | |
| new | |
| new | |
| new | |
| new | |
| new | |
| suspended | |
| suspended | |
| new | |
| new | |
| new | |
| new | |
| new | |
| suspended | |
| new | |
| suspended | |
| new | |
| new | |
| suspended | |
| new | |
| new | |
+-----------+-----------+
Копируем значения:
update sometable set newstatus = status;
Итого:
sql> select status, newstatus from mod_ressrvlist;
+-----------+-----------+
| status | newstatus |
+-----------+-----------+
| new | new |
| suspended | suspended |
| new | new |
| new | new |
| suspended | suspended |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| suspended | suspended |
| suspended | suspended |
| new | new |
| suspended | suspended |
| suspended | suspended |
| suspended | suspended |
| new | new |
| new | new |
| new | new |
| new | new |
| suspended | suspended |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| suspended | suspended |
| suspended | suspended |
| new | new |
| new | new |
| new | new |
| new | new |
| new | new |
| suspended | suspended |
| new | new |
| suspended | suspended |
| new | new |
| new | new |
| suspended | suspended |
| new | new |
| new | new |
+-----------+-----------+
После этого переименовываем старую таблицу:
ALTER TABLE sometable CHANGE status oldstatus enum('new','suspended','complete') default NULL;
Переименовываем новую в требуемое имя:
ALTER TABLE sometable CHANGE newstatus status varchar(255) NOT NULL;
Стираем старый филд с enum:
alter table sometable drop oldstatus;
Првоеряем новый тип поля:
`status` varchar(255) NOT NULL,
Делаем контрольную выборку:
select status from sometable;
+-----------+
| status |
+-----------+
| new |
| suspended |
| new |
| new |
| suspended |
| new |
| new |
| new |
| new |
| new |
| new |
| suspended |
| suspended |
| new |
| suspended |
| suspended |
| suspended |
| new |
| new |
| new |
| new |
| suspended |
| new |
| new |
| new |
| new |
| new |
| new |
| new |
| new |
| suspended |
| suspended |
| new |
| new |
| new |
| new |
| new |
| suspended |
| new |
| suspended |
| new |
| new |
| suspended |
| new |
| new |
+-----------+
Все! :)
MySQL - добавление нового значения в поле типа ENUM
Допустим, ранее было вот такое поле в некой таблице:
Но в один прекрасный момент понадобилось добавлять в этот самый enum что-то еще:
Вуаля:
Фишка тут еще в том, что новое значение нужно добавить в конец существующего списка:
Источник: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
`status` enum('new','suspended') NOT NULL,
Но в один прекрасный момент понадобилось добавлять в этот самый enum что-то еще:
ALTER TABLEsome_table MODIFY status enum('new','suspended', 'complete')
Вуаля:
`status` enum('new','suspended','complete') default NULL,
Фишка тут еще в том, что новое значение нужно добавить в конец существующего списка:
Changing the definition of an ENUM or SET column by adding new enumeration or set members to the end of the list of valid member values, as long as the storage side of the data type does not change. For example, adding a member to a SET column that has 8 members changes the required storage per value from 1 byte to 2 bytes; this will require a table copy. Adding members in the middle of the list causes renumbering of existing members, which requires a table copy.
Источник: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Tuesday, 2 August 2011
В Bind 9 исправлен баг, который приводил к очень долгой загрузке на большом числе зон
http://www.isc.org/community/blog/201107/major-improvement-bind-9-startup-performance
И мы были подвержены этому багу...
И мы были подвержены этому багу...
Запуск arcconf на read only (ro) файловой системе
Итак, есть сервер с контроллером Adaptec, ФС которого перешла в RO. Очевидный вариант - проверить состояние массива утилитой arcconf, но она не срабатывает!
После выдачи ошибки команда блокируется. Первое предположение было, что открытие лог файла необходимо для работы программы, но strace открыл глаза на источник проблемы:
То есть, программа не могла создать лок-файл. Фиксится легко:
Все, после этого сработало на ура:
arcconf getconfig 1 ld
Could not open log file: /var/log/UcliEvt.log
После выдачи ошибки команда блокируется. Первое предположение было, что открытие лог файла необходимо для работы программы, но strace открыл глаза на источник проблемы:
umask(022) = 077
poll(0, 0, 50) = 0 (Timeout)
umask(077) = 022
open("/var/lock/.aac0lock", O_RDWR) = -1 EROFS (Read-only file system)
umask(022) = 077
poll(0, 0, 50) = 0 (Timeout)
umask(077) = 022
open("/var/lock/.aac0lock", O_RDWR) = -1 EROFS (Read-only file system)
umask(022) = 077
poll(0, 0, 50) = 0 (Timeout)
umask(077) = 022
open("/var/lock/.aac0lock", O_RDWR) = -1 EROFS (Read-only file system)
umask(022) = 077
poll(0, 0, 50) = 0 (Timeout)
umask(077) = 022
open("/var/lock/.aac0lock", O_RDWR) = -1 EROFS (Read-only file system)
umask(022) = 077
poll(0, 0, 50) = 0 (Timeout)
umask(077) = 022
open("/var/lock/.aac0lock", O_RDWR) = -1 EROFS (Read-only file system)
umask(022) = 077
poll(0, 0, 50) = -1 EINTR (Interrupted system call)
То есть, программа не могла создать лок-файл. Фиксится легко:
mount -t tmpfs none /var/lock
Все, после этого сработало на ура:
arcconf getconfig 1 ld
Could not open log file: /var/log/UcliEvt.log
Controllers found: 1
----------------------------------------------------------------------
Logical device information
----------------------------------------------------------------------
Logical device number 0
Logical device name : Device 0
RAID level : 10
Status of logical device : Optimal
Size : XXXXX MB
Stripe-unit size : 256 KB
Read-cache mode : Enabled
MaxIQ preferred cache setting : Enabled
MaxIQ cache setting : Disabled
Write-cache mode : Enabled (write-back)
Write-cache setting : Enabled (write-back)
Partitioned : Yes
Protected by Hot-Spare : No
Bootable : Yes
Failed stripes : No
Power settings : Disabled
--------------------------------------------------------
Logical device segment information
--------------------------------------------------------
Group 0, Segment 0 : Present (0,0) 6SJ0ET5R0000M124SKJU
Group 0, Segment 1 : Present (0,1) 6SJ0DRBM0000M125DK6G
Group 1, Segment 0 : Present (0,2) 6SJ0EET40000M125DNTK
Group 1, Segment 1 : Present (0,3) 6SJ0ERJZ0000M1214JZD
Command completed successfully.
Could not open log file: /var/log/UcliEvt.log
Friday, 29 July 2011
Корректная очистка Nginx кэша
Достаточно лишь удалить файлы кэша:
Либо вот так:
Источник: http://forum.nginx.org/read.php?2,2600,2602
find /var/lib/nginx/cache -type f -exec rm {} \;
Либо вот так:
for i in `find /var/lib/nginx/cache -type f`; do rm $i ; done
Источник: http://forum.nginx.org/read.php?2,2600,2602
Thursday, 28 July 2011
Команда для анализа ключей в содержимом кэша nginx
for i in `find /var/lib/nginx/cache/ -type f`; do cat $i | grep -a KEY; done | sort | uniq
В ответ будет выдан спсиок ключей закэшированных страниц.
Tuesday, 26 July 2011
Технические ограничения в бесплатной версии ESXi (vSphere Server) 5
Весьма и весьма неприятны, теперь для виртуальной машины потолок - 8 гб оперативной памяти:
Update от октября 2011 года (по той же ссылке, информация была изменена):
Источник: http://www.vmware.com/products/vsphere-hypervisor/faq.html
Резонный вопрос - это для одной VM или для всех?
Согласно весьма популярному блогу по сабжеквой теме - это для всех виртуальных машин суммарно.
Источник: http://rickardnobel.se/archives/620
А вот еще немного информации от русскоязычного ресурса vmgu.ru.
Источник: http://www.vmgu.ru/news/vmware-esxi-5-free
How much vRAM does a VMware vSphere Hypervisor license provide?
A vSphere Hypervisor license includes a vRAM entitlement of 8GB.
Update от октября 2011 года (по той же ссылке, информация была изменена):
How much vRAM does a VMware vSphere Hypervisor license provide?
vSphere Hypervisor license provides a vRAM entitlement of 32GB per server, regardless of the number of physical processors. vSphere Hypervisor can be used on servers with maximum physical RAM capacity of 32GB.
Источник: http://www.vmware.com/products/vsphere-hypervisor/faq.html
Резонный вопрос - это для одной VM или для всех?
Согласно весьма популярному блогу по сабжеквой теме - это для всех виртуальных машин суммарно.
The concept of vRAM is defined in the licensing documents as the total amount of RAM given to all virtual machines
Источник: http://rickardnobel.se/archives/620
А вот еще немного информации от русскоязычного ресурса vmgu.ru.
егодня мы хотим рассказать о новой версии VMware ESXi 5, которая (не волнуйтесь) останется в бесплатном варианте (правильно бесплатную версию VMware ESXi 5 нужно называть VMware vSphere Hypervisor). Но поскольку правила лицензирования теперь изменились (об этом там же), то нужно знать о важном ограничении, которое повлияет на большинство пользователей малого и среднего бизнеса, а именно:
Бесплатный VMware ESXi 5 позволяет использовать сколько угодно виртуальных машин на сервере, который имеет сколько угодно процессоров и ядер, но совокупная сконфигурированная память всех включенных виртуальных машин не должна превышать 8 ГБ.
8 ГБ на весь сервер или на один физический процессор сервера? Пока точно неизвестно (я и чуваки склоняемся к первому варианту).
Что такое сконфигурированная память виртуальной машины? Это та, которую вы выставляете в настройках при ее создании.
Звучит как шутка, не правда ли - 8 ГБ памяти для всех запущенных виртуальных машин на сервере с бесплатным VMware ESXi 5 (а может 16 ГБ на двухпроцессорном сервере)? Но это так. Понятно дело, что для VMware ESXi 4.1 у вас на сервере для виртуальных машин, зачастую, выставлено гораздо больше памяти. Но этот тот способ, за счет которого VMware заставит вас купить хотя бы VMware vSphere 5 Essentials, где уже для каждого физического процессора сервера позволяется использовать 24 ГБ сконфигурированной памяти виртуальных машин (а значит, 48 ГБ на двухпроцессорный сервер).
Не удивляйтесь, это нормально в капиталистическом мире, где халява имеет тенденцию заканчиваться. Еще не верите? Тогда идем в VMware vSphere Hypervisor FAQ и читаем:
How much vRAM does a VMware vSphere Hypervisor license provide?
A vSphere Hypervisor license includes a vRAM entitlement of 8GB.
Хочется знать, то такое vRAM? Не проблема - vRAM is the entitlement of pooled virtual memory used across all active virtual machines on the system.
Ну и, конечно, вам хочется знать, что произойдет, если вы превысите планку Entitled vRAM. В этом случае, после лимита в 8 ГБ, новая виртуальная машина просто не включится (это предварительная информация). Все очень просто - hard limit.
А вот какие улучшения и новые возможности появятся в бесплатном VMware ESXi 5:
8 виртуальных процессоров для виртуальной машины (vCPU)
Улучшенный фаервол для VMware ESXi 5 (см. видео тут)
Поддержка устройств USB 3.0
GUI для редактирования количества виртуальных ядер на виртуальный процессор
USB-устройства, подключаемые к ВМ со стороны клиента
Поддержка больших томов VMFS и RDM (до 64 ГБ) в VMFS 5
Поддержка EFI BIOS и гостевых ОС Mac OS 10.6
Поддержка смарт-карт для доступа к консоли виртуальных машин
Поддержка 3D-графики и Windows Aero
Становится понятным, что теперь возможны два варианта: или под давлением общественности VMware повысит планку используемой памяти для бесплатного VMware ESXi 5, или пользователи начнут массовые миграции на Microsoft Hyper-V и Citrix XenServer, которые потихоньку набирают силу в сегменте малого и среднего бизнеса.
Оставайтесь с нами. Еще интереснее дальше будут вещи. Кстати, по vSphere 5 появился еще вот такой интересный документик.
Источник: http://www.vmgu.ru/news/vmware-esxi-5-free
Sunday, 24 July 2011
Немного мыслей про виртуализацию - Linux KVM
Имхо, это не так. Сама по себе технология Xen с архитектурной точки зрения весьма проблемна и сложна в поддержке, об этом уже столько всего сказано, что могу лишь как ссылку привести список рассылки KVM, почему и зачем его начали писать.
Разумеется, текущее состояние KVM далеко от production-ready решений по виртуализации от конкурентов, но все движется к тому, что в районе RHEL 6.2-6.4 это будет очень и очень серьезная технология, которая потеснит текущих игроков рынка и сильно. Не буду углубляться в подробности, но одно лишь рвение Intel в ее (KVM) развитии стоит внимания да и не только Intel, кому интересно: http://www.openvirtualizationalliance.org/ в данном консорциуме состоят Intel, HP, IBM, Red Hat. Конечно, я не умаляю крутости Ситрикса и VmWare, но с такой могучей четверкой еще надо потягаться будет.
А вот несколько слов от одного из ведущих разработчиков KVM - Avi Kivity, http://kerneltrap.org/node/8088 в его интервью очень хорошо объясняется, в чем отличия KVM от других систем виртуализации.
Изначально опубликовано: http://forum.searchengines.ru/showthread.php?p=9229954
Разумеется, текущее состояние KVM далеко от production-ready решений по виртуализации от конкурентов, но все движется к тому, что в районе RHEL 6.2-6.4 это будет очень и очень серьезная технология, которая потеснит текущих игроков рынка и сильно. Не буду углубляться в подробности, но одно лишь рвение Intel в ее (KVM) развитии стоит внимания да и не только Intel, кому интересно: http://www.openvirtualizationalliance.org/ в данном консорциуме состоят Intel, HP, IBM, Red Hat. Конечно, я не умаляю крутости Ситрикса и VmWare, но с такой могучей четверкой еще надо потягаться будет.
А вот несколько слов от одного из ведущих разработчиков KVM - Avi Kivity, http://kerneltrap.org/node/8088 в его интервью очень хорошо объясняется, в чем отличия KVM от других систем виртуализации.
Изначально опубликовано: http://forum.searchengines.ru/showthread.php?p=9229954
Saturday, 23 July 2011
Две наиболее нужных команды при разработке на PHP, позволяющие сэкономить море времени
Вот эти две команды, заставят PHP выдавать все ошибки и предупреждения, которые у него имеются:
error_reporting(E_ALL^E_STRICT);
ini_set('display_errors','On');
Изменение итерируемой структуры из цикла foreach в PHP
Стандартно итерация производится так:
И если попробовать сделать что-то в стиле: $item['soma_key'] = 'some_val', то как ожидается это не сработает (в отличие от Perl, там такое поведение стандартно).
Чтобы такой механизм заработал, нужно немного скорректировать вид цикла:
При этом, значения не будут копироваться, а будут передаваться по ссылке.
foreach ( $invitems as $item ) {
И если попробовать сделать что-то в стиле: $item['soma_key'] = 'some_val', то как ожидается это не сработает (в отличие от Perl, там такое поведение стандартно).
Чтобы такой механизм заработал, нужно немного скорректировать вид цикла:
foreach ( $invitems as &$item ) {
При этом, значения не будут копироваться, а будут передаваться по ссылке.
Очень простой профайлинг кода на PHP - PHP Quick Profiler
Наткнулся на сий замечательный софт - PHP Quick Profiler: http://particletree.com/features/php-quick-profiler/
Все, что требуется для профайлинга конкретного файла - это добавить в начале страницы небольшой include и сразу после этого можно будет наблюдать развернутый очень красивый отчет о потребляемых скриптом ресурсах.
Все, что требуется для профайлинга конкретного файла - это добавить в начале страницы небольшой include и сразу после этого можно будет наблюдать развернутый очень красивый отчет о потребляемых скриптом ресурсах.
Модуль для логгирования POST запросов в Apache
Вот описание: http://freshmeat.net/projects/mod_log_post
Вот официальный сайт загрузки (требуется регистрация): http://ftp.robert-scheck.de/linux/mod_log_post/
А вот зеркало без регистрации: http://fastvps.googlecode.com/files/mod_log_post-0.1.0.tar.gz
Открываем конфиг:
Там заменяем:
И применяем изменения:
Вот официальный сайт загрузки (требуется регистрация): http://ftp.robert-scheck.de/linux/mod_log_post/
А вот зеркало без регистрации: http://fastvps.googlecode.com/files/mod_log_post-0.1.0.tar.gz
cd /usr/srcПосле этого модуль скопируется в: /usr/lib/apache2/modules, а конфиг его добавится в /etc/apache2/conf.d/log_post.conf.
wget http://fastvps.googlecode.com/files/mod_log_post-0.1.0.tar.gz
tar -xf mod_log_post-0.1.0.tar.gz
cd mod_log_post-0.1.0
apt-get install -y apache2-dev
./configure
make install
Открываем конфиг:
vim /etc/apache2/conf.d/log_post.conf
Там заменяем:
LoadModule log_post_module modules/mod_log_post.soна
LoadModule log_post_module /usr/lib/apache2/modules/mod_log_post.so
И применяем изменения:
/etc/init.d/apache2 restart
tail -f /var/log/apache2/post_log
Friday, 22 July 2011
lighttpd на Debian - деактивация поддержки IPv6
Как сторонний эффект включенной поддержки IPv6 - накрасивые логи в стиле:
Открываем конфиг:
Комментируем строки:
Применяем настройки:
::ffff:178.77.77.77 - [22/Jul/2011:21:12:08 +0200] "GET /media/js/tools.js HTTP/1.1" 200 8163 "http://www.domain.ru/dedicated/?gclid=xxxxx" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"
Открываем конфиг:
vim /etc/lighttpd/lighttpd.conf
Комментируем строки:
# include_shell "/usr/share/lighttpd/use-ipv6.pl"
Применяем настройки:
/etc/init.d/lighttpd restart
Wednesday, 20 July 2011
Как прервать исполнение кода в Smarty 2?
Очень часто хочется прервать какой-либо процесс внутри Smarty шаблона, но если сделать return, то остановится рендеринг всего шаблона, а не только {php} блока. Единственное решение этой проблемы, которое я нашел - выносить такой код в отдельные файлы и подключать их через {include}. И тогда return в инклуд файле не будет прерывать рендеринг основного шаблона.
Monday, 18 July 2011
Как заархивировать папку в zip формат
zip -9 -y -r -q file.zip folder/
Wednesday, 13 July 2011
Sunday, 10 July 2011
Saturday, 9 July 2011
Обновление файлов и папок рекурсивно
Итак, есть задача - имеется некая файловая иерархия, где в корневой папке имеются и файлы и папки, в которых в свою очередь имеются вложенные файлы и папки. Кроме этого, имеется аналогичная файловая иерархия, но с только новыми файлами (файлы лежат как в корне, так и во вложенных папках). Задача - нужно из второй файловой иерархии скопировать все папки/файлы и в случае их наличия в первой - переписать их. Пусть первая иерархия - folder, вторая - folderpatch.
Первая попытка была в стиле:
Но в ответ меня встретило:
То есть, пропатчить файлы внутри папок не получится никак.
Но для cp преград нету!
После этого измененные/новые файлы из папки folderpatch заменят файлы в корне папки folder, а также файлы во вложенных папках папки folder.
Источник: http://www.cafewebmaster.com/update-overwrite-files-and-directories-recursively-linux-mv-cp-commands
Первая попытка была в стиле:
mv folderpatch/* folder
Но в ответ меня встретило:
mv: cannot move `test1' to `../test1': Directory not empty
mv: cannot move `test2' to `../test2': Directory not empty
mv: cannot move `test3' to `../test3': Directory not empty
То есть, пропатчить файлы внутри папок не получится никак.
Но для cp преград нету!
cp -af folderpath/* folder
После этого измененные/новые файлы из папки folderpatch заменят файлы в корне папки folder, а также файлы во вложенных папках папки folder.
Источник: http://www.cafewebmaster.com/update-overwrite-files-and-directories-recursively-linux-mv-cp-commands
Thursday, 7 July 2011
Распаковка rar архивов на Linux / Mac OS с сохранением иерархии папок
У unrar есть два варианта распаковки:
Чтобы сохранить структуру папок, нужно использовать x:
Ваня, респект!
e Extract files to current directory
x Extract files with full path
Чтобы сохранить структуру папок, нужно использовать x:
unrar x
Ваня, респект!
Monday, 4 July 2011
Sunday, 3 July 2011
Как заставить Linux перезагрузиться при возникновении panic ошибки?
Для этого достаточно задать параметр kernel.panic в файле /etc/sysctl.conf и применить изменения. При установке данного параметра в нулевое значение перезагрузки при panic происходить не будет, при установке в любое положительное значение (строго больше нуля) будет происходить перезагрузка через заданное количество секунд.
Итого, добавляем в файл /etc/sysctl.conf строку
Все, после этого при возникновении panic ошибки машина перезагрузится и продолжит работать корректно. Но, обращаю внимание, это неправильный способ решения проблемы, правильный заключается в поиске проблемы и ее решении.
Итого, добавляем в файл /etc/sysctl.conf строку
kernel.panic = 15После этого применяем изменения:
sysctl -p
Все, после этого при возникновении panic ошибки машина перезагрузится и продолжит работать корректно. Но, обращаю внимание, это неправильный способ решения проблемы, правильный заключается в поиске проблемы и ее решении.
Saturday, 2 July 2011
Как получить бесплатный Windows 2008 R2 на 180 дней?
http://technet.microsoft.com/ru-ru/evalcenter/dd459137.aspx
Там выбираем: "Загрузка 64-разрядных версий (Standard, Enterprise, Datacenter и Web" и щелкаем "Начните прямо сейчас", после этого регистрируемся/логинимся и начнется загрузка триал версии^ файла с именем в стиле: xxxx_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso
Там выбираем: "Загрузка 64-разрядных версий (Standard, Enterprise, Datacenter и Web" и щелкаем "Начните прямо сейчас", после этого регистрируемся/логинимся и начнется загрузка триал версии^ файла с именем в стиле: xxxx_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso
Subscribe to:
Posts
(
Atom
)