2014년 12월 10일 수요일

Jenkins + apache 구성하기

개요
Jeankins는 tomcat java application이므로, apache와 동일 서버를 사용하면서 80번 기본 http포트로 접근하려면 apache측에서 proxy연결을 해줄 필요가 있음.

특정 virtual host에서 jenkins가 proxy되도록 설정

참고자료
https://wiki.jenkins-ci.org/display/JENKINS/Running+Jenkins+behind+Apache
http://qiita.com/dhtn/items/0e79c7d16a8c209f7c8b
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions

전제
apache proxy를 이용하므로 관련 모듈이 설치되어있을 필요가 있음

수순

Jenkins의 인스톨
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat-stable/jenkins-ci.org.key sudo yum install jenkins sudo yum install java

Jenkins의 테스트
service jenkins start

http://hostname:8080/
으로 브라우저에서 접근해서 동작을 확인함.




Jenkins의 apache proxy연동


service jenkins stop
일단 정지후

/etc/sysconfig/jenkins
를 수정

AJP포트를 지정
#JENKINS_AJP_PORT="8009"

JENKINS_AJP_PORT="9009"

프록시로 구동하므로, 로컬IP에 한정해서 listen하도록 설정
#JENKINS_LISTEN_ADDRESS=""
JENKINS_LISTEN_ADDRESS="127.0.0.1"

AJP포트를 프록시 하게끔 virtual host를 구성


/etc/httpd/conf.d/jenkins.conf 
<VirtualHost *:80>

   ServerName jenkins.******.com # 각자의 환경에 맞게 설정

   ProxyRequests Off
   ProxyPreserveHost On 
   AllowEncodedSlashes NoDecode

   <Proxy *:80>
       Order deny,allow
       Allow from all
   </Proxy>

   ProxyPass / ajp://localhost:9009/
   ProxyPassReverse / ajp://localhost:9009/

   <Location />
       Order allow,deny
       Allow from all
   </Location>


</VirtualHost>

재시작시에 서비스를 기동하도록 설정
chkconfig jenkins on

이렇게 설정하면 기동은 되는데 아래 문제가 발생함.




https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+says+my+reverse+proxy+setup+is+broken

우선적으로 dismiss하여 처리하였으나 향후 문제가 발생할경우에는 위 링크를 확인해볼 필요가 있을듯함.

redmine과 SCM을 연동함으로서 얻을수 있는 것들.

개요
redmine을 활용함에 있어서 실제로 repository의 커밋과 일감(티켓, 이슈...)과의 연관관계를 지정하며 프로젝트 운용을 하고싶음. 따라서 redmine과 git/svn과의 연동을 시험해봄.

전제
redmine과 각 scm(source code management) 시스템은 1개의 물리적 서버에서 공존하는 형태로 구성(redmine이 로컬에 있는 scm밖에 지원하지 않음, 따로 떼어낼 이유도 없는 고로)

기능
특정 커밋과 이슈의 연관관계의 성립

-> 커밋할 때 메세지에 IssueID #0000과 같은형태로 연관지어주면 됨.
IssueID와 같은 키워드의 설정은 [관리->설정->저장소] 의 [일감 참조에 사용할 키워드들]에서 지정함.






간단한 diff 확인기능

커밋 통계기능

linux locale 설정문제

개요
gitolite도입 과정에서 발생하는 문제
svn접근시에도 발생

특정 유저로 접근시, 로케일이 설정되지 않아 LANG설정시에 문제가 발생함.

locale설정문제

gitolite의 설정을 한차례 마치고, 로케일 설정을 하지 않은 상태에서
ssh로 gitolite유저로 접근했을 경우, 다음과 같은 에러메세지를 확인하는 경우가 있음

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"

    are supported and installed on your system.

혹은, svn co등을 통해 체크아웃을 실시하려 했을 경우에도 하단과 같은 문제가 발생함

svnserve: warning: cannot set LC_CTYPE locale
svnserve: warning: environment variable LC_CTYPE is UTF-8
svnserve: warning: please check that your locale name is correct


참고자료
https://github.com/cou929/please-sleep/blob/master/posts/gitolite-setup-and-locale-warn-on-centos.md

해결책
결론적으로 로케일 설정을 실시하면 문제는 해결됨.

locale -a | grep ko_KR

/etc/sysconfig/i18n에서 수정을 실시.

LANG="ko_KR.utf8"

LC_CTYPE="ko_KR.utf8"

localdef를 통한 설정은 효과를 볼 수가 없었음.

Redmine을 이용해 git연동시 유의점

개요

redmine에서 제공하는 git연동기능을 이용함에 앞서 구성시 트러블 슈팅.

참고자료
http://qiita.com/isaac-otao/items/1e6b57809e3841d600c2
http://tanyaolinux.blogspot.jp/2011/09/redminegit.html
https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerUserSwitching
https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerUser

전제

apache+redmine을 이용해서 passenger을 통해 구성.
mod_dumpio를 이용해서 웹에서의 접근시의 상태를 모니터링함
이하의 에러 로그들은 이후 /var/log/httpd/error.log에서 확인된 것들

케이스1

App 4589 stderr: sh: /usr/local/bin/git: No such file or directory

git의 패스가 인식되지 않음. 패스가 정상적으로 설정이 안된경우.
이 경우는 서버의 구성이 샘플들과는 다른 경우이므로
redmine혹은 적절한 계정으로

[redmine@ip-***.***.***.*** /]$ which git
/usr/bin/git

과 같이 확인하여

/...redmine path.../config/configuration.yml


scm_git_command: /usr/bin/git
과 같은 형태로 절대경로로 수정해줌.

케이스2
App 3836 stderr: fatal: Not a git repository: '/git/gitscripts.git'


지정경로가 git-bare-repository가 아니거나, 경로를 인식할 수 없음 (권한문제)
지정 repository가 bare-repository임이 확실하다면, 권한문제를 해결한것.
기본적으로 웹에서 접근하는 경우 apache2.4의 경우는 유저그룹이 apache로 설정되어줄 필요가 있음. 그 이전에 관해서는  www-data일거라 사료됨.

케이스3

App 4750 stderr: fatal: Failed to resolve HEAD as a valid ref.

git-bare-repository까지인지는 확인했으나, 내부 권한문제 등으로 접근이 불가함.
redmine의 유저(apache그룹이 설정된)로, 로컬상에서 git clone을 실시. 내부 파일들의 퍼미션 상태상 발생하는 문제를 확인함. 이후 내부의 퍼미션을 조정.

여타 투고상에서 권한을 맞춰주어라, 그룹을 맞춰주어라 하는 문제점이 지적되고 있는데, 근본적으로 이번의 경우 apache+passenger을 이용한 구성이기 때문에 신경써야 할점은

gitolite (ssh)를 통해서 접근했을 경우와 그 외의 여타 요인으로 인한 bare-repository등에서의 접근과, 실질적으로 redmine 이 이용하고있는 passenger가 어떤 유저로서 로컬파일에 접근하는지가 관건이 됨.

passenger는 리눅스 계정(유저)를 다음과같이 정의하고있음.

https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html#PassengerUserSwitching

If user switching support is enabled, then Phusion Passenger will by default run the web application as the owner of the file config/environment.rb (for Rails apps) or config.ru (for Rack apps). This option allows you to override that behavior and explicitly set a user to run the web application as, regardless of the ownership of environment.rb/config.ru.

따라서, user switching support를 enable해줄 필요가 있음.

구체적으로 이 설정은 passenger-config 이라는 설정파일상에 PassengerUserSwitching on이라는 행을 넣어 줌으로서 상기 environment.rb파일 등의 오너설정(그룹)을 변경해 줌으로서 마무리됨.

passenger-config은 모듈을 인스톨했을때 위치가 틀려질거라 생각되므로

sudo find / -name "passenger-config"

과 같은 커맨드로 대상 파일을 찾아 상기의 1행을 추가해줄것.

2014년 12월 5일 금요일

Redmine2를 Apache2 환경하에 구축하기

개요

Redmine은 ruby-on-rails-application이므로, 혹여 apache가 80/443포트를 점거하고 있는 상황하에 있어서 기본포트의 http/https를 이용하려 할 경우는 apache와의 연계가 필요함

전제

ImageMagick
ImageMagick-devel
mysql
mysql-devel
ruby
ruby-devel
rake

상기 모듈들이 인스톨된 상태일 필요가 있음.(그냥 redmine설치에만 필요)

redmine의 인스톨

아래 참고자료 페이지를 참조.
http://www.redmine.org/projects/redmine/wiki/redmineinstall

순서대로 인스톨을 진행하면 큰 문제없이 ruby서버를 통한 기동까지 도달할 수 있음.

redmine 의 passenger모듈을 통한 rails<->apache의 연계

아래 참고자료 페이지를 참조.
http://redmine.jp/tech_note/apache-passenger/
redmine유저로 아래 커맨드를 순서대로 실행

아래의 명령 실행시, AWS기준으로 micro인스턴스에서는 메모리가 부족하여 빌드에 실패할 수가 있으니, 인스턴스를 large이상으로 일시적으로 설정하여 인스톨을 진행할것.

gem update
gem install passenger
passenger-install-apache2-module 
(이 과정에서 특정 패스에 대한 권한이 요구됨. root로 일시적으로 설치를 진행하거나, 인스톨러가 권한이 필요한 패스를 알려주므로 해당 패스에 대한 접근권한을 일시적으로 설치를 진행할 유저가 가지게끔 설정해 줄 필요가 있음)

이후에 passenger-install-apache2-module의 마지막에서 알려주는대로 아파치의 설정을 실시함.
구체적으로는 모듈을 로드하는 부분을 추가하고, virtual host설정을 실시함.

이때 주의해야할것이 virtualhost의 documentRoot인데
예를들어 /??/redmine에 redmine의 소스가 배치되었다고 한다면
documentRoot로 지정되어야할 경로는
/??/redmine/public일 필요가 있음.

참고자료

http://www.redmine.org/projects/redmine/wiki/redmineinstall
http://www.redmine.org/boards/2/topics/5254?r=40570
http://redmine.jp/tech_note/apache-passenger/

트러블슈팅

https://gist.github.com/satzz/261b4cba289a4b2ff3a9
mysql, RMagick등의 관련의 에러가 발생할시 각 서버환경하의 패키지 매니저(yum, apt-get 등)를 통해 전제에 적혀있는 모듈이 인스톨 되어있는지 확인 및 시험을 해볼것.

2014년 12월 4일 목요일

Mac OSX에서 sshfs로 원격 스토리지 mount하기

참조
http://stackoverflow.com/questions/24309293/why-cant-i-setup-an-sshfs-share-osxfuse-file-system-is-not-available-error

전제
ssh-agent를 통해 타 원격지에 접근 가능한상태일것.

수순
brew install sshfs

이 과정에서 confilict가 발생시 --force를 붙여줌.

mount하기

sshfs {id@hostname}:{path} {dir_path}

예를들면

sshfs ruel: local_dir_name/

호스트명 뒤에는 :를 붙여줄것. (아니면 인식안함)
경로는 필요없으면 생략가능, id마저도 /.ssh/config에 해결되어있을경우 불필요.

이 과정에서 OSX의 경우 아래와같은 메세지를 목격한바 있는데, 이는 위의 참조자료를 참고로해 

brew info osxfuse

를 입력시 나오는 안내문중 가장 마지막 실행줄

sudo /bin/cp -RfX /usr/local/opt/osxfuse/Library/Filesystems/osxfusefs.fs /Library/Filesystems/

sudo chmod +s /Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs

를 수행해둘 필요가 있음.

Mac OSX에서 AWS S3를 mount하기

참고자료

http://qiita.com/isaoshimizu/items/c9d0f88ce30ae2079dfa

준비

brew가 인스톨 되어있을것.
aws iam에 s3에 접근가능한 유저를 작성해둘것

수순

brew를 통한 패키지 인스톨

brew update
brew install curl libxml2 fuse4x fuse4x-kext
brew install s3fs

fuse4x의 설정

이하 명령을 수행하기에 앞서 fuse의 버전이 변하지 않았는지를 위 brew설치 과정중에 확인할것. 혹은

ls /usr/local/Cellar/fuse4x-kext/
명령을 통해 버전을 확인할것. 아래에 0.9.2로 되어있는 버전이 다를경우 그 부분은 변경.


sudo cp -rfX /usr/local/Cellar/fuse4x-kext/0.9.2/Library/Extensions/fuse4x.kext /System/Library/Extensions/
sudo chmod +s /System/Library/Extensions/fuse4x.kext/Support/load_fuse4x
sudo kextload /System/Library/Extensions/fuse4x.kext/

AWS접근 권한의 설정
AccessToken / SecretKey를 설정

vi ~/.passwd-s3fs

내용물

ACCESS_KEY:SECRET_KEY

그냥 accesskey/secretkey를 :로 이어붙임.

permission은 아래와 같이 설정

chmod 600 ~/.passwd-s3fs

마운트하기

mkdir ~/s3
s3fs BUCKET_NAME ~/s3

언마운트하기

umount ~/s3