Для удобства у меня каждый домен в отдельном конфиге, грузятся через include sites-enabled/*.conf
Такая схема работала в центоси и фре.. а в дебиане баг: если файл начинается с _, он игнорируется (так сделаны поддомены, чтобы они грузились раньше основных доменов).
Оказывается, это очередная "фича" дебиляна.
"Это патч Debian: debian/patches/008_make_include_safe.
Первый символ -- обязательно должен быть alphanumeric, остальные -- alphanumeric + подчёркивание, дефис или точка.
Варианты как лечить:
- переименовать файлы(более нормальная и распространённая практика, чтобы задавать приоритеты -- называть файлы 00-example.com и т.п.);
- пересобрать apache самостоятельно без этого патча, ну и пересобирать по мере выхода новых версий;
- почти на bugs.debian.org и объяснить, что файлы, начинающиеся на _ -- это хорошо.
Варианты расставлены в порядке их правильности/реальности осуществления(от более реальных к менее реальным)."
(линк)
Причины исключения точки мне в принципе понятны - через простой ls их не видно и можно сделать чего-нибудь не очень легко обнаружимое. Но причины запрета _ мне кажутся бредом.
nix
пятница, 1 июня 2012 г.
среда, 30 мая 2012 г.
apache: LogLevel warn
По умолчанию апач обычно пишет в логи только уровень error и выше. Меняем на warn и выше: после ErrorLog пишем
LogLevel warn
и перезапускаем апач.
LogLevel warn
и перезапускаем апач.
понедельник, 28 мая 2012 г.
FreeBSD: ставим пакеты
Некоторый софт проще и быстрее поставить из пакетов, а не портов, особенно это касается такого софта как m4, ruby (для меня это просто побочный пакет, не более) итд.
У portinstall для этого есть хороший ключик -PP (packages-only)
Я не знаю, как сделать что-то вроде
cd /usr/ports/sysutils/smartmontools && make package, поэтому способ чуть сложнее, для этого можно посмотреть нужные пакеты в
http://ftp6.ru.freebsd.org/pub/FreeBSD/ports/packages/All/
(много файлов!)
cd /usr/ports/ports-mgmt/portupgrade
make package-depends-list
cd /usr/ports/packages
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/ports/packages/All/ruby-1.8.7.358%2c1.tbz"
pkg_add *
(запятую заменяем на %2c или просто берем аргументы для fetch в кавычки)
По идее, есть опция USE_PACKAGE_DEPENDS, но чего-то она не работает.
У portinstall для этого есть хороший ключик -PP (packages-only)
Я не знаю, как сделать что-то вроде
cd /usr/ports/sysutils/smartmontools && make package, поэтому способ чуть сложнее, для этого можно посмотреть нужные пакеты в
http://ftp6.ru.freebsd.org/pub/FreeBSD/ports/packages/All/
(много файлов!)
cd /usr/ports/ports-mgmt/portupgrade
make package-depends-list
cd /usr/ports/packages
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/ports/packages/All/ruby-1.8.7.358%2c1.tbz"
pkg_add *
(запятую заменяем на %2c или просто берем аргументы для fetch в кавычки)
По идее, есть опция USE_PACKAGE_DEPENDS, но чего-то она не работает.
Установка FreeBSD 9 c ZFS
Ставим freebsd с корнем на zfs
Что 8, что 9 инсталлер штатно не умеет zfs, поэтому надо на обоих грузиться в консоль. Отличия в том, что в 8 это был выкидыш fixit, который был крайне, дико убог, а в 9 появился нормальный shell, который и листать историю умеет, и ls есть, и вообще поведение уже человеческое.
Под 8 версию уже был мануал, теперь сделаем под 9.
Итак, сначала надо удалить все старые разделы. Для 9 сата диск будет ada0
У меня была пачка разделов вида ada0s1{a-g}
gpart delete -i 1 ada0s1
gpart delete -i 2 ada0s1
...
gpart delete -i 1 ada0
gpart destroy ada0
Очищено.
Теперь надо создать разметку (gpt)
gpart create -s GPT ada0
Создадим boot-раздел со смещением в 1Мб (выравнивание на 1Мб полезно, особенно когда диски с 4к секторами), размером 128кб
gpart add -b 1M -s 128k -t freebsd-boot ada0
Теперь файл подкачки. Есть вариант размещения в zfs-пуле, но при падении мы не сможем записать дамп памяти. С другой стороны, нам не придётся тогда зеркалировать своп на случай отвала одного из дисков, поскольку это будет обеспечивать сам zfs. В любом случае, проще сейчас выделить несколько Гб под своп, и при необходимости подключить его, чем возиться потом со смещением рабочего пула и выделением места.
gpart add -s 4G -t freebsd-swap ada0
Потом сам пул.
gpart add -t freebsd-zfs ada0
Осталось поставить загрузчик (см заметку 1)
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Первая часть закончена. Смотрим gpart show ada0, всё ли в порядке, и переходим к разметке пула.
Если ставим систему на 1 диск, а потом хотим сделать зеркало на 2 - это можно сделать (см первую заметку), но для raid-z без извратов так не сделать, поэтому ставить надо будет сразу на полный набор дисков.
Загрузим zfs
kldload zfs
Создадим сам пул.
zpool create -O atime=off -m /mnt/zfs pool ada0p3
Тут можно получить
cannot mount '/mnt/zfs': failed to create mountpoint
Это потому, что мы загрузились с диска, который примонтирован в RO, так что надо или перемонтировать на запись, что глупо, или использовать место, доступное для записи, например tmp. У меня этот раздел всего 20Мб, но много и не надо - пустой каталог много не занимает, mountpoint и подавно. Но и повторно запустить команду уже не даст - пул создан, просто не примонтирован. Впрочем, примонтировать пул целиком мы уже не сможем - параметр altroot можно задать только при создании. Если сильно надо - надо удалить старый пул (zpool destroy -f pool) и пересоздать. Но сильно это не нужно - просто вместо полных путей надо будет использовать через имя пула (pool/tmp) и потом руками примонтировать созданные каталоги на свои места.
Делаем пул загрузочным
zpool set bootfs=pool pool
!!! Надо переместить хранилище zpool.cache, иначе после перезагрузки у нас пул будет не найден!!!
zpool export pool
zpool import -o cachefile=/tmp/zpool.cache pool
Как мы уже столкнулись, вся корневая ФС у нас в RO, поэтому системе некуда сохранять информацию о нашем пуле и мы не сможем её потом скопировать на наш диск.
Дальше создаем структуру пула, см заметку 1 и линки ниже.
(...)
А теперь сложный момент. Если мы грузились с полного образа -- у нас на диске есть все нужные файлы (в 8 файлы были в /dist, в 9 они переехали в /usr/freebsd-dist), но что если это была версия bootonly? тут будет ещё шаг - надо поднять сеть и выкачать нужные файлы или воспользоваться sysinstall.
Сделаем через выкачать нужное (gentoo-way)
cd /tmp/zfs/tmp
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/base.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/kernel.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/src.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/doc.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/lib32.txz" (только для amd64)
Формат файлов xz, поэтому для tar ключи будут такие:
tar --unlink -xpJf file -C path
x - extract
p - restore Permissions
J - xz
f - файл для распаковки
--unlink
-C - change to (dir) - куда распаковать
Если у нас полный дистр был - просто делаем
cd /usr/freebsd-dist
Готовимся к установке.
Распаковываем вручную или скриптом
export DESTDIR=/tmp/zfs
for file in base.txz doc.txz kernel.txz src.txz lib32.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done
Если вводить скрипт руками - советую использовать таб, в 9 он работает как надо, и является проверкой, все ли файлы у нас на месте. У меня случайно был пропущен kernel, что было легко обнаружено.
Почему тут нет портов -- поскольку я обновляю через portsnap, первый раз надо сделать extract, так что в данном случае это только зря 1 пакет выкачивать.
Скопируем описание нашего пула в новое место.
cp /tmp/zpool.cache /tmp/zfs/boot/zfs/
Настроим систему.
chroot /tmp/zfs /bin/csh
cat << EOF > /etc/rc.conf
zfs_enable="YES"
hostname="host"
ifconfig_re0="DHCP"
sshd_enable="YES"
EOF
cat << EOF >> /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:pool"
EOF
Если памяти мало, туда же вписываем параметры для zfs
В /etc/fstab:
/dev/ada0p2 none swap sw 0 0
Или можно через метку, если определяли.
Настроим время
tzsetup
!!! Если мы планируем потом попасть в эту систему по ssh - необходимо сделать 2 вещи:
pw useradd remoteuser -m -G wheel
passwd
Добавить пользователя и установить руту пароль. По умолчанию под рутом по сети вход запрещён, su к руту без пароля - плохой знак (хотя и пропустит). Если будем работать только локально, этот шаг пока можно пропустить.
Последний этап -- подготовка к перезагрузке.
exit
zfs unmount -af
cd /
zfs set mountpoint=legacy pool
zfs set mountpoint=/usr pool/usr
zfs set quota=4G pool/tmp
zfs set mountpoint=/tmp pool/tmp
zfs set mountpoint=/var pool/var
reboot
После перезагрузки у нас должна получиться рабочая система.
Если вдруг потребовалось загрузиться в single mode, корень будет в RO, перемонтировать через mount и zfs mount не поможет - это атрибут раздела. Изменить:
zfs set readonly=off pool
Линки
http://wiki.freebsd.org/RootOnZFS
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot
http://wiki.opennet.ru/ZFS_%D0%B8_FreeBSD
http://www.lissyara.su/articles/freebsd/file_system/root_zfs_gpt/ Эта заметка достаточно подробная, хоть и сайт бизграмматных школьнегов.
https://sites.google.com/site/luzanov/freebsd/zfs/root_zfs - тут есть скрипт bsdinstall, но для начала надо хотя бы пару раз провести все операции вручную, чтобы понять что там вообще происходит.
Что 8, что 9 инсталлер штатно не умеет zfs, поэтому надо на обоих грузиться в консоль. Отличия в том, что в 8 это был выкидыш fixit, который был крайне, дико убог, а в 9 появился нормальный shell, который и листать историю умеет, и ls есть, и вообще поведение уже человеческое.
Под 8 версию уже был мануал, теперь сделаем под 9.
Итак, сначала надо удалить все старые разделы. Для 9 сата диск будет ada0
У меня была пачка разделов вида ada0s1{a-g}
gpart delete -i 1 ada0s1
gpart delete -i 2 ada0s1
...
gpart delete -i 1 ada0
gpart destroy ada0
Очищено.
Теперь надо создать разметку (gpt)
gpart create -s GPT ada0
Создадим boot-раздел со смещением в 1Мб (выравнивание на 1Мб полезно, особенно когда диски с 4к секторами), размером 128кб
gpart add -b 1M -s 128k -t freebsd-boot ada0
Теперь файл подкачки. Есть вариант размещения в zfs-пуле, но при падении мы не сможем записать дамп памяти. С другой стороны, нам не придётся тогда зеркалировать своп на случай отвала одного из дисков, поскольку это будет обеспечивать сам zfs. В любом случае, проще сейчас выделить несколько Гб под своп, и при необходимости подключить его, чем возиться потом со смещением рабочего пула и выделением места.
gpart add -s 4G -t freebsd-swap ada0
Потом сам пул.
gpart add -t freebsd-zfs ada0
Осталось поставить загрузчик (см заметку 1)
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Первая часть закончена. Смотрим gpart show ada0, всё ли в порядке, и переходим к разметке пула.
Если ставим систему на 1 диск, а потом хотим сделать зеркало на 2 - это можно сделать (см первую заметку), но для raid-z без извратов так не сделать, поэтому ставить надо будет сразу на полный набор дисков.
Загрузим zfs
kldload zfs
Создадим сам пул.
zpool create -O atime=off -m /mnt/zfs pool ada0p3
Тут можно получить
cannot mount '/mnt/zfs': failed to create mountpoint
Это потому, что мы загрузились с диска, который примонтирован в RO, так что надо или перемонтировать на запись, что глупо, или использовать место, доступное для записи, например tmp. У меня этот раздел всего 20Мб, но много и не надо - пустой каталог много не занимает, mountpoint и подавно. Но и повторно запустить команду уже не даст - пул создан, просто не примонтирован. Впрочем, примонтировать пул целиком мы уже не сможем - параметр altroot можно задать только при создании. Если сильно надо - надо удалить старый пул (zpool destroy -f pool) и пересоздать. Но сильно это не нужно - просто вместо полных путей надо будет использовать через имя пула (pool/tmp) и потом руками примонтировать созданные каталоги на свои места.
Делаем пул загрузочным
zpool set bootfs=pool pool
!!! Надо переместить хранилище zpool.cache, иначе после перезагрузки у нас пул будет не найден!!!
zpool export pool
zpool import -o cachefile=/tmp/zpool.cache pool
Как мы уже столкнулись, вся корневая ФС у нас в RO, поэтому системе некуда сохранять информацию о нашем пуле и мы не сможем её потом скопировать на наш диск.
Дальше создаем структуру пула, см заметку 1 и линки ниже.
(...)
А теперь сложный момент. Если мы грузились с полного образа -- у нас на диске есть все нужные файлы (в 8 файлы были в /dist, в 9 они переехали в /usr/freebsd-dist), но что если это была версия bootonly? тут будет ещё шаг - надо поднять сеть и выкачать нужные файлы или воспользоваться sysinstall.
Сделаем через выкачать нужное (gentoo-way)
cd /tmp/zfs/tmp
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/base.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/kernel.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/src.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/doc.txz"
fetch "http://ftp6.ru.freebsd.org/pub/FreeBSD/releases/amd64/9.0-RELEASE/lib32.txz" (только для amd64)
Формат файлов xz, поэтому для tar ключи будут такие:
tar --unlink -xpJf file -C path
x - extract
p - restore Permissions
J - xz
f - файл для распаковки
--unlink
-C - change to (dir) - куда распаковать
Если у нас полный дистр был - просто делаем
cd /usr/freebsd-dist
Готовимся к установке.
Распаковываем вручную или скриптом
export DESTDIR=/tmp/zfs
for file in base.txz doc.txz kernel.txz src.txz lib32.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}) ; done
Если вводить скрипт руками - советую использовать таб, в 9 он работает как надо, и является проверкой, все ли файлы у нас на месте. У меня случайно был пропущен kernel, что было легко обнаружено.
Почему тут нет портов -- поскольку я обновляю через portsnap, первый раз надо сделать extract, так что в данном случае это только зря 1 пакет выкачивать.
Скопируем описание нашего пула в новое место.
cp /tmp/zpool.cache /tmp/zfs/boot/zfs/
Настроим систему.
chroot /tmp/zfs /bin/csh
cat << EOF > /etc/rc.conf
zfs_enable="YES"
hostname="host"
ifconfig_re0="DHCP"
sshd_enable="YES"
EOF
cat << EOF >> /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:pool"
EOF
Если памяти мало, туда же вписываем параметры для zfs
В /etc/fstab:
/dev/ada0p2 none swap sw 0 0
Или можно через метку, если определяли.
Настроим время
tzsetup
!!! Если мы планируем потом попасть в эту систему по ssh - необходимо сделать 2 вещи:
pw useradd remoteuser -m -G wheel
passwd
Добавить пользователя и установить руту пароль. По умолчанию под рутом по сети вход запрещён, su к руту без пароля - плохой знак (хотя и пропустит). Если будем работать только локально, этот шаг пока можно пропустить.
Последний этап -- подготовка к перезагрузке.
exit
zfs unmount -af
cd /
zfs set mountpoint=legacy pool
zfs set mountpoint=/usr pool/usr
zfs set quota=4G pool/tmp
zfs set mountpoint=/tmp pool/tmp
zfs set mountpoint=/var pool/var
reboot
После перезагрузки у нас должна получиться рабочая система.
Если вдруг потребовалось загрузиться в single mode, корень будет в RO, перемонтировать через mount и zfs mount не поможет - это атрибут раздела. Изменить:
zfs set readonly=off pool
Линки
http://wiki.freebsd.org/RootOnZFS
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot/Mirror
http://wiki.freebsd.org/RootOnZFS/GPTZFSBoot
http://wiki.opennet.ru/ZFS_%D0%B8_FreeBSD
http://www.lissyara.su/articles/freebsd/file_system/root_zfs_gpt/ Эта заметка достаточно подробная, хоть и сайт бизграмматных школьнегов.
https://sites.google.com/site/luzanov/freebsd/zfs/root_zfs - тут есть скрипт bsdinstall, но для начала надо хотя бы пару раз провести все операции вручную, чтобы понять что там вообще происходит.
воскресенье, 27 мая 2012 г.
svn: Can't convert string from 'UTF-8' to native encoding
svn: Can't convert string from 'UTF-8' to native encoding:
...
Характерно для freebsd, поскольку он не умеет utf-8. Решение:
setenv LC_CTYPE "ru_RU.CP1251"
setenv LANG "ru_RU.CP1251"
(как минимум работает в csh, так что можно дописать в .cshrc)
линки
http://chatlogs.jabber.ru/freebsd@conference.jabber.ru/2008/11/22.html
http://stackoverflow.com/questions/2116718/svn-error-cant-convert-string-from-native-encoding-to-utf-8
...
Характерно для freebsd, поскольку он не умеет utf-8. Решение:
setenv LC_CTYPE "ru_RU.CP1251"
setenv LANG "ru_RU.CP1251"
(как минимум работает в csh, так что можно дописать в .cshrc)
линки
http://chatlogs.jabber.ru/freebsd@conference.jabber.ru/2008/11/22.html
http://stackoverflow.com/questions/2116718/svn-error-cant-convert-string-from-native-encoding-to-utf-8
debian: percona, свежий nginx и subversion 1.7
Поскольку иногда требуется перкона + в штатной поставке ну вообще древний nginx аж 1.7 ветки, надо подключать доп репы:
nginx
http://wiki.nginx.org/Install
deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx
percona
Перкона молодцы, у них есть репы для основных линукс-дистрибутивов.
http://www.percona.com/docs/wiki/repositories:apt
deb http://repo.percona.com/apt squeeze main
deb-src http://repo.percona.com/apt squeeze main
subversion
Штатный 1.6, и обновлять его не собираются, но мы давно перешли на 1.7, в частности из-за только 1 каталога .svn в корне проекта вместо тучи по всем каталогам.
deb http://opensource.wandisco.com/debian/ squeeze svn17
Эти строки в /etc/apt/sources.list
И ключи
nginx
gpg --keyserver hkp://keys.gnupg.net --recv-keys ABF5BD827BD9BF62
gpg -a --export 7BD9BF62 | apt-key add -
percona
gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | apt-key add -
subversion
gpg --keyserver hkp://keys.gnupg.net --recv-keys E9F0E9223BBF077A
gpg -a --export 3BBF077A | apt-key add -
После этого делаем
apt-get update
Что странно: на оф странице ничего про эти ключи не было сказано, но по аналогии с перконой всё оказалось очень просто: после apt-get update получили ошибку
W: GPG error: http://nginx.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62
Номер ключа у нас есть, подставили в 1 команду вместо ключа перконы, получили
gpg: requesting key 7BD9BF62 from hkp server keys.gnupg.net
gpg: key 7BD9BF62: public key "nginx signing key <signing-key@nginx.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Вот и номер ключа есть, его во 2 строку.
Теперь можно поставить percona-server-server и nginx
Для перконы советую также поставить percona toolkit (пакет percona-toolkit), замена maatkit-у.
C свн - проще снести старую версию и поставить новую, в конце напишет
Setting up subversion (1.7.5-1+WANdisco) ...
Setting up libsvn1 (1.7.5-1+WANdisco) ...
nginx
http://wiki.nginx.org/Install
deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx
percona
Перкона молодцы, у них есть репы для основных линукс-дистрибутивов.
http://www.percona.com/docs/wiki/repositories:apt
deb http://repo.percona.com/apt squeeze main
deb-src http://repo.percona.com/apt squeeze main
subversion
Штатный 1.6, и обновлять его не собираются, но мы давно перешли на 1.7, в частности из-за только 1 каталога .svn в корне проекта вместо тучи по всем каталогам.
deb http://opensource.wandisco.com/debian/ squeeze svn17
Эти строки в /etc/apt/sources.list
И ключи
nginx
gpg --keyserver hkp://keys.gnupg.net --recv-keys ABF5BD827BD9BF62
gpg -a --export 7BD9BF62 | apt-key add -
percona
gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | apt-key add -
subversion
gpg --keyserver hkp://keys.gnupg.net --recv-keys E9F0E9223BBF077A
gpg -a --export 3BBF077A | apt-key add -
После этого делаем
apt-get update
Что странно: на оф странице ничего про эти ключи не было сказано, но по аналогии с перконой всё оказалось очень просто: после apt-get update получили ошибку
W: GPG error: http://nginx.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62
Номер ключа у нас есть, подставили в 1 команду вместо ключа перконы, получили
gpg: requesting key 7BD9BF62 from hkp server keys.gnupg.net
gpg: key 7BD9BF62: public key "nginx signing key <signing-key@nginx.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
Вот и номер ключа есть, его во 2 строку.
Теперь можно поставить percona-server-server и nginx
Для перконы советую также поставить percona toolkit (пакет percona-toolkit), замена maatkit-у.
C свн - проще снести старую версию и поставить новую, в конце напишет
Setting up subversion (1.7.5-1+WANdisco) ...
Setting up libsvn1 (1.7.5-1+WANdisco) ...
вторник, 22 мая 2012 г.
git: post-receive hook
При попытке реализовать хук в гите на post-receive, сначала постоянно будет лезть ошибка
error: git-shell died of signal 13
fatal: The remote end hung up unexpectedly
error: error in sideband demultiplexer
Дело в том, что данный хук сделан каким-то извращенцем, поэтому аргументы хуку передаются через stdin и единственно верный (официально) метод чтения (для sh):
while read oldrev newrev refname
do
...
done
На другие языки переписать по аналогии.
И попутно заметка: если был коммит в мастер, запустить ssh
error: git-shell died of signal 13
fatal: The remote end hung up unexpectedly
error: error in sideband demultiplexer
Дело в том, что данный хук сделан каким-то извращенцем, поэтому аргументы хуку передаются через stdin и единственно верный (официально) метод чтения (для sh):
while read oldrev newrev refname
do
...
done
На другие языки переписать по аналогии.
И попутно заметка: если был коммит в мастер, запустить ssh
#!/bin/sh
while read oldrev newrev refname
do
if expr "$refname" : '.*master$' >/dev/null; then
ssh user@server.local /var/www/site/up
fi
done
вторник, 15 мая 2012 г.
суббота, 12 мая 2012 г.
FreeBSD в DomU на xen
В HVM запустить не проблема: подключаем диск, сдром, указываем vnc-опции. (подробно - по ссылкам ниже есть)
!! Есть проблемы запуска на AMD, разные версии не запускаются по разному. В результате платформа была заменена на интел.
!!Хорошие новости: Microsoft обеспечит официальную поддержку платформы виртуализации Hyper-V во FreeBSD
Дело в том, что цитрикс, текущий владелец хена, также хороший партнер мелких. Так что кодовая база hyper-v и xen как минимум пересекается, а значит наработки для hyper-v появятся в xen + код, который будет отдан в freebsd, также будет поддерживать и xen. Так что скорее всего через годик фря будет работать и в hvm на всех платформах, и в pv, и драйвера отладят нормально.
PV-режима под amd64 нету. Есть ядро с pv-xen драйверами, так что это будет смешанный режим - запускаться как hvm, но сеть например в pv. Для продакшена не очень хорошая идея, но для тестов и разработки сгодится.
Под i386 есть конфиг XEN - собираем ядро, ставим его куда-либо, откуда можно будет вытащить (make KERNCONF=XEN DESTDIR=/root/myboot kernel), подсовываем в конфиг в dom0. Можно через pygrub (где-то было, что заменяется на pv-grub), но там есть нюансы, напрямую оно не запустится.
Но чтобы собрать ядро, надо уже иметь систему в hvm, что у меня было сделано. С нуля - есть в интернете готовые ядра, проблема найти посвежее. По линкам ниже тоже будет.
Ограничения: максимум 850мб памяти, в PV проблемы с работой VNC - для его запуска скорее всего придется достать бубен...
Из доработок:
1) файл в dom0:
в стандартный конфиг под pv вписываем сеть, диск, память менее 850мб, название машины. Ядро указываем через pygrub или напрямую (kernel = "/var/xen/kernel.8.2"). Для запуска этого достаточно, но словим mountpoint> и надо будет указать /, поэтому сразу можно вписать строку
extra = "vfs.root.mountfrom=ufs:ad0s1a,machdep.idle_mwait=0,boot_verbose=1"
Теперь можно запустить как xm create -c freebsd.pv - и мы увидим весь процесс загрузки.
2) В самой системе. Как минимум, надо в rc.conf скопировать всё про сеть, заменив название нашей карты на xn0 (xen network), так:
ifconfig_re0="inet 192.168.2.5/24"
ifconfig_xn0="inet 192.168.2.5/24"
2 разных сетевых с 1 айпи? Да, можно, поскольку у нас не может одновременно встретиться обе карты и образ получается более "универсальным"
Также будет ругань про консоли
...
May 12 20:21:38 fbsd8 getty[1035]: open /dev/ttyv4: No such file or directory
...
Причина в том, что этих консолей у нас нет. Можно оставить для совместимости, можно закомментировать, но тогда в hvm у нас не будет переключения консолей (а было ли оно вообще? Это же не реальный сервер...)
Сначала такое преобразование было проделано мной методом тыка, но потом найдена хорошая дока Xen FreeBSD 8.2 DomU (PV) -- Step by Step Howto, оттуда же взяты Xen DomU configuration examples - FreeBSD and CentOS и Xen 3.4.3 on CentOS 5.5 -- Tutorial
Собственно, если freebsd интересен - эти доки небольшие и к ознакомлению обязательны, особенно первая дока.
Официальный статус: http://wiki.freebsd.org/FreeBSD/Xen
FreeBSD on EC2
Есть pypxeboot, но это для совсем уж гиков.
!! Есть проблемы запуска на AMD, разные версии не запускаются по разному. В результате платформа была заменена на интел.
!!Хорошие новости: Microsoft обеспечит официальную поддержку платформы виртуализации Hyper-V во FreeBSD
Дело в том, что цитрикс, текущий владелец хена, также хороший партнер мелких. Так что кодовая база hyper-v и xen как минимум пересекается, а значит наработки для hyper-v появятся в xen + код, который будет отдан в freebsd, также будет поддерживать и xen. Так что скорее всего через годик фря будет работать и в hvm на всех платформах, и в pv, и драйвера отладят нормально.
PV-режима под amd64 нету. Есть ядро с pv-xen драйверами, так что это будет смешанный режим - запускаться как hvm, но сеть например в pv. Для продакшена не очень хорошая идея, но для тестов и разработки сгодится.
Под i386 есть конфиг XEN - собираем ядро, ставим его куда-либо, откуда можно будет вытащить (make KERNCONF=XEN DESTDIR=/root/myboot kernel), подсовываем в конфиг в dom0. Можно через pygrub (где-то было, что заменяется на pv-grub), но там есть нюансы, напрямую оно не запустится.
Но чтобы собрать ядро, надо уже иметь систему в hvm, что у меня было сделано. С нуля - есть в интернете готовые ядра, проблема найти посвежее. По линкам ниже тоже будет.
Ограничения: максимум 850мб памяти, в PV проблемы с работой VNC - для его запуска скорее всего придется достать бубен...
Из доработок:
1) файл в dom0:
в стандартный конфиг под pv вписываем сеть, диск, память менее 850мб, название машины. Ядро указываем через pygrub или напрямую (kernel = "/var/xen/kernel.8.2"). Для запуска этого достаточно, но словим mountpoint> и надо будет указать /, поэтому сразу можно вписать строку
extra = "vfs.root.mountfrom=ufs:ad0s1a,machdep.idle_mwait=0,boot_verbose=1"
Теперь можно запустить как xm create -c freebsd.pv - и мы увидим весь процесс загрузки.
2) В самой системе. Как минимум, надо в rc.conf скопировать всё про сеть, заменив название нашей карты на xn0 (xen network), так:
ifconfig_re0="inet 192.168.2.5/24"
ifconfig_xn0="inet 192.168.2.5/24"
2 разных сетевых с 1 айпи? Да, можно, поскольку у нас не может одновременно встретиться обе карты и образ получается более "универсальным"
Также будет ругань про консоли
...
May 12 20:21:38 fbsd8 getty[1035]: open /dev/ttyv4: No such file or directory
...
Причина в том, что этих консолей у нас нет. Можно оставить для совместимости, можно закомментировать, но тогда в hvm у нас не будет переключения консолей (а было ли оно вообще? Это же не реальный сервер...)
Сначала такое преобразование было проделано мной методом тыка, но потом найдена хорошая дока Xen FreeBSD 8.2 DomU (PV) -- Step by Step Howto, оттуда же взяты Xen DomU configuration examples - FreeBSD and CentOS и Xen 3.4.3 on CentOS 5.5 -- Tutorial
Собственно, если freebsd интересен - эти доки небольшие и к ознакомлению обязательны, особенно первая дока.
Официальный статус: http://wiki.freebsd.org/FreeBSD/Xen
FreeBSD on EC2
Есть pypxeboot, но это для совсем уж гиков.
четверг, 10 мая 2012 г.
SuexecUserGroup и AssignUserID
Часто бывает нужно, чтобы скрипты на сайте исполнялись не от системного юзера (www/www-data/apache), а от пользователя, которому принадлежит сайт. В зависимости от режима работы apache разные методы для указания пользователя.
Основные методы это SuexecUserGroup и AssignUserID, и в своих конфигах можно указывать оба атрибута, плюс вариант под peruser:
Существенные отличия тут в том, что только itk обеспечивает полную работу от указанного юзера, тогда как тот же SuexecUserGroup обеспечивает смену пользователя только для динамики. Статика отдаётся при этом от системного юзера.
Если при смене типа воркера используется ispmanager, надо сделать еще ряд манипуляций.
# perl -p -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf
В ispmgr.conf надо добавить
Option ApacheMPM
и возможно
ApacheProcName httpd.itk
Линки
http://forum.ispsystem.com/ru/showthread.php?t=17740
http://wiki.firstvds.ru/index.php/Apache_MPM-ITK_на_CentOS_с_ISPmanager
http://ru.ispdoc.com/index.php/Файл_конфигурации_ISPmanager_(ISPmanager)
Основные методы это SuexecUserGroup и AssignUserID, и в своих конфигах можно указывать оба атрибута, плюс вариант под peruser:
<IfModule peruser.c> ServerEnvironment user user Processor user user </IfModule> <IfModule mod_suexec.c> SuexecUserGroup user user </IfModule> <IfModule mod_suexec> SuexecUserGroup user user </IfModule> <IfModule itk.c> AssignUserID user user </IfModule>Также надо проверить, что есть сам блок про itk. Если нету -- надо вписать
<IfModule itk.c> StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 110 MaxClients 100 MaxRequestsPerChild 4000 </IfModule>Ну и подогнать под свои нужды.
Существенные отличия тут в том, что только itk обеспечивает полную работу от указанного юзера, тогда как тот же SuexecUserGroup обеспечивает смену пользователя только для динамики. Статика отдаётся при этом от системного юзера.
Если при смене типа воркера используется ispmanager, надо сделать еще ряд манипуляций.
# perl -p -i -e 's/SuexecUserGroup/AssignUserID/g' /etc/httpd/conf/httpd.conf
В ispmgr.conf надо добавить
Option ApacheMPM
и возможно
ApacheProcName httpd.itk
Линки
http://forum.ispsystem.com/ru/showthread.php?t=17740
http://wiki.firstvds.ru/index.php/Apache_MPM-ITK_на_CentOS_с_ISPmanager
http://ru.ispdoc.com/index.php/Файл_конфигурации_ISPmanager_(ISPmanager)
среда, 2 мая 2012 г.
Не работает HTTP авторизация в CMS Bitrix
Отсюда:
http://forum.hostdvor.com/viewtopic.php?f=35&p=119
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=1967 (офсайт)
Форматирование - оригинальное, так что все плевки о грязи в коде - в оригинал.
http://forum.hostdvor.com/viewtopic.php?f=35&p=119
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=1967 (офсайт)
Форматирование - оригинальное, так что все плевки о грязи в коде - в оригинал.
суббота, 28 апреля 2012 г.
nginx: 504 SSL_do_handshake() failed
При проксировании https даже без сертификатов (чисто прокси) при реальной работе ловили
SSL_do_handshake() failed (SSL: error:1408C095:SSL routines:SSL3_GET_FINISHED:digest check failed) while SSL handshaking to upstream,
и 502 Bad Gateway.
Как ни странно, гугл дал всего 4 страницы, из которой только 1 была с решением:
proxy_ssl_session_reuse off;
Помогло. Непонятно, что это было и почему... Проверять можно было через openssl s_client -connect www.test.com:81 -state -ssl3 -no_ssl2 -no_tls1 в несколько потоков.
SSL_do_handshake() failed (SSL: error:1408C095:SSL routines:SSL3_GET_FINISHED:digest check failed) while SSL handshaking to upstream,
и 502 Bad Gateway.
Как ни странно, гугл дал всего 4 страницы, из которой только 1 была с решением:
proxy_ssl_session_reuse off;
Помогло. Непонятно, что это было и почему... Проверять можно было через openssl s_client -connect www.test.com:81 -state -ssl3 -no_ssl2 -no_tls1 в несколько потоков.
suhosin и логи
Избавляемся от suhosin спама в логи (писалось под фрю, на линях пока не отлаживалось, может потом дополню)
пятница, 27 апреля 2012 г.
Intel SSD 710: обзор и тест SSD на технологии HET MLC
На замену x25-e серии интел выводит 710 серию, которая на MLC чипах. Что изменилось, обзор:
http://www.thg.ru/storage/obzor_intel_ssd_710/print.html
А вкратце - взяли 320гиг диск, откусили 40% под ремапы и резерв, обозвали это HET MLC, что не более чем простой маркетинг, и несколько изменили прошивку. Так что долговечность выше обычных MLC (за счет резервирования), но в остальном - та же деградация со временем, ресурс всё-равно ниже, на активных операциях есть провалы при работе чистилки мусора.
В общем, интел снова падает "в низы", видимо чтобы не создавать конкуренцию партнёрам, как с серверами например, которые "дёшево и сердито". В low-end нормально, выше или ничего нет, или отстой какой-то.
Хотя обещались выпустить 720 серию в формате платы в PCI-e, посмотрим что выйдет.
http://www.thg.ru/storage/obzor_intel_ssd_710/print.html
А вкратце - взяли 320гиг диск, откусили 40% под ремапы и резерв, обозвали это HET MLC, что не более чем простой маркетинг, и несколько изменили прошивку. Так что долговечность выше обычных MLC (за счет резервирования), но в остальном - та же деградация со временем, ресурс всё-равно ниже, на активных операциях есть провалы при работе чистилки мусора.
В общем, интел снова падает "в низы", видимо чтобы не создавать конкуренцию партнёрам, как с серверами например, которые "дёшево и сердито". В low-end нормально, выше или ничего нет, или отстой какой-то.
Хотя обещались выпустить 720 серию в формате платы в PCI-e, посмотрим что выйдет.
Подписаться на:
Сообщения (Atom)