<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>yupmin&#039;s another space</title>
	<atom:link href="http://yupmin.net/feed" rel="self" type="application/rss+xml" />
	<link>http://yupmin.net</link>
	<description>developer&#039;s note</description>
	<lastBuildDate>Thu, 02 Sep 2010 09:32:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>install awstats</title>
		<link>http://yupmin.net/entry/install-awstats</link>
		<comments>http://yupmin.net/entry/install-awstats#comments</comments>
		<pubDate>Thu, 02 Sep 2010 09:32:27 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[log]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=213</guid>
		<description><![CDATA[awstats툴은 web log analytics tools이다.  간단한 설치와 설정이 맘에 든다. case : ubuntu (계정 root 기본) &#8211; awstats 6.9 참조 : http://ubuntu-tutorials.com/2008/01/16/configuring-awstats-on-ubuntu-server/ 1. 설치 aptitude install awstats 2. 기본 셋팅 각 virtual host 별로 생성이 가능하니 /etc/awstats/awstats.conf 를 도메인별로 복사해서 사용한다. cp /etc/awstats/awstats.conf /etc/awstats/awstats.xxx.test.com.conf vi /etc/awstats/awstats.xxx.test.com.conf LogFile="/var/log/apache2/xxx.text.com-access.log" LogFormat=1 SiteDomain="xxx.test.com" HostAliases="xxx.test.com localhost 127.0.0.1 여기서 좀더 확인해야 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://awstats.sourceforge.net/">awstats</a>툴은 web log analytics tools이다.  간단한 설치와 설정이 맘에 든다.</p>
<p><strong>case : ubuntu</strong> (계정 root 기본) &#8211; awstats 6.9</p>
<p>참조 :<br />
<a href="http://ubuntu-tutorials.com/2008/01/16/configuring-awstats-on-ubuntu-server/ ">http://ubuntu-tutorials.com/2008/01/16/configuring-awstats-on-ubuntu-server/</a></p>
<p>1. 설치</p>
<pre class="brush: shell">aptitude install awstats</pre>
<p>2. 기본 셋팅<br />
각 virtual host 별로 생성이 가능하니 /etc/awstats/awstats.conf 를 도메인별로 복사해서 사용한다.</p>
<pre class="brush: shell">cp /etc/awstats/awstats.conf /etc/awstats/awstats.xxx.test.com.conf
vi /etc/awstats/awstats.xxx.test.com.conf

LogFile="/var/log/apache2/xxx.text.com-access.log"
LogFormat=1
SiteDomain="xxx.test.com"
HostAliases="xxx.test.com localhost 127.0.0.1</pre>
<p>여기서 좀더 확인해야 할것은 DirData 지시어에 로그 분석 파일이 위치한다는 것이다. plugin등이 잘못되었다고 생각되면 해당 폴더를 지워주면 된다.</p>
<p>그리고 아파치 셋팅을 추가해준다.</p>
<pre class="brush: shell">Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch</pre>
<p>ubuntu의 경우 log를 logrotate가 gz로 압축해버리는데 과거의 로그 파일 처리를 위해선 압축을 풀고, /usr/share/doc/awstats/examples/logresolvemerge.pl 로 하나의 log파일로 머지한 다음에 분석하면 된다.</p>
<pre class="brush: shell">cd /var/log/apache2
gzip -d access.log.*.gz
/usr/share/doc/awstats/examples/logresolvemerge.pl access.log.* &gt;&gt; access_combined.log
/usr/lib/cgi-bin/awstats.pl -config=xxx.test.com -LogFile="/var/log/apache2/access_combined.log"</pre>
<p>최근 로그는 다음 명령어를 통해서 업데이트 가능하다. cron.hourly에 등록하자.</p>
<pre class="brush: shell">touch /etc/cron.hourly/awstat-xxx.test.com.sh;chmod 700 /etc/cron.hourly/awstat-xxx.test.com.sh
vi /etc/cron.hourly/awstat-xxx.test.com.sh

#!/bin/sh
/usr/lib/cgi-bin/awstats.pl -config=xxx.test.com -update</pre>
<p><strong>case centos</strong> &#8211; awstats 7.0</p>
<p>1. 설치<br />
awstats  최신소스 : http://sourceforge.net/projects/awstats</p>
<pre class="brush: shell">wget http://sourceforge.net/projects/awstats/files/AWStats/7.0/awstats-7.0.tar.gz/download
mv awtats-7.0 /usr/local/awtats
chmod -R 755 /usr/local/awstats/wwwroot /usr/local/awstats/tools/*.pl
mkdir /etc/awstats /var/lib/awstats</pre>
<p>2. 셋팅<br />
awstats 분석 기능을 도메인별로 추가 하기 위해선 ubuntu와 다르게 다음의 스크립트를 실행한다. 문답식이다.<br />
/etc/awstats 에 추가로 문답에 입력했던 프로필명으로 기본 설정 파일이 생기며, 요 파일을 알맞게 수정해준다. LogFile을 해당하는 도메인에 맞게 수정 Logformat 은 보통 1을 사용하며, apache에서는 combined를 사용한다.</p>
<pre class="brush: shell">perl /var/loca/awstats/tools/awstats_configure.pl
vi /etc/awstats/awstats.xxx.test.com.conf</pre>
<p>ubunt처럼 cron.hourly에 등록하자.</p>
<pre class="brush: shell">vi /etc/cron.hourly/awstat-xxx.test.com.sh

#!/bin/sh
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=xxx.test.com</pre>
<p>덧. 최신 버젼들에는 브라우저 정보등 각종 데이타가 최신임으로 굳히 ubuntu처럼 패키지로 깔 필요가 없을듯 하다.</p>
<p>추가로 geoip 기능을 사용해 보자.<br />
geoip plugin 기능을 쓰기 위해선 다음과 같이 한다.  참조 : <a href="http://blog.sunghwanyoo.com/tc/59">http://blog.sunghwanyoo.com/tc/59</a></p>
<p><strong>case ubuntu</strong> :</p>
<pre class="brush: shell">apt-get install libgeoip1 libgeoip-dev libgeo-ip-perl #use geoip</pre>
<p><strong>case centos</strong> :</p>
<pre class="brush: shell">yum install GeoIp GeoIP-devel
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
cd GeoIP-1.4.6;./configure --prefix=/usr;make;make install;</pre>
<pre class="brush: shell">wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip  -d GeoIP.dat.gz
mv GeopIP.dat /var/lib/GeoIP/
wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.38.tar.gz
cd Geo-IP-1.38;perl Makefile.PL;make;make test;make install;
</pre>
<p>geocity plugin 기능도 추가하자</p>
<pre class="brush: shell">wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gzip -d GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/share/GeoIP #ubuntu :/var/lib/GeoIP/, centos : /var/lib/GeoIP/</pre>
<p>그리고 GeoIP를 활성화를 위해선 geoip 부분을 활성화 시키고, GeoCity를 활성화기 위해선 geoip_city_maxmind 부분을 활성화 시킨다</p>
<pre class="brush: shell">DNSLookup=0 or 2
LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
#LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/share/GeoIP/GeoLiteCity.dat" # case : centos 에서 오류 나온다</pre>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/install-awstats/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>install redmine(to centos or ubuntu)</title>
		<link>http://yupmin.net/entry/install-redmine</link>
		<comments>http://yupmin.net/entry/install-redmine#comments</comments>
		<pubDate>Wed, 18 Aug 2010 06:01:59 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[tracker]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=156</guid>
		<description><![CDATA[trac의 좀더 향상된 기능의 redmine은 각종 프로젝트등을 할때 유용한 툴이다. 단순 개발뿐만 아니라. 중소규모 회사에서도 돈을 따로 들이지 않고, 업무관리를 할때 유용하다. case : centos 5.4 1. 일단 centos의 ruby패키지 버젼이 낮으니 1.8.6까지 올려준다. (root 계정) vi /etc/yum.repos.d/ruby.repo [ruby] name=ruby baseurl=http://repo.premiumhelp.eu/ruby/ gpgcheck=0 enabled=0 yum --enablerepo=ruby install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc 2. ImageMagick 를 깔아주는데, [...]]]></description>
			<content:encoded><![CDATA[<p>trac의 좀더 향상된 기능의 <a href="http://www.redmine.org/">redmine</a>은 각종 프로젝트등을 할때 유용한 툴이다. 단순 개발뿐만 아니라. 중소규모 회사에서도 돈을 따로 들이지 않고, 업무관리를 할때 유용하다.</p>
<p><strong>case : centos 5.4</strong></p>
<p>1. 일단 centos의 ruby패키지 버젼이 낮으니 1.8.6까지 올려준다. (root 계정)</p>
<pre class="brush: shell;">vi /etc/yum.repos.d/ruby.repo

[ruby]
name=ruby
baseurl=http://repo.premiumhelp.eu/ruby/
gpgcheck=0
enabled=0

yum --enablerepo=ruby install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc</pre>
<p>2. <a href="http://www.imagemagick.org/">ImageMagick</a> 를 깔아주는데, centos 패키지버젼이 너무 낮으니 직접 깔아준다.</p>
<pre class="brush: shell;">yum install libjpeg-devel libpng-devel glib2-devel fontconfig-devel zlib-devel libwmf-devel freetype-devel libtiff-devel
yum install ghostscript-fonts #options
wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.6.3-7.tar.gz
tar xvfz  ImageMagick-6.6.3-7.tar.gz
cd ImageMagick-6.6.3-7
./configure
make; make install
gem install rmagick</pre>
<p>3. <a href="http://rubygems.org/">rubygems</a> 을 최신으로 깔아준다.</p>
<pre class="brush: shell;">wget http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz
tar xvfz rubygems-1.3.7.tgz
cd rubygems
ruby setup.rb</pre>
<p>4. rails를 깔아준다. 현재 trunk상의 버젼에서는 rails 2.3.5다. (참조 : <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">http://www.redmine.org/wiki/redmine/RedmineInstall</a>)</p>
<pre class="brush: shell;">gem install rails -v=2.3.5
gem install mysql</pre>
<p>5. redmine 설치 및 셋팅을 해야한다. (설치할 개인계정 test, 도메인 redmine.test.com, 경로 /home/test)</p>
<pre class="brush: shell;">svn co http://redmine.rubyforge.org/svn/trunk redmine</pre>
<p>mysql 계정을 만들어주고</p>
<pre class="brush: sql;">create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'my_password';
grant all privileges on redmine.* to 'redmine'@'localhost';</pre>
<pre class="brush: shell;">vi redmine/config/database.xml

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password</pre>
<p>redmine 기본 DB/세션/데이타 셋팅을 한다.</p>
<pre class="brush: shell;">rake generate_session_store
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data</pre>
<p>redmine 디렉토리 권한 셋팅을 한다.</p>
<pre class="brush: shell;">mkdir public/plugin_assets
chmod -R 777 files log tmp public/plugin_assets</pre>
<p>일단 WEBBrick으로 테스트를 먼저 해본다. 접근주소는 다음과 같다. http://localhost:3000/ (id/pw = admin)</p>
<pre class="brush: shell;">ruby script/server webrick -e production</pre>
<p>6. 추가  환경 셋팅을 한다.<br />
- LOG</p>
<pre class="brush: shell;">cp redmine/config/additional_environment.rb.example redmine/config/additional_environment.rb
vi redmine/config/additional_environment.rb

Logger.new(PATH,NUM_FILES_TO_ROTATE,FILE_SIZE)
config.logger = Logger.new(config.log_path, 2, 1000000)</pre>
<p>- SMTP</p>
<pre class="brush: shell;">cp redmine/config/email.rb.example redmine/config/email.rb
vi redmine/config/email.rb

production:
  delivery_method: :smtp
  smtp_settings:
    address: localhost
    port: 25
    domain: redmine.test.com</pre>
<p>7. apache + passenger</p>
<pre class="brush: shell;">cp redmine/public/dispatch.cgi.example redmine/public/dispatch.cgi
chmod 755 public/dispatch.cgi
vi config/environment.rb

ENV['RAILS_ENV'] ||= 'production' #uncomment (remove #)</pre>
<pre class="brush: shell;">sudo vi /etc/httpd/host.d/00_redmine.test.com.conf

&lt;VirtualHost *:80&gt;
    ServerName redmine.test.com
    DocumentRoot /home/test/redmine/public/
    ErrorLog logs/redmine.test.com-error_log
    CustomLog logs/redmine.test.com-access_log common env=!DoNotLog
    &lt;Location "/home/test/redmine/public"&gt;
        Options Indexes ExecCGI FollowSymLinks
        Order allow,deny
        Allow from all
        AllowOverride all
    &lt;/Location&gt;
# use 'autocreate svn repository'
#    &lt;Location "/sys"&gt;
#        Order deny,allow
#        Allow from ip.of.my.svn.server #change this
#        Deny from all
#    &lt;/Location&gt;
&lt;/VirtualHost&gt;</pre>
<p>apache와 rails를 연결할 passenger gem을 깔도록 한다.</p>
<pre class="brush: shell;">sudo gem install passenger
sudo passenger-install-apache2-module
sudo vi /etc/httpd/conf.d/passenger.conf

LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.11
PassengerRuby /usr/local/bin/ruby</pre>
<p>passenger-install-apache2-module를 깔때의 나오는 메세지대로 apache모듈을 설정해주면 된다. passenger가 업그레이드 되면 알맞게 그때그때마다 버젼을 수정해야 할듯 하다.<br />
일단 여기까지는 웹서버에 올리는 것이 완료된다. 도메인상으로 확인하여 문제점을 찾아봐야 한다.</p>
<p>8. subversion 연결 및 인증 설정</p>
<pre class="brush: shell;">yum install mod_dav_svn mod_perl perl-Digest-SHA1 perl-DBD-mysql perl-Apache-DBI</pre>
<p>일단 http://redmine.test.com/svn 으로 접속하게 설정</p>
<pre class="brush: shell;">sudo vi /etc/httpd/cond.f/00_redmine.test.com.conf

    &lt;Location "/svn"&gt;
       DAV svn
       SVNParentPath /home/test/svn
       SVNListParentPath on
    &lt;/Location&gt;</pre>
<p>일단 http://redmine.test.com/svn 으로 확인해본다. 그리고 subversion 인증을 이용하자.<br />
현재 centos 5.4 패키지에서는 perl-Apache-DBI가 없으므로 직접 구해서 깐다.(있다면 다음으로 넘어가자)</p>
<pre class="brush: shell;">wget http://packages.sw.be/perl-Apache-DBI/perl-Apache-DBI-1.08-1.el5.rf.noarch.rpm
sudo rpm -Uvh perl-Apache-DBI-1.08-1.el5.rf.noarch.rpm
sudo cp redmine/extra/svn/Redmine.pm /usr/lib/perl5/vendor_perl/5.8.8./Apache/</pre>
<p>그리고 Location &#8220;/svn&#8221;을 수정한다.</p>
<pre class="brush: shell;">sudo vi /etc/httpd/host.d/00_redmine.test.com.conf

    PerlLoadModule Apache::Redmine
    &lt;Location "/svn"&gt;
        DAV svn
        SVNParentPath /home/test/svn/
        Order deny,allow
        Deny from all
        Satisfy any

        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
        AuthType Basic
        AuthName 'Redmine subversion repository'

        #read-only access
        &lt;Limit GET PROPFIND OPTIONS REPORT&gt;
            Require valid-user
            Allow from ip.of.my.svn.server
            Satisfy any
        &lt;/Limit&gt;
        # write access
        &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
            Require valid-user
        &lt;/LimitExcept&gt;

        RedmineDSN "DBI:mysql:database=redmine;host=localhost"
        RedmineDbUser "redmine"
        RedmineDbPass "my_password"
    &lt;/Location&gt;</pre>
<p>일단 이렇게 설정하고 테스트 해보자. redmine계정상 권한에 따라 checkout은 가능하나 commit을 할경우 아이디/비번을 요구하게 된다. 일단 설정완료 되었다. 그런데 non-member, anonymous를 &#8216;저장소 보기&#8217; 권한등을 빼도 repository를 보는게 가능한데 이게 맞는지는 좀 생각해봐야겠다.</p>
<p>9. create repository or autocreate 설정</p>
<pre class="brush: shell;">mkdir svn</pre>
<p>redmine에는 repository를 쉽게 생성해서 redmine에 등록할수 있는 명령어 extra/svn/reposman.rb가 있다. 프로젝트 생성후, 다음과 같은 명령어로 svn repository를 생성할수 있다. 도메인과 경로등에 주의하자. APIKEY는 redmine.test.com 사이트 들어가서 Administration → Settings → Repository 에서 Enable WS 하고 APIKEY를 만들어준자. 이렇게 해주면 알아서 svn폴더에 알아서 repository가 생긴다.</p>
<pre class="brush: shell;">sudo redmine/extra/svn/reposman.rb --redmine redmine.test.com --svn-dir /home/test/svn -k APIKEY --owner test --url file:///home/test/svn --verbose
sudo chgrp -R apache svn
sudo chmod -R g+w svn</pre>
<p>7번 웹 셋팅에서 Location &#8220;/sys&#8221; 부분의 주석을 빼고 위의 구문을 script로 구성해서 root cron으로 등록해두면 프로젝트에 맞게 자동으로 repository를 구성한다. repository 생성 빈도가 낮다면 굳히 cron에 등록할 필요는 없을듯 없다.</p>
<p><strong>case : ubuntu</strong></p>
<p>솔직히 제일 편한 방법은 다음과 같이 깔아주는 것이다.</p>
<pre class="brush: shell;">sudo apt-get install redmine redmine-mysql</pre>
<p>그렇지만, 일단 redmine 최신버젼을 사용할수가 없고, 어떻게 셋팅되었는지 모르겠다. 그래서 centos경우 처럼 깔기로 한다. (그리고 rubygems을 이용하면 ubuntu패키지 버젼보다 빠르기 때문에 유용하다. ruby rails의 경우에는 리눅스 배포본 패키지를 이용하는 것보다 rubygems등을 이용하는게 좋다.)</p>
<p>1. ruby 최신버젼을 인스톨한다.</p>
<pre class="brush: shell;">sudo aptitude install ruby irb rdoc ri libopenssl-ruby ruby1.8-dev build-essential
sudo apt-get install libmysqlclient-dev # for mysql gem </pre>
<p>2. <a href="http://www.imagemagick.org/">ImageMagick</a> 최신버젼을 인스톨한다.</p>
<pre class="brush: shell;">sudo apt-get install imagemagick libmagick9-dev</pre>
<p>3. 4. 5. 6. centos 5.4 부분과 동일<br />
단 webrick 실행시 다음과 같이 warning이 나오면</p>
<pre class="brush: shell;">/usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb:119:Warning: Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement</pre>
<p>다음을 119번째줄을 수정해준다.</p>
<pre class="brush: shell;">vi /usr/lib/ruby/gems/1.8/gems/rails-2.3.5/lib/rails/gem_dependency.rb

r = version_requirements → r = super</pre>
<p>7. apache + passenger</p>
<pre class="brush: shell;">cp redmine/public/dispatch.cgi.example redmine/public/dispatch.cgi
chmod 755 public/dispatch.cgi
vi config/environment.rb

ENV['RAILS_ENV'] ||= 'production' #uncomment (remove #)</pre>
<pre class="brush: shell;">sudo vi /etc/apache2/sites-available/test

&lt;VirtualHost *:80&gt;
    ServerName redmine.test.com
    DocumentRoot /home/test/redmine/public/
    ErrorLog logs/redmine.test.com-error_log
    CustomLog logs/redmine.test.com-access_log common env=!DoNotLog
    &lt;Location "/home/test/redmine/public"&gt;
        Options Indexes ExecCGI FollowSymLinks
        Order allow,deny
        Allow from all
        AllowOverride all
    &lt;/Location&gt;
# use 'autocreate svn repository'
#    &lt;Location "/sys"&gt;
#        Order deny,allow
#        Allow from ip.of.my.svn.server #change this
#        Deny from all
#    &lt;/Location&gt;
&lt;/VirtualHost&gt;

sudo a2ensite test</pre>
<p>passenger를 깔도록 한다.</p>
<pre class="brush: shell;">sudo gem install passenger
sudo passenger-install-apache2-module
sudo vi /etc/apache2/mods-available/passenger.conf

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so

sudo vi /etc/apache2/mods-available/passenger.conf

PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/bin/ruby1.8
PassengerDefaultUser www-data

a2enmod passenger</pre>
<p>passenger-install-apache2-module를 깔때의 나오는 메세지대로 apache모듈을 설정해주면 된다. passenger가 업그레이드 되면 알맞게 그때그때마다 버젼을 수정해야 할듯 하다.<br />
일단 여기까지는 웹서버에 올리는 것이 완료된다. 도메인상으로 확인하여 문제점을 찾아봐야 한다.</p>
<p>8. subversion 연결 및 인증 설정</p>
<pre class="brush: shell;">sudo aptitude install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl</pre>
<p>일단 http://redmine.test.com/svn 으로 접속하게 설정</p>
<pre class="brush: shell;">sudo vi /etc/apache/sites-available/test

    &lt;Location "/svn"&gt;
       DAV svn
       SVNParentPath /home/test/svn
       SVNListParentPath on
    &lt;/Location&gt;</pre>
<p>일단 http://redmine.test.com/svn 으로 확인해본다. 그리고 subversion 인증을 셋팅 및 이용해보자.<br />
참조 문서 : <a href="http://www.redmine.org/wiki/redmine/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl">http://www.redmine.org/wiki/redmine/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl</a></p>
<pre class="brush: shell;">sudo vi /etc/apache2/sites-available/test

    PerlLoadModule Apache::Redmine
    &lt;Location "/svn"&gt;
        DAV svn
        SVNParentPath /home/test/svn/
        Order deny,allow
        Deny from all
        Satisfy any

        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
        AuthType Basic
        AuthName 'Redmine subversion repository'

        #read-only access
        &lt;Limit GET PROPFIND OPTIONS REPORT&gt;
            Require valid-user
            Allow from ip.of.my.svn.server
            Satisfy any
        &lt;/Limit&gt;
        # write access
        &lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
            Require valid-user
        &lt;/LimitExcept&gt;

        RedmineDSN "DBI:mysql:database=redmine;host=localhost"
        RedmineDbUser "redmine"
        RedmineDbPass "my_password"
    &lt;/Location&gt;</pre>
<p>일단 이렇게 설정하고 테스트 해보자. redmine계정상 권한에 따라 checkout은 가능하나 commit을 할경우  아이디/비번을 요구하게 된다. 일단 설정완료 되었다. 그런데 non-member, anonymous를 &#8216;저장소 보기&#8217; 권한등을  빼도 repository를 보는게 가능한데 이게 맞는지는 좀 생각해봐야겠다.</p>
<p>9. centos 부분이랑 같다.<br />
단 프로젝트당 자동으로 svn이 생성되는 것이 좋지 않다면 다음의 스크립트로 필요한 프로젝트만 생성해서 들록해서 사용한다.</p>
<pre class="brush: shell;">vi create_svn_repository.sh

#!/bin/sh
if [ -z $1 ]; then
  echo "Usage: $0 [project]" 1>&#038;2
  exit 1
fi
PATH=/home/test/svn/$1
/usr/bin/svnadmin create $PATH
/usr/bin/sudo chgrp -R www-data $PATH
/usr/bin/sudo chmod -R g+w $PATH</pre>
<p>이상과 같다. 유용한 <a href="http://www.redmine.org/wiki/redmine/Plugin_List">플러그인</a>으로는 코드의 highlight기능을 위한 Ultraviolet Syntax Highlighting Engine , 접근 통계를 위한 Google Analytics plugin 등이 유용하다.</p>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/install-redmine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rsync Backup &#8211; 파일 복사/백업</title>
		<link>http://yupmin.net/entry/rsync-backup</link>
		<comments>http://yupmin.net/entry/rsync-backup#comments</comments>
		<pubDate>Sat, 07 Aug 2010 10:10:01 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=74</guid>
		<description><![CDATA[서로 다른 두 서버 혹은 로컬내 파일카피, 백업등에는 rsync 는 참으로 유용하다. 두번째  실행부터는 새로 가감된 파일만 추가해주니 말이다. 참조문서 : https://help.ubuntu.com/community/rsync 그리고 로컬카피라면은 rsync 서버를 따로 띄울 필요없이 사용하면 된다. 그러나 서로 다른 서버라면은 3가지 방식이 존재할듯 하다 rsync + xinetd(inetd) rsync server rsync + ssh 1번 방법은 참조문서대로 하면 될듯 하고, 2번째 방법은 [...]]]></description>
			<content:encoded><![CDATA[<p>서로 다른 두 서버 혹은 로컬내 파일카피, 백업등에는 rsync 는 참으로 유용하다. 두번째  실행부터는 새로 가감된 파일만 추가해주니 말이다.</p>
<p>참조문서 : <a href="https://help.ubuntu.com/community/rsync">https://help.ubuntu.com/community/rsync</a></p>
<p>그리고 로컬카피라면은 rsync 서버를 따로 띄울 필요없이 사용하면 된다. 그러나 서로 다른 서버라면은 3가지 방식이 존재할듯 하다</p>
<ol>
<li>rsync + xinetd(inetd)</li>
<li>rsync server</li>
<li>rsync + ssh</li>
</ol>
<p>1번 방법은 참조문서대로 하면 될듯 하고, 2번째 방법은 inetd를 사용하지 않고 직접 rsync서버를 사용하면 된다.(port: 873)<br />
이중 3번 rsync + ssh의 경우 rsync 서버를 돌리지 않고 ssh-server가 있다면 언제든지 사용가능하다.</p>
<pre class="brush: shell;">rsync -ave ssh --delete "/var/www/test" "xxx.xx.xx.xxx:/var/www/test"</pre>
<p>ssh 공개키를 이용해서 설정을 해두면  rsync 실행시 계정 암호를 입력하지 않아도 된다.</p>
<p>rsync와 함께 사용할 백업스크립트를 작성해보았다. 보통 cron으로 돌릴때(짧은 시간동안 반 실행) 중복실행을 피하기 위해 lock을 이용하도록 했다. 그리고 스크립트 중단은 process kill보다는 stop 파일을 만들어줌으로서 중단하는 방법을 쓰는게 좋은데, 혹시나 만들어진 lock파일을 위해 처음 한번 실행할때는 스크립트에 뒤에 아무 인수나 줘서 lock을 초기화 한다.</p>
<p>이부분을 잘만 이용하면, 두 서버간의 파일 싱크를 유지할수 있고,  간단히 서버부하를 줄일수 있다. 예를 들면 웹서버에서 이미지등의 파일부분만 따로 떼어내어서 서버를 구성하면 서버 부하에 많은 도움이 된다. unison등과 적절히 용도에 따라 적절히 사용하면 좋을듯 하다.</p>
<pre class="brush: shell;">#!/bin/sh
#usage : sync_script.sh [refresh]
LOCK=~/lock
STOP=~/stop
FILE=xxx.xxx.xxx.xxx
if [ -z $1 ]; then
  rm -rf $LOCK
fi
if [ ! -r $LOCK ] &amp;&amp; [ ! -r $STOP ]; then
  echo script start!
  touch $LOCK
  # backup script
  rm -rf $LOCK
  echo script end!
fi</pre>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/rsync-backup/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install Unison</title>
		<link>http://yupmin.net/entry/install-unison</link>
		<comments>http://yupmin.net/entry/install-unison#comments</comments>
		<pubDate>Fri, 06 Aug 2010 09:08:19 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[unison]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=121</guid>
		<description><![CDATA[rsync가 단방향 sync툴이라면 unison은 다른 공간에서 각각 삽입/수정/삭제 되는 것에 대해 sync가 가능한 툴이다. 쉽게 말하면 a → b rsync 일때(a의 내용을 b에 똑같이 넣을때) b의 파일을 가감해도 a에 반영되지 않는다. 그러나 unison은 a → b unison 을 하면 b의 파일을 가감하면 a에도 반영된다. case : centos centos 에서는 unison 배포본이 없다. 게다가 compile를 위해선 [...]]]></description>
			<content:encoded><![CDATA[<p>rsync가 단방향 sync툴이라면 unison은 다른 공간에서 각각 삽입/수정/삭제 되는 것에 대해 sync가 가능한 툴이다.</p>
<p>쉽게 말하면 a → b rsync 일때(a의 내용을 b에 똑같이 넣을때) b의 파일을 가감해도 a에 반영되지 않는다. 그러나 unison은 a → b unison 을 하면 b의 파일을 가감하면 a에도 반영된다.</p>
<p><a href="http://yupmin.net/wp-content/uploads/2010/08/unison_logo.gif" rel="lightbox[121]"><img class="aligncenter size-full wp-image-124" title="unison_logo" src="http://yupmin.net/wp-content/uploads/2010/08/unison_logo.gif" alt="unison logo" width="206" height="54" /></a></p>
<p><strong>case : centos</strong></p>
<p>centos 에서는 <a href="http://www.cis.upenn.edu/~bcpierce/unison/" target="_blank">unison </a>배포본이 없다. 게다가 compile를 위해선 <a href="http://caml.inria.fr/" target="_blank">ocaml</a> 이라는 언어를 사용해야 하는데, 물론 centos 배포본에도 없다.(슬슬 귀찮아지기 시작한다.) 그래서 그냥 unison rpm 설치를 하기로 했다.</p>
<p>rpm찾기는 여기서 : <a href="http://www.rpmfind.net/linux/rpm2html/search.php?query=unison">http://www.rpmfind.net/linux/rpm2html/search.php?query=unison</a></p>
<pre class="brush: shell;">wget ftp://195.220.108.108/linux/dag/redhat/el5/en/i386/dag/RPMS/unison-2.32.52-1.el5.rf.i386.rpm
rpm -Uvh unison-2.32.52-1.el5.rf.i386.rpm</pre>
<p><strong>case : ubuntu</strong></p>
<p>ubuntu 패키지는 최신은 아니다. 안정버젼은 2.32.52-1이므로 필요하면 구해다 깔아봄도 괜찮다.</p>
<pre class="brush: shell;">apt-get install unison</pre>
<p>양쪽 서버에 똑같이 깔아준다.(버젼이 맞아야 한다.)</p>
<p>unison사용에서 from to가 따로없다.</p>
<pre class="brush: shell;">unison /var/www/test ssh://xxx.xxx.xxx.xxx//var/www/test -batch -fastcheck=true</pre>
<p>보통은 <a href="http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html">메뉴얼</a>처럼 보통은 profile을 $HOME/.unison/ 디렉토리에 만들어 사용하는게 좋다. 실제로 몇가지 테스트를 해봤는데, batch모드에서 같은 이름의 파일이 다른 지점에 각각 생성되면 conflict가 나서 propagate가 진행되지 않는다.</p>
<p>이럴때에는 conflict파일을 처리하는 정책을 세워줘야 하는데 prefer옵션을 사용한다. force옵션은 conflict상황이 아닌 상태에서도 정책이 적용되니 주의가 필요하다. prefer에 ROOT를 기재하면 그 root에 기반해서 파일을 sync한다. root대신 newer, older를 사용하면 times옵션을 같이 사용해야 하며, 수정시간에 맞게 sync해준다.(단 이때 퍼미션에 주의한다.)</p>
<pre class="brush: shell;">vi /home/xxxx/.unison/profile1
# Unison preferences file
root=/home/xxxx
root=ssh://xxx.xxx.xxx.xxx//home/xxxx
path=test
batch=true
fastcheck=auto
prefer=/home/xxxx</pre>
<p>cron으로 돌리기 위해선 그냥 생짜 명령어는 안되고 스크립트를 만들어서 $HOME변수를 지정해줘야 한다. cron으로 돌아갈때는 home을 / 로 생각하기  때문에 permission denied 오류가 나온다. 또한 두 서버간 파일들의 pemmission은 rw 가 되어야 한다. 그러므로 스크립트 함수를 만들어서 충분한 테스트를 해보는게 좋다.</p>
<pre class="brush: shell;">#!/bin/sh
HOME=/var/www/backup/log
unison profile1</pre>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/install-unison/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install Memcached</title>
		<link>http://yupmin.net/entry/install-memcached</link>
		<comments>http://yupmin.net/entry/install-memcached#comments</comments>
		<pubDate>Thu, 05 Aug 2010 01:54:43 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=96</guid>
		<description><![CDATA[case centos 일단centos 배포본에는 memcached가 없다 그래서 소스컴파일로 설치한다.(root로 가정) yum install libevent libevent-devel wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz tar -xvzf memcached-1.4.0.tar.gz cd memcached-1.4.0 ./configure --with-libevent=/usr/lib/ make; make install 기본 설정 파일도 만들어주자. vi /etc/memcached.conf #Memory a usar -m 16 # default port -p 11211 # user to run daemon nobody/apache/www-data -u nobody # only listen locally -l [...]]]></description>
			<content:encoded><![CDATA[<p><strong>case centos</strong><br />
일단centos 배포본에는 memcached가 없다 그래서 소스컴파일로 설치한다.(root로 가정)</p>
<pre class="brush: shell;">yum install libevent libevent-devel
wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
tar -xvzf memcached-1.4.0.tar.gz
cd memcached-1.4.0
./configure --with-libevent=/usr/lib/
make; make install</pre>
<p>기본 설정 파일도 만들어주자.</p>
<pre class="brush: shell;">vi /etc/memcached.conf
#Memory a usar
-m 16
# default port
-p 11211
# user to run daemon nobody/apache/www-data
-u nobody
# only listen locally
-l 127.0.0.1</pre>
<p>init script 도 생성해준다. 참조 사이트</p>
<ul>
<li><a href="http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/" target="_self">http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/</a></li>
<li><a href="http://www.dev411.com/wiki/Memcached_startup_files_for_Red_Hat_%28RHEL%29" target="_self">http://www.dev411.com/wiki/Memcached_startup_files_for_Red_Hat_%28RHEL%29</a></li>
</ul>
<p>일단 만들어 놓은 스크립트가 있으니 다운받아 사용도록 하자</p>
<p>memcached init script downlod : <a href="http://yupmin.net/wp-content/uploads/2010/08/memcached_script.tar.gz">memcached_script.tar.gz</a></p>
<pre class="brush: shell;">wget http://yupmin.net/wp-content/uploads/2010/08/memcached_script.tar.gz
tar xvfz memcached_script.tar.gz
mv memcached /usr/local/bin/start-memcached
mv start-memcached /etc/init.d/memcached
chmod 755 /usr/local/bin/start-memcached
chmod 755 /etc/init.d/memcached</pre>
<p><strong>case ubuntu</strong></p>
<p>유분투에는 쉽게 설치 패키지가 준비되어있다.(root로 가정)</p>
<pre class="brush: shell;">apt-get install memcached
service memcached start</pre>
<p><strong>case centos</strong></p>
<p>memcached php 관련 패키지는 centos에 있다.</p>
<pre class="brush: shell;">yum install php-pecl-memcache</pre>
<p>혹은  php버젼이 업데이트 되거나 몇가지 안되는 경우가 있다 이럴땐 직접 컴파일한다.</p>
<pre class="brush: shell;">wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar xvfz memcache-2.2.5.tgz
cd memcache-2.2.5
phpize
./configure --enable-memcache
make
cp modules/memcache.so /usr/lib/php/modules</pre>
<p>php에 모듈을 셋팅해주자.</p>
<pre class="brush: shell;">vi /etc/php.d/memache.ini
extension=memcache.so</pre>
<p>memcached php test : <a href="http://dorkage.net/2009/02/memcached-test/" target="_blank">http://dorkage.net/2009/02/memcached-test/</a></p>
<p>A quick way to get memcached status : <a rel="bookmark" href="http://www.mysqlperformanceblog.com/2008/11/26/a-quick-way-to-get-memcached-status/">http://www.mysqlperformanceblog.com/2008/11/26/a-quick-way-to-get-memcached-status/</a><br />
mysql 컨퍼런스에서 한 외국인 강사가 발표했던 키노트 : <a href="http://download.tangent.org/talks/Memcached%20Study.pdf">http://download.tangent.org/talks/Memcached%20Study.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/install-memcached/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mytop – 유용한 MySQL 프로세스 관리</title>
		<link>http://yupmin.net/entry/install-mytop</link>
		<comments>http://yupmin.net/entry/install-mytop#comments</comments>
		<pubDate>Tue, 03 Aug 2010 09:39:59 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mytop]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://yupmin.net/?p=14</guid>
		<description><![CDATA[MySQL의 프로세스는 보통 mysqladmin prosesslist 등으로도 관리가 가능하나 실시간으로 보기에는 불편하다 그래서 많이 사용하는게 mytop &#8211; a top clone for MySQL 이다. case : ubuntu apt-get install mytop case : centos (필요 라이브러리 : TermReadKey http://search.cpan.org/~jstowe/) wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz tar xvfz TermReadKey-2.30.tar.gz cd TermReadKey-2.30 perl Makefile.PL make;make install wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz tar xvfz mytop-1.6.tar.gz cd mytop-1.6 perl [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL의 프로세스는 보통 mysqladmin prosesslist 등으로도 관리가 가능하나 실시간으로 보기에는 불편하다</p>
<p>그래서 많이 사용하는게 <a href="http://jeremy.zawodny.com/mysql/mytop/" target="_blank">mytop &#8211; a top clone for MySQL</a> 이다.</p>
<p><strong>case : ubuntu</strong></p>
<pre class="brush: shell;">apt-get install mytop</pre>
<p><strong>case : centos</strong> (필요 라이브러리 : TermReadKey <a href="http://search.cpan.org/%7Ejstowe/" target="_blank">http://search.cpan.org/~jstowe/</a>)</p>
<pre class="brush: shell;">wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz
tar xvfz TermReadKey-2.30.tar.gz
cd TermReadKey-2.30
perl Makefile.PL
make;make install

wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz
tar xvfz mytop-1.6.tar.gz
cd mytop-1.6
perl Makefile.PL
make;make install</pre>
<p>혹시 설치시 &#8216;Warning: prerequisite DBD::mysql 1 not found.&#8217;에러가 난다면</p>
<pre class="brush: shell;">yum install perl-DBD-mysql</pre>
<p>만일 s/// 식으로 에러가 나올때는 <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=12;filename=fix.455901.diff;att=1;bug=455901" target="_blank">fix.455901.diff </a>로 패치</p>
<p>사용자 디렉토리에 .mytop 파일을 만들어 두면 쉽게 현재 서버를 모니터링 할수 있다. (참조<br />
: <a href="http://jeremy.zawodny.com/mysql/mytop/mytop.html" target="_blank">http://jeremy.zawodny.com/mysql/mytop/mytop.html</a>)</p>
<p><a href="http://yupmin.net/wp-content/uploads/2010/08/1235828685.gif" rel="lightbox[14]"> <img class="aligncenter size-medium wp-image-49" title="1235828685" src="http://yupmin.net/wp-content/uploads/2010/08/1235828685-300x197.gif" alt="mytop screenshot" width="300" height="197" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/install-mytop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Replication Backup</title>
		<link>http://yupmin.net/entry/mysql-replication-backup</link>
		<comments>http://yupmin.net/entry/mysql-replication-backup#comments</comments>
		<pubDate>Tue, 03 Aug 2010 03:53:28 +0000</pubDate>
		<dc:creator>엽기민원</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://wordpress.yupmin.com/?p=1</guid>
		<description><![CDATA[MySQL의 Replication은 부하분산 도구로 쓸수도 있지만, DB 백업의 용도로도 사용할수 있다. 보통 다른곳에 레퍼런스가 많으나, 간단히 백업을 할수 있는 script를 만들었다. case : ubuntu master, slave 기본셋팅 일단 master, slave 서버의 my.cnf 파일 수정, 일단 bind-adress 주석처리 # localhost which is more compatible and is not less secure. # bind-address = 127.0.0.1 master &#8211; my.cnf [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL의 Replication은 부하분산 도구로 쓸수도 있지만, DB 백업의 용도로도 사용할수 있다.</p>
<p>보통 다른곳에 레퍼런스가 많으나, 간단히 백업을 할수 있는 script를 만들었다.</p>
<p><strong>case : ubuntu</strong></p>
<h3>master, slave 기본셋팅</h3>
<p>일단 master, slave 서버의 my.cnf 파일 수정, 일단 bind-adress 주석처리</p>
<pre class="brush: shell;"># localhost which is more compatible and is not less secure.
# bind-address           = 127.0.0.1</pre>
<p>master &#8211; my.cnf 수정</p>
<pre class="brush: shell;">server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db            = exampledb</pre>
<p>slave &#8211; my.cnf 수정</p>
<pre class="brush: shell;">server-id=2
master-connect-retry    = 60
replicate-do-db         = exampledb</pre>
<p>master 에 기본 접근권한 설정</p>
<pre class="brush: sql;">GRANT REPLICATION SLAVE ON *.* TO 'master_user'@'%' IDENTIFIED BY 'master_password';
FLUSH PRIVILEGES;</pre>
<h3>replication-master.sh</h3>
<pre class="brush: shell;">#!/bin/sh
# usage : replicate-master.sh
# setting zone : start
ROOT_ID=root
ROOT_PASSWORD=fill_me
TARGET_DB=exampledb
TARGET_PATH=/var/lib/mysql/exampledb
SLAVE_SSH_ID=fill_me
SLAVE_IP=fill_me
MATHOD=1 #1:hotcopy 0:dump
# setting zone : end

if [ $MATHOD = 1 ]; then
  sudo tar cvfPz mysql-snapshot.tar.gz $TARGET_PATH
else
  mysqldump -u$ROOT_ID -p$ROOT_PASSWORD --opt $TARGET_DB &gt; ~/.snapshot.sql
fi
mysql -u$ROOT_ID -p$ROOT_PASSWORD $TARGET_DB -e "UNLOCK TABLES"
if [ $MATHOD = 1 ]; then
  scp ~/mysql-snapshot.tar.gz $SLAVE_ID@$SLAVE_IP:~
  sudo rm ~/mysql-snapshot.tar.gz
else
  scp ~/.snapshot.sql $SLAVE_SSH_ID@$SLAVE_IP:~
  rm ~/.snapshot.sql
fi</pre>
<h3>replication-slave.sh</h3>
<pre class="brush: shell;">#!/bin/sh
# usage : replicate-slave.sh [master_log_file] [master_log_pos]
if [ -z $1 ] || [ -z $2 ]; then
 echo "Usage: $0 [master_log_file] [master_log_pos]" 1&gt;&amp;2
 exit 1
fi
# setting zone : start
ROOT_ID=root
ROOT_PASSWORD=fill_me
TARGET_DB=exampledb
TARGET_PATH=/var/lib/mysql/exampledb
MASTER_IP=fill_me
MASTER_ID=master_user
MASTER_PASSWORD=master_password
MATHOD=1 #1:hotcopy 0:dump
# setting zone : end

MASTER_LOG_FILE=$1
MASTER_LOG_POS=$2
if [ $MATHOD = 1 ]; then
 if [ ! -e ~/mysql-snapshot.tar.gz ]; then
 echo "Usage: excute master-server's 'replicate-master.sh' script"
 exit 1
 fi
else
 if [ ! -e ~/.snapshot.sql ]; then
 echo "Usage: excute master-server's 'replicate-master.sh' script"
 exit 1
 fi
fi
mysqladmin -u$ROOT_ID -p$ROOT_PASSWORD stop-slave
sudo rm -rf $TARGET_PATH
if [ $MATHOD = 1 ]; then
 sudo tar xvfPz ~/mysql-snapshot.tar.gz
 rm mysql-snapshot.tar.gz
else
 mysql -u$ROOT_ID -p$ROOT_PASSWORD $TARGET_DB &lt; ~/.snapshot.sql
 rm .snapshot.sql
fi
mysql -u$ROOT_ID -p$ROOT_PASSWORD $TARGET_DB -e "CHANGE MASTER TO MASTER_HOST='$MASTER_IP', MASTER_USER='$MASTER_ID', MASTER_PASSWORD='$MASTER_PASSWORD', MASTER_LOG_FILE='$MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS"
mysqladmin -u$ROOT_ID -p$ROOT_PASSWORD start-slave
mysql -u$ROOT_ID -p$ROOT_PASSWORD $TARGET_DB -e "SHOW SLAVE STATUS \G"</pre>
<h3>Usage</h3>
<ol>
<li>master, slave my.cnf를 수정한다.</li>
<li>기본적인 데이타베이스 셋팅 및 권한에 대한 부분들을 체크 MySQL 서버를 리스타팅 한다.</li>
<li>&#8216;replicate-master.sh&#8217;, &#8216;replication-slave.sh&#8217;의 setting zone을 수정한다.</li>
<li>master서버에서 &#8216;replicate-master.sh&#8217; 스크립트를 실행해서 나오는 File, Position을 &#8216;replication-slave.sh&#8217; 인수로 같이 실행시키된다.</li>
<li>백업시 테이블이 lock되니 <a title="http://blog.pages.kr/232" href="http://blog.pages.kr/232" target="_blank">http://blog.pages.kr/232</a> 를 참조</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://yupmin.net/entry/mysql-replication-backup/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
