• 검색 결과가 없습니다.

Doozer는 소프트웨어 컴파일 과정을 단순화하기 위해 사용하는 툴이다. 이 프로그램은 CentOS Vault나 EPEL 모두 제공하지 않기 때문에 https://sourceforge.net/projects/doozer/에서 소스를 가져와서 rpm으로 만들어야 한다. 소스코드 안에 doozer.spec이 있기 때문에 이 파일을 이용하면 바 로 rpm을 제작할 수 있다. 작업순서는 다음과 같다.

① 소스파일에서 doozer.spec을 추출해서 ${HOME}/rpmbuild/SPECS 디렉터리에 복사한다.

② 소스파일을 압축된 상태 그대로 ${HOME}/rpmbuild/SOURCES 디렉터리에 복사한다.

③ ${HOME}/rpmbuild/SPECS 디렉터리에서 rpmbuild를 실행한다. 이 때 doozer.spec 파일에서 Source: 가 SOURCES 디렉터리에 복사한 파일과 일치하는지 확인해야 한다.

# rpmbuild -ba doozer.spec

그림 22. rpmbuild의 실행

④ rpmbuild가 정상적으로 진행되면 ${HOME}/rpmbuild/RPMS/noarch 밑에서 rpm 파일을 확인 할 수 있다. 여기서 noarch는 CPU를 가리지 않고 설치가 가능한 패키지라는 뜻이다. src.rpm은

${HOME}/rpmbuild/SRPMS 디렉터리에 저장되어 있다.

나. VR Juggler 설치

앞에서 설명한 프로그램의 설치가 모두 끝나면 VR juggler를 컴파일하고 rpm을 제작할 수 있게 된 다. 가장 먼저 해야 할 일은 JAVA 관련 환경변수를 지정하는 것이다.

export JDK_HOME=/usr/java/default

그림 23. 환경변수 지정

vrjuggler.spec 파일은 release 디렉터리에 존재한다. 이 파일은 ${HOME}/rpmbuild/SPEC, 압축된 소스파일 원본은 ${HOME}/rpmbuild/SOURCES 디렉터리에 각각 복사한다.

VR Juggler가 사용하는 대부분의 라이브러리는 EPEL과 CentOS7 기본 패키지로 모두 설치가 가능 하지만 일부 옵션 패키지는 정식 rpm으로 구하기 어렵다. 이때에는 VR Juggler 기반 어플리케이션 의 실행이 크게 영향을 받지 않는 범위 내에서 VR Juggler가 사용하지 않도록 설정한다. 이 작업은 vrjuggler.spec 파일을 수정함으로써 진행할 수 있다.

#./configure.pl —with-boost=/usr —with-boost-includes=/usr/include \

# --with-gmtl=/usr —with-openal=/usr --with-audiere=/usr \

# --prefix=%{_prefix} %{abi_option} %{?_with_vrpn} \

# %{?_with_ftd2xx} %{?_with_trackdapi}

./configure.pl —with-boost=/usr —with-boost-includes=/usr/include \ --with-gmtl=/usr --with-openal=/usr \ --prefix=%{_prefix} %{abi_option} %{?_with_vrpn} \ --with-jdkhome=/usr/java/default \ %{?_with_ftd2xx} %{?_with_trackdapi}

그림 24. VR Juggler의 spec 파일 수정

Audiere는 CentOS vault나 EPEL에서 모두 구할 수 없다. VR Juggler가 audiere 라이브러리를 반 드시 필요로 하는 것은 아니기 때문에 이 라이브러리를 사용하는 부분은 spec에서 모두 제거했다.

#%define have_audiere %(if [ -x /usr/bin/audiere-config ] ; then echo 1; else echo 0; fi)

%package -n sonix-plugin-audiere Summary: Sonix Audiere Plug-in Version: %{sonix_version}

Release: %{sonix_release}

URL: http://www.vrjuggler.org/sonix/

Group: Development/C++

Requires: sonix = %{sonix_version}

Requires: audiere >= 1.9.3

BuildRequires: audiere-devel >= 1.9.3

%description -n sonix-plugin-audiere

다. 주의사항

동일한 소스를 이용한다고 해도 VR Juggler를 rpm으로 만들 때 CentOS6과 CentOS7에서 만들어 지는 헤더파일의 세부 내용에 차이가 있다.

6. Global Arrays toolkit

기타 hwloc-devel, libibverbs-devel, openssh-clients, dos2unix

표 4. GA를 설치할 때 추가로 설치되는 패키지 목록

나. GA rpm 제작

여느 rpm과 마찬가지로 GA v5.5의 rpm을 만들려면 spec 파일이 필요한데, EPEL이 제공하는 v5.3b의 spec 파일을 사용하는 편이 가장 쉽다. spec 파일은 EPEL에서 src.rpm을 받아서 설치하 면 ${HOME}/rpmbuild/SPECS 디렉터리에서 찾을 수 있다.

# wget https://dl.fedoraproject.org/pub/epel/7/SRPMS/g/ga-5.3b-14.el7.src.rpm

# rpm -i ga-5.3b-14.el7.src.rpm

그림 28. GA v5.3b의 src.rpm 설치

GA v5.3b의 spec 파일은 OpenMPI와 MPICH 각각에 대응하는 GA 패키지를 만들 수 있도록 구성 되어 있다. 따라서 동일한 spec 파일을 사용하면 GA v5.5 역시 OpenMPI로 컴파일 한 버전과 MPICH로 컴파일 한 버전을 동시에 만들 수 있다. 한 가지 주의해야 할 사항은 v5.5에 대해 KISTI 패치가 적용돼야 한다는 점이다. 이를 위해 별도로 제공하는 패치 파일을 ${HOME}/rpmbuild/

SOURCES 디렉터리에 미리 복사해 놓고 spec 파일을 그림 29과 같이 수정한다.

License:

Source:

Patch0: ga-5.5-kisti.patch ExclusiveArch;

%setup -q -c -n %{name}-%{version}

pushd %{name}-%{ga_version}

%patch0 -p0

그림 29. spec 파일의 수정

마지막으로 GA 홈페이지에서 다운받은 v5.5 소스파일 원본을 ${HOME}/rpmbuild/SOURCES 디렉 터리에 복사하고 rpmbuild를 실행하면 패치가 적용된 GA v5.5의 rpm 패키지가 만들어진다.

# rpmbuild –ba ga.spec

그림 30. GA rpm 제작

다. GA rpm 설치

EPEL의 GA 5.3b를 이미 설치했다면 이미 의존성 문제가 해결된 상태이기 때문에 v5.5를 바로 설치 하면 된다. 실질적인 설치는 이미 설치되어 있는 버전의 업그레이드에 해당하므로 그림 31과 같이 rpm 명령으로 패키지 업그레이드를 진행하면 된다.

# rpm –Uvh ga-*.rpm

그림 31. GA 업그레이드

라. 설치 후 설정

GA를 rpm으로 설치하면 /etc/sysctl.d 디렉터리에 armci.conf라는 파일이 추가로 설치된다. 이 파 일은 리눅스 커널의 max shared memory를 정하는데, 기본 값으로 128MB가 잡혀 있다.

# cat /etc/sysctl.d/armci.conf kernel.shmmax = 134217728

그림 32. /etc/sysctl.d/armci.conf의 내용

이는 GLOVE를 실행하는 데에 지나치게 작기 때문에 메인 메모리가 허용하는 한도 내에서 최대한 큰 값으로 잡고 동일한 값을 바로 적용해줘야 한다. 예를 들어서 64GB의 메인메모리를 갖고 있는 노드 라면 32GB 정도를 max shared memory로 지정할 수 있을 것이다. 그림 33과 같이 /etc/sysctl.d 디렉터리 내의 파일을 수정해 놓으면 시스템을 재부팅할 때에도 커널 값이 그대로 유지된다.

# cat /etc/sysctl.d/armci.conf kernel.shmmax = 34359738368

# echo 34359738368 > /proc/sys/kernel/shmmax

그림 33. /etc/sysctl.d/armci.conf의 내용

7. VTK

java-devel, libX11-devel, libXt-devel, libXext-devel, libICE-devel, libGL-devel,

mesa-libOSMesa-devel, tk-devel, tcl-devel, python-devel, expat-devel, freetype-devel, libjpeg-devel, libpng-devel, gl2ps-devel, libtiff-devel, zlib-devel, libxml2-devel, qt4-devel, qtwebkit-devel, chrpath, doxygen, graphviz, gnuplot, boost-devel, hdf5-devel, libtheora-devel, mysql-devel, postgresql-devel, wget

그림 35. VTK rpm을 제작할 때 필요한 외부 라이브러리

rpm을 만들기 이한 spec 파일은 EPEL이 제공하는 v6.1의 spec을 수정해서 사용한다. 다만, v6.1 //MPI CXX compilation flags

MPI_CXX_COMPILE_FLAGS:STRING=

MPI_CXX_LINK_FLAGS:STRING= -Wl,-rpath -Wl,/usr/lib64/openmpi/lib -Wl,--enable-new-dtags //Cleared

mkdir build

-DBUILD_DOCUMENTATION:BOOL=ON \ -DBUILD_EXAMPLES:BOOL=OFF \ -DBUILD_SHARED_LIBS:BOOL=ON \ 중략

-DMPIEXEC:FILEPATH=/usr/lib64/mpich/bin/mpiexec \ -DMPIEXEC_MAX_NUMPROCS:STRING=2048 \ -DMPIEXEC_NUMPROC_FLAG:STRING=-np \

-DMPI_CXX_COMPILER:FILEPATH=/usr/lib64/mpich/bin/mpicxx \ -DMPI_CXX_INCLUDE_PATH:STRING=/usr/include/mpich-x86_64 \ -DMPI_CXX_LIBRARIES:STRING=/usr/lib64/mpich/lib/libmpichcxx.so \ -DMPI_C_COMPILER:FILEPATH=/usr/lib64/mpich/bin/mpicc \

-DMPI_C_INCLUDE_PATH:STRING=/usr/include/mpich-x86_64 \ -DMPI_C_LIBRARIES:STRING=/usr/lib64/mpich/lib/libmpich.so \ -DMPI_EXTRA_LIBRARY:STRING=/usr/lib64/mpich/lib/libmpich.so \ -DMPI_LIBRARY:FILEPATH=/usr/lib64/mpich/lib/libmpichcxx.so \ 중략

-DVTK_MPIRUN_EXE:FILEPATH=/usr/lib64/mpich/bin/mpiexec \ -DVTK_MPI_MAX_NUMPROCS:STRING=2048 \

-DVTK_MPI_NUMPROC_FLAG:STRING=-np \ 생략

# yum install vtk vtk-devel

그림 40. EPEL의 VTK v6.1 설치

VTK v6.1이 설치된 상태에서 v6.2로의 업그레이드는 rpm 명령을 이용한다. VTK v6.2 rpm 파일이 위치한 디렉터리에서 그림 41과 같이 업그레이드를 진행한다.

# rpm –Uvh vtk*.rpm

그림 41. VTK v6.2로의 업그레이드

8. 기타 소프트웨어

가. log4cxx

CentOS7 Vault에 log4cxx 0.10.0이 포함되어 있지만 클러스터 환경에서 서로 다른 노드가 로그를 남기는 상황에 제대로 대응하지 못하는 한계가 있다. KISTI에서는 이 문제를 해결한 패치를 제공하고, 그에 기반을 둔 rpm도 별도로 제공하고 있다.

log4cxx rpm을 만드는 방법은 GA rpm을 만드는 과정과 거의 비슷하다. 제일먼저 패치 파일을

${HOME}/rpmbuild/SOURCES에 복사한 후 spec 파일을 그림 42과 같이 수정한다. log4cxx의 원 본 src.rpm을 보면 log4cxx-cstring.patch가 따로 있는데, 이미 동일한 내용이 KISTI 패치에도 있기 때문에 굳이 적용하지 않아도 된다.

Source0: http://www.apache.org/dist/logging/log4cxx/%{version}/apache-%{name}-%{version}.tar.gz

# Filed into upstream bugtracker at:

# https://issues.apache.org/jira/browse/LOGCXX-332 Patch0: log4cxx-0.10.0-kisti.patch

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

%prep

%setup -q -n apache-%{name}-%{version}

%patch0 -p1

그림 42. log4cxx spec 파일의 수정

패치 파일은 ~/rpmbuild/SOURCES 디렉터리에 미리 복사해둬야 한다. 일단 한 번 rpm을 만들면 src.rpm 안에 패치 파일이 포함되기 때문에 해당 src.rpm 파일을 재활용할 때에는 일일이 패치 파일 을 복사하지 않아도 된다.

그 다음 src.rpm 파일 원본을 ${HOME}/rpmbuild/SOURCES 디렉터리에 복사하고 rpmbuild를 실행하면 KISTI 패치가 적용된 log4cxx의 rpm 패키지가 만들어진다.

# rpmbuild –ba log4cxx.spec

그림 43. GA rpm 제작

9. GLOVE

GA의 주요 라이브러리는 OpenMPI 라이브러리 디렉터리(/usr/lib64/openmpi/lib)에 위치하고, 헤더 파일 역시 OpenMPI의 헤더파일 디렉터리에 같이 존재한다.

항목 세부내용

GA_CPP_LIBRARY /usr/lib64/openmpi/lib/libga++.so

GA_HOME /usr/

GA_INCLUDE_PATH /usr/include/openmpi-x86_64 GA_LIBRARY /usr/lib64/openmpi/lib/libga.so GA_LIBRARY_PATH /usr/lib64/openmpi/lib

표 6. cmake를 이용한 GA 관련 설정

MPI는 OpenMPI를 사용하는 것을 전제하기 때문에 모든 설정을 OpenMPI 기준으로 해야 한다. 그 런데 OpenMPI는 인피니밴드를 사용하기 때문에 인피니밴드를 사용하지 않는 클러스터에서

항목 세부내용

MPI_HOME /usr

MPI_INCLUDE_PATH /usr/include/openmpi-x86_64

MPI_LIBRARY_PATH /usr/lib64

MPI_MPIEXEC /usr/lib64/openmpi/bin/mpiexec

표 7. cmake를 이용한 MPI 관련 설정

VR Juggler 관련 설정은 표 8과 같이 한다.

항목 세부내용 는 마지막으로 DEFAULT_CONFIG_PATH는 아직 CMakeLists.txt 내에서 완전히 정리가 안됐기 때 문에 강제로 /usr/share/glove/config를 지정한다. 이 값은 CMAKE_INSTALL_PREFIX를 /usr로 설정했을 때를 가정하고 지정한 것이다.

cmake 설정이 모두 끝나면 컴파일/설치를 마무리한다. CMAKE_INSTALL_PREFIX를 /usr로 설정했 을 때에는 설치과정에 /usr 디렉터리에 파일을 써야 하므로 관리자 권한(root)을 갖고 해당 명령을 실 행해야 한다.

# make

# make install

그림 44. GLOVE의 설치

다. rpm 패키지 제작

한 번 GLOVE 컴파일에 성공하면 rpm은 작업 디렉터리에서 바로 만들 수 있다.

# make package

그림 45. GLOVE rpm 제작

향후 GLORE와 GIVI가 서로 독립된 패키지로 만들어지도록 설정파일을 수정할 필요가 있다.

라. rpm을 이용한 설치

rpm을 이용해서 설치할 때에는 관리자 권한으로 다음과 같은 명령을 실행한다.

# rpm -Uvh --force glove.rpm

그림 46. GLOVE rpm 설치

문서에서 GLOVE 시스템 관리자 가이드 (페이지 21-36)

관련 문서