2008년 7월 18일 금요일

Love Actually 토니 콜렛

Love Actually의 한장면입니다.
장례식 장면중에서 베이시티 롤러스의 Bye Bye Baby 음악이 흐르는 장면인데요.
오른쪽에 뮤리엘의 웨딩의 토니 콜렛 아닌가요?
흠...



사용자 삽입 이미지


2008년 7월 11일 금요일

경민이 물통 번쩍들다.



건강한 나의 사랑스런 경민

ITIL 적용 기대효과

ITIL 적용으로 품질은 '업'...비용은 '다운'


IT 서비스관리분야 사실상 표준...
다운타임 인한 비용손실 97%절감












ITIL은 참고서다. 학생들이 학교에서 교과목을 공부하고 자신의 지식으로 만들기 위해 부가적인 참고서를 구입하듯이 ITIL은 기업 고유의 IT 업무 프로세스를 개발하기 위한 참고내용을 제공한다. 즉 ITIL은 IT 서비스관리 구축을 위한 참고내용은 제공하나 적용방법은 제공하지는 않는다. 왜냐하면 ITIL은 방법론, 메뉴얼이 아니라 7세트의 책과 부가적인 3권의 책으로 구성되어 있는 IT 운영업무 프로세스를 구축할 때 참조할 수 있는 내용을 담고 있기 때문이다.

기업 프로세스 개발 참고서
IT운영업무 프로세스 내용(What to Do)은 ITIL에서 참조하고 적용방법(How to Do)은 컨설팅업체의 서비스를 이용하거나 ITIL을 참조해서 기업 독자적으로 적용해야 만 한다.
실제로 고객이나 IT 관련자에게 IT 서비스관리를 설명하고 적용하는데 많은 어려움이 있다. 요즘은 IT 서비스관리를 ‘IT 업무 프로세스 개선’으로 표현하곤 한다. 아마도 이렇게 표현하는 것이 요즘의 많은 비즈니스 PI(Process Innovation) 프로젝트와 비교해서 이해하기 쉽기 때문이다.
다만 IT 업무 프로세스 개선으로 IT 서비스관리의 모든 것을 표현하기는 어려운 점이 있지만 가장 포괄적으로 쉽게 이해할 수 있는 방법으로 받아들이고 있다.
IT 서비스관리는 기존의 한국기업들이 많이 도입 적용한 운영관리도구(네트워크 관리, 시스템관리도구 등)가 담당하는 IT 운영영역만을 담당하지는 않는다. 신규 IT 서비스 설계 때부터 운영영역 및 서비스수준관리까지의 IT 프로세스, 조직모델링, IT 업무 프로세스 자동화, IT 운영관리도구와의 통합과 같은 역할을 담당한다.
이러한 IT 서비스관리의 핵심에는 선진 IT 프로세스 정립이 그 중심에 서있다.
프로세스의 정립은 반드시 정확하고 엄격한 조직의 책임과 역할 정립을 동반하며 실제 환경에서 정립된 프로세스를 자동화할 수 있는 관리도구를 필요로 하며 또한 기존에 구축되어 있는 운영관리도구와의 완벽한 통합을 요구한다.

가트너의 ITIL 이야기
가트너는 ITIL의 열렬한 옹호자다. 많은 가트너 리포트에서 IT 서비스관리의 실천 모델로 ITIL을 소개하고 있으며 IT 업무프로세스를 얘기할 때 ITIL의 용어와 개념을 그대로 사용하고 있다. 그러나 이것은 가트너의 IT 운영관리분야에 대한 ‘변함없는 의견’ 때문이다.
몇 년 전부터 IT 운영관리분야에 대한 많은 리포트에서 가트너는 IT 운영관리도구의 구축전 업무 프로세스, 절차, 표준 가이드라인의 정립을 일관성있게 주장해 왔다.
전세계적으로 구축된 IT 운영관리도구의 성공확률 30%에 따른 실패원인을 운영업무 프로세스의 미 정립에서 원인을 제시했으며 IT의 궁극적인 목표인 서비스품질개선과 서비스비용의 절감의 핵심을 IT업무 프로세스 개선에 무게중심을 두어 왔다.
즉 가트너는 ITIL을 IT 서비스관리분야의 사실상 표준(De-facto Standard)으로 인정하고 있으며 가장 효과적인 IT 업무 프로세스 개선 참조 모델로 간주하고 있다.

 























































<그림 1>은 특정 기술분야에 대한 기술의 발전 추이를 보여주는 가트너만의 하이퍼 커브(Hype Curve)로 ESM(Enterprise System Management)분야에 대한 향후 기술 추이를 보여주고 있다.
IT 서비스관리는 ITIL, 문제관리(Problem Management), 변경관리(Change Management), 자산관리(Asset Management), 서비스수준관리(Service Level Management), 비즈니스 서비스 뷰(Business Service View)를 포함한다.
즉 ITIL기반의 자산관리, 문제관리, 인시던트관리, 변경관리, 서비스수준관리와 같은 IT업무 프로세스 개선과 IT 비즈니스 서비스기반의 관리기능을 포함한다.
IT서비스관리를 ‘차세대 IT 관리모델’로 얘기하는 것도 이러한 이유에서 찾을 수 있다.

NSM 벤더의 ITIL 따라잡기
NSM(Network & System Management) 분야에서 전세계적인 빅 4라고 하는 BMC, CA, HP, IBM은 요즘 ITIL 선전에 한창이다. 제품 전략의 중심에 ITIL이 있고 ITIL 개념을 도입한 제품을 만들고 마케팅에 열을 올리고 있다.
이러한 벤더의 노력에는 NSM 시장의 침체, 새로운 시장의 개발, ITIL 지원 제품의 시장 선점의 목적이 있지만 그 근본적인 원인은 가트너의 권고안대로 IT 운영관리도구 구축 전 프로세스 정립의 필요성을 스스로 또한 고객의 인식으로 인한 각성의 결과다.
NSM 시장의 포화와 정체 그리고 NSM 도구 구축에 대한 고객의 불신은 결국 고객이 구축 후 지속적으로 사용할 수 있는 시스템 구축이 가장 중요한 제품선정 요소로 자리잡았으며 그 중심에는 프로세스와 표준절차의 정립이 선행돼야 한다는 고객의 인식이 벤더의 ITIL 도입으로 이어졌다.
IT 서비스관리를 위한 방법론은 현재 HP와 마이크로소프트에서 제공하고 있다. 공통점은 양사 모두 ITIL을 기반으로 고객에게 적용하기 위한 적용 프레임워크를 제공한다는 것이다.
IT 서비스관리를 단순히 제품만으로 접근하다가는 또 다른 실패의 원인이 되기 쉽다. 선행되어야 하는 IT 업무 프로세스 정립은 기업에 맞는 세심하고 꼼꼼한 현황분석과 다양한 파일롯을 거쳐 이를 프로세스로 만들어야 한다.
HP에서 제공하는 HP ITSM 레퍼런스 모델과 마이크로소프트의 MOF(Microsoft Operation Framework)는 모두 ITIL에 기초해 프로세스 정립을 위한 적용방법과 고유의 템플릿을 제공한다.

ITIL 용어 사용
ITIL을 최초에 접할 때 어려움을 겪는 것 중에 하나가 용어의 혼선이다. 기존에 IT업무에 종사하며 수년간 사용하던 용어와 ITIL에서 정의하는 용어를 접하다 보면 혼돈이 있을 수 있다. 그러나 확실한 것은 용어의 표현방법은 다를 수 있지만 개념의 세분화, 정확한 개념정의, 분석적 방법 제공이라는 측면에서는 ITIL의 사용방법을 따를 것을 권고하고 싶다.
ITIL이 제공하는 프로세스의 커다란 특징중의 하나는 프로세스간 밀접한 연계성을 갖는 프로세스가 체인화되어 있다는 것이다. 그에 따른 용어의 정의를 통해 ITIL을 이해해 보자.
·인시던트(Incident)는 정상적인 서비스를 방해하는 또는 방해할 수 있는 모든 이벤트를 의미한다. 따라서 운영관리도구의 이벤트, IT 구성요소의 각 이벤트를 포함한다



















인시던트관리(Incident Management) 프로세스는 인시던트의 가장 빠른 해결을 목표로 하며 동일 인시던트가 반복적으로 발생하거나 근본 원인을 알아내지 못한 경우에는 문제로 상태가 변경되어 문제관리(Problem Management) 프로세스에 이관되어 문제의 원인을 분석하기 위한 엑티비티를 수행한다. 문제의 원인이 밝혀진 경우에는 알려진 에러(Known Error)로 상태가 변경되며 변경으로 문제가 해결되는 경우에는 RFC(Request For Comment)로 상태 변경되어 변경수행하고 최초의 인시던트를 종료하는 라이프사이클을 거치게 된다.
이러한 예에서 보듯 우리가 흔히 얘기하던 ‘장애’라는 개념을 ITIL에서는 ‘인시던트’→‘문제’→‘알려진 에러’→‘RFC’→‘에러’와 같이 프로세스에 따라 세부적으로 구분해 용어를 정의하고 있으며 프로세스간에는 밀접한 연계성을 갖고 있다. 아마도 이러한 ITIL의 용어가 아무런 거부감 없이 사용될 때 한국은 성숙된 선진 IT 업무 프로세스를 갖게 되리라 생각한다.

ITIL 품질모델 이야기

2년전 CMM(Capability Maturity Model)이 국내에 소개된 후 소프트웨어 개발 업체, 특히 시스템 통합(System Integration) 업체들이 경쟁적으로 CMM 인증을 획득하기 위해 기업 차원의 전력을 다했었다. 마치 CMM의 상위레벨 인증이 SI의 서비스품질을 보증하고 순위 매김의 중요한 요소처럼 서로 CMM 인증을 위해 전사적인 노력을 기울여 왔다.
실제로 CMM은 소프트웨어 개발 품질 모델로 전세계적으로 통용되는 사실상의 표준으로써 그 역할과 목적을 달성하고 있다. 이러한 품질모델은 분명히 IT서비스 제공자와 고객에게 이점을 제공하다. 결과적으로 이러한 이점의 중심에는 역시 프로세스의 개선을 통한 서비스 품질개선에 있다.
최근 LG CNS가 세계적으로 최고 권위의 IT 아웃소싱 품질 평가 모델인 ‘SCM(e-Sourcing Capability Model)’ 공식 인증 레벨3을 세계 최초로 획득했다고 발표했다.
SCM은 IT 서비스 품질 인증 분야에서 세계적 권위를 가지고 있는 카네기 멜론 대학이 개발한 IT아웃소싱 품질 능력 평가 모델로, 이를테면 ‘IT 아웃소싱의 CMM’과 같은 것이다. 해외 IT서비스 시장에서는 이미 대종을 이루고 있는 IT 아웃소싱 분야의 객관적 역량 평가와 인증을 위해 개발된 평가 기준으로서, 새티암 컴퓨터, 액센추어, IBM, EDS 등 세계 일류 IT아웃소싱 회사들이 스폰서를 하고 있다. 즉 CMM은 소프트웨어 개발 품질모델, eSCM은 시스템관리분야에 대한 품질모델을 제공한다. 조만간 CMM에 이어 SM(System Management) 서비스와 다양한 형태의 아웃소싱 서비스를 고객에게 제공하는 IT 서비스 제공자에게 이러한 eSCM은 기업의 생존전략으로 인증받기 위한 노력들이 보일 것이다.
LG CNS에 이어 SK C&C가 eSCM을 준비중이고 곧 다른 국내 SI 업체들과 중소 IT서비스 제공자 및 고객에게 eSCM 인증이 확산될 전망이다.
eSCM 버전은 1.1에 이어 지난해 말에 발표한 버전 1.2부터 운영 프로세스 정립을 위해 ITIL을 참조한다고 가트너는 발표했다. 따라서 ITIL은 IT운영품질모델인 eSCM의 핵심적인 부분을 담당하게 되며 ITIL 도입을 통해 서비스품질 개선 및 대외적인 선전효과까지 기대할 수 있다.
ITIL은 ISO 품질인증모델과 상호 호환이 가능하다. 즉 ITIL의 프로세스와 자동화를 통해 ISO가 규정하는 IT운영업무의 요구사항을 만족시킬 수 있으며 선진 IT 업무프로세스를 정립할 수 있다. 또한 ITIL과 CMM은 상호 호환된다. CMM의 각 레벨의 특정 요구 프로세스는 ITIL의 프로세스와 호환되며 상호 인증이 가능하다. CMM의 성숙레벨이 올라갈수록 IT운영업무 프로세스의 성숙을 강조하게 되며 따라서 많은 부분의 프로세스가 ITIL과 상호 호환 운영된다.

IT 서비스관리 vs. 서비스 수준관리
ITIL은 서비스 지원(Service Support) 및 서비스 제공(Service Delivery)과 관련된 프로세스를 정의하는 2권의 책으로 구성되어 있다.
서비스 지원은 ‘고객이 원하는 정보를 끊임없이 지속적으로 접근할 수 있도록’에 초점을 맞춘 IT업무 프로세스를 정의하고 서비스 제공은 ‘고객에게 제공되는 서비 제공’ 관련 프로세스를 정의한다. 따라서 서비스 지원분야는 서비스데스크, 서비스 제공분야는 서비스수준관리가 핵심역할을 담당하며 고객 또는 현업과의 창구역할을 수행한다. 즉 서비스데스크는 고객서비스의 가용성을 극대화하기 위한 기능역할을 수행하는 조직이고 인시던트, 장애, 변경, 구성, 릴리즈 관리 프로세스의 구동창구이며 서비스수준관리는 지속적인 서비스 개선을 목적으로 서비스 지원, 제공 프로세스와 상호 연계 운영된다
앞에서 살펴 본 바와 같이 서비스수준관리는 IT서비스관리의 한 부분, 서비스 개선을 위한 고객과의 약속, IT조직의 성숙도 지표 제공, 모든 ITIL 프로세스의 성과를 요약하는 꼭지점이다.
서비스수준관리를 적용하기 위해서는 반드시 전사적인 합의를 통해 프로세스를 정립하고 그에 따른 SLA 항목의 선정, 측정방법의 정의, SLA 작성, 프로세스 적용을 위한 마케팅, 서비스수준관리 운영도구가 수반돼야 한다.
일반적인 경우 우선 안정적인 인프라를 위한 운영관리도구를 도입하고 IT 서비스관리를 통한 서비스 지원 프로세스를 정립한 후 서비스수준관리를 적용할 것을 권고한다.
왜냐하면 SLA 항목은 반드시 IT 기술요소에 대한 서비스수준 메트릭스(가용성, 신뢰성 등)와 서비스 지원에 대한 메트릭스(인시던트 처리율, 변경 성공률 등) 양자 모두가 필요하기 때문이다. 따라서 IT서비스관리를 구축 후 서비스수준관리를 구축하는 것인 진정한 서비스수준관리를 구축하는 방법이다.

ITIL 적용 기대 효과
프로세스 적용의 목적은 프로세스의 개선에 있다. 따라서 IT 서비스관리 적용의 가장 큰 목적은 IT 업무 프로세스 개선을 통해 서비스 품질 개선과 서비스 비용 절감에 있다고 할 수 있다. 이러한 서비스 품질개선은 IT 서비스관리의 각 프로세스의 구축과 연계에 의해 가능하다.
개별적인 프로세스는 고유의 프로세스에 따라 장애 해결 비용의 절감, 고객만족, 가용성증대, 영구적인 해결책 제공, 변경으로 인한 장애수 절감 등 개별적인 프로세스에 따른 기대효과를 볼 수 있지만 총괄적으로는 고객만족과 비용절감, 그리고 서비스 개선으로 정의할 수 있다.
측정되지 않으면 개선이 없다는 말처럼 IT서비스관리는 IT업무에 대한 정량적 측정이 가능하도록 할 수 있으며 정량적 측정과 지속적 개선 활동에 의해 서비스 개선을 도모할 수가 있다. 이러한 서비스 개선의 라이프사이클은 고객과의 서비스수준계약의 의해 현실화하고 비즈니스화 할 수 있다. 서비스수준관리는 결국 IT업무의 성숙도를 측정하는 지표가 된다.
가트너 조사 자료에 의하면 IT서비스관리의 정량적 기대효과는 도입 전 대비 48%의 효과가 있다고 밝혔다. 이는 가트너의 TCO(Total Cost of Ownership) 비용모델에 의해 조사된 것으로 직접비용과 간접비용의 합으로 계산됐다. 그런데 이러한 리포트 내용 중 가장 놀라운 것은 IT서비스관리 도입 후 다운타임으로 인한 비용손실이 97%까지 줄어들었다는 것이다.
이것은 결국 IT 다운타임 원인의 85% 이상이 기술적 요소가 아닌 프로세스 미비나 조직의 책임과 역할 부재와 같은 IT 서비스관리의 태동의 원인과 일맥상통한다.

2008년 7월 10일 목요일

MRTG 구축

  1. MRTG
    MRTG(Multi Router Traffic Grapher)는 SNMP를 지원하는 네트워크장비가 발생하는 트래픽을 모니터링해 주는 소스가 공개된 프로그램입니다. 지정한시간(Defaul는 5분)마다 모니터링한 결과값을 GIF(또는 PNG)이미지로 생성하여 HTML페이지로 뿌려주기 때문에 누구나 쉽게 트래픽 현황을 볼 수 있습니다. (아래 예를 참고)

    보다 자세히 설명드리면, MRTG는 Perl 언어와 C언어로 구성되어 있고, UNIX와 Windows NT에서 동작을 합니다. 그리고 그래프는 일간 그래프외에, 주간, 월간,년간 그래프가 있으므로 시간대별 추위를 파악하는 데, 좋은 분석도구가 될 수 있습니다.

    MRTG는 트래픽 모니터링 뿐만 아니라, SNMP값(MIB값)을 이용하여 다양한 모니터링이 가능합니다. 그리고 외부 프로그램을 사용할 수 있기 때문에 다양한 변형이 가능합니다. 이에 관해서는 RAS장비에 대한 포트모니터링에서 설명드리겠습니다. 그리고 MRTG가 생성하는 log값을 가공하여 새로운 데이터베이스를 구축하여 응용할 수 있습니다. log값을 가공하는데는 여러방법이 있지만, 저는 주로 Perl언어를 사용했습니다. 그러나 PHP를 이용하면 복잡한 CGI용 프로그램을 이용하지 않아도 쉽게 웹상에서 활용할 수 있습니다. 이에 대해서도 아래 예에서 설명드리도록 하겠습니다.

    대체적으로 MRTG는 다음과 같은 용도로 사용하고 있습니다. 네트워크 장비 인터페이스 별 트래픽 분석, CPU나 메모리 사용률 분석, 모뎀별 포트사용률 분석 등입니다.


  1. MRTG 구축하기
  2. [설치가능한 플랫폼]

     
    • Linux 1.2.x, 2.0.x, 2.2.x, 2.4.x (Intel and Alpha and Sparc and PowerPC)
    • Linux MIPS, Linux S/390
    • SunOS 4.1.3
    • Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
    • AIX 4.1.4, 4.2.0.0, 4.3.2
    • HPUX 9,10,11
    • WindowsNT 3.51, 4.0, 2k
    • IRIX 5.3, 6.2
    • BSDI BSD/OS 2.1, 4.x, 3.1
    • NetBSD (sparc)
    • FreeBSD 2.1.x, 2.2.x, 3.1, 3.4, 4.x
    • OpenBSD 2.5, 2.6, 2.7
    • Digital Unix 4.0
    • SCO Open Server 5.0
    • Reliant UNIX
    • NeXTStep 3.3
    • OpenStep 4.2
    • And about and other sensible Unix
    LINUX환경에서(강추!!)
    Linux에서 MRTG를 설치할 경우 대부분의 프로그램들(Perl, 그래픽라이브러리, Apache서버)이 이미 설치되어 있기 때문에 MRTG만 다운받아서 설치하면 된다.
    단 Linux를 처음 설치할 때 Develope Tool을 설치해야 gcc, make와 같은 프로그램들이 설치된다.
    설치해본 환경 : Wow Linux 7.0
    UNIX환경에서
    MRTG는 소스코드로 제공되기 때문에 다운받은 후 컴파일하는 작업이 필요합니다. 따라서 컴파일하기 위해서는 C 컴파일러가 설치되어 있어야하고, 그외 MRTG를 수행하는 데 필요한 프로그램으로써는 Perl, gd, libpng, zlib가 있어야 합니다.
 
.GCC 설치
http://gcc.gnu.org/ 에서 다운받아서 인스톨하시면 됩니다.
.Perl 설치
Version 5.005 이상 을 다운 받아서 설치하기. 이미 설치가 되어있는 경우 version확인은 ‘perl -v’로 알 수 있습니다.
http://www.perl.com/
#gzip -d stable.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는 것 같음)
#tar -xvf stable.tar
#mv ./perl*/ /usr/local/perl/  (최신 버전이 5.6.0인 경우임,  /usr/local/ 디렉토리로 이동시킵니다.)
#cd /usr/local/perl
#rm -f config.sh (기존에 설치된 config shell파일을 지움)
#sh Configure (configure파일 생성)
#make ( 소스파일이므로 컴파일 함)
#make test
#make install (컴파일 후 인스톨 함)
. 그래픽 생성을 위한 라이버러리
MRTG가 생성하는 그래픽 파일의 형식이 PNG라고 위에서 말씀드렸습니다. 이를 위해서 gd 라이버러리가 필요하고, 이 gd라이버러리는 또 2개의 라이버러리(zlib, libpng, jpeg) 가 설치되어 있어야 컴파일이 가능합니다.
a. zlib (그래픽 파일을 압축함)
http://www.gzip.org/zlib/ 에서 최신버전을 다운받아 설치합니다.
  #gzip -d zlib.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는 것 같음)
  #tar -xvf zlib.tar
  #mv ./zlib*/ /usr/local/zlib/  (program은 주로  /usr/local/ 디렉토리로 이동시킵니다.)
  #cd /usr/local/zlib
  #./configure
  #make
  #make test
  #make install
b. libpng (zlib가 만든 그래픽 파일을 PNG포맷으로 변형)
http://www.libpng.org/pub/png/ 에서 최신버전을 다운받아 설치합니다.
#gzip -d libpng-1.0.8.tar.gz
#tar -xvf libpng-1.0.8.tar
#mv ./libpng*/ /usr/local/libpng/  (program은 주로  /usr/local/ 디렉토리로 이동시킵니다.)
#cd /usr/local/libpng
#cp scripts/makefile.std makefile  ( scripts 디렉토리 밑에서 해당 OS에 맞는 makefile선택하여 makefile로 복사함. linux인 경우 makefile.linux를 복사)
#make test
#make install
c. jpeg
http://www.ijg.org 에서 최신버전을 다운받아 설치합니다.
#gzip -d jpegsrc.v6b.tar.gz
#tar -xvf jpegsrc.v6b.tar
#mv ./jpegsrc*/ /usr/local/jpeg/ 
#cd /usr/local/jpeg
#./configure
#make
#make test
#make install

 

(참고) sun의 경우 include 파일(*.h)이 '/usr/local/include'에 복사가 되지 않아서 gd를 compile할 때 에러가 생기는 경우가 있음. 따라서 '/usr/local/include/'에 jpeg~.h 파일이 없으면 copy해 주어야 됨.

 

d. gd
http://www.boutell.com/gd/ 에서 최신버전을 다운받아 설치합니다.
#gzip -d gd-1.8.3.tar.gz
#tar -xvf gd-1.8.3.tar
#mv ./gd*/ /usr/local/gd/ 
#cd /usr/local/gd
#make
#make install
. MRTG 설치
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/에서 최신버전을 다운받아 설치합니다.
#gzip -d mrtg-2.9.17.tar.gz | tar -xvf  (gzip과 tar를 한꺼번에 실행함.)
#mv ./mrtg*/ /usr/local/mrtg/
#cd /usr/local/mrtg
#./configure   --with-gd=/usr/local/gd       \
 --with-z=/usr/local/zlib        \
 --with-png=/usr/local/libpng  ( liberary들이 있는 위치를 지정해줌. ‘\’는 다음줄을 의미합니다.)
#make
MRTG가 이상없이 설치되었다면 bin 디렉토리 밑에 mrtg, cfgmaker와 같은 실행파일이 만들어지게 됩니다. bin 디렉토리 밑에 있는 실행 파일들은 꼭 이 위치가 아니더라도 실행하는 데는 지장이 없습니다.
. cfg파일 생성
이제 cfgmaker를 이용하여 mrtg.cfg파일(꼭 이름이 mrtg.cfg일 필요는 없습니다. cfg성격에 맞게, router.cfg, switch.cfg등의 이름을 주면 됩니다.)을 형식에 맞게 만들어서 실행하면 된다.
#cfgmaker --global 'WorkDir: /home/httpd/mrtg'  \
          --global 'Options[_]: bits,growright'     \
          --output /home/mrtg/cfg/mrtg.cfg        \
           community@router.abc.xyz
workdir은 결과파일이 만들어질 디렉토리를 말합니다. option은 여러가지가 있는데, 위의 bits를 하지 않으면 byte가 기본값이 되고, growright는 그래프를 오른쪽으로 순서대로 그리도록 합니다. 마지막 줄은 실제 모니터링 하려고 하는 네트워크 장비를 적어 줍니다. 여기서 community는 장비마다 SNMP값을 가지고 올 때 사용하는 고유값인데, 기본적으로 public을 사용합니다. router.abc.zyz는 네트워크 장비의 IP주소나 host명을 적으면 됩니다.
. MRTG실행 (2가지 방법이 가능)
  a. perl명령어와 같이 사용하는 방법
    #perl  /usr/local/mrtg/run/mrtg  /home/httpd/mrtg/mrtg.cfg
    이 방법은 perl이 제공하는 여러 가지 옵션을 같이 사용할 수 있는 장점이 있습니다.
  b. mrtg에 perl명령어를 포함 시키는 경우
    이 경우에는 mrtg 실행파일을 vi편집기 등을 이용해서 연다음 perl명령어가 있는 위치를 적어주고 mrtg가 실행가능하도록 되어 있으면 됩니다.
    #vi mrtg
  #! /usr/local/perl/perl   -> 이렇게 하시면 됩니다.
   # -*- mode: Perl -*-
   BEGIN{
   $main::OS = 'UNIX';
   #$main::OS = 'NT';
   #$main::OS = 'VMS';
              - 생략 -

   #/usr/local/mrtg/run/mrtg /home/httpd/mrtg/mrtg.cfg
위와같이 하면 결과 값이 /home/httpd/mrtg 디렉토리 밑에 만들어진다. 처음 실행하면 warning 메시지가 뜨는데, 이는 비교할 수 있는 log값이 없기 때문이므로 걱정을 안해도 됩니다. 위의 명령을 2,3번 정도 반복하면 더 이상 warning 메시지도 나타나지 않고 정상적인 트래픽을 볼 수 있을 것이다.
. 5분마다 mrtg 실행하기
위의 명령이 주기적으로 실행되게 하기 위해서는 cron과 crontab엔트리 이용하면 된다. 여기서 cron의 기능과 crontab엔트리의 구성에 대해서 설명하면 다음과 같다.
 

cron은 주기적 실행을 위해 프로그램을 스케줄하는 것을 허용하는 UNIX기능이다.  즉 매시간, 매일, 혹은 한달 간격으로 동일한 작업을 하기위해서 cron을 사용하면 된다.  cron명령어는 cron프로그램을 시작시킨다. 이것은 아무런 옵션도 가지지 않는다. 한번 시작되면 cron은 종료되지 않는다.  이것은 일반적으로 시스템 초기화 스크립트에 의해 자동적으로 시작된다.

#ps -ef | grep cron 명령어로 (linux는 -ef 대신 aux) 현재 cron 데몬이 실행중인 지 확인, 실행이 안되어 있는 경우 #whereis cron으로 찾아서 실행하면 된다.
#/usr/sbin/cron     ( Solaris의 경우)
#/usr/sbin/crond   (Linux의 경우)

cron은 cron데몬에 의해 서비스된다.  어떻게 실행되는지와 언제 실행되는지는 시스템의  cron 스케줄에 저장된 crontab 엔트리(entries)에 의해 cron에 명시된다.  어떠한 사용자라도 cron 스케줄에 엔트리를 추가할 수 있다.  crontab 엔트리는 일반적으로 /var/spool/cron/crontabs (또는 HP-UX를 위한 /usr/spool/cron/crontabs 그리고 Linux시스템의 /var/spool/cron)에 각 사용자를 위한 분리된 파일들에 저장된다. 사용자들의 crontab파일들은 그들의 사용자 이름 뒤에 명명된다. 예를 들어, root의 crontab파일은 /var/spool/cron/crontabs/root 이다. (linux의 경우 /var/spool/cron/root 를 만들면 된다.)

crontab 엔트리는 정규적 간격으로 명령을 실행시키기 위해 cron을 직접 접근한다. crontab 파일의 각 라인은 다음의 형식을 가진다. crontab파일은 'crontab -e'를 이용하면 되고, 만일 Super user로 login한 경우 직접 vi 에디터를 이용하여 crontab 파일을 편집할 수 있다.

[형식]  minutes   hours   day-of-month   month   weekday   command

[실제예] 0,5,10,15,20,25,30,35,40,45,50,55 * * * *  <mrtg-bin>/mrtg <path to mrtg-cfg>/mrtg.cfg ( 5분마다 mrtg실행. '*'는 항상을 의미)

저장하고 나온후 변경된 사항을 적용하기 위해서 crontab명령을 이용하면 된다.

#crontab root

참고로, mrtg를 실행하는 부분을 '<mrtg-bin>/mrtg <path to mrtg-cfg>/mrtg.cfg'  로하지 않고, '<mrtg-bin>/mrtg.sh'와 같이 shell script를 만들어서 실행하면 결과파일들이 WorkDir에 지정된 경로에 제대로 만들어 질 것입니다. 이렇게 하지 않으면 가끔 결과파일들이 업데이트가 되지 않고 그래프가 수평선이 되는 경우가 있습니다.

#cat mrtg.sh
#!/bin/sh
 /usr/local/mrtg/run/mrtg  /home/httpd/mrtg/mrtg.cfg
mrtg.sh의 속성은 실행가능으로 되어있어야 합니다 ( #chmod 755 mrtg.sh )
 
- 참고자료 : System Administration - O'REILLY -

     
    . Apache 서버 설치
    마지막으로 html 파일들을 웹브라우저를 통해서 보기위해서는 웹서버를 구동해야 되는데, unix 시스템에서 가장 많이 사용되어지는 Apache 서버에 대해 간단히 설명하였습니다. 보다 자세한 것은 Apache 홈페이지를 참조하시길 바랍니다.
    http://www.apache.org/dist/ 사이트에가셔서 최신 버전을 다운 받아서 설치하시면 됩니다.
    #gzip  -d apapche_1.3.20.tar.gz | tar -xvf
    #mv ./apache*/ /usr/local/apache/
    #cd /usr/local/apache
    #./configure
    #make
    #make install
     
    #/usr/local/apache/bin/apachectl start  (아파치를 실행합니다) 

unix 커맨드

유닉스커멘드팁모음 사용자설정
 

유닉스 혹은 리눅스용 커맨드 팁 모음입니다.


  1. 서브 디렉토리까지 파일안의 문자열 모두 검색
  2. haha와 huhu가 동시에 들어있는 행 뽑기
  3. 찾아서 지우기
  4. 공사중에 로그인 막기
  5. 크기가 가장 큰 파일, 디렉토리 찾기
  6. 가장 큰 파일을 찾으려면
  7. 현재 디렉토리의 크기만을 파악할때
  8. 시스템 정보 감추기
  9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
  10. FTP로 들어온 사용자 확인하기
  11. 원하지 않는 사용자 죽이기
  12. less 결과를 vi로 보기
  13. vi에서 블럭 설정하기
  14. man 페이지 프린트하기
  15. ping 무시하기
  16. LILO 다시 살리기
  17. 특정 사용자 ftp 접근 막기
  18. X 윈도우에서 TV보기
  19. ls라는 파일이 포함된 rpm패키지 찾기
  20. 현재 rpm패키지의 의존패키지
  21. 현재 디렉토리크기
  22. 바로 이전 디렉토리로 가기
  23. 프로세스명으로 프로세스 죽이기
  24. 하드웨어 시계맞추기
  25. 원격에서 리모트서버의 X application실행시
  26. 링크 파일
  27. ^M 문자 없애기
  28. 비어있는 행을 찾기
  29. 기타 명령어 떼
  30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
  31. 전체 메일
  32. 디렉토리만 빠르게 검색
  33. 호스트 네임 바꾸기
  34. 틀린명령어 틀린글자만 바꿔서 실행
  35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
  36. 열려있는 포트 알아내기
  37. 텔넷 모든 접속자에게 메세지 보내기
  38. lsof는 열려있는 파일을 나타내 주는 옵션
  39. 사용자가 어디에서 무엇을 하는지 알아내기
  40. 텔넷 화면 수정
  41. 하위 디렉토리 한꺼번에 만들기
  42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환
  43. killall 명령 시뮬레이션 (프로세스명으로 죽이기)
  44. find와 grep
  45. vi 검색, 치환
  46. 파일내의 중복되는 행을 제거 : uniq
  47. 파일의 결합
  48. 파일의 암호화 : crypt
  49. 개행을 제외한 화면내의 보이지 않는 문자 출력
  50. 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
  51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
  52. 어제 날짜 구하기
  53. 원하지 않는 사용자 죽이기
  54. UNIX상에서 한글출력이 깨져 나올경우
  55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기

0.0.0.1 서브 디렉토리까지 파일안의 문자열 모두 검색

find ./ -name "*" -exec grep 'abc' {} \; -print 
find . -name -print -exec grep abc {} \; 
grep -r abc * 

0.0.0.2 haha와 huhu가 동시에 들어있는 행 뽑기

grep haha foo.txt | grep huhu 

0.0.0.3 찾아서 지우기

find / -name "*.eml" -exec rm -f {} \; 

0.0.0.4 공사중에 로그인 막기

시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠? 그럴 때는, /etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.

0.0.0.5 크기가 가장 큰 파일, 디렉토리 찾기

가장 큰 디렉토리를 찾으려면,  du -S | sort -n

0.0.0.6 가장 큰 파일을 찾으려면

 ls -lR | sort +4n

0.0.0.7 현재 디렉토리의 크기만을 파악할때

[root@dev2 local]# du -c -h --max-depth=0 * 
6.4M    apache 
35M     bin 
43M     dns 
1.7M    doc 
42k     etc 
1.0k    games 
42k     geektalkd 
1.1M    gnuws 
1.1M    include 
41k     info 
19M     jakarta-tomcat-3.2.3 
0       jre 
15M     jre118_v3 
25M     lib 
62k     libexec 
1011k   man 
1.3M    mm.mysql.jdbc-1.2c 
937k    sbin 
3.8M    share 
1.8M    shoutcast-1-8-3-linux-glibc6 
5.2M    ssl 
159M    total 

0.0.0.8 시스템 정보 감추기

/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 

0.0.0.9 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기

ps -aux | sort +4n 또는 ps -aux | sort +5n

0.0.0.10 FTP로 들어온 사용자 확인하기

 ftpwho,ftpcount

0.0.0.11 원하지 않는 사용자 죽이기

 [root@dream /root]# skill -KILL sunny

위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는

 [root@dream /root]# skill -KILL -v pts/14

이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

0.0.0.12 less 결과를 vi로 보기

less상태에서 v를 누르면 바로 vi로 감

0.0.0.13 vi에서 블럭 설정하기

alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.

블럭을 설정 하신 뒤,

삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p

0.0.0.14 man 페이지 프린트하기

 man -t vi > vi.ps

0.0.0.15 ping 무시하기

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

0.0.0.16 LILO 다시 살리기

 boot : vmlinuz root=/dev/hda6

0.0.0.17 특정 사용자 ftp 접근 막기

/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.

0.0.0.18 X 윈도우에서 TV보기

리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다. 이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합 니다. 만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -> Video For Linux -> BT848 Video For Linux 항목을 모듈화 시키거나 커널에 포함하십시오.

TV 카드를 리눅스에 인식시키기 위해서 /etc/conf.modules 파일에 다음과 같은 내용을 삽입하고 컴퓨터를 다시 시작합니다.

alias char-major-81 bttv  
# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner 
# 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9 

이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.

0.0.0.19 ls라는 파일이 포함된 rpm패키지 찾기

일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.
rpm -qf /bin/ls 
[root@piruks /etc]# which ls 
/bin/ls 
[root@piruks /etc]# rpm -qf /bin/ls 
fileutils-4.0i-2mz 

0.0.0.20 현재 rpm패키지의 의존패키지

 rpm -qR 패키지명

0.0.0.21 현재 디렉토리크기

 du -h --max-depth=1 . 

0.0.0.22 바로 이전 디렉토리로 가기

 cd - 

0.0.0.23 프로세스명으로 프로세스 죽이기

killall 프로세스명 
kill -9 `pidof 프로세스명 

0.0.0.24 하드웨어 시계맞추기

배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.
[root@dev /down]# rdate -s time.kriss.re.kr 
[root@dev /down]# clock -w 

0.0.0.25 원격에서 리모트서버의 X application실행시

X윈도 app를 실행할때 다음과 같은 에러가 나면 조치
[kang@dev /home/kang] xclock 
Xlib: connection to "211.222.186.170:0.0" refused by server 
Xlib: Client is not authorized to connect to Server 
Error: Can't open display: 211.222.186.170:0.0 
 
export DISPLAY=211.222.186.170:0 
xhost +211.222.186.170 

0.0.0.26 링크 파일

ln -sf 링크할디렉토리 링크로 만들어질 디렉토리 참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.  ln -sf /www/dir_1/r_photo /www/dir_2/r_photo

0.0.0.27 ^M 문자 없애기

a = 1^M 
def vartest(a):^M 
a = a + 1^M 
return a^M 
a = vartest(a)^M 
print a^M  
Unix류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면

    줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)

PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.

위는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠. 명령은  :%s/(ctrl+v)M//g 입니다.  (ctrl+v)M 이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은  %s/이것을/요걸로/g 입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼  (ctrl+v)M 으로 해주셔야 합니다.

0.0.0.28 비어있는 행을 찾기

 #grep -n '^$' filename 정규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자
[...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도 사용 
[^..] .. 안에 없는 임의의 한 문자. 범위 사용가능 
r* 0회 이상 r 반복 
r+ 1회 이상 r 반복 
r? 0 혹은 1회의 r 
r{n,m} n회 이상 m회 이하 r 반복 
r1|r2 r1 혹은 r2 (egrep 만) 
(r) r 의 정규표현(egrep 만) 

0.0.0.29 기타 명령어 떼

alias(명령어 간소화하기) 
apropos(관련된 명령어 찾기) 
arch(컴퓨터 종류 알기) 
arp(같은 서브넷의 IP 보여주기) 
at(작업 시간 정하기) 
atd(계획성 있는 작업 실행하기) 
awk(특정 패턴 문자 처리하기) 
a2p(펄 파일로 바꾸기) 
badblocks(배드 블럭 검사하기) 
bc(계산기) 
biff(메일 수신 소리로 확인하기) 
bg(후면작업; 배경화면 설정) 
bind(키나 함수 순서 결합하기) 
break(루프 빠져나가기) 
cal(달력보기) 
builtin(내부 명령어 알아보기) 
case(조건 처리하기) 
cat(화면상에서 파일 보기) 
cd(디렉토리 변경하기) 
cfdisk(디스크 설정하기) 
chattr(파일 속성 변경하기) 
chfn(사용자 정보 변경하기) 
chgrp(파일, 디렉토리가 속했던 그룹 바꾸기) 
chmod(파일 권한 바꾸기) 
chown(파일 주인 바꾸기) 
chsh(지정된 셸 바꾸기) 
cksum(CRC값을 점검한다) 
clear(화면 청소하기) 
clock(CMOS 시각을 조정하기) 
cmp(파일 비교하기) 
colcrt(문자 변환 필터) 
colrm(열 삭제하기) 
column(가로 정렬하기) 
comm(파일 비교 출력하기) 
command(명령어 알아보기) 
continue(루프 계속돌기) 
cp(파일 복사하기) 
cpio(복사본 만들기) 
crontab(cron을 관리한다) 
csplit(파일에 서식, 규칙 정하기) 
cut(필요한 필드만 출력하기) 
date(날짜 보기) 
dd(블럭장치 읽고 쓰기) 
debugfs(ext2 파일 시스템 디버깅하기) 
declare(변수 선언하기) 
df(파일 시스템의 사용량 보기) 
dirs(디렉토리 목록 표시하기) 
dmesg(부팅 메시지 보기) 
dnsdomainname(DNS 이름 출력) 
domainname(NIS 이름 출력&설정) 
du(디렉토리와 파일의 용량 파악하기) 
dumpe2fs(파일 시스템 정보 보기) 
echo(표준 출력하기) 
eject(장치 해제하기) 
elm(메일 관련) 
enable(내부 명령어 지정) 
env(환경변수 출력하기) 
eval(인수 읽기) 
exec(셸 명령어 실행하기) 
exit(종료하기) 
expand(탭을 공백으로 변환하기) 
export(변수 지정하기) 
e2fsck(파일 시스템 복구하기) 
fc(지정된 편집기 받기) 
fdformat(플로피 디스크 포맷하기) 
fdisk(파티션 나누기) 
fg(지정된 작업을 전면 프로세스로 시작하기) 
file(파일 종류 보기) 
find(파일 찾기) 
finger(사용자 정보 알기) 
fold(정형화하기) 
fmt(정형화하기) 
for(반복 실행하기) 
free(메모리 사용량 알아보기) 
fsck(파일 시스템 검사하기) 
fstab(파일 시스템에 대한 고정적인 정보 저장하기) 
ftp(파일 전송 프로그램) 
fuser(프로세스 ID 출력) 
getkeycodes(매핑 테이블 출력하기) 
grep(특정 문자(열) 검색하기) 
gzexe(실행 파일 압축하기) 
gzip(압축하기) 
halt(시스템 종료하기) 
hash(기억해 두기; index 역할) 
head(파일의 앞부분 출력하기) 
help(도움말 보여주기) 
host(호스트 정보 보기) 
history(사용 명령어 목록보기) 
hostname(서버 이름 알기) 
id(계정 정보 알기) 
if(조건문 실행하기) 
ifconfig(랜카드에 주소 할당하기) 
imolamod(모듈 설치하기) 
inetd(인터넷 서비스의 최상위 데몬) 
init(실행 단계 정하기) 
ispell(철자법 검사하기) 
jobs(수행중인 프로세스 알기) 
kbd_mode(키보드 모드 출력하기) 
kill(프로세스 죽이기) 
klogd(커널 로그 데몬) 
ldd(공유 라이브러리의 의존성 알기) 
less(페이지 단위로 출력하기) 
let(정규식 표현하기) 
lilo(부팅하기) 
ln(링크하기) 
locate(패턴에 맞는 파일 찾기) 
login(로그인하기) 
logger(시스템 로그 기록하기) 
logname(사용자 로그인명 보여주기) 
logout(로그인 셸 종료하기) 
look(특정 단어 검색하기) 
losetup(중복 장치 확인하기) 
lpd(프린트 데몬) 
lpq(현재 프린트 작업 상태 출력하기) 
lpr(출력하기) 
lprm(대기열에 있는 문서 삭제하기) 
ls(디렉토리 내용보기) 
lsattr(파일 시스템의 속성 보여주기) 
lsdev(하드웨어 장치 출력하기) 
lsmod(모듈 정보 출력하기) 
mail(메일 관련) 
make(컴파일하기) 
man(매뉴얼 보기) 
mattrib 
mbadblocks 
mcd 
mcopy 
mdel 
mdeltree 
mdir 
mesg(메시지를 받을 수 있는지 확인하기) 
mformat 
minfo 
mkdir (디렉토리 만들기) 
mke2fs(파일 시스템 생성하기) 
mkfs(파일 시스템 만들기) 
mknod(특수 파일 만들기) 
mkswap(스왑 영역 지정하기) 
mlabel 
mmd 
mmount 
mmove 
mpartition 
mount(장치 연결하기) 
more(화면 단위로 출력하기) 
mrd 
mren 
mtoolstest 
mtype 
mutt(메일 관련) 
mv(파일 옮기기) 
mzip 
netstat(현재 네트웍 상황 보기) 
nice(프로세스 우선 순위 변경하기) 
od(8진수로 파일 보기) 
passwd(암호 입력하기) 
pidof(실행중인 프로그램의 프로세스 ID 찾기) 
pine(메일 관련) 
ping(네트웍 확인하기) 
popd(pushd 취소) 
ps(프로세스 상태 알기) 
pstree(프로세스 상관관계 알기) 
pwd(절대경로 보여주기) 
quota(디스크 한계량 알기) 
rarp(rarp 테이블 관리하기) 
rcp(원격 호스트에 파일 복사하기) 
rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기) 
rdate(네트웍으로 시간 설정하기) 
reboot(재부팅하기) 
rmmod(모듈 지우기) 
readonly(읽기 전용으로 표시하기) 
renice(프로세스 우선 순위 바꾸기) 
reset(터미널 초기화하기) 
restore(다시 저장하기) 
rlogin(바로 접속하기) 
rm(파일 지우기) 
rmdir (디렉토리 지우기) 
route(라우팅 테이블 추가/삭제하기) 
rpm(프로그램 추가/삭제) 
rpm2cpio(rpm을 cpio로 변환하기) 
rsh(원격으로 명령어 실행하기) 
rup(호스트 상태 출력하기) 
rusers(호스트에 로그인한 사용자 출력하기) 
rwall(호스트 사용자에게 메시지 뿌리기) 
script(기록하기) 
set(변수값 설정하기) 
setup(시스템 관련 설정하기) 
showmount(호스트의 마운트 정보 보여주기) 
shutdown(전원 끄기) 
sleep(잠시 쉬기) 
source(스크립트 번역하기) 
split(파일 나누기) 
ssh(암호화된 원격 로그인하기) 
stty(터미널라인 설정 보여주기) 
su(계정 바꾸기) 
suspend(셸 중단하기) 
swapoff (스왑 해제하기) 
swapon(스왑 활성화하기) 
sync(버퍼 재설정하기) 
syslogd(로그인 과정 설정하기) 
tac(거꾸로 보기) 
tail(문서 끝부분 출력하기) 
talk(이야기하기) 
tar(파일 묶기) 
tcpdchk(tcp wrapper 설정하기) 
tcpmatch(네트웍 요청에 대해 예측하기) 
tee(표준 입력으로부터 표준 출력 만들기) 
telnet(원격접속하기) 
test(테스트하기) 
times(셸에서의 사용자와 시스템 시간 출력하기) 
top(cpu 프로세스 상황 보여주기) 
tr(문자열 바꿔주기) 
true(종료 코드 리턴하기) 
type(유형 보기) 
ul(밑줄 처리해서 보여주기) 
ulimit(제한하기) 
umask(매스크 모드 설정하기) 
umount(장치 해제하기) 
unalias(별명 제거하기) 
uname(시스템 정보 보기) 
unexpand(공백 문자를 탭으로 변환하기) 
uniq(중복된 문장 찾기) 
useradd(사용자 계정 만들기) 
userdel(계정 삭제하기) 
usermod(사용자 계정정보 수정하기) 
unset(설정 변수 해제) 
uptime(시스템 부하 평균 보여주기) 
users(로그인된 사용자 보여주기) 
w(시스템에 접속한 사용자 상황 알아보기) 
wait(프로세스 기다리기) 
wall(모든 사용자에게 메시지 보내기) 
wc(문자, 단어, 라인수 세기) 
whatis(명령어의 간단한 설명보기) 
while(루프 명령어) 
who(사용자 알기) 
write(콘솔 상에서 간단한 메시지 보내기) 
xcopy(반복적으로 복사하기) 
XFree86 
ypchfn(NIS에서 사용하는 chfn 명령어) 
ypchsh(NIS에서 사용하는 chsh 명령어) 
yppasswd(NIS에서 사용하는 passwd 명령어) 
zcat(압축 파일 보기) 
zcmp(압축 파일 비교하기) 
zforce(강제로 gz 만들기) 
zgrep(압축 상태에서 grep 실행하기) 
zmore(압축 상태에서 more 실행하기) 
znew(.Z 파일을 .gz로 다시 압축하기) 

0.0.0.30 각자가 사용하는 컴퓨터의 정보를 알고 싶을때

 [root ...]#more /proc/cpuinfo 위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,  [root ...]#more /proc/meminfo 라고 치면 사용자의 메모리 정보를 볼수 있습니다.

0.0.0.31 전체 메일

먼저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요!  [ root@aromi /root]# vi nea 안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.
 
:wq 
[ root@aromi /root]# 
만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다.
[ root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'` 
 [공지]-> 라고 쓴 것은 보낼 메일의 제목입니다.  'cat /etc/passwd|gawk -F : '{print$1}'' ->먼저 cat으로 passwd파일의 첫번째 나오는 내용을 출력하라는 소리입니다. nea라는 텍스트파일을 메일의 내용으로 보내라는 내용입니다.

0.0.0.32 디렉토리만 빠르게 검색

 ls -al | grep "^d"

0.0.0.33 호스트 네임 바꾸기

/etc/HOSTNAME file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트 네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.
[ root@linux /root]# vi /etc/sysconfig/network 
NETWORKING=yes 
HOSTNAME="linux" 
GATEWAY="" 
GATEWAYDEV="" 
FORWARD_IPV4="yes" 
바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.

0.0.0.34 틀린명령어 틀린글자만 바꿔서 실행

 # ./configure --prefax=/usr/local/apache 앗, 틀렸습니다. prefax가 아니라 prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다.  # ^fax^fix^ 라고 하면...  -> ./configure --prefix=/usr/local/apache 라고 됩니다..

0.0.0.35 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어

 [ root@aromi /root]# uname -a

0.0.0.36 열려있는 포트 알아내기

 netstat -anp | grep LISTEN

0.0.0.37 텔넷 모든 접속자에게 메세지 보내기

wall 내용...  Ctrl-D

0.0.0.38 lsof는 열려있는 파일을 나타내 주는 옵션

여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?

0.0.0.39 사용자가 어디에서 무엇을 하는지 알아내기

w라는 명령어를 사용하시면 된답니다. 이 때,  w [-s] 를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.

0.0.0.40 텔넷 화면 수정

로그인화면:  /etc/issue.net 로그인후화면:  /etc/motd

0.0.0.41 하위 디렉토리 한꺼번에 만들기

 mkdir -p music/koreanmusic/ost

0.0.0.42 특정디렉토리의 모든 파일 안의 특정 문자열 치환

for i in $*; do 
    sed "s/paper/PAPER/g" < $i > $i.new 
    mv -f $i.new $i 
done 
 
<chihwan.sh> 
 
find ./(chihwan.sh를 포함하지 않는 디렉토리면) -type f -exec chihwan.sh {} \; 

0.0.0.43 killall 명령 시뮬레이션 (프로세스명으로 죽이기)

ps aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9
  • 모든 프로세스 나열
  • 지정한 프로세스만 뽑아냄
  • grep 명령이 포함된 라인 제거
  • awk로 두번째 필드만 뽑아냄
  • xargs에 의해 걸러진 아이디로 죽임

0.0.0.44 find와 grep

find . -name "H20021115.*" -exec grep -l '...;........;110100' {} \;

0.0.0.45 vi 검색, 치환

구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./\U&/g

모든문자->대문자 g/^$/d

0.0.0.46 파일내의 중복되는 행을 제거 : uniq

입력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음.

sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시

0.0.0.47 파일의 결합

여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용
cat [파일명1] [파일명2] ... > [출력파일명]  
cat [파일명1] [파일명2] ... >& [출력파일명]  
cat [파일명1] [파일명2] ... >> [출력파일명] 
cat [파일명1] [파일명2] ... >>& [출력파일명] 
cat - [파일명1], [파일명2] .. >> [출력파일명] 
cat - [파일명1], [파일명2] .. >>& [출력파일명] 
 
 
% cat > file1 
파일명 : file1 
^D 
% cat > file2 
파일명 : file2 
^D 
% cat file1 file2 > file3 
% cat file3 
파일명 : file1 
파일명 : file2 
%  

행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합

 
paste [파일명1] [파일명2].. 
paste -d리스트 [파일명1] [파일명2] ... 
paste -s [-d리스트] [파일명]  
d : 행간 결합시 행간 구분문자들의 리스트 
s : 한파일의 연속되는 행을 결합 
 
% cat > paste.data1 
홍길동 
이순신 
김유신 
% cat > paste.data2 
부산 
서울 
대구 
% paste paste.data1 paste.data2 
홍길동 부산 
이순신 서울 
김유신 대구 
% paste -d"\n" paste.data1 paste.data2 
홍길동 
부산 
이순신 
서울 
김유신 
대구 
% paste -s -d"::\n" paste.data1 
홍길동:이순신:김유신 
% 

두 파일을 동일한 필드 값에 따라 행 단위 결합 : join

관계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급

% cat > join.data1 
98001:서원일: 
98002:홍길동: 
98003:김유신: 
98004:이순신: 
98010:이상관: 
% cat > join.data2 
부산:98001:441 
울산:98002:89 
대구:98003:99 
서울:98004:120 
김해:98010:44 
% join -j1 1 -j2 2 -t: join.data1 join.data2 
98001:서원일::부산:441 
98002:홍길동::울산:89 
98003:김유신::대구:99 
98004:이순신::서울:120 
98010:이상관::김해:44 
% join -j1 1 -j2 2 -o 1.2 1.1 2.1 -t: join.data1 join.data2 
서원일:98001:부산 
홍길동:98002:울산 
김유신:98003:대구 
이순신:98004:서울 
이상관:98010:김해 
%  

0.0.0.48 파일의 암호화 : crypt

파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용
% cat > crypt.data 
test test 
안녕하십니까? 
^D 
% crypt <crypt.data > crypt.data1 
Enter key: hello 
% ls -l crypt* 
-rw-r--r-- 1 wiseo pro 24 9월 24일 14:47 crypt.data 
-rw-r--r-- 1 wiseo pro 24 9월 24일 14:48 crypt.data1 
% crypt < crypt.data1 
Enter key:hello 
test test 
안녕하십니까? 
% 

0.0.0.49 개행을 제외한 화면내의 보이지 않는 문자 출력

cat -v http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html

0.0.0.50 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기

grep -h '20030305......01' ./R00*

0.0.0.51 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기

ls *.* | awk '{print "mv",$1, $1 }' | sed "s/ \([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)$/ \1\.\_\2/g" 
  • 현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다.
  • 더 간단하게 ls *.* | sed "s/\([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)/mv \1\.\2 \1\.\_\2/g"


0.0.0.52 어제 날짜 구하기

$ date -v-1d "+%Y-%m-%d" [컴퓨터분류]

0.0.0.53 원하지 않는 사용자 죽이기

[root@dream /root]# skill -KILL sunny

위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 [root@dream /root]# skill -KILL -v pts/14

이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

0.0.0.54 UNIX상에서 한글출력이 깨져 나올경우

유닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 ^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o

라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다

0.0.0.55 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기

/bin/ls A?????.html | sed 's/A\(.....\)\.html/\1/g' | xargs -t -i mv 'A{}.html' 'A0{}.html' 
/bin/ls는 ls가 보통 -F로 파일 종류 표시(*, @등)까지 하기 때문에 그걸 막기 위한 것이고 xargs의 -t는 트레이스모드이다.
PythonPowered
이 페이지에 대한 : 비슷한페이지 | 싸이트맵 | 철자검사

하드 통복사

※ 하드디스크 통째 복사의 필요성 및 복사 방법

컴퓨터를 사용하다 보면 하드디스크를 1:1로 통째로 복사하고 싶을 때가 있습니다.
1) 하드디스크 전체 Data를 다른 하드디스크에 통째로 백업 (backup)을 하거나
2) 기존의 저용량 하드디스크 Data를 고용량 하드디스크로 옮긴후 교체하고자 할 때
3) 동일한 메인보드를 사용하는 PC가 여러 대 있을 때 운영체제(OS)를 비롯한
    각종 응용 프로그램을 설치하고자 할 때 .. 등등

하드디스크에 저장된 운영체제(OS)와 각종 응용 프로그램 그리고 자료(data)를 1:1로
통째로 복사하는 방법으로는 다음과 같은 방법이 있는데, 1)번 xcopy 명령어를 이용
하는 방법을 적극적으로 추천하여 드립니다.
1) xcopy (xcopy32) 명령어를 이용하여 복사하는 방법
2) C:\windows 폴더의 win386.swp 만을 제외시키고 복사하는 방법
3) 시만텍사 에서 만든 고스트(Ghost)를 이용하는 방법 등이 있습니다.

위 3가지 방법중에서 3)번 백업전문 유틸리티인 고스트는 상용 프로그램이므로 정품을
구입하여야 하고 사용하는 PC에 고스트 프로그램이 깔려 있어야만 가능하고
2)번의 win386.swp 만을 제외시키고 복사하는 방법은 여러번 복사 명령을 사용하므로
번거로운 점도 있고 시간이 오래 걸리는 불편이 있습니다.

참고로 파일을 복사하는 도스(DOS) 명령어로 COPY와 XCOPY 두 가지가 있는데,
두 명령어는 비슷한 것 같지만 실제로는 아래 표와 같이 상당한 차이가 있습니다.
----------------------------------------------------
   구  분              copy                xcopy
----------------------------------------------------
  명령어 종류         내부 명령어         외부 명령어
  복사 방법           파일 단위           버퍼 단위
  파일결합 복사       가능                불가
  디렉토리 복사       불가                가능
----------------------------------------------------
COPY는 COMMAND.COM에 의하여 자체적으로 처리되는 내부 명령어로 파일 단위로 복사를
실행하고, XCOPY는 실행파일로 구성된 외부 명령어로 버퍼 단위로 복사를 실행합니다.
따라서 복사하는 파일의 수가 적을 때에는 내부명령어로 실행되는 copy가 빠르겠지만,
파일의 수가 많을 때에는 버퍼 단위로 복사를 실행하는 xcopy가 빠르게 수행됩니다.
특히 기능에 있어 가장 큰 차이는 서브 디렉토리까지 한번에 복사하고자 하는 경우에는
반드시 xcopy 명령어를 사용해야하고, 2개 이상의 파일을 하나로 결합하여 복사하고자
하는 경우에는 반드시 copy 명령어를 사용하여야 합니다.
이제부터는 하드디스크를 1:1로 통째로 복사하는 방법에 대하여 xcopy, win386.swp,
ghost 3가지로 분류하여 본격적인 설명을 하겠습니다.


 
 
1. xcopy 명령으로 하드디스크를 1:1 방식으로 통째로 복사하는 방법

xcopy (엑스카피) 명령은 도스(DOS)시절 외부명령어로 사용되어 왔고 윈도우즈 계열
 (windows95, windows98, windows ME, windows XP) 운영체제(OS)가 설치된 PC 라면
 c:\windows\command 디렉토리(폴더)에 위치하고 있습니다.
참고로 windows XP 운영체계나 윈도우즈 NT 계열의 운영체제인 windows 2000 에서는
DOS 프로그램(한글 MS-DOS)은 더 이상 지원하지 않지만, "명령 프롬프트"를 이용하여
 도스 명령어는 사용할 수가 있습니다.

육해공을 주름잡는 오리 에이블덕닷컴 www.ableduck.com 홈페이지 운영자인 김영수가
 2001년8월 ~ 2002년7월까지 서울특별시청 행정국 인력POOL팀 소속으로 정보화기획단
 정보통신반 (현재 정보통신담당관)에서 운영하는 PC정비센터 (PC Bank)에서 약1년간
 지원근무할 당시에, xcopy  명령어를 사용하여 하드디스크를 통째로 복사하는 방법을
 적용하여 PC정비를 빠르고 효율적으로 수행하여 혁혁한 실적(?)을 올린 바 있답니다.

PC에 윈도우즈 계열 운영체제가 설치되었고 원본 하드디스크가 1대만 설치되어 있으며,
 복사할 사본 하드디스크는 Fdisk에서 활성화(엑티브) 설정이 되어있고 Format 된 것
 으로 가정하고 복사 방법을 설명하겠습니다.

 1) 컴퓨터 전원을 OFF 시킨 후 컴퓨터 외함을 열어 (기존 원본 하드디스크는 마스터
  (Master)로 점퍼 설정되어 있으므로 그대로 두고) 사본 하드디스크 점퍼 세팅을
  슬래이브(Slave)로 설정한후 하드디스크 data 케이블과 Power 전원선을 연결합니다.

 2) 컴퓨터 Power를 ON 시킨 후 CMOS Setup으로 들어가 하드디스크를 설정합니다.
   -  [Delete] 키 또는 F2 키를 누르면 됩니다.
   - "Auto Detect IDE Drives" 메뉴를 선택해서 사본 하드디스크를 인식 시킵니다.
   -  바이오스 셋업을 저장하고 빠져 나오면 PC가 부팅이 됩니다.
   (참고로 최근에 나오는 PC들은 번거롭게 CMOS Setup으로 들어가지 않아도 부팅시에
     새로 설치된 하드디스크 등의 하드웨어를 자동으로 설정합니다)

 3) 윈도우즈로 부팅이 완료되면 도스 창(또는 명령 프롬프트 창)을 열어줍니다.
   ※운영체제가 windows 95 또는 windows 98 이면 [시작]-[프로그램]-[한글 MS-DOS]를
      실행하여 도스 창을 열어줍니다.
   ※운영체제가 windows ME 이면 [시작]-[프로그램]-[보조 프로그램]-[한글 MS-DOS]를
      실행하여 도스 창을 열어줍니다.
   ※운영체제가 windows XP, windows 2000 이면 [한글 MS-DOS]를 지원하지 않으므로
      [시작]-[프로그램]-[보조 프로그램]-[명령 프롬프트]를 실행하여 명령 프롬프트
      창을 열어 줍니다.

   도스 창 (또는 명령 프롬프트 창)을 열면 c:\>_ 프롬프트가 뜨면서 명령어 입력을
   기다리고 있습니다. 이제 원본 하드디스크(C:)에 저장된 운영체제 및 프로그램과
    Data를 사본 하드디스크(D:)로 통째로 복사할 준비가 된 것입니다.
   키보드로  c:\> xcopy c:\ d:\ /s /k /e /c /h /r /y  타이핑을 한 후에 Enter
   키를 치면 원본 하드디스크 C:에 저장되어 폴더(디렉토리)와 파일을 통째로 사본
   하드디스크 D:로 복사를 실행합니다.

   참고로 xcopy가 사용하는 옵션의 내용은 다음과 같습니다.
   /s 디렉터리와 하위 디렉터리를 복사하며, 빈 디렉터리는 제외한다
   /k 속성을 복사한다
   /e 디렉터리와 하위 디렉터리를 복사하며, 빈 디렉터리도 포함한다
   /c 오류를 무시하고 복사한다
   /h 숨겨진 파일과 시스템 파일도 복사한다
   /r 읽기 전용 파일을 덮어쓴다
   /y 확인 메시지를 표시하지 않고 기존 파일을 덮어쓴다

  하드디스크를 통째로 복사하므로 시간이 걸리므로 마칠 때까지 기다리면 됩니다.
   참고로 xcopy 명령은 외부 명령어이므로 만일 에러가 발생한다면 경로(path)지정이
   안되어 있는 것이므로 c:\windows\command\xcopy c:\ d:\ /s /k /e /c /h /r /y 로
   경로를 포함한 명령어를 입력하면 되고, c:\windows\command 디렉토리에 xcopy.exe
   화일이 없다면 다른 PC에서 복사하여 가져와야 합니다.

 4) 복사가 완료되면 PC를 끄고 기존 원본 하드디스크는 PC 본체에서 분리를 시키고,
   사본으로 사용한 하드디스크가 정상적으로 복사가 되었는지를 확인하기 위하여,
   사본 하드디스크 점퍼설정을 슬래이브(Slave)에서 마스터(Master)로 바꾸어 주고
   data 케이블과 Power 전원선을 연결합니다.
   - 마스터와 슬레이브로 사용한 하드디스크 정보가 바뀌어졌으므로 2번 항목 처럼
     컴퓨터 Power를 켜고 CMOS Setup으로 들어가 하드디스크 정보를 재설정합니다.
     하드디스크 정보가 변경될 때는 항상 CMOS로 들어가 "Auto detect IDE drives"로
     새로운 하드 디스크를 인식시킨 후 작업을 하여야 합니다.
   - 바이오스 셋업을 저장하고 빠져 나온 후에 사본으로 사용했던 하드디스크로 PC가
     정상적으로 부팅이 된다면 하드디스크 통째로 복사한 것이 성공한 것입니다.
     시스템이 안정적으로 동작하는지 점검하고 중요한 프로그램이나 데이터가 정상적
     으로 옮겨졌는지 확인한 후에 컴퓨터 외함을 닫으셔야겠죠?

★ 1)~4)번 까지 설명은 윈도우즈 계열 (windows95, windows98, windows ME,
    windows XP, windows 2000)로 부팅되었을 때, 도스창 또는 명령 프롬프트
    창에서 xcopy 명령어로 하드디스크를 통째로 1:1로 복사하는 방법입니다.
   
   그런데 3.5인치 디스켓 또는 CD ROM 드라이브를 이용하여 부팅을 하였거나,
   부팅(운영체제가 windows95 또는 windows98인 경우)할 때 [F8] 기능키를 눌러서
   순수 도스 모드 (command prompt only)로 부팅된 상태에서는, xcopy 명령어로
   숨겨진(hidden)화일과 시스템(system)화일 복사가 불가능 합니다.

   참고로 순수한 도스모드에서는 xcopy 도움말을 보기 위하여 c:\>xcopy /? 입력하면
    xcopy 명령어에서 사용가능한 옵션이 기본 8개(/A /M /D:date /P /S /E /V /W) 만
   표시되지만, 윈도우즈 운영체제로 부팅이 된 상태에서 도스창 또는 명령 프롬프트
   창을 열어서 동일한 방법으로  xcopy 도움말을 보기 위하여 c:\>xcopy /? 입력하면
    xcopy 명령어에서 사용 가능한 옵션이 무려 20개가 표시됩니다.
   즉 순수한 도스 모드에서는 하드디스크를 통째로 1:1로 복사하는 xcopy 명령문인
   c:\>xcopy c:\ d:\ /s /k /e /c /h /r /y 에서 /k /c /h /r /y 옵션 5가지의 사용이
   불가능하므로 하드디스크를 통째로 1:1로 정상적으로 복사할 수 없습니다.

   xcopy 명령어로 하드디스크를 통째로 1:1로 정상적으로 복사하려면 반드시
   윈도우즈 운영체계로 최소한 안전모드(Safe mode) 이상으로 부팅된 상태에서
   도스창 또는 명령 프롬프트 창을 열어서 명령어를 사용해야만 숨겨진 화일과
   시스템 화일을 정상적으로 복사할 수 있습니다.

   또한 순수한 도스 모드로 부팅된 상태에서는 윈도우즈에서 지원되는 8자를 초과하는
   화일 이름이나 3자를 초과하는 확장자 그리고 공백(space)이 있는 화일 이름이나
   폴더(디렉토리) 이름 등을 정확하게 인식하지 못하여 정상적인 복사가 안됩니다.
   참고로 xcopy 기능을 확장한 것으로 windows98 이상에서 지원되는 xcopy32 명령어가
   있으며, xcopy32 명령어가 xcopy와 비교하여 특별한 기능이 한 가지가 추가되었는데
   그것은 순수한 도스 모드 상태에서도 윈도우즈에서 지원하는 긴 화일 이름이나 폴더
   (디렉토리) 이름을 정상적으로 복사할 수 있다는 것입니다.
   그 외의 기능은 xcopy32 명령어 사용방법이나 적용되는 옵션은 xcopy와 동일하므로
   순수한 도스 모드로 부팅된 상태에서는 사용할 수 있는 옵션이 기본 8개만 가능하여
   xcopy32 명령어 역시 숨겨진 화일과 시스템 화일 복사가 불가능합니다.

◆ Fdisk, Format 그리고 xcopy 명령어 사용법에 대하여 확실히 알고 있으면 PC정비 및
   조립에 있어 초급 딱지를 떼고, 자신감을 가질 수 있습니다.
   xcopy 명령으로 하드디스크를 1:1 방식으로 통째로 복사하는 방법을 확실하게 숙지
   하시면 PC 유지관리에 큰 도움을 줄 것을 확신합니다.

2. win386.swp만을 제외하여 하드디스크를 1:1 방식으로 통째로 복사하는 방법 우리가 PC에서 말하는 주기억장치 용량은 RAM 크기를 말하며 CPU는 메모리를 사용하여 운영체제나 워드프로세서, 유틸리티, 게임 등의 응용 프로그램을 실행시킵니다. 그런데 윈도우즈에서 실행하는 프로그램이 많아서 RAM 용량이 부족할 때 하드디스크를 RAM처럼 사용하기 위하여 현재 사용하지 않는 메모리의 내용을 하드디스크로 임시로 옮겨놓고 필요에 의하여 다시 사용될 때는 이 파일로 부터 메모리로 옮겨지게 됩니다. 이때 저장되는 부분이 win386.swp 파일이고 이런 일련의 작업은 윈도우 내부에 있는 메모리 관리자가 자동으로 수행하게 됩니다. win386.swp 파일은 윈도우즈 스왑(swap) 파일로, 메인 메모리가 부족시 하드디스크로 이를 보조하는 가상 메모리 역할을 하며 c:\windows 디렉토리에 존재하며 윈도우즈가 실행 중일 때에는 필수적인 파일이기 때문에 삭제되지 않습니다. 만약 삭제하려면 부팅시 [F8]키를 눌러 도스 모드로 부팅해서 del 명령으로 삭제할 수 있지만, 윈도우즈 구동시 꼭 필요한 부분이므로 다음에 윈도우즈로 부팅을 하게되면 자동으로 또 생기게 됩니다. 단 [제어판]-[시스템] 등록정보에서 가상메모리 탭의 가상메모리 사용안함을 체크하면 win386.swp 파일이 생기지 않는데 이 경우에 윈도우 성능이 저하될 수 있고, 제대로 동작하지 않을 가능성이 있으므로 변경하지 않는 것이 정신건강에 좋습니다. 대신에 win386.swp 파일크기를 늘리거나 줄일 수 있는데 [제어판]-[시스템] 등록정보 에서 사용자가 직접 가상 메모리 설정을 관리를 체크하고, 가상메모리로 사용할 하드 디스크 크기 및 최소, 최대를 설정하면 됩니다. 윈도우즈가 실행된 상태에서 윈도우즈에서 기본으로 제공하는 내컴퓨터 또는 탐색기의 복사하기(ctrl+c), 붙이기(ctrl+V) 기능으로 사본 하드디스크에 1:1 방식으로 통째로 복사할 때 원본 하드디스크에 저장된 각종 응용 프로그램의 Data는 별다른 조치없이 그냥 사본 하드디스크에 복사하면 됩니다. 그러나 운영체제와 응용 프로그램은 반드시 원본 하드디스크 c:\windows 디렉토리의 win386.swp 파일은 제외하고 사본 하드디스크 D:로 복사를 해야만 정상적으로 복사가 되어 운영체제와 프로그램이 실행이 됩니다. 그러므로 win386.swp 파일을 제외하여 하드디스크를 통째로 복사하는 방법은 xcopy에 비교하여 번거롭고 시간이 오래 걸립니다. (편의상 윈도우즈 바탕화면에 기본으로 설치된 내컴퓨터로 설명을 하겠습니다.) 1) 앞서 xcopy를 이용한 하드디스크 1:1로 통째로 복사하는 방법의 첫째 항목과 동일 2) 앞서 xcopy를 이용한 하드디스크 1:1로 통째로 복사하는 방법의 둘째 항목과 동일 3) 윈도우즈로 부팅이 완료되면 내컴퓨터 (또는 탐색기)를 실행합니다. - 내컴퓨터의 C: 원본 하드디스크로 들어가면 설치된 폴더 목록및 화일 목록이 보이는데 windows 폴더를 마우스로 선택(클릭) 합니다. - 내컴퓨터 상단메뉴 항목의 편집(E)의 하위 메뉴에서 "선택 항목 반전(I)"을 선택 (클릭)하면 windows 폴더를 제외한 모든 폴더와 화일이 선택됩니다. 이 상태에서 키보드의 [Ctrl]키와 C키를 동시에 누르면 (또는 내컴퓨터 상단 메뉴 항목의 편집(E)를 선택하고 복사(C)를 선택하면) 선택한 폴더와 화일이 임시 기억장치에 보관됩니다. - 내컴퓨터의 D: 원본 하드디스크로 들어가 [Ctrl]키와 V키를 동시에 누르면 (또는 내컴퓨터 상단 메뉴 항목의 편집(E)를 선택하고 붙여넣기(V)를 선택하면) 원본 C: 하드디스크에서 windows 폴더를 제외한 모든 폴더와 화일이 사본 D: 하드디스크로 복사를 시작하게 됩니다. - windows 폴더를 제외한 모든 폴더와 화일이 복사 완료되면 내컴퓨터의 C: 원본 하드디스크의 windows 폴더에 들어가 win386.swp 화일을 마우스로 선택합니다. - 내컴퓨터 상단메뉴 항목의 편집(E)의 하위 메뉴에서 "선택 항목 반전(I)"을 선택 하면 windows 폴더에서 win386.swp을 제외한 모든 폴더와 화일이 선택됩니다. 이 상태에서 키보드의 [Ctrl]키와 C키를 동시에 누르면 (또는 내컴퓨터 상단 메뉴 항목의 편집(E)를 선택하고 복사(C)를 선택하면) 선택한 폴더와 화일이 임시 기억장치에 보관됩니다. - 내컴퓨터의 D: 원본 하드디스크로 들어가 상단메뉴 파일(F)의 하위 메뉴에서 "새 폴더(N)"을 선택하여 windows 폴더를 새로 만듭니다. - 내컴퓨터의 D: 원본 하드디스크 windows 폴더로 들어가 [Ctrl]키와 V키를 누르면 (또는 내컴퓨터 상단 메뉴 항목의 편집(E)를 선택하고 붙여넣기(V)를 선택하면) 원본 C: 하드디스크의 windows 폴더에서 win386.swp를 제외한 모든 폴더와 화일이 사본 D: 하드디스크의 windows 폴더로 복사를 시작하게 됩니다. 4) 복사가 완료되면 앞서 xcopy를 이용한 하드디스크 1:1로 통째로 복사하는 방법의 넷째 항목과 동일하게 사본으로 복사한 하드디스크로 정상적으로 부팅이 되는가를 확인하면 됩니다. 윈도우즈로 부팅이 완료되면 c:\windows 폴더에 win386.swp 화일 이 자동으로 생기게 됩니다. 지금까지 win386.swp를 제외시키고 하드디스크를 통째로 복사하는 방법은 번거롭고 시간이 오래 걸리는 불편함이 있으니 이런 방법도 있다는 것으로 참고만 하시고, 가능한 앞서 설명한 xcopy를 이용한 방법을 적극적으로 추천합니다. 다음은 고스트(ghost)를 이용한 방법을 설명하겠습니다.
 
3. 고스트(ghost)를 사용하여 하드디스크를 1:1 방식으로 통째로 복사하는 방법

고스트는 노턴 안티바이러스로 유명한 시만텍사에서 만든 제품으로 하드디스크 백업,
 복원 응용 프로그램으로, Fdisk에서 같은 크기의 해당 디스크 내용을 고스트로 백업한
 뒤 새로운 하드디스크에 복원하면 손쉽게 복사할 수 있습니다.
또한 압축기능도 있어 용량이 1GB 넘는 것도 CD 1장에 백업이 가능하고, 멀티디스크도
 지원해서 용량이 많은 시스템이라면 여러 장의 CD로 백업이 가능합니다.
그리고 autoexec.bat 파일과 config.sys 파일을 Ghost로 백업될 cd안에 넣어준다면 CD
 1장으로 부팅시에 곧바로 백업을 수행할 수 있는 마스터 CD도 만들 수 있습니다.
다음은 고스트(ghost) 사용방법에 대하여 보물섬 자료실 내용을 퍼온 것입니다.

ghost 설치 작업
 1) 먼저 준비 사항을 점검해보도록 하자.
    일단 하드 디스크가 두개 이상의 파티션으로 나뉘어져 있어야 한다
    (여기서는 C와 D로 파티션을 나눴다고 가정하고, 시스템도 C 드라이브에 설치되어
     있다고 가정하고 설명한다).
   그래야 C 드라이브의 내용을 백업해둘 공간을 마련할 수 있으니까.
   또는 하드 디스크가 두개라도 된다.
 2) 다음에는 프로그램을 설치할 차례. 이 프로그램은 한라 시스템에 사랑방 업로드
    게시판에 최신버전인 6.0 정식 버전이 올려저 있습니다 .
    여기에서 화일을 다운 받으세요 주소는 맨 아래 참조하세요)
 3) 프로그램을 다운로드했으면 D 드라이브에 폴더를 하나 만들고 적당한 폴더명을
    입력해준 다음, 여기에다 파일 압축을 푼다. 이것으로 프로그램 설치는 끝!
 4) 다음에는 백업할 드라이브의 디스크 검사와 조각 모음을 실행한다.
    오류가 없는 상태로 백업을 해야 재설치해도 문제가 없을 것이고, 조각 모음을
    하면불필요한 공간 낭비를 막을 수 있기 때문이다.
    따라서 만약 지금 시스템이 문제가 있다면 일단은 먼저 시스템을 깨끗이 재설치한
    다음, 이 백업 작업을 시작하는 게 좋다.
 5) 준비가 끝났으면 이제 고스트를 실행시킬 차례다. 고스트 폴더에서 ghost.exe
    파일을 더블 클릭하면 프로그램 창이 나타난다.

ghost에서 하드 디스크 백업하기
 1) 프로그램을 실행하면 고스트 소개 창이 나타난다. OK 버튼을 클릭한다.
    그러면 프로그램 창이 나타난다.
    여기서 Local->Partition->To Image 차례로 선택한다.
 2) 다음에 Select local source drive에서는 백업할 파티션이 들어 있는 드라이브를
    선택한다. 하드 디스크가 하나인 경우에는 하나만 나타난다.
 3) Select source partition from drive에서는 백업할 파티션을 선택한다.
    보통 1번 파티션에 시스템이 설치돼 있다. 1번 파티션을 마우스 커서로 한번 클릭
    하면 자동으로 선택되면서 다음 창으로 넘어가게 된다.
 4) File name to copy image to는 백업한 이미지 파일을 저장해 둘 드라이브와 파일
    명을 입력한다. 즉 파티션이 C와 D로 나뉘어져 있다면, D 드라이브를 선택한 다음
    적당한 파일명을 입력해준다.
    맨 위의 드라이브 창에서 저장할 드라이브를 선택한 다음,가운데 창에서 디렉토리
    를 선택한다.그런 다음, 아래쪽의 [File Name] 항목에서 파일명을 입력해준다.
    파일명은 여덟자까지 가능하며 확장자 gho가 자동으로 붙게 된다.
    백업 파일을 보관할 드라이브와 파일명을 입력한다.
 5) 파일명을 입력한 상태에서 엔터키를 누르면 새로운 확인 창이 나타난다.
    여기서는 백업할 이미지 파일을 압축할 것인지를 묻는 항목이 나타난다.
    No를 선택하면 압축을 하지 않게 되고, Fast와 High는 각각 압축률과 압축 속도에
    관련이 있다. Fast가 압축률은 낮은 대신 백업 속도는 High보다 빠르다.
    No나 Fast 를 선택하는게 무난하다. 원하는 항목을 마우스로 선택한다.
 6) 다음으로 Proceed with partition dump? 항목이 나타난다.
    정말로 백업 이미지 파일을 만들겠냐고 묻는 것이다. 물론 Yes를 선택.
 7) 그러면 드디어 백업 작업이 시작된다. 진행 상황을 알려주는 막대 그래프가
    나타나고, 아래쪽에는 예상 시간과 드라이브를 알 수 있다.
 8) 백업 작업이 끝나면 작업이 끝났다는 메시지가 나타난다. 엔터키를 누른다.
    그러면 이것으로 백업 작업이 모두 끝난다.

ghost에서 백업 파일을 시스템에 설치하기
 1) 윈도우즈를 사용하다 문제가 생겨 시스템을 새로 설치할 때가 오면 이제 백업해둔
    파일을 이용할 차례다. 먼저 문제의 원인을 제거하기 위해 시스템을 재 설치할
    드라이브를 깨끗이 포맷해버리자. Format c:/s 명령을 내리면 포맷과 동시에
    시스템 파일이 설치되기 때문에 하드 디스크로 바로 부팅할 수 있어 편리하다.
 2) 포맷 작업이 끝나면 다시 고스트를 실행한다> Local->Partition->From Image
    순서로 선택한다.만약 파티션이 아니라 하드 디스크 전체를 통째로 백업했었다면,
    즉 하드 디스크가 두개 이상 달려 있어서 하나의 하드 드라이브를 통째로 다른
    하드 드라이브에 이미지 파일로 백업해둔 경우라면
    위쪽의 Local->Disk->From image file을 선택한다.
 3) 다음으로 File name to load image from 항목에서는 이미지 파일이 들어 있는
    경로로 이동해서 백업 파일을 선택한다.
 4) 다음으로 Select source partition from image file에서는 백업한 파일 중에서
    어느 파티션을 설치할 것인지를 선택한다. 앞의 예에서 하나의 파티션만 백업했기
    때문에 파티션 정보가 하나만 나타난다.
    물론 파티션이 여러 개 나뉘어져 있는 하드 디스크를 통째로 백업했다면 여기에서
    여러 개의 파티션 정보가 나타나게 된다.
    해당 파티션을 선택해서 다음 창으로 넘어가게 된다.
 5) Select local destination drive 항목에서는 백업 파일을 설치할 드라이브를
    선택한다. 하드 디스크가 하나면 하나밖에 나타나지 않는다.
    드라이브를 선택해서 다음 창으로 넘어간다.
 6) Select destination partition from drive:1에서 백업 파일을 설치할 파티션 드라
    이브를 선택한다.
    일반적인 경우라면 1번 드라이브(즉 C 드라이브)를 선택하면 된다.
 7) 이제 마지막으로 정말 백업 파일을 설치할 것인지를 묻는 창이 나타난다.
    선택한 파티션 드라이브에 백업 파일을 설치하면 기존의 데이터는 모두 삭제되므로
    제대로 선택했는지 주의깊게 확인해봐야 한다.
    문제가 없다면 Proceed with partition load?-destination will be overwritten
     에서 Yes를 선택한다.
 8) 그러면 드디어 설치 작업이 시작된다.
    백업 파일을 만들 때보다는 두배 정도 빠른 속도로 설치 작업이 진행된다.
    설치가 끝나면 시스템을 재시동한다.
 9) 그러면 곧바로 윈도우즈가 깨끗하게 실행되는 것을 볼 수 있다.

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에서 접수합니다.