2008년 7월 10일 목요일

SUN solaris FAQ

이 FAQ 는 Casper Dik(Casper.Dik@Holland.Sun.Com)에의해 쓰여진 것으로 원저자의
허락에의해  박창민(chang@night.i-land.net)이 한글화하였다.

영문으로 작성된 최신버전은 항상 ftp://ftp.wins.uva.nl/pub/solaris 에서 구할 수
있으며, HTML 버전은 http://www.wins.uva.nl/pub/solaris/solaris2.html 에서 얻을
수 있다.



1. 일반사항

 

 

1.1) Solaris 가 무엇입니까?


Solaris™은 Sun 의 Unix 기반 사용자 환경을 통칭하며, Unix 운영체제 자체와 X11 기
반의 window system 등을 포함하고 있다.

Solaris 1.x 는 SunOS 4.1.x(x >= 1) 를 의미하며, BSD 중심에 몇몇 SVR4 기능과
OpenWindows 3.0 이 포함되어있다.
Solaris 2.x 는 SVR4 기반의 SunOS 5.x 와 OpenWindows 3.x 및 tooltalk 등이 포함된 운
영체제이다.
(더 자세한 정보는 1.5 를 참고하기 바란다.)


1.2) 왜 업그레이드를 해야만 합니까?


Solaris2 는 다른 Unix 시스템과 훨씬더 호환성을 띄고있다. BSD 계열을 제외한 IBM,
HP, SGI, SCO 이들 모두는 System V 계열이며, 상용 Unix 제품 중 유일하게 BSD 계열
이라 불리는 것으로는 BSDI 가 있다.

Solaris2 는 Sun 의 모든 개발기술이 최근 수년동안 집약된 것으로 더 이상의 SunOS 4
운영체제는 발표되지않을 것이다. 이는 이미 Solaris 2 전용으로 발표되는 여러 패키지
들을 살펴보면 알 수 있을 것이다.

대부분의 Sun 소프트웨어들은 Solaris 2.x 기반으로 출시되고있음을 알 수 있을 것이다.

Solaris 2.3 이상은 X11R5 를 기본적으로 내장하고 있으며, NeWS 와 V2/V3
OpenWindows 서버를 싫어하는 사용자들을 위해 X11R5 에 Adobe DPS 기능이 추가된
X 서버를 지원한다.(사실, 이것도 OpenWindows 라고 불리운다) 이것은 MIT R5 또는
XC R6 보다 훨씬 빠르며, Sun 용 그래픽 하드웨어를 모두 지원한다.

Solaris2 는 이와 같이 Solaris1/SunOS4 보다 훨씬 호환성에 중점을 두고있다.


1.3) Solaris 2.x 로 지금 당장 업그레이드를 해야합니까? 아니면, 차후에 해도 됩니까? 아니면 하지 않아도 됩니까?


이 문제는 당신, 당신이 처한 환경, 사용중인 응용프로그램 등의 여러가지 상황에 맞
추어 선택해야할 문제이다. 수년내에 SunOS 4.1.x 는 분명히 3/50 수준에 달할것이며,
Sun 은 더 이상 SunOS 4.x 를 지원하지 않는다.

지금 당장 업그레이드할 필요는 없지만, 분명히 업그레이드를 염두에 두어야할 것이
다.


1.4) Solaris 2 가 무엇입니까? 또, Solaris 2 는 확실히 SVR4 기반입니까?


Solaris2 는 SunOS 5.x 와 OpenWindows 3.x 를 포함하고 있는 운영체제 환경이다.

SunOS 5.x 는 USL 의 SVR4.0 기반이며, SVR4.0 은 AT&T 와 Sun 이 함께 개발한 것
이다. RFS, STREAMS, shared memory 등과같은 것은 SunOS 4.1.x 의 기본 특징이라할 수
있으며, vnodes, NFS, Xview 등은 SVR4.0 의 특징이라할 수 있다.(하지만, RFS 는 Solaris
2.3 에는 제거되어있다)


1.5) Solaris 2.x 는 어떤 기종에서 동작됩니까?


Solaris 2.0 은 데스크탑 SPARCstation 과 몇몇 Sun 기종에서만 동작된다.

Solaris 2.1 (그리고, 2.2 등) for SPARC 은 모든 SPARCstation 과 유사기종, Sun4 계열에서
동작된다. 하지만, 4/110, 4/2x0 계열의 예전 FPU 는 지원하지않으므로, 부동소수점 연
산이 굉장히 느리다.

Solaris 2.5 는 sun4 아키텍쳐를 지원하지않는다. 즉, "uname ?m" 이나 "arch ?k" 가
"sun4"를 리턴한다면 Solaris 2.5 를 운영할 수 없다.하지만, sun4c, sun4m, sun4u 등은 지
원된다. 지원되지않는 시스템들로 sun4/110(SS4 @100Mhz 와 혼동하지말기 바란다),
sun4/2xx, sun4/3xx 등이 있다.

모든 SPARC PROM 버전에서 Solaris 2.x 는 동작되지만, 아래와같은 문제점에 부딪힐
수 있다:
1) PROM 버전이 rev2.6 이상이 아닐 경우 부트 파티션으로 1GB 이상의 파티션을
설정할 수 없다. 주의할 점은 소수점 이하의 숫자들의 크기비교이다. 예를 들어
다음과같은 대소비교를 기본으로 가정한다. 3.0 > 2.25 > 2.10 > 2.9 > 2.1 > 2.0 > 1.6
2) 디스크가 없이 부팅할 경우에는 /tftpboot 디렉토리에 "tftpboot -> ." 이란 링크를
만들어두어야한다.  Admintool 은 이를 자동으로 만들어줄 것이다.

PowerPC 용 Solaris 도 성공적으로 포팅되어 발표되었으며, Solaris 2.5.1 부터 발표된 상
태이다.

Solaris 2.1 과 2.4 x86 버전은 일반 사용자들을 위해 발표되었으며, 고성능 PC 기종에
서 동작된다.
여기서 '고성능' 이란 다음을 뜻한다 : 16MB 이상의 메모리와 80486 를 필요로하며,
2.1 설치를 위해서는 반드시 80387 과같은 부동소수점 연산기능을 위한 CO-processor
가 있어야한다. Solaris 2.4 에서는 이러한 CO-processor 가 필요없어도 동작가능하지만,
있으면 더더욱 좋다고 권장하고있다. ISA, EISA, MCA 와같은 세가지 버스타잎을 모두
지원하며, 몇몇 PCI 장치들도 지원된다. 하지만, 모든 PCI 장치들이 지원되는 것은 아
니다. 더 자세한 정보를 위해서는 3.36 을 참고하기 바란다.

이들을 요약하면 아래와같다.

Solaris   SunOS     OpenWin                Comments
1.0      4.1.1B     2.0
        4.1.1_U1   2.0              sun3 EOL 버전이며, Solaris 라고 명명되지는 않
                                   았다.
1.0.1    4.1.2      2.0               6[379]0-1[24]0 MP
1.1      4.1.3      3.0              SP Viking 지원
1.1C    4.1.3C     3.0              Classic/LX
1.1.1    4.1.3_U1   3.0_U1          4.1.3 + fixes + Classic/LX 지원
1.1.1 B  4.1.3_U1B  3.0_U1          1.1.1B + SS5/SS20 지원
1.1.2    4.1.4       3_414          마지막 4.x 버전

2.0     5.0         3.0.1           sun4c 전용
2.1SPARC 5.1       3.1             1992년 12월에 발표
2.1 x86   5.1       3.1             1993 년 5월에 발표
2.2SPARC 5.2       3.2             1993 년 5월에 발표
2.3SPARC 5.3       3.3             1993 년 11월에 발표

OpenWin 3.3 은 X11R5 기반이며, NeWS 와 SunView 대신 포스트스크립트방식의 화면
을 지원한다. 물론, 여전히 OPEN Look 방식을 채택하였으며, 1995년 봄부터는 Motif
를 기본적으로 탑재하고 있으며, BCP 를 statically 지원한다.

2.3 edition II SPARC      Voyager 와 SparcStation5 를 위한 Solaris 2.3 특별판이다.
2.3 hardware 5/94 SPARC  ??
2.3 hardware 8/94 SPARC  SS5 에 24비트 컬러를 지원하며, POSIX 1003.2 와 Energy Star
                       전원관리, Sun FastEthernet 과 패치를 포함하고 있다.
2.4       5.4       3.4  이때부터 SPARC과 x86 이 동시에 발표되기 시작하였다.
                        Motif 라이브러리와 헤더파일이 제공되었다.
2.4 hardware 11/94        첫번째 SMCC 릴리즈
2.4 hardware 3/95         SSA를 이용해 부팅이되는 두번째 SMCC 릴리즈
2.5       5.5       3.5  UltraSPARC 지원, PCI 지원, NFS V3, NFS/TCP, ACLs, CDE
                        Sendmail V8, 네임서비스 캐쉬, 다이나믹 PPP, Posix thread,
                       Doors(새로운 IPC 매커니즘), libc 용 BSD 함수 지원,
                       /usr/bin 에 BSD 용 프로그램 지원, mixed BCP 지원
2.5 hardware 1/96        Creator3D 지원
2.5.1 Ultra-2 와 Sun Enterprise 서버를 지원한다. 또한, 32비트까지
의 많은 사용자를 지원하며, 64비트 KAIO 와 3.75GB 의 가
상메모리 등을 지원한다.
     2.6    5.6      3.6      큰 파일, JVM + JIT, Hotjava, Web 기반의 AnswerBook, BOOTP/
                            DHCP, SNMP agent 등이 지원된다.


1.6) 4.1.x 운영체제의 옛날 응용프로그램이 Solaris 2 에서 실행됩니까?


SunOS 5.x 에는 "Binary Compatibility" 라는 BCP 모드를 이용해 SunOS 4.1.x 용 바이너
리가 어느정도 실행되게끔 지원을 한다.
하지만, SunOS 4.1.x 용 바이너리가 SunOS 5.x 에서 에뮬레이팅 지원하는 shared library
에 동적으로 링크되어있지 않을 경우에는 실행이 불가능하다. 또한, 동적으로 링크된
바이너리의 경우에도 실행시 시스템에 상당한 부담을 주게된다.

Solaris 2.2 또는 그 이전버전에서 SunOS 4.1.x 용 바이너리를 실행시키려면, 반드시 바
이너리는 모두 동적으로 연결되어있어야한다.


In Solaris 2.3 and 2.4 fully statically linked programs are supported as well. However, they won't obey nsswitch.conf, but use the standard "use NIS if present, fall back to files" approach of SunOS 4.x. Those programs may therefor require a "passwd: compat" line and will only talk to NIS (or NIS+ emulation mode) or read from files.

Starting Solaris 2.5, mixed mode (partly static/partly dynamic) executables are supported. Whether those programs will use /etc/nsswitch.conf depends on precisely how much was dynamically linked.


주의할점은 Sun 은 수년내에 바이너리 호환성을 지원하지않을 것이라는 것이다. 에뮬
레이션을 통한 바이너리 실행보다는 Solaris 2 전용 프로그램을 구입하는 것이 훨씬 현
명한 선택이라고 할 수 있다.


1.7) SPARC 기종의 바이너리는 Ultra SPARC 에서 실행됩니까?


물론, 실행된다. UltraSPARC 프로젝트의 중요한 목표 중 하나가 바로 SPARC 기종과의
하드웨어 및 소프트웨어 호환성을 유지하는 것이다.

만약, 호환되지않는 것이 있다면, 그것은 버그라고밖에 표현할 수 없다!


1.8) 386 기종의 SVR3 기반 응용프로그램이 Solaris 2/x86 에서 실행됩니까?


SPARC 용 바이너리에서와 마찬가지로 에뮬레이션 모드를 통해 SVR3 및 Xenix 용 바
이너리들도 Solaris 2.4 에서 실행되게끔 설계되어있다.

또한, SVR4 386/486 용 응용프로그램들도 물론, 실행가능하게끔 설계되어있다. 그러나,
몇몇 소프트웨어 개발업체에서 개발된 비호환성 프로그램들은 이러한 에뮬레이션 모
드에서도 실행이 불가능하다. 이러한 것의 대표적인 것으로 Unixware 를 꼽을 수 있다.


1.9) XXX 명령의 행방은 어떻게 되었습니까?


Solaris 2 에서 변경되거나 없어진 명령 및 프로그램들로 여러가지가 있지만, 이곳에서
는 아래의 것들에대해서만 언급하기로 하겠다.

a. 해당 명령의 위치가 변경된 것
whoami  /usr/ucb/whoami
make  /usr/ccs/bin/make
hostid  /usr/ucb/hostid
hostname  /usr/ucb/hostname (또는 uname ?n 이용가능)

      주의할 점은 마지마 두 명령은 Solaris 2.5 에서는 다시 /usr/bin 에 위치한다는 점이다.

b. 몇몇 명령들은 없어지거나 새로운 명령으로 교체되었다.

Pstat ?s  swap ?s (스왑 영역의 크기를 보는 명령)
Dkinfo  /usr/sbin/prtvtoc raw_dev_name
Trace  truss
Mount ?a  mountall
Exportfs  share
Bar  cpio ?H bar (읽기 전용)

이런 정보들은 Solaris 2.x Transition Guide 의 Appendix A(명령편)과 Appendix B(시스템콜
편), Appendix C(파일편)에서 자세히 살펴볼 수 있다.

이런 정보들은 2.0 에서 2.1 또는 그와같은 마이너 업그레이드시마다 조금씩 변화를
거쳐왔으며, 해당 정보는 해당 버전별 매뉴얼을 참고하는 것이 가장 좋다. 또한, 이들
매뉴얼은 관리자와 개발자들을 위한 변경내용을 담고있으니 참고하기 바란다.

Solaris 2.x 용 "whatnow" 와같은 명령은 "Admigration Toolkit" 에 포함되어있으며,
Admigration Toolkit 은 아래에서 구할 수 있다 :

 Opcom.sun.ca:/pub/migration_tools/SUNWmigr.tar.Z
 Admigration toolkit HTML documentation/code
 http://www.sun.com/smcc/solaris-migration/tools/tool.html#sunmigr

Sample output :
 % whoatnow hostname
 hostname     4.x command only
 hostname  /usr/ucb/hostname  part of SCP package
 hostname  /usr/bin/uname ?n  alternate command

whatnow 명령은 위와같이 특정 명령이 어떤 방법으로 Solaris 2.x 에서 구현될 수 있으
며, 이들 명령을 대신할 수 있는 방법으로는 어떤것들이 있는지를 알려준다.


1.10) 업그레이드시에는 반드시 SunInstall "upgrade"를 이용해야만합니까?


4.1.x 에서 Solaris 2 로 SunInstall "upgrade" 를 이용해 업그레이드할 수 없다.
SunOS 4.1.x 에서 Solaris 2 로 업그레이드를 위해서는 Admigration toolkit 을 이용할 수
있다.

Solaris 2.1 에서 2.2 또는 2.3 등으로 업그레이드할때에는 현재의 파티션과 pkgadd 등의
정보등을 보존하기위해 "upgrade"를 이용할 수 있다. 하지만, 이때에는 굉장히 설치 진
행속도가 느리며 / 또는 /usr 파티션에 상당한 여유공간을 필요로 한다.

업그레이드를 위해 설치된 패치들을 복원할 필요는 없으며, 2.2 에서는 시스템이 자동
으로 필요한 작업을 대신하게된다. 또한, 2.3 에서는 패치를 복원하는 대신 이들을 시
스템에서 제거한 뒤 시스템을 업그레이드하기 시작한다.


1.11) Solaris 2.x 는 신뢰하고 쓸 수 있을만큼 안정적입니까?


일반적으로 대부분의 응용프로그램과 사용자들에게 있어 안정적이라고 말할 수 있다.
물론, 이에대한 사용자나 관리자의 견해는 충분히 다를 수 있지만 말이다.

Solaris 2.3 에와서 바이너리 호환성 문제도 훨씬 신뢰도있게 지원되며, 어떤면에서는
이러한 면들 때문에 Solaris 2 로의 업그레이드를 긍정적으로 평가하기도 한다. 확실히
Solaris 2.3 에서부터 그 성능은 현저히 개선되기 시작하였다. 물론, 몇몇 부분에 있어
서는 SunOS 4.1.x 에서보다 느리게 동작하는 것이 사실이다.
Solaris 2.3 에 포함된 OpenWindows 역시 SunOS 4.1.x 대에서보다 훨씬 빨라지고 안정
적인 것도 부인할 수 없는 장점이라할 수 있다.

사실, Solaris 2.1 또는 그 이전버전, 심지어는 Solaris 2.2 역시 상위버전으로 업그레이드
하는 것이 바람직하다.

Solaris 2.3 역시 고성능 머쉰에서 재기능을 발휘하지 못하며, 여러명의 동시접속자 작
업을 제대로 처리하지 못한다. 하지만, Solaris 2.4 및 2.5 는 믿지못할 정도로 안정적이
고 효과적인 작업을 지원한다


1.12) 왜 Solaris 2 를 싫어하는 사람들이 존재합니까?


사람들이 Solaris 를 싫어하는데에는 몇가지 이유가 존재한다.

1) 변화 그 자체. 일반적으로 사람들은 변화를 싫어한다. 변화란 말 그대로 새로운 것
을 배우고 익혀야함을 뜻하기 때문이다. 게다가 예전에 적용시켰던 모든 시스템관
련 업무들은 모두 새롭게 적용되어야하며, 결정적으로 시스템내의 여러 명령어체계
에 상당한 변화가 왔다는 것이다.
SunOS 4.x 를 사용함에도 큰 불편이 없는데, 이와같은 번거로움을 감수하고 업그레
이드를 감행할 이유가 없다고 생각하기때문이다.

2) 업그레이드에대한 지원의 불충분. Sun 은 SunOS 4.x 에서 Solaris 2 로의 업그레이드
를 돕기위한 충분한 대안이나 툴을 제시하지 않았다. 대부분의 응용프로그램들은
일반적으로 호환되지않았으며, 다른 상용 Unix 제품들과의 소스코드 호환성 면에서
많은 장점이 있었지만, SunOS 4.x 와는 소스코드 호환성이 뒤떨어졌기 때문이다. 또
한, 여러 유용한 응용프로그램들이 새롭게 발표된 Solaris 를 제대로 지원하지 못한
것도 이런 이유 중 하나라 할 수 있다.

3) 기능의 부실함. 대부분의 사람들이 업그레이드를 시도할 때 새로운 기능들에대한
연구와 공부보다는 예전 기능들이 없어졌다는데 허탈감을 표시하였다. 이러한 것들
의 가장 큰 예로 screenblank 와 clear_colormap 등을 들 수 있다. 또한, 가장 결정적
으로 C 컴파일러가 기본적으로 내장되어있지않다는 것이 가장 최악이라고 불리울
만한 것이었다.

4) 성능의 저하 및 여러 버그들. Solaris 초기버전은 사실 불안정했으며, 그 성능이 보
잘것없었다. 하지만, Solaris 2.5 에서부터 안정적이고 상당히 빠른 속도의 개선으로
이런 문제들은 해결되었다고 할 수 있다.


1.13) 특별히 Solaris 2 를 좋아하는 이유는 무엇입니까?


Solais 2.x 에서는 아래와같은 개선들이 이루어졌기 때문이다.

1) OpenWindows3.3+ (Solaris 2.3 이후부터). X11R5 를 기본적으로 내장하고 있으며,
Postscript 를 표시할 수 있었다. Solaris 2.6 에서는 X11R6 를 기본적으로 내장하고
있다.

2) Motif 와 CDE

3) ANSI-C 와 POSIX 개발환경

4) POSIX thread(2.5)

5) POSIX 및 X/OPEN 개발환경

6) UNIX 95 표준을 따름

7) POSIX shared memory 및 세마포어(2.6)

8) Multi-threaded kernel 및 real threads

9) 커널의 real-time 기능

10) 더욱 빨라진 clock ticks(1000Hz 2.6)

11) 대용량 파일(2.6)

12) True multi-processing

13) 기타 유용한 유틸리티들 : vold, admintoo, Wabi

14) installpatch 를 이용한 간편한 패치의 설치 및 복구

15) "package" 개념의 도입으로 관리가 간편해진 소프트웨어들

16) 전원관리 소프트웨어

17) Access control

18) NFS V3 및 NFS over TCP(2.5+)

19) 개선된 automounter, autofs

20) Jumpstart/autoinstall

21) Better MP support

22) 빨라진 네트워킹(ATM, fastethernet)

1.14) Sun 은 소비자/사용자들의 업그레이드를 위해 어떠한 일들을 하고있나?

Sun 은 최근 구버전 사용자들을 신버전으로의 업그레이드로 안내하기위해 여러가지
안내 문서 및 정보들을 제공한다.

Solaris Migration Initiative homepage
 http://www.sun.com/smcc/solaris-migration/

이 프로젝트는 아래와같은 여러 노력들을 포함하고있다 :

1) PD 소프트웨어의 Solaris 2.x 로의 포팅
2) Solaris Migration Tool : 소스코드 포팅을 지원하기위한 툴 개발
3) Admigration Toolset. SunOS 4 환경을 Solaris 2 로 변경하기위한 도구
4) Appmap : SunOS 4.x/Solaris 2.x 환경에서의 응용프로그램 관리를 위한 툴
5) Solaris Transition CD
6) Solaris 전용 NIS
7) LP tools


1.15) SunOS 4 에서 사용중이던 하드디스크를 Solaris 2.x 에서 사용할 수 있습니까?


물론 사용할 수 있다. Solaris 2.x 에서의 디스크포맷은 SunOS 4.1.x 의 것과 다르지않다.
물론, "fsck ?c" 를 이용해 약간의 수정을 가할 필요는 있지만, 이것도 "dumpfs | head"
또는 "fstyp ?v | head" 의 결과가 "format dynamic" 이라고 나타날 경우에는 필요없게된
다.

UID 가 60002 이상일 경우에는 SunOS 4.x 에서 Solaris 2.x 로 디스크를 옮길 때 약간
의 문제가 발생하게된다. 물론, Solaris 2.5.1 에서는 최대 UID 가 2147483648 로 정의되
어 이러한 문제가 발생하지 않지만 Solaris 2.x 에서 UID 60001 과 60002 는 각각
nobody, noaccess 로 정의되어있다. 만약, SunOS 4.x 하드디스크에서 이들 UID 를 사용
하였다면, 향후 이를 제대로 설정하기 바란다.


1.16) System V IPC 를 어떻게 구동시킬 수 있습니까? IPC 사용시 설정되어있지않다는 에러메세지가 나타납니다.


System V IPC 사용을 위해 특별히 해줘야할 필요는 없다. 다만, "ipcs" 가 다음과같이
말할것이다 :

 IPC status from <running system> as of <date>
 Message Queue facility not in system.
 Shared Memory facility not in system.
 Semaphore facility not in system.

이것은 Message Queue 와 Shared Memory, Semaphore 가 시스템에서 아직 사용되지않았
다는 말이며, 위와같은 메시지가 나타난 이후부터 이들이 초기화될 것이다.

만약, 부팅시에 이들을 초기화하기를 원한다면, /etc/system 에 아래의 내용들을 추가하
기바란다.

 Forceload: sys/msgsys
 Forceload: sys/semsys
 Forceload: sys/shmsys



2. 유용한 정보들



2.1) 매뉴얼들을 갖고있지않을 경우 어떻게 RTFM 을 지킬 수 있습니까?


"RTFM" 이란 "Read The Fine(Fucking) Manual" 의 약자로 예전부터 사용되던 약어이다.
Sun 은 인쇄물의 형태로 매뉴얼을 지금도 판매하고 있지만, 이를 기본적으로 끼워서
팔지는 않는다. 다른 모든 UNIX 시스템과 마찬가지로 Solaris 역시 훨씬 작고도 강력
한 온라인 형태의 "man page" 를 제공한다. 이들을 가리켜 "The Answerbook™" 이라고
하며, 포스트스크립트 파일포맷으로 구성되어있다. 대부분의 의문사항들은 여기에서
다루고있다고 보아도 무방하다.

Solaris 2.x 용 Answerbook 은 아래와같이 여러 조각으로 나뉘어져있다. Solaris 2.5.1 의
경우 다음과같이 여러 개로 구분된다 :

 Solaris 2.x CD :
  Solaris 2.x 사용자 Answerbook
 Solaris Desktop 1.s
  Wabi 2.x Answerbook
  Solaris Common Desktop Environment Answerbook 1.0.x
 Updates for Solaris Operating Environment 2.x
  Solaris 2.x on Sun Hardware Answerbook
 Server Supplement
  NSKit 1.2 answerbook
  Solaris 2.x System Administrator Answerbook
  (Solaris 2.5.1 Supplemental System Admin Answerbook)
  Solaris 2.x Reference Manual Answerbook
 Solstice AutoClient & AdminSuite
  Solstice AutoClient 2.0 Answerbook
  Solstice AdminSuite 2.2 Answerbook
 Solstice Online Disksuite
  DiskSuite 4.0 Answerbook
 Solstice Backup
  Solstice Backup 4.2 Answerbook
 Solaris 2.x Software Developer Kit
  All programming manuals
 Solaris 2.x Driver Developer Kit
  Device driver developer manuals

Desktop 버전에는 처음 두장의 CD 만 제공되며, 세번째 CD 는 SPARC 전용이다. 마지
막 두개의 CD 는 별도로 판매되며, 이를 가리켜 SDK, DDK 라한다. 그외의 것들은
nroff 소스의 형태로 온라인 상에서 구할 수 있다.

Solaris 2.1 과 2.2 에서는 이들 Answerbook 은 OpenWindows 에서만 실행가능하였으며,
MIT X11 에서는 실행되지않았다.

Solaris 2.3 부터 2.5.1 의 Answerbook 은 X 의 DPS 기능을 이용하였다. 즉, Sun 에서
제공되는 OpenWindows 외의 MIT X 에서 Answerbook 을 이용하려면, "answerbook
workaround" 란 별도의 스크립트를 이용해야만된다. 즉, Solaris 2.3 이후의 Answerbook
은 OpenWindows 3.3 또는 X11R5 + DPS 환경에서 실행가능한 것이다. 예를 들어,
X11R5 + DPS 를 운영하는 DEC, IBM, SGI 웍스테이션 등에서도 Answerbook 를 볼 수
있는 것이다.

Solaris 2.6 에서는 Answerbook 을 SGML 포맷으로 배포하였다. 이들은 특별히 제작된
웹서버를 이용해 볼 수 있으며, 예전의 포스트스크립트 포맷도 이 서버를 이용해 컨
버전되어 볼 수가 있게되었다.
Sun 은 Answerbook 을 온라인상에서 이용하게끔하기위해 http://docs.sun.com 을 별도로
운영하고 있다.

하지만, 시스템이 다운되어 부팅조차되지않을 경우에는 이러한 Answerbook을 이용할
수 없기 때문에 적어도 System, Network Administration 매뉴얼은 별도로 구입하는 것이
좋다.


2.2) Why is "man ?k" so confused?


Solaris 의 man 은 매뉴얼페이지의 인덱스로 "windex" 를 이용한다. 물론, 이를 다음과
같이 수동으로 리빌드할 수 있다.
 Catman ?w ?M <man-page-directory>

하지만, 2.1에서는 위와같은 방법을 이용할 경우 "line too long" 이란 에러메시지와함께
잘못된 windex 파일을 /usr/share/man 디렉토리에 만들어두게되며, core dump 를
/usr/openwin/man 디렉토리에 생성하게된다. 실제로, man 은 해당 매뉴얼 페이지가 존재
하더라도 windex 파일에서 찾을 수 없다면 이를 보여주지못한다.

/usr/openwin/man 에 존재하는 "makewhatis" 스크립트는 catman 보다 훨씬 잘 동작한다.
하지만, "makewhatis" 는 기본적으로 /usr/openwin/man 이 아닌 /usr/man 에서 매뉴얼페
이지를 찾게된다. 이를 해결하기위해서는 다음과같이 하면된다 :
 cd /usr/share/man; /usr/openwin/man/makewhatis .
 cd /usr/openwin/man; /usr/openwin/man/makewhatis .

그럼에도 불구하고 여전히 openwin 의 windex 파일은 제대로 동작하지 않을 수 있다.
이럴때에는 직접 "man ?F" 를 이용해 매뉴얼 파일을 읽도록 하는 방법을 사용할 수
있다.

이를 위해 아래와같은 alias script 를 작성해두면 편리하다.

 #!/bin/sh
 if [ $# -gt 1 ?a "$1" ?gt "0" ]; then
  /bin/man ?F ?s $*
 else
  /bin/man ?F $*
 fi


2.3) Solaris 2.x 를 위해 어떤 소프트웨어들이 지원됩니까?


4.x 에서 동작하던 대부분의 상용 프로그램들은 BCP 에뮬레이션을 통해 Solaris 2.x 에
서도 동작하거나, 이미 Solaris 2.x 용으로 포팅되어있을 것이다.
Solaris 2.3 의 BCP 모드는 statically-linked 바이너리를 실행할 수 있으며, Solaris 2.5 의
BCP 모드는 static 과 dynamic 이 혼합된 바이너리도 실행할 수 있다.

또한, 현재 Solaris 에 포팅된 3rd party 응용프로그램들의 현황을 살펴보고싶을 경우에는
"Solaris Demand Center" 에서 관리하는 목록을 E-mail 을 이용해 간편하게 받아볼 수
있다.
Sparc_products@thegift.sun.com 에 메일을 보내면 자동으로 답장메일을 받을 수 있게된
다.

Sun 은 이와 관련한 검색가능한 웹페이지를 제공한다.
 http://www.sun.com/sunsoft/catlink/
또한, Solaris 2.5 관련 공개 프로그램으로의 링크들은 아래에서 찾아볼 수 있다.
 http://smc.vnet.net/solaris_2.5.html

저작권 보호하에 자유롭게 배포될 수 있는 여러 공개용 프로그램들의 Solaris 2.x 로의
포팅현황은 매달 comp.unix.solaris 뉴스그룹에 ric@coronacorp.com(Richard Steinberger)에
의해 포스팅된다.

 Subject: Solaris SW list. Monthly Post
 ftp://sheffield.isl.sri.com/pub/solaris/solaris-sw-list.txt

OS 업그레이드 뒤에도 반드시 설치해야될 몇가지 유용한 프로그램들이 있을 것이다.
만일, 이들이 잘 컴파일되지않을 경우에는 아래의 장소에서 최신버전을 다운받아 설
치해보는 것이 좋을 것이다.

TOP ? a process monitor
 ftp://eecs.nwu.edu/pub/top/
 ftp://ftp.groupsys.com/pub/top/

Lsof ? list open files
 ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/

scsiinfo ? a program that lists SCSI devices
 ftp://ftp/cdf.toronto.edu/pub/scsiinfo/

sysinfo ? a system hardware information program
 ftp://usc.edu/pub/sysinfo/sysinfo.tar.gz

만약, gcc 를 이용하고 있다면, OS 업그레이드뒤 반드시 fixincludes 를 실행하거나 새롭
게 gcc 를 설치해야한다.


2.4) 알아두면 편리한 FTP/WWW 사이트들로 어떤것들이 있습니까?


www.sun.com http://www.sun.com
Solaris transition hoomepage
 http://www.sun.com/smcc/solaris-migration
Solaris 2.x binaries
 http://smc.vnet.net/solaris_2.5.html
Solaris 2.x/SPARC binaries in pkgadd format
 http://sunsite.unc.edu/pub/packages/solaris/sparc/
Solaris 2.x/x86 binaries in pkgadd format
 http://sunsite.unc.edu/pub/packages/solaris/i86pc/
SunSites ? Sun sponsored sites. Lots of good stuff there.
 http://www.sun.com/sunsite/
Solaris at UMBC ? Solaris tips & trics by Vijay Gill
 http://umbc8.umbc.edu/~vijay/solaris/solais.html
ftp.x.org ? the master X11 site
ftp.quintus.com:/pub/GNU ? GNU binaries
ftp.uu.net ? UUNET communication archives
 ftp://ftp.uu.net/systems/gnu/solaris2.3
OpCom. (opcom.sun.ca) ? run by Sun Microsystems' OpCom group ? lots of stuff.
Pub/AMToolkit ? Administration Migration (4.1.x to Solaris 2) Toolkit
Pub/binaries ? binaries/man pages for Solaris 2.0 native binaries
Pub/newsletter ? issues of the monthly OpCom newsletter.
Pub/docs ? assorted documentation, papers, and other information. All of the RFCs
Pub/drivers ? information related to device driver writing under Solaris 2.0 as well as a skeleton
SCSI driver
Pub/tars ? compressed tars
Pub/tmp ? place for uploading things to the server
Pub/R5 ? the unadultered MIT X11R5 distribution
Pub/x11r5 ? port of X11r5 to Solaris 2.0, binaries, libraries and headers

Prep.ai.mit.edu ? the GNU mirrors
Joe Shamblin's x86 site at Duke
 ftp://x86.cs.duke.edu/pub/solaris-x86/bins/
server.berkeley.edu:/pub/x86solaris ? x86 stuff
ftp.wins.uva.nl
 pub/solaris : Solaris FAQ 와 html 버전
 pub/solaris/auto-install : auto-install 스크립트


2.5) 알아두면 편리한 FAQ 들로는 어떤것들이 있습니까?


1) Stokely Consulting's list of Sun FAQs
http://www.stokely.com/stokely/unix.sysadm.resources/faqs.s.html#faq.link.sun
2) Obsolete, SunOS 4.x only: Sun Computer Administration Frequently Asked Questions
http://aurora.latech.edu:80/sunadminfaq.html
3) The "Solaris 2 Porting FAQ"
http://www.cis.ohio-state.edu/hypertext/faq/usenet/Solaris2/porting-FAQ/faq.html
4) comp.windows.open-look ? Anything related to OpenWindows or the OPEN LOOK Graphical
User Interface
5) The Sun-Managers mailing list FAQ
ftp://ra.mcs.뮈.gov/sun-managers/faq


2.6) 관련 메일링리스트로는 어떤것들이 있습니까?


먼저 뉴스그룹의 "sun" 관련 모든 그룹들을 읽는 것이 좋다.

1) Florida SunFlash 는 Sun 관리자들을 위한 폐쇄 메일링리스트이다.
여기서는 Sun 을 비롯한 3rd party 벤더들의 새로운 소식과 Solaris Developer's Conference
와같은 컨퍼런스의 각종 정보들에대한 논의가 이루어진다. 자세한 정보를 얻으려면
info-sunflash@sun.com 으로 메일을 보내면 된다.

가입신청은 sunflash-request@sun.com 으로 메일을 보내야하며, Archives 는 solar.nova.edu,
ftp.uu.net, sunsite.unc.edu, src.doc.ic.ac.uk, ftp.adelaide.edu.au 등에서 관리된다.

2) Sun Managers 메일링리스트는 moderator 에의해 관리되는 메일링리스트는 아니지만,
응급사태를 위해서만 사용되는 메일링리스트이다. 가입신청을 한뒤 메일링리스트를
통해 오고가는 정기적인 정책관련 메일을 자세히 읽고난 뒤 메일링리스트로 메일을
보내야한다. 가입신청은 sun-managers-request@eecs.nwu.edu 로메일을 보내면 된다.

3) Solaris x86 메일링리스트는 가입 및 해지신청을 위해 E-mail 의 본문에 간단히
subscribe 또는 unsubscribe 를 써서 solaris-x86-request@mlist.eis.com 으로 보내면 된다.
다이제스트버전은 solaris-x86-digest-request@mlist.eis.com 으로 메일을 보내면되며, 간
단히 아래에서도 살펴볼 수 있다.
http://www.eis.com/html/listmain.html

4) Sun Security Bulletin 공지 메일링리스트
공지전용 메일링리스트로 가입을 위해 "SUBSCRIBE cws user@some.host" 란 메일을
security-alert@sun.com 으로 보내면된다.


2.7) 어떤 책들을 읽어야합니까?


O'Reilly & Associates 에서 UNIX 전문서적을 취급하고 있으니, http://www.ora.com 을 참
고하기 바란다.
SunSoft 역시 Solaris 2 관련 서적을 출판하고있다.
Prentice-Hall 은 AT&T 도큐멘트들을 서적으로 출판하고 있다.

2.8) Solaris 2.x/x86 은 어떤 하드웨어들을 지원합니까?

Solaris 2.x/x86 이 지원하는 최신 하드웨어 정보들은 아래에 제목과 본문에 내용없이
E-mail 을 보내면 된다.
 X86hcl@sun.com (ascii 포맷)
 X86hcl.ps@sun.com (postscript 포맷)

또한, 아래와같이 온라인 상에서도 이들 지원정보를 제공하니 아래를 참고하기 바란
다.
 http://access1.sun.com/certify/hcl.html


2.9) WABI 가 무엇입니까?


WABI 란 Sun 에서 제공하는 MS Windows 에뮬레이터이다. WABI 관련 FAQ 는 제목과
본문없이 E-mail 을 wabi-question@east.sun.com 으로 보내면 된다.

현재 Wabi 에서 실행가능한 응용프로그램관련 정보를 얻으려면 wabi-
apps@east.sun.com 으로 메일을 보내면 된다.

X86 코드를 많이 이용하는 응용프로그램의 경우 당연히 Solaris 2.x/x86 에서 훨씬 빠
르게 실행된다.

현재 제공되는 WABI 최신버전은 Solaris 2.5.1 과함께 발표된 WABI 2.2 이다.

WABI 는 현재 MS Windows 3.1 용 응용프로그램밖에 지원하지 못하며, 향후 95 용 응
용프로그램을 지원할 계획을 갖고있다고한다.

WABI 는 SunOS 4.1.x 에서는 돌아가지않는다.


2.10) SunOS 4.x 에서의 문제점들은 Solaris 2.x 로 업그레이드 후 나아질 수 있을까요?


이 문제는 각각의 상황과 환경에따라 다를 수 있다.

Solaris 2.x 는 1TB 이상의 파일시스템을 지원하며, SunOS 4.x 는 2GB 이상의 파일시스
템 지원을 위해서는 ODS 1.0 을 필요로한다.
Solaris 2.6 과 이후버전은 2GB 이상의 파일을 지원하지만, swap 영역의 경우 여전히
2GB 까지만 지원을 한다. 물론, 여러 개의 2GB 짜리 swap 파일을 만들 수는 있다.

Solaris 2.x 는 이론상으로 동시에 열 수 있는 file descriptor 의 수에 제한이 없지만,
SunOS 4.x 의 경우에는 동시에 256개밖에 열 수 없으며, Sun DBE 1.x 를 설치할 경우
1024개까지 열 수 있다.

Solaris 2.x 는 이론상으로 무수히 많은 가상 터미널을 가질 수 있지만, SunOS 4.x 는
256개의 가상 터미널밖에 가질 수 없다.

Solaris 2.x 는 훨씬 더 많은 스카시 장비를 지원한다.

Solaris 2.x 는 시스템의 설정을 변경하기위해 /etc/system 내의 내용을 변경한뒤 리부팅
하면 되지만, SunOS 4.x 의 경우에는 커널의 설정을 변경하고, 리빌드해야한다.



3. 시스템 관리



3.1) Solaris 2.x 설치를 위해 필요한 하드디스크 공간은 얼마입니까?


Solaris 2.2 의 경우 전체 설치를 위해 필요한 하드디스크 공간은 스왑영역을 제외하고
총 164MB 이다. 일반적으로 아래와같은 실례를 Casper Dik 과 Gil Tene 은 들고있다.

Casper 가 말하길:
|> SOLARIS 는 얼마의 하드디스크를 차지하나요? 424MB 짜리 하드디스크를 사야할지
|> 1GB 짜리 하드디스크를 사야할지 고민입니다.
|>
|> Solaris 2.x 는 일반적으로 SunOS 4.x 와 비슷한 용량을 차지한다.
|>
|> Solaris 와 SunOS 의 파티션별 영역크기를 비교해보면 아래와같다.
|> /   10MB  8MB
|> /usr  78MB  90MB
|> /var  10MB  10MB
|> /usr/openwin 83MB  83MB

이에대해 Gil 이 답장하길:
Solaris 를 전체옵션으로 설치하고, 기타 필요한 gnu 바이너리와 Catalyst CD 와같은
Solaris 관련 패키지들을 설치하였을 경우, 아래와같이 opt 파티션이 할당되었다 :

16852 /opt/SUNWabe
19 /opt/SUNWcg12
7968 /opt/SUNWdiag
721 /opt/SUNWgt
7740 /opt/SUNWits
14609 /opt/cygnus-sol2-1.0

(위의 결과는 "du ?k ?s /opt/*" 의 결과이다)

- SUNWabe 는 Solaris answerbook 관련 패키지이다.
- SUNWcg12 는 cg12 지원을 위한 패키지이다.
- SUNWdiag 는 말 그대로 diagnostics 관련 패키지이다.
- SUNWgt 는 gt 보드 지원을 위한 패키지이다.
- SUNWits 는 xgl3.0 라이브러리 관련 패키지이다.
- Cygnus-sol2-1.0 은 gcc2.0 과 관련 유틸리티등의 패키지 묶음이다.

기타사항 : Solaris 2.1 answerbook 의 전체 용량은 약 164MB 에 달한다. CD-ROM 에서
이를 이용하는 것보다 하드디스크에 직접 설치하기를 권한다. 왜냐하면, 후자의 경우
훨씬 속도면에서 빠르며, CD-ROM 을 이용하지않아도되기 때문에 동시에 CD-ROM 에
서 다른 작업을 할 수도 있기 때문이다.


3.2) 수년동안의 작업들을 Solaris 2 기반으로 변경하려면 어떻게 해야합니까?


1) 손수 수작업으로 이들을 RCS 와같은 유틸리티를 이용해 변경하는 방법이 있을 수
있다.

2) 자동으로 이를 가능하게하기위해 AMToolkit(Administration Migration Toolkit) 등을 이
용해 변경할 수 있다.

3.3) "패키지"가 무엇입니까?

SVR4 의 추가적인 소프트웨어 설치에대한 표준이 바로 "패키지"에대한 기본적인 개
념이라할 수 있다. 대부분의 소프트웨어 개발업체들은 이를 위해 Solaris 2.x 를 위해
이러한 표준에 맞추어 소프트웨어를 제공한다.

패키지들은 pkgadd/pkgrm 명령을 이용해 쉽게 시스템에 설치하거나 제거될 수 있다.
또한, Solaris 2 에는 swm(CRT) 와 swmtool(GUI기반)와같은 유틸리티를 지원한다.

주의할점은 "패키지"를 이용할 경우 /var/sadm/install 디렉토리에 수많은 파일들을 관리
하게되며, 종종 수백 KB 이상되는 파일들이 존재하기도 한다. 이들 파일들은 pkgrm
이나 pkgchk 와같은 명령들을 이용할 경우에 사용되며, 불필요하다고 생각될 경우 지
워도 무방하다. 단, 이 경우에는 pkgrm 와 pkgchk 명령들을 이용할 수 없다.

패키지관련 명령들 :

 pkginfo <pkg> - 지정된 패키지 관련 정보들을 볼 수 있다.
 Pkgadd ?d /<cdrom> /Solaris_2.3 <pkg>
- 지정된 패키지를 시스템에 설치한다.
 Pkgrm <pkg….> - 지정된 패키지들을 시스템에서 제거한다.
 Pkgchk ?q <pkg>  - 해당 패키지들이 시스템에 제대로 설치되어있는지를 확인
 Pkgchk <option> [pkg]
- 설치된 패키지들의 무결정성을 확인한다.


3.4) Why can't I write in /mount over /home?


SunOS 5.x 는 기본적으로 "automounter" 기능이 설정되어있다. Automounter 는 NFS 를
이용하는 시스템을 위해 고안되었으며, 마운트할 필요가있는 파일시스템들을 자동으
로 마운트하여 관리하기위해 사용된다. 물론, NFS 를 사용하지않고 독립적으로 운영되
는 시스템에 있어서는 별 쓸모없는 기능이라할 수 있다.

Automounter 는 기본적으로 /home 디렉토리를 차지하며, 이 디렉토리를 이용해 NFS
관련 작업을 처리한다. 때문에, /home 디렉토리는 평범한 디렉토리처럼 이용될 수 없
다.

Automounter 의 설정을 바꾸려면, /etc/auto_master 란 파일에서 "/home" 로 시작되는 행
을 코멘트처리하고, automount 명령을 이용해 automountd 로하여금 맵을 새롭게 읽어들
이게하면 된다.

NFS 를 사용하지않고, 독립적으로 운영되는 시스템의 경우나 Solaris 2.3 이나 그 이상
의 버전을 운영하는 소규모 네트웍의 경우에는 "/etc/init.d/autofs stop" 를 이용해
automountd 를 중지시킬 수 있다. 또한, 부팅 당시에 이를 안 띄우려면
/etc/rc2.d/SXXautofs 를 /etc/rc2.d/sXXautofs 와같이 바꿔두면 된다. 여기에서 XX 는 시
스템의 버전에따라 다를 수 있는 두자리수 숫자이다.

Solaris 2.2 의 경우는 위와는 과정이 다소 다르다. /etc/init.d/nfs.client 파일에서 if 로 시
작되는 행에서 3행을 코멘트처리하고, 리부팅하면 된다.

이에대한 더 자세한 정보는 O'Reilly 출판의 "Managing NFS and NIS" 를 참고하거나,
ftp://sunsite.unc.edu/pub/sun-info/white-papers 에서 "The Art of Automounting" 를 다운받아
참고하기 바란다.


3.5) 왜 CD 와 플로피에 접근할 수 없습니까?


Solaris 2.2 에서부터 이동식 디스크들을 마운트하기위한 새로운 매커니즘이 고안되었
다. 이것은 바로 volume daemon 이라 불리우는 "vold" 의 출현이며, 플로피나 CD 등이
삽입되는지를 체크하여 이들의 eject 등을 관리하며, 파일매니저와의 연계를 위해
"rmmount" 란 removable media mounter 를 구동시켜주는 역할등을 하였다.

주의할 점은 대부분의 SPARCstation 의 플로피 하드웨어는 미디어의 삽입시 이를 OS
에 자동으로 알려주지 못하므로, "volcheck" 를 미디어 삽입시마다 실행시켜주어야된다
는 점이다.

이 매커니즘의 장점 :
- removable media 를 위해 root 가 매번 mount/unmount 를 해야될 필요가 없다.
- Audio CD 를 넣을 경우 자동으로 "workman" 등이 실행될 수 있다.
- 개발자들의 removable media 관련 개발작업이 더욱 간소화되었다.

단점 :
- /dev/rfd0 를 더 이상 사용할 수 없게되었다. 즉, 이보다 더욱 긴 이름인
/vol/dev/rdsk/floppy0 를 사용해야된다.
- 물론, CD 도 역시 /cdrom/VOLNAME/SLICE 에 마운트된다. 예를 들어,
/cdrom/solaris_2_2/s0 는 Solaris 2.2 CD 의 0번째 slice 를 의미하는 것이다.

예전과같은 매커니즘을 원할 경우에는 /etc/rc2.d/S*volmgt 를 없애고 리부팅하면 된다.


3.6) /etc/passwd 에 왜 패스워드 항목이 없습니까?


System V Release 4 는 "shadow password" 란 새로운 기능을 띄고있다. 즉, 패스워드 파
일의 암호화된 항목은 shadow 파일에 담기게되는 것이다. (Solaris 의 경우 이 shadow
파일은 /etc/shadow 이다) 또한, 이 파일은 임의의 사용자들이 읽을 수 없다.
Passwd 파일은 ls ?l 등과같은 명령들을 위해 world readable 해야하지만, passwd 항목 중
암호화된 항목은 보안상의 이슈이기 때문에 보다 안전히 관리되어야한다.(악의를 띈
사용자에의해 단어비교 등을 통해 crack 될 수 있기 때문이다)

Shadow password 기능은 일반적인 사용자들은 눈치챌 수 없도록 구현되어있다. 이에대
한 자세한 정보는 password 해킹과같은 지식을 요구하기때문이다. 다만, /etc/shadow 파
일이 world readable 해서는 안된다는 점을 짚고 넘어가기 바란다.

3.7) 왜 root 로 rlogin/telnet 할 수 없습니까?

Solaris 2 는 Solaris 1 에비해 보다 안전하게 구현되었다고 말해진다. 예를 들어,
hosts.equiv 파일내에 '+' 와같은 내용은 포함되어있지않으며, console 을 제외한 곳에서
의 root 로의 접근은 일반적으로 불가능하게 설정되어있다. 또한, 기본적으로 모든 계
정은 패스워드를 갖고있어야만 한다. 하지만, 원격지로부터 root 접근을 가능하게하려
면 /etc/default/login 파일내에서 CONSOLE= 이라고 시작되는 행을 코멘트 처리하면 된
다.

CONSOLE 항목은 아래와같은 용도로 사용할 수 있다 :

1) CONSOLE=/dev/console (default) - console 에서만 root login 이 가능
2) CONSOLE=/dev/ttya   - /dev/ttya 에서만 root login 이 가능
3) CONSOLE=   - root login 을 불가능하게함
4) #CONSOLE=   - root login 이 어느곳에서나 가능함

/etc/hosts.equiv 파일도 여전히 지원되지만, 이 파일에는 기본적으로 default 란 것이 없
다.


3.8) 어떻게 패스워드없는 계정을 만들 수 있습니까?


/etc/shadow 파일에서 암호화된 패스워드 항목을 없애는 것 외에도 다음과같은 절차를
거쳐야한다.

/etc/default/login 파일내에서 PASSREQ=YES 를 PASSREQ=NO 로 변경하여야한다. 이렇
게 변경한 내용은 시스템 내의 사용자들의 패스워드가 설정되어있지않더라도 이를 요
청하지않는 영향을 미친다.

다음으로, /etc/shadow 파일내의 사용자 항목에서 암호화된 항목은 다음과같이 없애놓
아야한다 :

user::9092:9999:9999::::


3.9) Anonymous FTP 를 어떻게 설정할 수 있습니까?


Anonymous FTP 설정을 위한 자세한 도움말은 ftp://ftp.math.fsu.edu/pub/solaris/ftp.anony
파일에서 자세히 얻을 수 있다.

Ftpd(1M) 만으로도 Anonymous ftp 서비스를 충분히 운영할 수 있다.

다음으로 주의할점은 ~ftp 홈디렉토리는 nosuid 옵션이 적용된 파티션에 존재해서는
안된다는 점이다. 왜냐하면, chroot 환경을 위해 필요한 device file 이 nosuid 옵션이 적
용된 파티션에서는 제대로 적용되지않기 때문이다.

또한, 보안상의 이유 때문에 ~ftp 디렉토리내의 파일들은 ftp 소유로 되어있어서는 안
된다. 왜냐하면, ftp 소유로 퍼미션이 지정되어있을 경우에는 anonymous user 에의해 파
일의 내용들이 변경될 수 있기 때문이다.

Solaris 2.5 이후버전부터는 /dev/ticlts 와 /usr/lib/libmp.so.1 를 설치하여야한다.

Solaris 2 에서의 Anonymous ftp 서비스 운영에대해서 manual 페이지를 참고하기 바란다.


3.10) Solaris2 또는 System V 시스템에서 SunOS 4.x 또는 BSD 시스템의 프린트 시스템을 어떻게 사용할 수 있습니까?


가장 손쉬운 방법은 GUI 기반의 Admintool 의 Printer Manager 기능을 이용하는 것이다.

일반적으로 System V 기반의 lp 시스템은 BSD 의 그것과는 사뭇 다르다. System V 의
Line Printer System 이 훨씬 자유롭고 적용이 손쉬운 편이라 할 수 있다. 아래에 간단
한 내용을 설명해보겠다. 각각의 명령들에대한 자세한 설명은 해당 manual 페이지를
참고하기 바란다.

먼저 사용중인 Solaris 2 시스템의 이름을 "sol" 이라고 가정하고, SunOS 4.1.x 시스템을
"sun" 이라고 가정하고, 사용하려는 프린터의 이름을 "printer" 라고 가정하자.

Sol # lpsystem ?t bsd sun  # sun 은 bsd 시스템임을 뜻한다.
Sol # lpadmin ?p printer ?s sun ?T unknown ?I any
     # "sol" 에 "sun"의 "printer" 를 이용해 프린트
 할 수 있도록 지정한다.
Sol # accept printer   # queue 를 지정한다.
Sol # enable printer   # 프린트 설정을 완료한다.
Sol # lpstat ?t    # 프린터가 제대로 설치되었는지 확인한다.

이제 아래와같이 기본프린터로 지정하면 된다.

Sol # lpadmin ?d printer

몇몇 시스템에서는 port monitor 를 이용해 제대로 동작하는지 살펴볼 필요가 있다.


3.11) 왜 lp 명령은 invald content type 이란 에러메세지를 나타냅니까?


보다 확실한 이해를 위해서는 printer content type 에대하여 알고 있어야한다. 이를 위해
서는 "lpadmin" 에대한 manual 페이지를 참고하기 바란다.

Transparent mode 로의 사용을 위해서는 아래와같이 하면된다.

Sol # lpadmin ?I any ?p printer

3.12) 인쇄 후에도 큐에 작업이 쌓이는 이유는 무엇입니까?

이 문제는 Solaris 2 의 잘 알려진 버그 중 하나이다. 이 문제는 Solaris 2.5 에서 해결된
버그이다. 각 버전별 패치들은 아래와같다. 101025-xx (2.2), 101317-xx (2.3), 101959-xx
(2.4) 101960-xx (2.4/x86).
이들을 시스템에 설치했는지 반드시 확인해보기 바란다.

만약, Solaris 2.4 또는 그 이후버전을 이용하면서 NeWSprint 소프트웨어를 이용해 프린
터를 이용할 경우에는 반드시 102113-xx 패치를 설치하여야한다. 이 패치는 기본적으
로 Solaris CD 2.4 또는 그 이후버전에 담겨있으므로 확인하고 설치하기 바란다.
또한, 이 패치는 커널 점보패치 101318-55 를 설치한 Solaris 2.3 시스템에도 반드시 설
치하여야한다.


3.13) Are there any alternatives to the system V spooler?


Sun 은 "SunSoft Print Client" 라 불리우는 새로운 프린팅 관련 제품을 발표하였다.
 http://www.sun.com/smcc/solais-migration/tools/tools.html#sspc
이것은 Solaris 2.5 및 2.6 에 번들로 탑재되어있으면 새로운 기능들이 많이 추가되어있
다. 예를 들어 NIS 와 연계하여 사용할수 있는 printcab 과같은 설정들을 할 수 있으며,
클라이언트 측에서 매번 lpsched 를 구동할 필요가 없게된 점 등을 손꼽을 수 있다.

또한, Solaris 플랫폼으로 포팅된 BSD lpr 시스템도 아래의 ftp 서버에서 구할 수 있다.

ftp://ftp.eng.auburn.edu/pub/doug/lpr-sol2-*.tar.gz

3.14) /dev/MAKEDEV 에 무슨일이 생겼습니까? 어떻게 새로운 장치를 추가할 수 있습니
까?

Device driver 들은 동적으로 링크되어있기 때문에, 새로운 장치들을 추가하려면 단지
셧다운 시킨다음 아래와같은 방법으로 시스템을 부팅시키면 된다.
 Boot ?r  # default 디스크가 아니라면 /devices 또는 /dev 디렉토리를 리빌
 드하기위해 드라이브 스펙을 써줘야한다.

만약, SCSI 하드디스크를 추가한다면, 시스템을 리부팅시키지 않아도 된다. 다만, 아래
의 스크립트를 root 권한으로 실행하시만 하면 된다.

#!/bin/sh
#
# add-disk
#
# Runs the commands to make Solaris locate a new disk that
# has been plugged in after the system was booted.
#

/usr/sbin/drvconfig
/usr/sbin/devlinks
/usr/sbin/disks  # or /usr/sbin/tapes for tapes
/usr/ucb/ucblinks  # Compatibility links

exit 0

주의할 점은 위의 스크립트는 시스템에 이미 적어도 하나 이상의 SCSI 디스크가 설치
되어있을 때에만 적용가능하다는 것이다. 왜냐하면, 위의 스크립트는 커널에 SCSI 드
라이버를 올리는 역할을 하는 것이 아니라, 단지 device 관련 심볼릭 링크만을 만들어
주기 때문이다.


3.15) 왜 테잎/CD 플레이어와 새로운 하드디스크/장치들이 인식되지않습니까?


장치들은 설정 당시에 반드시 켜져있어야한다. 또한, 장치를 시스템에 추가한 다음에
는 반드시 boot ?r 을 이용해 시스템 부팅당시에 이들을 커널이 인식하게끔 하여야한
다. 이에대한 부가정보는 섹션 3.14 를 참고하기 바란다.


3.16) /etc/rc 와 /etc/rc.local 에 무슨일이 생겼습니까?


/etc/rc 와 /etc/rc.local 은 여러 개의 새로운 형태로 구분되어져있다. 보다 상세한 내용
은 아래와같다.
/etc/inittab - init 를 이용해 부팅당시 실행될 프로그램들과 언제 이들이 실
행될지를 정의하고 있다.
/sbin/rcS, /etc/rcS.d/* - booting 관련 정보들
/sbin/rc2, /etc/rc2.d/*, /sbin/rc3, /etc/rc3.d/* - 멀티유저 환경을 위한 환경설정

      주의할 점은 /etc/rc*.d/* 파일들은 /etc/init.d 로의 하드링크라는 사실이다.
      System V 의 init 과정은 멀티 런레벨로 구분된다. 일반적으로 level 3 은 "multi user
with networking" 이다.

      /etc/rc*.d 디렉토리에서 스크립트들이 실행될때에는 먼저 K* 스크립트들이 실행되며,
그 뒤를 이어 S* 스크립트들이 실행되게된다. 또한, 같은 디레토리내
의 .sh 쉘 스크립트는 디렉토리내에서 실행될 스크립트들을 위한 환경변
수 설정 등을 위해 사용된다.

기본적인 startup 관련 스크립트는 아래와같은 형태를 띈다.

#!/bin/sh
# Sample init.d script.
# Install a copy under /etc/init.d/your-daemon
# make links to /etc/rc2.d/Sxxyour-daemon (or rc3.d)
# and /etc/rc[01].d/Kxxyour-daemon.
# Scripts ending in .sh are executed with the sh "." command.
# Scripts not ending in .sh are executed as "sh script"

case "$1" in
start)
 # … commands to start daemon ….
 ;;
stop)
 # … commands to stop daemon ….
 ;;
esac


3.17) /etc/rc.local 를 복구할 수는 없습니까?


대답은 "없다"이다. SunOS 4.1.x 시절의 /etc/rc.local 과같은 방식은 Solaris 2 에서 사용할
수 없다. 하지만, 시스템에 필요한 local 설정들은 /etc/init.d/rc.local 이란 파일에 설정해
두고, 이를 /etc/rc3.d/S99rc.local 이란 파일을 /etc/init.d/rc.local 로 심볼릭링크를 만들어
사용하는 방법을 차선책으로 이용할 수 있다.

#!/sbin/sh
# /etc/init.d/rc.local ? to be linked into /etc/rc3.d as
# S99rc.local ? a place to hang local startup stuff.
# started after everything else when going multi-user.

# Ian Darwin, Toronto, November, 1992
# As with all system changes, use at own risk!

Case "$1" in
'start')
 echo "Starting local services …\c"

 if [ -f /usr/sbin/mydaemon ]; then
  /usr/sbin/mydaemon
 fi
 echo ""
 ;;
'stop')
 echo "$0: Not stopping any services."
 ;;
*)
 echo "Usage: $0 {start|stop}"
 ;;
esac


3.18) 왜 두가지 형태의 shutdown 이 존재합니까?


SVR4(여기서는 Solaris 2.x) 는 두가지 방법의 shutdown 을 제공한다. 첫번째 방법은 전
형적인 SVR4 의 shutdown 방법으로 /etc/rc0.d 디렉토리내의 모든 쉘 스크립트의 인자
로 "stop" 을 주어 이들 스크립트를 실행하는 것이다.
이 방법은 대부분의 스크립트들이 실행중인 프로세스를 확인하기위해 'ps' 명령을 이
용하기 때문에 두번째 방법에비해 상대적으로 느리다.
두번째 방법은 바로 UCB "shutdown" 이며, init 로 하여금 모든 non-single-user-process
들을 죽이게끔한다. 이 방법은 첫번째 방법에비해 거의 곱절 가까이 빠르다.

만약, Oracle 과같은 데이터베이스를 운영중이거나, INN 과같은 소프트웨어를 운영중이
라면 /etc/rc0.d 에 Kxxoracle 등과같은 스크립트를 만들어 첫번째 방법을 이용해 셧다
운하는 것이 좋다.


3.19) When will somebody publish a package of the BSD(4.3BSD Net2) "init", "getty", and "rc/rc.local", so we can go back to life in the good old days?


Getty should be easy and was reportedly done at a number of sites. The port monitor isn't
everyones favorite. But given that you can do much more with the SVR4 init, why would you want
to change back? It would be much more trouble than it's worth.


3.20) getty에 무슨일이 생겼습니까? pmadm은 무엇이며, 어떻게 사용하는 것입니까?

I

 was hoping you wouldn't ask. Pmadm stands for Port Monitor Admin, and it's part of a
ridiculously complicated bit of software over-engineering that is destined to make everybody an
expert.

Best advice for workstations: don't touch it! It works out of the box. For servers, you'll have to
read the manual.
This should be in admintool in Solaris 2.3 and later.
For now, here are some basic instructions from Dave Curry.

"Not guaranteed, but they worked for me."

To add a terminal to a Solaris system:

1. Do a "pmadm ?l" to see what's running. The serial ports on the CPU board are probably already
being monitored by "zsmon".

PMTAG PMTYPE  SVCTAG  FLGS ID <PMSPECIFIC>
Zsmon ttymon  ttya  u root \
 /dev/term/a I - /usr/bin/login ? 9600 ldterm, ttcompat ttya login: - tvi925 y #

2. If the port you want is not being monitored, you need to create a new port monitor with the
command

Sacadm ?a ?p PMTAG ?t ttymon ?c /usr/lib/saf/ttymon ?v VERSION

Where PMTAG is the name of the port monitor, e.g. "zsmon" or "alm1mon", and VERSION is the
output of "ttyadm ?V"

3. If the port you want if already being monitored, and you want to change something, you need to
delete the current instance of the port monitor. To do this, use the command

Pmadm ?r ?p PMTAG ?s SVCTAG

Where PMTAG and SVCTAG are as given in the output from "pmadm ?l". Note that if the "I" is
present in the <PMSPECIFIC> field (as it is above), you need to get rid of it.

4. Now, to create a specific instance of ttymon for a port, issue the command:

Pmadm ?a ?p PMTAG ?s SVCTAG ?I root ?fu ?v 1 ?m \
 "`ttyadm ?m ldterm,ttcompat ?p 'PROMPT' ?S YORN ?T TERMTYPE \
 -d DEVICE ?l TTYID ?s /usr/bin/login`"

Note the assorted quotes; Bourne shell (sh) and Korn (ksh) users leave off the second backslash!

In the above:

PMTAG is the port monitor name you made with "sacadm", e.g. "zsmon".

SVCTAG is the service tag, which can be the name of the port, e.g.,
  "ttya" or "tty21".

PROMPT is the prompt you want to print, e.g. "login: ".

YORN is "y" to turn software carrier on (you want this for directly connected terminals" and "n"
to leave it off (you want this for modems).

TERMTYPE is the value you want it $TERM.

DEVICE is the name of the device, e.g. "/dev/term/a" or "/dev/term/21".

TTYID is the line you want from /etc/ttydefs that sets the baud rate and stuff. I suggest you use
one of the "contty" ones for directly connected terminals.

5. To disable ("turn off") a terminal, run

Pmadm ?d ?p PMTAG ?s SVCTAG

To enable ("turn on") a terminal, run

 Pmadm ?e ?p PMTAG ?s SVCTAG

Ports are enabled by default when you "create" them as above.

For more details, see:
 Chleste's Tutorial on Solaris 2.x Modems & Terminals
 http://www.stokely.com/stokely


3.21) 시스템을 아무도 이용하고있지않을 경우 전원관리를 위해 화면을 없애려면 어떻게
해야합니까?


SunOS 4.1.x 에서는 /etc/rc.local 에서 sunblank 를 실행할 수 있었다. 하지만, Solaris 2.x
에는 sunblank 가 없다. Sun 은 시스템 내의 모든 사용자들의 xinitrc 파일내에 `xset s
on' 이란 내용을 담아둘 것을 권하고 있다. 하지만, 이 정책을 강제로 모든 사용자에
게 강요할 수는 없는 일이다. 또한, 시스템에 아무도 로그인해있지 않을 경우에는 이
방법도 적용되지않을 것이다. 가장 간단한 방법은 SunOS 4.1.x 의 /usr/bin/screenblank
파일을 복사해와서 이를 binary compatibility mode 로 실행하는 방법이다. 이를 구동하
는 방법에 대해서는 섹션 3.16 을 참고하기 바란다.

또다른 방법은 xdm 이나 dtlogin 을 이용하는 방법이다. 이 방법을 쓸 경우에는 X 서
버가 자동으로 이러한 역할을 해줄 것이다.

SunOS 4.1.x 의 screenblank 가 제대로 동작하지 않을 경우에는 Jef Poskanzer 가 제작한
freeware screenblank 를 다음에서 구하여 사용할 수 있다.
 http://www.acme.com/software/screenblank/

Solaris 2.3 에서는 자체 버그 때문에 이를 컴파일할 때 ?DHAVE_POLL=0 란 옵션을
지정하고 컴파일하여야할 것이다.

Solaris 2.4 는 soft-swichable 전원 지원시스템을 위해 별도의 전원관리 소프트웨어를
제공한다. 때문에, Screenblank 사용보다는 이를 이용하는 것이 더 효과적일 수도 있다.
Solaris 2.5 는 에너지 절약을 지원하는 소위 Energy Star 모니터의 경우 sync 시그널을
없앰으로 인해서 전원을 훨씬 절약할 수 있는 기능도 포함하고 있다. Solaris 2.4 의 경
우에도 이 기능을 이용할 수 있지만, 때에따라 모니터가 다시 켜지지않거나 그래픽
카드가 제대로 동작하지않는 경우가 생기기도 하였다.

전원관리 소프트웨어는 SMCC Updates CD(2.4 및 2.5용)에서 구할 수 있다.

전원관리 소프트웨어는 아래와같은 내용을 power.conf 에 추가함으로써 모니터를 자동
으로 껐다/켰다함으로써 전원을 절약할 수 있다.

# Name  Threshold(s) Logical Dependent(s)
/dev/kbd  600
/dev/mouse  600
/dev/fb  0 0  /dev/kbd /dev/mouse

이때 반드시 "autoshutdown" 과 "noshutdown" 가 지정되어있어야만 시스템은 계속 운
영된다는 사실을 명심하여야한다.

Solaris 2.5 의 경우 /usr/openwin/bin/dtpower 유틸리티를 이용해 시스템에 맞는 적절한
전원관리 설정을 설정할 수 있다.


3.22) And what about screendump, screenload and clear_colormap?


섹션 3.21 에서 언급한 Jef's FTP 서버에서 screenload, screendump 등을 다운받아 사용
할 수 있다. 또한, 위와유사한 기능을 제공하는 공개용 라이브러리로 pixrect library 가
있으므로 이를 사용하는 것도 무방할 것이다.

Pixrect library 는 http://www.acme.com/software/raster-pixrect/ftp://ee.lbl.gov/raster-
pixrect_30dec93.tar.Z 에서 구할 수 있다.

Pixrect 는 BCP 모드에서 지원되지않으므로, SunOS 4.1.x 용 프로그램은 Solaris 2.2 또
는 그 이후버전에서는 실행되지않는다.


3.23) Etherfind 는 어디로 갔습니까?


Solaris 2 에서는 etherfind 를 대신할 새로운 프로그램을 포함하고 있다. 물론, 그 기능
상의 면모는 훨씬 발전되었다. 이에관한 더 자세한 자료는 아래와같이 매뉴얼 페이지
를 참고해보기 바란다.

% man ?k snoop
snoop snoop(1m) - network 패킷을 모니터링하는 역할을 한다.
%

snoop 은 imeediate mode, capture-to-disk mode, playback-from-disk mode 이렇게 세가지 모
드를 지원하며, 각각의 모드에관한 자세한 내용은 매뉴얼 페이지의 내용을 참고하기
바란다.

또한, snoop 파일이 결과로 만드는 결과파일의 포맷에 대해서는 RFC 1761 에서 살펴
볼 수 있다.


3.24) SunOS 4.1.x 를 SPARC Classic, LX, SS5, SS20, Voyager, SS1000, SC2000, CS6400, Ultra에 설치할 수 있습니까?


SPARC Classic, LX 그리고 CPU 를 하나만 장착한 SS20 에서도 SunOS 4.1.x 를 사용할
수 있다.

Classic, LX, SS4, SS5 그리고 SS20 은 Solaris 1.x 와 SunOS 4.1.4 에서도 지원을 한다.
Classic 과 SX 는 4.1.3C 에서부터 지원되었으며, SS20 과 SS5 는 4.1.3_U1 rev B(Solaris
1.1.1B) 에서부터 지원되었다. 또한, HyperSPARC 를 탑재한 SS4 와 SS20 은 4.1.4 에
서부터 지원되기 시작하였다.
물론, 이들 운영체제는 모두 SuperSPARC MP 를 지원하며,기타 새로운 그래픽  하드
웨어인 ZX, TZX, SX, S24 등을 모두 지원한다. TCX 어댑터의 경우에는 cgthree 로서만
지원될 뿐이며, SunOS 4.x 에서는 하드웨어가 지원하는 그외의 가속기능등을 지원하지
않는다.

Voyager 는 SunOS 4.1.x 에서는 지원되지않는다. 왜냐하면, 새로운 device driver 들이
너무나 많이 추가되었기 때문이다.

UltraSPARC 기반의 기계들은 SunOS 4.1.x 가 지원하지 않는다. 왜냐하면, 새롭게 등장
한 supervisor mode instruction 과 MMU, 그리고 버스와 장치들을 SunOS 4.1.x 가 지원하
지 않기 때문이다.

Sun 은 Cray Research의 산업용 플랫폼을 지원을 위해 Cray CS6400 시스템을 탑재한
SuperSPARC 기종을 발표하였으며, 이 플랫폼을 위해 특별히 수정한 Solaris 2.x 인
"Cray Solaris"를 탑재하고 있다.

현재 Sun 에서 구입할 수 있는 가장 대용량 시스템은 Sun Enterprise 10000 이며, 최대
64개의 UltraSPARC CPU와 64개의 I/O 채널, 64GB 의 메인메모리를 탑재할 수 있다.
 http://www.sun.com/datacenter/

Fujitsu 는 이보다 더 대용량 시스템인 AP-3000 을 판매하며, 이 시스템의 경우
300Mhz 짜리 2048개의 UltraSPARC CPU를 동시에 장착할 수 있다.
 http://www.fujitsu.co.jp/hypertext/Products/Info_process/hpc/ap3000-e/index.html


3.25) "find" 프로그램 실행시 root 디렉토리가 없다는 에러가 발생합니다.


실제로 Solaris 2.3 과 그 이전버전에서는 nftw(3) 함수의 버그로 인하여 아래와같은 에
러메세지가 나타나곤 하였다.

Find : cannot open /: No such file or directory.

이 문제는 Solaris 2.4 과 그 이후버전에서는 고쳐진 상태이며, Solaris 2.3 역시 커널 점
보패치인 101318-41 이후버전을 설치할 경우 해결할 수 있다.


3.26) Sparc 직렬포트로의 고속입력시에 문제가 발생합니다. 무엇을 어떻게 해야합니까?


Solaris 2.x SPARC 버전의 직렬 드라이버는 9600bps 이상의 속도로 데이터를 전송받을
때 문제점을 나타내고 있다. 실제로, `NOTICE: zs0: silo overflow' 란 콘솔 에러메세지를
나타내며, control-G 시그널을 생성하게된다.
이 문제를 해결하기위한 가장 간단한 방법은 UUCP 프로토콜을 이용하는 것이다.

Solaris 2.3 이후버전부터는 이 문제가 해결되었다고들 한다.

Solaris 2.5 는 양방향으로 훨씬 고속 전송을 지원하고 있으며, Solaris 2.3 을 위해서는
102028 패치를 설치할 경우, Solaris 2.4 를 위해서는 102845 패치를 설치할 경우 이와
유사한 성능을 얻을 수 있게된다.
실제로, Solaris 2.4 의 zs device 는 38400bps 의 성능을 보이며, 2.5 에서는 76800bps 의
성능을 보인다.


3.27) Root 의 login shell 로 ksh 이나 csh 을 어떻게 이용할 수 있습니까?


Root 의 기본 쉘은 /sbin/sh 이며, 이 쉘은 정적으로 링크된 쉘이다. 이를 /bin/csh로 변
경할 경우에는 아래와같은 문제점이 발생할 수 있다.
/bin/csh는 실제 /usr/bin/csh로의 심볼릭링크이며, /usr/bin/csh은 동적으로 링크된 쉘이
다.
1) /usr 파티션이 시스템의 문제로 말미암아 부팅시에 마운트되지않을 수도 있다. 이
때에는 /usr 이하 디렉토리에 존재하는 shared library 를 읽어들일 수 없게된다.
2) 초기 부팅시에 사용되는 스크립트들은 /usr/lib 가 아닌 /etc/lib 를 이용해야만 되는
것들이 있다.

만약, root 의 쉘을 반드시 변경해야할 필요가 있다면, 이때 반드시 vipw 나 "passwd ?
e" 를 이용해 변경하기 바란다. 두가지 방법으로 변경할 때에는 /etc/shells 과같은 파
일들을 통하여 사용가능한 쉘인지 판단할 수 있기 때문이다.

더욱 안전한 방법은 root 권한을 갖는 새로운 계정을 "rootcsh" 와같이 만드는 방법이
다. 이 방법은 간단히 "rootcsh" 와같은 계정의 uid 를 0으로 만듦으로써 가능해진다.

세번째 방법은 root 의 .profile 에서 /usr 파티션이 마운트되어있을 경우에는 직접
/bin/ksh 등을 실행하게끔 하는 방법이다.

가장 좋은 방법은 root 의 기본 쉘을 그대로 놔두고, sudo 명령을 이용해 root 권한으
로 작업을 할 수 있게 하는 것이다.
 ftp://ftp.cs.colorado.edu/pub/sysadmin/sudo


3.28) "automount: No network locking on host, contact administrator to install server change." 란 메시지가 무엇을 뜻합니까?


NFS 서버로 동작 중인 SunOS 4.1.x 시스템의 lockd 데몬을 Sun 으로부터 업그레이드
된 새버전으로 교체하여야한다. 만일, 패치를 설치하지 않을 경우에는 file locking 관
련 기능을 사용할 수 없게된다.

Lockd 관련 패치는 100988(4.1.3), 101817(4.1-4.1.2), 101784(4.1.3_U1), 102264(4.1.4),
100518(Disksuite) 이다.

이들 최신 패치를 시스템에 설치하였는지 확인하기 바란다.


3.29) SunOS 4.x 에서 잘 동작하던 SCSI 디스크들이 Sol.aris 2.x 에서는 문제를 발생시키고 있습니다. 어떻게 이를 해결할 수 있습니까?


아래와 같은 내용을 /etc/system 파일에 추가하고 시스템을 리부팅하기 바란다.

 Set scsi_options & ~0x80

위의 내용은 구형 SCSI 장치들에 구현되어있지않는Tagged Command Queuing 을 제거
함으로써 구형 디스크들을 Solaris 2.x 에서도 무리없이 사용할 수 있게끔하는 것이다.

주의할 점은 위와같은 내용 때문에 Tagged Command Queuing 을 지원하는 SCSI 디스
크의 성능은 현저하게 떨어질 수 있다는 점이다. 이를 해결하기위해서는 각 SCSI 장
비들에대해 설정을 맞추어두는 것이 좋다.

Solaris 2.4 와 그 이후버전은 이처럼 각각의 SCSI 버스마다 해당 옵션을 지정할 수 있
다. 이에관한 정보는 isp(7) 와 esp(7) 을 참고하기 바란다.

몇몇 디스크에대해서는 단지 아래와같이 최대 큐에쌓을 수 있는 명령의 개수를 줄이
는 것만으로도 가능해진다.

 Forceload: drv/esp
 Set sd:sd_max_throttle=10

Solaris 이후버전부터는 각각의 SCSI 버스는 물론 장비마다 이와같은 scsi_option 을 설
정할 수 있다. Esp(7d) 와 isp(7d) 관련 예제를 /kernel/drv/esp.conf 파일에서 살펴보면
아래와같다.

 Name="esp" parent=/iommu@f,e0000000/sbus@f,e0001000/espdma@f,400000
 Reg=0xf,0x800000,0x40
 Target1-scsi-options=0x58
 Scsi-options=0x178;


3.30) Solaris 2 에서 ADAPTEC ACB-4000, Emulex MD-21 디스크 콘트롤러를 어떻게 이용할 수 있습니까?


다른 하드웨어장치를 추가할때와 마찬가지로, 먼저 boog ?r 을 이용해 장치를 추가해
보기 바란다.

Man ?s7 의 결과를 살펴보면, Adaptec 은 지원되지않기 때문에 이 장치를 다른 PC 에
서 사용하는 것이 바람직할 것이라고 생각된다.

MD21 의 경우에는 잘 동작할 것이다. 물론, 몇몇 사람들이 4/260 시스템에서 SCSI 가
잘 동작하지않는다고 말해오지만, 이는 Solaris 2.3 이후버전에서는 고쳐진 것으로 알
려져있다.


3.31) 충분한 패치가 나올때까지 Solaris 2.5 설치를 보류해야합니까?


Solaris 2.5 역시 수많은 베타테스팅을 거쳐 발표되었다. 또한, 결정적인 버그없이 제대
로 동작되는 것으로 알려지고 있는 상태이므로, 별다른 패치없이도 운영에 지장이 없
을 것으로 기대된다.


3.32) Solaris 2.x 용 패치는 왜그렇게 많습니까?


Solaris 2.x 는 공식적인 릴리즈보다 수개월 앞서 베타란 이름으로 발표된다. ㅇㅀ게
공식 릴리즈에 앞서 베타 릴리즈를 발표함으로써, 공식 릴리즈를 위한 패치들을 미리
만들어가게되는 것이다. 실제로, 이 베타테스팅 기간을 통해 확보된 패치들은 Solaris
2.x CD 에 함께 포함되어 발표되기도 하며, 정식 Solaris 릴리즈에 앞서 이들 패치들이
발표되는 경우도 많다.

이렇게 발견된 버그들에대한 패치가 미리 정식 릴리즈에 고쳐지지않을때도 가끔씩 있
으며, 새롭게 발견되는 버그들에대한 신속한 패치들 때문에 위와같은 질문을 하는 것
이다.


3.33) `mandatory` 패치는 무엇을 의미합니까?


"mandatory" 패치가 실제로 "mandatory" 를 의미하는 것은 아니다. 이미, 이 어휘는
"recommended" 란 어휘로 공식적으로 바뀐 상태이다.

"recommended patches"란 Sun 이 시스템 운영상의 문제점을 미연에 방지하기위해 사용
자들과 관리자들에게 권고하는 패치를 뜻한다. 말 그대로, 이들 패치를 적용한 시스템
은 한결 자연스럽고, 원활한 운영을 보여줄 것이다.
물론, 이들 패치를 설치하지 않았을 경우에는 치명적인 문제점에 봉착할 수밖에 없다
는 말은 아니다.

이들 "recommended" 패치들은 Sun 의 공식 ftp 사이트를 통해서 다운받을 수 있다.


3.34) 어떤 패치들을 적용해야합니까?


일반적으로 "문제가 발생하지않으면, 고치지 않아도 된다"라는 정설이 있다. 실제로,
보안이슈에 관계된 패치들을 제외한 패치들은 직접 문제가 발생하기 전에는 고치지
않아도 된다.
물론, 이미 발생한 문제에 대해서나, 앞으로 직면하게될 것같은 문제에대해서는 패치
를 설치하는 것이 바람직하지만, 패치를 설치하는 것 역시 새로운 버그를 유발할 소
지가 다분히 있으므로, 특별히 문제되는 경우가 아니라면, 패치를 설치안하는 것이 좋
다.

하지만, 일반적으로 Solaris 2.x CD 에 포함되어오는 패치들은 시스템에 설치하는 것이
바람직하다. 왜냐하면, 이들 패치야말로 시스템을 구성하는 가장 기본적인 요소들에
관계된 패치들이기 때문이다. 심지어, 몇몇 시스템의 경우에는 이들 패치를 설치하지
않을 경우 부팅조차 되지않는 시스템들도 있다.


3.35) 패치를 어디서 어떻게 구할 수 있습니까?


Sun 에의해 관리되지않는 곳 중 이러한 곳으로는 아래와같은 곳들이 있다.

ftp://ugle.unit.no/pub/unix/sun-fixes
ftp://ftp.luth.se/pub/unix/sun/all_patches

모든 recommended patch 와 보안관련 패치를 지원하는 SunSite

ftp://sunsite.unc.edu/pub/sun-info/sun-patches
ftp://sunsite.sut.ac.jp/pub/sun-info/sun-us/sun-patches
ftp://sunsite.doc.ic.ac.uk/sun/sunsite-sun-info/sun-patches

Sunsolve

ftp://sunsolve1.sun.com/pub/patches
http://sunsolve1.sun.com

Sun 에서 직접 관리하는 Sunsolve 의 경우에는 모든 recommended 패치들을 묶어놓은
2.x_Recommended.tar.Z 파일과 recommended 패치 각각을 모두 anonymous ftp 서비스로
제공한다.

SunSolve CD 2.1.2 에서부터는 모든 Sun 패치들이 포함되어있으며, 소비자나 사용자들
은 Sunsolve 로부터 e-mail 이나 ftp 등을 통해 인터넷상에서 이들 패치들을 모두 구할
수 있다.


3.36) 최신 Solaris 2/x86 용 드라이버들을 어디서 구할 수 있습니까?


Solaris x86 관련 드라이버들의 최신 정보는 아래에서 HTTP 로 구할 수 있다.

 http://access1.sun.com/drivrs/driverMain.html
 http://sunsite.unc.edu/pub/sun-info/solaris-x86/sunsoft-drivers

Solaris x86 관련 드라이버를 ftp 로 구할 수 있는 곳은 아래와같다.

 ftp://ftp.uu.net/vendor/sun/solaris/
 ftp://sunsite.unc.edu/pub/sun-info/solaris-x86/sunsoft-drivers


3.37) 왜 패치 인스톨시 /var/sadm 파티션의 디스크용량이 많이 먹히는 것입니까?


새롭게 설치되는 패치로인해 교체되는 예전 바이너리 파일들은 모두
/var/sadm/patch/<patch-id>/ 디렉토리 아래에 저장되며, 향후 복구가 필요할 경우, 이를
이용해 안전하게 복구시킬 수 있게된다. 더욱 새로운 패치는 이들 예전 패치정보조차
/var/sadm/pkg/<pkg>/save/<patch-id>/undo.Z 로 백업받아둔다.

<patchdir>/save 디렉토리는 제거해도 무방하며, <patchdir>/.oldfilesaved 란 파일을 제거
하면, 더욱 새로운 패치를 설치할 때 예전 정보를 백업하지않게 된다.

물론, "-d" 옵션을 이용해 패치를 설치할때에는 예전 정보와 파일들을 배업하지않는다.


3.38) 예전 패치들을 백업해야할 필요가 있습니까?


제공되는 패치의 README 파일에 반드시 백업하라는 얘기가 없다면, 백업해야할 필
요는 없다.

패치는 아래와같은 방법으로 복구될 수 있다.

 /var/sadm/patch/<patch-id>/backoutpatch <patch-id>

실제로 복구 작업은 굉장한 시간이 소요된다. 물론, 이 문제는 backoutpatch 이후버전
에서 고쳐질 것이라고 한다.


3.39) 48개의 가상터미널보다 많은 터미널을 사용하려면 어떻게 해야합니까?


/etc/system 파일에 아래와같은 내용을 추가하기 바란다.

System V pseudo terminals
Set pt_cnt = <num>

그런 뒤 boot ?r 로 리부팅을 하면 된다.

이제 원하는 수만큼의 터미널을 지원할 수 있지만, 아래와같은 문제점이 나타날 수도
있다.

BSD 스타일의 pty 는 BSD 에서 device minor 로 지정한 8비트의 최대갯수인 256개보
다 적은 176개의 터미널(pty[p-z][0-9a-f]) 이상을 지원하지 못함을 알게될 것이다.

실제로, BSD 응용프로그램은 256개 이상의 pty 를 절대 지원할 수가 없으며, Solaris
2.x 는 176개 이상의 pty 를 지원할 수 없다. 특별히 pty 의 개수를 정의하려면 아래
와같은 내용을 추가하기 바란다.

 Set npty = <num>

위의 내용을 추가하는 것 이외에 /etc/iu.ap 파일의 47이란 내용을 "npty-1" 의 값으로
변경하기 바란다.

 Ptsl 0 47 ldterm ttcompat

그런뒤, 시스템을 boot ?r 로 리부팅 시키면 된다.


3.40) How can I have normal uses chown their files?


/etc/system 파일에 아래의 내용을 추가하기 바란다.

 Set rstchown = 0

위의 내용은 시스템내의 quota 를 enable 시키고, 보안상 더 안전한 시스템으로 운영
할 수 있게 도와준다.

3.41) Ps 를 이용해 %MEM과 %CPU 정보를 보려면 어떻게 해야합니까?

Solaris 2.4 이전 버전에서는 운영체제 자체에서 이들 값을 저장하고 있지않았기 때문
에 이를 확인할 수 없었다. 하지만, Solaris 2.4 에서부터는 관련 모듈이 커널에 추가되
어 /usr/ucb/ps 를 이용해 이들 내용을 확인할 수 있게 되었다.

Solaris 2.3 을 비롯한 이전버전에서는 섹션 2.3 에서 언급한 "top" 을 구해서 이용하기
바란다.


3.42) Solaris x86 에서 DOS 와 Unix 시각을 맞추려면 어떻게 해야합니까?


시스템 설치를 완료한 다음, /usr/sbin/rtc ?z $TZ 명령을 실행하기 바란다. 이때 $TZ 는
당연히 사용자가 속해있는 타임존을 써야한다. 기본적으로 root 의 crontab 은
/usr/sbin/rtc ?c 명령을 하루에 한번 실행하도록 설정되어있다.

이런 방법으로 시스템의 시계는 DOS 나 Solaris 에서 모두 같은 시각을 보여줄 수 있
게되는 것이다.


3.43) 프로세스별 file descriptor 의 개수를 증가시키려면 어떻게 해야합니까?


Solaris 2.3 과 이전버전에서는 직접 커널에 접근하여 이를 확인하여야하였지만, Solaris
2.4 이후버전에서는 아래와같은 내용을 /etc/system 에 추가함으로써 손쉽게 원하는 작
업을 이룰 수 있다.

 Set hard limit on file descriptors
 Set rlim_fd_max = 4096
 Set soft limit on file descriptors
 Set rlim_fd_cur = 1024

256 이하로 soft limit 를 줄이는 것은 BCP 모드를 이용하는 응용프로그램 등에서 문
제를 보일 것이며, 1024 이상으로 soft limit 를 늘이는 것은 select() 를 이용하는 응용
프로그램에서 몇몇 문제를 나타낼 것이다.

Stdio 나 stdio 를 이용하는 라이브러리를 사용하는 응용프로그램의 경우에는 256개
이상의 파일을 동시에 열 때에 에러를 나타낼 것이다.


3.44) 같은 기계에 SunOS 와 Solaris 를 동시에 설치하여 부팅시에 이를 선택할 수 있습
니까?


물론 가능하다. 시스템 관련 파티션(대부분, /, /usr, /var, /opt 등)으 제외한 다른 파티셔
들은 상호 공유가 가능하다. 물론, 시스템 파티션을 포함한 모든 파티션들은 서로 자
유롭게 마운트 및 접근이 가능하다.

이렇게 시스템을 구성하는 가장 손쉬운 방법은 두개의 다른 디스크에 각각 suninstall
을 이용해 시스템을 설치하는 방법이다. 이렇게 다른 디스크에 설치된 운영체제를 부
팅시에 PROM 에서 "boot" 명령을 이용해 구분하여 구동시키면 된다.

두개의 운영체제를 하나의 디스크에 설치하는 방법은 위의 방법보다 약간 까다롭다.
이렇게 하기위해서는 먼저 디스크를 보통 아래와같이 여러 개의 파티션으로 나누어
설치하는 것이 좋다.

A: / for Solaris 2
B: swap (두개의 운영체제에서 공유할 수 있음)
C: The usual (whole disk)
D: / for Solaris 1
E: /usr for Solaris 1
F: /usr for Solaris 2

또한, 운영체제 설치를 위해서는 suninstall 을 이용하는 것이 훨씬 안정적이다. 하지만,
특정 이유 때문에 suninstall 을 이용하지 못한다면, 각각의 부팅가능한 파티션에서 반
드시 installboot 를 실행하여야함을 잊어서는 안된다.

이렇게 두개의 운영체제를 설치한 다음 아래와같이 PROM 의 "boot" 명령을 이용해
서로 다른 운영체제를 구동시킬 수 있게된다.

Solaris 2 로 부팅 : boot
Solaris 1 으로 부팅 : boot disk:d

주의 : PROM 버전이 2.5 이하일 경우에는 "disk:d" 와같은 문법을 받아들이지 못한다.


3.45) Solaris 에서 배너페이지를 불가능하게하려면 어떻게 해야합니까?


Root 권한으로 /etc/lp/interfaces 디렉토리내의 해당 프린터파일의 'nobanner="no"' 를
'nobanner="yes"' 로 변경해두면 된다.


3.46) 호스트이름을 변경시키려면 어떻게 해야합니까?


호스트이름 변경을 위해서는 아래와같은 방법을 지원한다.

 # /usr/sbin/sys-unconfig

위의 방법을 사용할 경우, 시스템은 리부팅되면서 부팅과정 중 호스트이름과 네트웍
관련 정보들에대하여 질문을 할 것이다.

Sys-unconfig 를 이용한 방법은 diskless 시스템이나 dataless 웍스테이션에서는 사용할
수 없다. 이들 시스템에서는 각각의 해당 파일들을 직접 수정하여야하며, 이에관한 자
세한 정보는 sys-unconfig(1M) 의 매뉴얼 페이지를 참고하기 바란다.


3.47) Solais x86 의 콘솔에서 SCO 와같이 여러 개의 가상 터미널을 이용할 수 있습니까?


Solaris x86 2.4 의 경우 시스템 설치과정 중 이와같은 설정을 할 수는 없지만, 시스템
설치 후 직접 이와같은 설정을 시스템에 적용시킬 수 있다. 물론, Sun 은 공식적으로
이 기능을 지원할 계획은 없지만, 아래와같은 절차를 거침으로써 이와같은 기능을 설
정할 수 있다.

먼저 해당 device 의 major number 를 grep 을 이용해 확인하여야 한다.

 # grep ?I chanmux /etc/name_to_major
 chanmux <num>

grep 을 이용해 찾은 <num> 에 해당되는 값으로 /dev 디렉토리에 장치를 추가하여야
한다.

 Mknod /dev/vt01 c <number> 1
 Mknod /dev/vt02 c <number> 2
 …

이제 아래의 항목을 /etc/inittab 에 추가하면 된다.

 V1:234:respawn:/usr/lib/saf/ttymon ?g ?h ?p "VT1 Login: " ?T AT386 ?d /dev/vt01 ?l console
 V2:234:respawn:/usr/lib/saf/ttymon ?g ?h ?p "VT2 Login: " ?T AT386 ?d /dev/vt02 ?l console
 …

이제 inittab 을 새롭게 읽어들이기위해 리부팅하거나, 아래의 명령을 사용하자.

 /usr/sbin/init q

성공적으로 위의 과정을 거쳤다면, 아래와같은 방법으로 가상 터미널로의 전환이 가
능해진다.

Alt + PrintScreen F1 은 VT1
Alt + PrintScreen F2 은 VT2
Alt + PrintScreen P 는 이전 스크린
Alt + PrintScreen N 은 다음 스크린
Alt + PrintScreen H 은 console 스크린


3.48) 데몬들이 666 퍼미션의 파일생성을 못하게 하려면 어떻게 해야합니까?


기본적으로 모든 데몬들은 init 프로세스로부터 umask 값을 0으로 상속받는다. 이는
ftp 와같이 upload 되는 모든 파일들이 666 모드로 되는 서비스들에대해서는 굉장히
위험한 결과를 가져오게 된다.

이를 위해 각 데몬들이 다른 umask 값으로 실행되게끔하기위해서는 아래와같은 방법
을 사용하면 된다.

Echo "umask 022" > /etc/init.d/umask.sh
For d in /etc/rc?.d
Do
 Ln /etc/init.d/umask.sh $d/S00umask.sh
Done

여기서 확장자 ".sh " 에 관심을 기울여야한다. 왜냐하면, ".sh" 확장자가 아닌 경우에
는 서브쉘로 위의 스크립트가 실행되기 때문에, 나머지 데몬들에게 umask 값의 영향
을 못주기 때문이다.


3.49) /dev/console 터미널 타입을 변경하려면 어떻게 해야합니까?


/etc/inittab 파일내의 "-T sun" 의 값을 "-T <termtype>" 으로 변경해주면 된다.

 Co:234:respawn:/usr/lib/saf/ttymon ?g ?h ?p "`uname ?n` console login: " ?T sun \
  -d /dev/console ?l console ?m ldterm,ttcompat
 [이하 생략]


3.50) 네트웍으로 login 할 경우 터미널 타입이 "sun"/"AT386" 과같이 설정됩니다. 이를
어떻게 바꿀 수 있습니까?


만약 network protocol 에서 터미널 타입이 정의되어있지않다면, 기본적으로 /etc/profile,
/etc/.login 등과같은 초기화파일은 터미널 타입을 기본 console 타입인 sun 또는 AT386
으로 지정해버린다. 여기서 SPARC 의 경우에는 sun이며, x86 의 경우에는 AT386 이
다.

SunOS 4.x 에서와같은 결과를 바란다면, "network"에대한 터미널 타입을 새롭게 지정해
두면 된다.


3.51) SYSV IPC 파라메터를 어떻게 변경할 수 있습니까?


아래의 파라메터들은 세마포어의 개수와 shared memory 의 양 및 IPC 메시지의 개수
를 변경하는데 사용될 수 있다. 이들은 /etc/system 에 기본적으로 정의되어있으므로,
목적에 맞게 이들을 변경하면 된다.

Set semsys:seminfo_semusz = <value>
Set semsys:seminfo_semopm = <value>
Set semsys:seminfo_semume = <value>
Set semsys:seminfo_semaem = <value>
Set semsys:seminfo_semmap = <value>
Set semsys:seminfo_semvmx = <value>
Set semsys:seminfo_semmsl = <value>
Set semsys:seminfo_semmni = <value>
Set semsys:seminfo_semmns = <value>
Set semsys:seminfo_semmnu = <value>

Set shmsys:shminfo_shmmin = <value>
Set shmsys:shminfo_shmseg = <value>
Set shmsys:shminfo_shmmax = <value>
Set shmsys:shminfo_shmmni = <value>

Set msgsys:msginfo_msgseg = <value>
Set msgsys:msginfo_msgssz = <value>
Set msgsys:msginfo_msgtql = <value>
Set msgsys:msginfo_msgmap = <value>
Set msgsys:msginfo_msgmax = <value>
Set msgsys:msginfo_msgmnb = <value>
Set msgsys:msginfo_msgmni = <value>


3.52) 어떻게 Dtlogin 을 enable/disable 시킬 수 있습니까?


Dtlogin 은 /usr/dt/bin/dtconfig 을 이용해 설정을 변경하거나, 여러 방법으로 실행될 수
있다.

 /usr/dt/bin/dtconfig ?d  (auto-start 를 해제함)
 /usr/dt/bin/dtconfig ?e (auto-start 를 설정함)
 /usr/dt/bin/dtconfig ?kill (dtlogin 프로세스를 죽임)
 /usr/dt/bin/dtconfig ?reset (dtlogin 을 리셋함)
 /usr/dt/bin/dtconfig ?p (프린터 행동을 업데이트함)
 /usr/dt/bin/dtconfig ?inetd (inetd.conf /usr/dt daemons)
 /usr/dt/bin/dtconfig ?inetd.ow (inetd.conf /usr/openwin daemons)


3.53) Dtlogin 을 어떻게 설정할 수 있습니까?


기본적인 CDE 설정관련 파일들은 모두 /usr/dt/config 디렉토리 아래에 있다. 이들을 직
접 수정하는 것은 바람지하지 않으며, 수정된 내용을 원할 경우에는 이를 /etc/dt 디렉토
리로 복사하여, 수정하는 것이 바람직하다. 기본적으로 /etc/dt 디렉토리는 존재하지않으
므로, 필요할 경우 직접 디렉토리를 만들어 작업하기 바란다.

Login wiget 인 Dtgreet 를 커스터마이징하기위해서는 /etc/dt/config/C/Xresources 파일을 수
정하면 된다.

!! To disable options in dtgreet window, uncomment the appropriate line below.

!Dtlogin*options_noWindows*setsitive: False
!Dtlogin*remote_host_menu*sensitive: False
!Dtlogin*options_languages*sensitive: False
!Dtlogin*session_menus*sensitive:  False
!Dtlogin*options_restartServer*sensitive: False

!! To disable options under remote login option menu, uncomment the appropriate line below.

!Dtlogin*remote_login_host*sensitive: False
!Dtlogin*choose_login_host*sensitive: False

!Dtlogin 앞의 ! 를 없앰으로써 아래와같은 각각의 메뉴 아이템을 해제할 수 있다.

1) Command Line(명령행) 모드 Login
2) Remote Login(원격 로긴)
3) Language choice(사용 언어선택)
4) Session choice(세션 선택)
5) Reset Login Session(로긴 세션 리셋)
6) "Remote Login" 메뉴의 "Enter Hostname…"
7) "Remote Login" 메뉴의 "Choose Host From List…"

아래의 항목들에 !를 이용해 코멘트처리를함으로써 CDE 환경의 login 을 해제할 수 있
다.

Dtlogin*altDts:  1
Dtlogin*altDtName1: Common Desktop Environment (CDE)
Dtlogin*altDtKey1: /usr/dt/bin/dtwm
Dtlogin*altDtStart1: /usr/dt/bin/Xsession
Dtlogin*altDtLogo1: Dtlogo

OpenWindows 의 데스크탑도 /etc/dt/config/C/Xresources.d/Xresources.ow 란 공백파일을 만
듦으로써 해제할 수 있다. 물론, 다른 데스크탑들도 Xresources.ow 와 마찬가지로
Xresources.d 디렉토리에 파일을 생성함으로써 해제할 수 있다.



4. 네트워킹



4.1) NIS 나 NIS+ 를 사용할 경우 어떻게 DNS w/o 를 이용할 수 있습니까?


SunOS 4.1 에서는 kludge fix 나 NIS 없이는 DNS 네임서버를 운영하는 것이 불가능하
였다. 하지만, Solaris 2.1 에서부터는 굉장히 간단히 이를 운영할 수 있게되었다.
NIS 호스트가 아닌 시스템이 DNS 를 사용하기위해서는 단지 /etc/nsswitch.conf 의
host: 란 항목이 아래와같이 되어있으면 된다.

Host: files dns

즉, 호스트를 찾을 때 /etc/hosts 파일을 먼저 찾고, 존재하지 않을 경우에는 DNS 에
요청하도록 함을 뜻하는 것이다. 물론, DNS 에도 존재하지 않을 경우에는 호스트를
찾는 것을 포기할 것이다. 또한, /etc/resolv.conf 파일을 수정하여 DNS 네임서버에 어떤
방법으로 접근할 것인지를 알려주어야한다.


4.2) Nsswitch.conf 는 무엇입니까?


수년전 Ultrix 에서 고안된 개념으로 NIS 또는 NIS+ 또는, /etc 디렉토리의 파일, DNS
중 어떤 것으로부터 "resolver" 서비스를 이용할 것인지를 정의할 수 있다.

간단한 예제는 아래와같다.

Hosts: nis files

위의 경우 호스트 정보를 NIS 에서 찾으며, 여기에 존재하지 않는 경우 로컬 시스템
의 /etc/hosts 테이블에서 해당 정보를 찾으라는 말이된다.

자세한 내용은 nsswitch.conf(4) 에서 확인할 수 있다.


4.3) Nsswitch.conf 에서 [NOTFOUND=return] 은 무엇을 의미합니까?


자세한 내용을 위해서 "man nsswitch.conf" 를 시도해보기 바란다. 여기에서 다룰 수 없
는 굉장히 자세한 내용들을 볼 수 있을 것이다.
간단히 말하자면, [NOTFOUND=return] 은 사용중인 네임서비스를 이용하여 해당 호스
트 정보를 찾을 수 없을때에는 이 정보를 곧이곧대로 믿고, 이를 위해 다른 서비스를
이용하거나, 정보를 요청하지 말라는 의미이다.


4.4) Solaris 2.x 에서 NIS/yp 서비스를 운영할 수 있습니까?


Sun 에서 제공하는 Solaris network transition kit 을 구하여 충분히 운영할 수 있다.

1) Nskit 1.0
SunOS 4.x 의 NIS 관련 프로그램들을 Solaris 2.x 에서 실행가능하게 만들어놓은 것이며,
101363-08 패치가 적용된 상태이다.
2) Nskit 1.1
Opcom 에서 구할 수 있으나, 베타테스팅 단계이다. DNS관련 검색이 제대로 되지않는
경우가 있다.
3) Nskit 1.2
Solaris 2.x migration 홈페이지에서 자유롭게구할 수 있으며, multi-homed 시스템을 지원
하며, 비동기 DNS검색과 shadow password 맵을 지원한다. 또한, Solaris 2.5 서버키트에
기본적으로 포함되어있다.

Nskit 1.2 는 SPARC, x86 모두 제공된다.


4.5) Solaris1(SunOS 4.1.x)에서 NIS+ 를 운영할 수 있습니까?


Solaris 2.x CD 에 포함되어있는 Solaris 1.x 용 NIS+ 패키지는 서버용만 존재하며, NIS+
를 반드시 YP 호환모드로만 운영할 수 있다.


4.6) NIS+ 운영 중 어떤 컴퓨터들이 클라이언트로 바운딩되는지 어떻게 찾을 수 있습니까?


NIS+ 클라이언트들은 NIS 클라이언트들이 NIS 서버에 바인딩하듯이 NIS+ 서버에 바
인딩하지않는다. 즉, 부팅 당시에 NIS+ 서버의 목록들이 저장되어있는 파일을 참조하
며, 검색이 필요한 경우에만 "manycast" 란 형태의 브로드캐스트를 통해 가장 빠르게
응답하는 서버로부터의 응답을 받아 처리한다. 즉, 이 방법을 통해 가장 부하가 적게
걸리는 서버의 서비스를 이용할 수 있는 것이다.


4.7) NIS+ 서버의 netgroup 테이블에대해 Ypcat 이 동작하지 않습니다. 왜 그렇습니까?


이 문제는 잘 알려진 문제점 중 하나이다. NIS 클라이언트쪽에서 netgroup 테이블 항목
에대해 수행할 수 있는 유일한 행동은 ypcat 이 아닌 ypmatches 인 것이다. 즉,
yp_first(), yp_next(), yp_all() 등을 모두 지원하지 않는 것이다. 이러한 이유는 netgroup
테이블의 포맷이 NIS+ 에서 NIS 의 그것과는 달리 약간의 변화가 있었기 때문이다.
또한, NIS+ 의 netgroup 포맷을 NIS 의 netgroup 포맷으로 변경하는데 문제점이 있기때
문이다.


4.8) Why is rpc.nisd such a memory pig according to ps?


그나마 다행스런 사실은 'ps' 명령을 이용해 보이는 것이 메모리나 스왑영역이 아니라
는 사실이다. 사실 NIS+ 트랜잭션 로깅을 위해 할당된 256MB 의 주소영역 모두를 보
여주기 때문인 것이다.

4.9) NIS+ 서버로하여금 4.x 로부터의 DNS 요청에 응답하게하려면 어떻게 해야합니까?

Rpc.nisd 를 ?B 옵션으로 구동시키면 된다. 이것은 /etc/init.d/rpc 파일의 'EMULYP="-
Y"' 를 아래와같이 변경하는 것으로 가능해진다.

 EMULYP="-Y ?B"


4.10) 인터페이스별로 여러 IP 어드레스를 사용하려면 어떻게 해야합니까?


Solaris 2.x 는 ifconfig 를 이용해 하나의 인터페이스에 한 개 이상의 IP 주소를 할당할
수 있도록 하였다. 2.5 이하버전에서는 도큐멘팅되어있지않지만, 2.5 이상버전에서는 도
큐멘팅되어있으니 참고하기 바란다.

문법:

 ifconfig IF:N ip-address up

여기서 "IF" 가 le0 와같은 인터페이스를 의미하며, N 은 1에서 <MAX> 사이의 정수
를 의미한다. 가짜 인터페이스와 해당 IP 주소를 없애는 방법은 아래와같다.

 Ifconfig IF:N 0.0.0.0 down

실제 존재하는 물리적 인터페이스와 마찬가지로, /etc/hostname.IF:X 란 파일을 만들어주
어야한다.

가상 인터페이스의 최대갯수인 <MAX> 는 Solaris 2.6 이전 버전까지는 255개로 한정
되며, Solaris 2.6 과 Solaris Internet Server Supplement(SICC) 가 설치된 2.5.1 은 ndd 를 이
용해 8192 개까지 지원한다.

/usr/sbin/ndd ?set /dev/ip ip_addrs_per_if 4000


4.11) Solaris 2.x 는 1TB 이상의 파일시스템을 지원한다고 합니다. NFS 서비스 운영시에 문제가 없을까요?


전혀 문제없다. 이를 이용해 SunOS 4.x 나 그외의 시스템과 파일시스템을 공유할 수
있다. NFS 프로토콜은 실제로 거의 파일시스템의 크기를 전송하지 않는다. 다만,
SunOS 4 클라이언트 시스템에서의 du, df 등의 프로그램만 약간의 문제를 나타낼뿐이
며, 다른 상태에서는 문제없이 효과적으로 사용할 수 있다.


4.12) Solaris 용 SNMP agent 를 어디서 구할 수 있습니까?


Sun 을 비롯한 여러곳에서 관련 에이전트를 제공하고 있다.

ftp://ftp.ece.ucdavis.edu/pub/snmp

Solstice Enterprise Agents
 http://www.sun.com/software/solstice/products/ent.angents

Sun SNMP agents ftp://zippy.telcom.arizona.edu/pub/snm/patches/snmpd2.2.3/

Solaris 2.6 은 기본적으로 snmp 에이전트를 포함하고 있다.


4.13) Full-duplex ethernet 을 어떻게 이용할 수 있습니까?


Sun 의 hme fast ethernet 어댑터는 full-duplex ethernet 을 지원한다. 하지만, 처음 구입할
당시에는 기본적으로 이 기능이 설정되어있지는 않다.

full-duplex 모드로 이용하기위해 설정을 변경하기위해 아래와같은 방법을 사용할 수
있다.

/etc/system 을 이용해 변경하기
 set hme:hme_adv_autoneg_cap=0
 set hme:hme_adv_100hdx_cap=0
 set hme:hme_adv_100fdx_cap=1

ndd 로 셋팅하기
 ndd ?set /dev/hme adv_autoneg_cap=0
 ndd ?set /dev/hme adv_100hdx_cap 0
 ndd ?set /dev/hme adv_100fdx_cap=1

만약 여러 개의 인터페이스를 갖고있다면, 먼저 사용할 hme 를 아래와같이 지정해두
어야한다.

 Ndd ?set /dev/hme instance 1


4.14) Solaris 용 BOOTP/DHCP 를 어디서 구할 수 있습니까?


Solaris 2.6 은 BOOTP/DHCP 를 기본적으로 내장하고 있다.

Solaris 2.5/2.5.1 용 소프트웨어는 Sun 의 웹사이트에서 구할 수 있다.
 http://www.sun.com/javastation/jcdev/software.html

먼저 라이센스 동의 문서를 작성하고, SUNWdhcsr 과 SUNWdhcsu 패키지를 다운받는다.
또한, 시스템에따라 SUNWfns 패키지를 다운받아야할 때도 있을 것이다.



5. 문제점 해결



5.1) Solaris 2.x 용 응용프로그램이 이상한 에러메세지를 나타냅니다.


Truss(1) 을 이용해보기바란다. Truss ?f ?o file cmd args… 이를 사용할 경우 "file" 에서
사용되는 시스템콜들을 추적할 수 있다. 실제로 이 방법은 에러가 발생할 경우 가장
먼저 사용해보는 진단방법 중 하나이다. 예를 들어, 퍼미션 등의 문제로 에러가 발생
하는 등의 문제는 쉽게 파악하여 해결할 수 있을 것이다.


5.2) Solaris 2.5 에서 nm 이 굉장히 느리거나, core 를 덤프하며 다운됩니다.


5.3) Standalone 기계에서 왜 Answerbook 을 실행시킬 수 없습니까?


이것은 OpenWindows 의 버그로 알려져있다. Xhost + 를 이용해 "openwin ?noauth" 를
이용해 이 문제를 해결할 수 있다. 이 해결방법은 stand-alone 이나 모뎀을 이용하는
사용자들에게만 권할만한 해결책임을 명심하기 바란다.


5.4) 왜 원격지로 Answerbook 을 띄울 수 없습니까?


Answerbook 을 디스플레이하는 것은 X 서버의 DPS 확장기능을 지원받아야한다. 물론,
DPS 확장은 대부분의 Unix 웍스테이션에서는 지원되지만 PC/X 소프트웨어나 X 터미
널 등에서는 지원되지 않는다.

많은 사람들이 answerbook viewer 대신 ghostview 를 이용해 answerbook 을 보는데 성
공했다고 하지만, 이는 문서내의 하이퍼텍스트 링크를 이용할 수 없는 부작용 등이
있다.

더 좋은 해결책은 클라이언트 시스템에 Display PostScript 확장팩을 설치하는 방법이다.

Adobe 사는 이미 이러한 클라이언트 확장팩을 DPS-NX 라는 이름으로 제공하고 있다.
 http://www.bluestone.com/


5.5) Filemgr 실행시 ``mknod: permission denied'' 란 에러가 발생합니다. 그 원인은 무엇입니까?


이것은 Solaris 2.3 의 filemgr 의 버그이다. 이를 위해 101514 패치를 설치하거나 아래
의 명령을 부팅시에 사용하기 바란다.
 Mkdir /tmp/.removable
 Chmod a+rwxt /tmp/.removable


5.6) Why do I get isinf undefined when linking with lib엔 on Solaris 2.3?


이것은 libdps의 버그라고 알려져있으며, Solaris 2.4 에서는 해결되었다. Sun 은 그들의
컴파일러 제품으로 컴파일 및 링크를 한다. Isinf() 함수는 SunPRO 컴파일러에 포함되
어있지만, Solaris 2.3 라이브러리에는 정의되어있지않다.

이를 해결하는 간단한 방법은 아래의 내용을 프로그램에 간단히 추가하는 것이다.

#include <ieeefp.h>

int isinf(double x) { return !finite(x) && x==x; }


5.7) Solaris 2.3 과 다른 플랫폼사이의 ppp 연결이 제대로 동작하지 않습니다.


Solaris 2.3 에 포함된 ppp 는 다른 ppp 플랫폼과 호환되지 않는 버그가 있다. 이를 해
결하기위해서는 #101425 패치를 설치하여야한다.


5.8) Solaris 2.3 에서 패스워드에compat 모드를 사용할 수 없습니다.


#101448 패치를 설치하여야한다.


5.9) __buildin_va_alist 또는 __builtin_va_arg_incr 이 정의되어있지않다는 에러가 왜 발생합니까?


이는 gcc 관련 헤더파일들을 제대로 설치하지않았을 때 나타나는 현상이거나, gcc 를
설치한 다음 fixincludes 를 실행시킬 때 관련 헤더파일인 varargs.h 와 stdarg.h 를 제
위치에 두지않고 실행시켰을 때 나타나는 에러이다. 이 에러는 보통 gcc 바이너리 패
키지를 설치할 경우에 나타난다. 제대로 gcc 를 설치하였을 경우에는 gcc 헤더파일 디
렉토리에 tmp 디렉토리가 존재해서는 안된다. 만약, 헤더파일이 제대로 설치되지 않았
을 경우에는 "just-fixinc" 를 실행해보기 바란다.

위의 에러가 발생할 수 있는 또다른 경우로는 ``gcc ?I/usr/include.'' 를 이용할 때 에러
가 발생할 수도 있다.


5.10) 시스템이 부팅과정 중 다운됩니다. Ps 와 관련이 있는 것 같은데 이유가 무엇입니
까?


시스템이 부팅될 때 'ps' 를 실행하여 /tmp/ps_data 파일을 생성하게된다. 이 과정을 통
해 /dev 디렉토리 전체를 스캔하게되는데, 어떤 경우에는 /dev 디렉토리를 스캐닝하는
과정이 루프(loop)를 돌때가 있다. 물론, 이때 ps 는 종료를 하지않고 계속 실행되게된
다. 이는 대부분 /dev/bd.off 란 심볼릭링크에의해 나타나게되며, 이를 해결하기위해서
는 아래의 처방을 사용하면 된다.

# rm ?f /dev/bd.off; ln ?s /dev/term/b /dev/bd.off

이해할 수 없는 에러나 현상이 나타날때에는 항상 truss(1) 를 이용해 시스템콜들을 쫓
아가며 진단해보기 바란다.


5.11) Syslogd 가 모든 것을 logging 하지 않습니다.


먼저 /usr/ccs/bin/m4 가 제대로 설치되어있는지 확인하기 바란다. Solaris 2.4 이전 시스
템의 경우에는 SUNWbtool 패키지에 포함되어있으며, Solaris 2.4 이후 버전에서는
SUNWcsu 패키지에 포함되어있으니 자세히 살펴보기 바란다.

Solaris 2.3 의 경우에는 101318-54 이전 패치를 설치한 시스템의 경우 syslogd 가 제대
로 동작하지않는 경우가 종종 있다.

Solaris 2.4 의 경우에는 102534-xx 와 102697-xx 패치를 설치하여야 제대로 동작할 것
이다.


5.12) 비 Sun 계열 파일서버로부터 파일시스템 마운트시에 ``Invalid client credential'' 이란 에러가 발생합니다.


Sun 이외의 업체 중 최대 8개의 그룹밖에 지원하지않는 RPC/NFS 를 포함한 상태로
운영체제와 시스템을 판매하는 곳들이 있다. Solaris 의 경우 root 는 기본적으로 10개
의 그룹에 속해있다. 즉, Solaris 2 시스템이 NFS 마운트를 NFS 서버에 요청할때에
AUTH_UNIX 증명을 보낼 때 NFS 서버는 이를 제대로 받아들일 수 없게되며, 결국
Solaris 2 시스템은 ``Invalid client credential'' 이란 에러를 발생하게되는 것이다.

해결방법으로는 root 를 비롯한 모든 사용자들을 최대 8개의 그룹에만 등록하면된다.


5.13) 2.4 로 업그레이드한 뒤 NFS 파일시스템에서 `ls` 명령을 이용할 경우 다운됩니다.


Solaris 2.4 는 기본적으로 NFS readdir 요청을 할 때 1024바이트 제약이 설정되어있지
않다. 때문에, SunOS 3.2, Ultrix, NeXT 와같은 NFS 서버에서 ls 명령을 이용할 때 다운
되는 현상이 나타났다.

이를 해결하기위한 방법은 두가지가 있다.

첫째, NFS 파일시스템을 마운트할 때 항상 rsize=1024 옵션을 주는 방법
둘째, bugid #1193696 에해당되는 패치를 시스템에 설치한 뒤 /etc/system 파일에 아래의
내용을 추가하고 리부팅하면 된다.

 Set nfs:nfs_shrinkreaddir = 1


5.14) 101945-xx 패치 설치후 ksh looping 과같은 NFS 관련 문제점이 나타납니다.


101945-17 패치는 NFS 클라이언트가 NFS locking 을 이용할 때 루프에서 벗어나지 못
하는 버그를 갖고있다.

Truss 명령을 이용해 확인해볼 때 read(2) 에서 프로그램이 중단되어있음을 확인할 수
있을 것이다. Ksh 을 경우 이 문제가 더욱 빈번하게 나타난다. 또한, 이 문제는 네트웍
트래픽을 더욱 가중 시키는 원인 중 하나가 된다.

이를 해결하려면 bugid #1198278 에 해당되는 패치를 NFS 클라이언트에 설치하면 된
다.
또한, NFS 파일시스템을 마운트할 때 "noac" 옵션으로 마운트하면, 이와같은 현상은
나타나지 않지만, 성능이 저하될 것이다.


5.15) /etc/system 파일을 실수로 날려버린뒤 시스템을 부팅시킬 수 없습니다.


"boot ?as" 로 부팅을 시도하면, 커널이 시스템관련 설정을 질문할 것이다. 여기에 적
당한 답변을 하면 된다. 참고로, system 파일의 위치를 물어볼때에는 그냥 /etc/system
이라고 적거나, /dev/null 이라고 적어도 무방하다.


5.16) /etc/path_to_inst 파일이 깨져서 시스템을 부팅시킬 수 없습니다.


"boot ?a" 옵션으로 부팅을 시도하면, 커널은 path_to_inst 파일을 리빌드할 것인지를 물
어볼 것이다.


5.17) TCP/IP 접속이 원활하지 않으며, 연결되더라도 굉장히 속도가 느립니다.


Solaris 2.x 에서의 tcp/ip 인터벌은 2분밖에 되지않는다. 이말은 ACK 패킷이 2분내에
도달하지않을 경우, 접속 자체가 끊김을 의미한다. 이로말미암아 나타나는 가장 빈번
한 에러는 sendmail 의 아래와같은 에러이다.

Sendmail: SYSERR: collect: read timeout on connection from…

이러한 현상은 아래와같이 인터벌을 8분으로 늘임으로써 해결가능하다. 물론, Solaris
2.4 이후에는 8분이 기본 인터벌 값이다.

/usr/sbin/ndd ?set /dev/tcp tcp_ip_abort_interval 480000

부팅될때마다 이를 적용하기위해서는 위의 명령을 rc2.d 디렉토리에 스크립트로 만들
어두어야한다. 이 방법에대해서는 섹션 3.16 을 참고하기 바란다.

이 문제점 외의 가능한 다른 문제점에 대해서는 섹션 5.19 를 참고하기 바란다.


5.18) 비Unix 시스템으로의 sendmail 이 제대로 동작하지 않습니다.


Solaris 2.x 를 위한 sendmail V8 버전 패치와 Solaris 2.5 에 기본적으로 내장된 sendmail
의 sendmail.cf 파일 내의 사소한 문제로 인해 이와같은 현상이 나타난다.
즉, ethernet mailer 에있어 end-of-line 문자가 정의되어있지않기 때문에 sendmail 이 개행
문자를 SMTP 프로토콜을 이용해 보내게될 경우 이런 현상이 나타나는 것이다. 이를
해결하기위해서는 sendmail.cf 파일내의 아래의 내용을 다음과같이 변경하기 바란다.

Mether, P=[TCP], F=msDFMuCX, S=11, R=21, A=TCP $h
Mether, P=[TCP], F=msDFMuCX, S=11, R=21, A=TCP $h, E=\r\n

이외에도 M 으로 시작되는 모든 내용 중 P=[TCP] 또는 P=[IPC] 를 포함하고 있는 행
에는 항상 "E=\r\n" 이 포함되어있어야함을 명심하기 바란다.

이 버그는 Solaris 2.x 용 최신 sendmail 패치에는 이미 고쳐진 상태이다.


5.19) Solaris 2.x 시스템의 TCP/IP 연결을 특정 호스트에대해서 설정할 수 없습니다.


Solaris 2.x 는 MTU 패스에 속한 호스트로 보내는 패킷 모두에 fragmentation 을 방지하
는 비트를 설정한다. 물론, 이는 RFC 를 만족시키는 방법이지만, MUT 패스내에 잘못
된 라우터가 존재한다면, TCP/IP 접속이 이루어지지 않게된다.
이를 해결하기위해서는 아래의 명령을 실행하면 된다.

/usr/sbin/ndd ?set /dev/ip ip_path_mtu_discovery 0


5.20) 5.19를 제대로 읽었음에도 불구하고, 접속이 원활하지 않습니다.


Solaris 2.x 에서 굉장히 큰 패킷을 보낼때에도 fragmentation 방지를 위한 비트를 설정
하는 경우가 종종있다. 물론, 이럴 경우에 이들 패킷은 fragment 되지도 않으며, 그냥
고스란히 사라져버리게된다.

섹션 5.19 의 방법을 사용하였음에도 불구하고, 이와같은 현상이 나타난다면 전체적인
네트웍 성능을 저하시키게되지만, 아래와같은 방법으로 해결가능하다.

/usr/sbin/ndd ?set /dev/tcp tcp_mss_max 536

여기서 536 이란 대부분의 네트웍에서도 전송가능한 표준 패킷크기이다.

"ip_path_mtu_discovery" 를 이용한 방법은 양쪽 호스트에서 모두 실행되어야한다. 만약,
둘 중 어느 한곳에서만 실행되었다면, 이는 외부로 나가는 패킷에대해서만 적용되기
때문에 다른 곳에서 들어오는 패킷은 제대로 들어오지 못하게된다. 예를 들어, 다른곳
으로부터의 downloading 은 가능하더라도, 이곳에서 다른곳으로의 uploading 은 불가능
하다는 것이다. 반면, "tcp_mss_max" 를 이용한 방법은 양쪽 중 어느 한곳에서만 실행
되면 된다.

"tcp_mss_max" 를 이용해 이런 문제점이 해결될 경우에는 link layer 에 문제가 있음을
반증하는 것이다. 이때에는 traceroute 를 이용해 문제가 있는 곳을 찾아야한다.
Traceroute 를 이용해 문제가 있는 곳을 찾기위해서는 패킷 크기를 변경시키면서 목적
지로 패킷을 보내보면 된다.


5.21) Solaris 가 아닌 시스템에서 Solaris 메일을 읽거나, Solaris 메일리더가 아닌 것으로 일을 읽을 경우 특정 메시지가 여러 개로 쪼개지는 현상이 나타납니다.


Solaris 2.x 는 MUA 가 헤더와 본문을 분리하도록 하기위해 "Content-Length:" 헤더를
사용한다. 하지만, 다른 시스템은 이러한 방식을 인식하지 못한다. 이를 해결하기위해
서는 "E" 를 로컬메일러 설정부분에 추가하여야한다. 즉, 아래와같이 F= 부분에 E 를
추가하기 바란다.

Mlocal, P=/bin/mail, F=flsSDFMmnP, S=10, R=20, A=mail ?d $u
Mlocal, P=/bin/mail, F=EflsSDFMmnP, S=10, R=20, A=mail ?d $u


5.22) Mail/mailx 가 종종 잘못된 수신인에게 메일을 보내거나, 송신인을 제대로 나타내지 못합니다.


Mail/mailx 는 수신자를 결정하기위해 UUCP 를 이용하기 때문에, From: 헤더만 사용한
다. 때문에, .mailrc 파일에 "set from" 항목을 지정해두어야한다.


5.23) 시스템 사용자가 login 할 수 없습니다.


Shadow 테이블과 파일, 맵에는 expire 항목이 존재하여, 최종 로긴한때와 현재시각을
비교하여, expire 되었다고 판단될 때에는 "Login incorrect" 란 메시지를 나타내며, 로긴
을 불허하게된다. 이를 복구하기위해서는 shadow 파일에서 expire 항목을 변경하면 된
다.


5.24) /var 또는 /var/adm 파티션을 마운트하는 다른 클라이언트 시스템이 부팅되지 않습니다.


/ 또는 /var, /var/adm 디렉토리는 클라이언트쪽에서 llock 옵션을 이용해 마운트되어야
한다. Solaris 2 는 / 파티션에대해서는 이를 자동으로 적용하지만 /var, /var/adm 에대해
서는 이를 자동으로 지원하지않는다. 때문에, llock 옵션으로 마운트되지않은 /var,
/var/adm 디렉토리내의 [wu]tmp 파일 등을 수정하려할 때 시스템이 다운되는 것이다.

이를 해결하기위해서는 llock 옵션으로 파일시스템을 마운트해야된다.


5.25) Solaris와 SunOS 가 중복되어있는 환경에서 vacation 이 제대로 동작하지 않습니다.


SunOS 4.x 의 /usr/bin/vacation 은 Solaris 2 에서 /usr/ucb/vacation 으로 위치가 변경되었
다. 때문에, .forward 파일내에서 vacation 을 이용하려면 절대 경로를 반드시 지정해주
어야된다.

이 문제를 해결하기위해서 SunOS 4.x 의 경우 /usr/ucb/vacation 을 /usr/bin/vacation 으로
링크를 걸어두고, Solaris 2 의 경우 /usr/bin/vacation 을 /usr/ucb/vacation 으로 링크를 걸
어두어야한다.


5.26) <defunct> 프로세스가 굉장히 많이 생깁니다. 어떻게 이들을 없앨 수 있습니까?


일반적으로 defunct 프로세스는 parent 프로세스가 child 프로세스를 관리하지않을 때
생기게된다. 각각의 좀비 프로세스들의 parent 프로세스가 무엇인지 "ps ?e" 를 이용해
확인한 뒤 해당 parent 프로세스의 버그를 수정하여야한다.

Solaris 2.3 의 경우 pseudo tty 모듈이 종료될 때 이와 같은 현상이 나타났다. 이를 해결
하기위해서는 101415-02 패치를 설치하기 바란다.


5.27) telnet 이나 rlogin 시도시 /dev/ptmx: No such device 란 에러메세지가 나타납니다.


섹션 3.39 를 참고하여 pseudo tty 의 개수를 증가시키면 된다.


5.28) Ld 가 msync 에러를 발생시킵니다.


보통 Cray 시스템을 파일서버로 사용할 때 이와같은 에러가 발생한다. 왜냐하면, Cray
시스템은 ld 가 원하는 모든 NFS 관련 연산을 지원하지 않기 때문이다. Solaris 2.3 에
101409-04 점보 링커패치를 설치하기 바란다.


5.29) Su 명령 이용시 패스워드 프롬프트가 나타나지않고, "Sorry" 란 메시지가 나타납니
다.


Su 명령은 SunOS 4.1.x 에서 컴파일된 쉘에서는 동작하지않는다. Tcsh 이나 bash 를
Solaris 2.x 에서 다시 컴파일하여 설치하기 바란다.


5.30) 2.3 에서는 되던 비Sun 계열 CD-ROM 으로의 인스톨이 2.4에서는 안됩니다.


Solaris 2.3 과 2.4 사이에 "sd" 드라이버에 몇가지 변화가 생겼다. 512바이트 블록을 이
용하도록 설정해주는 코드가 2.4 에서는 삭제되었기 때문에, 2.4 에서 비 Sun 계열
CD-ROM 으로 Solaris 인스톨이 불가능하게 된 것이다. 때문에, Sun 계열 CD-ROM 을
빌려서 설치를 하거나, 네트웍 모드로 설치를 하여야한다.

X86 버전에서는 이 문제가 해당되지 않는다.

물론, 512바이트 블록을 사용하는 CDROM 들은 이런 문제없이 잘 설치될 것이다.

Sun CD-ROM FAQ 는 비 Sun 계열 CD-ROM 드라이브를 이용해 부팅 및 설치하기위해
패치하는 방법을 자세히 설명하고 있다.
 http://saturn.tlug.org/suncdfaq/


5.31) Ifconfig 가 시스템의 네트웍 인터페이스를 찾지못합니다.


부팅당시에 주소와함께 설정된 네트웍 장치만 ifconfig 가 찾을 수 있다. 이를 해결하
기위해서는 아래와같이 하기 바란다.

 Ifconfig ifN plumb


5.32) 응용프로그램을 제대로 컴파일하였음에도 불구하고 실행할 때 다음과같은 에러가
발생합니다.  Fatal: libfoo.so.2: can't open file: errno=2


아래와같이 링크를 위해 ?R<wherethelibraryis> 를 추가해주어야한다.

 Cc ?L/usr/dt/lib ?L/usr/openwin/lib \
    -R/usr/dt/lib ?R/usr/openwin/lib \
     xprog.c ?lXm ?lXt ?lX11


5.33) Motif 프로그램을 실행시 곧바로 core 덤프를 냅니다.


컴파일 할 때 다른 X 라이브러리보다 먼저 Motif 라이브러리를 지정해주어야한다.

잘못된 방법:
 cc …. ?lXt ?lXm
올바른 방법:
 cc…. ?lXm -lXt


5.34) Cc 를 이용해 컴파일 시도시 "language optional software package not installed" 란 에러가 발생합니다.


Solaris 2.x 에는 기본적으로 C 컴파일러가 포함되어있지않다. /usr/ucb/cc 는 실제 C 컴
파일러가 아니라 SunSoft C 컴파일러를 위한 선행 스크립트일 뿐인 것이다. 때문에, 이
를 위해 SunSoft C 컴파일러를 구입하던지, gcc 를 설치하여야한다. 또다른 원인으로는
/usr/ccs/bin/ucbcc 가 /opt/SUNWspro/SCxxxx/cc 로 제대로 링크가 걸려있지않기 때문에
위와같은 에러가 발생할 수도 있다. 이에대해서는 섹션 6.1 을 참고하기 바란다.


5.35) Thr_create 를 비롯한 thread 함수가 항상 ?1 을 리턴합니다.


만약 SunPRO C 3.0 이나 그 이후버전을 이용하고있다면, 컴파일과 링크를 할 때 ``-
mt'' 옵션을 이용해야한다. 또한, SunPRO C 3.0 이전 버전이나 gcc 를 이용중이라면 ?
D_REENTRANT 를 지정하고, 컴파일하여야하며, 링크를 위해서는 ?lthread 를 이용하
여야한다.


5.36) Solaris 2.4 가 시간이 지남에따라 느려집니다. 커널의 메모리 부족으로 인한 것 같
습니다만, 이유가 무엇입니까?


이러한 커널 메모리 부족현상에는 두가지 원인이 있을 수 있다.

첫번째 문제는 volume 관리 장치드라이버의 문제로 인한 것이며, 이를 위해서 SPARC
에는 101907-05 를 x86 에는 101908-07 패치를 설치하여야한다. 이는 vold 를 사용하지
않는 시스템에서도 마찬가지로 나타나는 현상이므로 반드시 패치를 설치하기 바란다.

NFS 클라이언트의 캐쉬도 상당부분 이 문제를 유발시킬 것이다. 가장 간단한 방법은
``set nrnode = 1000'' 란 내용을 /etc/system 에 추가하고 시스템을 리부팅시키는 것이다.
일반적으로 메가당 약 20-30개의 rnodes 를 지정해두면 된다.

다른 문제로는 /tmp 디렉토리에서의 오버플로우나 tmpfs 파일시스템에서의 오버플로우
등을 들 수 있다. 이는 df/du 등을 통해 주기적인 관찰을 필요로한다.


5.37) "Unable to install/attach driver 'xxx'" 란 에러가 발생하는 것은 무엇때문입니까?


커널은 설치되어있지않은 장치에대한 드라이버를 로딩하려할 때 위와같은 에러메세지
를 나타낸다. 즉, 아무 영향을 미치지않기 때문에 위와같은 에러메세지는 무시해도 된
다.


5.38) Nfs 구동시 "netdir_getbyname failure, /dev/udp: bind problem" 란 에러가 발생합니다.


/etc/services 파일이나 NIS 맵, NIS+ 테이블에서 nfs 서비스관련 내용이 사라져있을 경
우에 이런 에러메세지가 나타난다. 이때에는 아래와같은 내용을 해당 파일에 추가해
두어야한다.

Nfsd 2049/udp nfs # NFS server daemon (clts)
Nfsd 2049/tcp nfs # NFS server daemon (cots)

만약 NIS+ 를 사용중이라면, nfsd 를 구동하는 시스템이 NIS+ 항목을 읽을 수 있어야
한다.

SunOS 4.x 의 services 파일을 이용중이라면, SunOS 4.x 의 /etc/services 파일은 nfsd 관련
항목을 갖고있지않기 때문에 이 내용을 추가해두어야한다.

Solaris 2.4 와 그 이전버전은 tcp 를 이용한 NFS 항목을 갖고있지않다. 때문에, 2.5 이
상의 NFS 서버를 이용하는 2.4 이전버전의 NIS/NIS+ 클라이언트들에있어 에러가 나타
나게된다.

이때, Solaris 2.5 이상의 NFS 서버에 나타나는 에러메세지는 아래와같다.

Nfsd: Cannot get address for transport u에 host \1 service nfs
Nfsd: Cannot establish NFS service over /dev/udp: transport setup problem.
Nfsd: Cannot get address for transport tcp host \1 service nfs
Nfsd: Cannot establish NFS service over /dev/tcp: transport setup problem.

5.39) "named[]: rt_malloc: memdebug overflow" 란 에러는 왜 나타납니까?

이 에러는 Solaris 2.4 의 named 자체의 버그 때문에 나타나는 것이다. 이를 해결하기위
해서는 아래의 패치를 각각 설치하여야한다.
 102479-01: SunOS 5.4: memory leak/mismanagement in in.named
 102480-01: SunOS 5.4_x86 : memory leak/mismanagement in in.named

이들관련 가장 최신 패치는 bind 4.9.3 의 기능을 포함하고 있다.
 102479-02: SunOS 5.4: DNS spoofing is possible per Cern ca-96.02
 102480-02: SunOS 5.4_x86: DNS spoofing is possible per Cern ca-96.02


5.40) Solaris/x86 에서 ld 가 core 를 덤프합니다.


Solaris 2.4/x86 의 ld 는 "-s" 옵션을 사용하였을 경우 core 를 덤프하게된다. 이를 해결
하기위해서는 ?s 옵션없이 링크를 하고, 실행파일을 strip 하여야한다.


5.41) Solaris 2.4 에서 TCP 접속의 성능이 현저하게 떨어집니다.


101965-05 패치는 TCP/IP 접속 성능을 떨어뜨린다. 이때에는 101965-05 패치를 복구하
거나, 101945-27 이후버전의 커널 점보패치를 새로 설치하여야한다. 후자를 택하기를
권장하는 바이다.

하지만, Solaris 2.4 x86 에서는 101946-29 커널 점보패치를 설치할 경우 몇몇 이더넷 카
드에서 문제가 발생하게된다. 이들 시스템에서는 최신 패치를 설치하여야한다.


5.42) Solaris 2.4 의 in.tftpd 가 굉장히 느리게 동작합니다.


Solaris 2.4 에서 tftpboot 를 chroot 환경으로 구동함에있어 몇가지 문제점이 발견되었다.
이를 해결하기위해서는 아래의 방법을 사용하면 된다.

 Mkdir /tftpboot/dev
 Mknod /tftpboot/dev/udp c 11 41
 Chmod 755 /tftpboot/dev; chmod 666 /tftpboot/dev/udp

이 문제는 SPARC 에서는 102773-01 패치에서, x86 에서는 102774-01 에서 해결되었다.


5.43) "df : Could not find mount point…" 란 에러가 발생합니다.


마운트 포인트가 /cdrom 에서 시작된다면, 이는 Solaris 2.4 에서 HSFS CDROM 지원을
위해 업데이트되면서 생긴 버그이다. /etc/mnttab 을 열어서 dev= 이란 항목을 제거하기
바란다.

만약, 마운트 포인트가 /net/HOSTNAME 으로 시작되며, HOSTNAME 이 다른 호스트일
경우에는 아마 Sun bigid #1207057 에 해당될 것이다. 이때에는 102785-01 패치를 설치
하기 바란다. HOSTNAME 이 다른 호스트가 아니고, 자기 자신일 경우에는 Sun bigid
#1220440 에 해당된다. 이 역시 해당되는 패치를 설치하는 것이 좋다.


5.44) Root 의 login shell 변경후 login 할 수 없습니다.


만약, 변경한 root 의 login shell 이 적절치 못한 쉘일 경우에는 CD 를 이용해 single
user 모드로 부팅하는 방법 밖에 없다.

Single user 모드로 부팅한 다음 root 파일시스템을 마운트하여 <mntpoint>/etc/passwd 파
일을 직접 수정하여야한다.

만약, NIS 나 NIS+ 를 운영중이라면 더욱 쉬운 방법이 있다. 바로 uid 가 0인 새로운
계정을 추가하고 이를 이용해 root 의 login shell 을 변경하면 되기때문이다.


5.45) C++ 프로그램을 링크할 때 "_ex_keylock" 이 정의되지않았다는 에러가 발생합니다.


C++ 컴파일러를 위해 SPARC 기종이라면 101910, x86 이라면 102486 패치를 분명히
설치하였을 것이다. 하지만, 이때 함께 설치하여야하는 libc.so.5 관련 패치는 설치하였
음이 분명하다.

SPARC 기종이라면 101242-10, x86 이라면 102859-01 패치를 반드시 설치하기 바란다.
이 문제점은 Solaris 2.5 이후버전에서는 고쳐져있다.


5.46) 파일시스템이 꽉찼거나, quota 를 넘겼을 때 NFS 가 다운됩니다.


Solaris 2.4 의 경우 quota 를 사용중이거나, 거의 꽉찬 디스크를 할 경우 이런 문제를
발생시킨다.

커널 패치 101945-32(sparc)/101946-29(x86) 을 설치하기 바란다. 물론, 서버뿐만 아니라
클라이언트에도 패치를 설치하여야한다.


5.47) OpenWindows 가 "Binding Unix Socket: Invalid argument" 란 에러를 발생합니다.


이 에러는 보통 diskless/dataless 클라이언트에서 발생한다. 새로운 커널 점보 패치를
서버에 설치할 경우 보통 첨부된 readme 파일을 자세히 읽지않는 경우가 많은데,
readme 파일에는 아래와같은 내용이 들어있다.

NOTE: If this patch is applied to a server, it should also be applied to dataless clients that
also mount /usr from that server. Failure to do so will generate this error message when openwin is
started on the client: "Binding Unix socket: Invalid argument"

즉, 커널 점보패치를 서버에 설치할 때에는 반드시 클라이언트에도 커널 점보패치를
설치하여야한다.


5.48) Why is Xsun such a memory pig, especially on the SX, S24 and FFB?


Ps 명령은 framebuffer 가 이용하는 매핑을 메모리로 간주한다. 하지만, FFB 가 디바이
스 주소영역으로 사용하는 매핑은 실제 메모리가 아니다.

실제로 FFB+(Creator 3D) 을 사용할 경우 X 서버가 500MB 의 프로세스 크기를 갖는
경우가 태반인 것을 보면 알 수 있을 것이다.

Solaris 2.3 FCS 는 SX 를 사용할 경우 Xsun 메모리를 낭비하는 경향이 있다. 이를 해
결하기위해서는 SX 패치를 설치하거나 Solaris 2.x 최신버전으로 업그레이드하는 것이
좋다.

Solaris 2.5 에서부터는 /usr/proc/bin/pmap 를 이용해 Xsun 이 사용중이 정확한 매핑을
확인할 수 있다. 또한, 2.6 에서는 "pmap ?x" 를 이용해 얼마만큼의 매핑이 공유되고
있는지 등의 정보도 알 수 있게된다.


5.49) Solaris 2.4 와 2.5 에 101945-34 패치를 설치한뒤 TCP 성능이 현저하게 떨어졌습니다.


Solaris 2.4 와 2.5 커널 패치 101945-34 의 경우 TCP 패킷을 재전송하는 알고리즘을 이
용해 쓸데없는 패킷들을 재전송하는 현상이 나타났다. 실제로 이 버그는bugid
#1233827 로 알려져있다.

이를 해결하기위한 응급처방으로 아래의 명령을 부팅시에 실행하는 방법이 있다. 물
론, 간단히 /etc/init.d/inetinit 에 첨가해두면 된다.

 /usr/sbin/ndd ?set /dev/tcp tcp_rexmit_interval_min 3000
 /usr/sbin/ndd ?set /dev/tcp tcp_rexmit_interval_initial 3000

위의 응급처방을 이용할 경우 몇몇 호스트에서는 실제로 재전송해야할 경우에 인터벌
이 너무 길어서 시간이 오래걸린다는 현상이 나타났다. 이에, 아래와같이 최소 재전송
인터벌을 줄이고, 패킷 사이즈를 536바이트로 제한하는 방법을 사용할 수도 있다.

 /usr/sbin/ndd ?set /dev/tcp tcp_rexmit_interval_min 1000
 /usr/sbin/ndd ?set /dev/tcp tcp_rexmit_interval_initial 3000
 /usr/sbin/ndd ?set /dev/tcp tcp_mss_max 536

이 버그를 해결하기위한 공식 패치도 이미 발표되어있으며, 그 목록은 아래와같다.
주의할 점은 위의 응급처방과 아래의 패치설치를 동시에 시스템에 적용해서는 안된다
는 점이다.

 101945-02: SunOS 5.4: patch for kernel

 103169-06: SunOS 5.5: ip driver and ifconfig fixes
 103447-03: SunOS 5.5: tcp patch

 103448-03: SunOS 5.5_x86: tcp patch
 103170-06: SunOS 5.5_x86: ip driver and ifconfig fixes

 103582-01: SunOS 5.5.1: /kernel/drv/tcp patch
 103630-01: SunOS 5.5.1: ip and ifconfig patch

 103631-01: SunOS 5.5.1_x86: ip and ifconfig patch
 103581-01: SunOS 5.5.1_x86: /kernel/drv/tcp patch

 103632-01: SunOS 5.5.1_ppc: ip and ifconfig patch
 103583-01: SunOS 5.5.1_ppc: /kernel/drv/tcp patch


5.50) X86 에 101946-29 패치를 설치한 뒤 socket 사용이나 TCP/IP 성능이 현저하게 떨어졌습니다.


소켓 문제를 해결하기위해서는 101946-12 나 101946-35 와같은 커널패치에서
"sockmod" 를 카피하면 된다.

성능문제는 device 드라이버관련 문제이며, 이는 모든 이더넷 카드에 해당되지는 않는
다. 이 문제를 해결하기위해서는 DU10 을 설치하면 된다.


5.51) Du 와 ls 가 NFSv3 마운트된 파일시스템에서 이상하게 동작합니다.


Solaris 2.5 NFS V3 첫 버전은 stat 이 리턴해주는 결과를 이용해 블록을 계산하는데 버
그가 있었다. 서버는 실제 값보다 16배 증가된 값을 리턴하였으며, 클라이언트는
stat() 보다 16배 줄어든 값을 리턴하였다.

하지만, 실제로 패치되지않은 Solaris 2.5 기계에는 별 문제가 없어보였다.

클라이언트의 경우 실제 값보다 16배나 작게 리턴된 파일들 때문에 NFS V3 스왑영역
을 사용할 수 없게되는 등의 문제가 발생하였다.

이 문제 해결을 위한 방법은 두가지가 있다.
첫째, Solaris 2.5.1 로 업그레이드를 하는 것이며, 둘째, 103226(sparc)/103227(x86) 패치를
각각 서버와 클라이언트에 모두 설치하는 것이다.


5.52) 시스템을 종료하거나 리부팅시킬 때 "INIT: failed write of utmpx entry" 란 에러가 발생합니다.


시스템을 셧다운시킬때면 init(1m) 은 /var/adm/utmp* 파일들의 내용을 업데이트하게된
다.
만약, /var 가 독립된 파티션이라면 위의 작업이 /var 가 unmount 된다음에 수행되게되
므로, init 는 이를 제대로 수행할 수 없게된다.

INIT: failed write of utmpx entry:"s6"
INIT: failed write of utmpx entry:"rb"

이들 메시지를 무시하여도 큰 지장은 없다.


5.53) 패치 설치시 "checkinstall" 이란 에러가 나타납니다.


Solaris 2.5 이상에서는 패치를 설치할 때 "checkinstall" 이라는 스크립트가 nobody 권한
으로 먼저 실행된다.

만약 패치관련 파일들이 nobody 권한으로 읽을 수 없거나, 관련된 path 에 nobody 권
한으로 접근할 수 없다면, 아래와같은 에러가 발생할 것이다.

./installpatch .
Generating list of files to be patched…
Verifying sufficient filesystem capacity (exhaustive method)…
Installing patch packages…
Pkgadd: ERROR: checkinstall script did not complete successfully
….

위와같은 에러는 두가지 방법으로 해결할 수 있다. 첫번째 방법은 nobody 가 실제로
패치관련 파일과 디렉토리에 접근할 수 있도록 퍼미션을 조정해두는 것이며, 두번째
방법은 아래와같이 "install" 이란 계정을 /etc/passwd 에 등록해두는 것이다.

 Install:x:0:1:installpatch braindamage:/:/bin/true

Installpatch 는 "install"이란 계정이 존재하지 않을 때 비로소 "nobody" 권한으로
checkinstall 스크립트를 실행시키기 때문이다.


5.54) Why do I get a CPU-bound rpc.ttdbserverd process?


Rpc.ttdbserverd 는 RPC 기반의 ToolTalk 데이터베이스 서버이며, TT_DB 디렉토리내의
데이터베이스들을 생성하거나, 관리하는 역할을 한다. 이에대한 자세한 정보는
ttdbserverd(1M) 을 참고하기 바란다.

이 문제점은 TT_DB 디렉토리내의 깨진 파일이나 항목들 때문에 주로 발생한다. 이를
해결하기위한 방법은 동작중인 rpc.ttdbserverd 프로세스를 죽이고, 모든 TT_DB 디렉토
리들을 삭제시켜버리는 방법이다.

이후 inetd 에의해 필요한 경우 rpc.ttdbserverd 는 새로 실행될 것이며, 이때 TT_DB 디
렉토리들을 리빌드하게된다.

기본적으로 TT_DB 디렉토리는 모든 파티션의 top 디렉토리에 생성되지만,
/etc/tt/partition_map 을 이용해 원하는 특정 위치로 이들을 지정할 수 있다. 이에관한
내용은 partition_map(4) 을 참고하기 바란다.


5.55) /proc 이란 무엇입니까? 이곳에서 크기가 큰 파일을 안전하게 없앨 수 있습니까?


/proc 파일시스템은 실행중인 모든 프로세스의 메모리 이미지이다. 즉, 물리적 디스크
공간을 차지하지않는 가상 파일시스템인 셈이다.

/proc 은 ps 나 top 등과같은 프로그램들을 위해 사용되며, /usr/proc/bin 디렉토리내의
프로그램들은 프로세스의 상태를 파악하는데 사용될 수 있다.

/proc 을 제거하는 유일한 방법은 unmount 를 이용하는 것인데, 이를 수행할 경우 수
많은 실행중인 프로그램들이 파괴될 것이다.


5.56) "named[] : Lame server on 'hostname'…" 가 무엇을 의미합니까?


Sun 에서 제공하는 새로운 bind 패치를 적용한 named 의 경우 설정문제와 관련된 모
든 메시지들이 출력된다. 위와같은 메시지는 특정 도메인을 위하여 특정 네임서버가
지정되었음을 알리는 메시지이다. 즉, 해당 도메인에대한 query 에대해서 동작중인 네
임서버는 대답을 하지않게되는 것이다.

이것은 소위 "lame delegation" 이라고 불리운다.


5.57) Solaris 를 대용량 하드에 설치한뒤 부팅되지 않습니다.


Openboot PROM 의 제한 때문에 32비트 SPARC 시스템(sun4c, sun4m, sun4d) 은 2기가
이상이 root 파티션으로 할당된 SCSI 디스크로는 부팅이 되지않는다.

게다가 2.5 이하의 PROM 버전에서는 심지어 root 파티션을 1기가 미만으로 설정해야
한다.

Ultra PROM 은 위와달리 이런 상황을 지원하지만, 역시 Solaris 2.6 미만이 설치된 경우
에는 효율성에서 버그를 갖고있다고 한다. 103640-08 이상의 패치를 설치할 경우 Ultra
PROM 에서 2기가 이상의 root 파티션을 갖는 Solaris 2.5.1 을 부팅시킬 수 있다.


5.58) Ultra 시스템을 종료할 때 "WARNING: THERMAL WARNING DETECTED!!!" 란 에
러가 발생합니다.


Ultra 시스템은 과열방지를 위해 시스템의 온도를 감지하는 센서를 부착하고있으며, 과
열이라고 판단될 경우 시스템이나 보드를 셧다운 시키게된다. 보통 이는 CPU 쿨러가 파
괴되거나 공기순환이 되지않을 경우에 일어난다.



6. 소프트웨어 개발



6.1) C 컴파일러는 어디에 있으며, 어떻게 구할 수 있습니까?


Sun 은 예전의 K&R C 컴파일러를 더 이상 지원하지않으며, 훨씬 향상된 성능과 기능
을 띈 컴파일러 시장형성을 위해 컴파일러를 기본적으로 내장하지않았다.

1) SunPro C: http://www.sun.com/sunsoft/

SunPro, SMCC 그리고 여러 디스트리뷰터를 통해 ANSI C 컴파일러를
SPARCcompiler/SPARCWorks CD-ROM 으로 판매하고 있다. 게다가 "make tool" 등의 여
러 개발도구들도 함께 판매하고 있다.

또한, 동시 사용자 제한만큼의 라이센스를 별도로 구입하여야한다.

2) Apogee 컴파일러 http://www.apogee.com/

Apogee 는 오로지 SPARC 용 C, C++, f77, f90 컴파일러컴파일러를 판매한다.

3) Cygnus GCC http://www.cygnus.com/

Cygnus Support 와 FSF(Free Software Foundation)은 GNU C 컴파일러를 만들어 이를 공
짜로 제공한다. 물론, 사용자 제한이나 배포에도 제약이 없다. 다만, Cygnus 는 개발툴
의 기술지원에대한 대가로 년간 계약비를 필요에따라 받는다.

Cygnus 배포본으로는 아래와같은 것들이 있다.
Gcc(ANSI C 컴파일러), gdb(good debugger), byacc(yacc repl), flex(lex repl), 헤갤, makeinfo,
texindex, info, patch

Cygnus 컴파일러는 최신 배포본의 속도를 못따라가고 있다. 때문에, X11R5 등을 컴파
일하려면 Cygnus 바이너리를 이용해 gcc 최신버전을 직접 컴파일한뒤 이를 이용해
X11R5 를 컴파일 하면 된다.

4) gcc

gcc 는 GNU 사이트에서 소스형태로 구할 수 있다. 만약, 바이너리 버전을 이용중이라
면 반드시 "just-fixinc" 를 실행해야함을 잊지 말기 바란다.

GNU 소프트웨어는 아래의 장소에서 구할 수 있다.

 ftp://prep.ai.mit.edu/pub/gnu
 ftp://gatekeeper.dec.com/pub/GNU
 ftp://ftp.uu.net/systems/gnu
 ftp://wuarchive.wustl.edu/mirrors/gnu
 ftp://nic.funet.fi/pub/gnu


6.2) 링커나 어셈블러, make 등은 어떻습니까?


Solaris 는 컴파일러를 제외한 다른 모든 것들을 파함하고 있다. 이들은 주로
/usr/ccs/bin, /usr/ccs/lib 에 존재한다. 만약, 원하는 것들을 찾을 수 없다면, 아래의 패키
지들이 시스템에 설치되어있는지 확인하기 바란다.

 Tools(sccs, lex, yacc, make, nm, truss, ld, as)
 SUNWbtool, SUNWsprot, SUNWtoo
 Libraries & headers
 SUNWhea, SUNWarc, SUNWlibm, SUNWlibms, SUNWdfbh, SUNWcg6h, SUNWxwinc,
SUNWolinc, SUNWxglh
 Ucb 호환
 SUNWsra, SUNWsrh

이들 패키지들은 모두 Solaris 2.x CD 와 Desktop/CDE CD 에 포함되어있다.


6.3) Ranlib 는 어디에 있습니까?


SunOS 4.1.x 의 ranlib 가 제공하던 기능들은 ar 로 변경되었다. 이제 더 이상 ranlib 를
실행할 필요가 없게된 것이다.

6.4) X11R5 를 컴파일하기위해 필요한 것은 무엇입니까?

Solaris 2.1 에서는 X11R5 를 위해 여러 개의 패치키트들을 설치하여야했다. 또한, gcc
2.3.3 이상 버전이 필요하다.

위의 패치키트는 ftp://ftp.x.org/R5contrib/R5.SunOS5.patch.tar.Z 란 파일의 형태로 제공된
다.


6.5) Solaris2.4 에서 X11R6 를 컴파일할 수 없습니다.


Xc/programs/Xserver/Xext/shm.c 에서 shmat() 가 재정의되었다면서 컴파일되지 않을 것
이다.

SC 2.0.x 를 이용할 경우 컴파일에서 에러가 나타날 것이다.

이에관해서는 섹션 6.6 을 참고하기 바란다.


6.6) Solaris 2.4 에서 X11R6 가 동작하지 않습니다. Xinit 는 "User Signal 1" 이란 에러를 나타내며 xterm 은 다운되고 맙니다. 물론, emacs-19 등도 동작하지 않습니다.


Libc.so 와 libthread.so 에서의 몇가지 변화는 libX11.so 에 링크된 libthread 와 궁합이
맞지않게되었다. 때문에, xinit 등에서 시그널을 제대로 처리하지 못하여 xterm 이 쉘이
종료된 후에도 제대로 종료되지 못하며, emacs-19 의 dired 모드를 이용할 때 다운이
되는 현상 등이 나타났다.

Xc/config/cf/sun.cf 에서 OSMinorVersion 을 4로 변경하고 "make" 가 아닌 "make
Everything", "make World" 로 컴파일하기 바란다. 주의할 점은 OSMinorVersion 에서 첫
번째 항목은 x86 용 minor version 이며, 두번째 항목은 sparc 용 minor version 이라는
점이다. 해당되는 항목을 수정하기 바란다.

R6 는 Solaris 2.3 이나 이전버전에서는 동작되지않을 것이다. 만약, Solaris 2.3 에 똑같
은 바이너리를 얻고자할 경우에는 sun.cf 에서 "#define ThreadedX YES" 를 "#define
ThreadesX NO" 로 변경하고 컴파일하기 바란다.

주의할 점은 컴파일뒤에 "make install" 로 시스템에 라이브러리 등을 제대로 설치하여
야한다는 점이다.
dump ?Lv libX11.so.6 을 실행한 결과 libthread 관련 항목에 "NEEDED" 가 여전히 나타
날 경우에는 적용이 제대로 되지않은 경우이다. 다시한번 확인해보기 바란다.


6.7) Solaris 2.2 에서 X11R6 를 컴파일할 때 정의되지않은 symbol 들이 있다는 에러가 발생합니다.


Solaris 2.2 는 X11R6 지원을 위해 필요한 thread 를 모두 지원하지 않는다. Multi-thread
를 지원하지않도록 X11R6 를 컴파일하던지, 2.3 이나 그 이상의 버전으로 업그레이드
하는 방법밖에 없다.


6.8) Gcc 2.7.0 으로 X11R6 를 컴파일한뒤 X 프로그램 실행시 라이브러리를 찾을 수 없다고 합니다.


Gcc 2.7.0 버전은 제작진의 사소한 실수(-R 옵션을 빼먹은 것)로인해, 모든 ?L 옵션에
대해 ?R 옵션을 지정해주어야하는 문제가 생겼다.

이로인해 R6 가 RPATH 를 지정하기위해 사용하는 매커니즘인 LD_RUN_PATH 를 이
용할 수 없게되어버린 것이다. 또한, 이는 suid 실행파일들에게 상대 RPATH 를 지정하
는 등의 보안상의 문제점도 야기시키게되었다.

해결책:

gcc-lib/…/2.7.0/specs 파일에서 아래부분은 제거하기바란다.

 %{!static:%{!R*:%{L*:-R %*}}}

그런뒤 X 를 새로 컴파일하면 된다. 이 문제는 gcc 2.7.1 에서는 고쳐졌다.


6.9) SS4 w/ TCX 에서 어떻게 X11R6 를 실행시킬 수 있습니까?


TCX 를 cg3 모드로 바꾸어 X11R6 를 실행하는 것이 가능하지만, X 컨소시엄의 Matt
Landau 는 다음과같이 말하였다.

"But why would you want an accelerated 24-bit framebuffer to behave like a dumb 8-bit
framebuffer under Solaris2?

OpenWindows versions 3.3 and 3.4 (bundled with Solaris 2.3 and Solaris 2.4 respectively) are
perfectly reasonable R5-based implementations of X, with a perfectly good R5 server that also
brokenness associated with the old X11/NeWS server from OpenWindows version 3.2 and before.

Of course, if you want R6 libraries and apps, you can build R6 and run R6 applications against the
OpenWindows 3.4 server, and still get full benefit of the TCX. Works just fine"


6.10) SX, ZX, TCX 또는 FFB 에서 X11R6 를 실행시킬 수 있습니까?


실행시킬 수 없다. 대신, Sun 의 Xsun 을 실행하기 바란다.


6.11) Perl 4.036 을 컴파일하거나 실행할 수 없습니다.


Configure 를 실행하고, solaris_2_0 hints 를 이용하기 바란다. 이때 solaris_2_1 hints 를
이용하지말기 바란다. 또한, config.sh 도 역시 이용하지 말기 바란다. 또한, /usr/ucb/cc
를 이용해서는 안되며, gcc 나 /opt/SUNWspro/bin/cc 를 이용하여야한다.

몇몇 질문들은 특별한 대답들을 필요로 할 것이다.

Are your system (especially dbm) libraries compiled with gcc? [y] y

Any additional cc flags? [ -traditional ?Dvolatile=__volatile__ -I/usr/ucb/include] ?traditional ?
Dvolatile=__volatile__

Any additional libraries? [ -lsocket ?lnsl ?ldbm ?lmalloc ?lm ?lucb] ?lsocket ?lmalloc -lucb


6.12) Perl 사용시 socket 관련 작업을 할 수 없습니다.


Socket 관련 상수들의 값이 변경되었다. 예를 들어, SOCK_STREAM 의 값이 1에서 2
로 변경되었다. 이들 값을 확인해보기 바란다.


6.13) MH 6.8.3 컴파일이 제대로 안됩니다.


MH6.8.3 에 포함되어있는 Solaris 용 MH 설정파일은 제대로 설정되어있을 것이다. 하
지만, Solaris 2.x 의 헤더와 mhn.c 사이에서 충돌이 생길 것이며, inc 가 Content-Length
헤더를 제대로 이해하지 못할 것이다. 이들 문제에대한 해결책은 아래에서 구할 수
있다.

ftp://ftp.wins.uva.nl/pub/solaris/mh-6.8.3.-diff


6.14) XV 3.x 를 컴파일하거나 실행할 수 없습니다.


ftp.x.org 가 아닌 ftp://ftp.cis.upenn.edu/pub/xv 에서 xv-3.x 를 구하기 바란다.


6.15) NIT 는 어떻게 되었습니까? Low-level 네트워킹 메커니즘은 어떻게 변화되었습니
까?


DLPI(7) 의 매뉴얼 페이지를 확인하기 바란다. 아래에서 DLPI 를 이용한 NFSWATCH
4.2 를 시범적으로 구하여 실행해보기 바란다.
 ftp://ftp.enc.purdue.edu/pub/davy/nfswatch4.3.tar.gz
 ftp://gatekeeper.dec.com/pub/net/ip/nfs/nfswatch4.3.tar.gz

또한, 아래의 ftp 서버에서 Sun Internet Engineer 인 Neal Nuckolls 가 쓴 "How to Use
DLPI in Solaris 2.x" 를 다운받아 참고하기 바란다.
ftp://opcom.sun.ca/pub/drivers/dlpi
http://www.freebird.org/hints/papers/{dlpi,npi,tpi}.ps.Z


6.16) Libc 관련 바이너리들은 어떻게 되었습니까?


C 라이브러리들은 여러 형태로 구분되었으며, 이에관한 정보는 해당 함수의 매뉴얼
페이지에서 자세히 알 수 있다.

이들 라이브러리들은 기본적으로 아래의 두 디렉토리로 나뉘어졌다.

 /usr/lib /usr/ccs/lib

가장 중요한 라이브러리들은 아래와같다.

 /usr/lib:
  libsocket  - socket 함수
  libnsl  - network services library
 /usr/ccs/lib:
  libgen  - regular expression functions
  libcurses  - the SysVR4 curses/terminfo library

보다 자세한 내용은 Intro(3) 을 확인하기 바란다.


6.17) Bcopy, bzero 등의 함수들은 어떻게 되었습니까?


이들은 /usr/ucblib/libucb.so 에 존재한다. B* 관련 함수들은 ANSI C 로 변경되었으며,
이에관한 자세한 내용은 Solaris porting FAQ 에서 확인할 수 있다.

Solaris 2.5 에서는 다시 libc.so 에서 확인할 수 있으며, 다른 BSD 함수들도 대부분 이
곳에서 찾을 수 있다.


6.18) 포팅할때 "소스 호환 패키지"를 이용하는 것이 가능합니까?


소스코드 호환 패키지는 BSD 4.2 와의 호환을 위한 것이므로, SunOS 4.1.x 에서의 소스
코드에는 이용할 수 없다. 또한, SunOS 4.1.x 에서의 소스코드를 포팅하여 컴파일할 때
SunOS 4.1.x 에서의 기능이나 함수 등을 이용하기위해 libucb 라이브러리를 많이 이용
하게될 것이다. 이때 컴파일 시에 다음과같이 libucb 관련 라이브러리들을 가장 나중
에 지정해주는 것이 좋다.

 -lc ?L/usr/ucblib ?R/usr/ucblib ?lucb
 -lc /usr/ucblib/libucb.a


6.19) readdir 이 제대로 동작하지않는 원인은 무엇입니까? 꼭 첫 두글자가 잘리는 현상
이 나타납니다.


일반적으로 이런 현상은 libucb 를 이용해 컴파일할 때 나타나며, 섹션 6.18을 틀림없
이 자세히 읽지않았을 것이다.(libucb.so 의 readdir 은 sys/dir.h 헤더파일을 사용하여야
하지만, 대부분의 SunOS 4.1.x 프로그램들은 <dirent.h> 를 사용한다. 때문에, <dirent.h>
에서 정의한 구조체와 libucb 의 readdir 의 구조체의 충돌로 이런 현상이 나타난다.)
이럴때에는 /opt/SUNWspro/bin/cc 를 사용하기 바란다.


6.20) Curses/termcap 등을 링크할 때 정의되지않은 symbol이란 에러가 발생합니다.


BSD 의 libcurses 와 SVR4 의 libcurses 를 동시에 사용하는 방법은 간단하다. 또한, 시
스템에 SUNWarc 패키지를 설치하였을 경우 전자는 /usr/ucblib 에 위치하며, 후자는
/usr/ccs/lib 에 존재한다.

 -L/usr/ucblib ?ucb ?L/usr/ccs/lib ?lcurses

위와같이 이용하게될 경우 ucb 버전의 libcurses 를 사용하게되며, /usr/ucblib 부분을 제
거할 경우 SVR4 버전의 libcurses 를 사용하게된다. 이런 문제는 섹션 6.18 에서 언급
하였듯이 libucb 해당 부분을 제일 나중에 지정함으로써 해결할 수 있다.


6.21) Motif 관련 라이브러리와 헤더파일들은 어디에 있습니까?


Solaris 2.4 에서 SUNWmfrun 패키지는 기본적으로 운영체제에 설치되게된다. 이들은
CDE 관련 프로그램들과함께 /usr/dt 에 존재한다.

하지만, Motif imake 템플릿들과 mwm 은 기본적으로 포함되어있지않으니 이를 명심하
기 바란다.

즉, Motif 관련 라이브러리를 지정해야될 경우에는 ?R/usr/dt/lib 를 반드시 지정하는 것
을 잊지말기 바란다.


6.22) Semctl() 함수 사용시 프로그램이 다운됩니다.


Semctl() 의 네번째 인자는 "union semun" 으로서, 프로그래머가 직접 정의하여야한다.
SPARC 시스템은 넘겨주는 인자로 기존의 레지스터 내의 값을 사용하지않고, 스택에
이들 구조체와 유니온을 쌓아두고, 이를 가리키는 포인터를 인자로 넘겨주게된다.

즉, 간단히 말해서 SPARC 에서 넘겨받는 값은 단순한 정수값이 아니라 특정 주소를
가리키는 포인터인 셈이다. 물론, 다른 시스템에서는 포인터가 아니라 단순한 정수값
이다.

Semctl(sem_fd, 0, SETVAL, 1);

와같이 사용하는 것은 잘못된 방법이며, 올바른 방법은 아래와같이 사용하는 것이다.

Union semun {
 Int val;
 Struct semid_ds *buf;
 Ushort *arry;
} arg;

arg.val = 1;

semctl(sem_fd, 0, SETVAL, arg);


6.23) Solaris 2.x 로의 traceroute 사용시 timeout 이 자주 발생합니다.


Solaris 2.4 이상은 500 밀리세컨드 마다 하나씩 ICMP 에러메세지를 허용한다. 때문에,
이러한 현상이 나타나는 것이다. 이 기능은 제거하려면 아래와같이 하면 된다.

 /usr/sbin/ndd ?set /dev/ip ip_icmp_err_interval 0


6.24) 프로그램을 statically 하게 링크할 때 문제가 발생합니다.

 

Solaris 2.x 는 시스템 라이브러리를 정적으로 링크하는 것을 지원하지 않는다.
/etc/nsswitch.conf 를 이용하는 getXXXbyYYY, getpwXXX 등의 함수들은 모두 이런 기
능을 제대로 사용하기위해서 동적으로 링크되어야한다. 즉, 프로그램이 보다 호환성있
고 능동적으로 동작하기위해서는 동적으로 링크되는 것이 반드시 필요한 것이다.

만약, 강제로 정적으로 링크된 프로그램들은 Solaris 다음 버전에서는 동작되지않을 것
이며, 심지어 ABI 모드와 호환되지조차 않을 것이다.

정적으로 링크되는 프로그램들은 뿐만 아니라, shared 라이브러리를 사용하는 프로그램
보다 성능면에서도 뒤떨어진다.

만약, 판매를 목적으로하는 제품을 만들거나 OS 업그레이드 뒤에 재컴파일해서 사용
할 것을 각오하고 있다면 아래와같은 방법들을 이용할 수 있다.

Libdl 을 제외한 다른 라이브러리들은 정적으로 링크한다.

 Cc ?Bstatic … -Bdynamic ?ldl ?lBstatic …

이는 아래와같은 dl관련 함수들을 이용하는 gethostbyXXX, getpwXXX 등이 제대로 동
작하게끔하기위해서 필수적인 방법이다.

 Char *dlopen() { return 0; }
 int dlclose() { return 0; }
 char *dlsym() { return 0; }
 char *dlerror() { return "dynamic linking not loaded" }

만약 /usr 디렉토리 아래에 대하여 종속성을 신경쓰고싶지 않다면, 아래와같이 /etc/lib
관련 라이브러리들을 동적으로 링크하기 바란다.

 Cc ?Bstatic … -Bdynamic ?R/etc/lib ?Wl,-I/etc/lib/ld.so.1 ?ldl ?Bstatic …

만약 이와 같이 프로그램을 컴파일하였음에도 불구하고 run-time 때 정의되지않은 심
볼들이 있다고 에러가 나타날 경우에는 ldd 를 이용해 라이브러리들의 동적 종속성을
확인해보기 바란다.

 % ldd /usr/lib/libsocket.so.1
  libnsl.so.1 => /usr/lib/libnsl.so.1
  libdl.so.1 => /usr/lib/libdl.so.1
  libc.so.1 => /usr/lib/libc.so.1
  libintl.so.1 => /usr/lib/libintl.so.1
  libw.so.1 => /usr/lib/libw.so.1
즉, libsocket 을 정적으로 링크하기위해서는 ?lnsl ?ldl ?lc ?lintl ?lw 들을 모두 링크하여
야함을 뜻하는 것이다.

6.25) "/usr/platform/SUNW,Ultra-1/lib/libc_psr.so.1": not in executable format: format not
recognized 란 에러가 gdb 사용시 나타납니다.

V8+ 실행 포맷을 인식하는 gdb 로 업그레이드를 하여야한다.

즉, gdb 4.16 이상으로 업그레이드 하거나, gdb 4.15.1 배포본의 bfd/elf32-sparc.c 소스와
include/elf/common.h 의 아래 항목들을 수정하기 바란다.

 *** gdb-4.15.1/bfd/elf32-sparc.c  Fri Nov 3 12:30:15 1995
 --- elf32-sparc.c  Thu Nov 23 14:44:37 1995
 *************
 *** 1486,1491 ***
 --- 1486,1492 ---
    #define TARGET_BIG_NAME "elf32-sparc"
    #define ELF_ARCH bdf_arch_sparc
    #define ELF_MACHINE_CODE EM_SPARC
   +#define ELF_MACHINE_ALT1 EM_SPARC32PLUS
    #define ELF_MAXPAGESIZE 0x10000
    #define elf_backend_create_dynamic_sections \
     _bfd_elf_create_dynamic_sections

 *** gdb-4.1.5.1/include/elf/common.h  Fri Nov  3 20:20:25 1995
 --- common.h Thu Nov 23 14:20:07 1995
 *************
 *** 83,88 ****
 --- 83,91 ---
    #define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */

    #define EM_PARISC 15 /* HPPA */
   +
   +#define EM_SPARC32PLUS   18 /* Sun SPARC 32 */
   +
    #define EM_PPC     20 /* PowerPC */
    /* If it is necessary to assign new unofficial EM_* values, please pick large */


6.26) Solaris 는 2000년 표기관련 문제에 해당됩니까?


내부적으로 Solaris 는 1970-01-01 00:00:00 UTC 시간 이후의 초를 계산하여 시간을 메
기게된다. 게다가, 이를 위해 32비트 부호있는 정수변수를 할당하고 있기 때문에 이
론상, 2038-01-19 03:14:07 UTC 까지는 아무런 문제가 없어야한다. 물론, 위의 시간 이후
에는 더 큰 변수가 할당되어야한다.

즉, Solaris 커널은 2000년 표기관련 문제에 해당되지않지만, 응용프로그램의 경우에는
이 문제에 해당될 수 있다. 몇몇 응용프로그램 개발자들은 연도를 표기하기위해 두자
리 숫자만을 할당해놓았거나, 해당 년에서 1900 을 뺀 다음 이를 100으로 modula 연
산을 취하고 있기 때문에, 이런 응용프로그램의 경우 2000년 표기문제에 영향을 받게
된다. 물론, 이런 문제점들을 포함하더라도 다른 메인프레임에 비해 Solaris 는 영향을
적게 받는 편이다.

2000년 문제와 관련하여 Sun 은 자사의 모든 시스템 라이브러리들을 새버전으로 공
개하고 있다.
 http://www.sun.com/y2000/
Sun 은 Solaris 2.6 의 경우 2000년 문제를 해결할 수 있도록 설계하였다. 또한, 1997년
9월 30일까지 Solaris 2.5 및 2.5.1 을 위한 패치를 제공하고, 1997년 12월 31일까지
Solaris 1.1.1, 1.1.2, 2.3, 2.4 를 위한 패치를 지원하기로 약속하였다.

Sun 이 배포하는 Solaris 응용프로그램 중 2000년 문제에 해당되는 것들로는 아래와같
은 것들이 있다.

? SCCS 파일들은 연도 표기를 위해 두자리 숫자만을 택한다. Sun 은 1969-2068 년까
지 관리할 수 있는 SCCS 를 발표한다고 한다.
? Solaris 1 의 `date` 명령은 1999년 이후의 시간을 표기하지 못한다.
? 다음 프로그램들도 역시 이 문제와 관련이 있다고 알려진 것들이다.
Atq fsck listen passwd sar timex ufsdump uucico uustat uuxqt xterm
? -me, -mm, -ms 와같은 troff 매크로 패키지들도 이 문제에 해당된다.
? `sortbib' 역시 이 문제에 해당된다.
? `ckdate' 도 1999년 이후의 시간을 거부한다.
? Solaris 를 1999 년 이후 버전의 하드웨어에 설치할 수 없다는 문제점이 보고되었
다.
? Filemgr 의 `find after' 와 `find before' 도 역시 연도구분을 위해 2자리의 입력만을
허용한다.
? cm(calendar manager) 도 2000년 2월 19일 이후를 판별하지 못한다.

이밖에도 `getdate' 와 `strptime' 와같은 함수를 이용하는 대부분의 응용프로그램들도
이 문제에 해당되는 것으로 알려지고 있다.

2000년 문제를 위한 패치는 1995년 이후부터 계속해서 Sun 에서 차근차근 배포되고
있으니, 해당 패치를 항상 신속하게 설치하기 바란다.


6.27) Solaris 2.6 에서 gcc 가 제대로 동작하지 않습니다.


항상 Solaris 를 업그레이드할때마다 gcc 를 새롭게 설치해야하듯, Solaris 2.6 에서도 마
찬가지로 gcc 를 새로 설치해야한다. 게다가, Solaris 2.6 에서는 "fixincludes" 를 이용해
필요한 헤더파일들을 제대로 셋팅할 수가 없다. 이를 셋팅하기위해서는 ifxinc.svr4 를
gcc 컴파일 전에 먼저 아래와같이 수정하여야한다.

 *** ./fixinc.svr4.org Thu Jun 15 23:03:29 1995
 --- ./fixinc.svr4 Thu Sep 4 13:41:29 1997
 **********
 *** 189,194 ***
 --- 189,195 ---
  s/__STDC__[  ][   ]*==[  ][   ]*1/defined (__STRICT_ANSI__)/g
  s/__STDC__[  ][   ]*!=[  ][   ]*0/defined (__STRICT_ANSI__)/g
  s/__STDC__-0 == 0/!defined (__STRICT_ANSI__)/g
  s/__STDC__-0 == 1/defined (__STRICT_ANSI__)/g
 + /^typedef[  ][   ]*[unsigned   ]*long[    ][   ]*[u_]*longlong_t;/s/long/long
long/
  , $2/$file > $2/$file.sed
  mv $2/$file.sed $2/$file


6.28) Solaris 2.6 에서 gdb 가 제대로 동작하지 않습니다.


Solaris 2.6 은 디버거와 런타임 링크 사이의 상호작용을 위해 새로운 인터페이스를 정
의하였다. Solaris 2.6 이전버전은 이러한 인터페이스를 정의하고 있지않기 때문에 gdb
가 이 인터페이스를 지원하도록 하여야한다.

아래의 패치는 gdb 4.16 에대한 패치이다.

 --- ./gdb/solib.c.org Sat Mar 30 06:58:51 1996
 +++ ./gdb/solib.c Sat Sep 6 14:48:18 1997
 @@ -67,6 +67,7 @@

 # ifdef SVR4-SHARED_LIBS
 static char *solib_break_names[] = {
 +   "rtld_db_dlactivity",
     "r_debug_state",
     "_r_debug_state",
     "_dl_debug_state",


6.29) Sun 의 C 컴파일러로 gdb 를 컴파일할 수 없습니다.


Solaris 구버전은 __builtin_alloca 를 선언해두지 않았기 때문에 gdb 소스코드의 해당
프로토타입과 일치되지않는 문제점이 있다. 이를 고치기 위해서는 아래의 패치를 적
용하면 된다.

 --- ./libiberty/alloca-norm.h.org  Thu Jun 29 04:15:41 1995
 +++ ./libiberty/alloca-norm.h Sat Sep  6 14:50:35 1997
 @@ -5,7 +5,7 @@
   #else /* not __GNUC__ */
   #ifdef sparc
   #include <alloca.h>
  -extern char *__builtin_alloca();  /* Stupid include file doesn't declare it */
 +extern char *__builtin_alloca(); /* Stupid include file doesn't declare it */
   #else
   #ifdef __STDC__
   PTR alloca (size_t);


7. ACKNOWLEDGEMENTS


대부분의 글들은 Casper Dik 에의해 쓰여졌으며, 많은 분들이 보내준 글들과 지적이 이
글에 많은 도움이 되었다.

이 FAQ 가 나오기까지 도움을 주신 모든 분들에게 감사드린다.


------<여기까지>--------------------------------------------------------------

--
E-mail  : chang@night.i-land.net                   \,`/ /
Homepage: http://night.i-land.net/~chang          _)..  `_
Phone   : +82-2-565-7047                         ( __  -\
                                                     '`.
Inet Inc. Technical Planning Team                   ( \>_-_,
Security Senior Chang-min Park                      _||_ ~-/

--공지사항은 han-announce@kreonet.re.kr에서 접수합니다.

댓글 없음:

댓글 쓰기