오늘 [ sudo apt-get update/upgrade ]를 실행하니, "whoopsie"라는 애가 업그레이드 되었다.

그런데, 대체 이 놈이 뭐하는 놈이지?!
심지어 이 놈이 내 귀중한 메모리도 잡아먹고 있다!!!

 PID    USER        PR  NI  VIRT   RES  SHR  S   %CPU  %MEM   TIME+    COMMAND                            
 2255   whoopsie  20   0   197m   5004  3684  S    0.0      0.5         0:00.00   whoopsie

뭐하는 놈이길래 귀중한 메모리까지 처묵처묵하고 있는 것인지...
거기에다가 이 놈이 계정까지도 가지고 있다.

$ cat /etc/passwd | grep whoopsie
whoopsie:x:105:114::/nonexistent:/bin/false




이 놈의 정체는 "Ubuntu error tracker"라고 한다.
이 작은 데몬은 우분투의 데스크탑 버전과 서버 버전 모두 기본으로 포함되어 있단다.


이 기능을 끄기 위해서는 "시스템 설정 - 사생활 설정 - 진단" 메뉴를 살펴보면 된다.


위와같이 오류보고도 보내지 않고, 활동 상황도 기록하지 않는다고 설정하면 해당 프로세스도 종료된다.


아예 깨끗하게 삭제를 해버리고 싶다면 다음과 같이 실행하면 된다.

$ sudo apt-get -s purge whoopsie
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  whoopsie*
0개 업그레이드, 0개 새로 설치, 1개 제거 및 0개 업그레이드 안 함.
Purg whoopsie [0.1.33]

$ sudo apt-get purge whoopsie
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음 패키지를 지울 것입니다:
  whoopsie*
0개 업그레이드, 0개 새로 설치, 1개 제거 및 0개 업그레이드 안 함.
이 작업 후 106 k바이트의 디스크 공간이 비워집니다.
계속 하시겠습니까 [Y/n]? y
(데이터베이스 읽는중 ...현재 235397개의 파일과 디렉터리가 설치되어 있습니다.)
whoopsie 패키지를 지우는 중입니다 ...
whoopsie의 설정 파일을 깨끗이 지우는 중입니다 ...
ureadahead에 대한 트리거를 처리하는 중입니다 ...
ureadahead will be reprofiled on next reboot

참고로 [ apt-get -s ] 옵션은 시뮬레이션 기능이다. 삭제해도 되는지 확인 차원에서...




사실 Ubuntu 의 발전을 위해서는 리포팅을 해주는 것이 좋고, 성능에 미치는 영향도 미미하기 때문에
이렇게 신경쓰고 굳이 삭제까지 하는 것은 불필요한 행위일 수도 있다.

하지만, 그냥 Ubuntu에 대해서 하나씩 알아가는 과정으로 잉여력을 발휘한 것이라 여겼으면 좋겠다 ^^
반응형

Git 계정 관리에 대해서 알아보면서 이미 한 번 SSH Public Key에 대해서 살펴보았었다.
   - http://whatwant.tistory.com/395


이번에는 예전에 살펴보지 못한 부분들에 대해서 알아보고자 한다.


1. Server : ssh daemon 설정

   - 만약 Git Server에서 Public Key로 접속하는 것을 막아버리고 싶으면 어떻게 해야 힐까?
   - [ /etc/ssh/sshd_config ] 파일을 살펴보면 된다.

PubkeyAuthentication yes

   - 그 외에도 다양한 설정들을 살펴볼 수 있고, 손 볼 수 있다.


2. Client : RSA vs DSA

   - SSH Public Key 파일을 생성할 때 보통 RSA 타입을 사용했다.
   - [ ssh-keygen ] 명령어를 보면 DSA 타입에 대해서도 나온다.
   - RSA는 무엇이고 DSA는 무엇일까?

   ※ 아래 내용은 위키피디아(http://ko.wikipedia.org/)의 내용을 많이 참고하고 있습니다.

   ① RSA
      - 1977년 로널드 라이베스트, 아디 샤미르, 레오널드 애들먼의 연구에 의해 체계화 된 공개키 암호시스템이다.
      - (Ron Rivest), (Adi Shamir), (Leonard Adleman) 3명 연구원의 이름 앞글자로 RSA 이름이 지어졌다.
      - 1983년에 발명자들이 소속되어 있던 MIT에 의해 미국에 특허로 등록되었고, 2000년 9월 21일에 그 특허가 만료되었다.
      - RSA 암호체계의 안정성은 큰 숫자를 소인수분해하는 것이 어렵다는 것에 기반을 두고 있다.

   ② DSA (Digital Signature Algorithm)
      - RSA와 마찬가지로 비대칭형 암호화 방식이다.
      - ElGamal 알고리즘을 이용하여 NIST(미국립표준기술연구소)에서 개발한 전자 서명방식이다.
      - 나중에 DSS(Digital Signature Standard)로 이름이 변경된다.
      - 보통 웹인증서에서 사용하는 방식이다.

   - 암호화 속도는 비슷하지만, 키 생성은 DSA가 빠르고 검증속도는 RSA가 빠르다.
   - RSA는 원문을 개인키로 암호화 해야 서명이 가능하지만, DSA는 그렇지 않다.
   - DSA는 전자서명 여부에 따라 예/아니오로 간단하게 사용한다.

   - 개인적으로 궁금한 것은 DSA가 RSA 보다 더 좋은 것인지 확인하고 싶었다.
   - 결론적으로는 뭐 그냥 그렇다. 그냥 RSA를 사용하게 하는 것이 무난하다는 판단이다.


3. SSH Public Key 활용하기

   - A 라는 사용자가 [ssh-keygen -t rsa ] 명령으로 [ id_rsa / id_rsa.pub ] 파일을 생성했다고 해보자.
   - 다른 PC에서 SSH Public Key를 이용해서 ssh 접속을 하고자 한다면 어떻게 할까?!

   - Key 파일을 생성한 PC 에서 인증을 위해 사용할 Public Key를 등록해야 한다.
   - [ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ]
   - cp가 아니고 뒤에 첨부하는 식으로 처리한 이유는, 여러개의 Public Key를 등록하는 경우도 있기 때문이다.

   - 참고로 각 파일에 필요한 권한은 다음과 같다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub 
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts


4. 두 대의 PC에서 개발

   - 개발 PC 한 대에서 Key 파일을 하나 생성한 후 Git Server에 등록을 했다고 해보자.
   - 만약 노트북을 한 대 받아서 그곳에서도 개발을 해야한다면 어떻게 해야할까?

   - 가장 손 쉬운 방법은 노트북에서도 Key 파일을 하나 생성해서 추가로 Git Server에 등록을 하는 것이다.
   - 그런데, 추가 등록하지 않고 기존에 생성한 Key 파일을 재활용할 수 있는 방법은 없을까?

   ① Copy

      - [ ssh-keygen -t rsa ] 명령으로 Key 파일을 생성하면,
        [ ~/.ssh/ ] 디렉토리 밑에 id_rsa, id_rsa.pub 파일이 생성된다.
      - 유저에게 필요한 파일은 [ id_rsa ]이고, 서버에 등록을 할 것은 [ id_rsa.pub ] 파일이다.

      - 그런데 이 유저가 다른 PC에서 서버에 접근을 하려고 하는 순간 고민이 생긴다.
      - 전에 사용하던 PC에서는 편하게 Public Key로 인증을 했는데, 이 PC에서는 인증이 안되는 것이다.

      - 사실 정말 간단히 모든 것이 해결된다.
      - 기존 PC에서 생성한 [ id_rsa ] 파일을 [ ~/.ssh/ ] 디렉토리 밑으로 복사해 놓으면 끝이다.

      - 그런데, 이 새로운 PC에 이미 생성해서 사용하고 있는 [ id_rsa ] 파일이 있으면 어떻게 해야할까?

   ② Multi Key

      - Public Key 파일을 관리하기 위해서 별도 설정을 할 수 있다.
      - [ ~/.ssh/config ] 파일에 원하는 내용을 넣으면 되는 것이다.

$ cd ~/.ssh/

$ ls -al
합계 20
drwx------ 2 user2 user2 4096  8월  6 21:22 .
drwxr-xr-x  3 user2 user2 4096  8월  5 01:51 ..
-rw------- 1 user2 user2 1675  8월  5 01:09 id_rsa
-rw-r--r--  1 user2 user2   398  8월  5 01:09 id_rsa.pub
-rw-r--r--  1 user2 user2   222  8월  6 21:22 known_hosts

$ scp chani@127.0.0.1:/home/chani/.ssh/id_rsa ./chani
chani@127.0.0.1's password:
id_rsa                                                        100% 1679     1.6KB/s   00:00   

$ ls -al
합계 24
drwx------ 2 user2 user2 4096  8월  6 21:23 .
drwxr-xr-x  3 user2 user2 4096  8월  5 01:51 ..
-rw------- 1 user2 user2 1679  8월  6 21:23 chani
-rw------- 1 user2 user2 1675  8월  5 01:09 id_rsa
-rw-r--r--  1 user2 user2   398  8월  5 01:09 id_rsa.pub
-rw-r--r--  1 user2 user2   222  8월  6 21:22 known_hosts

   - 'user2'라는 계정에서 'chani'라는 계정으로 Public Key를 이용해서 SSH 접속을 하고 싶은 상황이라고 해보자.
   - 그런데, 'user2'라는 계정에서 이미 Public Key를 생성했기 때문에 id_rsa 파일이 존재하고 있다.
   - 'chani' 계정의 id_rsa 파일을 그대로 복사해올 수가 없어서 'chani'라는 이름으로 바꾸어서 복사를 한 상황이다.


   - 이 상황에서 chani 계정으로 SSH 접속을 시도하면 Public Key를 인식하지 못하고 패스워드를 물어본다.

   - 지금 필요한 것은 [ chani@127.0.0.1 ] 접속을 할 때에 id_rsa 파일이 아니라
     chani 라는 이름으로 복사한 Key 파일을 사용하도록 알려주는 것이다.

   - [ ~/.ssh/config ] 파일을 수정해보자. (없으면 생성하면 된다)

Host 127.0.0.1
        Identityfile ~/.ssh/chani

   - 위와 같이 작성한 후 [ ssh chani@127.0.0.1 ] 실행하면 접속이 될 것이다.

   - 조금 더 체계적으로 config 파일을 작성하면 다음과 같이 할 수도 있다.

Host localhost
        User chani
        Port 22
        Hostname 127.0.0.1
        Identityfile ~/.ssh/chani

   - 조금 불편한 점은 위와 같이 설정한다고 해서 localhost와 127.0.0.1 둘 모두 사용할 수 있는 것은 아니다.

   - 여기에서 중요한 점은 특정 서버에 접속할 때에 사용할 특정 Key 파일을 지정할 수 있다는 것이다.



이번에는 여기까지~



반응형

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

Git (RedHat Enterprise Server 6.3, SourceCode, v1.8.4.1)  (0) 2013.10.22
MS VisualStudio 에서 GIT 지원  (0) 2013.08.31
3D Version Tree  (0) 2013.04.30
[005] Install GIt (in Ubuntu)  (5) 2013.04.25
Empty commit - 내용없는 commit 만들기  (0) 2013.03.31

업그레이드 발표 후 종종 짧은 시간 만에 새로운 버전을 발표하곤 하는 VirtualBox이다.
무언가 긴급한 에러 수정이 필요한 상황이 그 이유일 것이다.

This is a maintenance release. The following items were fixed and/or added:

• OVF/OVA: don't crash on import if no manifest is used (4.2.14 regression; bug #11895)
• GUI: do not restore the current snapshot if we power-off after a Guru Mediation
• Storage: fixed a crash when hotplugging an empty DVD drive to the VM
• Storage: fixed a crash when a guest read from a DVD drive attached to the SATA controller under certain circumstances
• EFI: don't fail with 64-bit guests on 32-bit hosts (bug #11456)
• Autostart: fixed VM startup on OS X
• Windows hosts: native Windows 8 controls
• Windows hosts: restore native style on Vista 32
• Windows hosts / guests: Windows 8.1 adaptions (bug #11899)
• Mac OS X hosts: after removing VirtualBox with VirtualBox_Uninstall.tool, remove it from the pkgutil --pkgs list as well

뭐 무조건 새로운 버전으로 설치, 활용하자.

https://www.virtualbox.org/wiki/Downloads
반응형

개인적으로 최근 한 번씩 빠지는 드라마들을 보면 공중파 보다는 케이블이거나 종편 채널이다.

공중파에서는 거의 전형적인 소재와 구성, 연출, 배우들로 드라마를 이끌어가는 것 같고,
케이블과 종편은 그보다는 조금 더 자유로운 소재와, 실험적인 연출, 그리고 신선한 배우들을 보여주고 있다!

그중 최근 빠져있는 드라마... 무정도시... 정말 대박이다 !!!

그 중에서도 주인공.... 아~!!! 남자인 내가봐도 정말 대박! 대박!



무정도시는...

2013년 5월 27일 부터 방송을 시작한 "월화" 드라마로
총 20부작의 마약 조직과 경찰과의 대결을 그린 느와르 작품이다.


연출을 담당한 이정효는 부산 출신인 1974년 아저씨로 본래 전공은 사회학과라는.... @_@
2010년도에는 SBS에서 '산부인과', 2012년에는 tvn의 '로맨스가 필요해 2012', 그리고 2013년에는 JTBC의 "무정도시" !!!
2005년도 SBS의 "패션 70s"의 공동 연출도 했었다.


무정도시의 이야기는 극본을 담당한 유성열 작가가 4년 전부터 미리 준비한 작품이라고 한다.
다만 아쉬운 점은 유성열 작가에 대한 정보는 찾지 못했다.



남자주인공 정시헌 역을 하고 있는 정경호는 1983년 중앙대 연극학과 재학중인 대딩이다.
재학중이라고는 해도.... 사실 대딩이라고 하기엔 좀 늙지 않았나 ?! ^^

사실 개인적으로 잘 알지 못하던 배우였는데...
조연으로 "낭랑 18세", "미안하다, 사랑한다", "어여쁜 당신" 등에도 나왔었고,
2009년 "거북이 달린다"에서 주연으로 탈옥수 역할도 했었고
마찬가지로 2009년 "자명고"라는 영화의 주연도 맡았었다.

2003년 KBS 20기 공채 출신이고 2010년도에 입대해서 20개월 군복무를 마친 예비역이다 !!!

정확히 기억을 못해서 그렇지 본래 유명해진 것은
2004년 불후의 명작 중 하나인 "미안하다 사랑한다"에서 오들희 여사의 아들 최윤 역할을 맡아서라고 한다.
그 유명한 대사... "아~들~~~~~" 그 주인공?! ^^



정경호 외에도.... 남규리, 이재윤, 손창민, 김유미, 최무성, 윤현민.... 전부 대박이다 !

특히 문덕배 역할을 하고 있는 "최무성"의 명대사 "아시겠습니까".... 아... 정말 대박!!!!
본래 극단 소속이고, 일본 도쿄비주얼아트에서 영상연출을 전공했다고 한다.
문덕배라는 극중 이름보다도... 극중 닉네임인 사파리가 더 기억에 남는.... 그의 명대사 "아시겠습니까~"


1회를 사전공개를 했었고,... 그것을 보고선 감동을 먹었다가.... 잠시 잊고 있었는데...
얼마전 몰아서 진도를 나갔는데... 보다가 정말 감동 그리고 감동~!!!
바로 진도를 따라잡았더니... 다음주 월화가 너무 기다려진다....!!!



사실 현실과 조금 동떨어진 설정들과 말도 안되는 주인공의 회복력 등...
유치하게 보일 수도 있겠는데...
과거 홍콩 영화의 전성기를 능가하는.... 느와르 !!!! 액션 !!!!



기회가 되시면 꼭 한 번 봐보세요 !!!!!

반응형

성인을 위한 동화같은 컨셉으로 보여서 선택한 영화....!


귀여운 인형의 대명사인 테디베어가 술, 여자, 마약을 즐긴다는 컨셉 ! 브라보 !

 


대박을 쳤다 !!!
북미 박스오피스 1위까지 차지한 영화다.


세스 맥팔레인 (Seth MacFarlane)

1973년 아저씨로 이 영화의 제작, 연출, 각본, 제작까지 모두 담당했다.
그리고 주인공 테드의 목소리까지 맡았다.

본래 애니메이션을 공부했으며,
우리는 잘 모르지만 미국에서는 나름 잘 알려진 성인 애니메이션 "Family Guy"의
제작자이자 목소리 주연도 했었고 지금도 하고 있다.

조연이나 단역 출연도 많이 했고,
프로듀싱이나 각본도 많이 했다.
심지어 노래도 부르는 가수라는...

정말 이것 저것 정말 ... 욕심쟁이 우후훗!!!!!



이 영화를 쉽게 설명하면,
B급 웰메이드 코미디
영화이다!


영화 도입부부터 영화가 끝날 때까지 좀 호흡이 길다.
남자 주인공의 어렸을 때부터 성인이 되어 결혼을 할 때까지의
성장기 드라마처럼 느껴진다.

호흡이 길다고 해서 지루하다는 이야기는 아니다.


다만, 미국 정서와 문화에 기반한 유머 코드들이 있어서
가끔 같이 웃지 못할 때가 아쉬웠다.

이 부분은 필자에게만 해당될 수도 있겠지만
순수 한국 토박이들이라면 비슷할 것이다.



이 영화에 까메오도 많이 출연을 했다.

"Flash Gordon"으로 유명한 "Sam J. Jones"
"Green Lantern"의 히어로 "Ryan Reynolds"
그리고 너무 너무 유명한 "노라 존스(Norah Jones)"
"Family Guy"의 목소리 연기로 유명한 배우들...



하지만, 릴리스 시기를 조율한 것을 보면 조금 불쌍하기도 하다.
"Ice Age: Continental Drift", "G.I. Joe: Retaliation"와 경쟁을 피하기 위해서 뒤로 미뤘기 때문이다.
하지만, 결론적으로 대박이 났으니 뭐~ ^^



성적 표현도 그렇고 하는 짓들도 그렇고
테디베어가 술, 담배, 여자, 마약을 하는 것도 그렇고...

분명 이 영화는 B급을 지향하는 저질 영화다.

하지만, 웰메이드다.
저급한데 저급하지가 않다.

나만 이렇게 생각하는 것은 아닌 것 같다.
흥행성적도 그렇고 각종 노미네이트된 내역을 봐도 그렇고....^^


조금 아쉬운 것은 호흡이 약간 길다는 정도!?
그리고 조금은 이해못할 유머가 있다는 정도!?




IMDb   평점 : 7.10
네이버 평점 : 7.59
나만의 평점 : 7.21


Naver
http://movie.naver.com/movie/bi/mi/basic.nhn?code=80707
Wikipedia
http://en.wikipedia.org/wiki/Ted_(film)
IMDb - Internet Movie Database
http://www.imdb.com/title/tt1637725/

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

반응형

한 달에 한 번 정도 업데이트가 나오더니 이번에는 2달이 넘게 걸려서 새로운 버전이 릴리스 되었다.

VirtualBox 4.2.14 (released 2013-06-21)


This is a maintenance release. The following items were fixed and/or added:


VMM: another TLB invalidation fix for non-present pages

VMM: fixed a performance regression (4.2.8 regression; bug #11674)

GUI: fixed a crash on shutdown

GUI: prevent stuck keys under certain conditions on Windows hosts (bugs #2613, #6171)

VRDP: fixed a rare crash on the guest screen resize

VRDP: allow to change VRDP parameters (including enabling/disabling the server) if the VM is paused

USB: fixed passing through devices on Mac OS X host to a VM with 2 or more virtual CPUs (bug #7462)

USB: fixed hang during isochronous transfer with certain devices (4.1 regression; Windows hosts only; bug #11839)

USB: properly handle orphaned URBs (bug #11207)

BIOS: fixed function for returning the PCI interrupt routing table (fixes NetWare 6.x guests)

BIOS: don't use the ENTER / LEAVE instructions in the BIOS as these don't work in the real mode as set up by certain guests (e.g. Plan 9 and QNX 4)

DMI: allow to configure DmiChassisType (bug #11832)

Storage: fixed lost writes if iSCSI is used with snapshots and asynchronous I/O (bug #11479)

Storage: fixed accessing certain VHDX images created by Windows 8 (bug #11502)

Storage: fixed hang when creating a snapshot using Parallels disk images (bug #9617)

3D: seamless + 3D fixes (bug #11723)

3D: version 4.2.12 was not able to read saved states of older versions under certain conditions (bug #11718)

Main/Properties: don't create a guest property for non-running VMs if the property does not exist and is about to be removed (bug #11765)

Main/Properties: don't forget to make new guest properties persistent after the VM was terminated (bug #11719)

Main/Display: don't lose seamless regions during screen resize

Main/OVF: don't crash during import if the client forgot to call Appliance::interpret() (bug #10845)

Main/OVF: don't create invalid appliances by stripping the file name if the VM name is very long (bug #11814)

Main/OVF: don't fail if the appliance contains multiple file references (bug #10689)

Main/Metrics: fixed Solaris file descriptor leak

Settings: limit depth of snapshot tree to 250 levels, as more will lead to decreased performance and may trigger crashes

VBoxManage: fixed setting the parent UUID on diff images using sethdparentuuid

Linux hosts: work around for not crashing as a result of automatic NUMA balancing which was introduced in Linux 3.8 (bug #11610)

Windows installer: force the installation of the public certificate in background (i.e. completely prevent user interaction) if the --silent command line option is specified

Windows Additions: fixed problems with partial install in the unattended case

Windows Additions: fixed display glitch with the Start button in seamless mode for some themes

Windows Additions: Seamless mode and auto-resize fixes

Windows Additions: fixed trying to to retrieve new auto-logon credentials if current ones were not processed yet

Windows Additions installer: added the /with_wddm switch to select the experimental WDDM driver by default

Linux Additions: fixed setting own timed out and aborted texts in information label of the lightdm greeter

Linux Additions: fixed compilation against Linux 3.2.0 Ubuntu kernels (4.2.12 regression as a side effect of the Debian kernel build fix; bug #11709)

X11 Additions: reduced the CPU load of VBoxClient in drag'and'drop mode

OS/2 Additions: made the mouse wheel work (bug #6793)

Guest Additions: fixed problems copying and pasting between two guests on an X11 host (bug #11792)


seamless 관련 버그 픽스가 가장 눈에 띈다.

아래 환경에서 Guest 종료 후 재시작을 하면 Guest 윈도우 사이즈를 이전 것을 기억못하는 버그는 사라졌다 !

   - Host : Windows XP SP3
   - Guest : Ubuntu 12.04


그 외에는 그다지 눈에 띄는 부분은 잘 안보인다.


https://www.virtualbox.org/wiki/Downloads

Ubuntu, Window Host 모두에서 설치하고 사용하는데, 별다른 이상 증상은 보이지 않는다.
반응형

Git 에서 지원하는 기능 중의 한 가지가 바로 hooks 이다.
다른 형상관리 도구 또는 변경관리 도구에서는 trigger 기능이라고도 부른다.

예를 들어 개발자가 Local에서 commit을 한 것을 Remote로 push를 할 때에
어떤 작업을 실행하고 싶은 것이 있을 때 사용할 수 있는 기능이다.

Git의 어떤 행위를 수행 했을 때 특정 작업을 하도록 연결을 하고 싶다면 이 기능을 사용하면 되는 것이다.
 


Redmine에서는 Git을 저장소에 연결할 수 있다.


gitweb에 비해서 기능적으로는 조금 부족할 수도 있지만,
그에 비해서 훨씬 편리하고 예쁜 인터페이스를 자랑한다. 개인적으로 너무나 좋아한다.


그리고 Redmine은 Git의 commit을 작업으로 관리할 수도 있다.



그런데, 이렇게 아름다운 Redmine과 Git의 관계에 몇 가지 문제가 존재한다.
문제일 수도 있고, 그냥 이슈일 수도 있겠다.

1. Redmine과 Git은 같은 위치에 존재해야 한다.
   - Remote repository를 지원하지 않는 것은 정말 아쉽다.
   - mirroring 등의 방법으로 해결할 수는 있지만 문제는 문제다.

2. 대용량 repository 처리 시간에 따른 오류 발생 가능성이 있다.
   - Git 정보를 Web으로 처리하기 위해서 Redmine은 별도 가공을 해야 하는데 이 때 많은 시간이 소요된다.
   - Redmine은 웹으로 처리가 되다보니 지나치게 많은 소요시간이 걸리게 되면 Timeout이 되게 되는 것이다.
   - Apache의 Timeout 시간을 늘리는 것으로 임시조치는 할 수 있지만, 역시 문제는 문제다.

3. Git에 새로운 commit이 push 되었어도 Redmine에 실시간으로 반영되지 않는다.
   - 저장소 탭을 누군가 열어보기 전까지는 Redmine은 Git의 새로운 변경 내역을 알지 못한다.
   - 이 부분은 마땅히 해결할 방법이 없다. 관리자가 정기적으로 저장소 탭을 실행하곤 해야 하는 것이다.
   - 그런데, 이 때 Git의 hooks 기능을 사용하면 된다 !!!



정리해보면,
Redmine에서 형상관리 도구로 Git을 지원을 해주고 있지만 몇 가지 제약사항이 있다.
그 중 한 가지는 Git 저장소의 변경 사항이 실시간으로 Redmine에 반영이 되지 않는다는 것이다.
그래서 Git의 hooks 기능을 이용해 저장소의 변경 사항이 바로 바로 Redmine에 반영이 되도록 해보겠다.


원하는 결과를 얻기 위해서는 고려해야 할 사항들이 있다.
   - 우리가 원하는 기능을 수행할 시기는 Git Repository에 commit이 들어온 다음이다.
   - 우리가 원하는 기능은 Redmine의 저장소 페이지를 자동으로 여는 것이다.
   - Redmine의 저장소 페이지를 열도록 하기 위해서는 페이지를 열 수 있는 권한이 필요하다.


그런데, 이 부분을 처리하기 위해 알아 보던 중 또 하나 새로운 사항을 알게 되었다.

 


Redmine에서 설정 부분의 저장소 부분에 대한 것들을 살펴보자.

아래 적힌 내용은 저자가 테스트해본 결과에 기반한 것이다.
저자가 잘못 알고 있는 부분이 있다면 언제든 알려주기 바란다 !!!!


□ 커밋(commit)된 변경묶음을 자동으로 가져오기
   - Redmine 탭에서 '저장소'를 클릭하여 페이지를 열 때 저장소의 변경 사항을 받아오게 한다.
   - 선택하지 않으면 변경된 사항을 가져오지 않는다. 이런 경우 별도로 cron 작업을 통해서 변경 사항을 적용한다.

□ 저장소 관리에 WS를 사용
   - Redmine 공식적인 설명을 보면, SVN 저장소를 생성하기 위한 스크립트를 설치했을 때 활성화 시켜야 한다고 한다.
   - 그런데, Git refresh를 할 때에도 활성화 되어야 한다. 이유는 아직 모르겠다.

□ API 키
   - 실행 권한을 받기 위해서는 '키 생성'을 하고 이를 사용하면 된다.




자~ 서론이 길었다. 이제 시작해보자.

우리가 원하는 것은 현재 Redmine에 있는 하나의 프로젝트에서 사용하고 있는 Git repository에
새로운 commit이 들어오면 Redmine에게 정보를 리프레쉬 하라고 명령을 보내는 것이다.


1. Redmine 준비하기
   - 위 스크린샷과 같이,
   - [ 관리 → 설정 → 저장소 ] 메뉴에서 설정을 하자.
      ▷ 커밋(commit)된 변경묶음을 자동으로 가져오기 : 활성화
      ▷ 저장소 관리에 WS를 사용 : 활성화
      ▷ API 키 : 키생성


2. 저장소 경로 확인하기
   - 어떤 저장소인지 확인을 하자.



3. Git repository에 hook 설정하기
   - [ post-receive ] hook을 작성하자.

$ cd /srv/repository/barerepo.git
$ cd hooks
$ nano ./post-receive

   - [ _apikey ] 값은 위에서 생성한 값을 이용하면 된다.
   - [ _projectid ] 값은 프로젝트의 식별자를 사용한다.

#!/bin/bash

_apikey=UDcdoUtTm4a15xycCH52
_projectid=test

curl "http://127.0.0.1/redmine/sys/fetch_changesets?key=$_apikey&id=$_projectid"&

$ chmod +x ./post-receive

이걸로 끝이다.

그런데, 실제 push 작업을 해보면 무언가 좀 이상한 것이 보일 것이다.

$ git push
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 233 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
remote:                                                  Dload  Upload   Total    Spent     Left    Speed
remote: 100     1       0     1          0     0       0           0     --:--:--  0:00:07 --:--:--     0
remote:  To /srv/repository/barerepo.git
   bbde6a2..1107f45  master -> master

push를 하게 되면 Remote repository 입장에서 commit을 받아들인 후 post-receive 명령까지 수행을 해야 한다.
push 작업이 마무리 되는 순간은 post-receive 스크립트가 모두 완료가 되는 때이다.

그래서, 이렇게 하는 것이 문제가 될 수도 있다. 개발자 입장에서는 commit만 push가 되면 되는데,
(개발자 입장에서) 알지 못할 작업 때문에 push가 완료되는데에 시간이 더 소요되기 때문이다.



단지 어떻게 하는지만 알고 싶은 사람은 여기까지면 충분~!!
조금 더 알고 싶은 사람을 위해 설명을 추가하면...

   - [ http://<redmine url>/sys/fetch_changesets?key=<key값> ]과 같이 사용해도 충분하다.
   - 다만, 위와 같이 사용할 경우 사용하고 있는 redmine 전체에 대해서 refresh 하게 된다.

   - 전체가 아니라 특정 프로젝트만 refresh 하고 싶은 경우 위와 같이 [ &id=<식별자> ]를 붙이면 된다.

   - redmine 가이드를 보면 Git repository 이름을 사용하게 되어있는데, 그렇게 하면 실행이 안되었다.
   - 기능 변경이 있던지, 아니면 뭔가의 오류로 보인다.

   - [ /sys/fetch_changesets ] 주소는 그냥 사용하면 된다.

   - 개발자의 개발 과정에 지장을 주기 싫다면 (push 명령의 완료 시점) 위와 같이 이벤트 드리븐 방식으로 하면 안된다.
   - cron 등의 방법을 사용해서 개발자 부담을 줄여주는 것도 고려해볼만 하다.
   - [ ruby /path_to_redmine/redmine/script/rails runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 & ]


Redmine 공식 가이드는 아래와 같다.

http://www.redmine.org/projects/redmine/wiki/HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit

반응형

지속적인 통합을 지원해주는 가장 유명한 도구인 Jenkins는
Java로 만들어졌고 400여개 이상의 플러그인을 제공해주고 있다.

지속적인 통합이라는 말을 이해하기 힘든 분은 그냥 빌드 자동화 (Build Automation) 도구라고만 이해해도 된다.

본래 Hudson이라는 이름의 도구였는데 Oracle에 흡수되면서 발생한 이슈들로 인해서
2010년 투표를 통해 별도 분리를 하기로 결정을 하고 2011년에 Jenkins라는 이름을 달고 별도 프로젝트로 분리했다.

Hudson을 만든 사람으로 유명한 Kohsuke Kawaguchi는 여전히 Jenkins 개발에도 참여하고 있으며,
여전히 많은 plugin 개발에도 참여하고 있다.

사실 Kohsuke는 약 8년 정도 Sun Microsystems에서 근무를 했었다.
그러다가 2010년도에 Sun이 Oracle에 합병이 되면서 짧게 나마 Oracle에서 근무를 했었다.
이런 이유로 Hudson이 Oracle 소유가 되어버린 것 같다.

http://jenkins-ci.org/




1. Release vs LTS (Long-Term Support Release)

   - 실제 업무에 사용하기 위해서는 LTS 버전으로 설치 하는 것을 추천한다.



2. JDK installation

   - http://whatwant.tistory.com/438



3. Download

   - LTS 가장 최신 버전으로 다운로드
   - 설치 경로는 필자의 개인적인 취향 (개취존중 !)




4. Script

   - 사실 Jenkins를 실행하는 것은 정말 쉽다.
   - [ java -jar jenkins.war ] 명령만으로도 실행이 가능하다.

   - 하지만, 제대로 서버에서 Jenkins를 활용하기 위해서는 script를 만들어서 init.d 로 관리하는 것을 추천한다.

$ sudo nano /etc/init.d/jenkins

#!/bin/sh

DESC="Jenkins CI Server"
NAME="jenkins"
PIDFILE="/var/run/$NAME.pid"
#RUN_AS="jenkins"
RUN_AS="chani"
COMMAND="/usr/bin/java -- -jar /srv/install/jenkins/jenkins.war"

d_start() {
        start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}

d_stop() {
        start-stop-daemon --stop --quiet --pidfile $PIDFILE
        if [ -e $PIDFILE ]
                then rm $PIDFILE
        fi
}

case $1 in
        start)
                echo -n "Starting $DESC: $NAME"
                d_start
                echo "."
                ;;
        stop)
                echo -n "Stopping $DESC: $NAME"
                d_stop
                echo "."
                ;;
        restart)
                echo -n "Restarting $DESC: $NAME"
                d_stop
                sleep 1
                d_start
                echo "."
                ;;
        *)
                echo "usage: $NAME {start|stop|restart}"
                exit 1
                ;;
esac

exit 0

   - 나중에 빌드 서버를 제대로 활용하기 위해서 고려해야 하는 부분은 RUN_AS 부분이다.
   - 어떤 계정 권한으로 Jenkins를 실행할 것인지 명시하는 부분이다.

$ sudo chmod +x /etc/init.d/jenkins
$ sudo service jenkins start

   - 지금은 이렇게 직접 실행을 하지만, 이후부터는 재부팅 때 자동으로 실행이 된다.


   - 별다르게 설정하지 않으면 기본적으로 8080 포트를 사용한다.


설정이나 사용하는 방법에 대해서는 별도로 살펴보도록 하겠다.
일단은 실행해서 접속이 되는 것까지 진행한 것으로 만족하자 !!! ^^


(흑흑... 실은 내일 출근하려면 지금 자야한다.... 연휴의 첫째날..... 새벽 1시를 막 넘긴 시간에.... 흑흑....)
반응형

+ Recent posts