'openindiana'에 해당되는 글 23건

먼저 자신의 오픈솔라리스 버전이 뭔지 알아야한다.
uname -a를 실행해서 snv 111인지 snv 134인지 확인한다.

만약 111이라면, 134로 업그레이드를 하고나서 오픈인디아나로의 업그레이드가 가능하다. 따라서, 두 번의 업그레이드를 해야한다는 얘긴데, 첫 번째 업그레이드는 하나마나일 정도로 아주 쉽다.

Step 1
먼저 111에서 134로 업그레이드를 시작한다.
pfexec pkg install SUNWipkg SUNWipkg-um SUNWipkg-gui
pfexec pkg set-publisher -O http://pkg.openindiana.org/legacy opensolaris.org
pfexec pkg image-update -v

Step 2
이제 진짜 오픈솔라리스에서 오픈인디아나로 업그레이드를 시작할 차례다.
pfexec pkg set-publisher --non-sticky opensolaris.org
pfexec pkg set-publisher -P -O http://pkg.openindiana.org/dev openindiana.org
pfexec pkg image-update -v --be-name openindiana

이제 새로운 환경으로 재부팅하면 된다.


만약, 오픈인디아나 148에서 151a로의 업그레이드를 원하면 아래를 따른다.
먼저 패키지 배포처를 확인한다.
pfexec pkg publisher 
를 실행해서
openindiana.org (preferred) origin online http://pkg.openindiana.org/dev/ 라고 나오는 것을 확인한다. 나오지 않으면 아래의 명령어를 실행한다.
pfexec pkg set-publisher -O http://pkg.openindiana.org/dev/ openindiana.org

만약 opensolaris라는 문구가 포함된 라인이 출력된다면 아래의 명령어로 삭제한다.
pfexec pkg unset-publisher opensolaris.org

이제 업데이트를 확인할 차례다. 업데이트 사항을 확인만 하고싶으면 아래의 명령어를 수행한다.
pfexec pkg image-update -nv

확인할 필요 없이 바로 진행하고 싶으면 아래의 명령어를 수행한다.
pfexec pkg image-update -v

추가로 덧붙인다면, 새로 업데이트 되는 BE (Boot Environment)의 이름을 바꾸고 싶으면
--be-name 원하는이름
이라고 넣으면 된다. 
블로그 이미지

Seowon Jung jswlinux

Seowon Jung의 잡동사니 보관소

댓글을 달아 주세요

솔라리스를 리눅스처럼 쓰기위한 나의 노력은 참 눈물겹다고나 할까...
솔라리스라는 환상적인 OS와 오픈솔라리스의 불투명한 미래 때문에 시작된 나의 작은 관심은 블로그 포스팅을 거의 안하는 내가 불과 며칠 만에 여러 개의 글을 포스팅할 정도의 열정을 가질 정도였으니...

정식명칭은 Gentoo Prefix Bootstrap for Solaris.
솔라리스에서 작동되는 젠투다. 제목만 봐도 환상적이지 않은가.
뛰어난 솔라리스의 기능에 젠투의 emerge까지. 게다가 젠투가 가진 수만개의 패키지들... 컴파일을 통한 최적화된 설치. 솔라리스의 부족한 패키지를 보충하고도 남을 최고의 선택인 것이다.
하지만 안타깝게도 제대로 설치되지 않는다. 후에 설명한다.

먼저, 본인의 솔라리스 시스템은 OpenSolaris 2009.06 Intel 버전에 AMD 듀얼코어 CPU와 램3기가가 장착된 평범한 32비트 데스크탑 컴퓨터다.
젠투의 설치는 대략 3개의 파트로 나뉜다.
1. 신발끈 묶기 (Bootstrap)
2. 필수유틸 설치
3. emerge sync

먼저,  젠투를 설치하기 위해서는 gcc가 반드시 설치되어있어야한다. 설치되어있지 않다면 아래의 명령어로 gcc를 설치해주자.
$ pfexec pkg install SUNWgcc (3.4.3 버전이어야한다. pkg search SUNWgcc로 확인해보자)

젠투를 빌드할 폴더를 만들어준다. 개인 홈디렉토리에 만들어주면 된다.
$ mkdir gentoo

젠투를 빌드할 경로를 지정해준다.
$ export EPREFIX="$HOME/gentoo"

패스를 설정해줘야하는데, 이 부분에서는 젠투 홈페이지에 있는 것과 내용이 조금 달라서 아래의 경로를 사용하시길 바란다.
export PATH="$EPREFIX/usr/bin:$EPREFIX/bin:$EPREFIX/tmp/usr/bin:$EPREFIX/tmp/bin:/usr/sfw/bin:/usr/sfw/i386-pc-solaris2.11/bin:/usr/gnu/bin:/usr/bin:/bin:/sbin:/usr/sbin"

이제 아래의 경로를 클릭해서 젠투 Prefix 파일을 다운로드 한다.

다운로드를 다 했으면 방금만든 gentoo 폴더에 옮기고 755 퍼미션을 준다.
$ chmod 755 bootstrap-prefix.sh
$ mv bootstrap-prefix.sh gentoo/
$ cd gentoo

이제부터 1단계인 신발끈을 묶을 차례다. 아래의 명령어를 차례대로 입력하면 된다.
듀얼코어(코어2듀오보다 낮은)급 이상이면 별로 오래 걸리진 않는다.
$ ./bootstrap-prefix.sh $EPREFIX tree 
$ ./bootstrap-prefix.sh $EPREFIX/tmp make 
$ ./bootstrap-prefix.sh $EPREFIX/tmp wget 
./bootstrap-prefix.sh $EPREFIX/tmp sed 
$ ./bootstrap-prefix.sh $EPREFIX/tmp python 
$ ./bootstrap-prefix.sh $EPREFIX/tmp coreutils 
./bootstrap-prefix.sh $EPREFIX/tmp findutils3 
$ ./bootstrap-prefix.sh $EPREFIX/tmp tar 
$ ./bootstrap-prefix.sh $EPREFIX/tmp patch 
./bootstrap-prefix.sh $EPREFIX/tmp grep 
$ ./bootstrap-prefix.sh $EPREFIX/tmp gawk 
$ ./bootstrap-prefix.sh $EPREFIX/tmp bash 
./bootstrap-prefix.sh $EPREFIX portage

여기까지는 사실상 거의 문제가 없다. 이 중에서 단 하나라도 실패하면 뭔가 문제가 있는 거다.
이제 2단계로 넘어간다.
bash를 rehash 해준다.
$ hash -r

bash와 컴파일러, 그리고 bin유틸 등 필수유틸들을 빌드한다.
$ emerge --oneshot sed
(어떤 시스템에서는 여기서 에러가 났다. 하지만 emerge의 temp 파일에 가서 직접 make해주면 이상없이 잘 됐다)
$ emerge --oneshot --nodeps bash
$ emerge --oneshot wget
$ emerge --oneshot --nodeps baselayout-prefix
$ emerge --oneshot --nodeps xz-utils
$ emerge --oneshot --nodeps m4
$ emerge --oneshot --nodeps flex
$ emerge --oneshot --nodeps bison
$ emerge --oneshot --nodeps binutils-config
$ emerge --oneshot --nodeps binutils
$ emerge --oneshot --nodeps gcc-config
$ emerge --oneshot --nodeps "=gcc-4.2*"
(시간이 꽤 걸린다. 또한, 요즘 나오는 gcc는 대부분 4.4대라서 =gcc-4.4*로 놓고 컴파일을 해봤는데 에러가 났다. 4.3도 역시 에러가 났다. 일단 매뉴얼에서는 4.2로 설치를 한다)

이제는 새롭게 빌드한 gcc 4.2버전으로 필수유틸들을 빌드한다. 원래 솔라리스에 설치되는 gcc 버전은 3.4.x이다.
$ emerge --oneshot coreutils
$ emerge --oneshot findutils
$ emerge --oneshot tar
$ emerge --oneshot grep
$ emerge --oneshot patch
$ emerge --oneshot gawk
$ emerge --oneshot make
$ emerge --oneshot --nodeps file
$ emerge --oneshot --nodeps eselect
오픈인디아나의 경우는 여기서 에러가 아는데, 왜냐하면 저장소에 파일이 없다! 아래의 위치에서 eselect-로 시작하는 받아서 $EPREFIX/usr/portage/distfiles/에 넣어주자.
http://trumpetti.atm.tut.fi/gentoo/distfiles/
 
이쯤에서 스냅샷을 한 번 찍자.

$ emerge --oneshot pax-utils
문제는 바로 이 pax-utils이다. 여기서 젠투 Prefix를 때려치게됐다.
pax-utils에는 14개의 패키지의 의존성을 갖는다.
gnuconfig, autoconfig, zlib, bzip2, automake-wrapper, libperl, perl, perl-cleaner, help2man, texinfo, autoconf, automake, libtool, gnulib, pax-utils 등의 아주 중요한 툴들이 포함되어있어서 이것들이 빌드가 안되면 아무 것도 못한다는 얘기다.
오픈인디아나 148 버전에서는 정상적인 설치가 가능했다.
 

일단 앞에서 2번째까지인 gnuconfig, autoconfig는 빌드가 잘 된다. 하지만, 다음 패키지인 zlib에서 에러가 나는데, 에러메시지를 보면 scanelf라는 명령어가 없어서 빌드할 수 없다는 메시지가 나온다.
(/export/home/jswlinux/gentoo/var/tmp/portage/sys-libs/zlib-1.2.5-r2/temp/environment: line 4263: scanelf: command not found)
문제는 scanelf라는 명령어는 pax-utils에 포함된 명령어이다. 뭘 어쩌라는 말인지...
그래서 pax-utils 소스를 받아다 빌드를 해서 scanelf라는 명령어를 구했는데 일단 해당 메시지가 나오는 패키지는 컴파일이 됐다 (뭔지는 까먹었다). 이게 잘 되서 다음 패키지로 넘어갔고 두어개 정도가 이상없이 잘 빌드가 됐는데, perl에서 더 이상 진행이 안된다. 에러메시지는 
ld.so.1: as: fatal: libz.so.1: open failed: No such file or directory
라고 나오는 것이다. 분명히 저런 파일들은 라이브러리 디렉토리에 다 있었다. 그래서 혹시나 싶어 
export CC="/usr/sfw/bin/gcc" 라고 해주고 다시 빌드를 해봤지만 좀 되는가 싶더니 여전히 똑같은 에러메시지를 냈다. 이것 때문에 해외의 수많은 웹사이트를 뒤지고 다녔지만 자료가 별로 없었다. 국내는 전무한 상태이고, 솔라리스에 젠투 Prefix가 있는지 아는 사람조차 있을까 싶다.
더 이상 진행이 안되는 데에 시간을 계속 쓰고싶진 않았다. 일단 내 지식으로는 해결이 불가능한 부분이기도 하고...
혹시나 오픈솔라리스가 아닌 그냥 솔라리스10이면 되지 않을까 하는 생각도 들지만 나중에 시간이 나면 해볼 생각이다.
만약 pax-utils가 정상적으로 빌드되신 분들은 아래의 사항을 계속 진행하시면 된다.
다시 한 번 강조하지만,  오픈인디아나에서는 잘 된다. 

Portage를 emerge한다.
$ env FEATURES="-collision-protect" emerge --oneshot portage
오픈인디아나 148 버전의 경우는 여기서 에러가 나는 경우 아래처럼 한다.
mv $EPREFIX/usr/lib/libpython2.7.a 
$EPREFIX/usr/lib/_libpython2.7.a 
처음 부트스트랩 당시 빌드됐었던 파이썬의 바이너리 때문에 컴파일이 안된다는 얘기다. 


이제 임시폴더를 지우고 bash를 rehash한다.
$ rm -Rf $EPREFIX/tmp/*
$ hash -r

tree를 업데이트하자.
$ emerge --sync

system을 emerge한다.
$ emerge -u system
오픈인디아나 148의 경우 여기서 에러가 난다. gcc 4.5.2와 mpc 라이브러리간의 circular dependencies 충돌인데 
아직 해결 못했다.  해결했다. 파일을 하나 열고
$ vi $EPREFIX/etc/portage/package.mask
아래의 내용을 입력한다.
>=sys-devel/gcc-4.2.4-r01.3
그런다음 
$ env FEATURES="-collision-protect" emerge --oneshot findutils
끝나면 다시 USE=-git emerge -uav system 해보자. 리스트 뜬다. 뭐 사실은 해결이라기보단 그냥 gcc 4.5.2를 안쓰겠다고 막아놓은 거다.

또한 grep-2.9에서 에러가 날 경우, 위의 예처럼 grep 2.9 버전도 그냥 막아버리자.
큰 이상은 없을거다. 

참고로 USE 플래그나 CFLAGS 옵션을 따로 주는 방법인데 매뉴얼에 나와있길래 적어본다.
$ echo 'USE="unicode nls"' >> $EPREFIX/etc/make.conf 
$ echo 'CFLAGS="-O2 -pipe"' >> $EPREFIX/etc/make.conf 
$ echo 'CXXFLAGS="${CFLAGS}"' >> $EPREFIX/etc/make.conf

이제 대망의 마지막 작업이다.
$ emerge -e system

이것으로서 솔라리스에 원하는 젠투 패키지를 마음대로 가져다 설치할 수 있다. 남부럽지않은 패키지 시스템을 솔라리스에 갖추게 된 것이다.

Bootstrap된 Prefix 환경을 사용하기 위해서는 아래의 스크립트를 사용할 것을 권장한다.
$ cd $EPREFIX/usr/portage/scripts 
$ ./bootstrap-prefix.sh $EPREFIX startscript


블로그 이미지

Seowon Jung jswlinux

Seowon Jung의 잡동사니 보관소

댓글을 달아 주세요

IRC에서 사람들이랑 대화하던 중, 어느 분이 zfs가 뭐냐고 물어보셨다. 컴퓨터를 전공했거나 IT 분야에서 근무하시는 분이 아니었기에 조금 쉬운 설명이 필요했고 당연히 있을 거라고 생각했다. 그래서 금방 인터넷 페이지 링크 하나 드린다고 잠시만 기다리시라고 했는데 찾을 수가 없었다.

내가 찾아본 zfs의 설명을 잠시 보자.
1. ZFS는 간편한 관리성, 트랜젝션 기반의 구문, 완벽한 데이타 무결성 보장, 대용량의 확장성을 제공하는...
2. 기존의 볼륨과 그에 기반한 파티셔닝, 프로비져닝, 대역폭 낭비의 불편성등의 문제를 완전히 제거했...
2. ZFS는 CPU의 파이프라인 개념과 비슷한 I/O 파이프라인 엔진을 가지고 있...
4. 바로 정정이 가능하더라도 모든 데이타를 다시 읽어 들여서 잠재적인 오류를 찾아내게 된...

위의 설명으로 이해시키기엔 도저히 불가능했다. 솔직히 내가 봐도 무슨 말인지 잘 모르겠다. 그래서 리눅스/유닉스에는 관심은 좀 있는데 뭔지는 잘 모르는 그런 분들을 위해서 한 번 설명해보고자 한다. 내 블로그에는 zfs에 대한 찬양에 가까운 내용이 많다보니 이게 뭔지 짚고넘어가야할 것 같았다. 미리 말씀드리지만 사실 나도 잘은 모른다.

먼저 zfs는 Zettabyte File System의 약자이다. 앞의 제타바이트는 도대체 얼마나 클까.
순서는 KB (킬로바이트) - MB (메가바이트) - GB (기가바이트) - TB (테라바이트) - PB (페타바이트) - EB (엑사바이트) - ZB (제타바이트) 이다. 그래도 아직 실감이 안오실 거다.
1,000 기가는 1테라이다. 1,000테라는 1 페타이다. 1,000 페타는 1 엑사이고, 1,000 엑사는 1 제타이다.
이제 실감이 가실 거다. 이 정도 사이즈를 다룰 수 있는 파일시스템이다.

일단 zfs는 포맷이 필요없다. 하드디스크를 연결하고 명령어만 치면 즉시 사용이 가능하다. 요즘에야 파일시스템이 다들 좋아져서 1테라바이트 하드 포맷하는데 몇 분도 채 안걸리지만, zfs는 그나마 그 몇 분의 시간조차도 필요가 없다. 게다가 맘대로 여기저기 뗏다붙였다 할 수 있다.

zfs는 기존의 전통적인 유닉스의 파티션, 즉 /home, /var, /etc 등의 디렉토리별로 나눠서 파티션을 나누는 보통방법과 완전히 다른 새로운 개념의 파일시스템이다. 기존의 파일시스템은 파티션을 나누면 공간을 늘였다줄였다하는 것이 불가능하다. 따라서 운영체제를 설치하기 전에 /var나 /usr 등의 용량계획을 잘 세워서 파티션을 나눠야만 했다. 그렇게 나누는 것이 장애시 복구도 편하고 여러모로 이점이 있기 때문인데, 최근 개인유저들 사이에서는 그냥 / 와 swap 이렇게 달랑 2개만 나누는 것으로 굳어지기도 했다.

그런데 이 zfs는 디렉토리를 따로 나눠줄 필요가 없어졌다. 솔라리스 설치시 그냥 하나의 파티션만 존재하고 그 안에서 zfs가 알아서 관리하는 식인데, 디렉토리를 나눠서 따로 용량을 주는 것도 가능하다는 거다. 또한 RAID를 자체적으로 구현한다. 무슨 말인고 하니, 똑같은 하드디스크를 두 개를 붙여놓고 하나만 쓰되(A), 나머지 하나(B)는 언제나 A와 똑같은 하드디스크를 만들어라는 기능, 다시 말해 미러링이 가능하고 그외 나머지 RAID 의 대부분을 사용할 수 있다. 또한 더 이상 하드디스크에 에러가 나는 일이 없으며 실시간으로 파일시스템을 점검한다. 에러가 생기면 실시간으로 치유가 된다. 뭐 이건 별거 아닌 거 같으니까 다른 얘길 해보자.

내가 반해버린 zfs의 큰 기능은 바로 스냅샷이라는 증분백업이다. 다들 맥의 타임머신이 뭔지는 알면서 증분백업이 무슨 말인지 모르는 분들이 많다. 증분백업이란, 예를 들어서 현재 내 하드디스크에 총 60기가의 데이터가 있다고 가정하자. 처음으로 백업을 하면 일단은 60기가 데이터 모두 외장하드로 백업을 한다. 그리고 다음 날 2기가 정도의 영화파일을 새로 받았고 백업프로그램을 돌리면, 60+2=62기가를 백업하는 게 아니라, 변동된 2기가만 백업을 하는 거다. 이게 바로 증분백업이다.

그런데 zfs의 스냅샷은, 외장하드로 따로 옮기는 백업이 아니라 현재 하드디스크의 상태를 사진찍듯이 이미지를 뜬다. 이미지를 뜬다는 말이 참 설명하기 어려운데, 하드디스크의 데이터를 한 눈에 보이게 펼쳐놓고 위에서 아래로 내려다보면서 카메라로 사진(스냅샷)을 찍는다고 생각하자. 일단 운영체제 설치하고 첫 사진을 찍는다. 60기가짜리 파일이 찍힌 사진이 하나 생겼다. A 사진이라고 하자.
이제 이것저것 다운로드도 하고 프로그램도 설치한다. 3기가의 추가데이터가 생겼다. 이번에는 63기가짜리 데이터가 담긴 하드디스크의 사진을 찍는다. B 사진이라고 하자.
어느 날 갑자기 바이러스인지 뭔지 들어와서 컴퓨터를 완전 헤집고 다녀서 아무래도 더 이상 사용이 안될 것 같다. 그러면, 가장 최근의 사진인 B 사진을 하드디스크 위에 그대로 덮어주기만 하면 B 사진을 찍을 때 당시의 하드디스크로 되돌아간다.

이런 류의 프로그램은 사실 윈도우에도 있고 맥의 타임머신도 비슷한 역할을 한다. 그런데 이 zfs는 스냅샷을 찍는 과정이 불과 1초도 안걸린다. 복원은 다소 시간이 걸리지만 노턴 류의 프로그램 마냥 한두시간씩 기다리는 수준이 아니라 길어봐야 1분 정도다. 하드디스크 안에 몇기가의 데이터가 있는지는 전혀 상관이 없다. 1초에서 1분 이내다. 게다가 사진의 갯수는 무한대다.

사실 내가 솔라리스에 반한 이유는 이게 제일 크다고 볼 수 있겠다. 순간 백업과 순간 복원. 그리고 백업시점 무한대. 그런데 단순히 이게 다는 아니다.
보통 PHP-MySQL 작업을 하다보면 실수로 디비를 덮어써버린다거나 디비를 날려먹는 일이 종종 있다. 특히 큰 서버거나 서비스 중인 서버에서 그랬으면 정말 대형사고다. 그런데 zfs를 이용해서 수시로 스냅샷을 찍어버리면 별로 걱정을 안해도 된다는 거다. 게다가 스냅샷 갯수도 무한대이니 대략 3개월치를 계속 스냅샷을 찍어대면 무려 3개월 동안의 어떠한 상황으로도 돌아갈 수 있다는 거다. 더 응용해보자면 홈디렉토리의 각 사용자별로 스냅샷을 찍어주면, 예를 들어 어떤 한 사용자의 요청으로 인해 시스템 전체가 옛날로 되돌릴 수는 없으니 사용자별로 스냅샷을 찍어주면 해당사용자만 과거로 돌아갈 수 있어서 환상적인 서버운영이 가능하단 거다. 물론 이 경우는 사용자가 많으면 스냅샷 관리하기가 어렵다. 

더 응용해보자.
솔라리스에는 Zone이라고 하는 가상화 솔루션이있다. 이게 뭐냐면, 다들 vmware가 뭔지 아실 거다. 컴퓨터를 가상으로 만들어주는 프로그램인데, vmware처럼 윈도우에서 마우스 클릭해가면서 하는 프로그램만 있는 게 아니라, 솔라리스처럼 깜깜한 화면에 글씨만 주르륵 타이핑하는 그런 컴퓨터에도 가상화 프로그램이 있다.
대부분 솔라리스를 운영하는 서버는, 해커/크래커의 공격에 대비해 웹서버는 가상으로 만들어서 운영한다. 그래서 크래커가 웹서버를 쑥대밭을 만들고 가더라도 가상서버만 날려버리면 본체는 아무런 걱정이 없다. 그런데 문제는, 이 가상서버를 다시 설치해야하고 그 안에 있던 데이터까지 날려먹으니까 골치아프지. 그래서 이 가상서버들도 스냅샷을 찍어대면 크래커가 와서 가상서버 다 박살내도 1초만에 복구시켜버리면 되는 거다. 완전 크래킹 의지를 상실하게 만들어버리는 거다. 이게 바로 zfs의 진정한 사용이 아닌가 싶다.

서버급 규모에서는 단순히 스냅샷 말고도 여러가지 데이터 처리/보관에 대한 기능이 많다. 그런데 아무래도 집에서만 쓰다보니 그런 걸 해볼 일도 없거니와 별 필요도 없다. 그럼에도 불구하고 스냅샷/롤백 이거만으로도 정말 뿅~가게 만드는 환상적인 파일시스템인 것이다.

솔라리스. 어쩌면 너에게 반한 게 아니라 zfs에 반한 걸지도 모르겠다.
블로그 이미지

Seowon Jung jswlinux

Seowon Jung의 잡동사니 보관소

댓글을 달아 주세요