Создать пустой git репозиторий

06.02.2011

apt-get install git-core

Не нужно ставить пакет git !
Затем

~$ mkdir ~/tmp/repo && cd ~/tmp/repo
~/tmp/repo$ echo ‘Test repository’ >README
~/tmp/repo$ git init
Initialized empty Git repository in /home/user/tmp/repo/.git/
~/tmp/repo$ git add .
~/tmp/repo$ git commit -am ‘Initial commit’
[master (root-commit) 8d67400] Initial commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README
~/tmp/repo$ ssh server ‘mkdir repo.git; cd repo.git; git init –bare; chmod +x hooks/post-update’
Initialized empty Git repository in /home/user/repo.git/
~/tmp/repo$ git remote add origin ssh://server/~/repo.git
~/tmp/repo$ git config –add branch.master.merge master
~/tmp/repo$ git config –add branch.master.remote origin
~/tmp/repo$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 232 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://server/~/repo.git
* [new branch] master -> master
~/tmp/repo$ git pull
Already up-to-date.

Может возникнуть ошибка

No refs in common and none specified; doing nothing.

Я решил ее так

git push origin master

Создание загрузочной флешки.

31.12.2010

Чтобы не забыть

http://unetbootin.sourceforge.net/

Стопицотое гайд по установке и настройке SVN на Debian

10.12.2010

Устанавливаем svnserve как описано тут
Кстати весьма полезный блог о сисадминстве =)

Кратко о настройке Subversion
Встала задача поднять систему контроля версий во внутренней сети для двоих человек. Давайте посмотрим как это делается. Я покажу как это сделать, когда нет времени разбираться, а рабочая система нужна еще позавчера.
Первое что нужно сделать – это установить саму Subversion. В Дебиан это делается достаточно просто:
# aptitude install subversion subversion-tools
На локальной системе понадобятся еще такие пакеты, как kdesvn и kdesvn-kio-plugins , в Windows понадобится установить программу TortoiseSvn (как-то так она называлась)
Если все нужное ПО установлено давайте продолжим…
Для начала создадим конфиг файл, для стартового скрипта:
/etc/subversion.conf

#projects directory
root=/var/svn
Здесь я просто указал директорию , в которой будут находится проекты.
Идем дальше. Пишем стартовый скрипт.
/etc/init.d/subversion
#! /bin/sh
#
# Скрипт для запуска Subversion-сервера (svnserve)
#
#

NAME=svnserve
DAEMON=/usr/bin/svnserve
PIDFILE=/var/run/svnserve.pid

PATH=/bin:/usr/bin:/sbin:/usr/sbin

start () {

projects=`sed ‘/^#/ d;’ /etc/subversion.conf|awk -F ‘=’ ‘{print $2}’`

svnserve –daemon -r $projects –pid-file $PIDFILE

return $?
}

stop () {
PID=`cat $PIDFILE 2>/dev/null`
start-stop-daemon –stop –quiet –pidfile $PIDFILE –name svnserve
#
# Мы должны дождаться пока svnserve действительно завершит работу.
#
sleep 2
if test -n «$PID» && kill -0 $PID 2>/dev/null
then
echo » Waiting»
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 24 ]
then
echo «Error!»
return 1
fi
sleep 5
echo «Ok!»
done
echo «Ok!»
return 0
else
echo «Ok!»
return 0
fi
}

case «$1″ in
start)
echo «Стартует сервис Subversion » «svnserve»
start
;;
stop)

echo «Останавливается сервис Subversion» «svnserve»
stop
;;
restart)
echo «Перезапускается сервис Subversion» «svn serve»
stop
start
;;
*)
echo «Используйте : /etc/init.d/$NAME {start|stop|restart}»
exit 3
;;
esac

exit 0

Поясню лишь одну строку: projects=`sed ‘/^#/ d;’ /etc/subversion.conf|awk -F ‘=’ ‘{print $2}’` – она присваивает переменной projects ту самую корневую директорию, которая прописана в /etc/subversion.conf. После чего запускается сервер с параметрами
svnserve –daemon -r $projects –pid-file $PIDFILE
- где опция -r запрещает серверу искать репозитории выше указанной директории
Осталось лишь одно – заставить запускаться Subversion при старте системы. Нет ничего проще! просто пропишем в файл /etc/rc.local следующую строку:
/etc/init.d/subversion
Вот и все готово. Можно перезагрузиться и проверить стартанул ли сервис. Ах да… не забываем о правах:
# chmod a+x /etc/init.d/subversion
Есть и другой способ заставить стартовать сервис автоматически:
# update-rc.d -f subversion defaults

Далее создаем репозитории и редактируем конфиги в папке conf
При редактировании файла svnserve.conf нельзя оставлять пробелы между именем параметра и его значением

Первое приложение миллионник!

26.11.2010


«Сравни Друзей!» – Первое приложение, которое набрало миллион установок.

Установка и настройка memcahed и php-memcahe

25.11.2010

Memcached – это сервер написанный на С, который запускается как демон и хранит нужные значения в оперативной памяти попарно ключ-значение.
php-memcache – это клиент к серверу memcached, реализован как pecl модуль. Есть и другие клиенты для PHP. Вот статья в которой сравниваются два PHP клиента
Установка на Debian:

apt-get install memcached php-memcache

После установки надо заглянуть в конфиг /etc/memcached.conf
Основных параметров немного и они хорошо документированы.
Запуск и остановку демона можно производить через init script
/etc/init.d/memcached

Для первого знакомства полезно запустить memcached не как демон, а из консоли

memcached -u nobody -vv

Напишем два PHP скрипта. Первый сохраняет значение, второй читает его:

$m = new Memcache();
$m->addServer('localhost');

$version = $m->getVersion();
echo $version;

$tmp_object = new stdClass();
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$m->set('key',$tmp_object,false, 3600);
?>


$m = new Memcache();
$m->addServer('localhost');

$o = $m->get('key');
var_dump($o);
?>

Тюнинг mysql

22.11.2010

http://guruadmin.ru/page/izmenjaem-opciju-max_connections-v-mysql

http://techchorus.net/enable-mysql-general-query-and-slow-query-log

Nginx, ошибка accept() failed (24: Too many open files)

19.11.2010

В один прекрасный день, после запуска нового приложения в Одноклассниках, серверу стало плохо.
В браузере выводилась ошибка 500.
В логах примерно такое: accept() failed (24: Too many open files)
Это значит, превышен лимит количества одновременно открытых файлов.

Решение оказалось таким:
В конец файла /etc/security/limits.conf нужно добавить такие строки:

* soft nofile 16384
* hard nofile 16384

В текущей консоли от рута (от судо не пашет) сделать

ulimit -n 16384

Хотя это необязательно, если есть возможность перезагрузить сервер.

В /etc/nginx/nginx.conf прописать новое значение worker_connections, равное 16384 поделить на значение worker_processes.

Если не делали ulimit -n 16384, нужно выполнить перезагрузку, после чего проблема отступит :)

Быстрый backup и restore mysql на Windows

26.10.2010

Я использую Dropbox для синхронизации (между разными компьютерами) и бэкапа своих рабочих файлов.
Как же синхронизовать базы данных?
Для этого я сделал два батничка:
1) dump.bat

«C:\xampplite\mysql\bin»\mysqldump -uroot -p –all-databases > all-databases.sql
pause

REM «C:\xampplite\mysql\bin»\mysqldump -uroot -p test > test.sql
REM pause

2) restore.bat

«C:\xampplite\mysql\bin»\mysql -uroot -p < all-databases.sql
pause

Теперь закончив работу на одном компьютере, я запускаю dump.bat и все текущее содержимое
базы данных сохраняется в файле all-databases.sql, через Dropbox.

На втором компьютере у меня точно такая же конфигурация MYSQL сервера,
поэтому я запускаю restore.bat и мои базы данных синхронизованы.

Proftpd на Debian

18.10.2010

Для настройки ftp сервера на Debian было решено использовать стандартный proftpd.
Настройть требоволось так: доступ только авторизованым пользователям, у разных пользователей разный домашние каталоги и чтобы не наделать дыр в безопасности.

Настраивал вот по этим источникам

http://dng.kiev.ua/node/15

http://openwiki.ru/wiki/ProFTPd

http://linuxforum.ru/viewtopic.php?pid=56675

Если вкратце, то задал пользователя и группу с помощью утилит

ftpasswd –passwd –name ftp_1 –file /etc/proftpd/ftpd.passwd –uid 5000 –gid 5000 –home /home/ftp_1 –shell /bin/false
ftpasswd –group –name ftp_group –file /etc/proftpd/ftpd.group –gid 5000 –member ftp_1

Затем дописал в файл /etc/proftpd/proftpd.conf

DefaultRoot ~
ListOptions «-la»
AuthUserFile /etc/proftpd/ftpd.passwd
AuthGroupFile /etc/proftpd/ftpd.group
RequireValidShell off

Для того чтобы новый конфиг заработал, не забыть перезапусть proftpd

/etc/init.d/proftpd restart

Пробую зайти по фтп, по системе бродить не дает – хорошо,
но и файлов не вижу.
Меняю группу, на группу владельца – все ок

Flash и Red5 маппинг классов. «Прозрачные свойства»

23.09.2010

Чтобы смаппить классы флэш – приложения на ActionScript и red5 приложения на java, нужно следующее:
1) Создать класс на java, например, ru.terbooter.UserVO
2) Создать класс на as, главное чтобы публичные сериализуемые своства были с такими же именами и имели такой же тип
(подробнее о соответствии типов между flash и red5 тут)
само определение класса может быть другим (и имя и пакет),
но чтобы избежать путаницы, лучше определению класса дать такое же имя как и на серверной стороне
3) Задать алиас локальному классу
import ru.terbooter.UserVO;
registerClassAlias(«ru.terbooter.UserVO», UserVO);

Если Flex компилятор, то можно использовать метатэг
[RemoteClass(alias="ru.terbooter.UserVO")]

Чтобы некоторое свойсто замапленного java класса «спрятать» от сериализации,
нужно использовать аннотацию @DontSerialize