Git을 사용하게 되면 따라오는 가장 유명한 도구들이 두 가지가 있다.
하나는 앞에서 살펴본 계정 관리를 위한 Gitolite,
다른 하나는 코드 리뷰를 위한 Gerrit 이다.

특징은 Gitolite, Gerrit 두 가지 모두 Git 전용의 도구들이다.

Google에서 사용하고 있는 코드 리뷰 도구라고 해서 Git의 인기와 함께 각광을 받고 있는 Gerrit !!!

"코드 리뷰" 도구 시장에는 아직 세상을 통일한 절대 막강 도구가 마땅히 없다.
야후에서 사용한다고 하여 유명한 "리뷰 보드(Review Board)"가 있지만, Git 지원은 아직 기본적인 수준이다.

현재 현장 분위기는 Git을 사용한다면 코드 리뷰는 당연히 Gerrit을 사용한다고 생각하고 있다.



이번 포스팅을 위해서 몇 일을 날려가며 엄청 고생을 했다.
아무리 생각해도 이런 빈약한 자료들을 가지고도 Gerrit을 셋팅해서 잘 사용하시는 분들은 전부 고수들인가보다.
범인 수준인 필자는 정말 엄청 개고생(?)을 해서야 겨우 Gerrit 화면을 볼 수 있었다.

하지만, 언제나 그렇지만 성공하고나서 보면... 별것도 아닌 수준이었는데....라는 생각이 든다 ^^



1. Ready

     - Gerrit을 사용하기 위해서는 다음의 조건이 필요하다.
          ▷ JDK          : version 1.6 이상
          ▷ Database  : Gerrit 내장 H2, 또는 MySQL, PostgreSQL

     - JDK 설치는 다음의 포스팅으로 따라하면 된다.
     - http://whatwant.tistory.com/438

     - Gerrit 자체도 두 가지 방식으로 다운로드 받을 수 있다.
          ▷ Binary  : Jenkins와 같이 *.war 파일로 다운로드 받을 수 있다.
          ▷ Source : 빌드하여 바이너리로 직접 만들 수 있다. Apache Maven으로 빌드할 수 있다.

     - 좋은건지 나쁜건지 모르겠지만, 버전업이 상당히 빠른 Gerrit이다.
     - 안전성을 올리기 위한 것이라면 그나마 괜찮은데, 기능적인 면까지 많이 바뀌는 버전업이라 부담스럽기도 하다.



2. Download

     - 굳이 빌드를 수행할 필요없이 *.war 파일로 다운로드 받자.



     - 포스팅을 하던 중에 업그레이드가 계속 되어 결국 스크린샷도 새로 만들어야 했다는... ^^



3. PostgreSQL

     - 이 블로그를 계속 봐오신 분들이라면 아시겠지만, 개인적으로 PostgreSQL을 사랑하는 것을 아실것이다!
     - postgresql이 설치되어있지 않은 경우엔, 그냥 [ sudo apt-get install postgresql ] 실행하면 된다.

     - Gerrit을 위한 PostgreSQL 계정과 db를 만들어줘야 한다.


$ sudo su - postgres

$ createuser -A -D -P -E gerrit2
$ createdb -E UTF-8 -O gerrit2 reviewdb

$ exit

     - 위와 같이 깔끔하게 끝~



4. Gerrit User

     - 참고로 Gerrit의 현재 버전은 version 2.4.1 이다. 그래서 그런지 Gerrit도 그냥 부르지 않고, Gerrit2 라고 한다.
     - Gerrit2를 위한 계정을 하나 만들고 그 계정에 모두 맞추자.


$ sudo adduser gerrit2
$ sudo chown gerrit2.gerrit2 ./gerrit-2.4.2.war
$ sudo su gerrit2


     - "gerrit2" 계정을 만들고 gerrit-2.4.1.war 파일을 해당 계정 소유로 만든 후 gerrit2 계정으로 su하자.




5. apache

     - 이번에는 웹서버로 apache로 셋팅을 해보겠다.
     - 나중에 시간이 잠시나면 꼭 nginx 환경에서 다시 해보도록 하겠다.

 

$ sudo apt-get install apache2


     - 설치를 했으면 확인을 하자.


     - Gerrit에서는 웹서버의 proxy 기능을 요구한다.

 

$ sudo apt-get install libapache2-mod-proxy-html


     - apache2의 proxy 모듈을 추가로 설치를 해주고,


$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo service apache2 restart


     - 웹서버 준비는 여기까지 끝~



6. Gerrit Install

     - 이제 준비 작업은 모두 끝났다. 설치를 진행하면 된다.

     - Gerrit의 기본적인 구성은 Jenkins와 같은 *.war 파일 구동방식이다.
     - 차이가 있다면, init 과정이 있다는 점 정도?!

 

$ sudo su gerrit2
$ cd /srv/install/gerrit


     - 설치과정을 진행하기 전에 권한을 맞추기 위한 선행 준비를 먼저 하자.


$ java -jar ./gerrit-2.4.2.war init -d /srv/workspace/gerrit


     - 위에서 명시한 디렉토리는 gerrit2 계정 권한으로 미리 만들어 두었다.

*** Gerrit Code Review 2.4.2
***

Create '/srv/workspace/gerrit' [Y/n]?  (Enter)

*** Git Repositories
***

Location of Git repositories   [git]: repositories

*** SQL Database
***

Database server type           [H2/?]: ?
       Supported options are:
         h2
         postgresql
         mysql
         jdbc
Database server type           [H2/?]: postgresql
Server hostname                [localhost]: (Enter)
Server port                    [(POSTGRESQL default)]: (Enter)
Database name                  [reviewdb]: (Enter)
Database username              [gerrit2]: (Enter)
gerrit2's password             : (passwd)
              confirm password : (passwd)


     - 이어서 계속 진행하자.


*** User Authentication
***

Authentication method          [OPENID/?]: ?
       Supported options are:
         openid
         http
         http_ldap
         client_ssl_cert_ldap
         ldap
         ldap_bind
         custom_extension
         development_become_any_account
Authentication method          [OPENID/?]: http
Get username from custom HTTP header [y/N]? (Enter)
SSO logout URL                 : (Enter)

*** Email Delivery
***

SMTP server hostname           [localhost]: smtp.gmail.com
SMTP server port               [(default)]: 587
SMTP encryption                [NONE/?]: (Enter)
SMTP username                  [gerrit2]:  @gmail.com
   @gmail.com's password  : (passwd)
              confirm password : (passwd)

*** Container Process
***

Run as                         [gerrit2]: (Enter)
Java runtime                   [/usr/local/java/jdk1.7.0_05/jre]: (Enter)
Copy gerrit.war to /srv/workspace/gerrit/bin/gerrit.war [Y/n]? (Enter)
Copying gerrit.war to /srv/workspace/gerrit/bin/gerrit.war


     - 인증 방식은 [ http ]로 정했다.
     - SMTP 설정은 gmail을 활용하기로 정했다. (이메일 주소는 살짝 지웠다 ^^ 다 알겠지만서도...)

 

*** SSH Daemon
***

Listen on address              [*]: (Enter)
Listen on port                 [29418]: (Enter)

Gerrit Code Review is not shipped with Bouncy Castle Crypto v144
  If available, Gerrit can take advantage of features
  in the library, but will also function without it.
Download and install it now [Y/n]?
Downloading http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ... OK
Checksum bcprov-jdk16-144.jar OK
Generating SSH host key ... rsa... dsa... done

*** HTTP Daemon
***

Behind reverse proxy           [y/N]? (Enter)
Use SSL (https://)             [y/N]? (Enter)
Listen on address              [*]: (Enter)
Listen on port                 [8080]: (Enter)

Initialized /srv/workspace/gerrit
Executing /srv/workspace/gerrit/bin/gerrit.sh start
Starting Gerrit Code Review: OK
Waiting for server to start ... OK
Opening browser ...
No protocol specified


     - 나중에 설정 내용은 변경할 수 있으므로 최대한 기본값으로 정했다.

     - 그런데, 마지막 줄이 마음에 걸린다. [ No protocol specified ]




7. Configuration

     - 여기에서 바로 Gerrit이 실행되면 좋겠는데, 몇 가지 더 설정할 것들이 많다.

     - 앞에서도 언급을 했지만, 우리는 Apache의 Proxy를 활용하여 Gerrit을 띄울 것이다.
     - 그리고 Apache의 http authentication을 적용할 것이다.

     - 우선 관리자 계정 하나를 만들어 넣자.

$ sudo su gerrit2
$ htpasswd -c /srv/workspace/gerrit/etc/passwords "admin"


     - 앞의 설치 과정을 통해 만들어진 gerrit site 의 etc 디렉토리에 passwords 파일을 생성하는 것이다.
     - 앞으로 Gerrit 웹페이지는 이 파일을 이용하여 인증을 하게 된다.

     - Apache의 VirtualHost도 설정을 해주자.

$ sudo nano /etc/apache2/sites-available/gerrit2


<VirtualHost *:8081>
        ServerName localhost

        ProxyRequests Off
        ProxyVia Off
        ProxyPreserveHost On

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

        <Location /login/>
                AuthType Basic
                AuthName "Gerrit Code Review"
                Require valid-user
                AuthUserFile /srv/workspace/gerrit/etc/passwords
        </Location>

        ProxyPass / http://127.0.0.1:8080/
</VirtualHost>


     - 위에서 각 포트가 중요한데, VirtualHost 에서는 8081 포트를 사용하고
     - Proxy에서는 8080 포트를 사용한다.

     - 추가로 sites-enabled 디렉토리에 동적링크도 만들어주자.

$ cd /etc/apache2/sites-enabled
$ sudo ln -s ../sites-available/gerrit2 ./001-gerrit2


     - 위와 같이 설정을 하였으면 Apache의 port 설정에도 추가해줘야 한다.

$ sudo nano /etc/apache2/ports.conf


NameVirtualHost *:8081
Listen 8081


     - 위와 같이 8081 포트에 대해서 설정을 추가로 적어주면 된다.

     - gerrit 의 설정값도 다시 한 번 살펴봐야 한다.

$ sudo su gerrit2
$ nano /srv/workspace/gerrit2/etc/gerrit.config


[gerrit]
        basePath = repositories
        canonicalWebUrl = http://localhost:8081/

[database]
        type = POSTGRESQL
        hostname = localhost
        database = reviewdb
        username = gerrit2

[auth]
        type = HTTP

[sendemail]
        smtpServer = smtp.gmail.com
        smtpServerPort = 587
        smtpUser =     @gmail.com

[container]
        user = gerrit2
        javaHome = /usr/local/java/jdk1.7.0_05/jre

[sshd]
        listenAddress = *:29418

[httpd]
        listenUrl = proxy-http://127.0.0.1:8080/

[cache]
        directory = cache


     - 위에서 빨간색으로 표시한 부분만 수정, 추가하면 된다.



8. restart

     - 재시작을 한 번 해보자.

$ sudo su gerrit2
$ cd /srv/workspace/gerrit/
$ ./bin/gerrit.sh restart


     - 이제 웹으로 확인을 해보자.


     - [ http://localhost:8081 ] 주소로 접속을 하면 위와 같이 이름과 암호를 물어본다.
     - 앞에서 "htpasswd"로 만든 계정을 이용해서 로그인하면 된다.


     - 드디어 길고 긴 과정을 거쳐서 gerrit의 화면이 나왔다.



9. Sign Out

     - 이렇게 설치를 했는데, 가장 원초적인 문제가 있다. 바로 [ Sign Out ]이 동작하지를 않는다.

     - 앞에서 [ gerrit.conf ] 파일을 수정할 때 넣은 [ canonicalWebUrl = http://localhost:8081/ ] 때문에 발생했다.
     - 하지만, 그 부분을 없애면 기본적인 동작도 하지 않는다.

     - 이 부분에 대한 해결책은 아직 찾지 못했다.
     - 찾게 되는 즉시 업데이트하도록 하겠다.

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

git man  (0) 2012.07.25
Gitweb + Apache2  (2) 2012.07.16
[004] 당신은 Git을 어떻게 읽나요?  (0) 2012.06.28
[003] Git의 탄생 비화  (2) 2012.06.26
[002] 분산 버전 관리 시스템 (Distributed Version Control System, DVCS)  (0) 2012.06.25

얼마전 회사에서의 행사(?)로 SSD를 구매했다.
그래서 이번 기회에 새로 OS도 갈아엎고, 하드디스크들도 한 번 점검을 해보고자 마음먹었다.

일단 어떻게 어떻게 C 드라이브에 새로 구매한 SSD를 연결하고,
XP에서 잘 지원하지도 않는 AHCI 설정을 위해 조금 쌩쑈를 하고.....^^

하드디스크 별로 자료들을 한군데로 모아놓고 로우레벨 포맷하고 다시 포맷하고...하는 등의 작업을 했다.
그리고 나서 하드디스크 상태를 점검해봤는데...


아니 이런... 주의 표시가?!
"치환된 섹터 횟수"........................?!

'Raw 수치'를 알아보기 힘드니까 10진수로 바꿔보자.


이렇게 바꾸고 보니 알아보기가 쉽긴하다.


아니~이런!!! 치환이 51번이나 되었단다.

그런데, 대체 "치환된 섹터 횟수"가 뭘 의미하지....?!

열심히 구글님께 여쭤보니.....
데이터를 쓰려다가 베드가 나와서 다른 곳에 대신 쓰게 된 횟수란다.
결국은 하드디스크에 베드가 나왔다는 것이다!!!

이런 된장~!!!





그래서 다른 유틸리티로 한 번 다시 점검해보기로 했다.

     - http://www.hdtune.com/

"HD Tune Pro" Trial 버전을 다운로드 받아서 설치, 실행해보았다.


역시나 노란색 줄이 주우우우욱~~~~~~ ㅠㅠ




여하튼 결론은 하드디스크에 베드가 발생을 했다는건데,
그러면 어떻게 해야할까?!

가장 아름다운 해결책은 하드디스크를 교환하는 것이다.

하지만, 사용시간을 보면 알겠지만 오랫동안 사용한 하드디스크이다.
     - 사용 시간    : 23360 시간 (약 973일)
     - 전원 투입수 : 773 회

버리고 새로 구매를 하던지, 아니면 부활을 시켜야하는데...
하드디스크가 지금 6개.... 그 중에 노란색 불이 3개....
포트가 부족해서 외장으로 사용하고 있는 하드디스크 2개는... 연결하기도 무섭다 ㅠㅠ
요즘 하드디스크 가격도 비싼데...

부활 좀 시키고... 멀쩡한 애들은 본체 안으로 밀어넣고, 상태 안좋은 애들을 외장으로 막돌려야겠다.


지금 에러가 있는 내 HDD의 상태를 정리해보니 위와 같다.
아... 찝찝해.... ㅠㅠ




그래서 저 HDD들을 부활할 수 있는 방법을 찾아봤다.
그랬더니 방법이 있기는 했다.
원천적인 해결방법은 아니겠지만, 그래도 한 번 해볼만한 시도이기는 해보였다.

     - http://www.hdd-regenerator.net/

그런데, 사실 좀 믿기 힘든 도구이기는 했다.
소프트웨어적인 에러가 아닌 물리적인 에러를 소프트웨어적으로 해결을 해준다니.... 이런 마술이!?

설명을 보면, 기계적 손상은 물론 해결하지 못하지만 자화특성으로 인한 손상은 해결할 수 있다고 한다.
특히 기계적 손상에 비해 자화특성으로 인한 손상의 비율이 60% 이상을 차지하기에 효과적이라고 한다.

믿습니다~!!!



설치를 하면 좀 부실해보이는 화면이 나온다.
제일 위의 "Click here...." 부분을 클릭하면 된다.


많이 허술해보이지만... 제대로 나오기는 한다.
복구를 하고자 하는 HDD를 선택 후 "Start Process"를 클릭하면 된다.


2번을 누른 후 엔터를 치고,


이어서 나오는 화면에서 1번을 선택하면 "Scan and repair"를 하게 된다.


그러면 위와 같이 스캔을 하면서 recover를 해준다.


모두 마치면 위와 같이 complete가 되는데....

어라?! 뭐야.....!!!
치환된 섹터 횟수가 51개가 있는 HDD인데, 왜 detected 된 것도 없고 recover 된 것도 없지?!




다시 한 번 HDD Scan을 해봐야겠다.

지엠데이터라는 회사에서 무료로 배포해주고 있는 감사한 도구가 있다.
바로 GM HDD SCAN

     - http://www.gmdata.co.kr/gmtools/hddscan.html

얼라?!

불량섹터가 하나도 나오지를 않는다.
다른 하드디스크를 해봐도....





구글님께 이것 저것 여쭤보고 확인해본 결과...
기본 스토리는 아래와 같다.

     CrystalDiskInfo 검사 결과 치환된 섹터가 있다
     → 베드섹터가 발생하여 거기에 있는 정보를 예비 섹터에 옮긴 것이다.
     → GM HDD Scan 검사를 하면 베드섹터가 나올 것이다.
     → HDD Regenerator를 이용해서 베드섹터 repair 를 해주면 생명연장의 꿈을 실현할 수 있다.

그런데, 치환된 섹터가 있다고 나온 HDD를 확인해보면 베드섹터가 보이지를 않는다.
에잇~ 그냥 HDD가 아직은 멀쩡하다고 생각하련다.

다음에 다시 한 번 CrystalDiskInfo로 검사해서 치환된 섹터 수치가 증가하면
그 때에 다시 한 번 진행해보련다.

여기까지 경과 보고 끄읕~~~

반응형

갤럭시 탭 7인치를 재작년 11월부터 (발매 하자마자 구매 ^^) 사용하고 있다.
그동안 사용하면서 너무나 너무나 마음에 쏙~든 내가 가장 사랑하는 디바이스이다.

하지만, 내가 사랑하는 것에 비해서.... 너무 다듬어주지를 않았다.
그래서 이번 기회에 한 번 깨끗하게 정리를 해주려고 한다.

귀차니즘으로 스크린샷은 없이 텍스트로만 정리할건데...
글로 최대한 자세히 표현을 해보겠다 ^^


1. 공장초기화

     - 우선 USB 연결을 통해 모든 파일들을 백업했다.
     - 나의 그동안 노력의 산물인 게임 세이브 데이터를 위해서....^^

     - 그리고 나서 갤탭의 전원을 끄자.
     - Power 버튼 꾸우우욱~

     - MicroSD 카드는 그냥 빼놓자.

     - 전원이 꺼진 상태에서
     - [ Power ] + [ Volume + ] 두 개의 버튼을 꾸우우욱~
     - 잘 안될 경우엔 [ Volume + ] 버튼을 누른상태에서 [ Power ] 버튼을 누르면 된다.

     - 이렇게 되면 보통 Manual Mode가 나와야 하는데, 난 그냥 재부팅만 계속 되었다.

     - 이럴 경우, 처리 방법은 "설정 → 개인정보 보호 → 디바이스 재설정"을 하고 다시 시도하면 뭔가 화면이 나온다.
     - 이래도 Manual Mode에 제대로 들어가지 못하면,
        부팅 후 전화번호 누르는 화면에서 "*#46744674#"을 누르면 번호창이 비워지는데,
        다시 "*2767*3855#"을 누르면 공장초기화 화면이 나오게 된다.

     - 이렇게 하고 부팅을 하면 새로 처음부터 셋팅을 해야한다.
     - 새로 구매한 기분 한 번 만끽하자.

     - "환경 설정 → 디스플레이 설정 → 화면 조명시간 → 1시간"
     - "환경 설정 → SD 카드 및 시스템 메모리 → 내장메모리 포맷"




2. Kies 연결

     - http://www.samsung.com/sec/support/pcApplication/KIES
     - Kies 설치

     - "환경 설정 → 무선 및 네트워크 → 케이블 연결 모드 → Samsung Kies"

     -  PC ~ USB 연결

     - 그런데, 안된다.
     - 이런 된장!!! 왜 안될까 엄청 고민했는데..... 계속 떠 있는 자물쇠 아이콘...
     - 그리고 써있는 "모바일 보안 서비스" ... 그렇다. 회사용 MDM 모듈이 설치되어있어서 막혀있는 것이다.
     - 보통 일반분들에겐 해당사항이 없는....
     - http://www.mobiledesk.co.kr/mobiledesk/induction/csCenter.do
     - 365일 24시간 전화 받는 곳이다. 바로 해결 가능하니.... ㅋㅋ

     - 그렇게 연결이 되면, 펌웨어 최신 업데이트를 진행하면 된다.



3. 루팅

     - Super One Click 으로 루팅을 하려했으나.... 중간에 Freezing...
     - 그래서 Odin을 활용한 루팅으로 작전 변경

     - Odin 다운로드 받기
     - http://blog.daum.net/axgbexl/90

     - 루팅된 펌웨어 다운로드 받기
     - http://jctool.tistory.com/entry/M180S-UC27-루팅-펌웨어
     - 7z 을 이용해서 압축을 풀면 ****.tar 파일이 하나 나온다.

     - 갤탭은 아직 PC와 연결하지 않는다.

     - Odin 압축 풀어서 실행을 한 후,
     - PDA 부분에 위에서 압축을 해제한 파일을 지정한다.

     - 갤탭의 전원을 종료한 상태에서,
     - [ 볼륨 - ] 버튼과 [ 파워 ] 버튼을 동시에 누르면 Download Mode로 변경된다.

     - 그런 후, PC와 연결을 한 후
     - Odin의 Start 버튼을 누르면 뭔가 막 진행이 되고 Pass 화면이 나오면서 갤탭이 재부팅 된다.

     - 이제 루팅 끝~


4. Link2SD

     - 갤탭의 가장 큰 문제가 프로그램을 설치할 공간이 턱없이 부족하다는 점이다.
     - 그래서 HTC Chacha에서도 사용하고 있는....(참고로 변태적인 스맛폰 수집 취미라는....^^)
     - Link2SD 를 적용해보도록 하겠다.

     - MicroSD 파티셔닝을 위해서 다운로드
     - http://www.partitionwizard.com/download.html

     - [ Primary, FAT32 ]로 앞부분에 파티션을 잡아주고
     - [ Primary, EXT2 ]로 해서 1GB 정도 파티션을 나머지 잡아주자.
     - 그리고 나서 Apply를 해주면 적용이 된다.
     - 이거 순서 바뀌면 귀찮아진다.


     - Root Explorer
     - http://nubiz.tistory.com/66
     - 지금 다운 받아서 위에서 포맷한 영역에 미리 복사해놓자.


     - 앞에서 파티셔닝한 MicroSD를 꼽고,
     - 마켓에서 "Link2SD"를 검색해서 찾은 후 설치를 하자.


     - "Link2SD"를 실행하면 파티션을 물어볼텐데, "ext2"라고 알려주면 재부팅하라고 할 것이다.
     - 당연히 재부팅을 해주면..... 된다!!!



5. 꾸미기

     - 상단 1% 배터리 아이콘
     - http://cafe.naver.com/haptic15/538124




즐거운 탭생활~



반응형

'지름생활' 카테고리의 다른 글

갤럭시탭7 (SHW-M180S) 최적화 하기  (3) 2013.09.08
Sony - LiveView  (0) 2012.07.25
[투싼] 스트럿바, 후드 인슐레이터  (1) 2009.11.29
[투싼] 연료펌프 리콜  (1) 2009.11.26
[스펙트라] 스마트키 만들기  (0) 2009.05.11

빌드 시간을 줄이기 위해서 최근 각광을 받고 있는 방법은.... 바로 분산 빌드이다.
형상관리 도구인 Git 도 바로 분산 형상관리인데...
여하튼 분산이 유행이다.

     - distcc: a fast, free distributed C/C++ compiler
     - https://code.google.com/p/distcc/


빌드를 나누어서 분산하여 수행을 한다라....
듣기만 해도 왠지 어려울 것 같고, 설정하기 힘들 것 같은데...
정작 해보면 의외로 쉽게 적용이 가능하다.


그런데, 실제 검증을 회사에서 진행을 해서리.... 스크린샷이 없습니다!
회사에서는 보안 이슈로 인하여, 스크린샷 같은 바이너리를 외부에 전송을 못한답니다.
아직 대출금이 많아서 회사에서 잘리면 안되기에..... ^^ 양해바랍니다!!!!!

(집에서 다시 하면 안되냐구요 ?! ㅋㅋ 지금 HDD 복구 프로젝트로 인하여 여건이 그닥 좋지가 않아서요...
 네... 네... 맞습니다. 귀차니즘 때문에..... 흑흑.... 흑흑.....)



1. Server 설치

     - distcc 에서는 Server와 Client가 필요하다.

     - 빌드를 수행하는 놈이 Client가 되고,
     - 빌드가 분산되어서 날라오는 것을 처리해주는 애들이 Server가 된다.

     - 빌드를 실행하는 놈도 같이 빌드를 수행하면 좋으므로 Client이지만, Server도 된다.

$ sudo apt-get install distcc distccmon-gnome

     - [ distcc ] 설치는 당연히 진행을 해야하는 것이고,
     - 그래픽컬한 모니터링을 위해서 추가로 [ distccmon-gnome ]을 설치해주면 좋다.

$ sudo nano /etc/default/distcc

STARTDISTCC="true"
ALLOWEDNETS="111.111.111.111 222.222.222.222 127.0.0.1"
LISTENER = “Server 자신의 실제 IP, not 127.0.0.1”

     - distcc를 사용하기 위해서는 기본값을 설정하는 부분이 있고, 실제 실행하는 스크립트가 있다.
     - 기본 설정값을 명시하기 위해서 위와 같이 작성하면 된다.

     - [ ALLOWEDNETS ] 값은 분산 빌드를 받아줄 IP를 명시하는 곳이다.
     - 어디에서 요청받은 것인지에 따라서 선택적으로 분산 빌드를 실행하는 것이다.

     - 경험적으로 보건데, 저 나열하는 순서를 기준으로 빌드를 할당하는 것으로 보인다.
     - 그러므로 당연한 이야기이지만 자신의 PC가 성능이 괜찮으면 자신을 앞으로 놓는 것이 좋을 것이고.
     - 자산의 PC 성능이 나뻐서 분산 빌드를 수행하는 것이라면 다른 서버를 앞에 위치하는 것이 좋다.

     - [ LISTENER ] 부분은 실제 빌드를 수행하는 Client라면 그냥 "127.0.0.1"이라고 해줘도 되지만,
        외부로부터의 빌드 요청을 받는 Server라면 자신의 실제 IP를 적어줘야 한다.


2. distcc PATH

     - ccache와 유사한 방식으로 동작을 하는 distcc 이므로, ccache와 같은 방식으로 환경을 맞춰주자.

$ cd /srv/install/distcc/path

$ ln -s /usr/bin/distcc arm-generic-linux-gnueabi-c++
$ ln -s /usr/bin/distcc arm-generic-linux-gnueabi-cc
$ ln -s /usr/bin/distcc arm-generic-linux-gnueabi-g++
$ ln -s /usr/bin/distcc arm-generic-linux-gnueabi-gcc
$ ln -s /usr/bin/distcc arm-generic-linux-gnueabi-gcc-4.3.2

     - distcc의 장점 중 하나는 Cross-compile 환경에서도 적용이 가능하다.
     - 빌드 실행 환경만 맞춰주면 된다.

     - 위의 예는 freescale 환경의 Cross-compiler 들의 동적링크를 distcc로 설정한 것이다.

     - [ arm-generic-linux-gnueabi-g++ ]을 실행하려고 하면, 대신에 [ /usr/bin/distcc ]가 실행되도록 하면 된다.

     - 위와 같이 설정한 것을 distcc에게도 알려줘야 한다.

$ sudo nano /etc/init.d/distcc

PATH=/srv/install/distcc/path:/컴파일러경로:$PATH

     - 위와 같이 설정을 했다면 이제 실행하자.

$ sudo /etc/init.d/distcc start




3, execute

     - 이제 분산 빌드가 필요한 어떤 소스코드를 빌드를 해보자.

$ export PATH=/srv/install/distcc/path:$PATH
$ export MAKE="make -j8"
$ make

     - 이렇게 하면 끝이다.
     - 그냥 자기가 알아서 적당히 분산해서 빌드해주고 결과를 만들어준다.

     - make j 옵션의 숫자를 좀 크게 적어주면 된다.
     - 여기에서는 로컬 PC의 core 갯수가 기준이 아니다. 분산으로 쪼개서 빌드를 수행할 기준이다.

     - 지금 어떻게 빌드가 되고 있는지 보고 싶다면...

$ distccmon-text

$ distccmon-gnome

     - 텍스트로 보는 것 보다는 예쁜 화면으로 보는 것이 보기 좋다.

     - 어떻게 분산되어서 빌드가 되는지를 막대기로 보여주는데...
     - 빨간색으로 표시된 부분은 분산을 해서 빌드를 하려고 했는데,
       에러가 나서 그냥 로컬에서 다시 빌드를 수행한다는 의미이다.
     - 즉, 분산 시도가 에러가 나면 그냥 로컬에서 빌드룰 수행함으로써 결과물에는 지장이 없도록 해준다.



4. error

     - 사정이 여의치 않아서 발생하는 error 들에 대해서 집중적으로 파고들지는 못했다.

     - 우선, 빌드가 수행되다 보면, 아래와 같은 메시지가 나온다.

(dcc_mkdir) ERROR: mkdir '//.distcc' failed: Permission denied

     - [ .distcc ] 파일을 생성해야하는데, 권한 문제가 발생해서 제대로 하지 못했다는 것인데...
     - distcc는 자신의 실행 권한을 위해서 [ distccd ]라는 계정을 만들어서 활용한다.

     - 계정도 빌드 실행 계정과 distcc 계정 간의 관계도 있고 뭐 복잡하고 하니 그냥 막 권한을 풀어주면 될 것 같은데,
     - 권한 문제를 풀어줘도 다른 문제가 발생하는 등 여러 이슈가 있다.

     - [ zeroconf ] 문제도 이어서 발생하는데, 이걸 사용하지 않는다라고 환경 설정을 해도 여전히 발생하곤 한다.

     - 이게 ubuntu에 포함된 패키지의 버그인지 검증해보기 위해서 소스 설치해서 진행해보고....해야하는데...
     - 귀차니즘이.... 그냥 막....

     - 위에 명시한 에러가 발생을 해도 분산 빌드가 잘 실행이 된다.

     - 나중에 직접 분산빌드를 수행할 일이 생기면, 이 부분에 대해서 추가로 검증을 해보기로 하고...
     - 지금 이번에는 그냥 무시~~~!!!




5. 잡소리

     - 회사에서 빌드가 약 500~600분 정도 소요되는 것이 있어서 빌드시간을 단축하고자 distcc를 적용해보았다.
     - 그랬더니 약 40% 이상의 시간을 단축할 수 있었다!!!! 와우~!!!
     - 그 외에도 몇 건의 빌드에 적용 검증을 해보았는데, 40~60% 정도의 이득을 볼 수 있었다.

     - ccache의 경우에는 탁월한 빌드 시간 단축이 가능하지만,
     - 최초 빌드 시에는 1~2% 정도의 시간이 오히려 증가한다라는 단점이 있다.

     - 그래서, 자료들을 찾아보면 ccache와 distcc를 동시에 적용해서 사용하는 것을 추천하곤 한다.


     - QT Library 빌드도 필요해서 distcc를 적용해보았는데, 많은 문제가 있어서 결국 제외를 했다.
     - QMake 라는 것을 사용하기 때문에 발생하는 문제로 보이기는 하지만.... 심도있는 분석은 다음 기회에...
     - QT의 경우에는 distcc의 pump mode라는 것을 적용하면 쓸만하다는 이야기가 있지만... 잘 안되었다.



     - distcc가 최근 집중하는 것은 pump mode인 것 같다.
     - 하지만, 개인적으로 아직은 안정적이지는 않은 것으로 보인다.
     - pump 관련하여서는 추가적으로 검증 작업을 진행 후에 적용할 계획이다.

     - 기본 mode에 비해서 엄청 많이 빠르다고 하는데.... 꼭 검증해봐서 적용할 수 있으면 좋겠다.


반응형

VirtualBox 등을 설치할 때 Host가 Ubuntu인 경우 버전 등을 확인해야할 때가 있다.


Ubuntu 버전은 무엇인지, 32bit/64bit 어떤 것인지.... 등에 따라서 배포되는 패키지가 다르기 때문이다.

그런데, 내가 사용하고 있는 Ubuntu가 어떤 버전인지 잊어버렸다면 어떻게 해야할까?


$ lsb_release -a

위와 같이 실행하면 친절하게도 잘 나온다.

어?! 그런데 "No LSB modules are available."이라는 문구가 나온다.

본래 [ lsb_release ]라는 명령어의 의미는
"The lsb_release command prints certain LSB (Linux Standard Base) and Distribution information."이다.

'No LSB ...' 문구가 보기 싫으면 다음과 같이 하면 된다.


$ sudo apt-get install lsb

한 두개가 아니라 총 41개의 패키지를 설치한다.


다시 [ lsb_release -a ]를 실행하면 위와 같이 나온다.
오히려 더 지저분하게 된다.


뭐 여하튼, 이렇게 하면 어떤 버전의 Ubuntu를 설치했는지 확인이 가능하다.

그런데, 32bit 버전을 설치했는지, 64bit 버전을 설치했는지는 확인이 안된다.


$ uname -a

위 스크린샷을 잘 살펴보면 뒷 부분에 [ i686 ] 이라는 문구가 보일 것이다.
이렇게 되어있으면, [ 32bit ]이다.

그러면, 64bit 버전이 설치되어있는 경우엔 뭐라고 나올까?
같은 부분에 i686 대신에 [ x86/64 ]라고 표기가 된다.


자신이 사용하고 있는 Ubuntu가 어떤 놈인지 확인하면서 즐거운 Ubuntu 생활이 되시길...
반응형

Full 3D로 제작된 SF 애니메이션이라 하여, 스크린샷에 혹~해서 봐버린 작품


좀 올드한 느낌은 있지만, 그래도 Full 3D로 그려진 것은 맞아보였다.


알고봤더니 이 애니메이션이 유명한 이유는 Full 3D라기보다는
"아와즈 준 (Jun Awazu)"이라는 사람이 혼자서 작업을 했다고 해서였다.

'아와즈 준'은
2005년도에 "혹성대괴수 네가돈"이라는 애니메이션을
1인 체제로 만들어서 도쿄 국제 판타스틱 영화제에 사영을 했는데
뜨거운 반응이었다고 한다.

1인 체제로 만들었다고 하여 정말 혼자서 북치고 장구치고
CG 영상까지도 전부 혼자한 것으로 알고있었는데,
그래서 정말 이 사람 괴물이구나!!!했는데,
CG 영상은 별도의 공방에서 제작했단다.


플란젯 역시 1인 체계로 제작된 애니메이션이라고 한다.
정말 완벽히 혼자 만든 것은 아니지만,
원작, 각본, 감독 전부 '아와즈 준'이 담당하였다.

정말 대단한 것은 맞지만 이로 인하여
작품의 질이 떨어진 것이 용서받지는 못한다!!!


이 작품의 CG는 나쁘지 않다. 아니, 좋다.
메카 디자인도 좋다.
그런데, 분위기가 왠지 게임 동영상과 같은 느낌이다.
그리고 어둡다. 왠지 칙칙한 느낌도 난다.

정말 큰 문제는 스토리다.
이건 왠지 CG 전공 학생들이 졸업작품을 만든 것 같다.

그래픽 질은 높은데, 사람들이 많이 나오지 않는다.
제한된 사람만 나오는 것.... 많은 사람들을 그리기 힘들어서?!

스토리상 제한된 인원만 나오도 된다면 모르겠는데,
아무런 이유없이 제한된 인원만 등장하고 있다.

얼마 나오지 않는 등장인물들의 개성은?!
없다!
말도 안되는 성격...지나치게 전형적인 캐릭터 수준이다.
그리고 현실성 없는 행동만 보이고 있다.

그렇다고 해서 스토리 라인이 좋은가?!
정말 그냥 말 그대로 CG 전공자의 졸업작품 수준이다.

설정은 독특한가?!
전혀 아니다!!!
그냥 처들어와서 지구 망하게 하려다가
주인공이 우연히 얻게 되는
절대 막강 로봇때문에
외계인 뻥~!!!

그리고 끝~




킬링타임용으로 쓸만한가 ?
사실 별로 추천하고 싶지 않다.

정말 볼 것 없는 상황에서,
SF 애니메이션을 보고 싶으면
고르다 고르다 정 없을 때에...
그 때에나 한 번 봐보시길...



IMDb   평점 : 5.10
네이버 평점 : 4.56
나만의 평점 : 4.45


Naver
http://movie.naver.com/movie/bi/mi/basic.nhn?code=76764
Wikipedia
http://en.wikipedia.org/wiki/Planzet
IMDb - Internet Movie Database
http://www.imdb.com/title/tt1645129/

[출처]
* 포스터 및 스크린샷은 (http://myanimelist.net/anime/8297/Planzet/pic&pid=26563),
위키피디아에서 퍼왔음을 밝힙니다.
(영화 관련 저작권 괴담은 무서워요~)
[ 주의 사항 ]
어디까지나 개인적인 영화평을 적는 공간이니만큼,
개인의 취향은 존중해주시면 감사하겠습니다.
건전한 비판이나 조언은 언제든 환영입니다!!!
반응형

Git의 발음

   - 기트
   - 깃
   - 지트
   - 짓


이와 관련된 공식입장이 있는데,
현재 사이트 접속이 안되어 확인이 안된다(예전에 봤는데 기억이 가물가물).
   - http://git.wiki.kernel.org/index.php/GitFaq#Why_the_.27git.27_name.3F
그런데, 위 위키 페이지는 사라졌다. 이런...


보통 일반적으로 "깃"이라고 발음하고 있다.
나도 그렇게 발음하고 있고,
현업에서 근무하고 있는 주위의 다른 사람들도 그렇게 발음하고 있다.
KLDP에서도 그렇게 의견이 수렴되었다.


최근에 결정적인 증거(?)도 찾았다!!
리누즈 토발즈 아저씨도 깃으로 발음을 하고 있다.

   - http://www.youtube.com/watch?v=4XpnKHJAok8


결론! "깃"이라고 발음하면 된다.

[ 참고 ]
http://kldp.org/node/113721
반응형

Git에 대해서 소개하는 글 중에서 가장 와닿는 내용이 있다.

'Linux Kernel'의 형상관리를 위해서 사용하는 도구이며
'리누스 투르발스(Linus Benedict Torvalds)'가 직접 만들고 있는 도구


그런데, 여기에서 궁금증이 생겼다.

Git의 역사가 Kernel에 비해서 훨씬 짧은데,
그 이전에는 뭘 사용했었지!?

CVS?! Subversion?!


그래서 알아봤는데,
다른 도구들과는 달리 이에 대해서
공식적인 입장은 물론이고
다양한 이야기를 확인할 수 있었다.


1999년도에 Linux Power PC에서 사용하기 시작한 'BitKeeper'는
리누스가 "Best Tool For The Job"라며
2002년도부터 Kernel의 mainline에 적용하였다.

2002년도 이후 Kernel 개발 속도가
엄청 증가한 배경에
BitKeeper가 기여했다는 점은
아무도 반론할 수 없을 것이다.

BitKeeper는 상용 제품이다.
다만, Linux Kernel을 위해서(도움도 받았으니)
Free 버전을 계속 개발 해주고 있었다.

하지만, 오픈소스 진영의 대표주자격인 Kernel에서
상용 제품을 사용하는 것에 대한 비판이 많았던 것 같다.

하지만, 분산 개발을 제대로 지원하는
Linux Kernel 개발에 적합한 다른 대안 도구가
없었기에 그대로 사용할 수 밖에 없었다.

그러던 중, BitKeeper에 대한 Reverse-Engineer 시도가 있었고
경고를 했음에도 두 번 더 발각(?) 되면서
BitKeeper의 무료 버전 개발이 중단 되게 된다.

이 부분에 대해서 많은 이야기가 오가는데...
결론적으로

BitKeeper의 입장에서는
매년 $50,000 정도씩을 투자해서
Free로 제공해주고 있는데
그런 우리의 제품을 reverse engineer를 해서
기술을 빼가다니 너네 괘씸해!
이제 안줘!!!

오픈소스 커뮤니티 입장에서는
Free로 풀린거면 자유롭게 쓸 수 있는거지
왜 시비야~!!

하지만, BitKeeper 입장에서는
돈 안받고 쓸 수 있게 해준거지,
너네 맘대로 손대라고 한 것이 아니야~!!!

뭐 이렇게 정리가 되는 것 같다.



이렇게 되어 BitKeeper가 아닌
대안을 찾아야 하는 상황이 되었는데..

마땅한 대안이 없자,
직접 만들어 버리게 된다.

그것이 바로 Git 이다!!!



그것도 '리누스'아저씨가 주도하여
개발을 하다니...



그 유명한 '리누스' 아저씨가 개발을 하고,
운영체제의 양대 산맥 중 하나인
리눅스 커널을 개발하는데 사용중인 도구이며,

최근 모바일의 가장 뜨거운 핫이슈인
구글의 안드로이드도 사용하는 도구!!!

바로,
"GIt"
이다.


[ 참고 ]
http://en.wikipedia.org/wiki/Git_(software)
http://kerneltrap.org/node/4966
http://www.pcworld.idg.com.au/article/129776/after_controversy_torvalds_begins_work_git_/
반응형

+ Recent posts