여기서부터 시작되는 설치매뉴얼은 특별한 언급이 없는한 Ceph, OSD-0 그리고 OSD-1 노드 모두 똑같이 실시하는 것으로 한다.  Ceph 노드에서 먼저 실시하고, 이후 OSD-0과 OSD-1 노드에 적용하는 것을 추천한다.

1.  먼저 Ceph로 사용할 컴퓨터 혹은 가상머신 (이하 Ceph라고 함)과 스토리지 용으로 사용할 가상머신 (이하 OSD라고 함)에 우분투 12.04 LTS를 설치한다.  설치 과정 중에 나오는 몇몇 설정은 반드시 아래의 조건을 따른다.

Ceph 노드의 호스트네임은 반드시 ceph로 한다.
첫번째 OSD 노드의 호스트네임은 반드시 osd-0,
그리고 두번째 OSD 노드의 호스트네임은 반드시 osd-1,
마찬가지로 세번째 OSD 노드의 호스트네임은 반드시 osd-2로 한다.

위의 사항이 꼭 "반드시" 지켜야하는 건 아니지만, 본 매뉴얼을 그대로 따라하기 위한 규칙 정도로 생각해주시면 되겠다.  꼭 알고있어야할 점은, Ceph는 hostname을 기준으로 작동한다는 점이다.  계정명은 크게 상관없으니 편한대로 정한다. 

OSD의 경우 우분투가 설치될 첫번째 하드디스크만 포맷하고, 나머지 2개는 추후 설명을 위해 일단 놔둔다. 

2.  sudo -i를 이용해 root로 변경 후 패스워드를 설정한다.
  a. Ceph 노드에서 root의 ssh 키를 만들어줘야한다.  ssh-keygen -t rsa
  b. Ceph 노드에서 ssh-copy-id ceph, ssh-copy-id osd-0 그리고 ssh-copy-id osd-1 명령어로 비밀번호 입력없는 접속을 위한 키를 전송해준다.  Ceph가 OSD 노드간 통신을 위해 SSH를 이용한다.
  c. 또한, 반드시 root의 ssh 접속을 허용해야한다.  /etc/ssh/sshd_config에서 root의 접속이 활성화되어있는지 확인한다.

3.  /etc/hosts 파일을 열어서 ceph, osd-0, 그리고 osd-1 서버 각각의 IP 주소와 호스트명을 똑같이 입력해준다.

4.  sudo apt-get update && sudo apt-get dist-upgrade를 실시하고 재부팅 한다.

5.  이제 Ceph의 저장소를 추가할 차례다.  Ceph가 이미 리눅스 커널에 포함되어있고 우분투/데비안 저장소에도 있긴 하지만, 버전이 워낙 낮은 관계로 (0.41), Ceph의 공식 매뉴얼대로 따라하면 제대로 되지않는다는 문제가 있다.  따라서,  Ceph의 저장소에서 직접 받아서 설치한다.
wget -q -O- 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudo apt-key add -
echo deb http://ceph.com/debian-bobtail/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt-get update && sudo apt-get install ceph

6.  Ceph 패키지의 용량이 대략 36메가 가량 되는데, 우리는 이것을 OSD 서버들에도 똑같이 해야하기 때문에 apt-get clean을 하지말고 ceph에서 받아놓은 패키지를 osd-0/1의 /var/cache/apt/archives에 보낸다.

7.  Ceph의 버전을 확인해본다.  Ceph의 패키지 저장소가 제대로 추가되지 않았으면 0.41이 나올 것이고, 제대로 추가됐었다면 2013년 5월 8일 기준, 0.56.6이 표시될 것이다.
$ ceph -v
ceph version 0.56.6 (95a0bda7f007a33b0dc7adf4b330778fa1e5d70c)

8.  Ceph는 불친절하게도 설치시에 설정파일을 제공해주지 않는다.  직접 작성해야하는데, 그나마 다행스럽게 Ceph 문서에서 그대로 갖다붙이면 된다.  크게 어려운 부분은 없다.  일단 전체를 붙이고, 개별적으로 설명한다.  파일의 위치와 이름은 /etc/ceph/ceph.conf 이며, 권한은 644로 설정한다.

[global]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx

[osd]
osd journal size = 1000
filestore xattr use omap = true

[mon.a]
host = {hostname}
mon addr = {ip-address}:6789

[osd.0]
host = {hostname}

[osd.1]
host = {hostname}
#devs = {path-to-device}

[mds.a]
host = {hostname}

[global] 섹션은 따로 건드려줄 건 없다.  ceph와 osd간의 인증방식에 대한 부분인데 어차피 cephx 말고는 다른 옵션이 none 밖에 없기도 하거니와, 이 부분은 none은 절대로 권장하지 않는다고 한다.

[osd] 섹션은 osd 스토리지의 저널 사이즈를 지정하거나 위치 등을 지정할 수 있는데, 사실 공식문서에도 전혀 설명이 없다.  따라서 공식문서에서 제공하는 옵션을 그대로 사용하기로 한다.  다만, filestore xattr use omap = true 라인은 다음편에서 설명할 osd 하드디스크를 위해 눈여겨보는 정도만 한다.

[mon.a] 섹션은 Ceph의 스토리지 클러스터를 모니터링하는 호스트를 지정하는 부분이다.  host = {hostname}에서 중괄호친 부분을 ceph라고 바꾼다.  host = ceph  만약 ceph 노드의 호스트네임을 ceph로 설정하지 않았다면 이 부분에서 따로 지정한 호스트네임을 넣는다.  하지만, Ceph의 작동은 호스트네임이 지대한 영향을 미치기 때문에 본 매뉴얼에서는 되도록 ceph로 지정할 것을 권하는 바이다.  참고로, Ceph에서는 공식적으로 3대 이상의 모니터용 호스트를 둘 것을 권고한다.  두번째 모니터라면 [mon.b]가 되며, 세번째 모니터는 [mon.c]가 된다.  네이밍 센스가 참 어처구니 없다.

[osd.0] 섹션과 [osd.1] 섹션은 예상하시는대로 osd가 될 노드의 저장장치를 지정하는 부분이다.  본 매뉴얼의 예제에서는 osd-0과 osd-1에 각각 2대의 OSD용 하드디스크가 있으니, 결국 우리가 쓸 총 osd의 갯수는 4개가 되겠다.  따라서, 아래와 같이 적으면 되겠다.

[osd.0]
host = osd-0

[osd.1] 
host = osd-0

[osd.2]
host = osd-1

[osd.3]
host = osd-1 

위에서 얘기했지만, 네이밍 센스 참 구리다.  당연한 말이지만 host 뒷부분에 나오는건 OSD 노드 각각의 호스트네임이다.

[mds.a] 섹션은 메타데이터 서버를 지정하는 곳이다.  역시 마찬가지로 본 매뉴얼의 예제에서는 ceph로 한다.


따라서 본 매뉴얼에서는, 모니터와 메타데이터로 ceph 서버에 전부 몰아넣어서 사용하기로 하고, 데이터 저장용도로는 osd-0과 osd-1에 장착된 2개의 추가 하드디스크를 사용하게 되는 것이다.

대충 그림

Ceph 공식매뉴얼에 의하면, #devs = {path-to-device} 부분에서 osd로 쓸 디바이스의 장치명을 입력해도 되게끔 주석처리를 해놨지만, 해도 되고 안해도 된다.  안해도 제대로 작동한다.  넣고싶으신 분은 /dev/sdb1 등의 형태로 넣으시면 된다.


다 됐으면, 방금 작성한 우리의 첫 설정파일을 나머지 OSD 노드들에도 똑같이 복사해줘야한다.  위치와 권한은 당연히 똑같다.  Ceph 노드에서 루트 권한으로 scp를 이용해서 보내자.  위치는 /etc/ceph/ceph.conf에, scp로 보내면 권한은 기본값으로 644를 주게된다.

 

다음 편으로...

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

미루고 미룬 Ceph 오브젝트/블럭 스토리지의 설치 매뉴얼 작성을 시작한다...

글쓴이의 소개글에 써있지만 다른 얘기를 추가하자면,
현재 글쓴이가 근무하는 하와이 대학교 사범대학에는 캐노니컬 본사에서 파견나온 오픈스택 기술팀의 지원으로 구축되어진 오픈스택 클라우드 시스템이 운영되는 중이다.  다만, High Availability가 빠진채로 구축되어진 그들의 실력에 너무나도 큰 실망을 하게된 글쓴이의 사수가 이걸 갈아엎고자 오픈스택의 나름 초전문가 집단이라는 Mirantis와 기술지원 협약을 맺고 HA에 Ceph 스토리지를 붙여서 오픈스택 클라우드 시스템 전체를 제대로 구축하려는 계획을 갖고있다.  Ceph를 개발한 사람이 세운 회사인 InkTank와도 글쓴이의 사수가 몇번의 전화통화를 했었는데, 그쪽 입장에서는 아무래도 정부쪽 도입 차원에서의 또다른 케이스 스터디도 될겸 (주립대학은 미국 주정부에서 하나의 부서이다), 어느정도의 기술지원을 해줄 것으로 보인다 (규모가 작긴 해도 주립대학에서 도입하는 것이다보니 나름 이름값은 하나보다).  미란티스 기술지원팀이 6월 중순에 하와이 들어와서 3주간 머무를 예정이며 7월이면 아마 Swift와 Quantum이 제외된 오픈스택 클라우드 시스템을 가질 것으로 예상 중이다.

이에 대비하기 위해, 글쓴이의 사수께서는 Ceph 스토리지 클러스터링 구축에 대한 노하우를 미리 쌓기위해 글쓴이에게 그 임무를 맡겼으며, 대략 3대로 이루어진 클러스터를 가상머신과 실제 서버에 약 5회 정도 설치하고 약간의 테스트를 실시하였다.  시간관계상, 인력관계상, 그리고 여건상 자세한 테스트는 할 수 없었다 (단 두명으로 사범대학 전체 서버를 관리한다).  미국 최대의 컴퓨터 소매점인 Bestbuy에서 최근 Ceph로 스토리지를 갈아탔다고 했는데, OSD용으로 900대를 세팅했다고 한다.  이외 몇군데 케이스가 더 있긴한데 자료가 공개된 게 없어서 자세한 건 알 수 없지만, Ceph가 이젠 더 이상 프로젝트 단계는 아닌 것만은 분명한 것 같다.  따라서, 자세한 테스트는 글쓴이의 사수도 그냥 믿고 건너뛰는 것 같았다.

 

본 매뉴얼은 Ceph 오브젝트/블럭 스토리지 클러스터를 우분투 리눅스 서버에 설치하는 방법을 기술한 매뉴얼이다.  매뉴얼이라고 얘기했지만 사용법에 대한 매뉴얼이 아니라 "설치법"에 대한 매뉴얼이다.  설치한 환경은 맥북과 패러럴즈를 이용하여 매뉴얼을 작성했지만, 실제 글쓴이는 맥북+패러럴즈 뿐만 아니라 리눅스+버츄얼박스와 실제 서버까지 합쳐 대략 5번 이상 설치를 해봤다고 위에 이미 언급했으므로, 분명히 "된다" 라고 말씀드린다.  따라서, 설치환경은 크게 문제가 되지않으므로 그냥 넘어가고 준비물에 대해 설명한다.

1.  본 매뉴얼을 따라할 수 있는 컴퓨터 최소 3대 이상 혹은 버츄얼박스/VMware/패러럴즈 등의 가상머신 프로그램
2.  만약 가상머신으로 실습해보실 분이라면, 3대 이상의 가상머신을 굴릴 수 있는 CPU와 램, 그리고 하드디스크 용량
3.  리눅스와 네트워크, 그리고 터미널 사용에 대한 충분한 상식

설치에 앞서 본 매뉴얼을 따라하는데 필요한 환경을 설정하고 그외 몇가지 사항에 대해 설명한다.

1.  필요한 서버: Ceph 1대, OSD 3대
2.  Ceph 노드에는 하나의 운영체제용 하드디스크만 있으며, 자료 저장 용도(osd)로는 사용하지 않는다.
3.  OSD 노드에는 3대의 하드디스크가 있으며 하나는 리눅스 OS 설치 및 운영용이며 나머지 2대는 Ceph 스토리지 클러스터용(osd)이다.
4.  각각의 OSD 노드에는 2기가의 램, OS 설치용으로는 10기가 하드디스크, 그리고 OSD용으로 30기가 하드디스크 2개씩을 생성한다. 
5.  OSD용으로 할당하는 2개의 하드디스크는 절대로 LVM으로 묶지 않도록 한다.  다만, 하드웨어 RAID 카드에 의한 RAID-0은 괜찮다.
5.  세번째 OSD 노드는 OSD 추가설치에 대해 설명할 예정이므로 기본적인 설치는 생략한다.
6.  글쓴이는 우분투 한국 로코팀의 공식 컨택터이므로, 운영체제는 모두 우분투 12.04 LTS 64비트판으로만 설명한다 (32비트로는 해보질 않았지만, 32비트로 스토리지 서버 운영하는 곳은 없을 거라고 본다).
7.  Ceph에 대한 개념이나 기타 용어 설명 등은 여기나 혹은 구글을 참고하시고, 본 매뉴얼은 전적으로 Ceph의 공식 문서를 보고 작성했다.  참고로, Ceph 공식문서는 제대로 완성되지 않은게 많고, 최신 버전이 반영되어있지 않으며, 게다가 군데군데 대충 건너뛴 부분도 많다.
8.  Ceph나 오픈스택 공식 문서에 의하면, 오픈스택에 Ceph 스토리지를 붙여서 사용하는 방법이나 Keystone 통합인증방법 등에 대한 설명이 있긴하지만, 오픈스택에 관련된 부분에서는 글쓴이의 개인 컴퓨터에 오픈스택을 구축해서 시연하는 것을 보여주는 것이 쉽지않기 때문에 이 부분은 생략한다.
9.  DevStack은 완전한 오픈스택 시스템이라고 하기에는 좀 뭔가 부족한데다, 여러가지 설정과 경로가 조금 다르기 때문에 역시 제외한다 (글쓴이가 수도없이 많이 해봤는데, 이게 가상머신이라 안되는건지 devstack이라 안되는건지 알 수가 없어서 포기했다).  개인적인 의견으로는, devstack은 "오픈스택이란 대충 이런거다" 라고 맛만 보여주는 정도의 데모 버전이라고 생각한다.
10.  글쓴이가 근무하는 곳의 오픈스택 클라우드 시스템은 이미 여러가지 서비스가 운영되고 있기 때문에 절대 건드릴 수가 없다.  따라서, 어쨌든 오픈스택에 관한 부분은 Swift API에 대한 부분을 제외하고는 모두 생략한다.
11.  5월 7일자로 새로운 안정버전인 CuttleFish가 나왔고, 그러면서 매뉴얼대로 작동되지 않는 부분이 좀 있어서 심하게 많이 당황했었다.  게다가 아직 공식문서에도 제대로 반영이 된게 없어서, 결국 새로운 버전으로 매뉴얼을 제작하는건 에러메시지도 막 건너뛰고 그러는 것이 별로 보기좋지 않아서 이전 안정버전인 Bobtail로 설명하기로 한다.  참고로 CuttleFish는 CentOS에 대한 지원이 강화되었다.  다시 말하자면, 이전 버전까지는 우분투/데비안에서만 공식적으로 돌아갔었다.
12.  파일을 복사해서 각각의 스토리지들이 어떻게 복사가 되고 하는 등의 "테스트"는 진행하지 않는다.  테스트까지 진행할시 너무나도 양이 많아지기 때문에 본 매뉴얼은 전적으로 "설치"와 설치에 대한 확인작업만 설명하며, 테스트는 이 글을 읽는 분들께 부탁드린다.
13.  분명히 틀린 부분도 있을 것이고 잘못 설명한 것도 있을 것이며, 글쓴이가 제대로 이해하지 못한 부분도 있을 것이다.  이 매뉴얼을 작성하기 위해 많은 시간을 투자한 글쓴이를 위해, 이 글을 읽는 분들께 너그러움을 부탁드린다.

 

다음 편으로...

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

리눅스나 맥의 터미널에서 BASH의 PS1에 색깔을 넣는 방법이다.  PS1에서 4까지 값이 있지만 우리가 필요한건 1만 변경하면 된다.  먼저 글쓴이의 PS1을 공개한다.

PS1

구조를 보면, 사용자명@호스트명:디렉토리$  식의 구조로 되어있고, 따라서

녹색+사용자명+빨간색+@+녹색+호스트명+파란색+:+디렉토리+색 초기화+$

이런 식으로 넣는다는 것을 알 수 있다.  역시 알고보면 간단하다.  구조를 알았으니 이제 적용만 하면 된다.  적용하는 방법은 터미널을 열고,

export PS1='녹색+사용자명+빨간색+@+녹색+호스트명+파란색+:+디렉토리+색 초기화+$ '

라고 하면 되겠다.  그런데 이걸 매번 하면 귀찮으니까, 아예 터미널이 열릴 때마다 자동으로 적용되도록 해보자.  

 

맥 OS X:  /etc/bashrc 파일을 열어서 PS1 부분을 주석처리하던가 지우던가 하고 새로운 설정을 넣으면 된다.
리눅스:  $HOME/.bashrc 파일을 열면 몇 가지의 PS1 라인이 보이는데, 터미널 타입에 따른 적용을 다르게 하는 부분이다.  귀찮으니까 전부 주석처리하고 새로운 설정을 넣으면 된다.

컬러 코드 (ANSI 코드)를 인터넷에서 알아내는게 의외로 참 힘들더라.  웹서핑 한참 해도 쉽게 찾을 수 없었다.  예전에 어디선가 구해둔 것을 공유해드린다.  아래의 코드를 보고 입맛에 맞는 컬러 프롬프트를 만들어보시면 되겠다.  코드 아래에 파일을 첨부해뒀으니 터미널을 열고 실행권한을 줘서 실행을 시키거나, sh를 붙여서 실행하시면 터미널에서 색상을 보여준다.  참고로 Draco님의 컬러 PS1도 구경해보시라.  홈페이지 바로가기

 

echo " [0m : 모든 색과 스타일 초기화"
echo -e "\033[01m [01m : 굵게(bold) / 밝게 \033[0m"
echo -e "\033[3m [3m : 이탤릭체(italic) \033[0m"
echo -e "\033[4m [4m : 밑줄(underline) \033[0m"
echo -e "\033[7m [7m : 반전(글자색/배경색을 거꾸로) \033[0m"
echo -e "\033[9m [9m : 가로줄 치기 \033[0m"
echo -e "\033[22m [22m : 굵게(bold) 제거 \033[0m"
echo -e "\033[23m [23m : 이탤릭체(italic)제거 \033[0m"
echo -e "\033[24m [24m : 밑줄(underline)제거 \033[0m"
echo -e "\033[27m [27m : 반전 제거 \033[0m"
echo -e "\033[29m [29m : 가로줄 제거 \033[0m"
echo -e "\033[30m\033[47m [30m : 글자색:검정 \033[0m"
echo -e "\033[31m [31m : 글자색:빨강 \033[0m"
echo -e "\033[32m [32m : 글자색:초록 \033[0m"
echo -e "\033[33m [33m : 글자색:노랑 \033[0m"
echo -e "\033[34m [34m : 글자색:파랑 \033[0m"
echo -e "\033[35m [35m : 글자색:마젠트(분홍) \033[0m"
echo -e "\033[36m [36m : 글자색:시안(청록) \033[0m"
echo -e "\033[37m [37m : 글자색:백색 \033[0m"
echo -e "\033[39m [39m : 글자색으로 기본값으로 \033[0m"
echo -e "\033[40m [40m : 바탕색:흑색 \033[0m"
echo -e "\033[41m [41m : 바탕색:적색 \033[0m"
echo -e "\033[42m [42m : 바탕색:녹색 \033[0m"
echo -e "\033[43m [43m : 바탕색:황색 \033[0m"
echo -e "\033[44m [44m : 바탕색:청색 \033[0m"
echo -e "\033[45m [45m : 바탕색:분홍색 \033[0m"
echo -e "\033[46m [46m : 바탕색:청록색 \033[0m"
echo -e "\033[47m [47m : 바탕색:흰색 \033[0m"
echo -e "\033[49m [49m : 바탕색을 기본값으로 \033[0m"

첨부파일: ansi_color.sh

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

본 매뉴얼은 글쓴이처럼

1. 맥 OSX에 내장된 Terminal 을 사용하며
2. MacPorts나 brew를 통해 설치하는 것을 꺼리는 분

들에게만 해당되겠다.  리눅스나 유닉스 계통의 운영체제에 익숙하신 분이라면 아주 쉽고 간단하다.  소스를 받아서 빌드하여 설치하는 것이기 때문에 먼저 Xcode가 있어야한다.  참고로 글쓴이가 직접 빌드해보고 사용 중이며 또한 글쓴이는, iTerms 2랑 Terminal이랑 뭐가 그렇게 크게 불편한 차이가 있는지 잘 모르겠더라.  Terminal도 세팅 잘하면 전혀 불편하지 않다.

 

1.  이벤트 라이브러리를 다운받는다.  http://sourceforge.net/projects/levent/files/libevent/libevent-2.0/ 에 가서 최신버전을 받으면 되겠다.  나는 2.0.21-stable로 했다.

2.  Tmux를 다운받는다.  역시 최신버전을 받으면 된다.  http://sourceforge.net/projects/tmux/files/tmux/

3.  이벤트 라이브러리부터 압축을 푼다.  디렉토리를 이동하여 configure부터 시작하면 되는데, /opt 같은 특정 디렉토리를 지정하고 싶으시면 prefix를 주면 되겠다.  prefix를 따로 안주면 당연하겠지만 /usr/local 밑에 설치된다.  이것은 아래에 설치할 tmux 역시 마찬가지다.

./configure 
make
sudo make install

4.  Tmux를 설치할 차례다.  위랑 똑같다.  다른 매뉴얼들 보면 LDFLAGS나 CPPFLAGS를 주는 것도 있던데, 글쓴이 경험상 안줘도 잘된다. 

./configure 
make
sudo make install

5. Tmux의 위치를 확인해보자.

which tmux

 

너무 쉬워서 이런걸 매뉴얼이라고해도 되나 싶다...

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

sudo locale-gen en_US.UTF-8

sudo dpkg-reconfigure locales

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

$ sudo apt-get install tightvncserver

$ vncserver :1 -geometry 1280x800 -depth 16 -pixelformat rgb565

 

클라이언트 측에서 포트번호 5901이나 디스플레이 :1로 접속하면 된다.

윈도우 사용자라면 무료로 받을 수 있는 vnc클라이언트인 UltraVNC Viewer를 설치해서 VNC Server 주소에 IP 주소를 넣고 :1을 붙이면 되겠다.

예)  192.168.0.20:1

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

며칠 전에 큐비보드를 주문해서 받았다.  라즈베리 파이 중에서 뭘 살까 고민하다가 이걸 골랐는데, 결국은 라즈베리 파이도 주문하고 말았다.  일단 라즈베리 파이와의 차이점이라면, 내장 메모리가 4GB가 있어서 별도의 SD카드를 꼽지않아도 된다는 장점이 있고, SATA 하드디스크를 꼽을 수 있는 포트가 하나있어서 용량확장을 쉽게 할 수 있다는 점이 되겠다.

주문해서 처음 받으면 안드로이드가 설치되어있는데, 큐비보드 홈페이지에 가면 XBMC가 내장된 안드로이드 이미지가 별도로 빌드되어있고 이것을 큐비보드에서 제공하는 LiveSuit이라는 낸드플래시 기록 프로그램을 사용하면 쉽게 설치가 가능하지만, 써본 결과 제대로 활용하기가 어려웠다. 그 이유는, 현재 내가 홈서버로 운영하는 PC를 도저히 대체할 수 없다는 점이었는데 내 홈서버로 운영 중인 컴퓨터의 사양은 코어2듀오 씨퓨에 4기가램, 2.5테라바이트 하드디스크가 장착되어있다.  내 맥북에서 지정된 시간에 rsync로 매일 자동백업을 실시하고 트랜스미션 토렌트 웹클라이언트가 24시간 실행 중이며, 1080p 고화질 영상이 많고 내 맥북에서 홈서버와 통신을 자주하는 관계로, 기가비트 랜카드 2장을 bonding해놨다.  기가비트 랜카드 2장 본딩이 사실상 가장 큰 이유다.  아래는 현재 울집 네트워크 구성도.

MyHomeNetworkMap

 

결국 문제는, 기가비트 랜카드 2장을 bonding해놓은 속도를 큐비보드가 낼 수 없다는 점이 가장 큰 이유였고, 그외로는 안드로이드로 포팅된 XBMC는 기대 이하 수준이었다.  따라서, 큐비보드는 그냥 리눅스를 설치해서 쓰기로 결정을 하고 큐비보드 홈피를 뒤져보니 낸드 플래시에 리눅스를 직접 플래싱할 수 있는 방법이 나와있어서 이것을 본인이 직접 해보면서 이 매뉴얼을 작성한다.  특별한 문제없이 성공적으로 설치했고 잘 작동했다.

들어가기에 앞서, 본 매뉴얼은 다음과 같은 분들에게만 권한다.

1. 리눅스 혹은 터미널 사용에 익숙하신 분.

2. GUI 없이 그냥 서버로만 쓰실 분.

 

일단은 적어도 1기가 이상의 마이크로 SD카드가 하나 필요하다.

1.  먼저  http://guillaumeplayground.net/share/debian_wheezy_armhf_v1_mele.img.gz 를 다운받는다.  용량은 대략 940메가 정도 되고, 내 경험으로는 받다가 자주 끊겼다.  리눅스나 맥을 사용하시는 분이라면 wget이나 curl을 이용하고나서 필히 checksum값을 확인하시기 바란다.

 

2.  이제 MicroSD를 삽입한뒤 언마운트를 해야한다.  맥 사용자는 디스크 유틸리티를 열고 MicroSD카드를 클릭하면 마운트 해제 버튼을 클릭할 수 있게 되는데, 이것을 클릭하면 된다.  "꺼내기"를 클릭하면 안된다.  만약 터미널 사용이 편한 맥유저라면 터미널에서 diskutil list를 실행한 뒤 거기서 나오는 MicroSD의 파티션 번호를 확인해서 sudo diskutil umount /dev/diskXsY 등으로 언마운트를 하면 된다.  리눅스 사용자라면 그냥 알아서 umount를 하시면 되겠다.

 

3.  MicroSD를 꽂은뒤 윈도우 사용자라면 http://guillaumeplayground.net/mele-a2000-headless-debian-wheezy-armhf-with-nand-install-v1/ 에 나와있는 raw write이나 usb-image-tool을 사용하여 MicroSD에 기록을 하고, 맥/리눅스 사용자라면 dd를 이용하여 기록한다.  dd 명령으로 이미지를 기록할 때는 파티션 번호는 넣지않는다.

예)  sudo dd bs=4096 if=./debian_wheezy_armhf_v1_mele.img of=/dev/disk2  

 

4.  기록이 끝났으면 카드를 삽입하고 큐비보드에 전원을 넣는다.  처음에는 빨간불만 들어오지만 곧 초록불이 들어오게 된다.  이 의미는 곧 부팅이 정상적으로 되고있다는 얘기다.  다만, 모니터는 들어오지 않기 때문에 SSH로 접속해서 작업을 진행해야한다.  일단, 사용 중인 공유기 메뉴에 들어가서 맥 어드레스 00:0a:20:00:10:00로 연결되어있는 기기의 IP주소를 확인하면 되겠다.  공유기의 DHCP 목록을 확인할 수 없는 상황이라면, 리눅스 유저라면 nmap  -sP NETWORK/24 로 검색하면 현재 살아있는 호스트를 검색해낸다.

예) nmap -sP 10.0.1.1/24

 

5.  SSH로 로그인을 해본다.  편의상 큐비의 주소는 10.0.1.18이라고 가정한다.  ssh root@10.0.1.18  계정은 root이며 패스워드 역시 root이다.  접속하자마자 passwd root를 실행해서 바로 패스워드를 변경할 것을 추천한다.

 

6.  이제부터 낸드 플래시에 파일을 쓸 차례이다.  다음의 커널 이미지 파일을 다운받는다:

http://dl.cubieforums.com/loz/boot_partition/bootloader/cubie_nand_uboot_partition_image.bin

 

7.  그런다음, 위의 파일을 큐비의 낸드 플래시에 밀어넣는다.  

scp cubie_nand_uboot_partition_image.bin root@10.0.1.18:/dev/nand

 

8.  약 30초간 기다렸다가 재부팅을 한다.  터미널에서 reboot이라고만 입력하면 알아서 재부팅이 되며, 큐비에는 초록색 불이 꺼졌다가 곧 다시 켜질 것이다.  그런 다음, 20초 가량 기다린뒤 다시 ssh로 접속한다.  유의해야할 점은, DHCP에서 받아오는 주소가 바뀌었을지도 모르니 다시 한 번 확인해본다.

 

9.  낸드플래시 저장영역을 포맷한다.  mkfs.ext4 /dev/nandb

 

10.  포맷한 저장영역을 연결한다.  mount /dev/nandb /mnt

 

11.  df -m 명령어를 실행해서, 제대로 연결이 됐는지, 그리고 용량이 제대로 표시되는지 확인하면 된다.  표시단위는 메가바이트다.

 

12.  SD카드로부터 커널 이미지를 복사한다.

mkdir /tmp/boot

mkdir /mnt/boot

mount /dev/mmcblk0p1 /tmp/boot

cp /tmp/boot/uImage /mnt/boot/

 

13.  이제 남은건 SD카드에 설치되어있는 리눅스를 낸드플래시로 옮겨서 재부팅하는 일만 남았다.  먼저, 복사할 필요가 없는 디렉토리의 목록을 만들어서 이것을 텍스트 파일로 저장한다.  텍스트 파일의 이름은 EXCLUDE_FILE이라고 정한다.  그 파일 안에 다음을 적어넣는다.

/dev/*
/proc/*
/sys/*
/media/*
/mnt/*
/run/*
/tmp/*

이제 복사 명령어를 실행할 차례다.  cp명령어에 -ar 옵션을 붙여서 해도 되겠지만 개인적으로는 rsync를 선호한다.

rsync -acv --exclude-from=EXCLUDE_FILE / /mnt/

 

14.  종료한 뒤 전원이 꺼진게 확인되면 MicroSD를 제거한다.  그리고 전원을 다시 넣는다.  절대 전원코드를 그냥 뽑지말고, 셧다운 명령어나 poweroff 명령어를 사용한다.

 

15.  SSH로 접속한다.

 

16. 그외사항

/var, /tmp 등은 입출력이 빈번하기 때문에 낸드플래시에 두면 아무래도 좋진 않을 것 같다.

재부팅할 때마다 eth0 MAC address가 자꾸만 바뀐다.  이 경우는 일단 ifconfig eth0 | grep HWaddr | awk '{print $5}' 를 입력해서 나오는 현재 맥 어드레스를 복사한 뒤 (사실, 꼭 현재 맥 어드레스를 복사해야할 필요는 없다. 아시는 분들은 왜인지 아실거다), /etc/network/interfaces 파일을 열어서 iface eth0 inet dhcp 아래에 다음처럼 적어넣으면 된다.

hwaddress ether 96:f3:e4:d5:d6:85

 

이상입니다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

얼마 전, ODD 대신 박아둔 320GB짜리 하드디스크의 용량이 모자라는 관계로 1TB짜리 하드디스크로 교체했다.  따라서, 240GB짜리 SSD와 1TB짜리 HDD를 합쳐 총 1.24GB의 저장용량을 내 MBP에서 굴리는 셈.

예전부터 ZFS를 맥에서 써보고 싶었는데 MacZFS라는 상당히 안정적으로 포팅된 ZFS가 있다고 해서 그동안 하드교체만 기다렸다가 드디어 써봤다.  일단 결론을 내리면,  파일명이 한글로 되어있으면 제대로 작동하지 않는다.  그래서 난 못쓰겠다.  일단 한글로 된 파일이 너무나도 많았고, 그걸 일일히 모두 다 수정할 수도 없는데다, 앞으로도 영어로만 파일명을 정하기에는 힘들 것 같았다.

그럼에도 불구하고 써보고 싶으신 분은 http://code.google.com/p/maczfs/ 에서 다운받으시면 되겠다.  참고로, MacZFS의 안정성은 꽤 믿을만하다고 한다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

우분투에서 에어비디오 서버를 설치할 수 있는 아주 쉬운 방법이 있는데, 국내 블로그를 뒤져보면 아주 복잡하게 적힌 글들이 전부 다였다. 따라서 필자의 초간단 매뉴얼을 공개한다.

참고로 말씀드리면, 데비안에서는 정상적으로 동작하지 않기 때문에 수동으로 설치해야한다. 본 포스팅 맨 아래에 데비안에서 필요한 패키지를 적어놨다.

 

1. 먼저 자바를 설치한다. 필자의 매뉴얼을 참고하시면 되겠다.

http://jswlinux.tistory.com/entry/우분투에서-JDK-설치법

 

2. 우분투 저장소 목록에 에어비디오를 추가한다.

sudo add-apt-repository ppa:rubiojr/airvideo

sudo apt-get update

 

3. 에어비디오 서버를 설치한다.

sudo apt-get install airvideo-server

 

4. 설정파일을 적절히 수정해준다.

sudo vi /opt/airvideo-server/AirVideoServerLinux.properties

필자의 설정파일을 올린다.

path.ffmpeg = /opt/airvideo-server/bin/ffmpeg
path.mp4creator = /usr/bin/mp4creator
path.faac = /usr/bin/faac
password = 원하시는 비번을 넣는다. 공란으로 두면 비번을 묻지않는다.
subtitles.encoding = UTF-8
subtitles.font = NanumGothic
folders = Downloads:/home/user/Downloads,HardBox:/home/user/HardBox/Media/Movie_Clips (원하시는 경로를 넣는다)

 

5. 잘되는지 실행을 해본다.

$ airvideo-server 

만약 아래와 같은 메시지가 나오면서 가만히 있으면 정상적으로 실행되는 것이다.

DEBUG: SnapshotCache: Exception during SnapshotCache initialization: /home/jswlinux/.air-video-server/thumbnailCache.index.db (No such file or directory)
DEBUG: SnapshotCache: Trying to close index and data files
DEBUG: SnapshotCache: Second Attempt of SnapshotCache initialization failed: /home/jswlinux/.air-video-server/thumbnailCache.index.db (No such file or directory)2013-01-01 11:14:43.341::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
2013-01-01 11:14:43.363::INFO: jetty-6.1.x
2013-01-01 11:14:43.389::INFO: Started SocketConnector@0.0.0.0:45631
DEBUG: PortMapperAction: Scheduling task PortMapperAction$2 (6027060)
DEBUG: StatusReportAction: Scheduling task StatusReportAction$2 (8573884)

 

6. 이제, 서버를 부팅할 때 자동으로 실행되도록 init 스크립트를 만든다. 위치는 /etc/init 이며 파일명은 airvideo.conf 라고 정한다. 파일명은 바꿔도 무방하며, 마우스 드래그 방지 때문에 설정파일을 첨부한다.

첨부파일: airvideo.conf

본인의 계정명은 jswlinux이므로 아래의 내용에 유의해서 작성한다.

start on (net-device-up
and local-filesystems
and runlevel [2345])
stop on runlevel [!2345]
respawn
exec sudo -H -n -u jswlinux LANG=en_US.UTF-8 /usr/bin/airvideo-server

 

7. 재부팅한다. 끝.

 

--------------------------------------------------

데비안용 패키지 목록. 마우스 드래그 방지 때문에 텍스트파일을 첨부했으니 필요하신 분께서는 받아가시면 되겠다.

첨부파일: airvideo-debian_package.txt

libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev libfaad-dev ca-certificates-java icedtea-6-jre-cacao icedtea-netx libaa1 libaudio2   libcaca0 libclucene0ldbl  libfaad2 libflac8 libgif4 libiodbc2   libjack0 libmng1 libmp3lame0  libnspr4-0d libnss3-1d libphonon4 libpulse0 libqscintilla2-8   libqt4-dbus libqt4-designer  libqt4-network libqt4-opengl  libqt4-ruby1.8 libqt4-script libqt4-sql libqt4-sql-mysql libqt4-svg  libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4 libqtgui4   libqtruby4shared2 libraptor1  librdf0 libruby1.8 libsamplerate0  libsdl1.2debian  libsmokesoprano3  libsndfile1 libsoprano4 libwavpack1 libxcb-shape0 libxcb-shm0  libxcb-xv0 libxine1 libxine1-bin libxine1-console libxine1-misc-plugins  libxine1-x libxslt1.1 libxvidcore4 libxvmc1 openjdk-6-jre  openjdk-6-jre-headless openjdk-6-jre-lib phonon  ruby  ruby1.8 soprano-daemon tzdata-java 

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

su -

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" > /etc/apt/sources.list.d/webupd8team-java.list

echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" >> /etc/apt/sources.list.d/webupd8team-java.list

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886

apt-get update

apt-get install oracle-java7-installer

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,