::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-11-29 16:32:12, Hit : 6137, Vote : 1609
 RLSclient.java (5.8 KB), Download : 327
 RLSclient.c (7.1 KB), Download : 324
 [강좌] Replica Location Service (RLS) 설치

// 제  목: Replica Location Service (RLS) 설치
// 작성자: 김영대( http://www.howto.pe.kr )  

0.설치환경
  설치 GT3: GT3 3.0.2
  O/S: Linux 2.4.18-3 (Redhat 7.3)
  호스트명: myhome.ssu.ac.kr
  
*.RLS 설치전 요구사항
Globus Toolkit 이 설치되어 있어야 하며 정확히 실행되지 않더라도
RLS 서버를 설치할 host 는 CA 로 부터 인증받은 호스트 인증서가 있어야 한다
/etc/grid-security/hostcert.pem, /etc/grid-security/hostkey.pem
또한 일반 사용자 계정으로 RLS 서버 접근시 인증 과정이 필요하다면 유저 인증서도 있어야 한다

1.설치할 파일 다운받기
.globus-rls-server-2.0.9-src_bundle.tar.gz ( http://www-unix.globus.org/toolkit/download.html )
.libiodbc-3.0.6-2.src.rpm ( http://www.iodbc.org )
.postgresql 7.2.1 ( http://www.postgresql.org )

2.환경변수 설정
설치하기 전에 3개 계정(root, globus, 일반 계정)의 .bash_profile 또는 .bashrc 파일중 GLOBUS_LOCATION 변수가
정의된 파일에 아래 환경변수를 추가한후 반영시킨다
   export GLOBUS_IODBC_PATH=$GLOBUS_LOCATION
   export ODBCINI=/etc/odbc.ini
   export CLASSPATH=$CLASSPATH:$GLOBUS_LOCATION/lib/rls.jar
  
3.postgresql DB 설치
다운받은 postgresql rpm 을 이용하여 "rpm -Uvh postgresql*.rpm" 로 설치하거나
RedHat CD 1번으로 부팅하여 시스템 업그레이드로 들어가서 postgresql 를 설치한다
CD 로 설치하는것이 dependencies 도 해결할 수 있어 편리하다
정확히 설치되었다면 다음과 같은 rpm 들이 설치된다(또한 자동으로 postgres 계정이 생성된다)
  
  [root root]# rpm -qa|grep postgresql
  postgresql-libs-7.2.1-5
  postgresql-odbc-7.2.1-5
  postgresql-contrib-7.2.1-5
  postgresql-server-7.2.1-5
  postgresql-docs-7.2.1-5
  postgresql-python-7.2.1-5
  postgresql-jdbc-7.2.1-5
  postgresql-tcl-7.2.1-5
  postgresql-tk-7.2.1-5
  postgresql-7.2.1-5
  postgresql-perl-7.2.1-5  

postgresql 서버가 TCP/IP 를 통하여 외부에서 접속요청을 받을 수 있도록 수정한다
  [root root]# vi /etc/rc.d/init.d/postgresql
  
postgresql의 151 행으로 이동하여 해당 행을 다음과 같이 변경한다
(postmaster와 start 단어 중간에 -o '-i' 부분이 추가되는 것이다)
  su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D $PGDATA -p /usr/bin/postmaster -o '-i' start > /dev/null 2>&1" < /dev/null

postgresql 서버를 실행한 후 곧바로 종료한다(에러가 날 수 있지만 지금은 무시한다)
(이 동작을 하지 않으면 아래의 pg_hba.conf 가 생성되지 않는다)
  [root root]# /etc/rc.d/init.d/postgresql start
  [root root]# /etc/rc.d/init.d/postgresql stop
  
생성된 환경파일(pg_hba.cof)을 열어 모든 호스트가 서버에 접속할 수 있도록 해준다  
  [root root]# vi /var/lib/pgsql/data/pg_hba.conf
  
postgresql 의 끝에 다음 두 문장을 추가한다(각 필드는 tab 키로 띄운다)
  host    all     127.0.0.1       255.255.255.255         trust
  host    all     0.0.0.0         0.0.0.0                 trust
    
postgresql 서버를 실행한다(여기서는 에러가 나면 안된다)
  [root root]# /etc/rc.d/init.d/postgresql start
    
4.iODBC 설치
다운받은 libiodbc-3.0.6-2.src.rpm 를 임의의 디렉토리에서 아래와 같이 설치한다
  [root tmp]# rpm -rebuild libiodbc-3.0.6-2.src.rpm
  [root tmp]# rpm -Uvh /usr/src/redhat/RPMS/i386/libiodbc-* --force
  
5.RLS 서버 설치
먼저 globus 계정으로 변경한 후 GT3 의 압축을 푼 디렉토리로 이동한다
  [globus globus]$ cd gt3.0.2-linux-installer

다운받은 globus-rls-server-2.0.9-src_bundle.tar.gz 를 gt3.0.2-linux-installer 디렉토리에서 설치한다
  [globus gt3.0.2-linux-installer]$ gpt-build globus-rls-server-2.0.9-src_bundle.tar.gz gcc32dbgpthr
  [globus gt3.0.2-linux-installer]$ gpt-postinstall
  
* gpt-build 할때 globus_*.h 헤더 파일이 없다는 에러메시지가 나오면서 중지된다면 GT3 를 설치한 디렉토리로 이동하여
include 아래에 gcc32dbgpthr 디렉토리가 있는지 확인한다. 만약 있다면 그 안에 globus_io.h 파일이 있는지도 확인한다
gcc32dbgpthr 디렉토리와 그 안에 globus_io.h 파일이 없다면 GT3 설치시 헤더파일이 빠진 경우로 이때는 GT3 를 다시
설치하거나 다른 사람이 설치한 GT3 의 gcc32dbgpthr 디렉토리를 복사해 넣는다
복사해 넣고 다시 gpt-build 시에는 -force 옵션을 사용하여 rebuild 시켜야한다

6.RLS 환경설정
먼저 postgresql 설치시 자동 생성된 postgresql 관리자 계정인 postgres 계정으로 바꾼다
  [root root]# su - postgres

postgresql DB 에 계정을 만든다(편의상 globus/globus 로 한다)
  bash-2.05a$ createuser -P globus
  Enter password for user "globus": globus
  Enter it again: globus
  Shall the new user be allowed to create databases? (y/n) y
  Shall the new user be allowed to create more new users? (y/n) y
  CREATE USER

RLS가 사용할 LRC 와 RLI 의 데이터베이스를 생성하기 위해서 다음과 같이 실행한다.
  bash-2.05a$ createdb lrc1000
  bash-2.05a$ createdb rli1000

사용자 계정을 postgres 에서 globus 로 변경한 후 LRC와 RLI 을 운영하는데 필요한 테이블을 생성하는
스크립트를 실행한다
  [globus globus]$ psql -d lrc1000 -f $GLOBUS_LOCATION/setup/globus/globus-rls-lrc-postgres.sql
  [globus globus]$ psql -d rli1000 -f $GLOBUS_LOCATION/setup/globus/globus-rls-rli-postgres.sql

iODBC 환경을 위하여 /etc/odbc.ini 파일을 다음과 같이 생성한다
  [root root]# vi /etc/odbc.ini
  ;
  ;  odbc.ini
  ;
  [ODBC Data Sources]
  lrc1000 = lrc database
  rli1000 = rli database

  [lrc1000]
  Description=LRC database
  DSN=lrc1000
  Servertype=postgres
  Servername=localhost
  Database=lrc1000
  ReadOnly=no

  [rli1000]
  Description=RLI database
  DSN=rli1000
  Servertype=postgres
  Servername=localhost
  Database=rli1000
  ReadOnly=no

  [Default]
  Driver = /usr/lib/libpsqlodbc.so.0
  Port = 5432

postgresql 이 사용하는 동적라이브러리를 위하여 만약 /etc/ld.so.conf 파일에 /usr/lib 가 없다면
아래와 같이 /usr/lib 를 추가한다
  [root root]# vi /etc/ld.so.conf
  /usr/lib
  /usr/kerberos/lib
  /usr/X11R6/lib
  /usr/lib/sane
  /usr/lib/qt-3.0.3/lib
  /usr/lib/qt-2/lib
  /usr/lib/wine
  /usr/local/gt3/lib

동적 라이브러리 환경이 변경되었으므로 다음과 같이 반영한다
  [root root]# /sbin/ldconfig

root의 홈디렉토리에서 /etc/odbc.ini에 대한 심볼릭 링크를 다음과 같이 생성한다
(iODBC 의 버그로 인한것으로 환경변수로 "ODBCINI=/etc/odbc.ini" 를 지정해도
  홈 디렉토리에서 ".odbc.ini" 파일을 찾는다)
  [root root]# cd ~
  [root root]# ln -s /etc/odbc.ini .odbc.ini

마지막으로 RLS 서버의 환경 파일을 다음과 같이 수정한다
(RLS 가 사용할 DB 계정과 odbc 환경파일의 위치, LRC 와 RLI 의 가동 여부및 사용 DB 정보등)
  [root root]# vi $GLOBUS_LOCATION/etc/globus-rls-server.conf
  # Database connection options
  db_user                 globus
  db_pwd                  globus
  odbcini                 /etc/odbc.ini

  # LRC options
  lrc_server              true
  lrc_dbname              lrc1000
  lrc_update_immediate    true            # Propagate changes to RLI quickly
  lrc_update_ll           120

  # RLI options
  rli_server              true            # Indicates this is an RLI server
  rli_dbname              rli1000         # database-name

  # Access control.  There may be multiple acl options, each one
  # is a regular expression which is matched against the user's Distinguished
  # Name in is X.509 certificate, followed by a colon and a whitespace
  # separated list of privs, which are all, lrc_read, lrc_update, rli_read,
  # rli_update, stats and admin.  If you use a grid-mapfile to map DNs to
  # local usernames you may specify those instead of DNs.
  acl                     .*: all

  # Here are all the configuration options with default values:
  #  acl                          [no default]
  #  authentication               true
  #  db_pwd                       changethis
  #  db_user                      dbperson
  #  idletimeout                  900
  #  loglevel                     0
  #  lrc_bloomfilter_numhash      3
  #  lrc_bloomfilter_ratio        10
  #  lrc_buffer_time              30
  #  lrc_dbname                   lrc1000
  #  lrc_server                   false
  #  lrc_update_bf                900
  #  lrc_update_factor            10
  #  lrc_update_immediate         true
  #  lrc_update_ll                86400
  #  lrc_update_retry             300
  #  maxbackoff                   300
  #  maxconnections               100
  #  maxfreethreads               5
  #  maxthreads                   30
  #  myurl                        rls://hostname:port
  #  odbcini                      $GLOBUS_LOCATION/var/odbc.ini
  #  pidfile                      $GLOBUS_LOCATION/var/<programname>.pid
  #  port                         39281
  #  rli_bloomfilter              false
  #  rli_bloomfilter_dir          none    # Use "none", "default" or dir path
  #  rli_dbname                   rli1000
  #  rli_expire_int               28800
  #  rli_expire_stale             86400
  #  rli_server                   false
  #  rlscertfile                  /etc/grid-security/hostcert.pem
  #  rlskeyfile                   /etc/grid-security/hostkey.pem
  #  startthreads                 1

7.RLS command line 명령어 테스트
설치가 완료되었으니 RLS 서버를 실행한다
옵션: N -> RLS 클라이언트가 인증과정 없이 RLS 서버에 접근할 수 있다. 만약 인증
            과정이 필요하면 서버 시작시 -N 옵션을 빼고 또한 globus-rls-* 명령어의
            server 위치 지정시 rlsn:// 대신 rls:// 을 사용한다
       d -> debugging 모드로 서버 진행상황을 syslog() 가 이닌 화면으로 출력
       L 4 -> log level 로서 log 의 세부적인 정도를 나타내며 L 0 가 가장 하위이다)
  [root root]# globus-rls-server -N -d -L 4
  
실행된 RLS 가 동작하는지 RLS ping 을 해본다
  [root root]# globus-rls-admin -p rlsn://localhost
  ping rlsn://localhost: 0 seconds
  
RLS의 LRC에 예제로서 논리 파일명 lfn0 에 대한 두개의 물리 파일명 pfn0, pfn1 을 넣는다
(보통 논리 파일명은 unique 한 ID 의 형태이며 물리 파일명은 실제 위치이나 편의상
  lfn0, pfn0 형태로 입력했다)
  [root root]# globus-rls-cli create lfn0 pfn0 rlsn://localhost
  [root root]# globus-rls-cli add lfn0 pfn1 rlsn://localhost
  
RLS의 LRC 와 RLI 각각에서 lfn0 에 대한 매핑 정보를 query 해본다
  [root root]# globus-rls-cli query lrc lfn lfn0 rlsn://localhost  
    lfn0: pfn0
    lfn0: pfn1
  [root root]# globus-rls-cli query rli lfn lfn0 rlsn://localhost  
    lfn0: rlsn://localhost:39281
    
여기까지는 각자 본인 host 의 LRC 와 RLI 를 테스트한 내용이고 다음은 다른 host 의 RLI 에
본인 host의 LRC 정보를 soft update 키는 예제를 살펴본다

본인 LRC 로 하여금 원격지의 다른 RLI 서버(rlsn://myhome.ssu.ac.kr) 에 LFN->LRC 매핑 정보를
주기적(lrc_update_ll)으로 soft update 하도록 지시한다
  [root root]# globus-rls-admin -a rlsn://myhome.ssu.ac.kr rlsn://localhost
  
환경설정에서 "lrc_update_ll  120" 과 같이 120초 마다 soft update 하라고 설정 하였지만
다음과 같이 지금 즉시 soft update 시킬 수 있다
  [root root]# globus-rls-admin -u rlsn://myhome.ssu.ac.kr rlsn://localhost

본인의 LRC 정보가 원격지의 RLI 에 soft update 되었는지 wildcard query 로 확인해 본다
  [root root]# globus-rls-cli query wildcard lrc lfn lfn* rlsn://myhome.ssu.ac.kr

8.RLS 예제소스 테스트
첨부한 소스파일(RLSclient.java, RLSclient.c)을 임의의 디렉토리에서 컴파일하여 실행해본다
두 소스는 각각 java 와 c 로 작성된것이며 실행결과는 동일하므로 비교하며 보면 된다

자바의 경우 rls.jar 가 필요한데 이것은 RLS 설치시 $GLOBUS_LOCATION/lib 에 자동으로 추가된다
환경변수로 CLASSPATH=$GLOBUS_LOCATION/lib/rls.jar 를 지정하여 사용하던가
아니면 아래처럼 직접 명시하여 컴파일 할 수 있다
  [root root]# javac -classpath $GLOBUS_LOCATION/lib/rls.jar RLSclient.java
  [root root]# java RLSclient rlsn://localhost

GCC 의 경우는 아래와 같이 컴파일 한다
  [root root]# gcc -o RLSclient RLSclient.c -I $GLOBUS_LOCATION/include/gcc32dbgpthr
  -L $GLOBUS_LOCATION/lib -lglobus_rls_client_gcc32dbgpthr
  [root root]# RLSclient rlsn://localhost





4   [GRID] [강좌] GridFTP 를 xinetd 서비스로 등록하여 사용하기  김영대 2003/12/02 6616 1773
3   [GRID] [강좌] Metadata Catalog Service (MCS) 설치  김영대 2003/11/29 6202 1542
  [GRID] [강좌] Replica Location Service (RLS) 설치  김영대 2003/11/29 6137 1609
1   [GRID] [강좌] Globus Toolkit 3.0.2 + SimpleCA 설치  김영대 2003/11/27 6450 1140

1
 

Copyright 1999-2017 Zeroboard / skin by zero