Subject : Axil W/S 상에 NIS의 설치 및 그 기능 

Description :


1. 개 요

     NIS는 Name Information Service의 약자로서 흔히 YP(Yellow Pages)라고  불리는 
   RPC(Remote Procedure Call)를 이용한 응용계층의 소프트웨어를 말한다. 미국의 경우
   전화번호부 책을 yellow book이라 부르는데 YP도 이와 비슷한 의미를 가지며 디렉토리 서비스를
   제공한다.

     YP는 SUN에서 만든 소프트웨어로서 현재 SUN 시스팀 이외에 Pyramid사의 Pyramid
   기종, IBM의 RS6000등의 시스팀에서도 그 소프트웨어를 제공하고 있다. 한편  YP란
   용어는 영국의 United Kingdom of British Telecommunications plc의 공식  등록상
   표이므로 1991년에 SUN에서 그 동안 사용하던 YP 용어를 NIS로 변경하였다. 그러나
   SUN 워크스테이션에서 사용되고 있는 NIS관련 daemon들의 이름은 여전히  'yp'라는
   단어를 사용하고 있다 (예를 들어 ypserv, ypbind,  rpc.ypupdated,  ypxfrd  등이
   다).

     본 고에서는 NIS의 다양한 기능 전부를  설명하지는  않고  DNS에  연동한 name 
   service의 제공 및 그 설치 방법 , 문제점 발생시 진단법에 대해 설명한다.

2.  NIS의 구성 및 기능 

    가. Master 서버와 Slave 서버 그리고 클라이언트

       NIS를 설치할때 NIS의 형태를 결정하게 되는데, 호스트를 서버로 올리는  경우
     master 서버와 slave 서버중 하나를 선택해야 한다. 그리고 domainname을 설정해
     야 하는데 이때 사용하는 도메인네임은 DNS의 domainname과는 별개임을 주의해야
     한다.

       Master 서버는 한 도메인의 DB 정보를 유지 관리하며, 서비스 요청이 오면  그
     에 대한 응답을 해 준다. 또한 slave 서버에게 자신이 가지고 있는 도메인 DB 정
     보를 백업하도록 전송해 주어서 master 서버가 서비스를 제공하지  못하는  경우
     대신 서비스를 제공할 수 있도록 해 준다.

        Slave 서버는 앞에서도 언급했지만 Master 서버가 가지고 있는 도메인 DB  정
     보를 복사하여 간직하고 있다가 master 서버의 장애 발생시에 대신해서 서비스를     제공해 준다.

       호스트를 클라이언트로 설치하는 경우 별도의 소프트웨어 설치는 필요하지  않
     으며 단지 ypbind daemon만 실행시켜 주면 된다.

    나. 일반 파일을 DBM 파일로의  변환 

       NIS를  master  서버  형태로  설치하게  되면  /etc/hosts, /etc/networks, 
     /etc/ethers, /etc/services, /etc/protocols 파일들을 DBM 형태의 파일로  새로
     만들어서 자신의 DB 내용으로 사용하게 된다. 그리고, 이들 일반 파일들을  사용
     해야 하는 경우 이들 파일을 사용하지 않고 NIS 자신의 DB를  사용한다.  여기서
     주의할 점은 시스팀이 부팅이 된 후 NIS 서비스가 제공되므로 부팅시에는 각각의
     일반 파일들이 사용된다는 것이다.
        
       한편 NIS를 사용하게 되면 앞에서 언급한 일반 파일들의 내용을 변경하는 경우
     반드시 NIS의 DB의 내용도 변경시켜 주어야 한다.  NIS DB 변경 방법은 /var/yp 
     디렉토리에서 변경된 파일의 이름을 단지  make  뒤에다  적어주면  된다.  가령
     '/etc/hosts' 파일의 내용을 변경한 경우 다음과 같이 '/var/yp'  디렉토리로 가
     서 다음의 명령을 실행시켜 주어야 한다.

          $ vi /etc/hosts    
               .
            작업이 끝난 후
               .
          $ cd /var/yp
          $ make hosts

    다. NIS 관련 daemon의 기능

       NIS를 설치하고 실행시켜야 하는 기본적인 daemon으로는 ypserv, ypbind가  있
     으며, 그 밖에 rpc.ypupdated 등이 있는데 이는 NIS의 사용환경을 고려하여 사용
       Ypserv는 /usr/etc/ypserv에 위치하며 ypbind의 서비스 요청을 처리해 주는 기
     능을 수행하며, 호스트의 도메인네임으로 설정된 /var/yp/'domainname' 디렉토리
     의 DBM 파일들을 가지고 서비스에 대한 응답을 하게 된다.

       Ypbind는 daemon으로 실행되면서 자신의 NIS 서버  설정을  위해  broadcast를
     하는데, 이때 domainname이 같은 호스트중 NIS 서버가 응답을 하면 그  호스트를
     를 자신의 NIS 서버로 binding한다.

       다음의 그림은 ypserv와 ypbind(앞의 2개는  daemon  형태로  실행됨)  그리고
     ypcat 명령어간의 실행 흐름을 보여 주는 것이다. 

                                         +--------+       

                       |                 +--------+                  |  
                       | 1                                         2 |  
                       |                                             |  
                       |                                             V  
                   +--------+                                     +--------+
                   | YPCAT  |---------------------------------->  | YPSERV |
                   +--------+                3                    +--------+


                        1 : 서버가 어디 있는냐 ?
                        2 : 누가 서버인가 ?
                        3 : 정보는 어디에 있는가 ?

                             [그림 1]  ypbind의 실행 과정  

3. NIS 설치 방법 

     먼저 여기에서 언급하는 NIS 설치는 SUN OS Ver.4.1 이상을 사용하고 있다는  것
   을 전제로 이야기한다. 만약에 SUN OS Ver.4.0.3을 사용하는 경우  약간의  차이가   있다.

    가. super user로 전환을 한다.

       # su

    나. domainname을 정한다. 이름의 길이는 256까지 가능하나 가능한  짧은  이름이
       좋다.  명령어 domainname을 이용해 현재 설정되어 있는  이름을 알 수가 
       있는데, 대개 기본적으로 noname으로 설정되어 있는  경우가  많으
       니, 원하는 이름으로 반드시 설정해야 한다. domainname은 명령어d로 직접  정
       해줄 수 있으나, 컴퓨터가 부팅시 /etc 디렉토리에 있는 shell 스크립트를  통
       해 /etc/defaultdomain 파일에 적혀진 이름으로 domainname을 설정하므로 반드
       시 /etc/defaultdomain  파일에 적어 주어야 한다.(명령어로 domainname을  확
       인, 혹은 정해주려면 다음과 같이 하면 된다).

       # domainname 
       noname
       #
       # domainname aa.co.kr
       #
       # domainame
       aa.co.kr 
                          
    다. NIS service에 관련된 컴퓨터중 master server, slave server, client를 정하
       며, 컴퓨터들이 hostname을 가졌는지 확인한다. hostname은 컴퓨터가 booting
       시에 /etc/hostname.xx# 파일에 저장된 내용으로 정해진다. xx#는  컴퓨터에서
       사용하는 ethernet controller chip이 어느회사에서 만들어졌는지에 따라 달라
       진다. (command로  hostname을 확인, 혹은 정해주려면 다음과 같이 하면 된다.

       # hostname 
       noname
       #
       # hostname han
       #
       # hostname
       han 

    라.  /etc/hosts  파일의  내용을  적절히  수정하다.  가능한  각   실에서   한
       administrator가 관리할 수 있는 컴퓨터들만 포함되도록 한다. 즉  han과 ns
       라는 컴퓨터가 있으면 다음과 같이 /etc/hosts 파일을 작성하며  특히  유의할
       점은 loopback address (127.0.0.1)는 반드시 포함되도록 한다.

           +---------------------------------------------+
           |                                             |
           |128.134.1.1  han           loghost           |
           |147.6.1.3    ns             ns.kotel.co.kr   |
           |                                             |
           +---------------------------------------------+
    마. directory의 위치를 '/var/yp' 로 옮긴다. 만약 /var 밑에   yp  directory가
       없으면 필요한 directory와 파일  을  설치한다.  /var/yp  directory  밑에는
       'Makefile'과 'updaters' 파일이 있어야 한다.

       #cd /var/yp

    바. 'Makefile' 파일  의  내용중  다음의  line을  설정한다.  아울러
       /usr/lib directory에 'NIS.Makefile'이 있는 경우 똑같이 고쳐준다.

       변경전                          변경후 

       #B=-b                            B=-b
       B=                               #B=

    사. 다음과 같이 'Makefile'을 실행시켜 준다. '-m'의 의미는 YP를 master로 설치
       한다는 것이다. 

      # /usr/etc/yp/ypinit -m

    아. 7번과 같이 명령어를 실행시  키면 NIS가 몇가지 질문을 하게  되는데,  이때
       단지 return key 와 ctrl-d를 이용하여 하면 된다. 그리고 hostname을  입력하
       도록 요구하면 ctrl-d로 빠져나와 계속 return key를 치면 된다. 몇가지 error
       가 발생해도 문제가 없다. 다음은 앞에서 실행한 명령어의 결과를 보여주는 것
       이다(그림자로 표시된 것은 입력한 부분을 나타낸다).  

      Installing the NIS data base will require that you answer a fewquestions.
      Do you want this procedure to quit on non-fatal errors? [y/n: n]  n
      OK, please remember to go back and redo manually whatever fails.  If you
      don't, some part of the system (perhaps the NIS itself) won't work.

      At this point, we have to construct a list of the hosts which will run NIS
      servers.  tao is in the list of NIS server hosts.  Please continue to add
     the names for the other hosts, one per line.  When you are done with the
      list, type a .
              next host to add:  han
              next host to add:  ^D  
      The current list of NIS servers looks like this:
       
      han
       
      Is this correct?  [y/n: y]  y
      There will be no further questions. The remainder of the procedure should
     take5 to 10 minutes.
      Building /var/yp/babo/ypservers...
      Running /var/yp/Makefile...
      updated group
      updated hosts
      make: Warning: Don't know how to make target `/etc/ethers'
      Current working directory /var/yp
      updated networks
      updated rpc
      updated services
      updated protocols
      make: Warning: Don't know how to make target `/etc/netgroup'
      Current working directory /var/yp
      make: Warning: Don't know how to make target `/etc/bootparams'
      Current working directory /var/yp
      updated publickey
      updated netid
      /usr/etc/yp/makedbm /etc/netmasks /var/yp/`domainname`/netmasks.byaddr; 
      updated netmasks
      couldn't find /etc/timezone
      couldn't find /etc/auto.master

    자. 이로서 NIS를 올리기 위한 기본적인 작업은 끝났고, 그 다음은 필요한 daemon
	을 실행시켜야 한다.

       # ypserv
       # ypbind

   차. 9번까지의 작업은 NIS를 설치하는 작업이고  여기에서 하는 작업은 DNS를 설치
       하기 위한 작업이다. 현재 연구개발단내의  대부분의 컴퓨터는  remote server
       의 형태로 DNS가 설치되어 있다. SUN의 경우 /etc 밑에 resolv.conf 파일을 만
       들어 주면 된다. 다음은 resolv.conf 파일의 내용이다.
             

           +---------------------------------------------+
           |; /etc/resolv.conf, 1991/7/8 by jypark       |
           |;                                            |
           |                                             |
           |domain          kotel.co.kr                  |
           |                                             |
           |nameserver      147.6.1.2                    |
           |nameserver      147.6.1.3                    |
           |nameserver      147.6.1.2                    |
           |nameserver      147.6.1.3                    |
           |                                             |
           +---------------------------------------------+

    카. 그 밖의 NIS 관련 daemon이 더 있지만 필요하지 않으므로 ,  /etc directory 
        에 존재하는 rc* 파일에서 comment로 처리하여 주면 된다.

    참고 : /etc/hosts 파일의 변경 내용을 NIS DB로 바꾸려면  /var/yp  directory의 
       위치에서 다음과 같이 하면 된다.

           # make hosts

4.  DNS 설치 방법

    가.  대부분의 호스트들은 단지 DNS의 서비스를 요청하는 형태이므로 Remote 
         Server형태로 DNS를 설치하면 된다.

     Remote Server는 resolver 기능만을 이용하여 name service를 받는 컴퓨터를  말
   하며, name service request가 발생할 때 마다  Master  Server에  요청하여 name 
   service를 받는다. 그 결과 동일한 호스트에 대해 여러번 name service  request를
   하여서 비 효율적이나, 설치방법이 간단하므로 대부분 호스트에서는 Remote Server
   로 설치한다. 구성 방법은 /etc/resolv.conf 파일만 있으면 되며, 그 내용은  다음
   과 같이 구성하면 된다. 아래 내용에서 domain부분은 자신의 도메인 이름을 적으
   면 된다.

     +---------------------------------------------------------------------+
     |  ; /etc/resolv.conf, 1990/7/8 by jypark                             |
     |  ; resolver file for autoritive master name server for KOTEL.CO.KR  |
     |  ;								   |
     |  domain          kotel.co.kr					   |
     |	nameserver      128.134.1.1
     |  nameserver      147.6.1.2					   |
     +---------------------------------------------------------------------+

    나. SunOs 4.1.1을 사용하는 경우에는 remote server로 설치하였을  때
	name 서비스를 받을 수없는 경우가 발생하는 경우도 있는데 이럴 때에는
	Cache Only Server의 형태로 설치한다. 설치 방법은 han.hana.nm.kr:
	~anonymous/hana-info/TM/dns.tar화일에 있는 install.txt화일을 참조한다.

5. NIS 설치시의 주의 할 점

      호스트에서 syslogd를 실행하는 경우 syslog.conf 에 따라서 각종 정보가  기록
    되는데 이 경우 NIS의 hosts DB를 잘못 구성하면 호스트의 성능이 크게  저하되는 
    경우가 발생한다. 

              다음은 /etc/hosts 파일의 내용이다.

             +-----------------------------------+
             |  147.6.1.2       ring    loghost  |
             +-----------------------------------+

      만약 /etc/hosts 파일의 내용을 다음과 같이 만드는 경우 loghost의 정보로  인
    해 호스트가 reboot되는 경우도 발생한다.                  
                                                                 
             +--------------------------------------------+
             |  127.0.0.1       localhost       loghost   |
             |  147.6.1.2       ring   ring.kotel.co.kr   |    
             +--------------------------------------------+
 
      간혹 NIS의 daemon이 실행되기 전에 default route가 설정되어 있지 않으면  호
    스트가 hangup 상태에 빠지는 경우도 발생하므로 /etc/rc.local 파일상에  다음과 
    같이 default route를 설정해 주는 것이 좋다.

  +--------------------------------------------------------------------------+
  |                                                                          |
  |    #                                                                     |
  |    # Run NIS only if we have a set domainname.                           |
  |    #                                                                     |
  |    dname=`domainname`                                                    |
  |    if [ "$dname" -a -d /var/yp ]; then                                   |
  |            echo "NIS domainname is $dname"                               |
  |            echo -n "starting NIS services:"                              |
  |                                                                          |
  |            if [ -f /usr/etc/ypserv -a -d /var/yp/$dname ]; then          |
  |                    ypserv;         echo -n ' ypserv'                     |
  |    #                                                                     |
  |    #               Master NIS server runs the XFR daemon                 |
  |    #                                                                     |
  |    #               ypxfrd;         echo -n ' ypxfrd'                     |
  |            fi                                                            |
  |                                                                          |
  |            if [ -f /etc/security/passwd.adjunct ]; then                  |
  |                    ypbind -s;      echo -n ' ypbind'                     |
  |            else                                                          |
  |                    ypbind;         echo -n ' ypbind'                     |
  |                                                                          |
  |            if [ -f /usr/etc/rpc.ypupdated -a -d /var/yp/$dname ]; then   |
  |                    rpc.ypupdated;  echo -n ' ypupdated'                  |
  |            fi                                                            |
  |            echo '.'                                                      |
  |    fi                                                                    |
  +--------------------------------------------------------------------------+

      그리고 sendmail daemon은 NIS를 통해 전자우편을 전송하므로 반드시 NIS를  설
    치하고 나서 domainname을 반영시켜야 한다. 그러기 위해서는 /etc/aliases  파일
    을 dbm 파일로 바꾸기 위해 newaliases를 실행시켜 준다.


6. 결 론

    본고에서는 Name Server 운영과 관련하여 SUN을 중심으로 NIS 기능 및 설치방법에
   대하여 소개하였다.  NIS는 사용하기가 힘들어서 대부분의 호스트 관리자들이 사용
   하지 않으려 하나, 네트워크 환경을 최대한 이용하기 위해서는 꼭  사용해야  하는
   기능이다. 본고에서 소개한 자료를 참고삼아 호스트의 환경에 맞추어 NIS를 설치하
   면 사용자 환경에 많은 도움이 되리라 생각된다. 
 
 

Revision History

작성일자 : 96.06.17
작성자 : 이진수

수정일자 : 
수정자