1992.11.02

SUBJECT: NIS에 대한 이모저모

DESCRIPTION:
* NIS는 OS install시 setting하는 것이 good!
* master는 OS install시 master로 지정 install한 후
  # cd /var/yp
  # /usr/etc/yp/ypinit -m 하여 물어보는 질문에 대해 모두 Yes함.
    아래 ypinit -m을 참조
* ypinit
  - NIS database를 build하고 install함.
    즉 NIS server상에 NIS database를 setup함.
  1) master server:
     # cd /var/yp (cd하는 이유: 이 directory에 "domainname" directory를
                                만들어 그 밑에 YP 환경을 만들 것임)
     # /usr/etc/yp/ypinit -m
       - critical error 아닌 경우에도 quit ?  Yes
       - 기존 것 destory ? Yes
       - slave server를 입력함.  입력하고 더 없으면 
  2) slave server:
     # cd /var/yp
     # /usr/etc/yp/ypinit -s master_server_name
     (slave는 master처럼 물어보는 것이 없음. 바로 YP환경을 create함.
      master server상의 /var/yp/"domainname" 밑에 있는 db화일들을
      자기 local의 /var/yp/"domainname"밑에 그대로 copy함.)

* master server만은 /etc/passwd에 user account 정보 모두 가지고 있음.
  slave server의 /etc/passwd에는 일반 client처럼 최소한의 것이 있음.
                                    
* make
  master server상에서만 수행 가능.
  master server의 /var/yp/Makefile을 참조하여 수행하는데 이는 master server만 있음.
  # cd /var/yp
  # make ( YP에서 관리하는 모든 db정보를 양자 비교하여 최신의 것으로 update시킴)

* yppasswd
  - master에서 slave로 passwd정보를 transfer함
    ┌ 일반 사용자는  yppasswd
    └ root는         /bin/passwd

* ypxfrd
  - transfer daemon
  - master에서 running되며 master의 db정보를 slave에 전달해서 update 시킴

* ypserv
  - master나 slave가 information db를 service함

* client
  - suninstall시 client에 대해서는 두가지만 하면 된다.
  - □ client
    Domain Name : cs.postech
  - client booting시
    Starting NIS service
    ypbind ......
  - error:
    "NIS server not responding for domain 'cs.postech'
     Still trying ....."
    network이 죽어 master나 slave중 어느 것 하나 살아 있지 않아
    service를 받지 못하는 경우 booting시 발생하는 error message.
    
* ypbind
  - master, slave, client들 모두에 running됨.
  - master나 slave에서 db information 가져오는 daemon
  - master나 slave는 자기가 infor 가지고 있어도 
    network에서 가져오도록 설계 --> 구현 용이

* 현재 NIS가 running중인지 보려면
  # ps ax | grep ypbind  --> 있으면 running중임.

* slave server가 2개 이상인 경우 어느 slave server가 update하려고
  계속 try하여 hangup됨
  --> 이 경우  한 후 ypinit를 다시 수행하여 slave를 다시 지정해야 함.

* slave는 make 못 돌린다. 즉 db update는 못하고 단지 제공하는 기능만 가짐.

* master나 slave server중 어느 것이든 먼저 service해 줄 수 있는 것이
  service 제공해 줌. yp client의 요구를 먼저 catch한 것이 service를 함.
  그러므로 master server가 down 되더라도 slave가 있으면 service 가능한 것.

* domain name이 noname이면 YP가 안됨
  /etc/defaultdomain에 domainname이 있어야 한다.

* /etc/passwd 에
  "+::0:0:::" 있으면 search하다 +를 만나면 NIS server에 가서 찾음.

* NIS client에서 NIS db file들을 볼 때
      # ypcat hosts
      # ypcat passwd
      # ypcat -m hosts (hosts map을 service해 주는 master server가 어느것인지)

* 관련 daemon
  - ypserv : server process
  - ypbind : binding process
  - ypxfrd : map transfer daemon
  - rpc.ypupdated : map entry들을 change하기 위한 server
  - rpc.yppasswdd:  NIS passwd file을 modify하기 위한 server
  - in.named : option 사항

* Utility들
  - ypcat : map에서 data를 list하기 위해
  - ypwhich : NIS server name을 list
  - ypmatch : map값과 match시키기 위해서
  - ypinit : NIS database를 build함
  - yppoll: server로부터 map의 order number를 얻기 위해
  - yppush : master에서 slave로 data를 전달
  - ypset : 특정 server에 binding set
  - ypxfr : master에서 slave에 data transfer
  - makedbm : NIS map을 위한 dbm file을 create

* NIS service는 ypserv, ypbind daemon에 의해 수행됨
  rpc.ypupdated daemon에 의해 db가 update됨.
  NIS service는 NIS map에 포함된 info를 사용함.
  NIS가 running되는 Network에서 domain당 적어도 하나의 NIS server가 있어야 함.
  같은 domain은 같은 map을 공유
  NIS client들은 binding process를 통해 NIS server로부터 info를 얻음.

* NIS service procedure
  - client상에서 수행되는 process는 ypbind에 server name요청함
  - ypbind의 기능은 ypserv process가 client request에 대해 listening하고 있는
    server의 address를 기억하는 것이다.
  - ypbind는 client process에게 talk할 server를 알려줌
  - yp client는 server에 직접 request를 보냄
  - NIS server상의 ypserv daemon은 map을 참고하여 request를 handling함.
  - 요구된 info를 client에 send
  - client와 server간의 binding은 network load에 따라 변할 수 있다.
    때에 따라 다른 server와 binding할 수도 있다는 의미

* 어느 server가 현재 client에 service를 제공하는지 알려면
  # ypwhich "client_name" ( client_name이 없으면 key in한 시스템을 default로 함)

* slave server상에서 make하지 말 것
  /var/yp 밑에 Makefile 있음.
  make 돌리면 default NIS map을 create하기 위해 makedbm에 줌
  # makedbm -u group.byaddr하면
  makedbm이 /etc의 화일들을 읽어서 NIS map set을 create함.
  map은 각 db file 단위로 보관하고 있음. 

* network에 system attach시키는 경우
  - master server의 hosts file을 edit하고
  - master server에서 make를 수행하면 됨.
    자동적으로 hosts.byname과 hosts.byaddr map을 update함
    이 map들은 다른 server들로 전파되고 모든 client가 이를 사용할 수 있게 됨.

* OS install한 상태에서 NIS setting하는 방법
  1) master server
     - /etc/defaultdomain에 domainname을 등록함
     - /var/yp에 가서
       # /usr/etc/yp/ypinit -m 
       (만약 error 발생하면, /usr/lib/NIS.Makefile을 copy하여 다시 수행)
     - # ypserv
     - /etc/rc.local의 ypxfrd를 열어줌.
     - # sh -x /etc/rc.local or reboot
  2) slave server
     - /etc/defaultdomain에 domainname을 등록함
     - # ypbind
     - # /usr/etc/yp/ypinit -s "master_server" 
       (ypinit 수행 전에 master server의  ypxfrd가 수행되고 있는지 확인)
  3) client
     - /etc/defaultdomain에 domainname을 등록함
     - # sh -x /etc/rc.local  or # ypbind
    
  
Revision History
Created        on Nov. 02 ,1992