заводим связку svn + trac + apache22 на FreeBSD
Весь софт ставится из портов.
ставим apache22 не забываем включить поддержку DBD
trac будет жить в папке www, а его базы в /var/trac
настраиваем apache
NameVirtualHost xx.xx.xx.xx:80
<VirtualHost projects.example.com:80>
DocumentRoot "/www/trac"
ServerName projects.example.com
ServerAlias projects
Options Indexes FollowSymlinks MultiViews
ErrorLog "/var/log/projects.example.com-error.log"
CustomLog "/var/log/projects.example.com-access.log" common
# Секция в которой мы говорим что все что /www/trac будет обрабатывать mod_python
<Location />
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/trac
PythonOption TracUriRoot /
</Location>
# У меня несколько проектов и занимаются или разные люди которые не должны иметь доступ к данным друг другу. Это простой способ разграничить доступ. Сам путь соответствует пути /var/trac/project1
<Location /project1 >
AuthType Basic
AuthName "Project1 svn AREA"
AuthUserFile /www/trac/access/.htpasswd_project1
Require valid-user
</Location>
#полезная информация.
<Location /mpinfo>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler mod_python.testhandler
</Location>
</VirtualHost>
Поскольку я обычно ставлю такие вещи отдельно в jail, web сервер кроме обслуживания trac больше ничем не занимается. Отсюда с точки зрения безопасности и просто удобства user и group указаны svn.
добавляем в /etc/rc.conf
apache22_enable="YES"
все на этом закончена настройка apache, запускать его не надо, тем более он все равно не запустить поскольку пользователь и группа svn, отсутствуют в системе.
--
Установка subversion
Все также ставится из портов
При установке обязательно посмотреть с какими параметрами будет устанавливаться svn
Обязательно поддержка DBD, APACHE2_APR, MOD_DAV_SVN если оный не был указан при установке apache)
после установки надо убедиться что пользователь и группа SVN присутствуют в системе
mkdir /svn
# создаем репозитарий проекта
svnadmin create /svn/project1
cd /svn/project/conf
# разбиваем на группы.
файл authz
[groups]
project1_users = user1,user2,user3
[project1:/]
@project1_users = rw
* =
# добавляем пароли
файл passwd
[users]
user1 = password1
user2 = password2
все, теперь chown -R svn:svn /svn; chmod 700 /svn
--
Ставим Trac, тоже из портов. Ставится он в /usr/local/lib/python2.6/site-packages/Trac-0.11.4-py2.6.egg/trac что для нас не очень удобно поэтому делаем symlink
ln -s /usr/local/lib/python2.6/site-packages/Trac-0.11.4-py2.6.egg/trac /www/trac
создаем htaccess /www/trac/access/.htpasswd_project1
инициализируем хранилище trac для проекта
trac-admin /var/trac/project1 initenv
отвечаем на заданные вопросы
наделяем правами админа пользователя user1
trac-admin /var/trac/project1 permission add user1 TRAC_ADMIN
выставляем права.
chown -R svn:svn /var/trac ; chmod 700 /var/trac
меняем лого
в файле /var/trac/project1/conf/trac.ini
находим секцию [header_logo]
src = /project1/chrome/common/my_logo.gif
сам файл с логотипом необходимо положить в /www/trac/htdocs/
типа все.
четверг, 30 июля 2009 г.
воскресенье, 26 июля 2009 г.
ssh remote fetch file
стащить и заархивировать файл на удаленном сервере.
ssh -l user remoteserver.local "tar -cjf - /tmp/file.xml" | cat - > file.xml.tar.bz2
ssh -l user remoteserver.local "tar -cjf - /tmp/file.xml" | cat - > file.xml.tar.bz2
пятница, 24 июля 2009 г.
lighttpd fastcgi catalyst
fastcgi.server = (
"" => (
"germion" => (
"socket" => "/tmp/germion.socket",
"check-local" => "disable",
"bin-path" => "/germion/script/germion_fastcgi.pl",
"min-procs" => 2,
"max-procs" => 5,
"idle-timeout" => 20,
)
)
)
"" => (
"germion" => (
"socket" => "/tmp/germion.socket",
"check-local" => "disable",
"bin-path" => "/germion/script/germion_fastcgi.pl",
"min-procs" => 2,
"max-procs" => 5,
"idle-timeout" => 20,
)
)
)
среда, 15 июля 2009 г.
запуск zabbix_server в jail
в логе шла активная ругать
zabbix_server [1424]: Can not create Semaphore [Function not implemented]
zabbix_server [1424]: Unable to create mutex for log file
решение на хост системе поправить sysctl
sysctl -w security.jail.sysvipc_allowed=1
возможно ещё необходимо
sysctl -w security.jail.allow_raw_sockets=1
но оно у меня по другим причинам включено
zabbix_server [1424]: Can not create Semaphore [Function not implemented]
zabbix_server [1424]: Unable to create mutex for log file
решение на хост системе поправить sysctl
sysctl -w security.jail.sysvipc_allowed=1
возможно ещё необходимо
sysctl -w security.jail.allow_raw_sockets=1
но оно у меня по другим причинам включено
xen grub setup
запись для xen3 в /boot/grub/menu.lst
title Xen [/boot/xen.gz]
root (hd0,2)
kernel /boot/xen-3.4.0.gz dom0_mem=524288
module /boot/vmlinuz-2.6.18.8-xen0 root=/dev/disk/by-uuid/239bf825-2e32-4c63-8029-564c74d146ec ro
module /boot/xen0.img
title Xen [/boot/xen.gz]
root (hd0,2)
kernel /boot/xen-3.4.0.gz dom0_mem=524288
module /boot/vmlinuz-2.6.18.8-xen0 root=/dev/disk/by-uuid/239bf825-2e32-4c63-8029-564c74d146ec ro
module /boot/xen0.img
пятница, 10 июля 2009 г.
php следите за параметрами
поимел геморой с неработающими post запросами.
а php.ini добрый человек прописал
post_max_size = 11Mb
казалось бы в чем ошибка. Добрый php молча обнулит такую запись, но вам об этом не скажт просто у вас не будет post запросов, потому что мегабайты обозначают как 11M, одним символом.
а php.ini добрый человек прописал
post_max_size = 11Mb
казалось бы в чем ошибка. Добрый php молча обнулит такую запись, но вам об этом не скажт просто у вас не будет post запросов, потому что мегабайты обозначают как 11M, одним символом.
понедельник, 22 июня 2009 г.
perl -X функции
if (-e $filename) { print "Файл существует.\n"; }
if (-z $filename) { print "Файл существует и он пустой.\n"; }
if (-r $filename) { print "У меня есть право на чтение файла.\n"; }
if (-w $filename) { print "У меня есть право на изменение файла.\n"; }
if (-x $filename) { print "У меня есть право на выполнение файла.\n"; }
if (-o $filename) { print "Я владелец файла.\n"; }
if (-f $filename) { print "$filename - это обычный файл.\n"; }
if (-d $filename) { print "$filename - это каталог.\n"; }
if (-l $filename) { print "$filename - это символическая ссылка.\n"; }
if (-p $filename) { print "$filename - это FIFO.\n"; }
if (-S $filename) { print "$filename - это сокет.\n"; }
if (-b $filename) { print "$filename - это блок-ориентированное спец. устройство.\n"; }
if (-c $filename) { print "$filename - это символьное спец. устройство.\n"; }
if (-t $filename) { print "Файловый манипулятор открыт для терминала.\n"; }
if (-u $filename) { print "У файла установлен бит setuid\n"; }
if (-g $filename) { print "У файла установлен бит setgid\n"; }
if (-k $filename) { print "У файла установлен бит запрета (бит-липучка)\n"; }
if (-T $filename) { print "Это текстовый файл.\n"; }
if (-B $filename) { print "Это двоичный файл.\n"; }
$size = -s $filename;
print "Размер файла: $size.\n"; }
$modification_time = int(-M $filename);
print "Со времени последнего изменения файла прошло $modification_time дней.\n";
$access_time = int(-A $filename);
print "Со времени последнего чтения файла прошло $access_time дней.\n";
$ctime = int(-C $filename);
print "Со времени последнего изменения файлового дескриптора прошло $ctime дней";
if (-z $filename) { print "Файл существует и он пустой.\n"; }
if (-r $filename) { print "У меня есть право на чтение файла.\n"; }
if (-w $filename) { print "У меня есть право на изменение файла.\n"; }
if (-x $filename) { print "У меня есть право на выполнение файла.\n"; }
if (-o $filename) { print "Я владелец файла.\n"; }
if (-f $filename) { print "$filename - это обычный файл.\n"; }
if (-d $filename) { print "$filename - это каталог.\n"; }
if (-l $filename) { print "$filename - это символическая ссылка.\n"; }
if (-p $filename) { print "$filename - это FIFO.\n"; }
if (-S $filename) { print "$filename - это сокет.\n"; }
if (-b $filename) { print "$filename - это блок-ориентированное спец. устройство.\n"; }
if (-c $filename) { print "$filename - это символьное спец. устройство.\n"; }
if (-t $filename) { print "Файловый манипулятор открыт для терминала.\n"; }
if (-u $filename) { print "У файла установлен бит setuid\n"; }
if (-g $filename) { print "У файла установлен бит setgid\n"; }
if (-k $filename) { print "У файла установлен бит запрета (бит-липучка)\n"; }
if (-T $filename) { print "Это текстовый файл.\n"; }
if (-B $filename) { print "Это двоичный файл.\n"; }
$size = -s $filename;
print "Размер файла: $size.\n"; }
$modification_time = int(-M $filename);
print "Со времени последнего изменения файла прошло $modification_time дней.\n";
$access_time = int(-A $filename);
print "Со времени последнего чтения файла прошло $access_time дней.\n";
$ctime = int(-C $filename);
print "Со времени последнего изменения файлового дескриптора прошло $ctime дней";
пятница, 5 июня 2009 г.
geli remove boot promt
geli инициируют раздели по умолчанию при загрузке, для remote server подобное поведение не допустимо
решение
geli configure -B /dev/da0s1d.eli
решение
geli configure -B /dev/da0s1d.eli
вторник, 2 июня 2009 г.
mysql 5.4-6.0 compile error
при сборке mysql версий 5.4 и 6.0 на freebsd 6.4 вылетала ошибка компилятора
/var/tmp//ccdN1bO7.s: Assembler messages:
/var/tmp//ccdN1bO7.s:1571: Error: bad register name `%sil'
/var/tmp//ccdN1bO7.s:1697: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:1915: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:2804: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:3647: Error: bad register name `%sil'
решение.
1. ставим из портов gcc42, появятся бинарники gcc42 и g++42
2. ./configure CC=gcc42 CXX=g++42
3. make ; make install
4. profit!
/var/tmp//ccdN1bO7.s: Assembler messages:
/var/tmp//ccdN1bO7.s:1571: Error: bad register name `%sil'
/var/tmp//ccdN1bO7.s:1697: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:1915: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:2804: Error: bad register name `%dil'
/var/tmp//ccdN1bO7.s:3647: Error: bad register name `%sil'
решение.
1. ставим из портов gcc42, появятся бинарники gcc42 и g++42
2. ./configure CC=gcc42 CXX=g++42
3. make ; make install
4. profit!
понедельник, 1 июня 2009 г.
lighttpd digest auth
lighttpd.conf
раскомментарить mod_auth
добавить в секцию host или URL
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
auth.require = ( "/" =>
(
"method" => "digest",
"realm" => "Restricted Area",
"require" => "valid-user"
))
затем в консоли
htdigest -c /etc/lighttpd/.passwd "Restricted Area" login
chown www:www /etc/lighttpd/.passwd
chmod 400 /etc/lighttpd/.passwd
раскомментарить mod_auth
добавить в секцию host или URL
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
auth.require = ( "/" =>
(
"method" => "digest",
"realm" => "Restricted Area",
"require" => "valid-user"
))
затем в консоли
htdigest -c /etc/lighttpd/.passwd "Restricted Area" login
chown www:www /etc/lighttpd/.passwd
chmod 400 /etc/lighttpd/.passwd
пятница, 29 мая 2009 г.
custom сборка eaccelerator
1. /usr/local/php-525/bin/phpize
2. ./configure --prefix=/usr/local/eaccelerator --with-eaccelerator-shared-memory --enable-eaccelerator=shared --with-eaccelerator-sessions --with-eaccelerator-content-caching --with-eaccelerator-userid=80 --with-php-config=/usr/local/php-525/bin/php-config
не работает в если php собрано с cgi SAPI
2. ./configure --prefix=/usr/local/eaccelerator --with-eaccelerator-shared-memory --enable-eaccelerator=shared --with-eaccelerator-sessions --with-eaccelerator-content-caching --with-eaccelerator-userid=80 --with-php-config=/usr/local/php-525/bin/php-config
не работает в если php собрано с cgi SAPI
вторник, 12 мая 2009 г.
вторник, 5 мая 2009 г.
wget stalled
при скачке с yandex репозитариев почему то wget постоянно впадает в stalled
решение просто
wget -c -t 100 -T 3
-t 100 из-за того что для больших файлов переконнект происходит так часто что стандартных 20 попыток не хватает.
решение просто
wget -c -t 100 -T 3
-t 100 из-за того что для больших файлов переконнект происходит так часто что стандартных 20 попыток не хватает.
cpan install
инсталяция модулей из CPAN
запустить шел
perl -MCPAN -e shell
поиск модуля
i /строка/
установка
install Имя_Модуля
запустить шел
perl -MCPAN -e shell
поиск модуля
i /строка/
установка
install Имя_Модуля
среда, 15 апреля 2009 г.
freebsd статистика
top -mio - показать I/O по процессам
top -S - показать ситемные процессы в топе (по дефолту они не показываются)
gstat - нагрузка на диски
systat -io start 1
diskinfo -t da0 - тест на дисковую производительность
tunefs -p /var/ - информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat - интенсивность передачи трафика
netstat -inb - передано через интерфейс в байтах
netstat -w1 - количество пакетов/ошибок/байт на интерфейсе
стибрил тут
top -S - показать ситемные процессы в топе (по дефолту они не показываются)
gstat - нагрузка на диски
systat -io start 1
diskinfo -t da0 - тест на дисковую производительность
tunefs -p /var/ - информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat - интенсивность передачи трафика
netstat -inb - передано через интерфейс в байтах
netstat -w1 - количество пакетов/ошибок/байт на интерфейсе
стибрил тут
dns loss check
Оценить количество потерянных dns запросов можно, например, по счетчику "dropped due to full socket buffers" в netstat -s -p udp
среда, 1 апреля 2009 г.
find tips
найти суммарный размер файлов к которым обращались за последние три дня
find . -type f -atime -3 -exec ls -lad {} \;|awk ' BEGIN {s=0}; {s += $5;} END {print s;}'
найти количество строк в файлах определенного типа
find . -type f \( -name "*.php" -o -name "*.tpl" -o -name "*.js" -o -name "*.xml" -o -name "*.css" -o -name "*.html" \) -exec cat {} \; |wc -l
find . -type f -atime -3 -exec ls -lad {} \;|awk ' BEGIN {s=0}; {s += $5;} END {print s;}'
найти количество строк в файлах определенного типа
find . -type f \( -name "*.php" -o -name "*.tpl" -o -name "*.js" -o -name "*.xml" -o -name "*.css" -o -name "*.html" \) -exec cat {} \; |wc -l
четверг, 19 февраля 2009 г.
freebsd acl operate
setfacl -m u:username:rwx - установить ACL
getfacl dir/file - посмотреть текущие
setfacl -d -m u::rwx,g::---,o::rwx dir/file -выставить дефолтные ACL
так как ACL нет возможно выставить рекурсивно во FreeBSD, пользуем find
find . -type d -exec setfacl -m u:username:rwx {} \;
getfacl dir/file - посмотреть текущие
setfacl -d -m u::rwx,g::---,o::rwx dir/file -выставить дефолтные ACL
так как ACL нет возможно выставить рекурсивно во FreeBSD, пользуем find
find . -type d -exec setfacl -m u:username:rwx {} \;
среда, 11 февраля 2009 г.
vim tips
.vimrc
set cindent shiftwidth=4 - Включает отступы в стиле C , но жутко бесит когда надо вставлять куски кода с отступами, вызывает смещение каждой вствляемой строки, что в свою очередь лечится
set paste в консоли vim
сохраниение по Ctrl+s
map <C-S> :wa<CR>
imap <C-S> <Esc>:wa<CR><Ins><Right>
set cindent shiftwidth=4 - Включает отступы в стиле C , но жутко бесит когда надо вставлять куски кода с отступами, вызывает смещение каждой вствляемой строки, что в свою очередь лечится
set paste в консоли vim
сохраниение по Ctrl+s
map <C-S> :wa<CR>
imap <C-S> <Esc>:wa<CR><Ins><Right>
понедельник, 9 февраля 2009 г.
transport.db issue
Или о вреде апдейтов, жил был postfix суко долго жил, пока до него не добрались мои шаловливые ручки, а точнее меня как обычно ввела диссонанс его устаревшая версия. Собственно обновился, потом ещё и ещё, и хрен с ним, спустя какое то время потребовалось изменить transport, меняем конфиг делаем postmap transport, затем postfix reload и... почта перестает ходить o_O. возвращаю назад сохраненный бинарник transport.db все работает. До конца так и не удалось выяснить в какой конкретно версии произошли изменения, да и экспериментировать на продакшн сервере, крайне опасно для зарплаты, но ларчик открывался просто
было
transport_maps = btree:$config_directory/transport
стало
transport_maps = hash:$config_directory/transport
postmap по умолчанию генерит Berkley DB методом хранения hash, а никак не btree.
было
transport_maps = btree:$config_directory/transport
стало
transport_maps = hash:$config_directory/transport
postmap по умолчанию генерит Berkley DB методом хранения hash, а никак не btree.
понедельник, 2 февраля 2009 г.
freebsd acl
Enable ACL
Команда tunefs может быть применена на отмонтированной либо доступной только для чтения файловой системе. Это означает, что, обычно, Вы должны загрузиться в однопользовательском режиме перед запуском команды
/sbin/tunefs -a enable /fs ,
где /fs обозначает точку монтирования файловой системы (/, /usr, и так далее). Если Вы не имеете доступа к терминалу машины (например, в случае машины, находящейся на colocation), Вы можете добавить вызов команды tunefs в начало файла /etc/rc для включения ACL при последующей загрузке.
Если Вы используете файловую систему UFS2, включение ACL закончено. Для включения ACL необходима только строчка opions UFS_ACL, встроенная по умолчанию в GENERIC-конфигурацию ядра.
спер тут
Команда tunefs может быть применена на отмонтированной либо доступной только для чтения файловой системе. Это означает, что, обычно, Вы должны загрузиться в однопользовательском режиме перед запуском команды
/sbin/tunefs -a enable /fs ,
где /fs обозначает точку монтирования файловой системы (/, /usr, и так далее). Если Вы не имеете доступа к терминалу машины (например, в случае машины, находящейся на colocation), Вы можете добавить вызов команды tunefs в начало файла /etc/rc для включения ACL при последующей загрузке.
Если Вы используете файловую систему UFS2, включение ACL закончено. Для включения ACL необходима только строчка opions UFS_ACL, встроенная по умолчанию в GENERIC-конфигурацию ядра.
спер тут
Подписаться на:
Сообщения (Atom)