cfile7 uf 2043B20B4C44F2048C6576

Document Sample
cfile7 uf 2043B20B4C44F2048C6576 Powered By Docstoc
					SUN 시스템

O.S
시스템 기종과 설치가능한 OS 버젼
다음 설명중 OS 버젼 4.1.X는 "4.1.1, 4.1.2, 4.1.3을 나타내며 4.1.3_U1* 과 "4.1.3C**"는 포함하지 않는다.
SYSTEM     NAME (or model)    ARCH        (MINIMUM) OS RELEASES SUPPORTED***
--------------------------------------------------------------------------------
4/15     Classic           sun4m       4.1.3C, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
4/20     SLC                 sun4c     4.1, 4.1.X, 4.1.3_U1, 4.1.4, 5.4 -> 5.7
4/25     ELC                 sun4c     4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/30     LX                 sun4m      4.1.3C, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
4/40     IPC                sun4c      4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/50     IPX                sun4c     4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/60     SS1                 sun4c     4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/65     SS1+                sun4c     4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/75     SS2                 sun4c     4.1.x, 4.1.3_U1, 4.1.4, 5.0 -> 5.7
4/1xx    Cobra              sun4       4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1****, 5.2 -> 5.4
4/2xx    Sunrise           sun4       4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1****, 5.2 -> 5.4
4/3xx    Stingray          sun4       4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1 -> 5.4
4/4xx    Sunray             sun4      4.1, 4.1.x, 4.1.3_U1, 4.1.4, 5.1 -> 5.4
4/6xx    Galaxy 41,51       sun4m      4.1.3, 4.1.3_U1, 4.1.4, 5.1 -> 5.5.1
4/6xx    ""       41MP,512MP sun4m      5.1 -> 5.5.1
SS4       Perigee           sun4m       4.1.4, 5.4 -> 5.7
SS5       Aurora            sun4m       4.1.3_U1 Ver B, 4.1.4, 5.3 Ed II or >, 5.4->5.7
SS10      20,30,40,41,51     sun4m      4.1.3, 4.1.3_U1, 4.1.4, 5.1 -> 5.7
SS10      402MP,41MP,512MP sun4m           5.1 -> 5.7
SS20      Kodiak             sun4m      4.1.3_U1 Ver B, 4.1.4, 5.3 Ed II or >, 5.4->5.7
SS240     Voyager            sun4m      5.3 Ed II or >, 5.4 -> 5.7
SS1000    Scorpion           sun4d      5.2 -> 5.7
SC2000    Dragon              sun4d     5.2 -> 5.7
SS11      Ultra 1(140,170) sun4u      5.5 -> 5.7
SS12      Ultra 1(E)       sun4u      5.5 HW 1/96 -> 5.7
SC11      UltraServer 1    sun4u      5.5 -> 5.7
SC12      UltraServer 1(E) sun4u      5.5 HW 1/96 -> 5.7
Ultra1   Neutron           sun4u      5.5 -> 5.7
Ultra1E Electron           sun4u     5.5 HW 1/96 -> 5.7
Ultra2   Pulsar            sun4u     5.5.1 -> 5.7
UE3000    Duraflame          sun4u      5.5.1 -> 5.7
UE4000     Campfire             sun4u     5.5.1 -> 5.7
UE5000     Camfire rack        sun4u     5.5.1 -> 5.7
UE6000     Sunfire             sun4u     5.5.1 -> 5.7
UE10000 Starfire             sun4u1     5.5.1 -> 5.7
Ultra5                       sun4u      5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
Ultra10                      sun4u      5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
Ultra30                      sun4u      5.5.1 H/W 4/97 -> 5.7
Ultra60                      sun4u      5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE250                          sun4u     5.5.1 H/W 11/97 (see FE Hbk), 5.6 H/W 5/98, 5.7
UE450                          sun4u     5.5.1 H/W 4/97 -> 5.7
Ultra450                      sun4u     5.5.1 H/W 11/97 -> 5.7
UE3500                         sun4u     5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE4500                         sun4u     5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE5500                         sun4u     5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7
UE6500                         sun4u     5.5.1 H/W 11/97, 5.6 H/W 3/98, 5.7


* OS 버젼 "4.1.3_U1 Version A"는 "4.1.3"과 "4.1.3C"를 통합한 것이며, "4.1.3_U1 Version B"
  는 SuperSparc module version 3.5 이상의 시스템을 지원하기 위한 것이다.


** 4.1.3C는 4/15와 4/30 만을 지원한다.


*** Solaris와 SunOS 버젼의 상관관계는 아래와 같다.
    Solaris 1.0       =   SunOS 4.1.1
    Solaris 1.0.1    =    SunOS 4.1.2
    Solaris 1.1       =   SunOS 4.1.3
    Solaris 1.1.1A =      SunOS 4.1.3_U1 Version A*
    Solaris 1.1.1B =      SunOS 4.1.3_U1 Version B
    Solaris 1.1.2    =    SunOS 4.1.4
    Solaris 2.0       =   SunOS 5.0
    Solaris 2.1       =   SunOS 5.1
    Solaris 2.2       =   SunOS 5.2
    Solaris 2.3       =   SunOS 5.3
    Solaris 2.3.2    =    SunOS 5.3 Edition II
    Solaris 2.4       =   SunOS 5.4
    Solaris 2.5       =   SunOS 5.5
    Solaris 2.5.1    =    SunOS 5.5.1
    Solaris 2.6       =   SunOS 5.6
    Solaris 7         =   SunOS 5.7
Solaris 2.6의 인스톨
1. 인스톨 방법
        Solaris 2.6의 인스톨에는 다음과 같은 방법이 있다.


        1) Solaris Web Start
        2) 대화식 인스톨 프로그램을 사용한 신규 인스톨
        3) 대화식 인스톨 프로그램에 따른 업그래이드 인스톨
        4) 대화식 인스톨 프로그램을 사용한 네트워크 인스톨
        5) Custom Jumpstart
        6) Jumpstart


2. Solaris Web Start


        Solaris 2.6부터 서포트되는 새로운 인스톨 유틸리티 이다.
        유저 인터페이스에 Sun의 Web 브라우저인 HotJava를 사용하고 있는 것이
        특징으로 Solaris 2.6을 신규로 인스톨 하는 경우 더욱 간단한 방법 이다.
        이것을 사용 하여 서버 패키지에 있는 언-번들 소프트웨어와 Answer Book도
        동시에 인스톨이 가능하다.
        Java 대응의 Web 브라우저를 사용하여 로컬에 콘솔을 가지고 있지 않은
        서버의 인스톨을 네트워크 상의 별개의 머신으로 부터 인스톨도 가능 하다.


3. 대화식 신규 인스톨


        종래에 사용한 일반적인 Solaris 2.x의 인스톨 방법이다.
        Solaris 2.6에도 서포트 하고 있는 윈도우 베이스 인스톨 작업이다.
        인스톨 시에 시스템 디스크 이외의 디스크를 설정이 가능하다.


4. 대화식 업-그레이드 인스톨


        Solaris Web Start가 신규의 인스톨에 대응 하고 있지 않은 것에 대해
        대화식 인스톨 프로그램(Interactive Installation Program)은
        업-그레이드 인스톨에도 대응 하고 있다.
        Solaris 2.4이후의 OS가 인스톨 되어 있고 모든 사용 환경이 설정 되어 있는
        시스템에 대하여 업-그레이드가 가능 하다.


        업-그레이드 인스톨에는 다음과 같은 처리가 가능 하다.
        1) 업-그레이드의 대상의 디스크(시스템 디스크)를 지시
           업-그레이드 프로그램은 그 디스크의 화일 시스템에 있는 기존 시스템의
           각종 설정 정보를 보존 한다.
       2) 기존의 패키지의 삭제
       3) 기존의 패치의 삭제
       4) 필요한 경우 디스크 영역의 재배치
          경우에 따라 일시적으로 백업 하기 위해 백업 장치가 필요
       5) 신규 패키지의 인스톨
       6) 디바이스 노드의 재작성
       7) 보존 하고 있는 내용을 새로운 시스템에 머지
       8) /var/sadm/install_data/upgrade_cleanup 스크립트의 작성
       9) 로그 화일 이름 등을 표시


       그러나 업-그레이드 인스톨에는 화일 변경의 유/무를 체크 하므로 내용을
       유지하기 위한 처리로 신규 인스톨에 비해 시간이 많이 소요 된다.
       시스템에 대한 변경이 큰 경우, 예를들면 인스톨 후에 화일 시스템의
       구성을 바꾸거나 시스템 화일의 일부를 삭제 하거나 절대 패스의 심볼릭
       링크를 변경한 경우는 정확한 업-그레이드가 가능하지 않는 경우도 있다.
       업-그레이드 프로그램이 참조하는 이하의 화일은 시스템의 상태를 정확히
       반영 하고 있지 않으면 않된다.
       /var/sadm/softinfor/INST_RELEASE
       /var/sadm/install/contents
       /var/sadm/install_data.clustertoc
       /var/sadm/install_data/CLUSTER
       업-그레이드 인스톨을 실행한 경우, 시스템에 대하여 인스톨한 내용은
       /var/sadm/system/logs/upgrade_log 화일에서 참조가 가능하다.


5. 대화식 네트워크 인스톨


       CD-ROM 드라이브를 가지고 있지 않은 시스템에서도 대화식의 인스톨
       프로그램을 사용하여 네트워크를 경유하여 OS를 인스톨 가능하다.
       그 경우, CD-ROM 드라이브가 있는 기계 또는 Solaris 2.x의 CD-ROM의
       내용을 하드 디스크에 가지고 있는 기계를 인스톨 서버로 설정할
       필요가 있다.
       인스톨 서버가 다른 서브 네트에 있는 경우는 같은 서브 네트 상에
       있는 기계를 부트 서버로 설정 한다. 인스톨 대상의 시스템은 네트워크를
       경위 하여 인스톨 프로그램을 로드 하여 인스톨 서버가 가지고 있는
       OS의 소프트웨어를 로컬의 디스크에 인스톨 한다.




6. Custom JumpStart
       이것은 다수의 기계에 인스톨 또는 업-그레이드 하는 경우에 유효한
       방법 이다. 예를들면, 100대의 워크스테이션을 도입한 경우, 모든 기계에
       OS를 대화식으로 인스톨 하면 시간이 많이 걸린다. Custom JumpStart에는
       다음과 같은 환경을 응용하여 OS의 인스톨를 자동화 한다.
       우선 네트워크 상에 OS 미디어의 내용을 복사한 인스톨 서버를 준비 한다.
       다음 인스톨 대상의 기계가 인스톨 환경을 네트워크 경유하여 로드 가능한
       부트 서버로 설정을 추가 한다.


7. JumpStart
       JumpStart도 다수의 기계를 간단히 인스톨 하기 위한 방법이다.
       Custom JumpStart와 다른 점은 JumpStart 전용의 소프트웨어가 로컬
       디스크에 인스톨 되어 있어야 하는 것과 인스톨 내용이 기계의 타입과 디스크
       용량에 따라 결정 되어 있다는 점이다. 인스톨 서버를 결정하고 네트워크에
       접속하여 전원을 켜고 호스트 이름 등의 정보를 입력하는 것만으로 간단히
       인스톨이 가능하다.


8. 신규 인스톨을 위한 준비
       Solaris 2.x의 인스톨 작업은 간단하다. OS의 CD-ROM으로 부터 부트하여
       메세지에 따라 요구 하는 정보를 입력 한다. 그러나 용량 등의 항목에 대한
       작업이 있는 경우에 사전에 결정할 필요가 있다. 새로운 OS를 인스톨 하는
       경우에 필요한 정보에 대하여 결정 한다.


       1) 시스템 정보
       2) 시스템 타입의 결정
           인스톨과 관계하는 OS의 구성 패턴을 "시스템 타입" 이라고 칭한다.
           이것은 다음의 4가지의 타입이 있다.


           * 스탠드 얼론
           * OS 서버
           * 디스크 레스 클라이언트
           * AutoClient 시스템
       3) 소프트웨어 구성의 결정
           Solaris 2.x의 소프트웨어는 Solaris 2.6의 경우에 400 이상의 패키지 모듈로
           구성 되어 있다. 인스톨 프로그램에는 이용 모듈로 4개의 표준적인 패턴 으로
           구성 되어 있다.
       4) 디스크 슬라이스 구성의 결정
       5) OS의 미디어와 메뉴얼
           Solaris 2.5와 Solaris 2.5.1의 서버 미디어팩에는 CD-ROM이 OS의 코어부분 1개,
           CDE에 1개 등의 7개의 CD-ROM이지만, Solaris 2.6에는 OS에 CDE가 포함 되어 있다.
 *Solaris 2.6의 경우


 whiteeye# cd /cdrom/Solaris_2.6
 whiteeye# ls -F
 Docs/    Misc/     Patches/    Product/   Tools/


 *Solaris 2.5.1의 경우


 whiteeye# cd /cdrom
 whiteeye# ls -F
 .cdtoc                   add_install_client*
 .install_config/         auto_install_sample/
 .slicemapfile export/
 Copyright                rm_install_client*
 Patches/                 setup_install_server*
 Solaris_2.5.1/


 *Solaris 2.3의 경우


 whiteeye# ls -F
 Copyright                export/
 NISPLUS.4.1.README                  hsfs.mnt*
 NISPLUS.TAR              hsun4.o
 Patches/                 hsun4c.o
 Solaris_2.3/             inst.rr*
 add_install_client*      rm_install_client*
 archinfo/                setup_install_server*
 auto_install_sample/


6) OS 인스톨에 관련하는 예비정보


 * man page
   man install_scripts : OS의 CD-ROM에 포함되어 있는 인스톨 스크립트의 해설
   man boot                    : 부트 시퀸스의 해설
   man monitor              : PROM 모니터 부터의 부트 방법
   man re-preinstall      : JumpStart 소프트웨어의 로드 방법
   man sysidtool           : 인스톨 시에 영향을 받는 화일, 필요한 정보
   man sysidconfig         : 인스톨 시에 영향을 받는 화일, 필요한 정보
   man sys-unconfig            : 시스템 화일을 공장 출하 상태로 되돌림
        man kdnconfig         : x86용의 시스템 설정 초기화 코맨드


      시스템 구성 화일과 네트워크 인터페이스 및 커널에 대하여 적절한 정보를 설정
      하기 위하여 내부의 sysidtool 라는 프로그램이 사용 된다. sysidtool은 새로운
      시스템을 구성 할때 사용하는 다음의 5개의 프로그램 으로 SUNWadmap 패키지에
      포함되어 있다.


      * /usr/sbin/sysidnet
        네트워크 관련 정보(호스트 이름, IP 어드레스 등)


      * /usr/sbin/sysidnis
        NIS, NIS+ 등의 네임 서비스 관련 정보 (도메인 이름 등)


      * /usr/sbin/sysidsys
        호스트, 아키텍쳐 고유의 정보


      * /usr/sbin/sysidroot
        root 패스워드


      * /usr/sbin/sysidpm
        전원 관리 기능의 설정


      이상의 프로그래은 시스템 인스톨 시에 자동적으로 동작한다.


9. 디스크 슬라이스의 구성


    1) 소프트웨어 카티고리
      소프트웨어 그룹(예전 버젼에는 클러스터 라고 호칭함)
      소프트웨어의 선택을 일반화, 간단화 하기 위하여 제공 되는 소프트웨어의
      그룹. 이하의 4가지중 패턴을 결정하여 필요한 소프트웨어 클라스와
      소프트웨어 패키지를 선택 한다.




      * 전체 디스트리뷰션(ALL)
        Solaris 2.x의 모든 패키지를 포함
      * 개발자 시스템 서포트(Developers)
        엔드 유저 시스템 서포트에 소프트웨어 개발에 필요한 항목을 추가
      * 엔드 유저 시스템 서포트(End-users)
        코어 시스템 서포트에 OpenWindows의 이용 환경을 추가
 * 코어 시스템 서포트(Core)
     Solaris 2.x의 부트와 실행에 필요한 소프트웨어만 포함


2) 슬라이스 구성의 패턴
 디스크 슬라이스의 구성을 결정하는 경우 이하의 점에 유의 한다.


 * 1개의 슬라이스에 1개의 화일 시스템을 작성
 * 1개의 디스크에는 8개의 까지의 슬라이스가 설정 가능
 * 최소한 루트 화일 시스템과 스왑 용의 2개의 슬라이스가 필요
 * 슬라이스는 복수의 디스크에 설정 가능 하지만 1개의 슬라이스를 복수의
     디스크 디스크에 분산 시키는 것은 불가능 하다
 * 스왑은 1개의 디스크에 집중 되는것 보다 복수의 디스크에 분산 시키는
     분산 시키는 것이 성능향상에 유효 하다


 슬라이스(=화일 시스템)를 나누는 단위로는 일반적으로 다음과 같은
 화일 시스템을 사용 한다.


 /
     일반적으로 루트 화일 시스템 단독의 경우와, /var를 포함한 경우, /tmp를
     포함한 경우, /var+/tmp를 포함한 경우의 4가지의 패턴이 있다. 또 대용량의
     백업 장치를 가진 시스템에서 관리를 간단히 하기 위하여 모든 OS의 화일
     시스템을 / 의 이하에 배치하는 것도 가능 하다.
 /usr
     인스톨 하는 소프트웨어 클라스에 따라 필요한 사이즈가 변한다. 내용 중에
     윈도우 시스템의 /usr/openwin를 포함 하는가, 별도의 슬라이스에 위치 시키
     는가에 따라 크게 다를수 있다.
 /var
     유저의 관리 방침에 따른다. 별도의 파티션에 하지 않아도 운영이 가능하다
 /export
     OS 서버의 경우 클라이언트의 댓수, 각각의 클라이언트에 할당 하는 루트
     화일 시스템, 스왑의 사이즈에 따라 결정 한다. /export/root, /export/swap,
     /export/exec등으로 분할 하는 경우도 있다.


 /home
     디폴트로 /home 디렉토리는 오토 마운트가 사용 하기 위하여 홈 디렉토리로
     /export/home이 사용 된다.
 /opt
     패키지 구성에 따른다.
 swap
         Solaris 2.x의 스왑 사이즈는 실 메모리와 스왑 영역의 합계가 어플리케이션이
         사용 하는 가상 메모리의 사이즈 이상으로 결정 한다. Solaris 2.6의 경우,
         메모리와 스왑 영역의 합계 사이즈가 최저로 64MB, 윈도우 환경을 사용 하는
         경우는 128MB 이상 으로 한다. Custom JumpStart에는 화일 시스템에 필요한
         사이즈를 산출 하여 남은 영역 으로 부터 이하의 사이즈를 최대치로 스왑 영역이
         확보 된다.
       /tmp
         UNIX 화일 시스템으로 루트 화일 시스템에 포함 된다. tmpfs 타입을 지정하여
         메모리 베이스의 화일 시스템 이다.(디폴트) /var/tmp 등에 심볼릭 링크 한다.


10. OS의 인스톨 방법
     1) 신규 인스톨 절차
       신규 인스톨을 하는 경우, Solaris 2.6에는 2개의 유틸리티로 부터 선택 가능하다.


       * 윈도우 베이스의 인스톨 프로그램
       * Solaris Web Start


  신규 인스톨은 Solaris 2.6을 2 배속 CD-ROM 드라이브를 사용하여 SS20에 인스톨 하는 경우에 약 40
분 정도이다. 보다 고속의 CD-ROM 드라이브나 네트워크 경유로 인스톨 하는 경우에는 단축이 가능하다.
새로운 디스크에 OS를 인스톨 하거나 이전의 OS의 정보를 사용 하지 않고
      인스톨하는 경우 인스톨시에 "초기옵션"을 선택 한다.


     2) Solaris 2.6의 대화식 인스톨 프로그램을 사용 하는 경우
      stop, A key를 눌러준다
      ok boot cdrom


     3) Solaris Web start를 사용 하는 경우
       ok boot cdrom - browser


11. 인스톨 상태의 확인
     1) 인스톨 관련 정보를 표시하는 코맨드
       CDE와 OpenWindows 환경에서 메뉴로 부터 "Workstation 정보"를 선택하여 GUI상에서
       시스템에 관한 기본적인 정보를 확인한다. /usr/openwin/bin/wainfo 코맨드를 실행
       하는 것도 가능하다.


       소프트웨어의 설정에 대하여 개별적인 정보를 얻고자 하는 경우에 다음과 같은
       코맨드가 이용 가능하다.


       * HOST 이름
    # uname -n      : whiteeye
    # hostname      : whiteeye
    # showrev      : Hostname: whiteeye
    # sysdef       : whiteeye node name (NODE)
* OS의 종류, 버젼
    # uname -s      : SunOS
    # uname -r      : 5.6
    # uname -v      : Generic
    # showrev      : Release:      5.6
                     Kernel version:       SunOS 5.6 Generic August 1998
    # sysdef       : 5.6 release (REL)
                     SunOS system name (SYS)
                     Generic version (VER)
* 파티션 구성
    # df -k        : Filesystem kbytes used avail capacity Mounted on
                     /dev/dsk/c0t3d0s0 38383 19392 15161 56% /
                     ...........
* 패치 정보
    # showrev -p   : Patch:     101331-03 Obsoletes:     Packages:        SUNWcsu.7
                     11.5.0,REV=2.0.18,PATCH=35
                     ........
* 로드 되어 있는 모듈
    # sysdef       : * Loadable Objects
                     strmod/bufmod
                     strmod/connld
                    ......
* 소프트웨어 패키지 구성
    # pkginfo      : system           AXILvplr      Axil platform links
                     system           AXILvplu       Axil usr/platform links
                     ..............


네트워크에 관한 정보는 다음과 같은 코맨드가 이용 가능하다.


* IP Address, NetMask, Broadcast Address
    # ifconfig -a : inet 129.158.153.162 netmask ffffff00 broadcast 120.158.153.255


하드웨어의 구성 요소에 관한 상세한 정보는 다음과 같은 코맨드가 이용 가능하다.


* 아키텍처 타입
    # prtconf      : System Configuration: Sun Microsystems sun4m
    # arch -k       : sun4m
* Workstation 모델
    # prtconf   : SUNW,SPARCstation-5
    # prtconf -vp : ......
                        model: 'SUNW,501-2572'
                        clock-frequency: 0510ff40
                        name: 'SUNW,SPARCstation-5'
    # dmesg            : root nexus = SUNW,SPARCstation-5
* CPU 타입
    # dmesg            : cpu0:   SUNW,UltraSPARC (upaid 0 impl 0x10 ver
                        0x22 clock 143 MHz)
    # prtconf -vp :       ....
                        sparc-version: 00000008
                        mask_rev: 00000020
                        device_type: 'cpu'
                        name: 'FMI,MB86904'
    # ok cpu-info : VPU FMI,MB86904 Rev. 2.0: 85Mhz
     (EEPROM 코맨드)
* 메모리 용량
    # dmesg            : mem = 32768k (0x2000000)
    # prtconf      : Memory size: 32 Megabytes
* 시리얼 포트 디바이스
    # dmesg            : zs0 at obio0: obio 0x1000000 sparc ipl 12
                        zs0 is /obio/zs@0,1000000
    # sysdef          : zs, instance #0
                        zs, instance #1
* 디스크
    # dmesg            : sd3 at esp0: target 3 lun 0
                        sd3 is /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/
                        esp@5,8800000/sd@3,0
    # sysdef          : sd, instance #2 (driver not attached)
                        sd, instance #3
* 프레임 버퍼
    # prtconf      : cgsix, instance #0
    # prtconf -F   : /iommu@f,e0000000/sbus@f,e0001000/cgsix@2,0
    # dmesg            : cgsix0 at sbus0: SNus slot 3 00 SBus level 5 sparc ipl 9
                        cgsix0 is /iommu@0,10000000/sbus@0,10001000/cgsix@3,0
                        cgsix0: screen 1152x900, single buffered, 1M mappable, rev 11
      # sysdef        : cgsix, instance #0


 Root 디바이스와 Swap 디바이스 등의 정보는 /etc/vfstab 화일을 확인 하거나 다음의 코맨드의
 이용이 가능 하다.


 * Root 디바이스
      # dmesg             : root on /iommu@0,10000000/sbus@0,10001000/espdma@5,8400000/
                              esp@5,8800000/sd@3,0:a fstype ufs
 * Swap 디바이스
      # dmesg             : dump on /dev/dsk/c0t3d0s1 size 131532K
      # swap -l       : swapfile dev swaplo blocks free
                              /dev/dsk/c0t3d0s1 32,25 8 263080 209312
      # sysdef        : swapfile dev swaplo blocks free
                              /dev/dsk/c0t3d0s1 32,25 8 263080 209312
 * 시스템 보드 구성의 정보
      # prtdiag(Sun4d, Sun4u 아키텍처만 가능)


2) 시스템 화일의 설정
 시스템의 기본적인 설정은 다음의 시스템 화일을 보면 이해할수 있다.


 * /etc/passwd                : 등록된 유저정보                      : Copy하여 사용하는 경우 root만 허용
   /etc/shadow                :
 * /etc/group                 : 등록된 그룹 정보                 :
 * /etc/default/*     : 환경설정의 정보                   : 유저에 대한 디폴트 환경 설정
   /etc/skel/*            :
 * /etc/vfstab            : 화일 시스템 구성                 :
 * /etc/nsswitch.conf : 네임 서비스                        : 서버의 서비스를 받는 경우에 클라이언트로
                                                                      설정 필요
   /etc/resolv.conf   : DNS 클라이언트의 설정 : DNS를 사용하는 경우
   /etc/defaultdomain : NIS의 도메인 이름                   : NIS를 사용하는 경우
 * /etc/hosts             : 호스트 정보                    : loghost등의 일부 변경이 필요한 경우가 있음
 * /etc/nodename               : 노드 이름                            :
 * /etc/defaultrouter : 디톨트 라우터의 설정               : 환경에 따라 그대로 사용 가능
 * /etc/services      : 네트워크 서비스의                     : 어플리케이션에 의존
   /etc/rpc               : 등록                        :
 * /etc/sendmail.cf       : 메일 시스템 설정                 : 그대로 사용 가능
   /etc/aliases           :                           :
 * /etc/rc?.d/*           : Daemon의 추가, 설정                    :
   /etc/init.d/*      :                           :
        * /etc/system         : OS의 parameter        :


     3) 로그 화일 : /var/sadm/system/logs/install_log
        OS의 인스톨 개시부터의 로그 정보가 화일에 기록 되어 있다. 이 화일에는 이하의 내용이 있다.


        * 화일 시스템의 구성
        * 인스톨된 패키지의 종류
        * 인스톨된 소프트웨어의 총용량
        * 부트 디바이스


     4) 로그 화일 : /var/sadm/system/logs/sysidtool.log
        OS를 인스톨할 때에 새로운 시스템에 관한 몇가지의 정보를 입력 한다. 이것은 sysidtool라고
        하는 일련의 프로그램에 따라 자동적으로 처리 된다. sysidtool의 로그 정보가 화일에 기록 된다.


        * Ethernet의 인터페이스 이름
        * 인스톨시에 설정한 IP 어드레스
        * 인스톨시에 설정한 Netmask의 값
        * 타임존
        * 선택한 네임 서비스의 종류


     5) 소프트웨어의 로그 화일 : /var/tmp/*log*
        소프트웨어 중에 /var/tmp 디렉토리에 독자의 로그 화일을 작성하는 것이 있다.


        * AdminSuite_install_log
        * SunSoft_CDE1.0.1_pkgadd.log.날짜


        이들의 인스톨 로그 화일은 기본적으로 인스톨 과정에서 발생하는 문제를 기록하기 위해서
        작성 된다.




User 등록
1. 시스템에 새로운 사용자를 등록하기
     # useradd -d /export/home/guest -s /usr/bin/ksh -m guest
 이 명령어는 /export/home/guest라는 홈 디렉토리를 가지는 guest 라는 사용자를 만든다. 그 사용자의
login shell은 /usr/bin/ksh이다.
   -m 옵션은 사용자의 홈 디렉토리를 만들어 준다.
 이 명령어를 실행하기 전에 /export/home 디렉토리는 존재하여야 한다. useradd 명령어로 사용자를 만들
면, 그 사용자의 암호는 lock되어 있어서 암호를 넣어 줄때까지 이 사용자는 login할 수 없다.
 그래서 passwd 명령어를 사용하여 암호를 넣어주어야 한다.
       # passwd guest
       New password:
       Re-enter new password:


2. 시스템에서 사용자 제거하기
       # userdel -r guest
 guest라는 사용자를 시스템에서 제거한다. -r 옵션을 사용자의 홈디렉토리를 지운다.


3. 참고 문헌
   시스템에 설치된 메뉴얼 페이지를 참고한다.
       useradd(1M), userdel(1M), usermod(1M)
       예제)
               man useradd




한글이 입출력되지 않으면?
1. LANG 환경변수와 터니널 모드를 지정한다.
       a) sh, ksh 인 경우, 다음과 같은 내용을 홈디렉토리의 .profile 화일에 넣는다
               LANG=ko
               export LANG
               stty -istrip -parenb cs8
       위의 명령어를 쉘 상에서 바로 실행하면 즉시 반영된다.
       b) csh 인 경우, 다음과 같은 내용을 홈디렉토리의 .login 화일에 넣는다
               setenv LANG ko
               stty -istrip -parenb cs8
       위의 명령어를 쉘 상에서 바로 실행하면 즉시 반영된다.




remote Backup 방법
Tape가 있는 시스템 tserver, Tape가 없는 시스템 client라고 가정한다.
1. Trusted Host 관계를 맺는다.
       a) client에 /.rhosts 화일을 만들고 tserver를 넣는다.
       b) tserver에 /.rhosts 화일을 만들고 client를 넣는다.
       c) tserver에서 다음과 같은 명령어가 실행되는지 확인
                # rsh   client    ls
       d) client에서 다음과 같은 명령어가 실행되는지 확인
                # rsh   tserver     ls
2. tar backup
       1.1 tserver에서 backup(일반적인 방법)
                1.1.1 Disk ---> Tape
                         tar cvf /dev/rmt/0 directory
                1.1.2 Tape --> Disk
                         tar xvf /dev/rmt/0
       1.2. client에서 tserver의 tape로 backup
                1.2.2 Disk ---> Tape
                         tserver에서 client의 /usr/lib 디렉토리를 backup하려면
                                 # rsh client "cd /usr; tar cvf - lib" > /dev/rmt/0
                1.2.3 Tape --> Disk
                         client에서 백업을 풀 디렉토리에 가서 다음과 같이 실행
                                 # rsh tserver "cat /dev/rmt/0" | tar xvf -


3. ufsdump/ufsrestore backup


       1.1 tserver에서 backup(일반적인 방법)
                1.1.1 Disk ---> Tape
                         ufsdump 0uf /dev/rmt/0 /dev/rdsk/c0t0d0s0
                1.1.2 Tape --> Disk
                         ufsrestore rf /dev/rmt/0
       1.2. client에서 tserver의 tape로 backup
                1.2.2 Disk ---> Tape
                         client에서 다음과 같이 실행
                         # ufsdump 0uf tserver:/dev/rmt/0 /dev/rdsk/c0t0d0s0
                1.2.3 Tape --> Disk
                         client에서 다음과 같이 실행
                         # ufsrestore rf tserver:/dev/rmt/0
sar 데이타 수집하기
1. /etc/init.d/perf 화일에서 다음과 같이 # commnet를 제거한다.
      #MATCH=`who -r|grep -c "[234][         ]*0[    ]*[S1]"`
      #if [ ${MATCH} -eq 1 ]
      #then
      #          su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
      #fi
      |
      |
      +--->
                 MATCH=`who -r|grep -c "[234][      ]*0[    ]*[S1]"`
                 if [ ${MATCH} -eq 1 ]
                 then
                        su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"
                 fi


2. /etc/init.d/perf 화일을 /etc/rc2.d 디렉토리 밑에 링크를 건다.
      # ln /etc/init.d/perf /etc/rc2.d/S21perf


3. "crontab -e sys" 명령어를 실행하여, 다음과 같은 추가한다.
  crontab -e sys를 실행하면 vi 에디터 화면이 나타난다. vi 화면이 나타나지 않으면 환경변수 EDITOR에 vi
를 설정한다.
  다음은 5분간격으로 sar 데이타를 받는 것이다.
          0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/sa/sa1


4. sar 데이타를 받기 위한 초기 작업을 한다. 다음과 같은 명령어를 실행한다.
      # sh /etc/init.d/pert start
      * reboot하지 않아도 되며, reboot하여도 sar 데이타는 계속 받힌다.




백업(Backup) 방법
Solaris 2.X에서는 다음과 같은 4가지 백업이 있다.
      1. tar
      2. cpio
      3. dd
      4. ufsdump/ufsrestore
1. tar
    tar를 화일 또는 디렉토리 전체를 백업 받는데 사용된다.
    1.1 화일 시스템에서 테이프로 백업 받기
          # tar cvf /dev/rmt/0 .


    1.2 테이프에서 화일 시스템로 백업 받기
          # tar xvf /dev/rmt/0


    1.3 테이프 내용 보기
          # tar tvf /dev/rmt/0


2. cpio
   2.1 화일 시스템에서 테이프로 백업 받기
          # find   -print | cpio -ocvB -O /dev/rmt/0


    2.2 테이프에서 화일 시스템로 백업 받기
          # cpio -icvBmd -I /dev/rmt/0


    2.3 테이프 내용 보기
          # cpio -ict -I /dev/rmt/0


3. dd
    3.1 화일을 테이프로 백업 받기
          # dd if=file1 of=/dev/rmt/0 bs=4096k


    3.2 테이프에서 화일로 백업 받기
          # dd if=/dev/rmt/0 of=file1 bs=4096k


4. ufsdump/ufsrestore
    4.1 화일시스템에서 테이프로 백업 받기
          # ufsdump 0cuf /dev/rmt/0     /




    4.2 테이프에서 화일 시스템으로 백업 받기
          # ufsrestore rvf /dev/rmt/0


    4.3 테이프 내용 보기
          # ufsrestore tvf /dev/rmt/0
  4.4 Interactive restore
      # ufsrestore ivf /dev/rmt/0


화일 시스템이 full 되었을 경우 조치 방법
/ (root) 파일 시스템이 full되었을 경우에 다음에 열거한 순서대로 파일시스템을 점검한다.
1. / 파일 시스템에 사용자가 임의로 만들어 준 디렉토리가 있으면 정리한다.


2. /dev 디렉토리 밑에 일반화일이 있는지 조사한다.
      # find /dev   -type f -exec ls -l {} \;
 일반화일이 있을 경우, 모두 지우면 된다. 특히 테이프에 백업을 받을 경우에 사용자가 디바이스명을 잘못
지정하여, 테이프에 백업되지 않고 파일에 저장하는 경우가 있다.


3. 시스템에 있는 core 화일을 제거한다.
  core 화일을 찾아 보려면 다음과 같은 명령어를 사용한다.
      # find / -name core -print
  core 화일을 찾아서 자동으로 지우려면 다음과 같은 명령어를 실행한다.
      # find / -name core -exec rm {} \; -print


4. /var가 root 화일 시스템이 있을 경우, /var 디렉토리 밑을 조사한다.
      # du -sk /var/* | sort -nr


  이 명령어를 실행하면 /var 밑에 있는 디렉토리 별로 그 서브 디렉토리까지 포함하여 KB 단위의 크기를
출력한다. 거기에서 사이즈가 큰 디렉토리에 대하여 조사한다.
  정상적인 시스템에 주로 문제가 될 만한 디렉토리는 다음과 같다.
      /var/adm
      /var/mail
      /var/log
      /var/preserve
      /var/spool


  4.1 /var/adm
      /var/adm 디렉토리에는 시스템이 운용중이 발생하는 메세지나 기타 정보들이 누적 보관된다. 이 디
      렉토리에 큰 화일이 있으면 정리한다.
                 messmages.0, messages.1, ...
      이러한 화일이 있으면 그냥 지워도 상관없다.
      messages 화일의 크기가 너무 크면 " # cp /dev/null messages " 명령어를 사용하여 화일 크기를
      0으로 만들 수 있다. 이 화일은 시스템에서 발생되는               메세지를 보관하는 화일이다.
      wtmp 또는 wtmpx 화일의 크기가 너무 크면 다음과 같은 명령어를 실행하여 그 크기를 0으로 만들
      수 있다. 이 화일에는 시스템에 접속한 사용자에 대한 정보를 가지고 있는 화일이다.
               # cp /dev/null wtmp
               # cp /dev/null wtmpx
      만일 pacct이 있으면 그 화일의 크기를 다음과 같은 명령어를 사용하여 크기를 0으로 만들 수 있다.
      이 화일은 accounting 정보를 가지고 있는 화일이다.
               # cp /dev/null pacct
      pacct1, pacct2, ... 등등의 화일이 있으면 그냥 지우면 된다.
      그 외에도 사이즈가 큰 화일을 알아서 정리한다.


  4.2 /var/mail


    /var/mail 디렉토리에는 메일 데이타가 보관되는 곳이다. 이 디렉토리에 사이즈가 큰 화일이 있으면,
    해당 사용자에게 그 메일을 정리하도록 한다.


  4.3 기타 디렉토리에 대해서도 조사하여 불필요하게 사이즈가 큰 파일 있을 경우 알아서 정리한다. 단
      화일을 지울 때, 그 화일이 어떤 파일인지 숙지한 후에 지울 것인가 아닌가를 결정한다.


5. / 화일 시스템에 있는 1 MB 이상되는 화일을 조사하여, 화일 크기순으로
  sort하여 그 내용을 조사한다.


      # find / -mount -size +1024k -ls > /tmp/find.list
      # sort -nr +6 /tmp/find.list > /tmp/find.list.s


   find.list.s 화일에서 비정상적인 큰 화일이 있는지 조사한다.




acct(accounting) 설정하기
1. rc 화일을 지정한다.
      # ln /etc/init.d/acct /etc/rc2.d/S22acct
      # ln /etc/init.d/acct /etc/rc0.d/K22acct


2. cron 작업을 등록한다.
  2.1 /var/spool/cron/crontab/adm 화일에 다음과 같은 내용을 추가한다.
               0 * * * * /usr/lib/acct/ckpacct
               0 1 * * 1-6 /usr/lib/acct/dodisk
               0 2 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log
               15 5 1 * * /usr/lib/acct/monacct
      시간들은 사용자의 목적에 맞게 변경할 수 있다.


  2.2 /var/spool/cron/crontab/root 화일에 다음과 같은 내용을 추가한다.
3. 시스템을 reboot하면 변경사항이 적용된다.


4. 시스템을 reboot하지 않고 accounting을 적용하려면 2번 cron 작업을
         # env EDITOR=vi crontab -e adm
   을 실행하여 등록하고,
         # /usr/lib/acct/startup
   를 실행시킨다.


5. 참고 문헌
         시스템에 설치된 메뉴얼 페이지를 참고한다.
         acct(1M), acctsh(1M), lastcomm(1)
         예제)
                 man acct


message queue parameter 설정하기
1. message queue 개략 설명
Name        Default Max             Brief Description
------     ------- -------------- -------------------------------------
msgmap           100      2147483647      메세지 map에 있는 entry 갯수
msgmax           2048     2147483647*     메세지 최대 크기
msgmnb           4096     2147483647*     메세지 큐의 최대 크기
msgmni           50       2147483647      메세지 큐 identifier의 갯수
msgssz           8        2147483647*     메세지 segment의 크기
msgtql 40        2147483647        시스템 메세지 헤더 갯수
msgseg           1024     32767*          메세지 segment의 수 (MUST BE < 32768)


2. message queue 세부 설명


msgmap
메세지 큐 resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는 연속적인 가용한 공간를 차지
한다. 이것은 msgsnd(2) 시스템 콜에 의해 얻어지는 메세지 큐 segment를 위한 공간으로 사용된다.


msgmax
하나의 메세지에 대한 크기를 제한한다. 메세지의 크기가 이 값보다 크면msgsnd(2) 시스템 콜은 EINVAL 오
류값을 리턴한다. 이 값은 최대 2GB까지 사용할 수 있지만 시스템의 다른 요소들이 65535로 제한된 것이
있기 때문에 65535보다 큰 값을 사용할 경우에 예기치 못한 결과가 발생할 수 도 있다.


    msgmnb
하나의 메세지 큐가 수용할 수 있는 메세지의 최대 크기를 제한한다. 이 값은 메세지 큐에 보관되어 있는 메
세지들의 크기(byte)의 합계이다.


위에 기술된 최대값은 Solaris 2.4 이상의 버전이고, 그 이전의 버전에서는 최대값이 65535로 제한된다.




   msgmni
시스템에 가용한 메세지 큐 identifier의 갯수를 정의한다.            시스템은 이 값만큼의 msgmni control structure
에 해당되는 커널 메모리를 미리 할당한다. 하나의 control structure는 144 바이트이다.


   msgtql
시스템에서 가용한 메세지 큐 헤더를 갯수를 정의한다. 메세지 큐에 들어 있지만 아직 읽혀지지 않은 메세지
는 하나의 메세지 큐 헤더를 차지한다. 시스템은 이 값만큼의 msgtql control structure에 해당되는 커널 메
모리를 미리 할당한다. 하나의 control structure는 12 바이트이다.


   msgssz & msgseg
이 두개의 값에 의하여, 모든 큐에 있는 모든 메세지에 대한 가용한 전체 바이트 수를 정의한다. 시스템은
메세지 큐들에 대하여 커널 메모리를 미리 할당한다. 메모리의 총합은 msgssz * msgsseg 이 다.
msgssz * msgsseg의 값은 2147483647을 넘어서는 안된다.


3. message queue parameter 설정하기


   message queue parameter를 시스템에 설 정하려면 /etc/system 화일에 다음과
   같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
          set msgsys:msginfo_variable = value


   여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
  예를 들면,
      set msgsys:msginfo_msgmap = 150
   msgmap(message queue resource map)의 값을 150으로 변경한다.


4. message queue parameter 값을 조사하기
  시스템에 설정되어 있는 message queue parameter의 값은 'sysdef' 명령어로 확인할 수 있다.
      $ sysdef


      .... Skip ....
      *
      * IPC Semaphores
      *
            100   entries in msg map (MSGMAP)
 2048    max message size (MSGMAX)
           4096      max bytes on queue (MSGMNB)
           50    message queue identifiers (MSGMNI)
           8    message segment size (MSGSSZ)
           40    system message headers (MSGTQL)
           1024      message segments (MSGSEG)
        .... Skip ....


   위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 message queue module이 커널에 올라와 있지 않기
때문이다. Solaris 2.x에서는 dynamic kernel을 사용한다. 이는 kernel module들이 사용될 때, kernel에 결합
되고, 사용하지 않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 message queue module을 커널에
load하려면 다음과 같이 'modload'명령어를 사용할 수 있다.


        # modload -p sys/msgsys
   그리고 다시 sysdef 명령어는 사용하면, message queue parameter를 확인할
   수 있다.


5. 커널 메모리의 제약
 Solaris 2.5 이상 버전에서는 message queue가 메모리의 1/4 이상이 할당되지 못하도록 하며, 그 이상이
할당되면 경고 메세지를 출력하고, message queue module을 load하지 않는다.


6. 참고 문헌
   시스템에 설치된 메뉴얼 페이지를 참고한다.
   msgget(2), msgctl(2), msgop(2), msgsnd(2), msgrcv(2)


   예제)
        man msgget




semaphore parameter 설정하기
1. semaphore parameter 개략 설명
Name       Default        Max            Brief Description
------    ------- -------------- -------------------------------------
semmap             10     2147483647     semaphore map에 있는 entry의 갯수
semmni             10     65535          semaphore set (identifier)의 갯수
semmns             60     2147483647     시스템에 있는 semaphore의 갯수
        65535 (usage)
semmnu             30     2147483647     시스템이 있는 "undo" structure의 갯수
semmsl             25     2147483647     하나의 semaphore ID에 있는 semaphore 최대 갯수
             65535 (usage)
semopm        10    2147483647    하나의 semaphore call당 최대 operation 최대 갯수
semume        10    2147483647    하나의 프로세서당 "undo" entry 최대 갯수
semusz        96    *see below*   "undo" structured의 크기(byte)
semvmx        32767 2147483647    semaphore 최대값
             65535 (usage)
semaem        16384 2147483647    exit시에 보정될 최대값
             32767 (usage)


2. semaphore parameter 세부 설명
   semmap
      semaphore resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
      연속적인 가용한 semaphore를 차지한다.
      semget(2) 시스템 콜에 의해 얻어지는 semaphore set을 위한 공간이다.
   semmni
      시스템에서 사용할 수 있는 최대 semaphore sets (identifiers)를 정의한다.
      시스템에 있는 모든 semaphore set은 유일한 ID와 제어구조를 갖는다.
      각 semaphore set에 대하여 84 바이트의 커널 메모리가 미리 할당된다.
      semmni의 값을 65535 보다 크게 지정하면, 시스템은 경고 메세지를 출력하고
      이 값은 65535로 설정한다.
   semmns
      시스템에 있는 semaphore의 갯수를 정의한다. 각 semaphore에 대하여
      16 바이트의 커널 메모리가 미리 할당된다.


   semmnu
      시스템이 있는 semaphore undo structure를 정의한다. 각 undo structure에
      대하여 semusz 크기 만큼의 커널 메모리가 미리 할당된다.
      하나의 프로세스에 대하여 undo 정보를 기록하기 위하여 하나의 undo
      structure가 필요하다.
   semmsl
      하나의 semaphore ID에 대하여 생성될 수 있는 semaphore의 갯수를 제한한다.
      논리적으로 semmsl는 semmns의 값과 같거나 적어야 한다.
      만일 이 값을 너무 크게 잡으면, 몇개의 semaphore ID가 시스템 전체에
      있는 semaphore를 독식할 수 있다.
   semopm
      하나의 semop(2) 시스템 콜에서 처리할 수 있는 operation 수를 제한한다.
   semume
      하나의 프로세스가 가질 수 있는 undo record의 수를 제한한다.
   semusz
      semaphore undo structure의 크기를 정의한다. 이 값은 사용자가 변경하는
      것이 아니고, 시스템에 의해 계산된다.
                 semusz = 8 * (semume + 2)
   semvmx
      하나의 semaphore의 최대값을 제한한다. undo structure와 semaem과의
      연관관계가 있으므로 이 값의 디폴트 32767 보다 크게 지정하지 말아야
      한다. 만일 디폴트 보다 크게하면, SEM_UNDO 기능을 사용할 수 없다.
   semaem
      adjust-on-exit undo element의 최대값을 제한한다.


3. semaphore parameter 설정하기
   semaphore parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
   같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.


          set semsys:seminfo_variable = value
   여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
   예를 들면,


      set semsys:seminfo_semmap = 15
   semmap(semaphore resource map)의 값을 15으로 변경한다.


4. semaphore parameter 값을 조사하기
   시스템에 설정되어 있는 semaphore parameter의 값은 'sysdef' 명령어로
   확인할 수 있다.
      $ sysdef


      .... Skip ....
      *
      * IPC Semaphores
      *
            10   entries in semaphore map (SEMMAP)
            10   semaphore identifiers (SEMMNI)
            60   semaphores in system (SEMMNS)
            30   undo structures in system (SEMMNU)
            25   max semaphores per id (SEMMSL)
            10   max operations per semop call (SEMOPM)
            10   max undo entries per process (SEMUME)
       32767     semaphore maximum value (SEMVMX)
       16384     adjust on exit max value (SEMAEM)
       .... Skip ....


     위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 semaphore module이
     커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
     사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
     않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 semaphore module을
     커널에 load하려면 다음과 같이 'modload'명령어를 사용할 수 있다.


       # modload -p sys/semsys
     그리고 다시 sysdef 명령어는 사용하면, semaphore parameter를 확인할
     수 있다.


5. 커널 메모리의 제약
     Solaris 2.5 이상 버전에서는 semaphore가 메모리의 1/4 이상이 할당되지 못하도록 하며, 그 이상이 할
당되면 경고 메세지를 출력하고, semaphore module을 load하지 않는다.


6. 참고 문헌
     시스템에 설치된 메뉴얼 페이지를 참고한다.
       semget(2), semctl(2), semop(2)
       예제)
                man semget




shared memory parameter 설정하기
1. shared memory parameter 설명
Name Default            Max             Description
------          ---------------         --------------- -----------------------------------
--
shmmax          1048576 (1Meg) 4294967295       shared memory segment의 최대 크기를
                        (4GB)           지정한다. 이 크기는 shmget(2) 시스템
                        2.5.1 or 콜에서 요구할 수 있는 최대 크기이다.
                        higher          커널이 이 값 만큼의 메로리를 미리
                                        할당하여 별도로 관리하는 것이 아니고
                        2147483647      필요할 때마다 할당 받아 사용한다. 그래서
                        (2GB)           이 값을 크게 지정하여도 시스템이 나쁜
                        2.5 or lower    영향을 주지는 않는다.


shmmin          1                4294967295     shared memory segment의 최소 크기를
                       (4GB)              지정한다. 이 값은 변경할 필요는 없다.
                       2.5.1 or
                       higher
                       2147483647
                       2.5 or lower


shmseg         6                  32767         하나의 프로세서에 할당될 수 있는 최대
                       (32k)              shared memory segment의 갯수를 지정한다.
                                          이 값은 segment가 할당될 때, segment의
                                          갯수를 조사하는데 사용된다. 그러므로
                                          이 값에 의하여 미리 할당되는 자원은
                                          없다. 만일 이 값이 34K를 넘어서면,
                                          주의 메세지를 출력하고, 그 값은 32k로
                                          설정한다.
shmmni         100                2147483647    시스템에 가용한 shared memory
                       (2GB)              identifier의 최대 갯수를 지정한다.
                                          모든 shared memory segment는
                                          이 identifier에 의해 관리되며, shmget(2)
                                          시스템 콜의 리턴값이다.
                                          identifier 1개당 약 120 바이트 정도의
                                          메모리가 미리 할당된다.
                                          Solaris 2.5 이상 버전에서는
                                          메모리의 1/4 이상이 이 identifier에
                                          할당되지 못하도록 하며, 그 이상이
                                          할당되면 경고 메세지를 출력하고,
                                          shared memory module를 load하지 않는다.




2. shared memory parameter 설정하기
   shared memory parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
   같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.


         set shmsys:shminfo_variable = value
   여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
   예를 들면,


      set shmsys:shminfo_shmmni = 150


   shmmni의 값을 150으로 변경한다.
3. shared memory parameter 값을 조사하기
   시스템에 설정되어 있는 shared memory parameter의 값은 'sysdef' 명령어로 확인할 수 있다.


        $ sysdef


        .... Skip ....
        *
        * IPC Shared Memory
        *
        1048576             max shared memory segment size (SHMMAX)
              1 min shared memory segment size (SHMMIN)
            100 shared memory identifiers (SHMMNI)
              6 max attached shm segments per process (SHMSEG)
        .... Skip ....


   위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 shared memory module이
   커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
   사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
   않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 shared memory module을
   커널에 load하려면 다음과 같이 'modload' 명령어를 사용할 수 있다.


        # modload -p sys/shmsys
   그리고 다시 sysdef 명령어는 사용하면, shared memory parameter를 확인할
   수 있다.
4. 참고 문헌
   시스템에 설치된 메뉴얼 페이지를 참고한다.
   shmget(2), shmop(2), shmat(2), shmdt(2)
  예제)
        man shmget


일반적인 커널 파라메터 및 수정방법
1. 최대 사용자수 지정하기 (maxusers)
   최대 사용자수는 시스템에 설치된 메모리의 양에 따라 자동적으로 적절한 값이 설정된다. 특별한 경우가
아니면 이 파라메터를 변경하지 않는 것이 바람직하다.
   또한, 이 파라메터를 기준으로 다음과 같은 파라메터들이 자동적으로 설정된다.


        max_nprocs         Maximum number of processes (default = 10 + 16 * maxusers)
        ncallout         Number of callout buffers (default = 16 + max_nprocs)
     ufs_ninode     Maximum number of inodes.
                        (default = max_nprocs + 16 + maxusers + 64)
     ncsize         Number of dnlc entries.
                        (default = max_procs + 16 + maxusers + 64)


  명시적으로 최대 사용자수를 지정하려면, /etc/system 화일에 다음과 같은 라인을 추가하고, 시스템을
리부팅한다.
     set maxusers=100


2. 최대 프로세스 갯수 지정하기 (max_nprocs)
  시스템이 허용하는 최대 프로세스 수는 최대 사용자 수에 비례하여 자동으로 설정된다. 그러나 그 갯수
가 너무 적거나 많으면 사용자가 명시적으로 지정할 수 있다.                          최대 프로세스 수를 10000으로 지정하려면,
/etc/system 화일에 다음과 같은 라인을 추가하고, 리부팅한다.
     set max_nprocs=10000


3. 가상단말기 갯수 지정하기 (pt_cnt)
  시스템에 사용되는 가상단말기 갯수는 디폴트로 48개가 설정되어 있다. 가상단말기는 /dev/pts/0, ...,
/dev/pts/47로 되어 있다. 이 가상단말기는 telnet이나 rlogin을 통해서 시스템으로 들어올 경우에 하나씩 사
용된다. X-window에서 cmdtool이나 shelltool, dtterm을 실행하여도 하나씩 사용된다. 만일, 가상단말기의
갯수를 128개로 늘이려면, /etc/system 화일에 다음과 같은
  라인을 추가하고, 리부팅한다.
     set pt_cnt=128
     set npty=128


  ** 시스템을 리부팅할 때에는 반드시 reconfiguration 모드로 리부팅하여야 한다.


  예제) command:
              # reboot -- -r


       PROM:
              OK boot -r




4. 최대 화일 디스크립트 갯수 지정하기 (rlim_fd_cur)


  하나의 프로세스가 동시에 open할 수 있는 최대 화일의 개수는 디폴트로
  64개이고, 1024개까지 화일의 갯수를 늘릴 수 있다.


  shell에서 최대화일의 갯수를 512개로 늘이려면, 다음과 같이 지정한다.
       csh 경우)
                limit descriptors 512


       sh, ksh 경우)


                ulimit -n 512


   shell에서 한번 지정되면 이후에 실행되는 모든 명령어에 이 영향이 반영된다.


   만일, 디폴트 값을 128로 하고 최대 화일의 갯수를 1500까지 늘릴 수 있도록
   하려면, /etc/system 화일에 다음과 같은 내용을 추가하고, 시스템을 리부팅한다.


       set rlim_fd_max=1500
       set rlim_fd_cur=128




5. 최대 UFS inode수 지정하기 (ufs_ninode)


   시스템에서 화일을 open하면 하나의 화일에 대하여 하나의 ufs_niode를 가지게
   된다. 명시적으로 이 값을 지정하려면, /etc/system 화일에 다음과 같은 내용을
   추가하고, 시스템을 리부팅한다.


       set ufs_ninode=10000


timezone 화일 변경 및 설정하기
1. timezone 이란 ?
   그리니치 표준시간(GMT)를 기준으로 각 지역이 위치한 경도에 따라 시간의 차이가
   있다. 이러한 동일한 시간대를 지역을 동일한 timezone을 가진다고 말한다.
   timezone에 따라 변동이 있는 시간대를 컴퓨터상에서 보정하기 위하여 컴퓨터가
   사용되는 지역에 따라 timezone정보를 컴퓨터에 지정하도록 되어있다.
   우리나라의 전지역은 하나의 시간대를 사용하며, ROK라는 timezone을 가진다.
   시스템이 제공하는 clock을 GMT 시간으로 내부적으로 사용되고, 외부에 시간이
   나타날 때에는 환경변수 TZ에 설정된 timezone정보에 따라 GMT 표준시간이
   가공되어 지역에 맞는 시간이 나타난다.
   시간에 관련된 모든 명령어는 TZ 환경변수에 영향을 받는다.
   date 명령어를 시용하여 간단하게 테스트하면, timezone(TZ)에 따라
   시간이 다르게 나타나는 것을 알 수 있다.
       # date
      1998년 11월      6일 금요일 오전 11시 19분 15초
      # env TZ=Hongkong date
      1998년 11월      6일 금요일 오전 10시 19분 15초
      # env TZ=Turkey date;date
      1998년 11월      6일 금요일 오전 04시 19분 15초


   위에서 보는바와 같이 홍콩은 우리나라보다 1 시간 늦고, 터키는 7 시간 늦다.


2. zone 화일
   zone화일은 /usr/share/lib/zoneinfo 디렉토리에 존재한다. 이 디렉토리에는
   테스트 화일로 된 timezone 정보화일과 컴파일된 timezone 정보화일이 있다.
   컴파일된 timezone 정보화일이 TZ 환경변수에 설정될 수 있다.
   우리나라의 timezone은 ROK이다.


      # echo $TZ
      ROK


   asia라는 화일에 ROK에 대한 timezone 정보가 들어 있다.


      -----------------------------------------------------------------------
      # Rule NAME FROM       TO    TYPE    IN      ON          AT         SAVE       LETTER/S
      Rule     ROK   1960   only   -      May     15          0:00   1:00       D
      Rule     ROK   1960   only   -      Sep     13       0:00      0          S
      Rule     ROK   1987   1988   -      Jan     Sun<=14 0:00           1:00    D
      Rule     ROK   1987   1988   -      Oct     Sun<=14 0:00       0           S


      # Zone    NAME          GMTOFF     RULES    FORMAT       [UNTIL]
      Zone      Asia/Seoul 8:27:52 -        LMT        1890
                            8:30   -        KST        1904 Dec
                            9:00   -        KST        1928
                            8:30   -        KST        1932
                            9:00   -        KST        1954 Mar 21
                            8:00   ROK      K%sT        1961 Aug 10
                            8:30   -        KST        1968 Oct
                            9:00   ROK      K%sT
      -----------------------------------------------------------------------


   설명:
      Rule     ROK   1960   only       -        May     15       0:00      1:00       D
      Rule     ROK   1960   only       -        Sep     13       0:00      0          S
      Rule     ROK   1987   1988       -        May     Sun<=14 0:00           1:00       D
      Rule     ROK   1987   1988       -        Oct     Sun<=14 0:00       0              S


   위의 Rule을 보면 1960에 5월 15일 부터 9월 13일까지 summer time을 적용했었고
   1987에서 1988년 2년간 summer time을 적용하였다는 내용을 알 수 있다.
   알 수 있다.      만일 계속 summer time을 사용하려면, TO 필드에 max라고 하면된다.


      Rule     ROK   1987   1988       -        Jan     Sun<=14 0:00           1:00       D
      Rule     ROK   1987   1988       -        Oct     Sun<=14 0:00           0          S


   각 필드에 대한 자세한 내용은 zic 메뉴얼 페이지를 참조하십시오.


      # man zic


3. timezone에서 summer time설정하는 법.


      -----------------------------------------------------------------------
      # Rule NAME FROM      TO         TYPE       IN     ON         AT             SAVE       LETTER/S
      Rule     ROK   1960   only       -        May     15       0:00      1:00       D
      Rule     ROK   1960   only       -        Sep     13       0:00      0          S
      Rule     ROK   1987   max            -     May     Sun<=14 0:00          1:00       D
      Rule     ROK   1987   max            -     Oct    Sun<=14 0:00           0          S


      # Zone    NAME           GMTOFF          RULES    FORMAT      [UNTIL]
      Zone      Seoul   8:27:52 -               LMT      1890
                        8:30       -            KST      1904 Dec
                        9:00       -            KST      1928
                        8:30       -            KST      1932
                        9:00       -            KST      1954 Mar 21
                        8:00       ROK           K%sT        1961 Aug 10
                        8:30       -            KST      1968 Oct
                        9:00       ROK           K%sT
      -----------------------------------------------------------------------


   위와 같이 zoneinfo 내용을 test라는 화일로 만들어 다음의 명령어를 수행한다.
   변경된 timezone 화일이 의미하는 것은 1987년부터 매년 5월 14일 내의 최후
   일요일에 summer time을 적용하고 10월 14일 내의 최후의 일요일에 해제한다.
        # zic test


    이명령어가 실행되면 /usr/share/lib/zoneinfo 디렉토리 밑에 Seoul이라는
    컴파일된 timezone 정보화일이 생성된다.


    환경변수 TZ에 Seoul이라는 값을 설정하여, summer time 기간중에
    date 명령어를 수행하면 1 시간 빨리 설정되어 있음을 알수 있다.


        # date
        1998년 7월      6일 월요일 오후 03시 19분 39초


        # env TZ=Seoul date
        1998년 7월      6일 월요일 오후 04시 19분 39초


4. 참고 문헌


    시스템에 설치된 메뉴얼 페이지를 참고한다.


        zic(1M), zdump(1M), ctime(3C)


        /usr/share/lib/zoneinfo/* (timezone database)




E3500system의 booting이 안될때...
E3500 system에 Solaris 2.6 3/98또는 5/98 version의 Enduser cluster type
으로 install하였을 경우 booting을 하지 못하며, 다음과 비슷한 error를
보게 될것이다.


cannot load drivers for
sbus@2,0/sunw,socal@c,10000/ss@0,0/ssd@w21000020370eaf1c,0:a


위와 같은 error는 다음의 package가 install되어 있지 않기 때문이므로, OS
install시 반드시 선택하여 install하여야 한다.


        SUNWhea            SunOS Header Files
        SUNWssadv          SPARCstorage Array Drivers
PCI bases system 에서의 Parallel Printer port
 1. PCI based system들(현재 Ultra 30, 450, 5, 10, 60)의 Parallel port는
  이전의 기계의 /dev/bpp0 대신에 /dev/ecpp0를 사용한다.


2. 또한 ecpp driver patch를 인스톨 하여야 한다.
  (104605 for 2.5.1 and 105741 for 2.6)




Root Password 복구
root password를 잊어버려 root로 login이 않되는 경우에는 OS CD를 사용하여
아래와 같이 복구를 할 수 있다. 만약 OS CD를 갖고있지 않다면 복구할 방법이
없다.


1. 시스템을 down 시키고 OS CD를 CD-ROM drive에 넣는다.


  root로 login을 할수 없으므로 시스템을 재부팅 시키기 위해서는 keyboard에서
  "stop" key와 "a" key를 동시에 눌러서 시스템을 PROM mode(ok prompt 상태)
  로 전환한다


2. 아래와 같이 CDROM 을 이용하여 single-user mode로 부팅한다


  ok   boot cdrom -sw


3. Bourne shell prompt(#)가 나타나면, /로 사용하던 disk device를 /mnt로 mount
  한다. /로 사용하던 disk device가 /dev/dsk/c0t0d0s0인 경우 아래와 같이 한다.


  # mount -F ufs -o rw /dev/rdsk/c0t0d0s0 /mnt


4. 위와 같이 하면 기존에 /etc directory에 있던 shadow 화일이 /mnt/etc/shadow로
  존재하게 되며,        이 화일을 vi로 열어서 root에 정의되어 있는 password부분을
  지운다.


       # vi /mnt/etc/shadow
       root:vBrrOh8AIqYV6:6445::::::
            ^^^^^^^^^^^^^ 이 부분을 지운다


       변경후
       # cat /etc/mnt/shadow
       root::6445::::::


5. 위와 같이 한후 시스템을 재부팅 하면               root로 password 없이 login가능하다.




cdrom mount 하기
cdrom을 driver에 삽입하면 Volume Management Daemon인 "vold" process에 의해
cdrom이 자동 mount 되지만, vold process가 운영 중이 아니거나 다른 이유로
인하여 cdrom이 자동 mount 되지 않으면 아래의 명령으로 mount 한다.


1. vold daemon이 운영중인 경우


  "volcheck"   명령을 실행하여 vold daemon이 cdrom을 mount 하도록 한 후 df 명령
  으로 cdrom이 mount 되었는지 확인한다.


       % /bin/volcheck
       % df -k


2. volcheck 명령으로 mount가 되지 않는경우


  아래와 같이 "mount" 명령을 사용한다.


       # /etc/mount -F hsfs -o ro /dev/dsk/c0t6d0s0 /cdrom


  CD Driver는 기본적으로 /dev/dsk/c0t6d0s0 device를 사용한다.




한글 사용과 관련된 환경 설정
한글 사용을 위해 지정하여야할 환경변수와 관련 화일들은 아래와 같다.


  1. /etc/default/init : 시스템에서 사용되는 Language를 아래와 같이 지정한다


       LANG=ko ;한글과 영문을 사용하는 경우
       LANG=C ;영문만 사용하는 경우


  2. .cshrc, .profile : 각 user 별로 사용할 Language를 정의 하고, terminal 환경
                          을 지정한다.
         - csh을 사용하는 경우 .cshrc 화일에 아래와 같이 정의


           setenv LANG ko
           stty cs8 -istrip -parenb


         - sh 또는 ksh을 사용하는 경우 .profile 화일에 아래와 같이 정의


           LANG=ko
           export
           stty cs8 -istrip -parenb


   3. 환경 설정 확인


      % env | grep LANG
      LANG=ko


      % /bin/stty -a|grep cs8
      -parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts
                        ^^^^^


      % /bin/stty -a|grep istrip
      -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc
                                               ^^^^^^^


Power Manager
Solaris 2.6에서는 "powerd" daemon이 실행되어 일정 시간동안 작업을 하지 않으면 시스템이 자동 down되
도록 지정할 수 있다. 이 Power Manager는 OS를 설치하는 과정에서 enable/disable 할수 있으며, OS를 설
치 한 후에도 아래의 관련 파일들을 이용하여 구동할 수 있다.
1. Starting Script


   powerd daemon은 시스템이 booting되는 과정에서 /etc/rc2.d/S85power 스크립트가
   실행되면서 pmconfig 명령에 의해 구동된다.


   Power Manager 기능을 사용하지 않으려면 /etc/rc2.d/S85power 화일을 다른 이름
   의 화일로 move 시킨다.


2. Configuration File


   Power Management를 위한 configuration 화일은 /etc/power.conf 이며 pmconfig
  명령에 의해 참조 된다.


  System down에 관한 사항은 아래와 같이 지정할 수 있다.


  #Auto-Shutdown                    Idle(min)           Start/Finish(hh:mm)   Behavior
  autoshutdown                     30                    9:00 9:00            shutdown




  위와 같이 지정하면 30분 동안 시스템이 사용되지 않으면 시스템이 down 된다.


  powerd daemon이 구동중이라 하더라도 시스템이 down되지 않게 power.conf 화일에
  지정하려면 아래와 같이 4번째 항목에 "noshutdown" 으로 지정한다.


  #Auto-Shutdown                    Idle(min)           Start/Finish(hh:mm)   Behavior
  autoshutdown                     30                    9:00 9:00            noshutdown




floppy diskette을 UNIX format하여 mount 하는 방법
1. floppy diskette을 drive에 넣고 아래와 같이 fdformat 명령을 실행한다.


  # fdformat -U -b "label-name"
  Formatting 1.44 MB in /vol/dev/rdiskette0/no_name
  Press return to start formatting floppy.
  ..................................................................
  #


  위의 명령중 각 option 의 내용은 아래와 같다.


        -U : floppy diskette이 이미 mount 된 경우라도 umount하여 format한다.
        -b : diskette의 label 이름을 지정하기 위한 option이다
        "label-name" : diskette에 지정할 label 이름이다.
                            이 이름은 floopy diskette 을 mount하였을때 생기는 실제
                            mount point(/floppy/"label-name")의 이름이 된다.


2. format 이 정상적으로 끝나면 "newfs" 명령을 실행하여 filesystem을 만든다.


  # newfs /dev/rdiskette0


  만약 위의 명령을 실행했을때 아래와 같이 error message가 발생하면 volume manager
  daemon인 "vold" 를 종료시킨 후 다시 newfs 명령을 실행한다.


             # newfs /dev/rdiskette0
             /dev/rdiskette0: Device busy


             # ps -ef|grep vold
               root       267     1   0 11월 28 ?              0:02 /usr/sbin/vold
                      ^^^^^
                      vold process id
             # kill 267
             # newfs /dev/rdiskette0
             newfs: construct a new file system /dev/rdiskette0: (y/n)?


             위와 같이 new file system을 만들것인지 물어보면 "y"와 "retunrn" key를 친다.


3. newfs가 정상적으로 끝나면 "vold" process가 실행중인지 확인한 후, 실행중이
  아니면 vold를 실행한다.


  # ps -ef|grep vold
      root     8321         1   1 17:26:20 ?            0:00 /usr/sbin/vold


  위와 같이 결과가 나오지 않으면 아래와 같이 명령을 실행한다.


  # /etc/init.d/volmgt start
  volume management starting.


4. "volcheck" 명령을 실행하여 floppy diskette을 mount한후 "df" 명령으로 mount가
  되었는지 확인한다.


  # volcheck
  # df -k
  파일시스템                          K바이트          사용        가용     용량         설치지점
 /dev/dsk/c0t0d0s0               1813958    696114 1063426           40%      /
 /proc                                  0          0      0      0%        /proc
 fd                                     0          0      0      0%        /dev/fd
 /vol/dev/diskette0/"label-name"
                                 1263          9       1128     1%      /floppy/"label-name"


 위의 결과중 "label-name"은 diskette을 format 할때(fdformat) 지정한 label
 name 이다.




swapfile 추가하기
1. "df -k" 명령을 사용하여 추가하고 싶은 swap file 크기 만큼의 free space를 가지고
  있는 file system이 있는지 확인한다.


      % df -k
      파일시스템                   K바이트           사용         가용           용량      설치지점
      /dev/dsk/c0t0d0s0        962582       779074       87258            90%        /
      /proc                             0         0          0        0%        /proc
      fd                                0         0          0        0%        /dev/fd
      /dev/dsk/c0t0d0s3        865774       731198       48006            94%        /opt
      swap                         67664         8408    59256         13%           /tmp
      /dev/dsk/c0t1d0s3       8316189       933423 6551156                13%        /doc
      /dev/dsk/c0t2d0s3       8316189 2529292 4955287                     34%        /export


2. 위의 결과에 따라 /export file system에 50M의 swap file을 추가 한다면,
  root 로 login하여 아래와 같이 한다.


      # cd /export
      # /usr/sbin/mkfile 50m new-swap-file
                                   ^^^^^^^^^^^^^^ -> 새로운 swap file의 이름
      # /etc/swap -a


3. 위와 같이 한후 "swap -l" 명령으로 새로 만든 swap file이 추가되었는지 확인한다.


      # swap -l
      swapfile               dev       swaplo blocks     free
      /dev/dsk/c0t0d0s1      32,1           16 410384 371216
      /export/new-swap-file        -        16 102384 102384


4. 새로 추가한 swap file이 시스템 rebooting 후에도 사용되게 하려면 아래와 같은
  내용을 /etc/vfstab에 추가한다.


      # vi /etc/vfstab


           /export/new-swap-file        -    -        swap       -     no        -
Solaris 2.x에서 kernel을 새로 만드는 방법
Solaris 2.x의 kernel은 1.x와는 달리 loadable module로 되어 있기 때문에 새로운 device가 추가 또는 제거
되어도 kernel을 새로 compile하지 않고, 단지 시스템을 reconfigure 하도록 rebooting만 하면 된다.


시스템을 reconfigure 하여 booting하는 방법은 아래와 같다.
1. "/" 다렉토리에 "reconfigure" 화일을 만든후 시스템을 reboot 한다.


        # touch /reconfigure
        # reboot


        또는


        # touch /reconfigure
        # init 0


        ok boot


2. 시스템을 down 시키고 나서 boot 명령에 "-r" 옵션을 주고 부팅한다.


        # init 0


        ok boot -r


3. 아래와 같은 옵션을 주고 "reboot" 명령을 사용하여 시스템을 rebooting한다.


        # reboot -- -r




Solaris 1.x에서 kernel을 새로 만드는 방법
Solaris 1.x에는 /usr/kvm/sys/`/usr/bin/arch -k`/conf/의 kernel
configuration 화일이 있으며 새로운 kernel을 만들기 위해서는                    이 화일의 내용을
수정한뒤 새로운 kernel(vmunix)을 컴파일해야 한다.


예를들어 `/usr/bin/arch -k` 명령을 수행한 결과가 "sun4m"이고 현재 사용하는
kernel 이름이 "GENERIC-KOR" 라면 /sys/sun4m/conf/GENERIC-KOR 화일을 수정하면
된다. 그러나 이 화일을 직접 수정하지 말고 다른 이름의 화일로 복사한뒤, 이
새로운 화일을 수정하는 것이 좋다.


현재 사용하고 있는 kernel 이름은 /etc/motd 화일에서 확인할 수 있다.
       % cat /etc/motd
       Sun Microsystems Inc.    SunOS 4.1.3   GENERIC-KOR August 1997


위의 결과에서 보면 OS version 다음에 보여지는 GENERIC-KOR가 현재 사용하는
kernel의 이름이다.


kernel을 다시 만드는 작업은 아래와 같이 하며 반드시 root로 login하여야 한다.


       # cd /usr/kvm/sys/`/usr/bin/arch -k`/conf/
       # cp GENERIC-KOR GENERIC-KOR-TAPE




Sendmail(version 8.8.8+) 구성하기
1. Solaris 2.6까지 OS에 포함되어 있는 sendmail의 version은 8.6으로 현재 Internet
  상 에서 많이 사용되고 있는 8.8.x version에 비하여 그 기능과                  보안에 있어 많은
  문제점을 가지고 있다.
  이를 보완하기 위해 OS version이 Solaris 2.x인 경우 recommand patch를 설치하면
  새로운 버젼의 sendmail(8.8.8+SUN)이 설치되며, Solaris 7에는 기본적으로 sendmail
  8.9.1 버젼이 설치되어 있다..
  이 새로운 버젼에서 제공되는 sendmail.cf 화일은 기존의 것과 많은 차이가 있으며
  메일을 발신/수신하기 위하여 아래와 같이 구성한다.


2. /etc/hosts 화일


  /etc/hosts 화일에 hostname을 정의 할때 반드시 아래와 같이 hostname.domainname
  도 alias name으로 같이 정의를 한다.


       # cat /etc/hosts


       210.123.99.21      cat   cat.sun.co.kr loghost
                                ^^^^^^^^^^^^^


3. /etc/mail/sendmail.cf 화일


  sendmail.cf 화일에는 외부로 송신되는 메일이 mailhost."domain-name"를 거쳐
  보내 지도록 DS 변수에 아래와 같이 정의되어 있다.


       # "Smart" relay host (may be null)
       DSmailhost.$m


  만약 외부로 보내지는 메일이 특정 메일 서버를 거쳐 보내져야 한다면 위의 DS 부
  분을 실제 메일 서버로 지정한다.


       # "Smart" relay host (may be null)
       DSmailserver-name.domain-name


  그러나 외부로 보내지는 메일이 DNS에 설정된 MX record에 의해 바로 전송되도록
  지정하고 싶으면 위에 정의된 DS 부분을 주석처리 한다.


       # "Smart" relay host (may be null)
       #DSmailhost.$m


4. /etc/mail/sendmail.cw 화일


  이 화일을 만들어 그 안에 시스템에서 받을 메일 주소(hostname, alias name)를 넣는다.
  만약 username@domainname의 형태로 보내지는 메일도 수신하려면 아래와 같이 정의한다.


       # vi /etc/mail/sendmail.cw


       cat
       cat.sun.co.kr
       sun.co.kr


5. Mail Relay 하기


  Sendmail 8.8.8+ 에서는 외부(다른 시스템)로 부터          Relay 되는 메일을 차단하도록
  하는 기능이 있다. 이 기능을 사용하려면, 아래의 Rule을 /etc/mail/sendmail.cf
  화일에서 Rule Set이 정의되는 처음 부분에 추가한다. 아래의 내용중 빈칸은
  "space-bar"대신 반드시 "tab"을 사용하여야 한다.


       LOCAL_CONFIG
       FR-o /etc/sendmail.cR


       LOCAL_RULESETS
       Scheck_rcpt
       # anything terminating locally is ok
       R< $+ @ $=w >                $@ OK
     R< $+ @ $=R >               $@ OK


     # anything originating locally is ok
     R$*                         $: $(dequote "" $&{client_name} $)
     R$=w                        $@ OK
     R$=R                        $@ OK
     R$@                         $@ OK


     # anything else is bogus
     R$*                         $#error $: "550 Relaying Denied"




 그러나 같은 도메인내의 client(PC)들로 부터 보내지는 메일을 relay 하도록 하고 싶은
 경우에는 /etc/sendmail.cR화일을 만들어 아래와 같이 domainname, network address 또는
 client의 IP address를 등록한다.
 IP address를 지정시는           반드시 "[" 와 "]"안에 IP address를 적는다.
    # vi /etc/sendmail.cR
    sun.co.kr
    210.123.99
    [201.123.345.10]
    [203.234.123.1]
    위와 같이 정의한 후 sendmail daemon 을 re-start 시킨다.
    sun.co.kr 처럼 도메인을 지정할 경우에, relay하고 싶은 호스트명이 DNS에 등록되어
    있어야 한다. 예를 들어,
    tiger.sun.co.kr 에서 들어 오는 메일을 relay하려면, tiger.sun.co.kr이 DNS에
    등록되어 있어야 한다.




6. 위에 기술된 내용 이외에 특별한 요구 사항이 있을 때에는                          sendmail.cf화일을 직접
 수정하지 말고 /usr/lib/mail/README 화일의 내용을 참조하여 직접 m4 명령을 사용하여
 sendmail.cf화일을 compile하여 사용한다.


 예) 메일을 보낼때 header의 From: 부분이 hostname은 보이지 않고 From:ername@domainname
    의 형태로 되게 하고 싶은경우.
    # cd /usr/lib/mail/cf
    # cp main-v7sun.mc my.mc
                            ^^^^^^
                             임의의 화일로
    # vi my.mc
      my.mc 화일에 아래의 두 라인을 추가한다.


      MASQUERADE_AS($m)dnl
      FEATURE(masquerade_envelope)dnl


      # /usr/ccs/bin/m4 ../m4/cf.m4 my.mc > my.cf
      # cp my.cf /etc/mail/sendmail.cf


      sendmail daemon을 restart 한다.


      위와 같이하여 sendmail.cf 화일을 만들면 일반 사용자들이 외부 도메인에 있는
      사용자에게 메을을 보내면 From 부분이 From: username@domain과 같이 나타난다.
      그러나 root에서 메일을 보낼경우에는 기존처럼 From: username@hostname.domainanme
      의 형태로 보여진다.


      만약 root에서 메일을 보낼때도 hostname이 보여지지 않게 하려면 sendmail.cf
      화일에서 "CE root" 라고 정의된 부분을 없앤다.


7. Sendmail Daemon 살리기


  # /usr/lib/sendmail -bd -q1h


    -bd : daemon이라는 것을 명시
    -q1h : Queue interval 지정
           mail 전송시 error가 나면 /usr/spool/mqueue 디렉토리에 쌓이게 되는데
           여기에 쌓인 메일을 재 전송하는 주기를 정하는 것으로 1시간이면 "q1h",
           30분이면 "q30m" 이라고 지정하면 된다.


8. 3. 메일 전송 테스트


  -메일에는 /bin/mail과 /bin/mailx의 두가지 버젼이 있는데 /bin/mailx가
   기능상 사용하기 편하게 되어있으므로 이것을 사용하는 것이 좋다.


  -테스트


       % /bin/mailx -v 상대방전자메일주소


       위와같이 하면 메일이 전송되는 과정이 보여지는데 이 경우 제일 마지막에
       "sent"라고 나오면 정상적으로 배달이 된것이다.


       예) hsbyun이라는 사용자가 pink.sun.co.kr 이라는 시스템에서
           root@kum.kaist.ac.kr로 메일을 보내는 경우


           % /bin/mailx -v root@kum.kaist.ac.kr
           Subject: test
           test mail
           .
           EOT
           % root@kum.kaist.ac.kr... Connecting to
           kum.kaist.ac.kr via ether...
           Trying 128.134.1.1...   connected.
           220 kum.kaist.ac.kr Sendmail 4.1/KUM-0.1 ready at Fri, 2 Apr 93 14:2
5:38 KST
           >>> HELO pink.sun.co.kr
           250 kum.kaist.ac.kr Hello pink.sun.co.kr pleased to meet you
           >>> MAIL From:
           250 ... Sender ok
           >>> RCPT To:
           250 ... Recipient ok
           >>> DATA
           354 Enter mail, end with "." on a line by itself
           >>> .
           250 Mail accepted
           >>> QUIT
           221 kum.kaist.ac.kr delivering mail
           root@kum.kaist.ac.kr... Sent




Sendmail(version SMI-8.6) 구성하기
SunOS의 전자메일은 sendmail에 의해서 운영되며 sendmail은 메일의 라우팅과 forwarding
그리고 aliasing 등을 지정하여 전자메일이                 원활히 전달 되도록 한다. 이 글에서는
Solaris 상에 설치되어 있는 Sendmail의 설치와 운영에 관해서 알아본다.




1. 설치전 확인사항
  -hostname이 등록되어 있는지 확인


      # hostname
      #


   위와 같이 아무것도 나오지 않으면 /etc/hostname.{ethernet-interface} 화일에
   hostname을 등록한다.
   "ethernet-interface"가 "le0"인 경우에 /etc/hostname.le0 화일을 확인한다.


   예) # cat /etc/hostsname.le0
      pink
      #


  -/etc/hosts 화일에 hostname이 아래와 같은 형태로 등록되어야 한다.


      IP-address         hostname        alias-name


   예) 147.6.4.65          pink        mail pink.sun.co.kr


2. SunOs 상에 있는 Sendmail의 설치


 ** /etc/mail/main.cf 화일을 /etc/mail/sendmail.cf 화일로 복사 한다.


      # cp /etc/mail/main.cf /etc/mail/sendmail.cf


 2.1 /etc/mail/sendmail.cf 화일 수정


  -사용 변수


      Dw, Cw : hostname을 정의 하는 부분
                hostname을 두개이상 사용하고 이 이름 모두로 메일을 받고
                싶은경우 Cw에 정의한다.


             예) Dwpink
                Cwpink mail


      Dm, Cm : domain name을 정의 하는 부분
                domain name을 두개이상 사용하고 이 이름모두로 메일을 받고
                싶은경우 Cm에 정의한다.
        예) Dmsun.co.kr
            Cmsun.co.kr sun.com


    DM : 사용하는 Mailer를 지정하는 부분으로 보통 같은 도메인에서 메일을
        보낼경우에는 "ether"를 사용하고 외부 도메인에도 메일을 보낼 경우
        에는 "ddn" 을 사용한다


        예) DMether
            DMddn


    DR : default mail relay host를 지정하는 부분
        가입한    ISP(Internet Service Provider)에 문의 하여 mail relay
        host를 확인한다.


        예)DRmail.kornet.nm.kr


    Dj : hostname과 domainname을 지정
        예) Dj$w.$m


- /etc/mail/sendmail.cf 화일 수정 예




    ############################################################
    #
    #      Sendmail configuration file for "MAIN MACHINES"
    #
    #      You should install this file as /etc/sendmail.cf
    #      if your machine is the main (or only) mail-relaying
    #      machine in your domain.     Then edit the file to
    #      customize it for your network configuration.
    #
    #      See the manual "System and Network Administration for the Sun
    #      Workstation". Look at "Setting Up The Mail Routing System" in
    #      the chapter on Communications.       The Sendmail reference in the
    #      back of the manual is also useful.
    #
    #      @(#)main.mc 1.17 90/01/04 SMI
    #
   ###       local info


   # delete the following if you have no sendmailvars table
   Lmmaildomain


   # my official hostname
   Dwpink
   Cwpink


   Dmsun.co.kr
   Cmsun.co.kr


   # You have two choices here.    If you want the gateway machine to identify
   # itself as the DOMAIN, use this line:
   #Dj$m
   # If you want the gateway machine to appear to be INSIDE the domain, use:
   Dj$w.$m
   # if you are using sendmail.mx (or have a fully-qualified hostname), use:
   #Dj$w


   # major relay mailer
   DMddn


   # major relay host
   DRmail.kornet.nm.kr
   CRmail.kornet.nm.kr


   #################################################




- mail을 보낼때 DR에 지정된 mail relay host를 거치지 않고 DNS에 정의된 mail
 exchanger(MX)를 이용해 direct로 메일을 보내고 싶은 경우에는 아래와 같이
 sendmail.cf화일의         약 400 ~ 405번 라인의 내용을 변경한다.


   변경전


   # Replace following with above to only forward "known" top-level domains
   R$*$*              $#$M     $@$R $:$1$4      user@any.domain
     # if you are on the DDN, then comment-out both of the the lines above
     # and use the following instead:
     #R$*$*            $#ddn $@ $2.$3 $:$1$4      user@any.domain


     변경후


     # Replace following with above to only forward "known" top-level domains
     #R$*$*             $#$M       $@$R $:$1$4     user@any.domain


     # if you are on the DDN, then comment-out both of the the lines above
     # and use the following instead:
     R$*$*           $#ddn $@ $2.$3 $:$1$4       user@any.domain


 2.2 Sendmail Daemon 살리기


     #/usr/lib/sendmail -bd -q1h


              -bd : daemon이라는 것을 명시
              -q1h : Queue interval 지정
                     mail 전송시 error가 나면 /usr/spool/mqueue 디렉토리에
                     쌓이게 되는데 여기에 쌓인 메일을 재 전송하는 주기를
                     정하는 것으로 1시간이면 "q1h", 30분이면 "q30m"
                     이라고 지정하면 된다.


3. 메일 전송 테스트


 -메일에는 /bin/mail과 /bin/mailx의 두가지 버젼이 있는데 /bin/mailx가
  기능상 사용하기 편하게 되어있으므로 이것을 사용하는 것이 좋다.


 -테스트


     # /bin/mailx -v 상대방전자메일주소


     위와같이 하면 메일이 전송되는 과정이 보여지는데 이 경우 제일 마지막에
     "sent"라고 나오면 정상적으로 배달이 된것이다.


     예) hsbyun이라는 사용자가 pink.sun.co.kr 이라는 시스템에서
         root@kum.kaist.ac.kr로 메일을 보내는 경우
           # /bin/mailx -v root@kum.kaist.ac.kr
           Subject: test
           test mail
           .
           EOT
           # root@kum.kaist.ac.kr... Connecting to
           kum.kaist.ac.kr via ether...
           Trying 128.134.1.1...   connected.
           220 kum.kaist.ac.kr Sendmail 4.1/KUM-0.1 ready at Fri, 2 Apr 93 14:25:38 KST
           >>> HELO pink.sun.co.kr
           250 kum.kaist.ac.kr Hello pink.sun.co.kr pleased to meet you
           >>> MAIL From:
           250 ... Sender ok
           >>> RCPT To:
           250 ... Recipient ok
           >>> DATA
           354 Enter mail, end with "." on a line by itself
           >>> .
           250 Mail accepted
           >>> QUIT
           221 kum.kaist.ac.kr delivering mail
           root@kum.kaist.ac.kr... Sent




Root(/) 화일 시스템 복구
root(/) 화일 시스템이 손상되어 시스템 부팅이 않되는 경우 backup 받아 놓은
data를 사용하여 아래와 같이 복구 할수 있다.


1. 시스템을 down 시키고 OS CD를 CD-ROM drive에 넣는다.


2. 아래와 같이 CDROM 을 이용하여 single-user mode로 부팅한다


  ok   boot cdrom -sw


3. Bourne shell prompt(#)가 나타나면, /로 사용하던 disk device에 새로운 화일
  시스템을 만든다. /로 사용하던 disk device가 /dev/dsk/c0t3d0s0인 경우 아래와
  같이 한다.
   # newfs /dev/rdsk/c0t3d0s0


4. 새로운 root file system을 fsck명령을 사용하여 점검한다.


   # fsck /dev/rdsk/c0t3d0s0


5. root file system을   /a로 mount한다.


   # mount /dev/dsk/c0t3d0s0 /a


6. root 화일 시스템을 backup 받아놓은 tape을 tape drive에 넣고 아래의 명령을
   실행하여 restore한다.


   # cd /a


   # ufsrestore rvf /dev/rmt/0


7. restore가 끝나면 "restore symbol table"을 지우고 새로만든 root partition을
   unmount 한다.


   # rm restoresymtable


   # cd /


   # umount /a


8. fsck 명령을 사용하여 새 root partition을 다시한번 점검한다.


   # fsck /dev/rdsk/c0t3d0s0


9.아래의 명령을 사용하여 bootblock을 설치한다.


  # cd /usr/platform/`uname -i`/lib/fs/ufs (Solaris 2.5 이상 버젼인 경우)


  # cd /usr/lib/fs/ufs (Solaris 2.4 이전 버젼인 경우)


  # installboot bootblk /dev/rdsk/c0t3d0s0


10. 시스템을 재 부팅한다.
   # reboot




Disk quota 지정하는 방법
예) /data3 file system에대하여 각 사용자에게 quota를 할당하고 싶은 경우


1. /etc/vfstab 수정.


        /dev/dsk/c0t1d0s6         /dev/rdsk/c0t1d0s6        /data3   ufs   1   yes rq


   /etc/vfstab에 위와 같이 마지막 항목을 "rq"로 지정한다.




2. quota를 사용하고 싶은 화일시스템의 mouting point에 가서 다음의 명령어를 실행한다.


        # cd /data3
        # touch quotas
        # chmod 600 quotas


3. 각 사용자별로 quota량을 지정한다.


        # edquota user-id
        fs /data3 blocks (soft = 100, hard = 100) inodes (soft = 100, hard = 110)


  block은 1KB단위.
  soft의 한계가 넘으면, 경고메세지가 출력되고, hard한계를 넘으면 file creat가
  수행이 되지 않음.


  위와 같이 quota를 지정한 경우 /data3 화일 시스템에 사용자의 disk 사용량이 100KB를
  넘어서면 경고 메세지가 출력되고 110KB에 달하면 더이상 /data3 화일 시스템에 화일을
만들수 없으며, owner가 user-id로 되어있는 화일의 갯수도 100개가 넘어서면 경고 메세지가 출력
되고, 또한     111개 이상의 화일은 만들 수 없다.


4.한 사용자의 quota를 다른 사용자에게 copy하는 경우


   예)   사용자 aa와 같은 quota를 사용자 bb에게 할당하려면
       # edquota -p aa bb


5. 현재 사용자가 사용하고 있는 quota 양을 알아보려면


       # quota -v user-id


6. 시스템을 재 부팅시하지 않고               quota enable이 되게 하려면 아래와 같이 실행 한다.


       # sh /etc/init.d/ufs_quota start


  disable하려면


       # sh /etc/init.d/ufs_quota stop


7. man page 참조


       quota, edquota, checkquota, repquota, quotaon, quotaoff




Solaris 2.6에서 원격 프린터 지정하기
Solaris 2.6에서는 admintool을 이용하여 remote printer를 지정하려 하면 error가
나며, 지정할 수 없다(admintool bug임). 이를 대신하여 명령어로 remote printer를
지정하려면 아래와 같이 한다.


   # lpsystem -t bsd printer_server_name
   # lpadmin -p printer_name -s printer_server_name -I any
   # lpadmin -d printer_name     <-- default printer로 지정할때.


printer_server_name 이 morning이고,
    printer_name이 kitten 이며 이를 system default printer로 지정하고 싶으면,


       # lpsystem -t bsd morning
       # lpadmin -p kitten -s morning -I any
       # lpadmin -d kitten


위와 같이 한후 admintool에서 지정한 printer가 등록되어 있는지 확인한다.
각 사용자가 속한 group의 최대수 증가시키기
1. 한 사용자가 속할수 있는 group의 수는 OS 상에서 아래와 같이 /usr/include/sys/param.h
   화일에 정의 되어 있는 것처럼 ngroup_max 변수에 의해 16으로 제한된다.


        /*
        * These define the maximum and minimum allowable values of the
        * configurable parameter NGROUPS_MAX.
        */
        #define NGROUPS_UMIN        0
        #define NGROUPS_UMAX        32
        /*
        * NGROUPS_MAX_DEFAULT: *MUST* match NGROUPS_MAX value in limits.h.
        * Remember that the NFS protocol must rev. before this can be increased
        */
        #define NGROUPS_MAX_DEFAULT           16


2. 이를 늘려주기 위해서는 아래와 같이 /etc/system화일에 지정한후 시스템을 rebooting한다.




        set ngroups_max_default = 20


   /etc/system 화일에 지정할수 있는 최대 값은 32로 제한되어있다.


3. Important note


  이 변수의 값은 되도록이면 변경하지 않을 것을 권유한다.
  이 변수의 값이 변경되면 NFS를 사용함에 있어 영향을 미칠수 있다.




cron job 정의하기
1. cron 명령은 지정된 날짜와 시간에 일정 작업을 주기적으로 수행하기 위해 사용되
   며 각 사용자별로 /var/spool/cron/crontabs 디렉토리에 사용자 ID와 같은 이름의
   crontab 화일을 만들어 cron job을 지정할 수 있다.


   cron 명령은 시스템이 부팅되면서 /etc/rc2.d/S75cron 스크립트에 의해서 daemon
   형태로 수행된다.


2. 각 사용자 별로 crontab 화일을 만드는 방법은 아래와 같이 "crontab -e" 명령을
   실행하면 된다.
      % crontab -e


  위와 같이 명령을 실행하면 "vi"            editor mode로 들어가 crontab 화일을 수정할수
  있게 되는데,      만약 "vi" mode로 들어가지 않으면 "EDITOR" 환경변수를 vi로 변경
  후 crontab 명령을 다시 수행한다.


      2.1 csh을 사용하는 경우


         % setenv EDITOR vi
         % crontab -e


      2.2 sh이나 ksh을 사용하는 경우


         $ EDITOR=vi
         $ export EDITOR
         $ crontab -e


3. crontab 화일의 내용을 정의 하는 format은 아래와 같다.


  분   시 일    월   요일     실행할 명령


      분 : 0-59
      시 : 0-23
      일 : 1-31
      월 : 1-12
      요일 : 0-6( 0: 일요일)


  예) 매주 일요일 오전 3:15에 /var 디렉토리에 있는 core 화일을 지우는 작업


      15 3 * * 0 find /var -name core 2>/dev/null |   xargs rm -f


      매월 1일 오후 6시에 시스템 down message 보내기


      0 18 1 * * wall "System Will be down"


4. /etc/cron.d/cron.allow 화일이나 /etc/cron.d/cron.deny 화일을 이용하여 시스템
  관리자는 각 사용자별로 crontab 화일에 대한 access 권한을 제한 할 수 있다.
  4.1 crontab을 access 할 수 있는 사용자


      - /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 안에 지정된 사용자


      - /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일
        안에 지정되지 않은 사용자


  4.2 crontab을 access 할 수 없는 사용자


      - /etc/cron.d/cron.allow 화일이 존재하는 경우, 그 화일 않에 지정되지 않은
        사용자


      - /etc/cron.d/cron.allow 화일이 없는 경우, /etc/cron.d/cron.deny 화일에
        지정된 사용자


      - /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일이 모두 없는 경우,
        root를 제외한 모든 사용자


   4.3 OS가 설치되면 기본적으로 /etc/cron.d/cron.deny이 생성되고 그 안에 아래의
       사용자들이 지정된다.


       daemon
       bin
       smtp
       nuucp
       listen
       nobody
       noaccess


       /etc/cron.d/cron.allow와 /etc/cron.d/cron.deny 화일에 사용자를 지정할 때
       는 위와 같이 한줄에 한명씩 사용자를 지정한다.


5. cron에 관련된 환경은 /etc/default/cron 화일에 정의 할 수 있다.


  % cat /etc/default/cron


  CRONLOG=YES
  PATH=/usr/bin:/usr/ucb:
가상터미널 갯수 늘리기(login 사용자수 늘리기)
[Q] 가상 터미널(ptys) 갯수 늘리기(login 사용자수 늘리기)


[A] /etc/system 화일에 아래의 내용을 추가하고 시스템을 rebooting 한다.


      # vi /etc/system


          set pt_cnt=128 ; 128개로 늘리고 싶을때.
          set npty=128


      시스템 재 부팅시 -r option을 사용하여 kernel이 reconfigure 되도록 한다.


     # reboot -- -r




새로운 디스크 설치하기
1. root로 로그인한 후 아래와 같은 명령어를 사용하여 시스템을 다운시킨다.


          # init 0
          또는
          # halt


2. 시스템의 전원을 끄고 새 디스크를 연결한다.


3. 시스템의 전원을 켜고 "stop" key와 "a" key를 동시에 늘러 ok 상태로 시스템을
     내린 후 아래의 명령을 사용하여 리부팅 한다.


          ok boot -r


4.   시스템이 부팅된후 root로 로그인 하여 아래와 같이 format 명령을 실행한다.


          # format


      format명령어를 실행하면 시스템에 연결된 하드디스크가 0번 부터 선택할수 있도
      록 나열되어 보여 진다. 새로연결한 디스크 번호를 선택한후 enter키를 친다.


5.   아래와 같이 format> prompt가 보여지면 "partition"이라고 친후 enter키를 친다.
        format> partition


6.   prompt가 partition>으로 변경되면, print를 실행하여 현재 디스크의 용량을 확인
     한다.
        partition> print


        Current partition table (unnamed):
        Total disk cylinders available: 2036 + 2 (reserved cylinders)


        Part       Tag      Flag       Cylinders       Size                Blocks
           0 unassigned      wm          0               0              (0/0/0)        0
           1 unassigned      wu         0               0           (0/0/0)           0
           2     backup      wm             0 - 2035   1002.09MB          (2036/0/0) 2052288
           3 unassigned      wm          0               0              (0/0/0)        0
           4 unassigned      wm          0               0              (0/0/0)        0
           5 unassigned      wm          0               0              (0/0/0)        0
           6 unassigned      wm          0               0              (0/0/0)        0
           7 unassigned      wm          0               0              (0/0/0)        0


     print결과에서 2번 part가 전체 디스크의 용량을 보여 주며, 위의 결과에서 보면
     전체 디스크 용량은 1002.09MB이고 2036개의 cylinder를 가지고 있음을 알수 있다


7. 사용할 slice(part)와 각 slice에 할당할 디스크 사이즈를 결정하고 아래와 같이
     선택을 한다.


     전체 디스크 용량을 2개의 slice로 나누고 4과 5번 slice를 사용하고자 할때;


        partition> 4
        Part       Tag      Flag       Cylinders       Size                Blocks
           4 unassigned      wm          0               0              (0/0/0)        0


        Enter partition id tag[unassigned]:
        Enter partition permission flags[wm]:
        Enter new starting cyl[0]: 0
        Enter partition size[0b, 0c, 0.00mb]: 1018c


        partition> print
        Current partition table (unnamed):
        Total disk cylinders available: 2036 + 2 (reserved cylinders)
               Part      Tag      Flag      Cylinders          Size               Blocks
        0 unassigned      wm         0                    0           (0/0/0)         0
        1 unassigned      wm         0                    0           (0/0/0)         0
        2      backup      wm           0 - 2035     1002.09MB          (2036/0/0) 2052288
        3 unassigned      wm         0                    0           (0/0/0)         0
        4 unassigned      wm         0 - 1017           501.04MB       (1018/0/0) 1026144
        5 unassigned      wm         0                    0           (0/0/0)         0
        6 unassigned      wm         0                    0           (0/0/0)          0
        7 unassigned      wm         0                    0           (0/0/0)         0


      partition> 5
      Part       Tag     Flag      Cylinders            Size             Blocks
        5 unassigned      wm         0                    0           (0/0/0)         0


      Enter partition id tag[unassigned]:
      Enter partition permission flags[wm]:
      Enter new starting cyl[0]: 1018
      Enter partition size[0b, 0c, 0.00mb]: 1018c


      partition> print
      Current partition table (unnamed):
      Total disk cylinders available: 2036 + 2 (reserved cylinders)


      Part       Tag     Flag      Cylinders            Size             Blocks
        0 unassigned      wm         0                    0           (0/0/0)         0
        1 unassigned      wm         0                    0           (0/0/0)         0
        2      backup      wm           0 - 2035     1002.09MB          (2036/0/0) 2052288
        3 unassigned      wm         0                    0           (0/0/0)         0
        4 unassigned      wm         0 - 1017           501.04MB       (1018/0/0) 1026144
        5 unassigned      wm         1018 - 2035        501.04MB        (1018/0/0) 1026144
        6 unassigned      wm         0                    0           (0/0/0)         0
        7 unassigned      wm         0                    0           (0/0/0)         0


8. partition 이 끝나면 label을 실행 한다.
      partition> label


      label 작업을 계속 할 것인지를 물어 보면 "yes" 라고 치고
      label 작업이 다 끝나면 "quit" 을 2번 쳐서 format 상태에서 빠져 나온다.
9.   아래와 같이 newfs를 실행하여 UNIX filesystem을 새 디스크의 각 slice에 만든다
         # newfs /dev/rdsk/c#t#d#s#


         "c#t#d#s#" 은 새 디스크의 각 slice에 해당하는 디바이스 이름을 쓴다.
         새 디스크가 coltroller 0에 연결되어 있고 targer 번호 0을 사용하고 있다면
         위의 format에의해 생성된 디스크 device는 c0t0d0s4와 c0t0d0s5가 된다.


10. newfs 작업이 끝나면 새 filesystem을 mount하여 사용한다.


         ** 명령어를 이용하여 filesystem을 mount할때 :


         # mount   -F ufs /dev/dsk/c#t#d#s#


         ** /etc/vfstab을 사용하여       mount 할때에는 아래와 같이 vfstab에 정의한 후,




          /dev/dsk/c#t#d#s# /dev/rdsk/c#t#d#s#     ufs 2 yes -


         아래의 명령을 사용한다.


         # mount


     시스템이 rebooting된 후에 자동 mount되게 하려면 /etc/vfstab에 정의해야 한다.


9. 위의 모든 작업이 끝나면 아래 명령어를 사용하여 새 filesystem이 mount되에
     있는지 확인한다.
         # df -k


Solaris 2.5.1에서의 installboot 명령어 사용법
1. OS CD로 부팅후 CD로 부터             bootblock을 disk로 복사하여 설치 하려면 아래와 같이
     installboot 명령을 실행 한다.


     ok boot cdrom -sw


     # installboot /cdrom/export/exec/sparc.Solaris_2.5.1 \
      /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c0txd0s0


     위의 명령중 마지막 항목인 /dev/rdsk/c0txd0s0는 bootblock을 설치할 디스크의 device이름을
   명기한다. 일반적으로 "/" 화일 시스템은 target 0인 디스크의 0번 slice에 만들기 때문에
   bootblock이 install 될 device는 /dev/rdsk/c0t0d0s0가 되지만 다른 target 번호를 사용하는
   디스크에 bootblock을 설치할 경우에는 이에 맞는 device이름을 적어준다.


2. backup 받았던 data를 restore한후 bootblock을 다시 설치 하려면 아래와 같은 명령을 사용한다.
  controller 1번에 연결된 target 0, slice 0의 disk에 설치 하려면 아래와 같이 installboot
  명령을 실행 한다.


   # installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0




Network
NFS(Network File System) 설정 방법 (SunOS 4.1.X)
SunOS 4.1.X에서 NFS 서버를 설정하려면 다음과 같은 절차를 실행한다.


1. /etc/exports 화일을 수정


   /etc/exports 화일을 만들고 한 라인에 한개씩 공유시켜줄 디렉토리를 지정한다.


       형식)
               directoty_name [option]


       예제)
               /usr     -ro
               /var/spool/mail -ro
               /home -rw


               옵션 설명            -ro: read only
                                -rw: read/write


2. exportfs 명령어를 사용하여 화일시스템을 공유시킨다.


       # exportfs -a


1.2 번 과정을 실행하면 NFS 서버 설정이 완료된다.


3. clinet에서 서버의 화일시스템을 마운트하려면 다음과 같이 실행한다.
 서버명이 tiger이고 공유된 디렉토리가 /usr이고, 이것을 /mnt에 마운트하려고
 할 경우에 다음과 같이 실행한다.


     # mount -o rw tiger:/usr /mnt


 영구적으로 시스템에 마운트되게 하려면, /etc/fstab에 다음과 같은 라인을
 추가하여 등록한다.


     형식)
             remotemach:/remotepart        /localpart   nfs   [options]   00


                     option에는 ro,rw,....


     예제)
             tiger:/usr /mnt nfs ro 0 0
             tiger:/home /localhome nfs rw 0 0


4. 참고문헌


     mount, fstab 메뉴얼 페이지


     예제)
             man mount




가상 IP 설정방법
솔라리스 2.5 이상에서는 가상 IP를 설정할 수 있다. 가상 IP란 하나의 물리적인
네트웍 카드에 두개 이상의 IP를 지정하는 것을 말한다. ifconfig 명령어를 사용하여
가상 IP를 등록할 수 있다.




만일 hme0 카드에 가상 IP를 지정하려면, 다음과 같은 두 가지 방법이 있다.


1. 영구적으로 시스템에 등록


  만일 hme0 카드에 가상 IP를 지정하려면, 먼저 /etc/hosts 화일에 설정하고자
  하는 IP와 호스트명을 추가한다.
      128.120.59.10     realhost
      128.120.59.15     virthost1
      128.120.59.18     virthost2


   그리고 다음과 같은 화일을 만들고 rebooting하면 변경사항이 적용된다.
   각 화일에는 각각의 호스트명이 지정되어 있으면 된다.
   /etc/hostname.hme는 hme 카드가 설치될 때, 자동적으로 만들어 진다.


      /etc/hostname.hme0                   --> realhost
      /etc/hostname.hme0:1                 --> virthost1
      /etc/hostname.hme0:2                 --> virthost2




2. 일시적으로 시스템이 등록


      # ifconfig interface virtual-ip up


          # ifconfig hme0:1 128.120.59.15 up
          # ifconfig hme0:2 128.120.59.18 up




3. 가상 IP를 제거하려면


      # ifconfig hme0:1 down
      # ifconfig hme0:2 down


               또는


      /etc/hostname:hme0:1, /etc/hostname:hme0:2 화일을 지우고 reboot하면
      변경사항이 적용된다.




hme interface speed 설정
hme interface는 디폴트로 네트웍에 연결된 상대방의 interface에 negotiation하여
10/100 half/full duplex에 맞게 연결이 된다. 그러나 이 negotiation 기능이 없는
장비나 다른 이유로 하여 negotiation을 하지 못 하여 interface가 UP 되지 못할 경우가
있다. 이 경우에는 negotiation 기능을 사용하지 말고, 연결될 장비의 setting에
맞추어 수동으로 10/100 half/full duplex 설정하여야 한다.
hme interface의 parameter를 변경하기 위한 방법에는 2 가지가 있다.


     a) ndd 명령어를 사용하는 방법
     b) /etc/system 화일을 수정하는 방법




1. ndd 명령어를 사용하여 변경


  1.1. hme interface의 속도를 10MB full duplex로 설정하려면 다음과 같이 한다.


      # ndd -set /dev/hme adv_100T4_cap 0
      # ndd -set /dev/hme adv_100fdx_cap 0
      # ndd -set /dev/hme adv_100hdx_cap 0
      # ndd -set /dev/hme adv_10fdx_cap 1
      # ndd -set /dev/hme adv_10hdx_cap 0
      # ndd -set /dev/hme adv_autoneg_cap 0


  1.2. hme interface의 속도를 10MB half duplex로 설정하려면 다음과 같이 한다.


     # ndd -set /dev/hme adv_100T4_cap 0
     # ndd -set /dev/hme adv_100fdx_cap 0
     # ndd -set /dev/hme adv_100hdx_cap 0
     # ndd -set /dev/hme adv_10fdx_cap 0
     # ndd -set /dev/hme adv_10hdx_cap 1
     # ndd -set /dev/hme adv_autoneg_cap 0


  1.3. hme interface의 속도를 100MB full duplex로 설정하려면 다음과 같이 한다.


     # ndd -set /dev/hme adv_100T4_cap 0
     # ndd -set /dev/hme adv_100fdx_cap 1
     # ndd -set /dev/hme adv_100hdx_cap 0
     # ndd -set /dev/hme adv_10fdx_cap 0
     # ndd -set /dev/hme adv_10hdx_cap 0
     # ndd -set /dev/hme adv_autoneg_cap 0


  1.4. hme interface의 속도를 100MB half duplex로 설정하려면 다음과 같이 한다.


     # ndd -set /dev/hme adv_100T4_cap 0
      # ndd -set /dev/hme adv_100fdx_cap 0
      # ndd -set /dev/hme adv_100hdx_cap 1
      # ndd -set /dev/hme adv_10fdx_cap 0
      # ndd -set /dev/hme adv_10hdx_cap 0
      # ndd -set /dev/hme adv_autoneg_cap 0




2. /etc/system 화일을 변경


   /etc/system 화일에 변경한 내용은 바로 적용되지 않고, 리부팅한 후에
   시스템에 적용된다.


   2.1 hme interface의 속도를 10MB full duplex로 설정하려면 다음과 같이 한다.


      set hme:hme_adv_autoneg_cap=0
      set hme:hme_adv_100T4_cap=0
      set hme:hme_adv_100fdx_cap=0
      set hme:hme_adv_100hdx_cap=0
      set hme:hme_adv_10fdx_cap=1
      set hme:hme_adv_10hdx_cap=0


  2.2 hme interface의 속도를 10MB half duplex로 설정하려면 다음과 같이 한다.


      set hme:hme_adv_autoneg_cap=0
      set hme:hme_adv_100T4_cap=0
      set hme:hme_adv_100fdx_cap=0
      set hme:hme_adv_100hdx_cap=0
      set hme:hme_adv_10fdx_cap=0
      set hme:hme_adv_10hdx_cap=1


   2.3 hme interface의 속도를 100MB full duplex로 설정하려면 다음과 같이 한다.


      set hme:hme_adv_autoneg_cap=0
      set hme:hme_adv_100T4_cap=0
      set hme:hme_adv_100fdx_cap=1
      set hme:hme_adv_100hdx_cap=0
      set hme:hme_adv_10fdx_cap=0
      set hme:hme_adv_10hdx_cap=0
 2.4 hme interface의 속도를 100MB half duplex로 설정하려면 다음과 같이 한다.


     set hme:hme_adv_autoneg_cap=0
     set hme:hme_adv_100T4_cap=0
     set hme:hme_adv_100fdx_cap=0
     set hme:hme_adv_100hdx_cap=1
     set hme:hme_adv_10fdx_cap=0
     set hme:hme_adv_10hdx_cap=0


3. hme 카드가 2개 이상 있는 경우에 개별적인 instance에 대해서 각각 지정하여야 한다.


     # ndd -set /dev/hme instance 0


              hme0에 대하여 위에 지정한 파라메터를 여기에 지정한다.




     # ndd -set /dev/hme instance 1


              hme1에 대하여 위에 지정한 파라메터를 여기에 지정한다.




4. 실제 시스템에 설정된 상태를 확인하려면 다음과 같은 명령어로 확인할 수 있다.


     # ndd -get /dev/hme link_status
     # ndd -get /dev/hme link_speed
     # ndd -get /dev/hme link_mode


     link_status (read only)
              0 for Link Down
              1 for Link up


     link_speed (read only)
              0 for 10 Mbps
              1 for 100 Mbps


     link_mode (read only)
              0 for Half-Duplex mode
              1 for Full-Duplex mode
hostname과 IP를 변경하려면
시스템의 이름 또는 IP를 변경하려면 다음과 같은 화일에서 시스템명 또는 IP를
새로운 것으로 변경하여야 한다.


                          OLD             NEW
        System name       jump            king
        IP                168.12.99.9     178.20.1.22
        Network mask      255.255.0.0     255.255.255.0


1. /etc/hosts


        168.12.99.9 jump           --> 178.20.1.22 king


2. /etc/hostname.xxN


        ex)      /etc/hostname.le0
                 /etc/hostname.le1
                 /etc/hostname.hme0
                 /etc/hostname.hme1


                 jump     --> king


3. /etc/netmasks
        해당되는 IP에 맞게 network masking을 설정한다.


        168.12.0.0        255.255.0.0    --> 178.20.1.0   255.255.255.0




4. /etc/net/*/hosts
        /etc/net/ticlts/hosts
        /etc/net/ticots/hosts
        /etc/net/ticotsord/hosts


        jump     jump   -->     king         king


5. /etc/nodename
        jump     -->    king


6. /etc/defaultrouter


        디폴트 라우트의 이름이 변경되었다면, 여기에서 이름을 변경한다.


7. reboot
        시스템을 리부팅한다.


        # reboot




Full-Duplex mode를 지원하는 Network Interface Card
Full-Duplex를 지원하는 Sun Ethernet devices는 아래와 같다.


   hme : FastEthernet 2.0, 10/100Mbps 지원
   qfe 1.0 : QuardFast Ethernet 1.0, driver는 hme를 사용하며 patch를 해야함
   qfe 2.0 : QuardFast Ethernet 2.0
   vge : Gigabit Ethernet 1.0


   위의 devices는 Full-Duplex mode를 지원하기 위해 flow control을 하지 않는다.




Quard fast Ethernet의 network 속도 및 mode 지정하기
qfe interface는 디폴트로 네트웍에 연결된 상대방의 interface와 negotiation하여
10/100 half/full duplex에 맞게 연결이 된다. 그러나 이 negotiation 기능이 없는
장비나 다른 이유로 하여 negotiation을 하지 못 하여 interface가 UP 되지 못할 경우가
있다. 이 경우에는 negotiation 기능을 사용하지 말고, 연결될 장비의 setting에
맞추어 수동으로 10/100 half/full duplex 설정하여야 한다.


qfe interface의 parameter를 변경하기 위한 방법에는 2 가지가 있다.


        a) ndd 명령어를 사용하는 방법
        b) /etc/system 화일을 수정하는 방법


1. ndd 명령어를 사용하여 변경


    1.1. qfe interface의 속도를 10MB full duplex로 설정하려면 다음과 같이 한다.
       # ndd -set /dev/qfe adv_100T4_cap 0
       # ndd -set /dev/qfe adv_100fdx_cap 0
       # ndd -set /dev/qfe adv_100hdx_cap 0
       # ndd -set /dev/qfe adv_10fdx_cap 1
       # ndd -set /dev/qfe adv_10hdx_cap 0
       # ndd -set /dev/qfe adv_autoneg_cap 0


   1.2. qfe interface의 속도를 10MB half duplex로 설정하려면 다음과 같이 한다.


      # ndd -set /dev/qfe adv_100T4_cap 0
      # ndd -set /dev/qfe adv_100fdx_cap 0
      # ndd -set /dev/qfe adv_100hdx_cap 0
      # ndd -set /dev/qfe adv_10fdx_cap 0
      # ndd -set /dev/qfe adv_10hdx_cap 1
      # ndd -set /dev/qfe adv_autoneg_cap 0


   1.3. qfe interface의 속도를 100MB full duplex로 설정하려면 다음과 같이 한다.


      # ndd -set /dev/qfe adv_100T4_cap 0
      # ndd -set /dev/qfe adv_100fdx_cap 1
      # ndd -set /dev/qfe adv_100hdx_cap 0
      # ndd -set /dev/qfe adv_10fdx_cap 0
      # ndd -set /dev/qfe adv_autoneg_cap 0


   1.4. qfe interface의 속도를 100MB half duplex로 설정하려면 다음과 같이 한다.


      # ndd -set /dev/qfe adv_100T4_cap 0
      # ndd -set /dev/qfe adv_100fdx_cap 0
      # ndd -set /dev/qfe adv_100hdx_cap 1
      # ndd -set /dev/qfe adv_10fdx_cap 0
      # ndd -set /dev/qfe adv_autoneg_cap 0


2. /etc/system 화일을 변경


   /etc/system 화일에 변경한 내용은 바로 적용되지 않고, 시스템을 리부팅한
   후에 적용된다.


   2.1 qfe interface의 속도를 10MB full duplex로 설정하려면 다음과 같이 한다.
        set qfe:qfe_adv_autoneg_cap=0
        set qfe:qfe_adv_100T4_cap=0
        set qfe:qfe_adv_100fdx_cap=0
        set qfe:qfe_adv_100hdx_cap=0
        set qfe:qfe_adv_10fdx_cap=1
        set qfe:qfe_adv_10hdx_cap=0


  2.2 qfe interface의 속도를 10MB half duplex로 설정하려면 다음과 같이 한다.


        set qfe:qfe_adv_autoneg_cap=0
        set qfe:qfe_adv_100T4_cap=0
        set qfe:qfe_adv_100fdx_cap=0
        set qfe:qfe_adv_100hdx_cap=0
        set qfe:qfe_adv_10fdx_cap=0
        set qfe:qfe_adv_10hdx_cap=1


  2.3 qfe interface의 속도를 100MB full duplex로 설정하려면 다음과 같이 한다.


        set qfe:qfe_adv_autoneg_cap=0
        set qfe:qfe_adv_100T4_cap=0
        set qfe:qfe_adv_100fdx_cap=1
        set qfe:qfe_adv_100hdx_cap=0
        set qfe:qfe_adv_10fdx_cap=0
        set qfe:qfe_adv_10hdx_cap=0


  2.4 qfe interface의 속도를 100MB half duplex로 설정하려면 다음과 같이 한다.


        set qfe:qfe_adv_autoneg_cap=0
        set qfe:qfe_adv_100T4_cap=0
        set qfe:qfe_adv_100fdx_cap=0
        set qfe:qfe_adv_100hdx_cap=1
        set qfe:qfe_adv_10fdx_cap=0
        set qfe:qfe_adv_10hdx_cap=0


3. 위와 같이 하면 시스템에 설치되어 있는 모든 qfe interface의 속도를 10MB 또는
  100MB로 지정할 수 있다. 그러나 각 interface별로 각각 다른 속도를 지정하고
  싶은 경우에는 아래와 같이 interface를 먼저 지정한후 1 또는 2번 과정을 실행
  한다.
  3.1 ndd 명령어를 사용하는 경우


        ndd -set instance "instance-number"


  3.2 /etc/system 화일을 수정하는 경우


        set qfe:qfe_instance="instance-number"


  위의 설명에서 "instance-number"는 qfe0 interface는 "0", qfe1 interface는
  "1", qfe2 interface는 "2"... 와    같이 정의 된다.




virtual(logical) network interface 만드는 방법
Solaris 2.x에서는 하나의 physical interface에 대하여 여러개의 logical interface를
설정할 수 있다. Solaris 2.5.1까지는 하나의 physical interface당 254 개의 logical
interface를 정의할 수 있고 Solaris 2.6이상 에서는 최대 8191개의 logical interface
를 지정할 수 있다.


logical interface를 정의하는 방법은 아래와 같다.


1. /etc/hosts 화일에 logical interface에서 사용할 hostname과 IP address를 정의
  한다.


2. /etc/hostname."interface:#" 화일을 만들어 그 안에 logical network interface,
  "interface:#"에서 사용할 IP address를 넣어 놓는다.


  "interface:#" 란 network interface 이름과 몇번째 logical interface인가를 나타
  낸다. 예를들어 새로 만들 logical interface가 10MB ethernet인 "le0" 에 대한 것
  이고 첫번째 logical interface 라면, 이 interface의 이름은 le0:1 이 된다.


  따라서 /etc/hostname.le0:1 화일을 만들면 된다.


        # vi /etc/hostname.le0:1
        192.9.9.1


3. 위와 같이 정의한 후 시스템을 rebooting하면 새로운 interface가 생성된다.
  확인 하는 방법은 "ifconfig -a"          명령을 실행하면 된다.
          # ifconfig -a
          pocahontas# ifconfig -a
          lo0: flags=849 mtu 8232
                  inet 127.0.0.1 netmask ff000000
          le0: flags=863 mtu 1500
                  inet 129.158.153.158 netmask ffffff00 broadcast 129.158.153.255
                  ether 8:0:20:93:6f:0
          le0:1: flags=843 mtu 1500
                  inet 192.9.9.1 netmask ffffff00 broadcast 192.9.9.255


4. 시스템을 rebooting하지 않고 새로 정의한 logical interface가 enable되도록 하려
   면 아래와 같이 ifconfig 명령을 사용한다.


          # ifconfig "interface:#" plumb
          # ifconfig "interface:#" "ip-address" netmask "netmask-value" broadca
st + up


          예) 새로 지정할 logial interface가 "le0:1"이고 IP address는 192.9.9.1 이며
              netmask 값이 ffffff00(255.255.255.0)인 경우


              # ifconfig le0:1 plumb
              # ifconfig le0:1 192.9.9.1 netmask 0xffffff00 broadcast + up




Solaris 2.x에서의 기본적인 routing 운영 체계
Solaris 2.x를 사용하는 시스템이 부팅 과정에서 어떻게 routing daemon과 routing
정보를 설정하는가를 설명한다. 아래의 설명은 1번부터 순차적으로 적용된다.


1. /etc/defaultrouter 화일이 있는지 확인한다.


2. /etc/defaultrouter 화일이 있으면 아래와 같은 명령에 의해 default routing을
   설정한다.


          /usr/sbin/route add default $defaultrouter


   만약 /etc/defaultrouter 화일 안에 여러개의 default router가 정의되어 있으면
   위의 명령이 여러번 수행되어 여러개의 default router가 설정된다.
3. /etc/defaultrouter 화일이 없는 경우


  3.1 "ifconfig" 명령으로 시스템에 사용중인 network interface의 갯수와 /etc/notrouter
      화일이 있는지를 확인한다.


  3.2 network interface의 갯수가 1개 이거나 /etc/notrouter화일이 있는 경우


      3.2.1 IP 관련 kernel parameter중 ip_forwarding의 값을 "0"으로 설정한다.


      3.2.2 default router를 설정하기 위해 "/usr/sbin/in.rdisc -s" 명령을 실행
           한다.


           in.rdisc daemon은 multicast를 이용하여 network상에 3번의 "solicitation"
           message를 보내어 이에 응답하는 시스템을 default router로 설정한다.
           in.rdisc daemon이 "-s" option 으로 실행된 경우, network상에 default
           router를 찾지 못하면 실행이 종료된다.


           만약 network상에 2개 이상의 router가 "solicitation" message에 응답을
           하면 이들 모두를 default router로 설정하여 routing table에 여러개의
           default router가 존재한다.


           default router가 여러개일 경우 시스템에서 동작하는 체계에 대한 자세
           한 내용은 기술문서        10078   번을 참조한다.


      3.2.3 in.rdisc가 default router를 찾지 못한 경우에는 in.routed daemon이
           "-q" option으로 실행되어 network connection이 생길 때마다 routing
           table에 개별적으로 routing 정보를 만든다.


           "-q" option으로 in.routed가 실행되면 자신이 가지고 있는 routing 정보
           를 외부로 뿌리지 않는다.


 3.3 network interface의 갯수가 2개 이상인 경우


     3.3.1 IP 관련 kernel parameter중 ip_forwarding의 값을 "1"로 설정하여 한쪽
          network interface에서 보내진 packet이 다른쪽 interface로 전달될 수
          있도록 한다.


     3.3.2 routing 정보를 다른 시스템과 교환할 수 있도록 "in.routed -s" 명령이
          실행된다.
           "-s" option으로 in.routed가 실행되면 자신이 가지고 있는 routing 정보
            를 외부로 뿌린다.


     3.3.3 in.rdisc daemon이 "-r" option으로 실행되어 network상에 있는 default
           router를 찾아 설정하고, 자신도 network상에 "router discovery advertise"
           message를 뿌려서 다른 시스템들이 자신을 default router로 설정 할수
           있도록 한다.




multiple default routes가 시스템에서 동작하는 방법
한 시스템에 2개 이상의 default router가 지정되어 있으면, 이 router들은 round-robin
방식으로 순차적으로 한번씩 사용된다. 만약 한 default router가 down 된 경우에는
일정 시간이 지난후 다음 default router로 재연결을 시도한다.


default router가 적용되는 체계를 자세히 살펴보면 아래와 같다.


한번 network connection 요청이 발생하면 routing table에 지정된 routing 정보에
따라, 요청된 connection에 대한 IREs(internal IP routing entries)가 생성되며,
이 entry는 IP kernel parameter중 "ip_ire_flush_interval" 시간(default 20분) 동안
시스템에서 유지되어 같은 destination으로의 network connection 요청이 또 발생하면
이 IRE entry에 지정된 gateway로 packet이 전달된다.


default router가 선택되는 순서(priority)는 아래의 flow chart와 같다.




                       connection request
                               |
       IRE table에 destination에 대한 entry가 있는지 확인 -----
                               |                             |
                               | 없다                          | 있다
                               |                             |
                 routing table에 정의된 default         IRE에 지정된 gateway
                 router를 순차적으로 적용                    로 packet 전송




시스템이 가지고 있는 IRE entry들은 "netstat -ra" 명령으로 확인 가능하다.
(routing table 을 보는 명령은 "netstat -r" 또는 "netstat -rn" 이다)


     % netstat -ra


       Routing Table:
         Destination               Gateway     Flags   Ref       Use        Interface
       -------------------- -------------------- ----- ----- ------ ---------
       ppp_pc                     ppp_server    UH           2         25       ipdptp0
       129.158.153.0              pocahontas     U           3         735      hme0
       dreamland                      --        UHA              1         11   hme0
       jump                          --         UHA          1         209      hme0
       default                   gateway-1      UG           0       758
       default                   gateway-2      UG           0       758
       210.22.1.1                gateway-1       UHA     0             4    hme0
       190.3.4.2                 gateway-2      UHA      0             4    hme0




      위의 결과에 의하면, "ping 210.22.1.1" 명령을 실행했을 때 그 packet은 gateway-1
      을 거쳐서 destination에 전달되며, "ping 190.3.4.2" 명령을 실행하면 gateway-2
      를 통하여 전달된다.
      또한 IRE table에 없는 새로운 destination으로 ping명령을 실행하면 gateway-1
      또는 gateway-2가 round-robin 순서에 따라 선택된다.


한번 생성된 IRE entry는 더이상 사용되지 않으면 IP kernel parameter중
"ip_ire_cleanup_interval" 시간(default 30초)이 경과하면 없어지고, 사용이 계속
되더라도 한번 생성된 후 "ip_ire_flush_interval" 시간(default 20분)이 지나면
없어진다.




in.routed를 사용하는 시스템에서 static routing 설정하기
in.routed daemon에의해 static routing을 설정하기 위해서는 /etc/gateways화일에
routing에 관한 설정을 하면 된다. /etc/gateways 화일에 설정하는 방법은 아래와 같
다.


     1. network에 관한 routing을 설정할 경우


       net    gateway   metric    active
       net    gateway   metric    passive
2. host에 관한 routing을 설정할 경우


 host gateway       metric   active
 host gateway       metric   passive


위의 설정에 관한 각 항목의 내용은 아래와 같다.


 net : network routing 설정을 위한 keyword
 host : host routing 설정을 위한 keyword
  : destination network의 network address
  : destination host의 IP address
  : gateway system의 IP address
  : destination network또는 host까지 거쳐가는 gateway의 갯수
 active : active로 정의된 routing 정보는 지정된 gateway로 부터 일정시간 동
          안(시스템의 ip_ire_cleanup_interval에 지정된 값 - default 30초)
          새로운 routing 정보를 update 받지 못하면 routing table에서 없어진다.
 passive : passive로 지정된 routing 정보는 routing table에서 지워지지 않고
              계속 보존된다.


예) % cat /etc/gateways
   net 150.10.1.0 gateway 150.10.2.1 metric 1 passive
   net 0.0.0.0 gateway 150.10.2.11 metric 1 passive


   위의 내용에 의하면 아래와 같은 routing정보(-->로 표시된 부분)가 생긴다.


   % netstat -rn


    Routing Table:
      Destination               Gateway        Flags    Ref   Use       Interface
    -------------------- -------------------- ----- ----- ------ ---------
    127.0.0.1                127.0.0.1          UH       0      0        lo0
--> 150.10.1.0                150.10.2.1         UG       0         0
    150.10.2.0                150.10.2.10        U       3    534         le0
    224.0.0.0                150.10.2.10        UH        3     0         le0
--> default                  150.10.2.11        UG       0    647
password 확인 없이 Remote system으로 rlogin 또는 rsh 실행하기
1. 사용자가 개인별로 정의 할 경우


  home directory에 .rhosts 화일을 만들어 그 안에 rlogin또는 rsh 명령을
  실행 할 시스템의 이름과 userid를 넣어 놓는다.


     예1) host "cat"의 kildong 이라는 사용자가 remote host "dog"의 같은
         userid로 R-명령을 실행할 경우


         %hostname
         dog
         %whoami
         kildong
         % vi ~/.rhosts
         cat


     예2) host "cat"의 kildong 이라는 사용자가 remote host "dog"의 "jjkim"
         이라는 사용자로 R-명령을 실행할 경우


         %hostname
         dog
         %whoami
         jjkim
         % vi ~/.rhosts
         cat kildong


     예3) host "cat"의 모든 사용자가 remote host "dog"의 "jjkim" 이라는 사용
         자로 R-명령을 실행할 경우


         %hostname
         dog
         %whoami
         jjkim
         % vi ~/.rhosts
         cat +


     예4) 모든 host의 "kildong" 이라는 사용자가 remote host "dog"의 "jjkim"
            이라는 사용자로 R-명령을 실행할 경우


            %hostname
            dog
            %whoami
            jjkim
            % vi ~/.rhosts
            + kildong


      예5) 모든 host의 어떤 사용자든지 remote host "dog"의 "jjkim" 이라는
            사용자로 R-명령을 실행할 경우


            %hostname
            dog
            %whoami
            jjkim
            % vi ~/.rhosts
            ++


2. 시스템 admin이 /etc/hosts.equiv 화일에 지정하는 경우


   root로 login하여 /etc/hosts.equiv 화일을 만들어 그 안에 rlogin또는 rsh
   명령을 실행 할 시스템의 이름과 userid를 넣어 놓는다.


   예1) /etc/hosts.equiv 화일에 remote hostname 만을 넣어 놓은 경우


      %hostname
      dog
      %vi /etc/hosts.equiv
      cat


      위와 같이 지정하면 remote host, "cat" 의 모든 사용자들이 dog 시스템의
      같은 userid로 R-명령여를 수행할 수 있다.


   예2) /etc/hosts.equiv 화일에 remote hostname과 userid를 지정한 경우


      %hostname
      dog
      %vi /etc/hosts.equiv
    cat kildong


    위와 같이 지정하면 remote host, "cat" 의 kildong이라는 사용자는 dog
    시스템의 root를 제외한 모든 사용자로 R-명령을 실행할 수 있다


예3) /etc/hosts.equiv 화일에 "+"를 넣어 놓은 경우


    %hostname
    dog
    %vi /etc/hosts.equiv
    +


    위와 같이 하면 어떤 시스템에서든지 "dog" 시스템의 같은 userid에 대하여
    (root 제외) R-명령을 실행 할 수 있다.


예4) /etc/hosts.equiv 화일에 "+ userid"를 넣어 놓은 경우


    %hostname
    dog
    %vi /etc/hosts.equiv
    + kildong


    위와 같이 하면 어떤 시스템에서든지 "kildong"이라는 사용자로 부터 "dog"
    시스템의 root를 제외한 모든 사용자로 R-명령을 실행할 수 있다.


예5) /etc/hosts.equiv 화일에 remote hostname과 "+"를 넣어 놓은 경우


    %hostname
    dog
    %vi /etc/hosts.equiv
    cat +


    위와 같이 지정하면 remote host, "cat" 으로부터 dog" 시스템의 root를
    제외한 모든 사용자에 대하여 R-명령을 실행 할 수 있다.


예6) /etc/hosts.equiv 화일에 "+ +"를 넣어 놓은 경우


    %hostname
    dog
       %vi /etc/hosts.equiv
       ++


       위와 같이 지정하면 모든 remote host로 부터 dog 시스템의 root를 제외한
       모든 사용자에 대하여 R-명령을 실행 할 수 있다.


3. 예외사항


   /etc/hosts.equiv화일은 "root" 에게는 적용이 않되기 때문에 root에 대하여
   R-명령이 password를 물어 보지 않고 실행 되게 하려면 root의 home directory에
   .rhosts 화일을 만들어 permission을 열어줄 remote host와 userid를 각각
   등록해야 한다.


   시스템에 /etc/hosts.equiv 화일이 존재하고 사용자가 home directory에 .rhosts
   화일을 가지고 있으면            R-명령어 실행시 .rhosts화일의 내용이 적용된다.




CRC 란 무엇인가
CRC(Cyclical Redundancy Check)는 message 전송상에 발생하는 error를 검출하는
방법으로, message를 보내는 시스템이 전송되는 message의 bit수를 계산하여 그
결과를 message안에 담아서 보내면, 그 message를 받는 시스템에서 받은 message의
bit수를 같은 방법으로 계산해서 그 결과를 message안에 담겨있는 것과 비교한다.


만약 그 두 결과가 같지 않으면 수신측에서 message를 보낸 시스템에 재 전송할
것을 요청한다.




network interface에 지정된 ethernet(MAC) address 변경
Solaris 환경하에서는 시스템이 부팅하면서 /etc/rcS.d/S30rootusr.sh 화일을 실행
하여 network interface를 enable 시켜주며 이때 시스템의 ethernet address를 각
network interface에 설정한다.


network interface에 별개의 Ethernet address를 설정하려면 아래와 같이 shell script
를 만들어 시스템이 부팅될때 실행되게 한다.


  # vi /etc/rcS.d/S30ethernet.sh


       #!/sbin/sh
       /usr/sbin/ifconfig "network-interface-name" plumb
       /usr/sbin/ifconfig "network-interface-name" ether "ethernet-address"


  # chmod 744 /etc/rcS.d/S30ethernet.sh




local network상의 다른 시스템과 통신이 않되는 경우 점검사항
시스템에서 갑자기 LAN상의 다른 시스템과 통신이 않되는 경우 다음과 같은 사항들을
순차적으로 점검해 본다.


1. LAN cable이 시스템의 LAN card 와 HUB/SWITCH 간에 연결이 제대로 되어 있는지
  확인한다.


2. LAN card에 LED(Lamp)가 있는 card인 경우 LAN cable을 연결했을때 LED가 "green"
  으로 변하는지 확인한다.


3. ifconfig 명령으로 network interface에 대한 flag가 "up" 과 "running" 상태인지
  확인한다.


  # ifconfig -a


  lo0: flags=849 mtu 8232
          inet 127.0.0.1 netmask ff000000
  le0: flags=863 mtu 1500
          inet 129.158.153.167 netmask ffffff00 broadcast 129.158.153.255


4. ifconfig 명령으로 network interface에 지정된 IP address가 시스템에 할당된 IP와
  맞는지 확인한다.


  # ifconfig -a


  lo0: flags=849 mtu 8232
          inet 127.0.0.1 netmask ff000000
  le0: flags=863 mtu 1500
          inet 129.158.153.167 netmask ffffff00 broadcast 129.158.153.255
                  ^^^^^^^^^^^^^^^ <-- IP address 확인


5. ifconfig 명령으로 network interface에 지정된 IP address에 대한 netmask 값과
  broadcast 값이 맞게 지정되어 있는지 확인한다.
  # ifconfig -a


  lo0: flags=849 mtu 8232
            inet 127.0.0.1 netmask ff000000
  le0: flags=863 mtu 1500
            inet 129.158.153.167 netmask ffffff00 broadcast 129.158.153.255
                                         ^^^^^^^^                    ^^^^^^^^^^^^^^^


6. routing table에 local network에 대한 routing이 맞게 잡혀 있는지 확인한다.


  # netstat -rn


  Routing Table:
    Destination             Gateway            Flags   Ref       Use        Interface
  -------------------- -------------------- ----- ----- ------ ---------
  129.158.153.0          129.158.153.167         U               3     323     le0
  224.0.0.0              129.158.153.167         U           3          0     le0
  default               129.158.153.1           UG           0       546
  127.0.0.1              127.0.0.1              UH           0       9459     lo0




  위의 결과에서 처럼 Interface le0에 대한 routing이 잡혀 있는지 확인한다.


7. 위의 1-6 항목이 모두 이상이 없으면 아래와 같이 ping 명령을 사용하여 LAN 상의
  다른 시스템으로 부터 응답을 받는지 확인한다.


  # ping -s 129.158.153.255




default router(gateway) 설정하기
Solaris 2.x에서 default router를 설정하기 위해서는 "/etc/defaultrouter" 화일을
이용하는 방법(Static routing)과 "in.rdisc" daemon을 이용하는 방법(dynamic routing)
2가지가 있다.


1. /etc/defaultrouter 화일을 이용한 방법(Static Routing)


  /etc/defaultrouter 화일을 만들어 그 안에 default router의 IP address를 적어
  놓는다. 이렇게 하면 시스템이 부팅하면서                      /etc/defaultrouter 화일의 내용을 읽
  어서 routing 을 잡는다.


      # vi /etc/defaultrouter
      129.158.153.1


2. in.rdisc daemon을 이용하는 경우


  시스템이 새로 부팅될때 /etc/defaultrouter 화일이 없으면 /usr/sbin/rdisc daemon
  이 실행 되면서 local network상에 routing advertise를 하고 있는 시스템 또는 router
  를 default router로 잡는다.


3. 명령어를 사용하여 default router를 설정하는 방법


  root로 login하여 아래와 같이 route 명령을 실행한다.


      # route add 0 "ip-address-of-defaultrouter" 1


4. default router가 설정되어 있는지 확인하는 방법


  "netstat" 명령을 사용하여 아래와 같이 확인한다.


      # netstat -rn


      Routing Table:
      Destination               Gateway            Flags   Ref   Use       Interface
      -------------------- -------------------- ----- ----- ------ ---------
      129.158.153.0              129.158.153.158       U             3    212    hme0
      224.0.0.0                 129.158.153.158        U         3          0 hme0
      default                   129.158.153.1         UG         0       364
      127.0.0.1                 127.0.0.1             UH         0       6956   lo0


  위의 결과에서 처럼 "default" 항목이 보이면 default router가 설정된 것이다.
시스템에서 사용하는 IP address의 netmask 값 변경하기
시스템에서 사용하는 IP address의 netmask 값은 "ifconfig" 명령을 사용하여 변경가
능하며, 시스템이 rebooting된 후에도 적용되게 하려면 /etc/netmasks 화일에 지정한
다.


1. root로 login한 후 아래와 같이 ifconfig 명령을 실행한다.


     예) 현재 사용하는 network interface가 le0이고 IP address는 210.123.100.1이며
         변경된 subnetmask 값이 255.255.255.128(ffffff80) 인 경우


         # ifconfig le0 210.123.100.1 netmask 0xffffff80


2. /etc/netmasks 화일에는 아래와 같이 지정한다.


         # vi /etc/netmasks


         210.123.100.0   255.255.255.128


     /etc/netmasks 화일에 지정할 경우 첫 칼럼에 정의하는 network address는 original
     network address를 명기해야 한다.


     예를 들어 network address, "128.134.1.0(netmask: 255.255.255.0)"을 지정할때,
     이 address는 128.134인 B class network address를 subnetmask한 것이므로,


         128.134.0.0     255.255.255.0


     와 같이 정의해야 하며, 아래와 같이


         128.134.1.0     255.255.255.0


     로 정의하면 않된다.




network interface(Ethernet) 추가시 필요한 작업
시스템에 새로운 ethernet interface(le, hme, qfe, qe)를 추가하고 시스템이 이를
인식하게 하려면 아래와 같이 /etc directory 밑에 hostname.xxN 화일을 만든 후
시스템을 reconfigure 하도록 rebooting 한다.
1. 각 ethernet interface 이름은 network card에 따라 아래와 같이 지정된다.


        lance Ethernet : le
        Fast Ethernet v1.0 : be
        Fast Ethernet v2.0 : hme
        Quard Ethernet : qe
        Quard fast Ethernet : qfe


2. /etc/hostname.xxN 화일


  시스템이 rebooting되는 동안에 /etc/rcS.d/S30rootusr.sh 화일이 실행 되면서
  /etc/hostname.*의 화일의 내용을 읽어 이 화일 안에 들어있는 IP address 혹은
  hostname으로 각 network interface를 enable 시킨다.


  /etc/hostname.xxN은 아래와 같이 형태로 화일 이름을 만들면 된다.


        xx : network interface의 이름을 나타낸다.
        N : 몇번째 network interface인지를 나타낸다.


        예) 1. hme interface를 2개 설치 했을때;


                 /etc/hostname.hme0와 /etc.hostname.hme1 화일을 만든다.


            2. le interface 1개를 사용하다가 qe interface를 2개 추가했을때;


                 /etc/hostname.le0 는 기존에 만들어져 있을 것이며
                 /etc/hostname.qe0와 /etc.hostname.qe1 화일을 만든다.


  /etc/hostname.xxN 화일 안에는 "xxN" interface 에서 사용할 IP address나 이에
  해당하는 hostname(/etc/hosts 화일에 등록된 이름)을 넣어 놓는다.


3. 시스템 rebooting


  위와 같이 /etc/hostname.xxN 화일은 만든후 시스템을 reconfigure 하도록 rebooting
  한다.


        # reboot -- -r


  시스템 reconfigure에 관한 보다 자세한 사항은 기술문서              10047 을 참조한다.
Solaris 2.x에서 kernel을 새로 만드는 방법
1. 시스템에 이미 network interface가 인식되어 있는 경우, rebooting하지 않고
     새로 설치한 network interface가 enable되도록 하려면 아래와 같이 ifconfig
     명령을 사용한다.


          # ifconfig "interface-name" plumb
          # ifconfig "interface-name" "ip-address" netmask "netmask-value" broadcast + up


          예) 새로 추가한 network interface가 "hme1"이고 IP address는 129.100.1.1이며
              netmask 값이 ffffff00(255.255.255.0)인 경우


              # ifconfig hme1 plumb
              # ifconfig hme1 129.100.1.1 netmask 0xffffff00 broadcast + up




Can I configure 2 ethrnet interfaces on the same subnet?
+------------+                          +-----------------------+
|              |                |                            |
|              |                | host                       |
| host         |                |                            |
| p4u-14a          |                |                            |
|              |                |       p4u-3000a                |
|              |                |                            |
|              |                |                            |
+------------+                          +-----------------------+
      | le0                         | hme0               | hme1
      | (129.156.183.20)                |(129.156.183.17) | (129.156.183.208)
      |                                 |                |
      |                                 |                |
      |                                 |                |
|===================================================================|
    subnet 129.156.183.0    - default netmask 255.255.255.0




1.    위와 같은 구성을 원하는 이유는 ?


     - For redundancy : 만약 hme0가 down된 경우 hme1을 사용하여 통신이 가능하게 하기위해
     - 2배의 bandwidth를 얻기 위해
2. 문제점


 1) 현재 SUN에서 판매하는 ethernet card는 자체의 MAC 또는 Ethernet address를 가지고 있지
   않기 때문에 두개의 interface가 같은 MAC address(System Mac address)를 사용한다.
   이와 같이 두개의 network interface가 하나의 MAC address를 사용하게 되면 Datalink Layer
   에서 MAC address를 보고 destination으로 packet을 전달하므로 하나의 packet에 대하여
   2개의 destination을 갖게 되어 하나의 packet이 duplicate되어 전달되는 현상이 발생하며
   network performance에 악영향을 미치게 된다.


   해결책 : 이와 같은 문제를 해결하기 위해서는 hme1에 임의의 다른 MAC address를 지정하면
           된다.    만약 새로 지정할 MAC address가 8:0:0:0:0:6c 라면 아래와 같이 ifconfig
           명령을 사용하여 변경 한다.


           # ifconfig hme1 ether 8:0:0:0:0:6c


           만약 지속적으로 위의 MAC address를 사용하고 싶으면 /etc/rcS.d/S30rootusr.sh에
           아래와 같이 지정하여 시스템이 재부팅될때 수행되게 한다.


           /sbin/ifconfig lo0 127.0.0.1 up 2>&1 >/dev/null
           /sbin/ifconfig hme0 plumb
           /sbin/ifconfig hme0 ether 8:0:1:1:1:6c
           /sbin/ifconfig hme1 plumb
           /sbin/ifconfig hme1 ether 8:0:0:0:0:6c


   주의점 : 새로운 MAC address를 지정할때 이 MAC address가 같은 Subnet에 있는 다른 시스템이
           사용하고 있지 않는지 확인해야 한다.
           새로운 MAC address를 지정할때 01:00:5e로 시작하는 MAC address는 사용하지 않도록
           한다. 이 address는 Multicast address로 이미 사용되기 때문이다.


 2) 위 문제점을 해결한 후 과연 생각대로 2배의 network bandwidth를 올릴수 있는지 snoop을 실행
   하여 확인해 보면, destination이 129.156.183.17인 packet은 destination MAC address로
   8:0:1:1:1:6c를 가지고 있고, destination이 129.156.183.208인 packet은 destination MAC
   address로 8:0:0:0:0:6c를 가지고 있음을 볼수 있다. 하지만, p4u-3000a 시스템에서 나가는
   packet은 source MAC address로 8:0:1:1:1:6c         만을 가지고 있기 때문에 p4u-3000a 시스템으로
   들어 오는 packet은 hme0와 hme1 두개의 interface로 나뉘어 들어 오지만 나가는 packet은 모두
   hme0만을 통하게 된다.


   이러한 일이 발생되는 원인은 p4u-3000a 시스템이 가지고 있는 routing table 때문이다.
p4u-3000a 시스템의 routing table을 살펴 보면,


#    netstat -rn


Routing Table:
    Destination          Gateway          Flags      Ref           Use        Interface
-------------------- -------------------- ----- ----- ------ ---------
127.0.0.1              127.0.0.1           UH              0              0    lo0
129.156.183.0          129.156.183.17       U                  3          12     hme0
129.156.183.0          129.156.183.208          U              2              0 hme1
224.0.0.0              129.156.183.17       U              3              0     hme0
default             129.156.183.2          UG              0             27


와 같음을 알수 있다.


위의 routing table에는 129.156.183.0 network에 대하여 2개의 routing 정보가 들어 있다.
이 두개의 routing 정보는 hme0와 hme1 interface가 plumb 되면서 생성되는 것이다.
그런데 hme0가 hme1 보다 먼저 plumb되기 때문에 routing table에 먼저 등록이 되며
routing table은 등록된 순서데로 위에서 부터 search되고 destination address와 mapping
되는 routing 정보를 찾으면 그 routing 정보가 가지고 있는 network interface로 packet이
전달되기 때문에 destination이 129.156.183.xxx인 packet이 발생되면 이 모든 packet은
hme0 interface를 통해 전달된다.


따라서 hme0 interface가 fail된경우 outgoing packet을 hme1으로 나가게 하기 위해서는
ifconfig command를 사용하여 hme0 interface를              down 시켜 routing table에서 hme0에 대한
routing 정보가 없어 지도록 한다.(이경우 자동으로 hme1으로 packet이 나가게 하는 방법은
없다)


# ifconfig hme0 down


이와 같이 outgoing packet이 하나의 inetrface로 몰리는 것을 막기 위해서는 아래와 같은
방법을 사용하면 되지만 권장할 만한 방법은 아니다.


일단 routing table에서      destination이 129.156.183.0인 두개의 routing 정보를 지운다.


# route delete 129.156.183.0 129.156.183.17 0
# route delete 129.156.183.0 129.156.183.208 0


아래와 같이 129.156.183.0 Subnet에 있는 각각의 host에 대하여 routing을 잡아준다.
     # route add 129.156.183.1     129.156.183.17 0
     # route add 129.156.183.2     129.156.183.17 0
     # route add 129.156.183.3     129.156.183.17 0
     # route add 129.156.183.4     129.156.183.17 0
     # route add 129.156.183.5     129.156.183.17 0
     ...
     etc


     # route add 129.156.183.20     129.156.183.208 0
     # route add 129.156.183.21     129.156.183.208 0
     # route add 129.156.183.22     129.156.183.208 0
     # route add 129.156.183.23     129.156.183.208 0
     # route add 129.156.183.24     129.156.183.208 0
     # route add 129.156.183.25     129.156.183.208 0
     ...
     etc


     위와 같이 하면 destination이 129.156.183.에서 129.156.183.5인 경우에는 hme0로 packet이
     나가고, destination이 129.156.183.20에서         129.156.183.25인 경우는 hme1을 통해 packet이
     전달 되기 때문에 일종의             load balancing 효과를 기대할수 있다.


3. Something NEW in Solaris 2.6 - Interface group


     Solaris 2.6에서는 위와 같은 문제점을 해결하기 위해 client로 부터 server로 connection이 이
     루어 지면, IP cache entry가 만들어 지고 이 안에 client가 접속을 해온 interface를 기억하여
     server로 부터 이 client로 packet이 나갈때 cache entry에 기억된 interface를 통하여 packet이
     나가도록 한다.


     만약 같은 client가 server의 다른 interface로 접속을 새로 하여도 이전에 기억된 cache entery가
     expire되지 않았다면 server로 부터 나가는 packet은 cache entry에 기억된 이전의 interface를 통하
     여 전달된다.


     아래의 snoop 결과를 참조 한다.


Client "p4u-14a" connects to "p4u-3000a" interface hme0 - return packets from same interface


(29)MAC: p4u-14a    -->   BROADCAST            ARP:ETHER:
(30)MAC: p4u-3000a-hme0      -->    p4u-14a    ARP:ETHER:
(31)MAC:    p4u-14a      -->        p4u-3000a-hme0           IP:    129.156.183.19,   -->     129.156.183.17,
TCP:TELNET:ETHER:
(32)MAC:    p4u-3000a-hme0           -->       p4u-14a       IP:    129.156.183.17,   -->     129.156.183.19,
TCP:TELNET:ETHER:
(33)MAC:    p4u-14a      -->        p4u-3000a-hme0           IP:    129.156.183.19,   -->     129.156.183.17,
TCP:TELNET:ETHER:




Client "p4u-14a" connects to "p4u-3000a" interface hme1 - return packets via hme0


(230)MAC: p4u-14a      -->    BROADCAST             ARP:ETHER:
(231)MAC: p4u-3000a-hme1           -->    p4u-14a   ARP:ETHER:
(232)MAC:   p4u-14a          -->     p4u-3000a-hme1         IP:    129.156.183.19,    -->    129.156.183.208,
TCP:TELNET:ETHER:
(233)MAC:   p4u-3000a-hme0               -->   p4u-14a      IP:    129.156.183.208,    -->    129.156.183.19,
TCP:TELNET:ETHER:
(234)MAC:   p4u-14a          -->     p4u-3000a-hme1         IP:    129.156.183.19,    -->    129.156.183.208,
TCP:TELNET:ETHER:




Client "p4u-12b" connects to "p4u-3000a" interface hme1 - return packets from same interfac




(302)MAC: p4u-12b      -->    BROADCAST             ARP:ETHER:
(303)MAC: p4u-3000a-hme1           -->    p4u-12b   ARP:ETHER:
(304)MAC:   p4u-12b          -->     p4u-3000a-hme1         IP:    129.156.183.92,    -->    129.156.183.208,
TCP:TELNET:ETHER:
(305)MAC:   p4u-3000a-hme1               -->   p4u-12b      IP:    129.156.183.208,   -->     129.156.183.92,
TCP:TELNET:ETHER:
(306)MAC:   p4u-12b          -->     p4u-3000a-hme1         IP:    129.156.183.92,    -->    129.156.183.208,
TCP:TELNET:ETHER:
(307)MAC:   p4u-12b          -->     p4u-3000a-hme1         IP:    129.156.183.92,    -->    129.156.183.208,
TCP:TELNET:ETHER:


Client "p4u-12b" connects to "p4u-3000a" interface hme0 - return packets hme1


(345)MAC: p4u-12b      -->    BROADCAST             ARP:ETHER:
(346)MAC: p4u-3000a-hme0           -->    p4u-12b   ARP:ETHER:
(347)MAC:    p4u-12b         -->     p4u-3000a-hme0          IP:   129.156.183.92,    -->     129.156.183.17,
TCP:TELNET:ETHER:
(348)MAC:   p4u-3000a-hme1              -->   p4u-12b        IP:   129.156.183.17,    -->    129.156.183.92,
TCP:TELNET:ETHER:
(349)MAC:   p4u-12b         -->     p4u-3000a-hme0          IP:    129.156.183.92,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(350)MAC:   p4u-12b         -->     p4u-3000a-hme0          IP:    129.156.183.92,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(351)MAC:   p4u-3000a-hme1              -->   p4u-12b        IP:   129.156.183.17,    -->    129.156.183.92,
TCP:TELNET:ETHER:




Interface hme0 is unplugged! Client p4u-14a is hung !


(377)MAC:   p4u-14a         -->     p4u-3000a-hme1          IP:    129.156.183.19,    -->   129.156.183.208,
TCP:TELNET:ETHER:
(378)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(379)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(380)MAC: p4u-14a     -->    BROADCAST             ARP:ETHER:
(381)MAC:   p4u-14a         -->     p4u-3000a-hme1          IP:    129.156.183.19,    -->   129.156.183.208,
TCP:TELNET:ETHER:
(382)MAC: p4u-3000a-hme1          -->    p4u-14a   ARP:ETHER:
(383)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(384)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(385)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:
(386)MAC:   p4u-14a         -->     p4u-3000a-hme0          IP:    129.156.183.19,    -->    129.156.183.17,
TCP:TELNET:ETHER:


After timeout and a new session forces a new cache entry.


(393)MAC:   p4u-14a         -->     p4u-3000a-hme1          IP:    129.156.183.19,    -->   129.156.183.208,
TCP:TELNET:ETHER:
(394)MAC:   p4u-3000a-hme1              -->   p4u-14a       IP:    129.156.183.208,   -->    129.156.183.19,
TCP:TELNET:ETHER:
(395)MAC:   p4u-14a         -->     p4u-3000a-hme1          IP:    129.156.183.19,    -->   129.156.183.208,
TCP:TELNET:ETHER:


위의 기능은 SOlaris 2.6에서 ip_enable_group_ifs라는 Kernel parameter에 의해 on/off 가능하다.


         # ndd -set /dev/ip ip_enable_group_ifs 1 ????/xmp>
SUN W/S 상에 DNS(Domain Name Service) 의 설치 및 운용
1. 개 요
DNS는 Domain Name Service의 약자로서 네트웍 상의                    호스트에 대한 정보를 주고
받는 기능 이다. SUN W/S에 OS4.1.3 이하를 사용하는 경우에는                          DNS를 제공하기
위해서 NIS도 같이 설치를 하여야 한다.                 그러나 SUN OS 5.1(Solaris Version)
이상을 사용하는 경우에는               NIS를 설치할 필요가 없으며 Name Service에 필요한
화일을 만든후 /etc/nsswitch 화일에 dns에 관한 내용만 추가하면 된다.


2.   DNS 설치
     2.1. DNS Client


대부분의 호스트들은 단지 DNS의 서비스를                       요청하는 형태이므로 DNS Client
형태로 DNS를 설치하면 된다.
 DNS Client는    resolver 기능만을     이용하여 name service를          받는 컴퓨터를
말하며, name service request가 발생할 때 마다             Master    Server에       요청하여 name
service를 받는다. 그 결과 동일한 호스트에 대해 매번 name                        service    request를 하
여서 비 효율적이나, 설치방법 이 간단하므로 대부분 호스트에서는 DNS Client로
설치한다. 구성 방법은 /etc/resolv.conf 파일만 있으면 되며(물론 /etc/nsswitch
화일에      dns에 관한 항목은 추가를하여야 한다), 그 내용은                        다음과       같이 구성하면
된다.


          +--------------------------------------------+
          |   domain              my_domain_name              |
          |   nameserver          nameserver_IP_address |
          +--------------------------------------------+


위의 내용에서         domain부분은 자신의         도메인 이름을        적으면 되고 nameserver부분에
는    Master Server로 지정할 호스트의 IP Address를 적으면 된다.


     예) domain name이       sun.co.kr이고 Master Name Server가 203.251.150.1인 경우


          +--------------------------------------------+
          |   domain              sun.co.kr               |
          |   nameserver          203.251.150.1           |
           +--------------------------------------------+


    2.2. Primary DNS Server


        Primary DNS Server는 각        도메인의 데이타들을 직접 관리하고 다른                            서버들의 Query에 응답을 해주는
    서버이며 아래와 같은 화일들을 필요로 한다.


        ** 아래의 예제 화일들은 다음과 같이 doaminname과 /etc/hosts 화일을 가지고
          있는 경우이다.


          - domain name : sun.co.kr
          - /etc/hosts


            +--------------------------------------------------------+
            |   203.251.150.1         sunsolve   ns                          |
            |   203.251.150.5         gate                                    |
            |   203.251.150.13         monkey                                     |
            |   203.251.150.26         tiger                                 |
            +--------------------------------------------------------+


        2.2.1. /etc/named.boot


         어느 도메인에 대해 primary server로서의 역할을                        하고 있는지를 지정하고 어느 디렉토리에 필요한
        데이타 화일들을 가지고 있는지를 지정하며 아래와 같은 형태이다.


+------------------------------------------------------------------------+
|   ; /etc/named.boot                                                                      |
|   ;                                                                                      |
|   directory        /usr/local/dns                                                   |
|   ;                                                                                     |
|   ; type               domain                     source host/file   backup file |
|   ;                                                                                     |
|   primary              0.0.127.in-addr.arpa         localhost.rev                    |
|   primary              sun.co.kr                    sun.zone                             |
|   primary              150.251.203.in-addr.arpa      203.251.150.rev                         |
|   cache                .                             root.cache                          |
|   ;                                                                                     |
+------------------------------------------------------------------------+
            DNS관련 화일에서는 ";"로 시작하는 라인은 Comment로 인식한다.
            위 화일 내용 중 각 라인의 의미는 아래와 같다.


    +------------------------------------------------------------------------+
    |       directory        /usr/local/dns                                           |
    +------------------------------------------------------------------------+


        데이타 화일이 저장될 디렉토리의 이름


    +------------------------------------------------------------------------+
    |       primary           0.0.127.in-addr.arpa         localhost.rev               |
    |       primary           sun.co.kr                    sun.zone                        |
    |       primary           150.251.203.in-addr.arpa      203.251.150.rev                |
    +------------------------------------------------------------------------+


        0.0.127.in-addr.arpa 와 sun.co.kr 그리고 150.251.203.in-addr.arpa 도메인에 대해서 primary server
    역할을 하고 있음을 지정하며                        그 데이타들은 각각 localhost.rev,          sun.zone 그리고 203.251.150.rev 화
    일에 있음을 지정한다.


    마지막 줄에있는 150.251.203.in-addr.arpa라는 도메인은 사용하고 있는 network address를 역순으로 쓰
    고 뒤에 in-addr.arpa 를 붙여 만들어 진다.
    만약 ISP로 부터 할당 받은 network address가 128.130 이라면 130.128.in-addr.arpa 라는 도메인에 대
    해 primary server가 된다.


    +------------------------------------------------------------------------+
    |       cache              .                        root.cache                         |
    +------------------------------------------------------------------------+


            root.cache 화일 안에 root zone에 대한 서버들을 지정한다.




             2.2.2. host data file(sun.zone)


             각 도메인의 호스트들에 관한 정보를 담고 있는 화일.


+-----------------------------------------------------------------------+
|       ; /usr/local/dns/sun.zone                                                 |
|       ;                                                                          |
|       @               IN   SOA   ns.sun.co.kr. root.ns.sun.co.kr.                   |
|                                    (940414      ;Serial                                    |
|                                    21600        ;Refresh (6h)                              |
|                                    900          ;Retry (15min)                             |
|                                    302400       ;Expire (7d)                               |
|                                    43200)       ;Minimum (12h)                                 |
|    ;                                                                                       |
|    ;domain information                                                                     |
|    ;                                                                                       |
|                                    IN           NS           ns.sun.co.kr.                 |
|                                    IN           A            203.251.150.1                     |
|    ;                                                                                       |
|    ;                                                                                       |
|    sunsolve               IN            A           203.251.150.1                          |
|    ns                     IN            CNAME         sunsolve                             |
|    gate                   IN            A           203.251.150.5                          |
|                           IN            MX 0         gate                                  |
|                           IN            MX 10        sunsolve                              |
|    monkey                     IN        A            203.251.150.13                        |
|                           IN            MX 0         monkey                                |
|                           IN            MX 10        gate                                  |
|    tiger                 IN         A            203.251.150.26                            |
|                           IN            MX 0         tiger                                 |
|                           IN            MX 10        gate                                  |
+-----------------------------------------------------------------------+


     모든 데이타 화일(예, named.ca, localhost.rev,                              hosts, hosts.rev)은       Standard reseource Record
          Format을 사용한다.


     Resource Record라 불리우는 데이타 화일의 각 field는 아래와 같다.


    {name}      {ttl}   class    RecordType           RecordSpecific data


    name      도메인 이름을 나타내며 생략될 수 있다
    ttl       time-to-live field
                얼마나 오랫동안 cache data를 보관하는가를 지정하며 생략될 수 있다.
    class      record의 class를 지정. TCP/IP protocol 에서는 IN을 사용한다.
    type       아래와 같은 6가지 type이 있다.


                +------------------------------------+
| SOA             Start of Authority       |
| NS              Name Server                      |
|A               Internet Address          |
| CNAME               Canonical Name                   |
| HINFO           Host Information             |
| WKS                 Well Known Service           |
| PTR             Pointer                      |
| MX              Mail Exchanger               |
+------------------------------------+


SOA 부분은 아래와 같은 형태를 같는다.


+--------------------------------------------------------------+
|   name      {ttl}    {class}   SOA       origin          person_in_charge (   |
|                                serial                                         |
|                                refresh                                        |
|                                retry                                          |
|                                expire                                         |
|                                minimum)                                           |
+--------------------------------------------------------------+


    name                     zone 의 이름
    origin                 데이타 화일이 있는 호스트의 이름
    person_in_charge        name server를 관리하는 사람의 메일 주소
    serial                데이타 화일의 버젼
                            데이타 화일의 내용을 갱신하면 반드시 이 값
                            을 갱신해야 한다.
    refresh                secondary server가 primary server에게 갱신
                            된 내용이 있는지 체크하는 시간 간격
    retry                 secondary server가 refresh 체크를 실패 했
                            을때 얼마후 다시 재시도 할 것인가를 지정
    expire                 secondary server가 refresh를 못했을 경우
                            얼마나 오랫동안 전에 받은 backup data를 사
                            용할 것인가를 지정
    minium                  ttl 값이 지정되어 있지 않을 경우에 deafult
                            로 사용할 time to live 값


    위의 모든 값들은 초(second)로 지정한다.
                    RR data   data type에 지정된 형태에 맞는 데이타




        2.2.3. host reverse data file(203.251.150.rev)


         IP address를 호스트 이름으로 mapping 하기위한 정보를 담고 있는 화일.


+-----------------------------------------------------------------------+
| ; 150.251.203.in-addr.arpa domain                                  |
|                                                                    |
|   @          IN      SOA    ns.sun.co.kr. root.ns.sun.co.kr.       |
|                               (940414    ;Serial                   |
|                                21600     ;Refresh (6h)             |
|                                900      ;Retry (15min)             |
|                                302400    ;Expire (7d)              |
|                                43200)   ;Minimum (12h)                 |
|   ;                                                                |
|   ;domain information                                              |
|   ;                                                                |
|                                IN       NS         ns.sun.co.kr.   |
|   ;                                                                |
|   1                IN       PTR      sunsolve.sun.co.kr.           |
|   5                IN       PTR      gate.sun.co.kr.               |
|   13               IN       PTR      monkey .sun.co.kr.            |
|   26               IN       PTR      tiger .sun.co.kr.             |
+-----------------------------------------------------------------------+


           위의 내용중 첫번째 컬럼은                 IP address의 마지막(네번째) 값을 나타내며
           마지막 칼럼에 hostname을 명기 할때는 반드시 sunsolve.sun.co.kr. 과 같이
           도메인 이름과 맨뒷자리에 "."을 표기한다.


          2.2.4 Cache file (root.cache)


            root domain(.)에 대한 서버들을 지정하는 화일
            이 화일은 internic.net에 anonymoud ftp로 연결하여 가지고 온다.
            최신의 root.cache 화일의 내용은 아래와 같다.
+-----------------------------------------------------------------------+
|.                         3600000    IN   NS       A.ROOT-SERVERS.NET.               |
| A.ROOT-SERVERS.NET.           3600000         A      198.41.0.4                     |
|.                         3600000    IN   NS       A.ROOT-SERVERS.NET.               |
|;                                                                        |
| ; formerly NS1.ISI.EDU                                                  |
|;                                                                        |
|.                         3600000         NS       B.ROOT-SERVERS.NET.               |
| B.ROOT-SERVERS.NET.           3600000         A      128.9.0.107                    |
|;                                                                        |
| ; formerly C.PSI.NET                                                    |
|;                                                                        |
|.                         3600000         NS       C.ROOT-SERVERS.NET.               |
| C.ROOT-SERVERS.NET.           3600000         A      192.33.4.12                    |
|;                                                                        |
| ; formerly TERP.UMD.EDU                                                         |
|;                                                                        |
|.                         3600000         NS       D.ROOT-SERVERS.NET.               |
| D.ROOT-SERVERS.NET.           3600000         A      128.8.10.90                    |
|;                                                                        |
| ; formerly NS.NASA.GOV                                                      |
|;                                                                        |
|.                         3600000         NS       E.ROOT-SERVERS.NET.               |
| E.ROOT-SERVERS.NET.           3600000         A      192.203.230.10                     |
|;                                                                        |
| ; formerly NS.ISC.ORG                                                   |
|;                                                                        |
|.                          3600000        NS       F.ROOT-SERVERS.NET.               |
| F.ROOT-SERVERS.NET.           3600000         A      192.5.5.241                    |
|;                                                                        |
| ; formerly NS.NIC.DDN.MIL                                                   |
|;                                                                        |
|.                         3600000         NS       G.ROOT-SERVERS.NET.               |
| G.ROOT-SERVERS.NET.           3600000         A      192.112.36.4                   |
|;                                                                        |
| ; formerly AOS.ARL.ARMY.MIL                                                 |
|;                                                                        |
|.                         3600000         NS       H.ROOT-SERVERS.NET.               |
| H.ROOT-SERVERS.NET.           3600000         A      128.63.2.53                    |
|;                                                                                     |
| ; formerly NIC.NORDU.NET                                                                 |
|;                                                                                     |
|.                             3600000         NS         I.ROOT-SERVERS.NET.                      |
| I.ROOT-SERVERS.NET.               3600000          A         192.36.148.17                           |
+-----------------------------------------------------------------------+


         2.2.5 /etc/resolv.conf


           이 화일은 remote            server에서 뿐만 아니라 DNS를 사용하는 모든                                시스템이 가지고 있어야한다.
          이      화일안에 자신의          도메인 이름과 name                service를 받기 위한 서버를 지정하는데, remote server
          와는 달리 primary server나 secondary                server는 자기 자신을 nameserver로 지정 한다.


           +-------------------------------------+
           |     domain                 sun.co.kr         |
           |     nameserver             203.251.150.1      |
           +-------------------------------------+




     2.3. Secondary Server


          Secondary Server는 Primary        Server가 동작을 하지 않을 때                 Primary Server 를 대신해서 Query에
          응답을 해주는 기능을 한다. 아래와 같은 형태의 named.boot 화일을 필요로 한다.


+------------------------------------------------------------------------+
|    ; /etc/named.boot                                                                         |
|    ;                                                                                     |
|    directory         /usr/local/dns                                                  |
|    ;                                                                                     |
|    ; type           domain                        source host/file   backup file     |
|    ;                                                                                     |
|    primary          0.0.127.in-addr.arpa                             localhost.rev       |
|    secondary         sun.co.kr                     203.251.150.1      sun.zone                   |
|    secondary         150.251.203.in-addr.arpa       203.251.150.1      203.251.150.rev|
|    cache             .                                               root.cache              |
|    ;                                                                                     |
+------------------------------------------------------------------------+


     Primary Server의 boot      화일과 다른점은 Secondary Server는 host data                            화일을 직접 관리 하지 않고
     Primary Server로 backup(copy)을 받기            때문에 backup을 받아 올            primary Server를 지정해야 한다.
     아래와 같이 named.boot 화일에 지정한다.


 +------------------------------------------------------------------------+
 |   secondary        sun.co.kr                  203.251.150.1    sun.zone       |
 |   secondary        150.251.203.in-addr.arpa    203.251.150.1    203.251.150.rev|
 +------------------------------------------------------------------------+


     위와 같이         지정하면 sun.co.kr과 150.251.203.in-addr.arpa 도메인에               대해서 203.251.150.1   부터
     /usr/local/dns/sun.zone 과 /usr/local/dns/203.251.150.rev 라는 화일에 backup을 받는다.
     root.cache와 /etc/resolv.conf 화일 및 localhost.rev화일은           primary server와 같은 형태 로 만들면 된다.


3. /etc/nsswitch.conf 화일 수정
     SUN    0S 5.x(Solaris2.x)    를 사용하는    경우에는 아래와             같이 /etc/nsswitch.conf 화일의 hosts 부분에
  dns를 추가한다. /etc/nsswitch.conf         화일이 없는 경우에는 /etc/nsswitch.files 화일을 복사하여 만든다.


           hosts: files dns


4. Start Up Name Service


     4.1 DNS Client


     DNS Client의      경우에는 /etc/resolv.conf 화밀만 만들고 /etc/nsswitch.conf 화일에             dns 항목만 추가하
     면 별도의 작업이 없이도 Name Service를 받을 수 있다.


     4.2 Primary(Secondary) Server


     필요한 화일을 다 만들었으면 아래와 같이 하여 Name Server Daemon을 살린다.


           % /usr/sbin/in.named


     위와 같이 하면 in.named daemon이 항상 돌면서 Name Service를 수행한다.


5. 운영


     5.1. daemon 관리


      Primary server와 Secondary      server의 운영자는 항상 아래의 daemon이                돌고 있는지 확인한다.
        % ps -ef|grep in.named




5.2. 새로운 호스트의 추가


   네트웍 상에 새로운                    호스트가 생기면 host data화일과 host reserve   data 화일에 새로운 호스트의
  정보를 추가하고 SOA의 Serial 값을 갱신한후 in.named daemon을 re-init 한다.




   예) han.sun.co.kr(203.251.150.10)을 추가한 경우


   - host data 화일인 /usr/local/dns/sun.zone 화일에 아래 내용을 추가하고 Serial 값을 update 한다.


    +------------------------------------------------+
    |       han             IN      A      203.251.150.10   |
    +------------------------------------------------+


        -    host reserve        data 화일인 /usr/local/dns/150.251.203.rev 파일에 아래 내용을 추가하고
            Serial   값을 update 한다.


    +--------------------------------------------------+
    |       10              IN       PTR    han.sun.co.kr       |
    +--------------------------------------------------+


   새로운 호스트를 추가한 후에는 테스트를 하여 확인한다.


   % nslookup
   > han.sun.co.kr


  위와 같이하여 IP address인 203.251.150.10 이 결과로 나오면 된다.


   % nslookup
   > 203.251.150.10


   위와 같이하여 han.sun.co.kr이 결과로 나오면 된다.


5.3 Secondary Server에 backup 화일 새로 만들기


    네트웍에             장애가 생겨         backup 화일을   오랫동안       받아 오지   못하게 되면   secondary server는
        Primary   Server의 갱신된 내용에 대해         잘못된 name service를 수행하게          된다. 이럴 경우에
        Secondary Server가     가지고 있는 backup 파일을 없애고 Primary         server로 부터 새로운 backup
        화일을 받아와야 하는데, 아래와 같이 한다.


   - 현재 가지고 있는 backup 화일을 없앤다.
   - in.named daemon을 죽였다가 다시 살린다.


      % ps -ef |grep in.named
      % kill -9 [in.named process 번호]
      % /usr/sbin/in.named


        위와    같이하면 "xfer"       라는 프로세스가    생성되면서 Primary      Server로 부터   새로운 backup 화일
        을 받아온다.


   5.3. Name Server 등록


     자신의      시스템을 어떤         도메인에   대해 Primary   Server로   설치를    한 경우에는    반드시 KRNIC(한국
    망정보센터)에 이를           등록해야 한다. 그래야만        Internet에 연결된       다른 호스트들이 그 도메인에 있는
    호스트들을 인식할 수있다. KRNIC에 등록하기                위해서는 KRNIC에서 제공하는 등록형식을                 작성하여
    메일로       보내면       된다.   등록형식은     anonymous    ftp를   이용하여krnic.net:/krnic/forms/domain-
    application.ks를 가져오면 된다.


   5.4. 테스트


       Name Server    설치가 제대로        되었는지 확인하는      방법으로 외국의 호스트를 nslooku과 telnet 명령
      을 사용하여 확인해 본다.


   # nslookup sun.com
   # telnet sun.com


       위와 같이 하여         두 명령다 지정 호스트의        IP address를 보여주면 Name       Server 설치가 완료된 것
        이다.


6. Trouble Shooting


    6.1. Secondary Server에서 Primay Server의 갱신된 내용을 backup하지 못하는 경우 Primary Server의
          data 화일의 Serial 번호를 확인한다.


       Primary Server의 data 화일의 내용을 갱신하면 SOA의                 Serial 값을 반드시 갱신해야 한다.
     Secondary Server는 자신이           가지고 있는 backup 화일의 Serial 값과         primary Server가 가 지고 있는
     data 화일의 Serial 값을 비교해서                그 값이 같으면 Primary Server가 갱신한 내용을 copy 하지 않기
     떠문이다.




   6.2 in.named daemon을 살렸는데 바로 다시 죽는경우


        - in.named daemon을         살리면 그 log가 /var/adm/messages에 쌓이는데,        이 화일의 내용을 살펴
          보고 DNS관련 화일안에 에러가 없는지 확인한다.


        - in.named       daemon을 살리면 "xfer"라는            프로그램이 수행되면서 secondary 로 지정된 도메인에
          대한 backup          화일을 갱신하게 된다. 그런데, in.named를 새로 돌릴때 그전에 살아있 던
          in.named       daemon에 의해서 수행되던 xfer 프로세스가 살아있으면 새로 수행한 in.named는
          "bind(vs, 0.0.0.0[53]): Address already in       use" 라는 에러메세지를 /var/adm/messages 화일
          에 남기고          죽어버린다.       그러므로 in.named        daemon을 수행하기 전에는 xfer   프로세스가 돌고
          있는지 미리 확인하는 것이 좋다.




FTP server(anonymous ftp) 설치
. /etc/passwd 화일과         /etc/shadow 화일에 아래와 같이 ftp user에 대하여 정의한다.


  /etc/passwd    file:


         ftp:x:30000:30000:Anonymous FTP:/export/ftp:/nosuchshell


 /etc/shadow    file:


         ftp:NP:6445::::::




2. 아래의 shell script를 실행한다.




    #!/bin/sh
    # script to setup anonymous ftp area
    #


    # verify you are root
    /usr/bin/id | grep      -w 'uid=0' >/dev/null 2>&1
if [ "$?" != "0" ]; then
     echo
     exit 1
fi


# handle the optional command line argument
case $# in


     # the default location for the anon ftp         comes from the passwd file
     0) ftphome="`getent passwd ftp | cut -d: -f6`"
        ;;


     1) if [     "$1" = "start" ]; then
               ftphome="`getent passwd ftp | cut -d: -f6`"
        else
               ftphome=$1
        fi
        ;;


     *) echo "Usage: $0 [anon-ftp-root]"
        exit 1
        ;;
esac


if [ -z "${ftphome}" ]; then
     echo "$0: ftphome must be non-null"
     exit 2
fi


case ${ftphome} in
     /*) # ok
          ;;


     *) echo "$0: ftphome must be an absolute pathname"
        exit 1
        ;;
esac


# This script assumes that         ftphome is neither / nor /usr so ...
if [ -z "${ftphome}" -o "${ftphome}" = "/" -o "${ftphome}" = "/usr" ]; then
     echo "$0: ftphome must be non-null and neither / or /usr"
     exit 2
fi


# If ftphome does not exist but parent does, create ftphome
if [ ! -d ${ftphome} ]; then
      # lack of -p below is intentional
      mkdir ${ftphome}
fi
chown root ${ftphome}
chmod 555 ${ftphome}


echo Setting up anonymous ftp area ${ftphome}


# Ensure that the /usr directory exists
if [ ! -d ${ftphome}/usr ]; then
      mkdir -p ${ftphome}/usr
fi
# Now set the ownership and modes to match                  the man page
chown root ${ftphome}/usr
chmod 555 ${ftphome}/usr


# Ensure that the /usr/bin     directory exists
if [ ! -d ${ftphome}/usr/bin ]; then
      mkdir -p ${ftphome}/usr/bin
fi
# Now set the ownership and modes to match                  the man page
chown root ${ftphome}/usr/bin
chmod 555 ${ftphome}/usr/bin


# this may not be the right thing to do
# but we need the bin -> usr/bin link
rm -f ${ftphome}/bin
ln -s usr/bin ${ftphome}/bin


# Ensure that the /usr/lib     and /etc directories exist
if [ ! -d ${ftphome}/usr/lib ]; then
      mkdir -p ${ftphome}/usr/lib
fi
chown root ${ftphome}/usr/lib
chmod 555 ${ftphome}/usr/lib


if [ ! -d ${ftphome}/etc ]; then
      mkdir -p ${ftphome}/etc
fi
chown root ${ftphome}/etc
chmod 555 ${ftphome}/etc


# a list of all the commands that should be copied         to ${ftphome}/usr/bin
# /usr/bin/ls is needed at     a minimum.
ftpcmd="
     /usr/bin/ls
"


# ${ftphome}/usr/lib needs to have all the        libraries needed by the        above
# commands, plus the runtime linker, and some nameservice libraries
# to resolve names. We just take all of them here.


ftplib="`ldd $ftpcmd | nawk '$3 ~ /lib/ { print $3         }' | sort | uniq`"
ftplib="$ftplib /usr/lib/nss_* /usr/lib/straddr* /usr/lib/libmp.so*"
ftplib="$ftplib /usr/lib/libnsl.so.1 /usr/lib/libsocket.so.1 /usr/lib/ld.so.1"
ftplib="`echo $ftplib | tr     ' ' '0 | sort |    uniq`"


cp ${ftplib} ${ftphome}/usr/lib
chmod 555 ${ftphome}/usr/lib/*


cp ${ftpcmd} ${ftphome}/usr/bin
chmod 111 ${ftphome}/usr/bin/*


# you also might want to have separate minimal versions of           passwd and group
cp /etc/passwd /etc/group /etc/netconfig ${ftphome}/etc
chmod 444 ${ftphome}/etc/*


# need /etc/default/init for timezone to be correct
if [ ! -d ${ftphome}/etc/default ]; then
     mkdir ${ftphome}/etc/default
fi
chown root ${ftphome}/etc/default
chmod 555 ${ftphome}/etc/default
cp /etc/default/init ${ftphome}/etc/default
chmod 444 ${ftphome}/etc/default/init


# Copy timezone database
mkdir -p ${ftphome}/usr/share/lib/zoneinfo
(cd ${ftphome}/usr/share/lib/zoneinfo
     (cd /usr/share/lib/zoneinfo; find . -print | cpio -o) 2>/dev/null | cpio -imdu 2>/dev/null
     find . -print | xargs chmod 555
     find . -print | xargs chown root
)




# Ensure that the /dev directory exists
if [ ! -d ${ftphome}/dev ]; then
       mkdir -p ${ftphome}/dev
fi


# make device nodes. ticotsord and udp are necessary for
# 'ls' to resolve NIS names.


for device in zero tcp udp ticotsord ticlts
do
      line=`ls -lL /dev/${device} | sed -e 's/,//'`
      major=`echo $line | awk '{print     $5}'`
      minor=`echo $line | awk '{print     $6}'`
      rm -f ${ftphome}/dev/${device}
      mknod ${ftphome}/dev/${device} c ${major} ${minor}
done


chmod 666 ${ftphome}/dev/*


## Now set the ownership and modes
chown root ${ftphome}/dev
chmod 555 ${ftphome}/dev


# uncomment the below if you want a place for people to store things,
# but beware the security implications
    #if [ ! -d     ${ftphome}/pub ]; then
    #      mkdir -p ${ftphome}/pub
    #fi
    #chown ftp ${ftphome}/pub
    #chmod 1777 ${ftphome}/pubTCP:




Not on system console
.문제 개요
   리모트 시스템으로 telnet 이나 rlogin을 사용하여 root로 로그인할 경우에
   다음과 같은 오류메세지가 발생할 경우가 있다.
          Not on system console


2.문제 원인 및 해결 방안
   Solaris 2.X에서는 디폴트로 root 사용자는 콘솔에서만 로그인할 수 있도록
   설정되어 있다. 이것은 /etc/default/login 화일에 다음과 같이 CONSOLE이
   정의되어 있기 때문이다.
          CONSOLE=/dev/console
   이렇게 CONSOLE이 정의되어 있으면, 지정한 디바이스에서만 root 사용자로
   로그인할 수 있다. 어디에서 든지 root 사용자로 로그인할 수 있게 하려면
   다음과 같이 CONSOLE 정의를 주석으로 처리하면 된다.
          # CONSOLE=/dev/console


stty: : Invalid argument
1. 문제 개요
   rcp 이나 rsh 명령을 사용할 때 "stty: : Invalid argument"와 같은 에러가
   발생할 수 있다.


2. 문제 원인 및 해결방법
  위 문제는 rcp나 rsh 명령 사용시 상대편 시스템의 사용자 home directory에
  있는 .cshrc 화일에 "stty" 명령으로 terminal 환경을 지정하는 내용이 정의
  되어 있는 경우 발생한다. 예를 들어 .cshrc 화일에 아래와 같이 정의된 경우
  위의 error가 발생 할수 이다.
          stty erase
          stty cs8 -istrip


  해결 방법은 .cshrc 화일을 잠시 다른 이름으로 변경하거나 .cshrc에 정의된
  stty 명령을 comment 처리한 후 rcp나 rsh 명령을 사용한다
le0: no carrier - twisted pair cable problem or disable hub link test?
 1. 문제 개요
   시스템이 부팅하는 과정중 NVRAM에서 Link Integrity Test를 하는경우
   "le0: no carrier - twisted pair cable problem or disable hub link test?"
   와 같은 에러가 발생한다.


 2. 문제 원인 및 해결방법
   이 에러를 없애기 위해서는 PROM mode에서 tpe-link-test를 false로 지정한다.


         ok> setenv tpe-link-test? false
         ok> reset


 Xlib: connection to ":0.0" refused by server
 1. 문제 개요


   remote 시스템의 console로 명령의 실행 결과나 window를 DISPLAY를 하고자 할
   경우 아래와 같이 에러 메세지가 나타난다.


         Xlib: connection to ":0.0" refused by server
         Xlib: Client is not authorized to connect to Server
         Error: Can't open display: :0.0


 2. 문제 원인 및 해결방법


   위의 에러가 발생하면 remote 시스템의 console 상에 login한 후 아래의 명령을
   실행하여 local 시스템이 remote 시스템의 access control list에 포함 되도록
   한다.
         % xhost "local-system-hostname"


         예) local 시스템의 hostname이 "cat"이라면 아래와 같이 지정한다.
                 % xhost cat
                 cat being added to access control list


   특정한 호스트 외에 다른 모든 시스템을 access control list 에 추가하려면 아래
   와 같이 지정한다.
         % xhost +
         access control disabled, clients can connect from any host
Unable to open /dev/ptmx: no such device
1. 문제 개요
  remote 시스템으로 login(telnet, rlogin)을 할 때 remote 시스템에 사용가능한
  pseudo terminal(pty)이 없는 경우 "Unable to open /dev/ptmx: no such device"
  와 같은 에러가 발생한다.


2. 문제 원인 및 해결방법
  위의 문제가 발생하면 login을 할 시스템에 pseudo terminal(pty)의 갯수를 늘려
  준다. pseudo terminal의 갯수를 늘리는 방법에 대한 자세한 내용은 기술문서
   10007 을 참조한다.
  [Q] 가상 터미널(ptys) 갯수 늘리기(login 사용자수 늘리기)
[A] /etc/system 화일에 아래의 내용을 추가하고 시스템을 rebooting 한다.


   # vi /etc/system
       set pt_cnt=128 ; 128개로 늘리고 싶을때.
       set npty=128


   시스템 재 부팅시 -r option을 사용하여 kernel이 reconfigure 되도록 한다.
  # reboot -- -r


installpatch and backoutpatch exit error codes
Patch를 install 하거나 backout 할때 발생되는 error code에 대한 설명은 아래와
같다.


1. INSTALLPATCH ERROR CODES:


  Exit Codes:
      0         No error
      1         Usage error
      2         Attempt to apply a patch that's already been applied
      3         Effective UID is not root
      4         Attempt to save original files failed
      5         pkgadd failed
      6         Patch is obsoleted
      7         Invalid package directory
      8         Attempting to patch a package that is not installed
      9         Cannot access /usr/sbin/pkgadd (client problem)
      10        Package validation errors
      11        Error adding patch to root template
     12         Patch script terminated due to signal
     13         Symbolic link included in patch
     14         NOT USED
     15         The prepatch script had a return code other than 0.
     16         The postpatch script had a return code other than 0.
     17         Mismatch of the -d option between a previous patch
                install and the current one.
     18         Not enough space in the file systems that are targets
                of the patch.
     19         $SOFTINFO/INST_RELEASE file not found
     20         A direct instance patch was required but not found
     21         The required patches have not been installed on the manager
     22         A progressive instance patch was required but not found
     23         A restricted patch is already applied to the package
     24         An incompatible patch is applied
     25         A required patch is not applied
     26         The user specified backout data can't be found
     27         The relative directory supplied can't be found
     28         A pkginfo file is corrupt or missing
     29         Bad patch ID format
     30         Dryrun failure(s)
     31         Path given for -C option is invalid
     32         Must be running Solaris 2.6 or greater
     33         Bad formatted patch file or patch file not found
     34         The appropriate kernel jumbo patch needs to be installed




2. BACKOUT PATCH ERRORS CODES:


  Exit Codes:


     0          No error
     1          Usage error
     2          Attempt to backout a patch that hasn't been applied
     3          Effective UID is not root
     4          No saved files to restore
     5          pkgrm failed
     6          Attempt to back out an obsoleted patch
     7          Attempt to restore CPIO archived files failed
      8         Invalid patch id format
      9         Prebackout script failed
      10        Postbackout script failed
      11        Suspended due to administrative defaults
      12        Backoutpatch could not locate the backout data
      13        The relative directory supplied can't be found
      14        Installpatch has been interrupted, re-invoke installpatch
      15        This patch is required by a patch already installed, can't back it out




ld.so.1: fatal /dev/zero can't open file errno=13

1. 문제 개요


  화일의 permission 문제 때문에 일반 사용자가 시스템에 login 할 때 아래와 같이
  "ld.so.1: fatal /dev/zero can't open file errno=13" 에러가 발생할 수 있다.


2. 문제 원인 및 해결방법


  아래의 각 화일 또는 directory들의 permission이 아래의 결과와 맞는지 확인한다.


       % ls -ald /dev
          drwxrwxr-x   16 root     sys       /dev


       % ls -ald /dev/zero
       lrwxrwxrwx      1 root     root      /dev/zero -> ../devices/pseudo/mm@0:zero


       % ls -ald /devices/pseudo
       drwxrwxr-x      2 root     sys       /devices


       % ls -ald /devices/pseudo
       drwxr-xr-x      2 root     sys       /devices/pseudo


       % ls -al /devices/pseudo/mm@0:zero
          crw-rw-rw-     1 root     sys       /devices/pseudo/mm@0:zero
Connection closed by foreign host
1. 문제 개요


  remote system으로 telnet/rlogin 접속을 시도하였을 때 관련된 화일의 owner및
  permission 잘못으로 "Connection closed by foreign host"와 같은 에러가 발생할 수 있다.


2. 문제 원인 및 해결방법


  /usr/bin/login 화일의 owner가 root인지 확인한다.


  # ls -l /usr/bin/login
  -r-sr-xr-x    1 root        bin         29512   9월 10일   08:54 /usr/bin/login


  owner가 root로 되어 있지 않으면 chown 명령으로 아래와 같이 변경한다.


  # chown root /usr/bin/login




error rcmd: socket permission denied

1. 문제 개요


  remote system의 root로 rlogin을 하여 접속을 시도할때 관련된 화일의 permission
  이 잘못된 경우 "error rcmd: socket permission denied"와 같은 에러가 발생할 수 있다.


2. 문제 원인 및 해결방법


  2.1 /bin/rlogin 명령의 owner가 root이고 permission이 "4555" 인지를 확인
      한다.


      # ls -l /bin/rlogin
      -r-sr-xr-x     1 root         bin      15808 1997년   7월 16일 /bin/rlogin


      위의 결과와 같지 않으면 아래와 같이 변경한다.


      # chown root /bin/rlogin
      # chmod 4555 /bin/rlogin
could not grant slave pty

1. 문제 개요


  remote 시스템에서 telnet, rlogin, rsh 명령을 실행 하거나 x-term을 실행했을 때                       관련되 화일의
 permission이 잘못되었거나, 사용가능한 pseudo terminal부족으로              "could not grant slave pty"와 같은 에
 러가 발생할 수 있다.


2. 문제 원인 및 해결방법


  2.1 /usr/lib/pt_chmod 화일의 permission이 잘못 설정된 경우 위와 같은 에러가
      발생한다. /usr/lib/pt_chmod 화일의 owner는 root 이어야 하며, permission
      은 아래의 결과와 같이 "4111"이어야 한다.


        # ls -l /usr/lib/pt_chmod
        ---s--x--x       1 root     bin   3120 1996년   5월   3일 /usr/lib/pt_chmod


   2.2 /usr/lib/pt_chmod 화일의 permission 과 owner가 정확하게 설정되어 있는 경
       우에 위의 에러가 발생하면 이는 사용 가능한 pseudo terminal(ptys)이 없기
       때문이다. 시스템에 defualt로 지정된 pseudo terminal의 갯수는 48개 이며,
       이 사용이 한도에 달하면 /etc/system 화일을 수정하여 갯수를 늘려주어야
       한다.
       시스템에서 사용가능한 pseudo terminal의 갯수를 늘리는 방법에 관한 자세한
       내용은 기술문서           10007 을 참조한다.




su:unknown id:user

1. 문제 개요


  일반 사용자가 다른 사용자로 su 명령을 실행 했을 때 su명령의 permission이
  잘못지정된 경우 "su:unknown id:user"와 같은 에러가 발생할 수 있다.


2. 문제 원인 및 해결방법


  /bin/su 명령의 permossion중 setuid bit가 지정되지 않은 경우에 이와 같은 에러
  가 발생하므로 /bin/su 명령의 permission 을 아래와 같도록 변경한다.


       # ls -l /bin/su
       -r-sr-xr-x    1 root   sys        15832 1997년    9월 11일 /bin/su


       # chmod 4755 /bin/su




su: setuid: not owner

1. 문제 개요


  일반 사용자가 root 또는 다른 사용자로 su 명령을 실행했을 때, su 명령과 관련
  한 몇가지 화일의 owner나 permission에 의하여 "su: setuid: not owner"와 같은
  에러가 발생할 수 있다


2. 문제 원인 및 해결방법


  아래와 같은 3가지 항목을 점검한다.


  2.1 /usr/bin/su   명령의 owner가 root인지 확인 한다.


       # ls -l /usr/bin/su
       -r-sr-xr-x    1 root   sys        18360 1998년    1월 16일 /usr/bin/su*


  2.2 /usr/bin/su   명령의 모드가 suid bit set을 가지고 있는지 확인한다.


       # ls -l /usr/bin/su
       -r-sr-xr-x    1 root   sys        18360 1998년    1월 16일 /usr/bin/su*


  2.3 /usr/bin 디렉토리가 포함된 file system이 mount 될때 nosetuid option이
     지정되어 있는지 확인한다.


       # mount
       / on /dev/dsk/c0t0d0s0 read/write/setuid/largefiles on 토 11월 28 09:24:08 1998
                                         ^^^^^^
       /proc on /proc read/write/setuid on 토 11월 28 09:24:08 1998
       /dev/fd on fd read/write/setuid on 토 11월 28 09:24:08 1998




     위와 같이 "setuid" 라고 나오면 "nosetuid" option이 지정되지 않은 것이다
telnet: Unable to connect to remote host: Connection refused
1. 문제 개요


  remote system으로 telnet 접속을 시도하였을 때 remote system에서 telnet request를
  거부하는 경우 "telnet: Unable to connect to remote host: Connection refused"
  와 같은 에러가 발생한다.


2. 문제 원인 및 해결방법


  telnet request를 받으면 "inetd" daemon에 의해서 in.telnetd가 수행되고 telnet
  서비스를 요청해온 시스템에 login prompt를 띄워준다.


  따라서 위와 같은 에러 메세지가 발생하면 telnet request를 받은 remote system에
  서 아래와 같은 사항들을 점검한다.


  2.1 "inetd" daemon이 실행 중인지 확인한다.


       # ps -ef|grep inetd


       inetd daemon이 실행 중이 아니면 아래와 같이 inetd daemon을 실행한다.


          # /usr/sbin/inetd -s


  2.2 /etc/inetd.conf 화일에 "telnet" 에 관해서 아래와 같이 정의되어 있는지 확
      인 한다.


      # grep telnet /etc/inetd.conf


      telnet   stream    tcp       nowait   root   /usr/sbin/in.telnetd   in.telnetd


      위와 같이 정의가 되어 있지 않으면, 위의 내용을 추가한 후 "inetd" daemon을
      re-start 시킨다.


         # ps -ef|grep inetd
               root     162    1    0   11월 28 ?          0:01 /usr/sbin/inetd -s
                        ^^^^
                        "inetd"의 process     번호
         # kill -HUP 162




현재 작업중인 디렉토리를 프롬프트에 표시하는 방법
KSH 의 경우 사용자의 .profile 파일에 다음과 같이 입력하십시오.


  PS1='${PWD##*/}/ > '      # For partial pathname in the prompt.
  PS1='${PWD}/ > '          # For full pathname in the prompt.


---------------------------------------------------------------------------


CSH 의 경우 .login 파일에 다음 중 한 가지를 입력하십시오.


  # For hostname and full pathname in the prompt.
  set prompt="`hostname`:$cwd % "
  alias cd 'cd \!*;set prompt="`hostname`:$cwd % "'
또는
  # For just the full pathname in the prompt.
  set prompt="$cwd % "
  alias cd 'cd \!*;set prompt="$cwd % "'
또는
  # For hostname and partial pathname in the prompt.
  set prompt="`hostname`:`basename ${cwd}` % "
  alias cd 'cd \!*;set prompt="`hostname`:`basename ${cwd}` % "'
또는
  # For just the partial pathname in the prompt.
  set prompt="`basename ${cwd}` % "
  alias cd 'cd \!*;set prompt="`basename ${cwd}` % "'




---------------------------------------------------------------------------


BOURNE 쉘의 경우:


  Bourne 쉘(/bin/sh)에서 pwd 로 변경하는 것처럼 PS1 프롬프트에서 변경하려면 계정의 .profile 에
cd 라는 새 함수를 생성하십시오.
  cd() { chdir $* ; PS1="`pwd` $ "; }


  이 cd 함수가 쉘에 내장된 cd 명령 대신 실행됩니다.




SunOS, Solaris 2.3부터 2.5.1까지 및 Solaris 2.6의 파일 크기 제한
SunOS 와 Solaris 2.3 부터 2.5.1 까지는 파일 크기를 2GB 까지 지원합니다. 파일 안에 자체 오버헤드(inode
정보 등)가 포함되기 때문에 정확한 실제 크기는 2GB 가 조금 안됩니다.


Solaris 2.6 에서는 "largefile"을 도입해서 "제한을 높였습니다". 2.6 의 largefile 은 2GB 와 1Tb(테라바이트)
사이의 파일을 의미합니다. 1TB 가 Solaris 2.6 의 파일 크기 제한입니다. 32 비트 시스템에서 2GB 이상의
파일은 모두 largefile 입니다.


2.6 에서는 largefile 을 사용해서 "large file aware" 및 "large file safe" 유틸리티를 도입했습니다. 자세한
설명은 largefile(5) 매뉴얼 페이지에 있습니다.


NFS 서버의 기능과 관계없이 아직 Solaris 2.6 으로 업그레이드하지 않은 NFS 클라이언트는 2GB 파일 크기
제한보다 큰 파일을 처리하거나 읽을 수 없습니다.


largefile 을 사용하기 위해 자세한 설명을 보려면 2.6 시스템 관리 설명서를 참조하거나
http://docs.sun.com 사이트를 방문하십시오.




Solaris 7에서 32/64bit kernel 지정
Solaris 7 에서 kernel mode 를 32bit 또는 64bit 로 지정하기 위해서는 아래와 같이
boot.conf 화일을 수정한다.


1. 32bit 로 지정하기


  Solaris 2.7 에서는 기본적으로 32bit kernel 로 지정되어 있고, 이를 확인하기 위
  해서는 /platform/sun4u/boot.conf 화일이 아래와 같이 지정되어 있는지 점검한
  후 만약 다르게 지정되어 있으면 아래와 같이 수정후 시스템을 rebooting 한다.


        # vi /platform/sun4u/boot.conf


         #ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true




2. 64bit 로 지정하기
  /platform/sun4u/boot.conf 화일을 아래와 같이 변경한 후 시스템을 rebooting 한다.


          # vi /platform/sun4u/boot.conf


           ALLOW_64BIT_KERNEL_ON_UltraSPARC_1_CPU=true


          # reboot


crontab 관리 및 사용
개요: crontab 관리 및 사용
세부 설명:


      crontab -e [ username ]                   # edit crontab file
      crontab -l [ username ]                   # list crontab file
      crontab -r [ username ]                   # remove crontab file


      crontab [ filename ]            # copy to crontab file


crontab 파일은 사전에 계획된 시간에 사용자 명령을 실행하기 위해 cron 에 의해 사용됩니다.


crontab 명령은 지정된 사용자에 대한 crontab 파일을 편집하거나, 표시하거나, 제거하는 데 사용됩니다.
root 만이 [username] 매개변수를 사용할 수 있습니다.


옵션이나 매개변수 없이 crontab 명령을 실행하면 crontab 파일에 표준 입력을 기록합니다(아래 경고 참조).


crontab 파일의 형식은 다음과 같습니다.


         Minutes Hours Date Month Day-of-Week command


설명:


         Minutes = [0 부터 59 까지]
         Hours    = [0 부터 23 까지]
         Date    = [1 부터 31 까지]
         Month    = [1 부터 12 까지]
         Day-of-Week = [0 부터 7 까지] (0 과 7)=일요일, 1=월요일,
           2=화요일, 3=수요일, 4=목요일, 5=금요일, 6=토요일,
         command = 스크립트 파일 또는 bourne 쉘 파일.
command 를 제외한 모든 필드에 와일드 카드 문자(*)를 사용할 수 있고, 필드에 - 기호를 사용해서 범위를
지정할 수 있습니다.
        예:
             30 1 * 2,4,6,8,10,12 3-5 /usr/bin/wall /var/tmp/message
이 명령은 2 개월마다 수요일부터 금요일까지 1 시 30 분에 wall 명령을 사용해서 시스템의 모든 사용자에게
메시지를 전송합니다.


추가 설명:


경고
실수로 인수를 지정하지 않고 crontab 명령을 입력했을 경우, CTRL-D 를 눌러 종료하지 마십시오. 그러면
crontab 파일의 모든 항목이 삭제됩니다. 대신 중지 문자(일반적으로 CTRL-C)를 눌러 종료하십시오.




일반적인 문제/일반적인 해결 방법, 질문/대답:


P: crontab 파일을 편집했지만 계속 실행되지 않습니다.
S: vi 와 같은 텍스트 편집기로 직접 crontab 파일을 편집하면 안됩니다. crontab -e 명령을 사용하면 vi 를
호출한 다음 변경된 내용을 cron 에 알립니다.


P: crontab -e 명령을 사용해서 crontab 항목을 모두 삭제했지만 crontab -l 명령을 실행하면 삭제한 항목이
나옵니다.
S: crontab 파일을 모두 삭제하려면 crontab -r 명령을 사용하십시오. crontab -e 명령은 빈 파일을 처리하지
못하기 때문에 변경된 내용을 업데이트하지 못합니다.


Q: **** 편집기를 사용할 수 있습니까?
A: 예, 환경 변수 EDITOR 를 ****으로 설정하면 됩니다.


Q: cron 작업이 중단될 때 전자 우편 메시지를 받는 것은 왜 그렇습니까?
A: 표준 출력 양식이 없기 때문입니다.
  이 메시지를 받지 않으려면 명령을 출력할 장치(/dev/console, /dev/null)나 파일을 지정하십시오.


P: 4.1 이전 시스템을 사용하고 있는데, 가끔 cron 작업이 두 번씩 중단됩니다.
S: 1022379 에 대한 패치 100058-01 을 전송하십시오.


Q: cron 이 정상적으로 실행되고 있는지 확인할 수 있습니까?
A: crontab 파일에 "** * * * date > /dev/console" 항목을 추가하십시오. 그러면 매분마다 콘솔에 날짜가
출력됩니다.
고급 문제:


Q: cron 을 사용할 수 있는 사용자를 제한할 수 있습니까?
A: /var/spool/cron/cron.allow 파일을 사용하면 cron 작업을 실행할 수 있는 사용자를 지정할 수 있습니다.


  /var/spool/cron/cron.allow 파일이 없으면 crontab 이 /var/spool/cron/cron.deny 파일을 통해 작업을
실행할 수 없는 사용자를 확인합니다.


  두 파일 모두 없으면 root 만이 cron 작업을 실행할 수 있습니다.


해결 방법 요약:




제품 영역: 시스템 관리
제품: cron
SUNOS 릴리즈: 4.0, 4.0.3, 4.0.3c, 4.1, 4.1.1, 4.1 PSR
하드웨어: Sun4, Sun3




Solaris 2.x 자주 제기되는 질문들 - 네트워킹
Solaris 2.x 네트워킹에 대해 자주 제기되는 질문/대답:


  NIS+
  admintool 과 네트워킹
  IP 인터페이스
  RPC 와 TLI
  NFS 호환성




해결 방법 요약:


* NIS+가 무엇입니까?


   NIS+(Network Information Service, 네트워크 정보 서비스)는 소규모 네트워크에서부터 초대형
네트워크에 이르기까지 다양한 네트워크에 서비스를 제공하도록 고안된 엔터프라이즈급 이름 지정
서비스입니다.       NIS+는 초기의 NIS(nee YP)를 완전히 다시 만들어 대체한 제품입니다. NIS 호환성 모드에서,
NIS+는 NIS 클라이언트 요청도 처리합니다.
* NIS 와 NIS+ 사이의 주요 차이점은 무엇입니까?


  많은 차이가 있지만, 중요한 네 가지를 들면 다음과 같습니다.


    - NIS 에는 단층 이름 공간이 있었지만, NIS+는 계층형입니다. 따라서 NIS+에서는 확장과 변경을
쉽게 처리할 수 있습니다.


    - NIS+는 보안이 확실하며 매우 정밀하게 액세스 제어를 할 수 있습니다.


    - NIS+ 업데이트는 증분(incremental) 방식으로 이루어지며 속도가 훨씬 더 빠릅니다(몇 분내에).


    - NIS 테이블은 단일 키-값 쌍이었지만 NIS+에서는 복수 키-값 쌍을 사용합니다.        이것은 특정한
키의 특정한 값을 기초로 검색을 할 수 있음을 의미합니다.


* NIS+의 장점은 무엇입니까?


  맵이 전달되는 동안 더 이상 24 시간 이상 기다릴 필요가 없습니다.       NIS+는 빠른 증분(incremental)
업데이트 방식을 사용합니다.      따라서, 이러한 변경을 매우 빠르고 쉽게 업데이트할 수 있습니다.


  도메인 전역을 훨씬 더 쉽게 돌아다닐 수 있습니다. NIS 에서는, 다른 도메인에 관한 정보를 쉽게
찾아낼 수 없었습니다.


  일부 NIS+ 서버에 장애가 발생해도 처리할 수 있는 장애 처리 능력이 향상되었습니다.           클라이언트가
서버에 대한 연결을 시도할 때 동일한 서브넷의 유무와 관계없이 모든 NIS+ 서버에 대한 연결 시도하기
때문입니다.


  사용자들이 일부 입력 필드를 변경할 수 있도록 로컬 sysadmin 에서 정책을 설정할 수 있습니다.            예를
들어, 사용자는 sysadmin 을 거치지 않고 쉘 디렉터리나 홈 디렉터리를 변경할 수 있습니다.


* 모든 YP/NIS 명령을 그대로 사용할 수 있습니까?


  이것은 도메인에서 이용할 수 있는 NIS 서버가 있느냐, 또는 NIS+ 서버가 YP compat 모드로 실행되고
있느냐에 따라 달라집니다.    그럴 경우, 모든 YP 명령을 사용할 수 있습니다. 단, yppasswd 나 chkey 와
같이 공개키 정보에 대해 NIS 맵을 변경하는 명령은 예외입니다.


  NIS 도메인 이름과 NIS+ 도메인 이름이 동일하지 않은 경우에도, ypset 을 실행하여 자신의 로컬
도메인이 아닌 다른 도메인에 바인드시킬 수 있습니다.
  오토마운터 맵의 이름과 관련해서도 약간의 차이가 있습니다.             이러한 맵에는 더 이상 내장된 도트가
없습니다.
  또한, 호스트 맵과 같은 일부 맵은 이제 다른 형태로 나타납니다.
  일부 응용 프로그램들이 NIS API 를 사용하면서 내장된 도트를 포함하고 있는 맵을 참조한다면, 그런
맵을 찾을 수 없을 것입니다.


  질의를 할 때 NIS+ 명령을 사용할 것을 권장합니다.


* NIS 사용으로 돌아갈 수 있습니까?


  설정이 어떤 방식으로 되어 있는가에 따라 다릅니다.           서브넷에 아직 NIS 서버가 있다면, NIS 를 다시
사용할 수 있습니다.     NIS 로 되돌아가기 위해 변경해야 하는 주요 사항은 다음과 같습니다.


        - 과거에 사용하던 도메인 이름으로 변경해야 합니다.
        - /etc/nsswitch.conf 를 이전에 설정한 값으로 변경해야 합니다.


* 과거과 같이 도메인 밖에서 메일을 수신하거나 송신할 수 있습니까?             NIS+ 도메인 이름이 메일 도메인과
동일합니까?


  그렇습니다, 이전과 동일하게 메일을 보내거나 받을 수 있습니다.
  메일에 대해서는, 사용자는 여전히 자신의 도메인보다 상위 도메인에 속해 있기 때문입니다.               예를 들어,
사용자가 현재 XYZ.Eng.Sun.COM 에 있다면, 메일에 대해서는 Eng.Sun.COM 도메인에 있는 것입니다. 전자
메일 주소는 새로운 NIS+ 도메인 이름에 따라 바뀌게 됩니다.


* 다른 도메인에서 룩업(찾아보기)를 할 수 있습니까?


  그렇습니다, 찾으려는 테이블/엔터티의 NIS+ 이름 전체를 지정하기만 하면 됩니다.


* 다른 도메인의 컴퓨터에 로그인할 수 있습니까?


  사용자의 로컬 자격이 그 다른 도메인에 추가된 경우에만 가능합니다.


* 4.x 를 실행하는 컴퓨터에서 NIS+를 실행할 수 있습니까?


  클라이언트로서는 안됩니다.        4.X NIS+ 서버만 지원합니다.
  libc 에서 어떠한 이름 서비스 스위치도 지원하지 않으며 그와 연관된 getxxbyyy 루틴도 지원하지
않습니다.    하지만, NIS+ 4.X 서버에서는, 모든 NIS+ 명령을 실행할 수 있습니다.


* NIS+로 전환하면 성능에 문제가 생길 수 있습니까?
   정상적인 상황에서는, 아무 영향도 없을 것입니다.           사실 몇 가지는 더 빨라집니다. 예를 들어,
NIS+에서 su 를 하는 것이 매우 빨라집니다.


   네트워크로 전달되는 패킷의 수가 증가할 수 있습니다.            493 릴리즈에서 그 문제를 처리할 수 있기를
바랍니다.


* NIS+와 관련하여 이미 알려진 주요 문제들은 무엇입니까?


   NIS+ 서버는 (NIS 호환 모드로 실행하면) 4.X 클라이언트에서 보내는 NIS 요청을 처리할 수 있지만
이름 서버로 4.X DNS 요청을 전달할 수는 없습니다.        이것은 다른 DNS 도메인과 대화할 수 없음을
의미합니다.    이러한 문제는 이름 서비스를 이용해 적절한 액세스를 하는 Solaris 2.0 클라이언트에서는
발생하지 않습니다.


   이 설치 방식은 아직 완벽하다고 볼 수 없습니다.          이 문제는 향후의 릴리즈에서 처리될 것입니다.


* 데스크탑에 NIS+를 설치할 때 어떤 문제가 있습니까?


   NIS+를 실행하려면 Solaris 2.0 이상이 있어야 합니다.
   다음과 같이 변경하십시오.


        - 도메인 이름을 새 NIS+ 도메인 이름으로 변경하십시오.
        - /var/nis 디렉터리를 만드십시오.
        - NIS+ 서버의 IP 주소를 /etc/hosts 파일에 추가하십시오.
        - NIS 대신에 NIS+를 사용하도록 /etc/nsswitch.conf 파일을 변경하십시오.
        - 이름 서버 항목과 함께 /etc/resolv.conf 파일을 추가하십시오.
        - auto.form 에서 auto_form 의 오토마운터 맵을 참조하도록 /etc/auto 파일을 변경하십시오.
      - cred 테이블에 사용자와 사용자의 컴퓨터를 위한 NIS+ credentials 을 추가하십시오.


* 왜 여러 개의 암호를 사용해야 합니까?        NIS 에서는 하나도 필요하지 않았습니다.


   NIS+는 보안상 안전합니다. 즉, 사용자에게 정보를 알려주기 전에, NIS+ 서버는 사용자가 그 정보를
액세스할 권한이 있는지 확인합니다.        이러한 보안성은 secrue RPC 에 기반하는데, secure RPC 에서는
사용자가 NIS+에 publickey 와 secretkey 를 저장해 두어야 합니다. 사용자의 secretkey 는 passwd 를
사용하여 암호화됩니다.      따라서 chkey 시간에 이 추가 암호를 사용하게 됩니다.          만약 이 passwd 가 login
passwd 와 동일하지 않은 경우, keylogin(1)을 분명하게 해두지 않으면 NIS+ 호출을 할 수 없습니다.


   NIS 는 secure RPC 에 기반하지 않으므로 passwd 가 필요하지 않았습니다.      하지만, 과거에 시간 공유
방식을 사용할 때처럼, 로그인하는데 passwd 가 필요했습니다.
* NIS+ 및 로그인용으로 서로 다른 두 개의 암호를 사용할 수 있습니까?               로컬 파일인 /etc/passwd 파일에
사용자 고유의 내용을 입력해 두면 어떤 영향이 있습니까?


   별도의 암호를 사용할 수 있습니다. 하지만, 그렇게 하면 NIS+ 동작을 실행하기 전에 keylogin(1)을
해야 합니다.    따라서 권장할 만한 방법은 아닙니다.


   /etc/passwd 파일에 passwd 입력 내용을 넣어 두는 것은 이치에 맞습니다. 다만 passwd 테이블의
내용과 동일해야 합니다.
   유일한 문제는 키를 변경할 때 생깁니다.           설치할 때 대개 chkey 를 하게 되는데, chkey 는 사용자 레벨
프로그램이므로 /etc/shadow 파일을 읽을 수 없습니다.
   이 문제를 해결하려면, /etc/nsswitch.conf 의 passwd 내용을 nisplus and files 로 설정하고, chkey 를
실행한 다음 다시 원래의 방식으로 돌려 놓으십시오.
   또한 두 곳에서 passwd 를 변경해야 합니다. 즉, 각각 passwd(1)과 nispasswd(1)을 사용하여 로컬
passwd 파일에서, 그리고 NIS+ passwd 테이블에서 변경해야 합니다.


* 컴퓨터 이름이 다른 사람의 login 이름과 충돌합니다.           어떻게 바로잡을 수 있습니까?         과거에는 문제가
없었는데, 왜 지금은 문제가 생깁니까?


   NIS+의 클라이언트(NIS+ principals 라고 함)는 컴퓨터일 수도 있고 일반적인 사용자일 수도 있습니다.
NIS+ principals 은 use_login.domainname 이나 machinename.domainname 으로 이름이 지정됩니다.   예를
들어, 사용자의 NIS+ principal 이름이 name.eng.sun.com 이고 컴퓨터의 NIS+ principal 이름이
machine.eng.sun.com 이면, NIS+는 이 두 이름을 구분하지 않습니다. 즉, 두 이름은 각자 자신의 연관된
credentials 를 가지고 있으며 NIS+ 액세스 제어 메카니즘은 그 credentials 를 사용하여 정보 액세스에 대한
권한을 허용/거부합니다.


   그렇게 되면, 컴퓨터와 사용자는 동일한 이름 공간을 공유합니다.                 과거에는 이것이 문제가 되지
않았습니다. 누구든 NIS 클라이언트가 되어 NIS 정보를 액세스할 수 있었기 때문입니다.


   대략 10%의 사용자들이 이런 충돌을 경험합니다.             그런 경우, 사용자가 우선권을 가집니다. 즉,
사용자는 이름을 그대로 유지하고, 컴퓨터의 이름을 변경해야 합니다. 컴퓨터용으로 새로운 이름을 선택하고
기존 이름의 별명을 추가하십시오.


* NIS+ 도메인을 액세스하고 동시에 일상적인 작업에는 NIS 도메인(NIS+ 도메인과는 다른)을 사용할 수
있습니까?


   가능하기는 하지만 과정은 다소 복잡합니다. 도메인 이름이 서로 다르지만, /etc/nsswitch.conf 의 모든
항목들이 현재의 도메인 이름에 맞추어 처리되어야 하므로 문제가 생깁니다.
   이 문제를 해결하는 방법은 다음과 같습니다.


   1. # domainname newNIS+domain
   2. /etc/nsswitch.conf 파일을 수정하여 공개키용 파일만 포함하도록 하십시오.                 /etc/publickey
파일에서 "nobody"를 입력하십시오.
   3. ypbind 기능을 해제하십시오.
   4. /etc/hosts 파일에 NIS+ 서버의 IP 주소를 추가하십시오.
   5. # nisinit -c -H server_name
   6. # nis_cachemgr
   7. NIS+ 도메인 이름에 대해 nisls 나 다른 NIS+ 동작을 실행하여 테스트하십시오.
   8. # domainname old_domain_name
   9. ypbind 를 다시 실행하십시오.


   이 방법대로 하면, 이제 NIS+ 테이블을 "nobody"로 액세스하게 되며, 모든 동작에 대해 완전한
디렉터리 이름을 지정해야 합니다.                  또한, 보안성 있는 RPC 호출을 더 이상 할 수 없습니다.




* 최근에 집에 NIS 클라이언트로 486/50 컴퓨터를 설치하여 THICK net 이더넷 드롭을 통하여 로컬
네트워크에 연결하였습니다. 이 컴퓨터는 현재 THIN 이더넷을 사용하고 NIS+나 NIS 는 실행하지 않는 벤더
사이트에 연결되어 있기 때문에 환경 설정에서는 None 으로 지정하였습니다.                        주소는 class B 주소, 즉
130.35.19.70 이고 서브넷 마스크는 ffff0000 입니다.
 하지만, 다음 두 가지 문제가 있습니다.


 1. 다른 컴퓨터와 대화를 할 수 없습니다.
 2. OPENWINHOME 을 실행하면 항상 다운이 됩니다.


   THIN net 을 사용하는 경우, smc 카드가 THIN net 에 맞게 다시 설정되었는지 확인하십시오. 기본값은
일반적으로 THICK net 입니다.


   부팅하는 동안 smc 드라이버에서 오류 메시지가 나오지 않는다면, IRQ 와 I/O 주소가 정확한 것입니다.
하지만, 공유 메모리 주소 충돌이 있을 수 있습니다. 보통 디스크 컨트롤러와 충돌합니다.


* Solaris 86 을 사용하는 PC 에서 NIS+를 사용하려고 합니다. NIS+ 마스터 서버로는 SS2 가 설치되어 있고,
NISD 는 보안 수준 0 으로 실행되고 있습니다.              NIS+ 클라이언트를 설치할 때는 answerbook 의 지시대로
따라 했습니다.       Sparc2(NIS 서버)에 markl 이라고 하는 계정이 만들어졌습니다.             홈 디렉터리는
/home2/markl 에 있고, /home/markl 의 홈 경로를 지정하는데 오토마운터를 사용하고 있습니다.


Markl 이 Sparc2 로 로그온하는 데는 문제가 없습니다.            하지만, Solaris86(Intel box)에서 markl 로
로그인하려고 하면, markl 에 암호가 없으므로 암호를 만들어야 한다는 메시지가 나옵니다.                           passwd
명령("passwd"라는 단어가 화면에 나옵니다)을 실행해도 markl 계정이 생기지 않습니다.                         그 다음에
로그인으로 되돌아갑니다.             markl 이 루트로 로그인하고 csh 를 실행하여, markl, cd ~markl, niscat
passwd.orig_dir 를 설정하면 passwd 데이터를 볼 수 있습니다.                   그 중에 markl 의 항목이 있습니다.   또한,
junk 로 설정할 경우에는 junk 가 유효한 계정이 아니라는 것을 지정한 것입니다.                         NIS 바인딩은 제대로
되는데 로그인만 되지 않는 것 같습니다.


또한, markl 은 NIS 클라이언트(NIS+가 아님)로 SunOs 4.1.2 를 실행하는 시스템으로 간 후 markl 로
로그인할 수 있습니다.


 Sparc 기반의 NIS+ 마스터 서버에서 NIS+ 클라이언트를 테스트해 보았습니까? 누군가 좋은 해결 방안을
알려주시기 바랍니다.


   다음은 이 문제를 해결하는 방법입니다.


   우선, 이 문제는 nisaddent "passwd" 명령을 사용하여 passwd 테이블을 이식할 때 사용되는 passwd
파일 때문에 생기는 것으로 보입니다.                 이 파일이 5.X passwd 파일이며 따라서 passwd 테이블의 "shadow"
컬럼에 이식할 수 없다고 간주합니다.
   이 경우 sysadmin 이 그에 해당하는 shadow 파일로 nisaddent 명령을 실행해야 합니다.


   예를 들면 다음과 같습니다.


       #    cat /etc/passwd | nisaddent -v passwd
       #    cat /etc/shadow | nisaddent -v shadow


   하지만, 이 경우에 해당하는 shadow 파일을 이용할 수 없으므로 passwd col 이 비어 있었고, 아무도 이
컴퓨터로 로그인할 수 없었습니다.


   Workaround #1:


   이 문제를 해결하는 방법은 다음과 같습니다.


  /etc/passwd 파일에 암호화된 패스워드가 들어 있어야 합니다.


       #    cat /etc/passwd | nisaddent -v passwd
       #    awk -F: '{printf("%s:%s:6445::::::\n", $1, $2)}'
      /etc/passwd > /tmp/shadow
      #    cat /tmp/shadow | nisaddent -v shadow


   해결 방법 #2:
    이 문제를 해결하는 또 다른 방법은 nisaddent 의 -y 옵션을 사용하는 것입니다. 이 방법은 실행되는
YP 도메인 설정이 있는 경우에만 적용됩니다. 먼저 passwd 맵을 컴퓨터로 ypxfr 처리한 다음 nisadent -
y 를 사용하십시오.


         #   /usr/lib/netsvc/yp/ypxfr -c -d YP_DOMAINNAME -h YP_SERVER
         passwd.byname
         #   /usr/lib/nis/nisaddent -y YP_DOMAINNAME passwd


    이 방법을 사용하면, awk 스크립트를 실행할 필요가 없으며, 모든 것이 제대로 작동이 됩니다.


* NIS+ 서버를 이용할 수 없었고 클라이언트가 로그인을 허용하지 않았습니다.


    nsswitch.cont 파일에서 다음 두 줄을 변경하십시오.


        passwd:     files nisplus
        group:      files nisplus


    변경 내용:


        passwd:     files [NOTFOUND=return] nisplus
        group:      files [NOTFOUND=return] nisplus




* /etc/nsswitch.conf 에서 networks: nis [NOTFOUND=return] files 로 기본값을 정하는 것은 어떤 의미가
있습니까?


    기본 설정된 nsswitch.conf 파일에 "[NOTFOUND=return]"이 포함되어 있는 이유는 기본 작동 방식이
4.x 와 호환이 되도록 하는 것입니다. 4.x 에서는 "'nis'를 이용할 수 없는 경우에 대개 'files'를 "보기만"하게
하는 정책을 따르고 있습니다.               따라서, 항목의 값이


        networks:   nis [NOTFOUND=return] files


    이면 4.x 호환 문제가 없습니다




_____________________________________________________________
Admintool 및 Host Manager 의 설치


네트워크 분야에서 Solaris 2.x 에 대해 자주 제기되는 질문/대답




* Host Manager 와 User Account Manager 에서 이름 서비스 선택은 무엇을 의미합니까?


 NIS+, NIS, None 등을 선택하는 것은 일반적으로 네트워크 별로 결정됩니다.
일반적으로 네트워크 상에서 Host Manager 나 User Account Manager 를 시작할 때마다 동일한 방식으로
지정해야 합니다.      호스트나 사용자 별로 이름 서비스를 변경하지 마십시오.            특정한 이름 서비스에서
저장한 특정한 데이터베이스의 특정한 레코드를 수정해야 한다면, 보다 낮은 레벨의 툴인 Database
Manager 를 사용할 수 있습니다.




문) 이름 서비스가 항상 동일해야 한다면, Host Manager 와 User Account Manager 에서 선택을 요구하는
이유는 무엇입니까?


답) 먼저, admintool 이 항상 올바른 답이 무엇인지 알 수 없으므로 사용자에게 확인을 요구하게 됩니다.
그리고 두번째로, sysadmins 의 환경 설정을 특이하게 하면 때때로 선택된 이름 서비스를 무시해야 합니다.




문) Host Manager 를 통하여 클라이언트를 추가할 때 각 호스트마다 다른 이름 서비스를 선택할 수
있습니까?


답) 간단하게 말해서 "안됩니다".        네트워크 상에서 중앙 집중식으로 관리하는 모든 Solaris 호스트는 동일한
이름의 서비스(들)을 사용해야 합니다.           Solaris 가 다른 이름 서비스(NIS+), 새로운 시스템 관리 툴
세트(admintool), 데이터베이스에 의한 이름 서비스 룩업 순서를 제어할 수 있는 기능(/etc/nsswitch.conf)
등을 갖추고 있기는 하지만, 여전히 네트워크 상에서 중앙 집중식으로 관리되는 모든 호스트가 동일한 이름
서비스(들)을 사용할 것으로 기대합니다.


불행하게도, admintool 툴의 외형때문에 일부 사용자들은 Solaris 호스트마다 서로 다른 이름 서비스(들)을
사용하는 것은 완전한 자동화 및 투명성을 위한 것이라는 생각하는데 이는 잘못된 결론입니다.




문) 네트워크 상의 모든 Solaris 호스트가 동일한 이름 서비스(들)을 사용해야 한다는 규칙에 예외가
있습니까?
답) 있습니다. NIS 에서 NIS+로, 또는 None 에서 NIS+로 쉽게 전이할 수 있도록 몇 가지 지원 기능이
마련되어 있습니다.       경험있는 사용자들은 None 옵션을 사용하여 몇 가지 테스트 환경 설정을 할 수
있습니다.    매우 숙련된 사용자는 워크스테이션의 /etc/nsswitch.conf 파일을 수정해보고 싶을 것 입니다.


문) 모든 Solaris 호스트가 동일한 이름 서비스(들)을 사용해야 한다는 말은 한 가지 이름 서비스만 사용해야
한다는 뜻입니까?


답) 그렇지 않습니다. 일반적으로 호스트는 로컬 이름 서비스와 네트워크 이름 서비스를 복합적으로
사용하여 독립적으로 부팅하고 정상적인 동작을 손쉽게 할 수 있으며, 네트워크용 정보를 로컬 정보로
대체할 수 있습니다.       예를 들어, /etc/nsswitch.nisplus 템플릿을 사용하면 passwd, group, automount,
aliases 등에 대한 로컬 설정값이 네트워크용 정보보다 우선적으로 적용되게 할 수 있습니다.




문) /etc/nsswitch.conf 가 매우 융통성이 있는 것처럼 보이는데, 그 중의 일부는 사용이 되지 않습니다.                      이
파일은 무엇에 쓰이는 것입니까?


답) 처음에 /etc/nsswitch.conf 를 만든 이유는 Ultrix 의 경우와 비슷하게, gethostbyname()이 어디에서 어떤
순서로 나타나는가를 사용자들이 완벽하게 통제할 수 있게 하는 것이었습니다.                          사용된 구현 방식은 너무
간단하면서도 너무 강력했기 때문에 단순히 gethostbyname( ) 호출이 아니라 대부분의 이름 서비스 룩업도
처리할 수 있도록 그 용도를 확장하였습니다.               모든 사용자들이 이 뛰어난 유연성을 이용할 수 있게
되었습니다.


분산형 시스템인 Solaris 에서는, 네트워크 이름 서비스가 NIS+, NIS, None 중의 어느 것이냐에 따라
/etc/nsswitch.conf 의 세 가지 기본 환경 설정(nsswitch.nisplus, nsswitch.nis, nsswitch.files 템플릿) 중의
하나만 사용합니다.       gethostbyname() 호출에 대해 DNS 를 작동시키는 간단한 변경 부분이
/etc/nsswitch.nisplus 내의 주석에 포함되어 있습니다.




문) None 이름 서비스 옵션이 마련된 이유는 무엇입니까?


답) None 이름 서비스 옵션을 만든 주된 이유는 NIS 나 NIS+를 실행하지 않는 고객들을 지원하려는
것입니다.    그런 고객들은 대부분 중심 컴퓨터에 /etc 환경 설정 파일의 마스터 복사본을 저장해 두고
'rdist'나 그와 비슷한 툴을 사용하여 모든 워크스테이션으로 그 복사본을 브로드캐스팅합니다.


None 이름 서비스 옵션을 마련한 두 번째 이유는 네트워크용 정보보다 우선 적용되는 로컬 정보를
지원하려는 것입니다.


None 이름 서비스 옵션을 마련한 세번째 이유는 NIS 로 프로그램 방식으로 업데이트하는 기능이 없기
때문에 보완하기 위한 것입니다.
끝으로, None 이름 서비스 옵션을 이용하면 이름 서비스를 업데이트할 수 없거나 업데이트하고 싶지 않는
사용자들이 데모 환경 설정이나 테스트 환경 설정을 빠르게 해 볼 수 있습니다.




문) 클라이언트를 추가할 때 다른 이름 서비스를 명시하면, Host Manager 가 "그것을 바로잡습"니까?      예를
들어, 네트워크가 NIS+를 실행하고 있는 상태에서, None 을 지정한 다음 데이터가 없는 새 클라이언트를
추가할 경우, Host Manager 는 이 새로운 클라이언트가 NIS+ 도메인 전체에 인식되도록 모든 올바른 파일을
제대로 업데이트합니까?


답) 그렇지 않습니다.


그러한 모든 혼합적인 환경 설정이 제대로 작동될 수 있도록 파일 서비스 및 이름 서비스를 혼합적으로
구성하는 방법은 없습니다.     Host Manager 가 아무리 노력을 해도, 일부 구성은 절대로 작동이 되지
않습니다.   Solaris 에서는 동일한 네트워크 상에서 서로 다른 종류의 이름 서비스 클라이언트를 지원하지
않습니다. 이것은 admintool 툴에서 단순히 제한한 것이 아닙니다.




문) admintool 툴은 NIS 를 어떻게 지원합니까?


답) 모든 NIS 맵은 모든 admintool 툴에서 읽을 수 있습니다.


어떠한 NIS 맵도 admintool 툴을 사용하여 프로그램 방식으로 업데이트할 수 없습니다. NIS 를 사용하는
네트워크 상의 admintool 툴 사용자들은 수동 프로시저를 실행해야 합니다.      이 프로시저에는 None 이름
서비스를 사용하는 척하고, /etc 파일의 변경 내용을 포착하며, 수동으로 그 변경 내용을 NIS 마스터 파일에
병합하고 NIS 맵을 고치며, /ect 파일을 깨끗이 정리하는 등이 작업이 수반됩니다.      새로운 정보는 수동
프로시저 중에 시작된 모든 푸시 동작이 완료될 때까지 전체 NIS 도메인에 알려지지 않을 것입니다.


이러한 수동적인 문제 해결 프로시저의 일환으로 None 이름 서비스 옵션을 사용한다거나, 일부 admintool
툴을 사용하여 그 수동 프로시저를 화면 상에서 작업하더라도, admintool 툴은 동일한 네트워크 상에
존재하는 다른 Solaris 호스트들이 서로 다른 이름 서비스들을 사용하지 않은 것으로 간주한다는 사실은
달라지지 않으므로 유의하시기 바랍니다.




문) NIS 를 선택하여 맵 업데이트 관련 작업을 하려 할 때 Host Manager 에서 나오는 메시지는, NIS
업데이트가 지원되지 않는 이유가 혼성 OS 버전들과 어떤 연관이 있으며 향후 변경이 있을 것이라는 암시를
합니다.   이것이 사실입니까?
답) 그렇지 않습니다. OS 버전을 어떤 식으로 구성해도 프로그램 방식으로 NIS 로 업데이트하는 것이
가능하지 않습니다.         그렇기 때문에 어떠한 admintool 툴도 절대로 NIS 를 업데이트하지 않습니다.


Host Manager 에서 나오는 메시지의 의도는 단지 이 툴이 NIS 를 프로그램 방식으로 업데이트할 수 없으며
사용자에게 수동으로 업데이트하는 방법을 알려주는 것입니다.                           불행하게도 이 메시지는 원래 의도보다 넓은
의미로 해석될 수 있기 때문에 일부 사용자들에게 오해를 사는 것 같습니다.




문) admintool 툴이 NIS 를 자동으로 업데이트할 수 없는 이유는 무엇입니까?


답) NIS 프로토콜은 프로그램을 사용하여 업데이트하는 것을 지원하지 않습니다.                        SunOS 4.x 에서 NIS 를
업데이트하는 유일한 방법은 NIS 마스터에 있는 파일을 수정한 다음 `ypmake`를 실행하는 것이었습니다.
Solaris 는 조금도 다르지 않습니다.


사실, Solaris 는 'ypserv'를 전혀 지원하지 않습니다.             고객들이 시스템을 NIS 에서 NIS+로 전이할 것을
권장합니다.      NIS+는 보안성이 훨씬 뛰어나고 성능도 개선되었으며, 프로그램을 사용하여 업데이트할 수
있습니다.     NIS+에서 전이 작업을 쉽게 할 수 있도록 "NIS compatibility mode"를 지원합니다.




문) 프린터가 NIS+ 프린터라는 것은 무슨 뜻입니까?


답) Printer Manager 는 시스템 관리자들의 편의를 위하여 전체 네트워크에 존재하는 "등록된" 프린터 목록을
관리합니다.      일반적으로 시스템 관리자들은 로컬 영역의 각 프린터를 설치할 때 목록에 그 프린터를 등록한
다음, 나중에 클라이언트의 프린터 원격 액세스를 설정할 때 그 목록을 참조합니다.


등록된 프린터 목록은 NIS+가 저장하게 되는데, "registered"라는 라벨보다 "NIS+"라는 라벨이 버튼에 더 잘
맞습니다. 이 프린터들을 NIS+ 프린터라고 부르게 된 것은 바로 그 이유 때문일 뿐입니다.                         "lp" 서브
시스템은 등록된 프린터 목록에 대해 전혀 모릅니다.                      등록된 프린터와 등록되지 않은 프린터의 작동은
조금도 다르지 않습니다.




_____________________________________________________________




IP 인터페이스


네트워크 분야에서 Solaris 2.x 에 대해 자주 제기되는 질문/대답
문) IP 와 네트워크 드라이버 간의 인터페이스에 대한 설명 자료 즉, DLPI 버전 2 규격에서 설명되지 않은
SUN 의 특정 요구사항이 있습니까?


답) IP 는 Solaris 2.X 의 STREAMS 모듈입니다. 따라서 IP 를 가진 모든 모듈이나 드라이버 인터페이스는
STREAMS 메커니즘을 따라야 합니다. IP 와 네트워크 드라이버 간의 인터페이스에 대해서는 특정한 요구
사항이 없습니다.




문) ifconfig device0 plumb 를 실행하면, 드라이버는 즉시 DL_INFO_REQ 를 수신합니다. Style 2
프로바이더가 보낸 DL_INFO_ACK 에는 정확하게 무엇이 필요합니까?


답) /usr/include/sys/dlpi.h 에서 'dl_info_ack_t' 구문을 살펴보시기 바랍니다.




문) 드라이버가 CLONE 드라이버이면서 동시에 DLPI Style 2 프로바이더가 되는 것이 가능합니까?


가능합니다.




문) 그렇다면, 오픈 루틴 내에서 선택된 minor number 를 DL_ATTACH_REQ 이전의 인스턴스에 어떻게
매핑합니까? minor number 를 사용하여 getinfo 루틴에서 인스턴스를 얻는 방법은 DL_ATTACH_REQ
이전에는 유효하지 않습니다. 어떻게 처리하면 됩니까?


답)   'DL_ATTACH_REQ' 요청은 스트림에 물리적인 연결점(PPA)을 할당하기 위한 것입니다.
'DL_ATTACH_REQ' 요청은 파일이나 스트림이 열린 후 언제든지 보낼 수 있습니다. 하지만,
'DL_ATTACH_REQ' 요청이 minor/instance number 를 할당하고 검색하고 매핑하는 것과 어떤 관계가 있다고
생각하지 않습니다. 물론, 원하는 major/minor number 가 있는 파일이나 스트림에 대한 'DL_ATTACH_REQ'
요청을 보낼 수 있습니다. minor number 를 인스턴스에 매핑하는 문제의 경우, 일반적으로 minor
number(getminor(dev)가 instance number 입니다.




문) 예제에서 드라이버의 attach 루틴을 호출할 때마다 minor 노드가 생성됩니다. 어떻게 하면 CLONE
드라이버가 다수의 보드에 연결이 됩니까?, 즉 여러 인스턴스를 가지면서 한 개의 minor 노드만 생성될 수
있습니까?


답) CLONE 드라이버의 경우, 그것이 가능한지 잘 모르겠습니다. 비-CLONE 드라이버의 경우, 'FF'와
같은특정한 minor number 의 비트 정보를 사용하여 다른 모든 minor 노드를 매핑할 수 있습니다.
문) Solaris 2.1 TCP/IP 는 스트림을 지원합니까???


답) 지원합니다. TCP 와 IP 는 Solaris 2.1 의 STREAMS 모듈입니다.
'strconf < /dev/tcp' 명령을 사용하면 이 모듈을 볼 수 있습니다.




문) SunOS 4.x TCP/IP 는 스트림을 지원합니까??


지원하지 않습니다.


문) Solaris 2.1 이더넷 드라이버는 LLI 2.0 인터페이스를 지원합니까???


답) 'DLPI'(Data Link Provider interfaces)를 말씀하시는 것입니까?
Solaris 2.1 이더넷 드라이버, 즉 le 와 ie 는 모두 DLPI 를 지원합니다.              매뉴얼에서 le 와 ie 에 관한 부분을
참조하시기 바랍니다.




문) Solaris 2.1 DLPI 는 연결 중심 서비스와 비-연결 방식 서비스를 모두 제공합니까? 또한, 사용하는
DLPI 는 멀티캐스트 기능이 내장된 버전 2.0 입니까?


답) 그렇습니다. 매뉴얼에서 'dlpi'에 관한 부분을 참조하시기 바랍니다.


문) SunOS 4.x 에서 멀티캐스팅을 지원합니까? 지원하지 않는다면, 고객이 이 기능을 어떻게 확보할 수
있습니까?


답) IP 멀티캐스트는 Solaris 2.x 에서 기본 지원 기능이지만, SunOS 4.x 에서는 지원하지 않습니다. 지원되지
않는 IP 멀티캐스트를 SunOS 4.x 컴퓨터에서 실행하고자 할 경우, 이 기능을 공개 도메인 객체 배포
사이트에서 구할 수 있습니다. 이는 IP 멀티캐스트 창안자인 Steve Deering 에 의해 배포되고 있습니다.                      이
배포판은 익명 FTP 를 통하여 gregorio.stanford.edu 의 vmtp-ip/ipmulti-sunos41x.tar.Z 파일에서 구할 수
있습니다.




_____________________________________________________________




RPC 와 TLI 에 관한 질문


네트워크 분야에서 Solaris 2.x 에 대해 자주 제기되는 질문/대답
문) 프로그램에서 t_open 과 t_bind 와 같은 TLI 함수를 사용하고 있습니다.                    t_bind 호출을 할 때,
M_PROTO 가 아니라 M_DATA ioctl 을 갖는 이유는 무엇입니까?                      영구적으로 이렇게 할 계획입니까?


답) t_bind() 함수는 로컬 관리를 하기 때문에, M_DATA ioctl 은 적절한 메시지 블록입니다.




문) 매킨토시용 RPC 개발자용 킷을 찾고 있습니다.
도와주시겠습니까?


답) 아마 'Apple'을 호출하면 관련된 정보를 알아내실 수 있을 것입니다.




문) Solaris 2.1 은 XTI 인터페이스나 TLI 인터페이스를 지원합니까?


답) Solaris 2.1 은 TLI 을 지원하며 조만간 XTI 도 지원할 것입니다. "Solaris 2.1 Standards Conformance
Guide"를 참조하시기 바랍니다.
AnswerBook 에서 'TLI'를 검색해 보셔도 됩니다.




문) SunOS 4.1 은 XTI 인터페이스나 TLI 인터페이스를 지원합니까?


답) SunOS 4.1 은 TLI 인터페이스를 지원합니다. 매뉴얼에서 't_open', 't_bind', 't_snd', 't_close' ... 등에
관한 부분을 참조하시기 바랍니다.




_____________________________________________________________




NFS 호환성


네트워크 분야에서 Solaris 2.x 에 대해 자주 제기되는 질문/대답


문) Solaris 2.x 가 클라이언트로 설정된 상태에서, 파일 시스템이 익스포트된 것으로 dfshares 에서
나타나는데도 HP-UX 나 AIX 기종에서 nfs 마운트를 하면 제대로 되지 않습니다.                         "Server not
responding"이라는 오류 메시지가 나타납니다.
답) 다음과 같은 해결책을 제안합니다.(Solaris 2.x 기종에서 사용)


     1. /etc/system 에 다음 두 줄을 덧붙이십시오.


     set nfs:nfs_portmon=0
     set nfs:nfs_fastpath=0


     2. 해당되는 경우 /etc/group 에서 루트가 6 에 속하는 그룹의 수를 줄이십시오. 일반적으로 루트가
11 그룹 이상에 속하는 경우 그러한 문제가 발생합니다.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:32
posted:10/5/2012
language:Korean
pages:135