2017년 8월 2일 수요일

도커 이미지에 볼륨 마운트시 소유권한 문제

Docker 이미지를 VM 이나 기타 환경에서 동작시킬 때 문제 중 하나는, 특정 프로퍼티파일이나 볼륨 마운트를 실시간에 Puppet등으로 docker -v 를 통해서 붙이는 경우의 파일 퍼미션이다. 이를테면 도커 이미지에서 동작하는 톰캣의 UID와 GID가 각각 1200:1200 이런 식이라고 할 때, 볼륨 마운트 시킨 파일의 퍼미션이 위와 같이 일치하지 않거나 최소한 읽기 권한 등이 없으면 파일에 접근할 수가 없다.
이것의 또 다른 문제점은 해당 docker 이미지 내의 UID / GID가 puppet이나 도커 이미지를 실행하는 VM에 의해서 생성된 것이 아니라는 것이다. 
언뜻 생각하기에는 실행하는 VM이 해당 도커 이미지 안으로 로그인하여 파일 소유 권한을 바꿔야 하는 특정 디렉토리에 접근해서 해당 디렉토리/파일의 UID GID를 VM의 것으로 바꾸던지(이런 경우 passwd와 group의 것도 바꿔야 함) 하면 될 것 같지만 이런 경우 immutable environment 라는 컨셉이 깨질 수가 있고( 도커 이미지로 만들어질 때와 그 이후 실행될 때의 상태가 다름), 또한 의도치 않게 도커 이미지 안에서 해당 UID GID로 실행되어야 하는 다른 것들이 있을 경우 그 프로세스들이 접근 퍼미션 문제를 겪을 수가 있다.
또 다른 방법으로는 도커를 실행하는 프로세스가 docker run -t <image name> /bin/bash 등으로 도커 이미지 내부에 들어가서 /etc/password와 /etc/group 등에 접근해서 UID PID를 알아낸 다음 그걸 이용해서 도커에 마운트하는 로컬 볼륨의 소유권한을 바꾸는 방법이 있을 수 있다. 
이것도 뭔가 구리다 싶으면 마지막 방법으로는 그냥 서로 "약속"을 통해서 해당 마운트를 읽어들여야 하는 계정의 UID와 GID를 미리 정해놓는 것이다. 즉 도커 이미지를 생성할 때 추가할 tomcat의 UID GID를 1200으로 미리 맞춰놓고 도커 이미지를 실행하는 VM의 Puppet등이 docker -v 로 마운트하는 볼륨의 소유권한을 죄다 1200:1200으로 바꿔놓는 것이다. 유저명이나 그룹 이름은 매칭할 필요가 없다 어차피 UID GID가 같으면 그냥 같은 애들이니깐.
좀 무식한 것 같지만 사실 마지막 방법이 제일 편하다. -_-;; (퇴근전에 왜 이런 뻘글을 쓰고 있나)
제일 쉬운 방법은 그냥 읽어들여야 하는 내용을 파일에 넣지 말고 어디 데이터베이스나 key/value storage(etcd같은?) Vault 같은 곳에 넣고 읽으면 될 것 같지만.. 그럼에도 볼구하고 파일을 런타임시 마운트해서 읽어야 하는 케이스는 종종 존재한다. 혹시 같은 문제를 겪고 있는 혹은 곧 겪을 분들은 참고하시라.

2017년 7월 24일 월요일

Hyper X Cloud II vs. Logitech G633 비교

페이스북에서 쓰기 시작하다가 내용이 길어져서 미디엄과 블로거로 옮김.
집에서는 HyberX Cloud II Gaming Headset을 쓰고 회사에서는 Logitech G633을 쓰고 있는데 나름 두개 다 게이밍 헤드셋 중에서는 가격이나 성능이 중급 이상은 되는 기기들이다. 혹시라도 게이밍 해드셋 고민중이신 분들께 도움을 드릴 겸 평을 써보자면…
헤드셋의 마이크 감도는 로지텍쪽이 월등한 듯 하다. 문제는 굳이 들리지 않아도 되는 주변 소음까지 너무 잘 잡는 듯한 느낌. 마이크의 성능이나 상대방이 듣는 음질 자체는 HyberX Cloud II가 나은 듯.
G633은 헤드셋 자체에 매크로 버튼이랑 볼륨 조절 버튼이 왼쪽 헤드셋 자체에 붙어 있어서 게임하거나 음악 듣다가 음량 조절이 무척 쉽다. 매크로 키는 거의 쓸데가 없고… HyberX Cloud 는 다른 헤드셋과 마찬가지로 헤드셋 줄에 붙어있는 컨트롤러를 통해서 조절가능. 다만 여기 마이크랑 헤드셋, 그리고 7.1채널 시뮬레이션을 해주는 버튼이 같이 붙어 있어서 마이크와 헤드셋 음량을 동시 조절하긴 이쪽이 편함.
G633은 USB와 3.5mm잭을 동시에 입력받을 수 있음. 이 말이 뭐냐면 만약에 PC와 맥을 동시에 가지고 있다면 PC에 G633의 USB 포트를 연결하고 맥에 3.5mm잭을 연결하면 PC로 게임이나 작업을 하면서 소리를 듣다가도 혹시라도 맥쪽에서 이벤트가 발생하거나 뭔가 소리가 시스템으로부터 발생하면 그 소리도 같이 들을 수 있음. 쓸데없다면 쓸데없지만 또 유용하게 쓸 수 있는 기능. (당연히 3.5mm용 컨트롤러도 붙어 있어서 볼륨조절이나 마이크 뮤트가 가능)
글을 쓰고 있는 현재 시점에 가격대는 둘 다 비슷비슷한 $100 USD근처. 다만 무선 버전을 원한다면 G633의 무선버전인 G933도 있다. G933은 유선기능은 G633과 동일하고 거기다가 무선 연결도 지원하는 버전. 가격은 현재 기준으로 대략 $140USD.
귀와 접촉하는 부분의 재질을 보자면, HyberX Cloud II는 두가지, 가죽과 천 모두를 지원한다. 근대 개인적으로 가죽 재질은 게임할때 정말 덥다. 특히나 게임하다 보면 몰입해서 얼굴이나 귀에 땀이 차기 쉬운데(나는 그럼 -_-;; 안그런 게임은 재미가 없으니까) HyperX Cloud II는 가죽과 천 재질 두가지를 제공하고 이걸 교체 가능하긴 한데.. 가죽은 덥고 땀 차이고.. 천 재질은 이상하게도 먼지가 잘 들러붙는다. 정전기가 잘 발생하는 재질인거 같기도. 반면에 G633은 천재질만 재공하긴 하는데 최소한 먼지가 들러붙진 않는다. 다만 G633은 약간 귀를 감싸는 부분이 사각형 비슷해서 귓볼이 좀 크거나 귀 모양이 많이 둥근 사람이라면 귀 일부분이 헤드셋 커버 부분과 접촉될 수 있어서 불편함을 느낄 수 있음. 반면 Hyper X Cloud II 는 거의 완벽하고 둥근 모양이라서 덜 그런 듯.
두가지 모두 6개월 이상 쓰고 있는 사용자로써의 리뷰는 여기까지.

가장 많이 본 글