UNIX/SUN

[스크랩] 솔라리스10 u10 기본 설정 - 윈디하나의 솔라나라

99iberty 2014. 6. 19. 19:00

http://www.solanara.net/solanara/solaris10

 

 

솔라리스 10 u10 기본 설정 - 윈디하나의 솔라나라

목차

개요

  • 소프트웨어 설치 문서에 생략되어있는 공통 설정 사항에 대해, 솔라리스 10 u10 기준으로 설명하는 문서이다.
  • 솔라리스 10의 주요 기능은 다음과 같다. Adam Leventhal's Weblog에서는 다음 기능도 주요 기능으로 소개하고 있다. 필자도 수긍하는 내용이다. (현재는 블로그 폐쇄)
    • libumem(3lib): 유저랜드 메모리 할당자
    • pfiles(1): 파일 이름이 같이 나옴
    • coreadm(1M)
    • System V IPC 설정 변경시 시스템 재시작 할 필요 없음
    • kmdb(1)
    • Watchpoints
    • pstack1: 자바 스택도 분석 가능
    • pmap(1): 쓰레드 스택, 시그널 스택 영역을 [anon]으로 표시 하지 않음
    • 쓰레드 기반 p-tools: 쓰레드 번호 보임
    • Event Ports: poll(2), select(3c)보다 빠른 I/O 멀티플렉싱(Multiplexing). 윈디하나의 솔라나라: Event Multiplexing (작성중)
  • LD_LIBRARY_PATH와 PATH 환경변수는 반드시 일치해야 한다.
  • 본 문서는 솔라리스 10 u11 64bit를 기준으로 작성했다. 자신의 솔라리스 버전 및 업데이트 번호는 아래와 같이 확인할 수 있다.
    root@wl ~ # cat /etc/release 1)
                        Oracle Solaris 10 1/13 s10x_u11wos_24a X86
      Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
                                Assembled 17 January 2013
    root@wl ~ # isainfo -kv
    64-bit amd64 kernel modules 2)
    root@wl ~ # 
    
    1) [오라클 솔라리스 10, 2013년 1월 배포, 업데이트번호는 11, x86버전]이라는 의미다.
    2) 64비트 x86 커널을 사용하고 있다는 의미다. 32비트인 경우 [32-bit i386 kernel modules]와 비슷하게 나온다.
  • 릴리즈별 주요 갱신 내용은 다음과 같다. 더 자세한 내용은 Solaris 10 Operating System Product Library Documentation의 [What's New]를 참고하자.
    • Solaris 10: 2005.01.31 발표, SMF, NFSv4, DTrace, Solaris Container
    • Solaris 10 1/06: GRUB, iSCSI
    • Solaris 10 6/06(U2): ZFS
    • Solaris 10 11/06(U3): Solaris Trusted Extensions, LDoms
    • Solaris 10 8/07(U4): Samba Active Directory, 자원관리, iSCSI 타겟, Solaris Containers for Linux Applicaton(BrandZ)
    • Solaris 10 5/08(U5): CPU 자원관리, SpeedStep + PowerNow 지원
    • Solaris 10 10/08(U6): ZFS 부트및 인스톨 지원, Sun xVM Server 상에서 Guest Install 지원
    • Solaris 10 5/09(U7): Intel Nehalem 지원, ZFS 클론, ZFS on SSD
    • Solaris 10 10/09(U8): ZFS 쿼터 향상, ZFS 캐시
    • Solaris 10 9/10(U9): ZFS raidz3, ZONE 마이그레이션(zPool v22, ZFS v4), 각종 드라이버 지원, LibC 64에서 SSE 지원, AES-NI 지원, 오라클 솔라리스 자동 등록
    • Solaris 10 8/11(U10): ZFS 성능 및 기능 향상(zPool v29, ZFS v5), 2TB 이상 메모리 지원, pginfo, pgstat, diskinfo 추가, libmtmalloc 향상, 플래시 장치를 지원 향상, 인터럽트 제어 개선, Intel AVX 지원, Samba 3.5.8, Bash 3.2
    • Solaris 10 1/13(U11): ZFS 성능 및 기능 향상(zPool v32, ZFS v5), iSCSI장치에서 설치 가능, SSH 속도 개선, Oracle Configuration Manager, Xen Virtual Block Device 지원, USB 3, Samba 3.6.8(SMB2지원), FMA(Intel, AMD), 신형 스팍프로세서(SPARC T5, SPARC M4, SPARC64-X) 지원, Sendmail 8.14.5, Firefox 10, GNU make 3.82

솔라리스 설정

  1. 네트워크 설정 확인

    네트워크가 동작하는지 확인해야 한다. 아직 DNS 설정을 한것이 아니므로, 도메인으로 외부 서버에 접속할 수 없다.
    # cat /etc/hosts 1)
    127.0.0.1       localhost
    192.168.0.3  wl     loghost
    # cat /etc/hostname.pcn0 2)
    wl
    # cat /etc/netmasks 3)
    192.168.0.0    255.255.255.0
    # cat /etc/defaultrouter 4)
    192.168.0.1
    # ifconfig -a 5)
    lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
            inet 127.0.0.1 netmask ff000000
    pcn0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
            inet 192.168.0.3 netmask ffffff00 broadcast 192.168.0.255
    
    1) /etc/hosts에 자신의 호스트 이름과 맞는 IP가 입력되어있는지 확인한다. 이 예제에서 호스트 이름은 wl 이다.
    2) NIC와 호스트이름을 확인한다. pcn0는 솔라리스의 pcn 이라는 NIC의 첫번째 드라이버라는 뜻으로 벤더마다 다르다. (솔라리스 스팍용은 ce로 되어있을것이다) pcn0 인터페이스에 wl 호스트의 IP를 넣을 것이다.
    3) netmask를 확인한다. 필자의 시스템에선 192.168.0.3의 경우 192.168.0.0/24으로 정했다. 따라서 넷마스크값으로 255.255.255.0 를 정해주었다.
    4) 기본 라우터를 확인한다. 윈도에서는 게이트웨이라고 부른다.
    5) ifconfig -a 를 해보면 pcn0에 IP및 넷마스크가 입력된 것을 확인할 수 있다. 이 정보가 정확하면, 다음으로 단계로 넘어간다. 만약 정확하지 않다면 위 파일들을 고치거나, /usr/sbin/sys-unconfig 명령을 실행해 재시작후, 네트워크 설정을 다시 한다.
  2. 네트워크 테스트

    예제의 네트워크 구성
    ┌─┐
    │A├──┐
    └─┘ ┌┴─┐ ┌───┐ ┏───┓
        │허브├─┤라우터├─┤인터넷├↔
    ┌─┐ └┬─┘ └───┘ ┗───┛
    │B├──┘
    └─┘
    
    A: 세팅하고 있는 호스트. 192.168.0.3
    B: 이미 세팅되었으며 정상 작동하고 있는 호스트. 192.168.0.2
    라우터: 192.168.0.1
    
    1. 같은 스위치/허브에 물려있는 호스트로 PING 테스트
      # ping -s 192.168.0.2
      PING 192.168.0.21: 56 data bytes
      64 bytes from 192.168.0.2: icmp_seq=0. time=0.943 ms
      64 bytes from 192.168.0.2: icmp_seq=1. time=0.265 ms
      ^C
      #
      
      - 성공시 NIC와 네트워크 케이블, IP세팅, 스위치의 작동은 정상임
      - 실패시 호스트 설정, 호스트에 연결되어있는 케이블 및 NIC 드라이버등을 점검
    2. 라우터로 PING 테스트
      # ping -s 192.168.0.1
      PING 192.168.0.1: 56 data bytes
      64 bytes from 192.168.0.1: icmp_seq=0. time=1.37 ms
      64 bytes from 192.168.0.1: icmp_seq=1. time=0.683 ms
      ^C
      #
      
      - 성공시 라우터(게이트웨이)까지 가는 장비 스위치/허브들도 정상임. 라우터도 응답 하고 있음.
      - 실패시 네트워크 관리자 및 라우터 관리자에게 문의 (라우터가 PING응답을 하지 않도록 설정한 경우도 있음)
    3. 외부 호스트로 PING 테스트
      # ping 211.204.126.106
      211.204.126.106 is alive
      #
      
      - 성공시 라우터의 설정이 정상적으로 되어있으며 네트워크는 정상적으로 작동함
      - 실패시 네트워크 관리자 및 라우터 관리자에게 문의 (외부에 있는 임의의 호스트가 PING응답을 하지 않도록 설정한 경우도 있음)
      211.204.126.106는 솔라나라의 IP다. (아직 ICMP Echo를 막지 않았다) 여기까지 잘 되면 네트워크 설정은 마무리 된 것이다. 아래의 도메인 테스트는 옵션이다.
    4. 도메인 서버 설정 및 테스트
      # cp /etc/nsswitch.dns /etc/nsswitch.conf
      # vi /etc/resolv.conf
      domain xxxx.com
      search xxxx.com
      nameserver 168.126.63.1
      nameserver 168.126.63.2
      # ping www.solanara.net
      www.solanara.net is alive
      #
      
      - 성공시 호스트의 도메인 서버 세팅 및 도메인 서버가 제대로 작동함
      - 실패시 호스트의 도메인 서버 세팅 확인 및 도메인 서버 관리자에게 문의 또는 다른 도메인 서버 사용
      168.126.63.1와 168.126.63.2는 한국통신의 DNS 서버이다. 자체 도메인서버이 있는 경우 그 서버를 지정해주면 된다. 도메인이 없는 경우 domain, search 부분은 생략한다.
    5. 접속 테스트
      - ICMP패킷이 올바르게 전송되는지만 확인해도 좋지만, 확실히 하기 위해 TCP 패킷까지 보내보는 것이 좋다. 외부의 호스트에 telnet/ssh 접속한 후 다시 자기 서버로 telnet/ssh 접속해보는 방법을 사용해 본다. 어떠한 명령을 줘야 할 지는 각자의 환경에 따라 다르기 때문에 구체적인 예는 생략하겠다. SSH에 대한 설명은 윈디하나의 솔라나라: SSH를 참고하자.
  3. 디스크 용량 확인

    • 솔라리스를 설치했으면, 각 볼륨의 크기가 원하는 대로 설정되어있는지 바로 확인해야 한다. 설치 직후에 확인하고 수정하는 것이, 서버 운용 중에 발견해 고치는 것보다 훨씬 쉽기 때문이다.
    • 특히 swap 과 dump 공간의 크기가 작다면 지금 수정하고 재시작 하는 것이 좋다. [# zfs set volsize=2G rpool/swap; shutdown -y -i 6 -g 0] 커맨드를 이용해 크기를 다시 정의할 수 있다.
    • 솔라리스 10 u6부터 부팅용 파일 시스템도 ZFS를 이용해 설치할 수 있다. 게다가 2개 이상의 디스크가 있고 설치시 두개 모두 선택하면 인스톨러에서 자동으로 ZFS 미러링 해준다. 아래는 160GB인 SATA 디스크 2개를 AHCI로 전체 설치한 예이다.
    # df -h
    파일시스템             크기   사용   가용   용량    설치지점
    rpool/ROOT/s10x_u10wos_17b
                           147G   4.0G   134G     3%    /
    /devices                 0K     0K     0K     0%    /devices
    ctfs                     0K     0K     0K     0%    /system/contract
    proc                     0K     0K     0K     0%    /proc
    mnttab                   0K     0K     0K     0%    /etc/mnttab
    swap                   6.4G   968K   6.4G     1%    /etc/svc/volatile
    objfs                    0K     0K     0K     0%    /system/object
    sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab
    /usr/lib/libc/libc_hwcap1.so.1
                           138G   4.0G   134G     3%    /lib/libc.so.1
    fd                       0K     0K     0K     0%    /dev/fd
    rpool/ROOT/s10x_u10wos_17b/var
                           147G    81M   134G     1%    /var
    swap                   6.4G    80K   6.4G     1%    /tmp
    swap                   6.4G    28K   6.4G     1%    /var/run
    rpool/export           147G    23K   134G     1%    /export
    rpool/export/home      147G    21K   134G     1%    /export/home
    rpool                  147G    32K   134G     1%    /rpool
    # zpool status
        풀: rpool
      상태: onLINE
    스크럽: 요청된 항목이 없습니다.
      구성:
            NAME          STATE     READ WRITE CKSUM
            rpool         onLINE       0     0     0
              mirror-0    onLINE       0     0     0
                c0t0d0s0  onLINE       0     0     0
                c0t1d0s0  onLINE       0     0     0
    오류: 알려진 데이터 오류가 없습니다.
    # zfs list
    NAME                            USED  AVAIL  REFER  MOUNTPOINT
    rpool                          12.3G   134G  32.5K  /rpool
    rpool/ROOT                     4.05G   134G    21K  legacy
    rpool/ROOT/s10x_u9wos_14a      4.05G   134G  3.97G  /
    rpool/ROOT/s10x_u9wos_14a/var  80.6M   134G  80.6M  /var
    rpool/dump                     4.00G   134G  4.00G  -
    rpool/export                     44K   134G    23K  /export
    rpool/export/home                21K   134G    21K  /export/home
    rpool/swap                     4.25G   139G    16K  -
    #
    
  4. 솔라리스 패치 - 권장패치를 이용하는 방법

    • 솔라리스 권장 패치파일은 [운영체제를 위한 오라클 프리미엄 지원]을 구매하면 My Oracle Support를 통해 받을 수 있다. 원하는 버전과 아키텍처를 선택한후 다운로드 하면 된다. 이 압축 파일은 솔라리스 전체 패치가 아니라 권장 패치이다. README 에는 어떠한 패치가 포함되어있는지 나와있다. Oracle Technology Network Patching Center, Oracle Premier Support for Operating Systems에서 자세한 내용을 읽어볼 수 있다.
    • 오라클은 솔라리스를 1년마다 업데이트해 내놓고 있다. 이것을 이용해 업그레이드 하면 최신 패치를 설치한 것과 동일한 효과를 가질 수 있다. 실무에서는 이런 정책으로 실행 못하지만, 학습이나 개발용으로는 무리 없다.
    • 여의치 않다고 생각되면 솔라리스 커널을 사용한 다른 배포판들을 설치해보자. 윈디하나의 솔라나라: Nexenta 소개와 NCP 설치를 읽어보자.
    # unzip 10_x86_Recommended.zip
    # cd 10_x86_Recommended
    # ./install_cluster -nosave 1)
    Are you ready to continue with install? [y/n]: y
    Installing xxxxxx-yy...
      Installation of xxxxxx-yy failed. Return code z. 2)
    # sync
    # sync
    # sync
    # init 6
    
    1) 패치 클러스터는 패치 언인스톨을 위해 관련 파일을 압축해 저장해 놓는데 이 파일의 크키가 꽤 크다. 게다가 압축률 안좋은 .Z 확장자로 압축한다. /var/sadm/pkg/*/save/*/*.Z 파일이 그것이다. -nosave옵션을 주면 이를 생성하지 않을 수 있다. 단 패치의 언인스톨은 불가능해진다.
    2) z에 리턴된 코드중 2, 8, 35번은 무시해도 좋다. 코드에 대한 전체 설명은 윈디하나의 솔라나라: 솔라리스 패치 메시지 코드를 참고한다.
    2 Attempt to apply a patch that's already been applied
    8 Attempting to patch a package that is not installed
    35 Later revision already installed
  5. 솔라리스 패치 - smpatch 를 이용한 방법

    smpatch는 일종의 자동 업데이트 프로그램이다. 솔라리스 10과 함께 제공된다. 이를 사용하려면 썬에 등록해야 하는데, 등록비용은 무료이다. 등록된 장비 내역은 Sun Inventory에서 확인할 수 있다.
    # cp /usr/lib/breg/data/RegistrationProfile.properties /tmp 1)
    # vi /tmp/RegistrationProfile.properties 
    userName=사용자아이디
    password=사용자패스워드
    # /usr/sbin/sconadm register -a -r /tmp/RegistrationProfile.properties
    sconadm이 실행되는 중
    사용자를 인증하는 중 ...
    finish registration!
    # rm /tmp/RegistrationProfile.properties 
    # smpatch get 2)
    patchpro.backout.directory      -       ""
    patchpro.baseline.directory     -       /var/sadm/spool
    patchpro.download.directory     -       /var/sadm/spool
    patchpro.install.types          -       rebootafter:reconfigafter:standard
    patchpro.patch.source           -       https://getupdates1.sun.com/
    patchpro.patchset               -       current
    patchpro.proxy.host             -       ""
    patchpro.proxy.passwd           ****    ****
    patchpro.proxy.port             -       8080
    patchpro.proxy.user             -       ""
    # smpatch analyze 3)
    메시지 생략
    # smpatch download 4)
    (으)로 패치 다운로드 /var/sadm/spool...
    xxxxxx-yy has been validated.
    메시지 생략
    # smpatch update 5)
    에서 패치 설치 /var/sadm/spool...
    xxxxxx-yy 적용되었습니다.
    메시지 생략
    설치 정책이 허용하지 않는 업데이트의 ID가 파일에
    기록되었습니다.6)
            /var/sadm/spool/disallowed_patch_list
    설치한 하나 이상의 업데이트를 활성화하려면 시스템을 종료해야 합니다. 시스템 종료를 시작하려면 다음 명령 중 하나를 사용해야 합니다.
    o 펌웨어 프롬프트로 이동 - init 0 또는 shutdown -i 0
    o 시스템 전원 끄기 - init 5 또는 shutdown -i 5
    o 시스템 재시작 - init 6 또는 shutdown -i 6
    # sync
    # sync
    # init 6 7)
    
    1) 등록을 하지 않았다면 등록한다. 한번만 하면 된다. 아이디가 없다면 My Sun Connection에 접속해 등록하면 된다. 별도의 비용을 지불하지 않으면 한개의 계정에 최대 5개의 호스트를 등록할 수 있다. (더 등록하려면 계정을 더 생성하면 된다. 당연하지만 주민등록번호 안 받는다 ^^)
    2) 등록이 완료되면 패치프로의 설정 내용을 확인한다. [patchpro.patch.source]가 위와같이 나오는지 확인한다. 프록시를 사용하는 경우 [smpatch set patchpro.proxy.host=xxx.xxx.xxx.xxx]와 같이 지정해 주어야 한다.
    3) 패치를 분석해본다. 설치되어있지 않은 패치번호가 나올 것이다.
    4) 패치를 다운로드 한다. /var/sadm/spool 에 패치를 받는다. 생략 가능하다. 하단에 나오는 [smpatch update] 명령에 필요한 패치를 자동으로 다운로드해준다.
    5) 패치를 적용한다. /var/sadm/spool 에 받은 패치를 실행시킨다. 만약 설치해야할 패치가 다운로드 되지 않았으면 다운로드 한다.
    6) 허용하지 않는 패치에 대한 설명은 아래를 참고한다.
    7) 시스템을 재시작한다. 패치를 위해 재시작하는 경우라면 [reboot]명령을 사용하지 않는것이 좋다.

    ※ [설치 정책이 허용하지 않는 업데이트]의 설치
    1. [smpatch add -x idlist=/var/sadm/spool/disallowed_patch_list]명령으로 설치한다. 이는 설치 정책을 무시한다.
    2. 위와 같이 할 것이 아니라면, 설치 정책을 바꾸는 방법도 있다. (권장하지는 않는다)
    [[smpatch set patchpro.install.types=interactive:rebootafter:rebootimmediate:reconfigafter:reconfigimmediate:singleuser:standard]]와 같은 명령을 주면 된다.
    - 단 주의해야할 사항이 있다. [설치정책이 허용하지 않는 업데이트]란 보통 [적용후 바로 재시작해야하는 업데이트] 또는 [싱글모드로 전환해 적용해야 하는 업데이트]이다. 보통 이런 업데이트는 커널 업데이트와 드라이버 업데이트가 포함된다. (즉 중요하기 때문에 안할 수 없는 업데이트라는 뜻이다) 바로 부팅하지 않아도, 싱글모드가 아니어도 위 명령을 주면 업데이트되지만, 썬에서 심심해서 패치를 분류해 놓는 것이 아닐 것이다. (매우 드물지만 패치하다가 시스템이 다운되는 경우도 있다. 커널 패치하다가 다운된 상황을 생각해보라. ^^; 다행이도 필자는 한번도 겪어본적이 없지만, 실행중이던 어플리케이션이 종료되면서 코어덤프되는 경우는 몇번 있었다)
    ※ 수동패치해야하는 패치(예를 들어 SMPATCH LIVE UPGRADE)는 [smpatch add -i 121431-31]처럼 수동으로 설치한다.
  6. root의 기본 셸과 홈 디렉토리를 변경

    root 사용자의 홈 디렉토리는 / 이다. 이를 변경해주는 것이 루트로 작업하기 쉬워진다. root 사용자의 기본셸은 /sbin/sh 로 되어있는데 불편하지 않다면 변경하지 않아도 좋다. 아울러 패스워드 암호화 방식도 MD5로 변경하는 것이 좋다.
    # mkdir -m 700 /root
    # vi /etc/passwd
    root:x:0:1:Super-User:/root:/bin/bash
    # vi /etc/security/policy.conf
    CRYPT_ALGORITHMS_ALLOW=1,2a,md5,5,6 1)
    CRYPT_DEFAULT=md5 2)
    # passwd root 3)
    새 암호:
    새 암호를 다시 입력하십시오:
    passwd: 암호(root용)가 성공적으로 변경되었습니다.
    # exit 4)
    
    1) 사용할 수 있는 알고리즘을 나타낸 것으로 이는 /etc/security/crypt.conf 에 연결되어있는 약어이다.
    __unix__: Unix Crypt 알고리즘
    1: BSD MD5 알고리즘
    2a: BSD Blowfish 알고리즘
    md5: Sun MD5 알고리즘
    5: SHA256 알고리즘 (Solaris 10 u6 이상부터 지원)
    6: SHA512 알고리즘 (Solaris 10 u6 이상부터 지원)
    2) __unix__를 md5로 변경한다. 8자를 초과하는 패스워드도 지원해준다. 이후 패스워드 변경시 /etc/shadow 파일의 패스워드 필드가 [$md5]로 시작하는 것을 볼 수 있다. 참고로 패스워드 필드에서 *LK*는 잠금상태, NP는 로그인 불가상태를 의미한다.
    3) __unix__로 암호화 되어있는 패스워드를 MD5로 암호화 하기 위해 root 패스워드를 한번 더 변경한다.
    4) 로그오프한 후 다시 로그인 해본다. 홈 디렉토리가 존재하지 않거나 기본 셸 설정을 잘못했으면 로그인이 안되는데 이를 확인하기 위함이다. (한마디로 위 작업중 오타가 발생하면 루트로 로그인이 안된다) 로그인이 안된다면 윈디하나의 솔라나라: 싱글 모드를 참고해 수정한다.
  7. 기본 설정(LD_LIBRARY_PATH, PATH 설정)

    솔라나라에서는 본셸계열의 셸을 사용하기 때문에, /etc/profile를 변경해야 한다. 가장 아래줄에 다음과 같이 추가해준다. 로그인 스크립트에 관련된 사항은 윈디하나의 솔라나라: Bash를 참고하자.
    # vi /etc/default/init
    ...
    LANG=ko_KR.UTF-8
    # vi /etc/profile
    ...
    tty -s && stty cs8 -istrip defeucw
    if [ "$TERM" = "dumb" ] || [ "$TERM" = "dumb-" ]; then
    	LANG=C; export LANG;
    fi
    case "$0" in
    bash | -bash)
    	PS1="\u@\h \w \\$ "
    	if [ "$0" == "-bash" ]; then
    		if [ -f ~/.bashrc ]; then
    			. ~/.bashrc
    		else
    			export HISTCONTROL=erasedups
    			alias ll="/usr/bin/ls -alhF"
    			alias pp="/usr/bin/ps -eo 'user,pid,ppid,nlwp,time,comm,s,project,zone,class,pri,rss,pmem'"
    		fi
    	fi
    	;;
    sh | -sh)
    	PS1="`/usr/ucb/whoami`@`hostname` "
    	case `/usr/xpg4/bin/id -u` in
    		0) PS1="${PS1}# ";;
    		*) PS1="${PS1}$ ";;
    	esac
    	;;
    esac
    export PS1
    EDITOR=vi; export EDITOR
    CC=cc; export CC
    CXX=CC; export CXX
    PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/openwin/bin:/usr/platform/`/usr/bin/uname -i`/sbin; export PATH
    LD_LIBRARY_PATH=/usr/local/xml/lib:/usr/local/ssl/lib:/usr/local/db/lib:/usr/platform/`/usr/bin/uname -i`/lib:/usr/local/lib:/usr/lib:/usr/ucblib:/usr/ccs/lib;export LD_LIBRARY_PATH
    MANPATH=/usr/man:/usr/local/share/man:/usr/sfw/man:/usr/openwin/man:/usr/X11/man:/opt/sunstudio12.2/man; export MANPATH
    PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig; export PKG_CONFIG_PATH
    # vi .bashrc
    export HISTCONTROL=erasedups
    alias ll="/usr/bin/ls -alhF"
    alias pp="/usr/bin/ps -eo 'user,pid,ppid,nlwp,time,comm,s,project,zone,class,pri,rss,pmem'"
    export PROMPT_COMMAND='RET_VALUE=$?; if [ "$RET_VALUE" != "0" ]; then RET_VALUE="${RET_VALUE} "; else RET_VALUE=""; fi'
    export PS1="${RET_VALUE}${PS1}"
    # cp .bashrc /etc/skel/
    
    • 이 문서에서 가장 중요한 부분이 PATH 환경변수 세팅과 LD_LIBRARY_PATH 환경변수 세팅이다. 꼭 맞춰주자.
    • .bashrc의 내용중 PROMPT_COMMAND는 직전 실행했던 커맨드의 리턴코드가 0이 아닌 경우 출력하기 위해 넣은 것이다.
      root@wl ~ # nonexissts
      -bash: nonexissts: command not found
      127 root@wl ~ # ls -al nofile
      nofile: 해당 파일이나 디렉토리가 없음
      2 root@wl ~ # ls -al src/
      총 50051
      ...
      root@wl ~ #
      
    • 솔라리스 콘솔도 컬러를 지원하기 때문에 안시 코드를 이용해 컬러를 넣을 수 있다.
      PS1="\u@\h ^[[1;31m\w^[[0m \\$ "; export PS1
      
      처럼 입력할 수 있다. ^[[의 ^[부분은 안시 이스케이프 코드(ANSI Escape Code)로, vi에디터의 입력 모드에서, Ctrl+V를 누르고 ESC키를 눌러 입력해야 한다.
  8. SAR, NTPD 활성화

    • SAR(System Activity Reporter)를 활성화 하고 NTP(Network Time Protocol) 데몬을 활성화한다. SAR는 시스템 정보를 일정간격으로 수집하고, NTPD는 시간을 맞춰주는 데몬이다.
    • SAR
      # svcadm enable sar
      # EDITOR=/usr/bin/vi; export EDITOR
      # crontab -e sys 1)
      0 * * * 0-6 /usr/lib/sa/sa1
      20,40 8-17 * * 1-5 /usr/lib/sa/sa1
      5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A
      
      1) 주석만 풀어주면 된다.
    • NTP
      • VirtualBox나 VMWare Workstation를 포함한 가상화 소프트웨어에서 솔라리스를 구동한 경우, NTP설정을 할 필요 없으며 해서도 안된다.
      • 여기에서는 NTP 데몬을 이용한 타임서버 동기화 방법을 설명했다. [rdate] 를 이용해 cron에 등록시키켜 사용하는 방법도 많이 사용하지만 NTP를 사용하는 것이 오차를 훨씬 더 줄일 수 있다.
      • 자세한 사항은 윈디하나의 솔라나라: NTP를 참조한다
      # vi /etc/inet/ntp.conf 1)
      server ntp1.sjtel.net
      server ntp2.sjtel.net
      # svcadm enable ntp
      
      1) ntp1.sjtel.net(ntp1.epidc.co.kr) 의 NTP서버를 사용했다. 사용하고 있는 ISP나 IDC에 다른 시간 서버가 있다면 그걸 사용하는게 더 좋다.
  9. 사용자 추가

    # useradd -d /export/home/windy -c "윈디하나" -g staff -m -u 101 -s /bin/bash windy 1)
    xx 블록
    # passwd windy
    새 암호:
    새 암호를 다시 입력하십시오:
    passwd: 암호(windy용)가 성공적으로 변경되었습니다.
    # 
    
    1) 관리자가 주로 사용할 계정을 생성한다. (당연한 말이지만 꼭 windy가 아니어도 된다. 솔라나라와 똑같이 하라는 말 때문인지, 사용할 계정 이름까지 까지 똑같이 하는 경우를 봤다. 많이 봤다. ㅎㅁ) 8자를 초과하는 아이디를 가진 계정을 생성하면 [UX: useradd: xxxxxxxxxx name too long.]과 같은 메시지가 발생하지만 생성 되어있다. (그리고 정상적으로 사용 가능하다)
  10. 솔라나라에 필요한 작업

    솔라나라의 문서는 주로 wget을 이용해 받고, (GNU)tar를 이용해 압축을 풀기 때문에 wget이나 GNU tar 를 설치해야 하지만 솔라리스 번들을 사용해도 된다. 솔라나라에서는 /usr/sfw 의 소프트웨어들을 사용하지 않는다.
    # mkdir -p /usr/local/bin
    # cd /usr/local/bin
    # ln -s /usr/sfw/bin/wget wget
    # ln -s /usr/sfw/bin/gtar tar
    
    아래와 같이 하면 wget 에 솔라나라의 루트 인증서를 등록할 수 있다. (설치하지 않아도 아무런 문제 없다)
    # cd /etc/sfw/openssl/certs
    # wget http://www.solanara.net/ca.crt
    # HASH=`/usr/sfw/bin/openssl x509 -hash -noout -in ca.crt`.0
    # mv ca.crt $HASH
    
  11. SendMail

    [My unqualified host name (wl) unknown; sleeping for retry], [unable to qualify my own domain name (wl) -- using short name]와 같은 메시지가 나오는 경우, /etc/mail/sendmail 에 도메인을 지정(Dj 매크로 사용)하면 된다. 자세한 사항은 윈디하나의 솔라나라: Sendmail + SSL + SASL, QPopper을 참조한다. 만약 도메인이 없다면 아래와 같이 [호스트명.local.]을 /etc/hosts 에 등록시켜 메시지가 나지 않게 할 수 있다.
    # vi /etc/hosts
    xxx.xxx.xxx.xxx		wl.local.	wl	loghost
    
  12. 재시작

    반드시 재시작해야 할 필요는 없지만, 설정 확인을 위해 한번 재시작해본다.
    # sync
    # sync
    # shutdown -y -i 6 -g 0
    

관리 콘솔

  • 솔라리스 10에는 2가지의 관리 콘솔이 있다. 하나는 Solaris Management Console이고 다른 하나는 Sun Java Web Console이다. Sun Java Web Console은 솔라리스 10에 새롭게 추가된 콘솔이다. 여기서는 간단히 언급만 하는 정도로 끝내겠다.
  • Solaris Management Console

    • 솔라리스의 전반적인 내용을 관리할 수 있도록 만든 어플이다. 사용자 관리, 디스크 관리등등이 가능하다.
    • 필요하지 않다면, [# svcadm disable svc:/application/management/wbem:default]명령을 사용해 기능을 끄면 된다.
    • Solaris Management Console
    root@wl ~ # /usr/sbin/smc
    
  • Java Web Console

    • 솔라리스에 설치되어있는 서비스에 대한 웹 콘솔 이다. 현재는 파일 시스템만 관리할 수 있다. 여기서는 간단히 소개만 하겠다. 자바 웹 콘솔에 대해서는 별도의 페이지에서 자세히 다룰 예정이다.
    • 필요하지 않다면, [# svcadm disable svc:/system/webconsole:console]명령을 사용해 기능을 끄면 된다.
    • 로컬호스트 이외의 호스트에서 접속하려면 외부 접속 제한을 해제 해야 한다. [svccfg -s svc:/system/webconsole setprop options/tcp_listen = true; smcwebserver restart]명령을 사용하면 된다.
    • Sun Java Web Console
    https://localhost:6789/으로 접속한 후 root 로 로그인한다. (로컬호스트에서만 가능하다)
    ZFS 관리를 선택한다.
    왼편의 메뉴에서 파일 시스템을 선택한다.
    여기서 각각의 파일 시스템을 관리할 수 있다. ZFS에 대한 내용은 별도의 페이지에서 다룰 예정이다.

컴파일러/기본 라이브러리 설치

※ 아래에 소개된 프로그램을 설치한다. 솔라나라의 문서를 적용하려면 반드시 설치해야 한다.

  1. 컴파일러의 선택, cc vs gcc

    • 솔라리스에서 사용할 수 있는 컴파일러는 cc와 gcc 두가지가 있다. cc는 썬(오라클)에서 만든 C 컴파일러로 Solaris Studio(Forte C Compiler, Sun Studio)를 말하고, gcc는 GNU C컴파일러를 말한다.
    • 솔라리스 10부터 gcc가 번들되어있다. /usr/sfw/bin 에 설치되어 있으며 버전은 3.4 이다.
    • 솔라리스에서 어플리케이션을 소스로 컴파일 해 설치하기로 마음먹었다면, gcc와 cc 둘 중 하나를 선택해야 한다. 예전엔 cc가 유료인 관계로 하는수 없이 gcc를 사용했지만 현재는 무료이기 때문에 cc를 사용할 수 있다.
    • gcc와 cc를 혼합해서 쓰기엔 여러가지 문제가 있다. 아직까지는 솔라리스를 제대로 지원해주는게 cc라고 생각되기 때문에 솔라나라에서는 cc를 사용하며, 최신버전인 Solaris Studio 12.2를 기준으로 삼았다. 그러나 gcc를 사용해도 되도록 고려했기 때문에 호환성 부분에 대해 걱정하지 않아도 된다. Sunfreeware - Freeware Open Source Software for Sun Microsystem's Solaris의 gcc나 솔라리스 기본 설치된 gcc(/usr/sfw/bin/gcc)를 사용해도 문제 없다는 의미이다. 실제로 어플리케이션이 컴파일시 gcc만을 요구하는 경우 솔라리스에 이미 설치되어있는 gcc를 이용해 컴파일 할 것이다.
    • 요약하자면 어플리케이션을 cc로 설치할이냐, gcc로 할것이냐를 선택하고, 선택했으면 계속 같은 컴파일러를 사용해야 한다는 뜻이다. 패키지 역시, 소스를 컴파일한 묶음이기 때문에, 패키지 만들때 사용한 컴파일러가 cc인지 gcc인지 확인해야 한다.
  2. Solaris Studio 12.3

    1. SolarisStudio12.3-solaris-x86-pkg.tar.bz2 파일은 Oracle Solaris Studio에서 오라클에 가입한 후 받을 수 있다. 가입은 무료다.
    2. 설치
      root@wl ~/src # tar xvfj SolarisStudio12.3-solaris-x86-pkg.tar.bz2
      root@wl ~/src # cd SolarisStudio12.3-solaris-x86-pkg
      root@wl ~/src/SolarisStudio12.3-solaris-x86-pkg # ./install_patches.sh
      root@wl ~/src/SolarisStudio12.3-solaris-x86-pkg # ./solarisstudio.sh --non-interactive 1)
      root@wl ~/src/SolarisStudio12.3-solaris-x86-pkg # cc -V 2)
      cc: Sun C 5.12 SunOS_i386 2011/11/16
      
      1) 실행후 잠시 기다리면 /opt/solstudio12.3 에 기본 설정으로 설치한다.
      2) 아래와 같이 출력되어야 한다.
    3. 테스트
      helloworld.c
      다운로드 (203 바이트)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      /*
      Print [Hello, World!]
      WindyHana's Solanara http://www.solanara.net/
      cc -o helloworld helloworld.c
      */
      #include <stdio.h>
      int main(int argc, char *argv[]) {
      printf("Hello, World!\n");
      return 0;
      }
      root@wl ~ # cc -o helloworld helloworld.c
      root@wl ~ # ./helloworld
      Hello World!
      root@wl ~ # 
      
    4. 언인스톨
      root@wl /opt/solstudio12.3 # ./uninstall.sh --non-interactive
      Configuring the installer...
      Searching for JVM on the system...
      Extracting installation data (can take a while, please wait)...
      Running the installer wizard...
      
    5. smpatch (위에서 설명) 를 이용하면 cc가 시스템과 같이 패치된다.
    6. 컴파일러를 설치하는 이유는, 시스템에 최적화된 옵션으로 바이너리 파일을 빌드해 더 빠른 수행 속도를 얻기 위함이다. CFLAGS 환경 변수에 [-fast] 옵션 하나만 넣어도 경우에 따라 상당한 성능 향상을 느낄 수 있다. 특히 사용하는 CPU가, 아키텍처가 변경되거나 L2, L3캐시가 큰 최신 CPU를 사용할 수록 차이가 크다. 예를 들어 Sparc64 나 Nehalem, Opteron CPU인 경우 말이다.
      root@wl ~ # vi /etc/profile
      ...
      CFLAGS="-fast"; export CFLAGS;
      ...
      
      단 이렇게 하면 이진 호환성이 떨어진다. 즉 컴파일한 바이너리가 다른 호스트에 호환이 되지 않는 경우가 있다. (다른 CPU를 사용하는 호스트에서 컴파일한 바이너리를 사용하지 못할 수 있다. 네할렘 전용으로 컴파일 했는데, 펜티엄4에서 실행 안된다고 불평할 수는 없다. 따라서 배포(공개)할 목적으로 만들어진 패키지는 -fast 옵션을 넣어 컴파일 할 수 없다). 또한 컴파일러나 옵티마이저의 버그 때문에 오동작 할 우려도 있으니 반드시 테스트([make test]명령 수행) 해야하고, 문제가 있다면 옵티마이즈 레벨을 낮추는 것이 좋다. (CFLAGS="-fast -O3" 옵션 설정) 컴파일러의 옵션에 대한 설명은 Oracle Solaris Studio Release 12.2에서 [C User's Guide - C Compiler Options Reference]를 참조한다.
  3. OpenSSL

    솔라나라에서 소개하는 어플리케이션이 OpenSSL 지원하고 있으면 같이 컴파일 하도록 했다. OpenSSL의 설치 방법및 사용 방법은 윈디하나의 솔라나라: OpenSSL을 참고하자.
반드시 소스 컴파일을 사용해 설치해야 할 필요 없음
솔라나라의 문서는 각종 데몬을 공개된 소스를 이용해 컴파일해 설치하고 있다. GNU패키징, 컴파일, C/C++문법 등을 알면 쉽게 할 수 있지만, 이러한 컴파일 환경을 처음 접하는 사람은 어렵다. 따라서 처음인경우, 컴파일에 의한 설치만 고집하지 않길 바란다. 중요한건 데몬 설치가 아닌 '서비스'다. 3년 정도 해서 익숙해지면 그때가서 해도 늦지 않다. Solaris 11부터는 리눅스의 apt-get이나 yum등과 유사한 IPS(Image Packaging System, pkg(5))를 지원하기 때문에 프로그램을 설치하기 더욱 쉬워질 것이다. (하지만 솔라나라는 계속 소스 컴파일을 소개할 것이다)

완료

  • 여기까지 하는데 보통 10분 정도 필요할 것이다. 많은 서버를 동시에 설치하고 세팅하려면 솔라리스 10의 [플래시 아카이브 기반 설치]나 윈디하나의 솔라나라: 솔라리스 네트워크 설치를 추천한다.
  • 솔라리스는 기본적으로 서버용 엔터프라이즈급 운영체제다. 물론 솔라리스에는 오피스 소프트웨어인 Open Office.org가 번들되어있고, 파이어폭스 웹 브라우저 및 플래시 플러그인이 기본 설치되어있으며, 썬더버드 메일 클라이언트도 기본 제공해준다. 또한 번들된 프로그램만으로도 mp3를 들을 수 있고 일부 형식의 동영상을 볼 수 있지만, 그런 용도를 위해 솔라리스를 사용하는 사람은 아마 없을 것이다. 어떤걸 해야 할지 모르겠다면 윈디하나의 솔라나라: SAMP를 따라해, 자신만의 블로그 서버를 만들어보는 것을 권해본다. (실제 서비스를 할 수는 없어도 말이다) 이걸 마치고 나면 다음엔 어떤걸 해야 할지 알 수 있을 것이다.