понедельник, 29 ноября 2010 г.

.htaccess 301 редирект

RewriteEngine on
RewriteRule (.*) http://domen.ru/$1 [R=301,L]
Может быть косяк с циклическим редиректом, если дальше есть правила вида RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Варианты - или сделать остановку на данном правиле, или (что более верно) - проверять, тот ли это домен: например, поставить сначала
RewriteCond %{HTTP_HOST} ^host.ru$ [NC]
Или ещё более кошерно
RewriteCond !%{HTTP_HOST} ^need-host.ru$ [NC]
как-то так.

редирект без-www на www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^host.ru$ [NC]
RewriteRule (.*) http://www.host.ru/$1 [R=permanent,L]

вариант 2
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.host.ru
RewriteRule (.*) http://www.host.ru/$1 [R=permanent,L]

пятница, 26 ноября 2010 г.

Особенности стягивания wget-ом

Добавил к часто используемым ключам
-r - рекурсивно
--limit-rate=
--ftp-user=
--ftp-password=

еще один:
-l depth
--level=depth
Specify recursion maximum depth level depth. The default maximum
depth is 5.

Если качать по фтп сайт, 5 часто оказывается мало, ставлю 15.

понедельник, 22 ноября 2010 г.

немного про репликацию mysql

Понадобилось внести в набор master-slave еще одну базу.
Бинлог ведется по всем базам.
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000416 | 6253340 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Пробуем..
master:
create database db character set cp1251;

slave:
vi my.cnf
вносим базу в список replicate-do-db=
перезапускаем слейв (стоит скип-старт). Базы нет. Да и не должно.
slave start;
базы нет. Но в show slave status она есть.
Попробуем создать.
create database db character set cp1251;
use db;
база есть.
show tables пока пуст, но и на мастере нету ничего. А теперь проверим "живую" заливку.

master:
mysql -u root -p db
slave:
show tables - заливка прошла!
Теперь осталось залить пользователей, потому что слейв не слушает базу mysql.

master и slave:

grant all privileges on db.* to 'db'@'localhost' identified by 'pass';
flush privileges;

В принципе все.

PuTTY Connection Manager

По работе приходится запускать до 30 сессий putty, пора делать это удобно.

Нашел менеджер: PuTTY Connection Manager
Требует .NET 2.0
Оттуда же желательно сразу AES библиотеку скачать.
Из недостатков - я использую portaputty, сессии которого несовместимы с этим менеджером. Надо сделать запрос фичи.

Из моментов реальной работы:
сессии portaputty с менеджером несовместимы, а использование простого putty делает непортабельным комплект. Но использовать сессии от portaputty можно! Для этого создаем Database, там нужный нам хост и в свойствах в разделе Putty session прописываем туда:
-load "my profile"

Теперь такие вещи, как ключ, таймауты, логин итд - берутся оттуда.

Стабильность на 1 окне с 1 путтей - нормальна, но когда памяти занято много, и несколько отдельных окон (для удобства у меня 1 окно - 1 база, разделены внутренние сервера, виртуальные сервера, внешние...) - периодически падают как putty внутри, так и сами процессы менеджера. Более того, менеджер может упасть, есть вызвать putty menu - бывало у меня и такое. Так что за стабильность выше двочеки не поставить. При этом открытая пачка отдельных putty - падало только вместе с системой, или пока я не закрою.

суббота, 20 ноября 2010 г.

меняем в ФФ поиск по умолчанию с яндекса на нормальный

Открываем about:settings
находим keyword.URL и присваиваем ему значение http://www.google.ru/search?q=
Все, больше яндекс нас не потревожит.
И еще вверху можно открыть "управление поисковыми плагинами" и удалить оттуда яндекс или просто вниз перенести.
Еще я повесил бинды g для гугла и w для вики.

четверг, 18 ноября 2010 г.

nginx+passenger во FreeBSD

UP
Сейчас в nginx конфигураторе есть штатно passenger - ничего патчить не надо, ставим галочку и собираем. Про зависимости вроде rubygem не проверяли, но должно автоматом подтянуться всё нужное.
Из блока ниже понадобится разве что пример конфигурации для nginx.

Старая версия:

eaccelerator

Попробовал поставить eaccelerator.
#yum install php-eaccelerator

---> Package php-eaccelerator.i386 1:0.9.5.2-2.el5 set to be updated
--> Processing Dependency: php-zend-abi = 20050922 for package: php-eaccelerator
--> Finished Dependency Resolution
1:php-eaccelerator-0.9.5.2-2.el5.i386 from epel has depsolving problems
--> Missing Dependency: php-zend-abi = 20050922 is needed by package 1:php-eaccelerator-0.9.5.2-2.el5.i386 (epel)
Error: Missing Dependency: php-zend-abi = 20050922 is needed by package 1:php-eaccelerator-0.9.5.2-2.el5.i386 (epel)
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
package-cleanup --dupes
rpm -Va --nofiles --nodigest
The program package-cleanup is found in the yum-utils package.

Что за..

#yum install php-zend-abi
Package php-common-5.2.10-1.el5.centos.i386 already installed and latest version
Nothing to do

Ага, было слияние пакетов. Но та версия, что в epel, пока об этом не знает. А в centos-testing такого пакета просто нет.

Попробуем поставить remi
#rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
#yum install --enablerepo=remi php-eaccelerator

И... Оно хочет мне обновить php версию до 5.3!
5.3.3-1.el5.remi

Последняя попытка.
yum install --skip-broken php-eaccelerator

И все-равно не оно. И опции --nodeps или --force тоже нету. И даже банального --version=x.x
Вот за что ненавижу предкомпилированные пакеты -- чуть отклонение от нормы и собирай из исходников.

Дальше-больше. php-eaccelerator-0.9.5.2-2.el5.i386 похоже вообще не заработает.
http://eaccelerator.net/ticket/338

А потом я нашел решение.
#rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
#yum install php-eaccelerator

Все, стоит 0.9.6 и на той версии, что мне нужна.

ставим bitrix в centos

В принципе, ставится оно просто (не то что redmine, ага)

yum install httpd nginx mysql php php-mysql gd php-gd
Если что, может понадобиться доставить freetype, zlib, php_mbstring
Но они должны сами вытянуться по зависимостям. И поэтому же я ставлю только основные модули всегда, чтобы зависимости сами вытягивались и при удалении также удалялись как более ненужные.
Если что, nginx есть в epel, php - в el5.centos (который CentOS-Testing, есть в заметках)

Дальше настраиваем nginx, apache, даем права apache:apache папке, куда ставим, заливаем скрипт установки
http://www.1c-bitrix.ru/download/cms.php#tab-bitrixsetup-link
и запускаем. Должно все заработать. Выбираем ознакомительный режим, любую сборку, и доходим до "Предварительная проверка"
Доставляем если чего не хватает, выставляем mbstring.func_overload и mbstring.internal_encoding в /etc/php.ini ...
И запускаем тесты производительности.
Оптимизация - отдельная тема, тут трогать не буду.

Есть какой-то скрипт автоматической установки, но пока не нашел. Более того, мне показалось, что во фре оно есть прямо в портах.
Также может понадобиться eaccelerator/аналоги и zend.

среда, 17 ноября 2010 г.

баги хена-2

end_request: I/O error, dev xvda, sector 323805
end_request: I/O error, dev xvda, sector 323893
end_request: I/O error, dev xvda, sector 323261
Buffer I/O error on device dm-0, logical block 14254
lost page write due to I/O error on dm-0
Aborting journal on device dm-0.
ext3_abort called.
EXT3-fs error (device dm-0): ext3_journal_start_sb: Detected aborted journal
Remounting filesystem read-only
end_request: I/O error, dev xvda, sector 218861
Buffer I/O error on device dm-0, logical block 1204
lost page write due to I/O error on dm-0
end_request: I/O error, dev xvda, sector 853869
Buffer I/O error on device dm-0, logical block 80580
lost page write due to I/O error on dm-0
Buffer I/O error on device dm-0, logical block 80581
lost page write due to I/O error on dm-0

ejabberd в CentOS

Немного погуглил и расстроился, что придется собирать ejabberd из исходников, а это много мороки.. Да и просто собирать глупо, надо сначала пакет делать, это лишние усилия и время. Но потом нашел, что оно есть в epel!

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
или
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86-64/epel-release-5-4.noarch.rpm
Обращу внимание, что периодически нужный пакет обновляется, так что если что, идем http://download.fedora.redhat.com/pub/epel и далее по нужным нам атрибутам.

yum install ejabberd

Дальше можно посмотреть
http://privats.ru/tag/ejabberd
http://plone.lucidsolutions.co.nz/linux/im/ejabberd-centos-vm

Не забываем внести нужные строки в днс.

asterisk 1.6 для CentOS

http://www.asterisk.org/downloads/yum

Причем там не древняя 1.4, а нормальная 1.6!

создание sparse файла

Например, когда надо сделать iso файл для xen-а, а времени на простое заполнение через dd нету.
dd if=/dev/zero of=guest.img bs=1M count=0 seek=5000
или
truncate -s 4G guest.img

монтирование iso во FreeBSD

mount -t cd9660 /dev/`mdconfig -a -t vnode -f discimg.iso` /cdrom

отсюда http://www.commandlinefu.com/commands/view/1014/loopback-mount-.iso-on-freebsd

"Полный" вариант выглядит так:
# mdconfig -a -t vnode -f /home/steven/5.4-RELEASE-i386-disc1.iso -u 0
# mount -t cd9660 /dev/md0 /var/ftp/pub/freebsd-5.4/
Но он менее удобен, особенно в скриптах.

отмонтировать
mdconfig -d -u 0

apache+nginx и Keepalive

Когда работает связка apache+nginx, по идее Keepalive надо ставить на максимум - экономим ресурсы на коннектах. Поскольку там создали страницу, отдали быстро проксе и снова ждем данных, существующие коннекты должны использоваться эффективно. Но есть подозрение, что надо его все-таки отключать.

Судя по http://markmail.org/message/24r67x3kaztl4qpf#query:apache%20nginx%20keepalive+page:1+mid:djcpsyst2kewktf6+state:results
и смежным темам, надо отключать, поскольку nginx шлет close
"Наверно потому что используется HTTP/1.0 - оно не умеет keepalive"

redmine варианты запуска

Редмайн написан на руби, что делает его запуск несколько проблемным.
Пока нашел варианты запуска:
1) через встроенный веб сервер webrick (на 3000 порту). Увы, весьма нестабилен и за 2 недели падал 3 раза.
2) mongrel и mongrel-cluster
3) Thin
4) nginx + passenger
5) apache + mod_ruby

Гугль говорит, что webrick и thin не рекомендуются, cо встроенным я убедился, что не стоит...

Даже если проект локальный, желательно отдавать статику через nginx, так что вариант с прокси будет оптимальным.
Осталось определиться, mongrel или passenger.

http://www.modrails.com/documentation.html
Похоже, производительность примерно равна.

В оф.доке
http://www.redmine.org/wiki/redmine/HowTo_configure_Nginx_to_run_Redmine
используется вообще Thin.

mongrel
rubygem-mongrel.x86_64 : A small fast HTTP library and server for Ruby apps
rubygem-mongrel_cluster.noarch : GemPlugin wrapper for the mongrel HTTP server

Mongrel-cluster ставится так:
yum install rubygem-mongrel_cluster

Дальше можно делать по доке
http://seriyps.ru/blog/2010/01/14/ustanovka-redmine-na-ubuntu-9-10-pod-nginx-chast-2/

passenger ставится так:
gem install passenger
Потом модуль для nginx
passenger-install-nginx-module

Тут: http://www.modrails.com/documentation/Users%20guide%20Nginx.html
основная дока.

И не забываем настроить почту, это делается в config/email.yml
Чтобы просто отправлять от обычного пользователя (с существующего ящика), вписываем туда в production: настройки почтового сервера и наслаждаемся.
Если же надо еще и обрабатывать ответы по почте, смотрим доку ниже.

Еще полезная дока:
http://ru.gentoo-wiki.com/wiki/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_Redmine
В частности, там есть немного по подключению баз и настройке exim.

Увы, sqlite3 у меня так и не заработал... Пришлось делать на mysql.

Изменение ядра по умолчанию

Когда ставим хен-ядро, после обновления ядра вполне может загрузиться опять простое.
Спасибо заметке http://phpsuxx.blogspot.com/2010/11/centos-x86-4.html
Оказалось, надо в моем случае открыть /etc/sysconfig/kernel и заменить там
DEFAULTKERNEL=kernel
на
DEFAULTKERNEL=kernel-xen

понедельник, 15 ноября 2010 г.

rsync

Надо синхронизировать 2 сервера, /var/www
Сначала я думал использовать rsyncd, но у него шифрование md4 и пароли в открытом виде... Лучше просто rsync через ssh, создать спец юзера и в authorized_keys вписать ему ключ и команду.

Если что, чего читал:
http://www.opennet.ru/man.shtml?topic=rsyncd.conf&category=5&russian=0
http://www.lissyara.su/articles/freebsd/programms/rsync/
http://wiki.izhnet.org/pages/viewpage.action?pageId=6225921

суббота, 13 ноября 2010 г.

Адаптеки 5ххх+seagate = проблемы

http://forum.ixbt.com/topic.cgi?id=66:7025:1

"Это известный баг винтов Сигейт 7200.11 и Адаптеков 5ххх
см. например
http://3nity.ru/viewtopic.php?f=63&t=12037"

Большие самодельные СХД

http://louwrentius.blogspot.com/2009/07/20-disk-18-tb-raid-6-storage-based-on.html
18Тб

http://www.fishki.net/comment.php?id=77671
90 терабайт, в состав которого вошло: два блока питания по 1600 Вт, 5 контроллеров, 64 жестких диска и 40 карлсонов

http://hardforum.com/showpost.php?p=1033720469&postcount=2
Top 10+ Tb систем

http://hardforum.com/showthread.php?t=1512972
С ссылки выше, 100тб в картинках.

Немного про ZFS

http://habrahabr.ru/blogs/i_am_clever/54806/

SGPIO

Вкратце: дополнительный кабель (10-пин) для передачи вспомогательной информации от контроллера к бэкплейну, например, активность дисков и их статус.

Подробнее:
http://en.wikipedia.org/wiki/SGPIO

И пара слов тут есть:
http://ru.wikipedia.org/wiki/Serial_Attached_SCSI

Разные подходы к дискам..

Как во фре удобно сделано: диск привязан к порту, поэтому появление нового диска в более младшем порту не мешает системе никак. И может быть 1 диск в системе, /dev/ad20, и это нормально...
В центоси с этим проблема. Был sda, вставили еще диск.. теперь новый получает sda, старый должен стать sdb, но не хочет, и начинается война. Стали делать привязку к UUID (зачем?? Есть же WWN, который используется во всех норм системах.. Но мы выпендримся!). А если хотим грузиться с рейда? В общем, хотели как лучше, получили как всегда. Лучше бы по номеру порта обзывали чтоли..

Уточнение: похоже, линь не дружит с хотплагом ИДЕ. Контроллер был в режиме "SATA", переключил в AHCI, сейчас хотя бы не падает все.
И снова кивок в сторону фри, где atacontrol detach ataX, atacontrol attach ataX и диск в системе. Отключать - после детача. Да, рескан реально не работает.

Продолжение бед

Про первую часть - после перезагрузки диски поменяли названия, видимо поэтому и лезли эти странные баги. Центось не умеет хотсвап?

Вставил диск в корзину (743 супермикра).
ata1: exception Emask 0x10 SAct 0x0 SErr 0x4080000 action 0xe frozen
ata1: irq_stat 0x00000040, connection status changed
ata1: SError: { 10B8B DevExch }
ata1: hard resetting link
ata1: SATA link down (SStatus 0 SControl 300)
ata1: EH complete
каждые 3 сек, пока диск не вынул.

Видимо, есть проблемы.

пятница, 12 ноября 2010 г.

беды с xen-серверком

Отпала ссш консолька от виртуалки.. В xm console вошел, получил строку
Message from syslogd@ at Thu Nov 11 20:31:38 2010 ...
centos-x64-xen kernel: journal commit I/O error

В дом0 в дмесге

...
end_request: I/O error, dev sda, sector 8726615
sd 3:0:0:0: SCSI error: return code = 0x00040000
end_request: I/O error, dev sda, sector 8726615
sd 3:0:0:0: SCSI error: return code = 0x00040000
...

end_request: I/O error, dev sda, sector 7601039
type=1701 audit(1289516342.948:3540): auid=500 uid=0 gid=0 ses=514 subj=user_u:system_r:unconfined_t:s0 pid=15252 comm="smartctl" sig=7

(попробовал запустить smartctl, получил Bus error)
И это при том, что сейчас файл с виртуалкой лежит на другой машине и получается через NFS.

root@file:/backup/nfs# gmirror status
Name Status Components
mirror/gm0 COMPLETE ad7
ad5

Там все в порядке.


[root@centos-x64-xen named]# /etc/init.d/avahi-daemon stop
Shutting down Avahi daemon: Failed to open PID file: Read-only file system
Failed to kill daemon: Read-only file system
rm: cannot remove `/var/lock/subsys/avahi-daemon': Read-only file system

Интересная хрень!

В хвосте /var/log/messages строки:

Nov 11 20:29:41 centos-x64-xen kernel: ata4.00: exception Emask 0x50 SAct 0x1 SE
rr 0x680901 action 0x6 frozen
Nov 11 20:29:41 centos-x64-xen kernel: ata4.00: irq_stat 0x0c000000, interface f
atal error
Nov 11 20:29:41 centos-x64-xen kernel: ata4: SError: { RecovData UnrecovData Hos
tInt 10B8B BadCRC Handshk }
Nov 11 20:29:41 centos-x64-xen kernel: ata4.00: cmd 61/08:00:27:c1:00/00:00:00:0
0:00/40 tag 0 ncq 4096 out
Nov 11 20:29:41 centos-x64-xen kernel: res 40/00:04:27:c1:00/00:00:00:0
0:00/40 Emask 0x50 (ATA bus error)
Nov 11 20:29:41 centos-x64-xen kernel: ata4.00: status: { DRDY }
Nov 11 20:29:41 centos-x64-xen kernel: ata4: hard resetting link
Nov 11 20:29:42 centos-x64-xen kernel: ata4: softreset failed (device not ready)
Nov 11 20:29:42 centos-x64-xen kernel: ata4: failed due to HW bug, retry pmp=0
Nov 11 20:29:42 centos-x64-xen kernel: ata4: SATA link up 3.0 Gbps (SStatus 123
SControl 300)
Nov 11 20:29:42 centos-x64-xen kernel: ata4.00: configured for UDMA/133
Nov 11 20:29:42 centos-x64-xen kernel: ata4: EH complete
Nov 11 20:29:42 centos-x64-xen kernel: SCSI device sda: 625140335 512-byte hdwr
sectors (320072 MB)
Nov 11 20:29:42 centos-x64-xen kernel: sda: Write Protect is off

Все, лог кончился.. где-то 6 часов назад.

При этом

[root@centos-x64-xen named]# touch /var/xen/nfs/test
успешен. Хотя это как раз нфс-шара...

Следом идущие баги:

[root@centos-x64-xen named]# xm list
Traceback (most recent call last):
File "/usr/sbin/xm", line 5, in ?
from xen.xm import main
File "/usr/lib64/python2.4/site-packages/xen/xm/main.py", line 55, in ?

File "/usr/lib64/python2.4/site-packages/xen/util/xsm/xsm.py", line 7, in ?
....

IOError: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/etc/named']

В общем, хана. Надо ребутиться. Проблема в том, что это уже второй раз. Но сначала попробуем хоть чуть-чуть оживить...

[root@centos-x64-xen named]# mount -t tmpfs none /tmp
[root@centos-x64-xen named]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1473 4 r----- 139784.4
...

Ура.

И напоследок еще забавный момент.

[root@centos-x64-xen named]# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1473 4 r----- 139802.9
SVN 16 256 1 ---s-- 3203.7
aqua3.wm 22 512 2 ---s-- 140.1
jabber-server 20 256 2 ---s-- 110.2
mail 17 256 1 ---s-- 2244.8
test2-nfs 7 512 1 -b---- 11836.6
zabbix-server 13 256 2 ---s-- 53772.9

В документации что-то было на тему, что -s- юзер никогда не должен увидеть. Ага.

четверг, 11 ноября 2010 г.

Создаем новый LVM

создание раздела
fdisk /dev/hda
u
p
n


w
<перечитать диски>

~]# pvcreate /dev/hda4
Physical volume "/dev/hda4" successfully created

~]# pvdisplay
"/dev/hda4" is a new physical volume of "45.00 GB"
--- NEW Physical volume ---
PV Name /dev/hda4
VG Name
PV Size 45.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID sY9uM2-qwt0-mR2w-0rMw-pRuh-bp4s-1fG1Ro

~]# vgcreate vg0 /dev/hda4
Volume group "vg0" successfully created

~]# lvcreate -v -L +20G vg0
Setting logging type to disk
Finding volume group "vg0"
Archiving volume group "vg0" metadata (seqno 1).
Creating logical volume lvol0
Creating volume group backup "/etc/lvm/backup/vg0" (seqno 2).
Found volume group "vg0"
visited lvol0
visited lvol0
Creating vg0-lvol0
Loading vg0-lvol0 table
Resuming vg0-lvol0 (253:0)
Clearing start of logical volume "lvol0"
Creating volume group backup "/etc/lvm/backup/vg0" (seqno 2).
Logical volume "lvol0" created

или mkfs
[root@centos ~]# mkfs.ext3 /dev/mapper/vg0-lvol0
mke2fs 1.39 (29-May-2006)

]# mount /dev/mapper/vg0-lvol0 /var1

LVM

Пришлось переходить полностью на линукс, надо виртуализировать все хозяйство, а на файлосервер денег зажали и будет 1 нода с пачкой дисков.
Изучаю lvm.
Недостатки: это решение явно не дотягивает до ZFS, да и рейдом не назвать как таковым. Потому что если во фре мы сделаем gmirror create gm0 ad4 ad6, то на итоговое зеркало можно спокойно ставить систему, не заморачиваясь с грубом (на lvm надо потом каждому диску ткнуть, что он загрузочный). Плюс нет такого удобного управления, как в ZFS (zpool status и видно, кто выпал, кто жив).. Да и создание зеркала там тоже элементарное.. А сжатие, а дедупликация, ээххх..

Переводим CentOS на статику

Понадобилось перевести некоторые машины на статику.

/etc/sysconfig/networking/devices/ifcfg-eth0
Тут настройки для первой сетевухи.

DEVICE=eth0
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.2.15
NETMASK=255.255.255.0
GATEWAY=192.168.2.2
IPV6INIT=no
HWADDR=00:26:18:B8:C2:4A
ONBOOT=yes

В данном случае закомментирован #BOOTPROTO=dhcp и следом вписаны адрес, маска, шлюз.
И не забыть поправить /etc/resolv.conf, вписав строки nameserver 8.8.8.8 или свои днс-ы, строка на 1 адрес.

При этом у меня в логе оказалась строчка

Nov 11 18:43:53 server restorecond: Will not restore a file with more than one hard link (/etc/resolv.conf) Invalid argument
Похоже, при этом ломается какая-то система файлов...

# locate resolv.conf
/etc/resolv.conf
/etc/resolv.conf.predhclient
/etc/sysconfig/networking/profiles/default/resolv.conf
/usr/share/man/man5/resolv.conf.5.gz

Правильнее править 2 или 3?...

Неприятный баг в апаче

Есть такой момент, что следование записей о хостах в конфиге имеет значение, при этом apachectl -S покажет все как ожидается, но реально работать будет не так. Например, первая запись описывает domain.com, а все последующие - его поддомены. Но в первой записи есть

ServerAlias www.domain.com *.domain.com

Показывать apachectl -S будет то, что мы и ожидаем увидеть, а вот работать некорректно. Если же переставим нужные поддомены выше -- заработает, как и ожидалось.

И влечет это еще багу:
Include etc/apache2/Includes/*.conf
У меня каждый сайт в отдельном файле. И теперь если сначала считает основной домен, а потом поддомен - можно задолбаться.

Решение -- использование префиксов для поддоменов, например _sub.domain.com, __sub.sub.domain.com или всем дать номера. Один раз тоже вылезла бага - на всех серверах отрабатывало как надо, а на одном читало непойми как, там пришлось прописать руками все домены в конфиг. Или фикс - в конфиг:
Include etc/apache2/Includes/__*.conf
Include etc/apache2/Includes/_*.conf
Include etc/apache2/Includes/*.conf
(проверить, но должно работать)

Многие скажут, что это не бага, а фича, но на самом деле это бага в полном смысле. Лечится составлением списка всех доменов и выбором с наиболее точным совпадением, как у того же DHCP с масками мак-адресов сделано, от большего совпадения к меньшему.

avahi

Что вообще есть этот авахи?

Avahi — система, производящая анализ локальной сети на предмет выявления различных сервисов. К примеру, вы можете подключить ноутбук к локальной сети и сразу получить информацию об имеющихся принтерах, разделяемых ресурсах, сервисах обмена сообщениями и прочих услугах. Подобная технология существует в Mac OS X (Rendezvous, Bonjour) и показала себя с лучшей стороны.

http://ru.wikipedia.org/wiki/Avahi
http://ru.wikipedia.org/wiki/Zeroconf

Именно отсюда растут ноги у сети 169.254 и UPnP. Но я не могу представить, когда в сети больше 10 компов эти штуки имеют смысл. Разве что для дома в сети из 2-3 машин.

В винде всякие bonjour, mDNSResponser итд - виндовая версия авахи.

avahi-daemon: Invalid query packet.

Нашел в логах строки

Nov 10 16:34:10 centos-x64-xen avahi-daemon[3038]: Invalid query packet.
Nov 10 16:46:48 centos-x64-xen last message repeated 3 times
Nov 10 16:50:42 centos-x64-xen last message repeated 3 times

"It's just some unexpected Bonjour query packets, and nothing to worry about. These were introduced by the new "sleep proxy" feature in Snow Leopard. Next release will not complain about these packets."
Смысл - не о чем волноваться, когда-нибудь пофиксят. Я пофиксил просто отключением этой авахи, для меня особо не нужной. http://ru.wikipedia.org/wiki/Avahi - что это такое.

инфу нашел тут:
http://www.readynas.com/forum/viewtopic.php?f=7&t=39832
и немного тут
http://forums.fedoraforum.org/showthread.php?p=1339423

среда, 10 ноября 2010 г.

Бэкапы в S3, часть 1

Для начала, определимся с языками и технологиями, а также тем, что вообще и как будем хранить.


Выгрузить файл в службы Amazon S3 с web-страницы можно несколькими способами:
  • При помощи командной строки, используя соответствующие модули CPAN.
  • При помощи командной строки, используя соответствующие модули Amazon.
  • Непосредственно из HTML-формы.
http://www.ibm.com/developerworks/ru/library/l-amazon-perl-2/

CPAN в свою очередь делятся еще на 2 части:
SOAP и REST
Модули - к примеру, s3cmd
Получить файл можно простым wget

Хранить нужно:
1) Дампы баз
2) архивы проектов (www)
3) копии репозитариев
4) рабочие файлы

Подборочка ссылок на скрипты
http://jeremy.zawodny.com/blog/archives/007641.html

s3sync пока отложил, потому что он на руби. Если часть проектов на наших серверах, где можно доставить руби, то на некоторых внешних проектах это практически нереально. Так что предпочтительно перл/пхп. Хотелось еще питон, но он по тем же причинам отложен. Хотя s3cmd зависимостями тянет питон, так что..

По установке немного:
http://habrahabr.ru/blogs/linux/72754/
http://wiki.vpslink.com/Automate_Backups_with_Amazon_S3_and_s3sync

Есть вариант duplicity + deja-dup

Получается как-то сумбурно немного, но я иначе вообще не выложу ничего...

вторник, 9 ноября 2010 г.

Возвращаем хранилище mysql на его логичное место

в дебияне с какого-то перепугу базы лежат в /var/lib, исправим
Остановим мускуль.
# mv /var/lib/mysql /var/db
#vi /etc/my.cnf
и в разделе [mysqld] вписываем:

datadir=/var/db/mysql
socket=/var/db/mysql/mysql.sock

запускаем, работаем.

Ищу постилку на этот сайт..

Чтобы копипаста не обрастала морем бесполезных и мешающих тэгов и не надо было потом в режиме "изменить хтмл" вычищать весь этот хлам.

mod_rpaf

Небольшое уточнение по параметрам

Module configuration is pretty simple, there are only two directives to set; RPAFenable and RPAFproxy_ips. With the later you can define which IP's are your frontend proxies that sends the correct X-Forwarded-For headers. If you do not use the RPAFproxy_ips directive then the module will not change the remote address of the incoming connection at any time. RPAFsethostname will, when enabled, take the incoming X-Host header and update the virtualhost settings accordingly.


New in version 0.6 is the ability to change which header Apache looks at. With the configuration directive RPAFheader you can now change the default X-Forwarded-For to X-Real-IP if you so choose. There are also bugfixes in this version that makes mod_rpaf work correctly with Keep-Alive requests.

В общем, если просто установлен RPAFproxy_ips и RPAFsethostname, то читается X-Host. Можно доустановить RPAFheader X-Forwarded-For, чтобы читалась эта переменная.



# if DSO load module first:
LoadModule rpaf_module libexec/apache2/mod_rpaf-2.0.so

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 10.0.0.1
RPAFheader X-Forwarded-For


http://stderr.net/apache/rpaf/
 
UPD: обнаружил на одном хосте багу. Когда была установлена RPAFsethostname On, POST на форумах и картинки отдавались криво - вместо имени хоста ставился айпи клиента.

debian

Попросили настроить ISPManager в fastcgi режиме на дебияне.
Отвратительная система... Половины штатных утилит нет, пакеты старые... Нету банального dig!

Итак.
Сначала, ставим бинд в качестве кэша
# aptitude install bind9 bind9utils
(можно и не делать, а можно поставить dnsmasq)

Обновляем nginx, тут есть репы
http://wiki.nginx.org/Install

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx
(только для 6, в 5 ищем чужие сборки)


Проверяем, что стоит какой-либо fcgi модуль.
Варианта 2:
libapache2-mod-fcgid - an alternative module compat with mod_fastcgi
libapache2-mod-fastcgi - Apache 2 FastCGI module for long-running CGI scripts

Проверяем, что есть php-cgi, и делаем симлинк /usr/local/bin/php-cgi в /usr/bin
после этого разрешаем cgi в настройках и переключаем в режим fastcgi.

среда, 3 ноября 2010 г.

ставим s3cmd

# cd /etc/yum.repos.d/
# wget http://s3tools.org/repo/CentOS_5/s3tools.repo
# yum -y install s3cmd
 Можно использовать.

Небольшое дополнение. s3cmd тянет в зависимостях питон.

usvn

2 пакет - usvn
Опять CentOS. Хочу сделать отдельным хостом.
Качаем, распаковываем
# wget http://www.tigris.org/files/documents/5823/46728/usvn-1.0.1.zip
# unzip  usvn-1.0.1.zip

получаем папку usvn-1.0, я ее переместил в /var/www
Но просто после распаковки инсталл будет ругаться - надо выставить права
chown -R apache:apache {config,public}


Создаем конфиг.
#vi /etc/httpd/conf.d/usvn.conf
<VirtualHost *:80>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /var/www/usvn-1.0/public
        ServerName usvn
        ErrorLog logs/usvn-error_log
        CustomLog logs/usvn-access_log common
        <Directory /var/www/usvn-1.0>
                Options Indexes FollowSymLinks ExecCGI
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

        # Configure access to usvn
        Alias /usvn /var/www/usvn/public
        <Directory "/var/www/usvn/public">
                Options +SymLinksIfOwnerMatch
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

В принципе, алиас в моем случае не нужен, поэтому я просто через http://usvn обращался. Но просто в таком виде получил ошибку, что-то не могло найти.
Так что путь при инсталляции будет такой: http://usvn/install.php

Убеждаемся, что в инсталлере появилось
Good rights on "public"
Good rights on "config"

Выбираем язык, таймзону, лицензию
в Репозитарий Subversion: указываем, где мы храним репозитарии. У меня это был /var/svn
Обратите внимание: если будет какая-то ошибка (например, с правами) - пути сбросит на дефолтные!

Второй вариант:
# mkdir files
# chown apache:apache files
Дальше ему нужна БД. Зачем.. Ну раз хочет - дадим. И получаем
The PDO extension is required for this adapter but the extension is not loaded

Надо ставить.
# yum install php-pdo
И... The mysql driver is not currently installed
Ок, и его доставим
# yum install php-mysql

Создаем админа.. Решим с обновлениями..
Потом вставим в наш конфиг
<Location /svn/>
    ErrorDocument 404 default
    DAV svn
    Require valid-user
    SVNParentPath /var/svn/svn
    SVNListParentPath off
    AuthType Basic
    AuthName "USVN"
    AuthUserFile /var/www/usvn-1.0/files/htpasswd
    AuthzSVNAccessFile /var/www/usvn-1.0/files/authz
</Location>

вторник, 2 ноября 2010 г.

WebSVN

Итак, ставлю разные пакеты для управления SVN и пробую... Сейчас пробовал WebSVN. Ставил так: yum install websvn enscript
Потом в конфиге поправил строку
   allow from 127.0.0.1 192.168.2.
И все.. Система проста и понятна, но увы, это только показ. А мне нужна рулилка.

Если что, конфиг в /etc/websvn, поправить там скорее всего только 1 строчку надо:
$config->parentPath("/svn/repos");
это путь к репам. Все.

Чуть больше о настройке - http://debianworld.ru/articles/ustanovka-i-nastrojka-subversion-apache-websvn-v-debian-ubuntu-2/

понедельник, 1 ноября 2010 г.

И снова пых...

Обновлял php на другом сервере, словил ошибку..

In file included from /usr/local/include/apache2/httpd.h:44,
                 from /usr/home/max/dist/php-
5.2.13/sapi/apache2handler/php_apache.h:24,
                 from /usr/home/max/dist/php-
5.2.13/sapi/apache2handler/mod_php5.c:26:
/usr/local/include/apache2/ap_regex.h:90: error: conflicting types for 
'regoff_t'
/usr/home/max/dist/php-5.2.13/regex/regex.h:17: error: previous declaration of 
'regoff_t' was here
*** Error code 1
Оказалось, зафиксированный баг
http://bugs.php.net/bug.php?id=52187
Вылечилось правкой /usr/local/include/apache2/ap_regex.h, 90 строка, комментированием или удалением этого объявления.

Управление репами SVN

Заинтересовался интерфейсами для управления репозитариями SVN через web, нашел для себя 3:
USVN
SVNManager
Submin

Не нашел всех трёх ни во фре, ни в центоси. Благо, 2 из них на пхп, ставятся простым копированием. 3 на питоне, тут сложнее.

http://www.ossg.ru/wiki/Admin/Web-интерфейсы%20для%20Subversion
http://ru.wikipedia.org/wiki/SVN

Сделал поиск в центоси...

viewvc.noarch : Browser interface for CVS and SVN version control repositories
websvn.noarch : Online subversion repository browser
Надо бы и их тоже глянуть.

ZFS в scrub тормозит...

/> time zpool scrub
missing pool name argument
usage:
        scrub [-s] <pool> ...
0.000u 0.001s 0:03.66 0.0%      0+0k 0+0io 0pf+0w

/> zpool status
  pool: tank
 state: ONLINE
 scrub: scrub in progress for 2h26m, 3.56% done, 66h7m to go
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0

errors: No known data errors

Вот такая шняга... 4 секунды делается просто вывод помощи.
w отрабатывал секунд 10. При этом отрабатывает оно свои 12 часов и пишет, что ошибок не найдено.