(참고)만약 root filesystem이 90% 이상일 경우 홈페이지에 있는 find 명령어 사용법을 참조하여 비정상적으로 생성된 file을 삭제하라. 그리고 root filesystem에 user의 directory가 있는지 살펴 보아라. 특히 backup 시 device 명을 잘못 주어서 file로 저장되어서 시스템이 full 되는 경우가 많습니다.
(참고) Find 명령어 사용법
1. /usr에 50,000 characters보다 큰 파일 찾아라.
# find /usr -type f -size +50000c -print
2. core file을 삭제하라.
# find / -name core -type f -exec rm {} \;
3. /usr/src에서 이름이 mem*.c 인 것을 찾아라.
# find /usr/src -type f -name "mem*.c" -print
4. owner가 root이고 set-user-ID를 가지는 모든 파일을 찾아라.
# find / -perm -04000 -user root -type f -exec ls -l {} \;
5. 최근 이틀 내에 쓰여진 파일을 찾아라.
# find /usr -ctime -2 -print
6. 최근 이틀 내에 쓰여지고 크기가 10,000byte이상인 파일이나 디렉토리를 찾아라.
root password를 잊어버려 root로 login이 않되는 경우에는 OS CD를 사용하여
아래와 같이 복구를 할 수 있다. 만약 OS CD를 갖고있지 않다면 복구할 방법이 없다.
1. 시스템을 down 시키고 OS CD를 CD-ROM drive에 넣는다.
root로 login을 할수 없으므로 시스템을 재부팅 시키기 위해서는 keyboard에서
"stop" key와 "a" key를 동시에 눌러서 시스템을 PROM mode(ok prompt 상태)
로 전환한다
2. 아래와 같이 CDROM 을 이용하여 single-user mode로 부팅한다
ok boot cdrom -sw
3. Bourne shell prompt(#)가 나타나면, /로 사용하던 disk device를 /mnt로 mount
한다. /로 사용하던 disk device가 /dev/dsk/c0t0d0s0인 경우 아래와 같이 한다.
# mount -F ufs -o rw /dev/rdsk/c0t0d0s0 /mnt
4. 위와 같이 하면 기존에 /etc directory에 있던 shadow 화일이 /mnt/etc/shadow로
존재하게 되며, 이 화일을 vi로 열어서 root에 정의되어 있는 password부분을
지운다.
# vi /mnt/etc/shadow
root:vBrrOh8AIqYV6:6445::::::
^^^^^^^^^^^^^ 이 부분을 지운다
변경후
# cat /etc/mnt/shadow
root::6445::::::
5. 위와 같이 한후 시스템을 재부팅 하면 root로 password 없이 login가능하다.
1. Insert CDROM
2. prompt => # shutdown -i0 -y -g0 ( init 0 또는 Stop + A)
3. prompt => OK set-defaults
4. prompt => OK boot cdrom
5. System recognization
6. Setup choice of Disk and Partition
7. Setup group of software
8. Rebooting
9. Install software 2/2 CD, Language CD
1. 시스템에 인가될 전원 체크
2. 외부연결장치의 확인( keyboard, mouse, monitor, 외장 HDD 등)
3. 본체에 전원을 켜기전에 외부장치의 전원을 먼저 켠다.
SPARC 시스템의 경우 디폴트로 전원을 켜면 시스템이 OBP의 boot-device 와 auto-boot? 파라메터 값에의해 자동으로 부팅이 됩니다.
관리자가 시스템의 admin을 할 경우나 새로운 디바이스의 연결 또는 다른 모드로 부팅을 할 필요가 있는 경우 OK prompt상태(= OBP 상태)로 만든후 OBP 파라메터의 변경이나 아래의 boot 커멘드를 이용해서 다른 모드로 부팅이 가능하다. (화면 banner출력시 STOP-A key를 동시에 누른다.)
boot command
ok boot [device name] - [options]
ok prompt (stop-A) 상에서 부팅을 하는 명령어이다. [device name]에 특정장치명을 입력하면, cdrom이나 다른 장치로 booting을 할 수 있다. booting시 default는 디스크와 run level 3단계다.
<예> cdrom 부팅시 ok boot cdrom
- a : interactive 부팅을 하는 옵션으로 부팅시 system file, 사용할 커널을 지정할 수 있다.
커널파일 또는 system 파일을 디폴트가 아닌 다른 파일을 이용해 부팅할수 있다.
- s : run level 1번으로 Single Mode 부팅을 하는 옵션이며 user login을 할수없다.
- r : run level 3번으로 부팅을 하며 디바이스 파일을 새로 만들어 준다.
새로운 하드 디스크나 테이프 디바이스, 옵션 네트워크 카드등을 연결했을때 사용한다.
SYSTEM SHUTDOWN
시스템을 끄기전에 참고사항
1. 시스템에 운영중인 APP프로그램을 중지한다.(DB, WEB, etc..)
2. 현재 사용중인 사용자가 있는가.. 당연히 없어야 한다.
3. 사용자가 있다면 wall 커멘드 등을 이용해 알린다.
3. sync 커멘드를 사용해서 메모리의 테이터를 저장한다.
아래에 나오는 커멘드를 이용해 시스템을 종료한후 OK 상태로 되면 시스템의 전원을 끄고 기타 외부에 연결되어진 장치(monitor, 외장 hdd등을 끈다.)
※ sync는 메모리와 disk의 super block 및 block에 operation을 행하여 그 내용이 변한 것 중에 disk에 저장되지 못한 block들을 write 시키도록 하는 명령이다. sync를 하지 않고 전원을 끈 경우, boot 시에 file system check에서 에러가 발생하는 경우가 대부분이다
init command
init [012356abcQqSs]
시스템의 run level을 바꾸는 명령어이다. 지정 level에 따라서 ok prompt Mode, 시스템의 리부팅, 시스템 전원의 off를 할 수 있다.
shutdown command
shutdown [ -y ] [ -g ] [ -i ] [ message ]
system을 종료시키는 명령어로서 종료시 종료여부를 묻고 종로시간에 맞추어 경고메세지를 보낸다.
- y : shutdown시 yes or no를 묻는데 이 옵션을 쓰면 pass됨
- g : 이 옵션은 shutdown시 걸리는 시간을 정해주는 옵션으로 이 옵션을 쓰지않으면 default
shutdown시간은 60초입니다. 뒤에 지정 되는 시간뒤에 셧다운을 합니다. 중간중간 경고
message를 나타냅니다.
- I : shutdown 후 default로 run level S를 실행하는데 이 옵션은 그외에 다른 run level을
선택할 수 있다.
<예>
# /usr/sbin/shutdown -y -g30
30초 후에 시스템은 single모드로 만든다.
# /usr/sbin/shutdown -y -g0 -i0
THE SYSTEM taks IS BEING SHUT DOWN NOW ! ! !
Log off now or risk your files being damaged
Changing to init state 0 - please wait
위의 메시지가 나오면서 시스템이 ok 모드로 됩니다.
그러면 시스템의 전원을 끄면 됩니다.
※ init 명령이나, shutdown 명령은 system을 종료하는데 있어서 rc0 file을 참조, 현재 실행되고 있는 모든 process를 닫기 때문에 안정적인 shut down 방법이라 할 수 있습니다. 이때 닫고 싶은 process가 있다면 /etc/rc0.d에 script파일을 만들어 주면 됩니다.(이것은 init 0 또는 # /usr/sbin/shutdown -y -g0 -i0 일경우만 해당 됩니다.)
Other command
halt : 시스템을 shutdown 시키고 ok prompt 상태로 돌아가는 명령어이다. init 0명령과 유사하지만, rc0 scripts 를 실행하지 않는다. 어떠한 이유에서 rc0 file 이 고쳐졌을 경우에는 사용하기 적합치 않은 명령어이다.
poweroff : sun4u나 sun4m 시스템을 종료시키고, 시스템의 파워를 끄는 명령어이다. run level 5단계이며 이 명령어 또한 rc0 scripts를 실행시키지 않는다.
reboot : 말그대로 시스템을 다시 부팅하는 명령어이며 default로 run level 3단계를 실행시키며 이역시 rc0를 실행시키지 않는다.
※ 이 세명령어 역시 shutdown 시키는 명령어이지만, DB shutdown script나 특정한 스크립트를 rc0.d 에 추가 했다면 주의해야할 커멘드 입니다.
system run level
0 : ok prompt 상태 (PROM Monitor level)
1 : 시스템 관리자 모드 user login 불가 (Single user Mode level)
2 : Muti-user Mode
3 : Muti-user Mode & share system resource(NFS Server)
5 : Halt system and power off
6 : Halt and reboot system
a,b,c : 사용자가 /etc/inittab entry를 수정 a, b, c level을 setting할 수 있음
유닉스는 1969년에 벨 연구소에서 인터랙티브 시분할 시스템으로서 만든 것이 그 시초가 된 운영체계이다. 켄 톰슨과 데니스 리치가 유닉스의 창시자로 알려져 있다. 유닉스라는 이름은 그 이전의 시스템인 멀틱스에 기반을 두고 지은 일종의 말장난이었다. 1974년에 유닉스는 C 언어로 쓰여진 최초의 운영체계가 되었다. 유닉스는 여러 회사들이나 대학 및 개인들에 의해 많은 확장판과 새로운 아이디어들이 다양한 버전의 유닉스에 추가됨으로써, 대형 프리웨어 제품의 한 종류로 진화하였다. 유닉스는 앞서가는 특정 컴퓨터 회사들에 의해 소유된 독점적인 운영체계가 아니었다는 것과, 또 그것이 표준 프로그래밍 언어로 작성되고, 대중적인 많은 아이디어를 받아들였다는 이유 때문에, 누구에 의해서도 개선되고 강화될 수 있는 최초의 개방형 표준 운영체계가 되었다. 다양한 버전의 유닉스로부터 나온 C 언어와 쉘 인터페이스의 복합체는 IEEE의 찬조 하에서 POSIX로 표준화되었다. POSIX 인터페이스들은 번갈아 가며, X/Open 프로그래밍 가이드 4.2 ("단일 유닉스 규격"과 "유닉스95"로 알려져 있다)에 명기되었다. 단일 유닉스 규격의 버전2는 유닉스98로도 알려져 있다. 유닉스의 공식적인 등록상표는 현재 산업표준기구인 오픈 그룹이 소유하고 있으며, 유닉스 관련 제품들의 인증과 상표부여 등을 관장하고 있다.
유닉스 운영체계는 널리 판매된 썬마이크로시스템즈(Solaris), 실리콘그래픽스(IRIX), IBM(AIX), 그리고 그 외 많은 회사들의 워크스테이션 제품들에서 사용된다. 유닉스 환경과 클라이언트/서버 프로그램 모델은 인터넷 개발과 네트워크 중심의 컴퓨팅 국면을 새로이 하기 위한 중요한 요소였다. 유닉스에서 파생하여, 현재 무료 소프트웨어와 상용버전이 모두 존재하는 리눅스는 독점 운영체계의 대안으로서 명성을 더해가고 있다.
2. 유닉스의 특징
- 멀티태스킹과 멀티유저 지원
- 용이한 이식성
- 계층적 파일 시스템 구조 (Hierarchical File System)
- Security 및 Protection 기능
- 입출력의 방향 전환 및 파이프 기능
- 확장성과 조직성이 풍부한 Shell
- 각종 Special Devices의 독립성
- 유연성 있는 커뮤니케이션을 할 수 있는 운영체제
- 언어 및 유틸리티가 다양하여 프로그램 개발이 용이
3. UNIX의 구성요소
1) Kernel : Unix의 핵이며 File system, Device, Memory, Process 관리.
2) Shell : Command Interpreter로 사용자와 커널간의 인터페이스 역할과 명령을 해석.
3) File System (Directory Tree)
파일 시스템은 커널이 데이터를 관리하기 위한 파일 또는 디렉터리의 관리 구조이다.
4. UNIX의 종류
- Sun OS : 썬 마이크로시스템즈에서 제공하는 BSD 계열의 UNIX
- Solaris : 썬 마이크로시스템즈에서 제공하는 System V 계열의 UNIX
- HP/UX : HP의 UNIX 시스템은 OSF/1(Open Software Foundation)의 여러 특징을 도입한 System V의 변형된 형태
- AIX : IBM에서 System V release 4의 4.4 BSD 버전과 OSF/1을 기반으로 만들어낸 UNIX
- Digital UNIX: OSF그룹에서 System VR3과 4.3 BSD버전을 결합시키고 OSF/1을 기반으로 발전된 DEC(현재 Compaq)의 UNIX
- IRIX : 실리콘 그래픽스에서 BSD와 System V계열의 UNIX를 기반으로 만들어진 UNIX
5. Solaris OS
4.2 버전까지 BSD를 만들던 버클리의 빌 조이가 썬 마이크로시스템즈로 옮겨가서 만든 것이 SUN OS이며 썬 마이크로시스템즈가 AT&T의 System V release 4.0의 라이선스를 받아 만든 것이 Solaris이다.
1) 버전간의 관계
Solaris 2.x = Sun OS 5.x + Open Windows + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 7 = Sun OS 5.7 + Open Windows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 8 = Sun OS 5.8 + OpenWindows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)
Solaris 9 = Sun OS 5.9 + OpenWindows, CDE(Common Desktop Env) + ONC+(Open Network Computing: NFS, NIS, NIS+등)
2) 장비 별 지원 OS 버전
SunOS 5.x = Solaris 2.x
Sun dropped the "2." when Solaris (2.)7 came out.
I.e. Solaris 7 = "Solaris 2.7" = SunOS 5.7,
Solaris 8 = "Solaris 2.8" = SunOS 5.8 and so on.
Sun2: SunOS 4.0.3 or earlier.
Sun386i: SunOS 4.0, 4.0.1, 4.0.2 only.
Sun3: SunOS 4.1.1 or earlier.
4/100, 4/200 series: SunOS 3.2, SunOS 4.0 through 5.4
4/300 series: SunOS 4.0.3 through 5.4
4/400 series: SunOS 4.1PSR_A through 5.4
600 models 120, 140: SunOS 4.1.2 through 5.5.1
600 model 41, 51: SunOS 4.1.3 through 5.5.1
SPARCstation 1, 1+, SLC, IPC: SunOS 4.0.3 through 5.7
SPARCstation 2, ELC, IPX: SunOS 4.1.1 through 5.7
SPARCstation 4: SunOS 4.1.4 or later.
SPARCstation 5: SunOS 4.1.3_U1B or later.
SPARCstation 10 models 20, 30, 40, 41, 51, 61, 71: SunOS 4.1.3 or later.
SPARCstation 20 models 50, 51, 61, 71: SunOS 4.1.3_U1B or later.
SPARCstation 20 model HS11, HS21, 151: SunOS 4.1.4 or later.
SPARCclassic, SPARCstation LX: SunOS 4.1.3C or later.
SPARCstation Voyager: Solaris 2.3 edition II or later.
Ultra 1 model 140, 170: Solaris 2.5 or later.
Ultra 1 model 140E, 170E, 200E: Solaris 2.5.1 or later.
Ultra 2: Solaris 2.5.1 or later.
Ultra 5, 10, 30, 60, 250, 450: Solaris 2.5.1HW1297 or Solaris 2.6HW0398 or later.
Ultra Enterprise: Solaris 2.5.1 or later.
SunBlade 100, SunBlade 1000, SunFire 280R: Solaris 8HW1000 or later.
SunFire 3800, 4800, 4810, 6800: Solaris 8HW0401 or later.
- OS 버전의 확인
# uname -a
SunOS sonamu 5.8 Generic_108528-15 sun4u sparc SUNW,Ultra-1
1) Consol로 직접 로그인과 telnet, rsh, ssh (Shell 사용), Xmanager(Windows 사용) 등의 원격 로그인
- telnet : 이 기종간의 시스템 접근 가능 ( Port 23)
- rsh : Unix 기종간의 시스템 접근 가능
- ssh: Unix 기종간의 시스템 접근 가능 (보안쉘, Port 22) http://www.openssl.org http://www.openssh.org
2) 시스템 사용자: root와 일반 사용자
root: 슈퍼유저, 시스템 어드민, 초기 설치 시 패스워드 결정, 모든 권한, 기본쉘은 /sbin/sh
일반유저: 일반사용자.
3) 관련 파일
/etc/passwd 파일
user1:x:102:10:User Account 1: /export/home/user1:/bin/ksh
/etc/shadow 파일
user01:haN3NqcDfof.2:::::::
/etc/group 파일
other::1:user01,user02
4) 사용자 관리
/usr/bin/passwd 명령 : 자신의 패스워드 변경 (일반 유저), 다른 사용자의 패스워드 변경(root)
* 패스워드 생성 규칙(일반유저)
- 6~8 문자
- 두 개의 알파벳과 하나의 특수문자 또는 숫자 포함
- 로긴 이름과 다르게
- 변경 전 패스워드와 다르게
- 공백을 포함할 수 있다.
/usr/sbin/groupadd 명령 : 그룹을 생성 ( GID는 100 ~ 60000 번까지)
ex) # groupadd -g 100 class1
1) 시스템 이름 및 OS버전 확인
$ uname -a
$ cat /etc/release (=> OS의 릴리즈 확인)
2) 현재 로그인한 사용자 정보
$ who (/var/adm/utmpx)
3) 최근 로긴했던 사용자 정보 + 재 부팅 정보
$ last (/var/adm/wtmpx)
$ last user01
$ last reboot
4) 프로세스 정보
$ ps -ef | grep netscape
$ pgrep netscape (solaris 8부터)
5) 날짜 및 시간 출력
$ date
$ cal
6) 맨 페이지
$ man man
$ man -k calendar
cf. # catman -w (관리자 root가 실행)
$ man -s5 man (5 section manual)
- Section Definition -
관련 파일: /usr/share/man/man.cf, /usr/share/man/entities/*
1: User Commands
1M: System Administration Commands
2: System Calls
3: Basic Library Functions
4: File Formats
5: Standards, Environments and Macros
6: Demos
7: Device and Network Interfaces
9: Device Driver Interfaces
- 맨페이지 위치
/usr/share/man/
/usr/openwin/man/
/usr/dt/man
- 맨페이지 추가
# vi /etc/profile
...
MANPATH=/usr/share/man:/usr/openwin/man:/usr/dt/man:<추가할 맨페이지 디렉토리>
export MANPATH
2. 파일과 디렉토리 접근
주의 - 파일과 디렉토리, 명령 등은 모두 대소문자를 구별한다.
1) 패스이름
- 절대경로(Absolute Path Name) : root(/)를 기준으로 기술, /usr/local/src/file1
- 상대경로(Relative Path Name) : 현재 디렉터리를 기준으로 .또는 ..으로 기술, dir1/subdir1/file2
2) 관련 명령어
- ls(list) : 파일 또는 디렉터리의 리스트를 출력
- pwd(print working directory) : 현재 작업 디렉터리의 위치를 출력
- cd(change directory) : 작업 디렉토리를 변경
3. 파일과 디렉토리를 다루는 명령
- file : 파일 타입을 확인 (text, data, executable or binary)
- cat(catenate) : 주로 짧은 text파일을 볼 때
- more : 주로 긴 text파일을 볼 때
- strings: 바이너리 파일의 문자열만 보고자 할 때
- head: text파일의 머리부분(디폴트 10줄)만 보고자 할 때
- tail: text파일의 끝부분(디폴트 10줄)만 보고자 할 때 (tail -f /var/log/messages)
- wc(word count) : text파일의 라인 수, 단어 수, 문자 수를 알고자 할 때 ( wc file1)
- touch : 빈 파일을 생성할 때
- tee : 화면 출력과 파일 저장을 동시에 하고자 할 때 (ls -lR | tee logfile | more)
- mkdir : 디렉토리를 생성할 때
- rmdir : 빈 디렉토리를 제거할 때
- rm -r : 디렉토리를 제거할 때
- cp : 파일을 복사할 때
- cp -r : 디렉토리를 복사할 때
- mv : 파일 또는 디렉토리를 이름변경 또는 옮길 때
4. 파일과 텍스트 검색
- find : 파일 또는 디렉토리를 찾을 때
$ find / -name core
$ find ~ -name core -exec rm {} ;
$ find . -mtime +90
$ find ~ -size +57
$ find /usr -name '*tif'
- cmp, diff : 두 파일의 차이를 비교할 때
- sort : 파일의 내용 또는 리스트를 정렬할 때
$ ls -l | sort
$ du -ks /etc/* | sort -nr
- grep : 파일의 특정 문자열이 있는 라인을 출력
$ grep user01 /etc/passwd
$ ps -ef | grep ksh
5. 파일의 보안
$ ls -l
-rw-r--r-- 1 borisu staff 8239 2002년 8월 29일 backup.txt
-rw-r--r-- 1 borisu staff 2361 2002년 9월 3일 memo.txt
drwx------ 5 borisu staff 512 5월 20일 11:55 shell/
-rw-r--r-- 1 borisu staff 1660 4월 25일 01:37 ssh-setup.sh
File Type: -, f , d, c, b
Permission: read(r:4), write(w:2), execute(x:1)
User, Group, Others
tar - Creates and extracts files from a tape device or file archive
compress, uncompress - Compress and uncompress a file
zcat - Uncompress a compressed file and sends the output to the screen without changing the compressed file.
gzip, gunzip - Compresses and uncompressed
gzcat - Uncompress a gzipped file and sends the output to the screen without changing the gzipped file
zip, unzip - Packages and compresses files and uncompressed files.
jar - Packages and comresses multiple files to a single archive file
cpio - Copies and extracts files fro a file archive or tape device.
[ tar ]
내용만 볼 때: tar tvf name.tar
풀 때 : tar xvf name.tar
만들 때 : tar cvf name.tar file1 file2 file3
tar cvf name.tar dir1
$ cd
$ mkdir testdir
$ cd testdir
$ cp /etc/profile file1
$ man ls | col -b > file2
$ tar cvf first.tar file1 file2
$ rm file? ; ls
$ tar tvf first.tar
$ tar xvf first.tar
$ cd ..
$ tar cvf second.tar testdir
$ rm -rf testdir
$ tar tvf second.tar
$ tar xvf second.tar
[ compress & uncompress ]
$ compress second.tar
$ ls
$ uncompress second.tar.Z
$ tar xvf second.tar
cf. zcat second.tar.Z | tar xvf -
cf. compress -dc second.tar.Z | tar xvf -
cf. uncompress -c second.tar.Z | tar xvf -
[ gzip ]
$ cd
$ cd ..
$ ls
$ tar cvf /var/tmp/myhome.tar user01
$ cd /var/tmp; ls
$ gzip myhome.tar
$ ls
$ gzip -d myhome.tar.gz
$ tar tvf myhome.tar
$ tar xvf myhome.tar
cf. gzcat myhome.tar.gz | tar xvf -
cf. gzip -dc myhome.tar.gz | tar xvf -
cf. gunzip -c myhome.tar.gz | tar xvf -
cf. gtar xvfz myhome.tar.gz
[ jar ]
$ jar cvf dir1.jar dir1
$ jar tvf dir1.jar
$ jar xvf dir1.jar
8. 원격지 접속
원격지 접속은 telnet, rlogin, ftp, ssh등이 있다.
1) telnet
원격 호스트의 user name과 password가 필요
$ telnet host1
...(접속해서 사용)
$ exit (로그 아웃)
process : 프로그램이 메모리에 올라와 동작하고 있는 상태.
PID : 프로세스의 고유 ID (커널이 관리)
Daemon: 백그라운드로 실행, 부팅 시 동작, 서버 프로세스
1) 프로세스 정보
$ ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 4월 25 ? 0:00 sched
root 1 0 0 4월 25 ? 0:05 /etc/init -
root 2 0 0 4월 25 ? 0:00 pageout
root 3 0 0 4월 25 ? 86:09 fsflush
root 279 1 0 4월 25 ? 0:00 /usr/lib/saf/sac -t 300
root 204 1 0 4월 25 ? 0:00 /usr/lib/utmpd
root 134 1 0 4월 25 ? 0:02 /usr/sbin/rpcbind
$ ps -ef | grep lp
$ pgrep -l lp (solaris 8부터)
2)프로세스 종료
- 시그널 정의
$ man -s 3HEAD signal
Name Value Default Event
SIGHUP 1 Exit Hangup (see termio(7I))
SIGINT 2 Exit Interrupt (see termio(7I))
SIGKILL 9 Exit Killed
SIGTERM 15 Exit Terminated (==> Control + C)
- 프로세스 종료
$ kill [-signal] PID ...
$ kill
$ kill -9
$ kill -KILL
$ pgrep -l mail
215 sendmail
12047 dtmail
$ kill 12047
$ pkill -KILL 프로세스 이름
- 자신이 사용하는 워크스테이션이 윈도우 hang시 처리요령
다른 시스템에서 다음과 같이 한다.
$ telnet (또는 rlogin) host1
$ pkill -9 <자신의 쉘이름, ex) ksh>
또는
$ pkill -KILL <자신의 쉘이름 ex) ksh>
3) 잡 제어 ( Job Control )
여러 개의 작업을 수행하고 이를 제어할 수 있다. 단 본쉘(sh)는 불가
$ find . -name core > list & ( Job을 background로 실행)
$ jobs ( Job을 확인)
[1] = running find . -name core > list &
$ fg %1 ( 백그라운드 잡을 포그라운드로)
Control + Z ( 포그라운드 잡을 중지)
$ jobs ( job을 확인)
$ bg %1 (중지된 잡을 백그라운드로 실행)
$ kill %1 (잡을 종료)
Shell 종류 Shell 프로그램 위치 프롬프트 프롬프트 변수 쉘초기화 파일
Bourn Shell /bin/sh, /sbin/sh #, $ PS1 /etc/profile, $HOME/.profile
Korn Shell /bin/ksh #, $ PS1 /etc/profile, $HOME/.profile, $HOME/.kshrc
C Shell /bin/csh hostname#, hostname% prompt /etc/.login, $HOME/.cshrc, $HOME/.login
- 현재 사용쉘 확인
$ ps
$ echo $SHELL
- 기타 쉘
bash, tcsh, zsh, ssh
- 관련 디렉토리
/etc/skell : 샘플 초기화 파일 위치
1) 입출력의 전환
$ mailx user1 < ~/myfile ( 입력의 방향을 파일로부터 )
$ ps -ef > file_list (출력의 방향을 파일로 전환)
$ cat /etc/passwd >> file_list (출력의 방향을 파일로 전환, append)
$ ls /var /no 1> dat 2>&1
2) 파이프 (프로세스 간 통신)
$ who | wc -l
$ ls -F /etc | grep "/"
$ head -10 file1 | tail -3 | lp
$ ps -ef | tail +2 | wc -l
3) Meta Character
- Backslashes ()
- Dollar signs ($)
- Back quotation marks (` `)
- quotation marks (' ')
- double quotation marks (" ")
$ rm *
$ echo '$SHELL'
$ echo "$SHELL"
$ echo "$SHELL"
$ echo date
$ echo `date`
11. Korn Shell Features
1) Aliases
alias aliasname="command"
ex)
$ alias h=history
$ alias c=clear
$ alias home='cd;ls'
$ alias ls='ls -F'
$ alias copy="cp -r"
2) Command line Editing
- Command line 편집 기능
$ set -o vi
$ [esc] + k (=> vi command mode )
3) History
- 128개를 유지 ( 변수 HISTSIZE -> .kshrc)
- $HOME/.sh_history (변수 HISTFILE -> .kshrc)
ex)
$ history ( 최근 16개 명령을 list)
$ history 23 (23 ~ 최근명령)
$ history -10 (최근 명령 10개)
cf)
$ r ( 가장 최근 명령 실행)
$ r p ( p로 시작된 가장 최근 명령어 실행)
$ r 23 ( 히스토리가 23번인 명령어 실행)
## My Alias Def (-> 엘리어스 설정 )
alias ls='ls -F'
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
alias home='cd;ls'
alias c=clear
alias h=history
alias d=date
## Other ksh feature set
set -o noclobber
set -o vi
set -o ignoreeof
- 파일은 파일이름, inode, data block으로 구성되어 있다.
- 파일의 종류는 ls -l , ls -F, file 등의 명령어로 확인할 수 있다.
1) 파일의 종류
-: Regular File (Ordinary File) : vi, ed, cp, mv, cat, touch, cc 등에 의해 생성
d: Directory File : mkdir, cp -r 등에 의해 생성
c,b: Special File ( 디바이스 파일) : 장치 파일이며 drvconfig, devfsadm등에 의해 생성
brw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
crw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
l: Symbolic Link File: 심볼릭 링크 파일
lrwxrwxrwx 1 root root 12 2000년 7월 4일 /etc/hosts -> ./inet/hosts
- 링크란 어떤 파일의 또 다른 이름이다.
- 하드링크는 같은 inode를 심볼릭 링크는 다른 inode를 갖는다.
- 하드링크는 디렉토리를 링크할 수 없다.
- 하드링크는 서로 다른 파일시스템 간에 링크할 수 없다.
- 하드링크는 원본파일의 데이터와 같은 데이터를 공유하며, 심볼릭 링크는 원본의 PATH값을 데이터로 갖는다.
2) inode
모든 파일은 하나의 inode를 가지며 이것은 해당 파일에 대한 정보를 가진다. inode table은 inode들로 구성되어 있으며
하나의 inode는 ls-l정보, 데이터블록 포인터, shadow inode 포인터로 이루어져 있다. 포인터들이 가리킬 수 있는 데이터 블록의
사이즈는 최대 1T까지 가능하다.
- 파일과 파일시스템의 최대 사이즈
solaris 2.6 이전 : 2G (파일), 1TB (파일 시스템)
solaris 2.6부터 : 2G이상 1TB (파일), 1TB (파일 시스템)
파일의 경우 실재로는 866G까지 가능하며, 파일 시스템의 1T이상은 Virtual Volume(Meta Device, Veritas Volume Manager)을 구성해야 한다.
1) PROM이 하는 역할
- Test the system hardware (POST: Power on Self Test)
- Boot the operating system
[ POST ]
- Initialize the system
- Probes Memory and the CPU
- Probes devices, interprets their devices and build a dev tree
- Install the console
2) PROM으로 가는 방법
- # halt
- # init 0
- # /usr/sbin/shutdown -y -g0 -i0
- Stop + A ( 부팅 시 바로 누르거나 시스템 hang시에만 적용)
3) PROM에서의 얻을 수 있는 정보
OK banner ( 시스템 모델명, 메모리, hostid, Ethernet Addr, Boot PROM 버전 )
OK probe-scsi ( 연결된 SCSI 장치들의 정보 확인)
4) PROM 버전
1.x : Original Sparc Boot PROM
2.x : Open Boot PROM (OBP) => sparc 시리즈 (sparc4,5,10,20...등)
3.x : Open Boot PROM with Flash Update (Flash PROM) => ultra sparc 시리즈
5) PROM에서 사용되는 명령어
OK help (도움말)
OK probe-scsi (스카시 장비 체크)
OK prebe-ide ( IDE장비 체크)
OK devalias (PROM에 설정되어 있는 장비의 물리적 장치명과 별명)
OK show-devs ( PROM에 설정되어 있는 물리적 장치의 트리구조 보기)
OK printenv (PROM에 설정되어 있는 부트 파라미터의 기본 값을 확인)
OK setenv
OK reset ( setenv에 의해 변경된 파라미터 값들을 재 저장하는 명령)
OK set-default ( 지정한 파라미터 값을 초기화)
OK set-defaults ( 지정한 모든 파라미터 값들을 초기화 => STOP + N)
6) PROM의 부트 명령어
OK boot [ device name ] -[option]
OK boot [disk, net, cdrom] (=> default는 disk)
OK boot -s (싱글유저로 부팅)
OK boot -a (Interactive 모드로 부팅)
OK boot -r (Reconfiguration Boot => 장치를 추가했을 때)
iii) 가상 단말기 개수 지정 ( pt_cnt)
- 리부팅시에는 반드시 reconfiguration boot
set pt_cnt=128
set npty=128
iiii) 최대 파일 디스크립트 개수 지정하기 (rlim_fd_cur)
- 하나의 프로세스가 동시에 오픈할 수 있는 최대 파일 개수
- # ulimit descriptors 512
- # ulimit -n 512
set rlim_fd_max=1500
set rlim_fd_cur=128
iiiii) 최대 UFS inode수 지정( ufs_ninode)
- 시스템에서 파일을 오픈 하면 하나의 파일에 대하여
하나의 ufs_ninode를 가지게 된다.
set ufs_ninode=10000
iii) Boots the system interactively
OK boot -a
...
Enter filename of kernel (kernel/unix):
Enter default directory for modules (kernel, /usr/kernel):
Enter name of system file (etc/system): /etc/system.org
Enter default root file system type (ufs):
Enter physical name of root device:
2) Run Level
0 : PROM monitor level. 부트 PROM의 OK 프롬프트 상태로 시스템을 종료하기 위한 Level이다. (==> halt, init 0, shutdown -i0)
s,S : Single User(관리자) 상태로서 마운트된 모든 파일 시스템을 접근할 수 있다.
1 : Single User(관리자) 상태로서 사용 가능한 모든 파일 시스템을 접근할 수 있다.
2 : 다중 사용자 레벨 (Multi User Level)
3 : 다중 사용자 레벨 (Multi User Level) with NFS(Network File Service)
4 : User Define Level (사용되지 않음)
5 : Shutdown(0) and power off (==> poweroff , init 5, shutdown -i5 )
6 : Shutdown(0) and reboot (==> reboot, init 6, shutdown -i6)
3) 각 Run Level별 데몬 프로세스의 실행
init --> /sbin/rc# --> /etc/rc#.d/{S##스크립트, K##스크립트} --> 데몬 실행
root(관리자) --> /etc/init.d/스크립트 --> 데몬 종료, 재실행
/etc/init.d/스크립트 ==> /etc/rc#.d/{S##스크립트, K##스크립트}는 하드링크 됨. 관련 파일 검색은 다음과 같다.
# ls -i /etc/init.d/nfs.server
28562 /etc/init.d/nfs.server*
# find /etc -inum 28562
/etc/init.d/nfs.server
/etc/rc0.d/K28nfs.server
/etc/rc1.d/K28nfs.server
/etc/rc2.d/K28nfs.server
/etc/rc3.d/s15nfs.server
/etc/rcS.d/K28nfs.server
4) RC 스크립트 추가하기
(1) Edit banner script in /etc/init.d
# cd /etc/init.d
# cp lp banner
# vi banner
#!/bin/sh
#
# Boot Process test script
#
(3) link to /etc/rc2.d
# cd /etc/rc2.d
# ln /etc/init.d/banner S22banner
(4) link to /etc/rcS.d
# cd /etc/rcS.d
# ln /etc/init.d/banner K99banner
(5) link to /etc/rc0.d
# cd /etc/rc0.d
# ln /etc/init.d/banner K99banner
(6) Test init state
# init s
...
# init 6
...
# halt
5. Device Configuration
1) 장치 명
- Logical Device Name ( 관리자)
- Physical Device Name ( kernel, system )
- Instance Name (kernel이 부팅 시 빠른 참조를 위해)
2) Logical Device Name
/dev/[r]dsk/c#t#t#d#s#
c# : Controller Number
t# : Target Number
d# : Disk Number
s# : Slice or partition number (0-7)
예) /dev/dsk/c0t0d0s0(raw device) /dev/rdsk/c0t3d0s (block device)
3) Physical Device Name
# ls -lL /dev/dsk/c0t0d0s0
brw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
# ls -lL /dev/rdsk/c0t0d0s0
crw-r----- 1 root sys 32, 0 2000년 7월 4일 /devices/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0:a
장치를 새로 장착하고 /devices 및 /dev의 장치파일을 재구성하기 위한 명령어는 다음과 같다.
- (재)부팅이 필요
i) # reboot -- -r
ii) OK boot -r
iii) # touch /reconfigure
# reboot ( or init 6)
- (재)부팅이 불필요
i) # drvconfig -i sd ( Solaris 2.6부터 )
# disks (tapes, ports, devlinks)
ii) # devfsadm -c disk [ -c tape -c audio ]
6) 장치 추가 용례
- reconfigure file 생성
# touch /reconfigure
- 시스템의 정지
# init 5
- 시스템의 전원을 끈다
- 시스템에 새로운 디바이스를 연결한다.
- 외장형일 경우 외장 디바이스의 전원을 켠다.
- 시스템의 전원을 켠다.
- 부팅 후 추가된 장치의 Reconfiguration을 확인한다.
7) 장치의 연결확인
- PROM 단계에서
OK probe-scsi
- OS에서
# prtconf | grep -v not
# format (디스크의 경우, 확인만 하고 Control + d )
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
Specify disk (enter its number):
6. DISK, SLICE, FORMAT
1) Disk Label (VTOC: Volume Table Of Contents)
- 디스크의 파티션 테이블 (Partition Table)
- 디스크 디바이스를 구별하는 볼륨명(volume name)
- Optional Partition Tag (각 파티션의 표준 마운트 포인트 이름으로 디스크 라벨에서만 사용되고 OS에서는 사용되지 않는 제한된 값)
- Optional Partition Flag (각 파티션이 Writable이지 Mountable인지를 결정하는 값으로 디스크 라벨에서만 사용되고 OS에서는 사용되지
않는 제한된 값)
VTOC의 정보확인은 prtvtoc로 변경(파티션)은 format을 이용한다
# prtvtoc /dev/rdsk/c0t3d0s2 (=> VTOC 정보 확인)
# format
# format (==> 포맷하고자 하는 디스크 번호를 선택)
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@0,0
1. c0t1d0
/sbus@1f,0/SUNW,fas@e,8800000/sd@1,0
Specify disk (enter its number):
주의사항 1) 슬라이스 2번은 디스크 전체를 의미하므로 절대 수정하지 않는다.
주의사항 2) 파티션은 실린더 단위로 구성되는데 Offset이 정확히 일치해야 한다.
주의사항 3) 레이블 저장 명령 ( label)을 수행하지 않는다면 메모리에서만 변경되므로 디스크에는 영향을 주지 않는다.
[ 하드 디스크 추가하기 ]
# init 5
(디스크 연결하고 파워를 켠다)
OK probe-scsi
OK boot -r
# prtconf | grep -v not
# format (추가된 디스크를 선택하여 파티션 한다.)
# newfs /dev/rdsk/c0t1d0s6 (각 파티션을 파일시스템으로 만든다.)
# fsck /dev/rdsk/c0t1d0s6 (파일시스템을 체크한다.)
# mkdir /data (마운트할 디렉토리를 생성한다)
# mount /dev/dsk/c0t1d0s6 /data (마운트 한다)
# df -k 또는 mount (마운트 정보를 확인한다.)
# vi /etc/vfstab (해당 파티션의 정보를 추가하여 부팅 시 마운트 되도록 한다.)
7. Solaris 파일 시스템
1) 파일 시스템의 종류
- Disk Based File System : ufs(Unix File System), hsfs(High Sierra File System), pcfs(PC File System), udfs(Universal disk Format File System:sol7)
- Distributed File System: nfs ( Network File System)
- Pseudo File System: tmpfs(Temporary File System), swapfs(Swap File System), fdfs(File Descriptor File System), procfs(Process File System)
2) UFS의 파일 시스템 구조
- label(VTOC)(1 sector)
- Boot Bolck(15 sectors) : bootblk
- SuperBlock(16 sectors)
. 파일시스템 사이즈
. 레이블(파일 시스템명과 볼륨명)
. 파일 시스템의 Logical block 의 사이즈
. 마지막으로 업데이트된 날짜와 시간
. 실린더 그룹의 사이즈
. 실린더 그룹 안의 데이터 블록의 number의 fragment의 사이즈
. 데이터 블록의 요약 정보
. 파일 시스템 상태 값 (clean, stable, active, logging or unknown)
. 마지막 마운트 포인트의 경로명
- First Cylinder Group (보통 그룹당 16개의 실린더)
|__ backup Super Block
|__ Cylinder Group Block
| . inode 수
| . 실린더 그룹에서의 데이터 블록 수
| . 디렉터리의 수
| . free block의 map
| . 실린더 그룹에서 free block, free_inode, free fregment의 수
| . 사용된 inode의 map
|__ inode table
|__ Data Block(한 블록당 8K bytes, 1K는 fregment라 함)
- Second Cylinder Group
....
파일시스템을 사용하기 위해서는 트리구조의 임의 디렉토리(Mount Point)에 연결시켜야 하는데, 이를 마운트(mount)라 하며
마운트를 해제하는 것을 언마운트(unmount)라 한다.
마운트 포인트(mount point)는 빈 디렉터리로 파일 시스템을 연결할 포인트를 의미한다.
1) 마운트 정보
# mount
/ on /dev/dsk/c0t0d0s0 read/write/setuid/intr/largefiles/onerror=panic/dev=800000 on 금 4월 25 14:18:36 2003
/usr on /dev/dsk/c0t0d0s5 read/write/setuid/intr/largefiles/onerror=panic/dev=800005 on 금 4월 25 14:18:36 2003
/proc on /proc read/write/setuid/dev=3b00000 on 금 4월 25 14:18:35 2003
/dev/fd on fd read/write/setuid/dev=3bc0000 on 금 4월 25 14:18:37 2003
...
==> /etc/mnttab 을 참조함(마운트, 언마운트시 자동 업데이트. No Admin)
2) 마운트(Mount)
마운트는 mount 명령어를 이용하거나, 부팅 시 /etc/vfstab 파일 정보를 읽고 자동으로 마운트되는 두 가지 경우가 있다.
- 수동 마운트
# mount /dev/dsk/c0t3d0s7 /dir1
# mount -o ro /dev/dsk/c0t3d0s6 /dir2
# mount -o ro,nosuid,nolargefiles /dev/dsk/c0t0d0s5 /dir3
# mount -o ro,bg,soft host1:/usr/local /usr/local
- 자동 마운트
# mkdir /newdir
# mount /dev/dsk/c0t1d0s4 /newdir
# vi /etc/vfstab (엔트리를 추가)
# umount /newdir (테스트)
# mount /newdir (테스트)
cf. # mount /dir1 (=> /etc/vfstab에 이미 등록되어 있는 경우)
cf. # mountall [-r|-l] (=> /etc/vfstab에 "mount at boot" 값이 yes인 것만)
[ /etc/vfstab 파일 ]
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
#/dev/dsk/c1d0s2 /dev/rdsk/c1d0s2 /usr ufs 1 yes -
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /usr ufs 1 no -
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /var ufs 1 no -
/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /usr/local ufs 2 yes -
/dev/dsk/c0t1d0s1 /dev/rdsk/c0t1d0s1 /export/home ufs 2 yes nosuid,rq
swap - /tmp tmpfs - yes -
[ umount 되지 않은 경우 조치 사항 ]
- 자신 또는 다른 사용자가 해당 파일시스템을 사용하고 있다면, 모든 사용을 중지하고 작업 디렉터리도 다른 곳으로 이동한다.
- 특정 프로세스가 해당 파일시스템을 사용하는 경우 이를 종료한다.
# fuser -u /export/home
/export/home: 4006c(root) 6399c(user01)
# fuser -u -k /export/home
/export/home: 4006c(root)Killed 6399c(user01)Killed
또는
# umount -f /export/home ( Solaris 8 부터)
4) 플로피 디스크와 CDROM 마운트
솔라리스에서는 volume Management를 제공하며, 쉽게 사용할 수 있도록 자동으로 마운트하여 서비스 한다.
[ Volume Management ]
- 서비스 데몬 : /usr/sbin/vold
- 서비스 데몬 제어 스크립트 : /etc/init.d/volmgt {stop|start}
- 설정 파일 : /etc/vold.conf, /etc/rmmount.conf ( 특별히 설정을 할 필요는 없다)
- 플로피 마운트 포인트 : /floppy/floppy0
- CDROM 마운트 포인트 : /cdrom/cdrom0
[ 플로피의 마운트 ]
플로피를 삽입한다.
# volcheck
# mount (마운트 확인)
# cd /floppy/floppy0 (필요한 작업 수행)
# cd /
# eject floppy
# mount (언마운트 확인)
시스템의 부적절한 중지(정전, 비정상 종료 등..)로 인해 파일 시스템이 손상될 경우 fsck 유틸을 이용하여 복구해 주어야 한다.
fsck는 superblock, inode, indirect block, data block 을 검사하고 치료한다.
- Superblock 검사
파일 시스템 사이즈, inode number, free block count, free inode count
- inode 검사
format and type, link count, duplicate block, bad block number, inode size
- Indirect block 검사
블록이 다른 inode에 의해 이미 점유되어 있는 것
블록의 수가 파일 시스템의 범위에 어긋난 것
- data block 검사
평범한 data block
심볼릭 링크 data block
디렉토리 data block
1) 솔라리스 8 설치 전 준비 사항
설치에 필요한 최소한의 CD (국제판)
- Solaris 8 Installation CD
- Solaris 8 Software 1/2 CD
- Solaris 8 Software 2/2 CD
- Solaris 8 Language CD
2) 하드웨어 요구사항
- Sparc Base 또는 Intel Based 시스템
- 64 MB 메모리
- 2.1 GB 디스크 스페이스
- CD-ROM 드라이브
3) Solaris 8 설치 전 정보 수집
- 호스트 이름
- IP 주소
- 네이밍 서비스(DNS, NIS, NIS+, 없음)의 유형 및 구성 정보
- subnet mask
- root password
- 소프트웨어 그룹
Entire Distribution(2.1G 권장) + OEM, Entire Distribution(1.9G 권장), Developer(1.5G 권장), End User(1.2G 권장), Core(718M 권장)
- OS를 설치할 디스크 설정 및 파티션 설정
4) 설치 방법
- WebStart Installation ( Install CD)
- JumpStart Installation ( from Jumpstart Server System)
- Interactive Installation ( Software 1/2 CD)
5) 설치 순서
CDROM 넣고
# shutdown -i0 -y -g0 ( init 0 또는 Stop + A)
OK set-defaults
OK boot cdrom
- 시스템 식별
- 디스크 선택 및 파티션 설정
- 소프트웨어 그룹 설정
- 설치 후 재부팅
- Software 2/2 CD, Language CD 차례로 설치
6) 설치 시 유의사항
- 32Bit, 64Bit Kernel 선택 ( OS install 후 확인은 isainfo -kv)
- 설치 후 소프트웨어 그룹 유형확인 ( # cat /var/sadm/system/admin/CLUSTER )
SUNWCXall(Entire +OEM), SUNWCall(Entire), SUNWCprog(Developer), SUNWCuser(End User), SUNWCreq(Core)
- 파티션 권장사항 ( / 100M, /usr 500M~1G, /var 128M이상, swap 메모리2~3배, /opt 400M이상, /export/home 필요한 만큼)
11. 패키지 관리
1) 패키지 정보
# pkginfo | more (전체 보기)
# pkginfo | grep SUNWman (특정 패키지 설치여부)
# pkginfo -l SUNWman (특정 패키지의 자세한 정보)
# pkginfo -d /cdrom/solarisxxx/Solaris_8/Product | more (CDROM 내의 패키지 정보)
# pkginfo -d /cdrom/solarisxxx/Solaris_8/Product -l SUNWaudio (CDROM 내의 특정 패키지 정보)
# pkginfo | wc -l ( 설치된 총 패키지 수)
# grep /usr/bin/audioplay /var/sadm/install/contents (audioplay 의 패키지 이름 알아내기1)
# pkgchk -l -p /usr/bin/audioplay (audioplay의 패키지 이름 알아내기2)
# pkgchk SUNWaudio ( 설치 성공 여부 확인, 성공 시 메시지 없음)
# pkgchk -v SUNWaudio (특정 패키지에 대한 자세한 설치 위치)
# pkgchk -p /etc/passwd (특정 파일에 대한 초기 패키지 설치후의 변경 정보)
2) 패키지 추가
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product SUNWaudio
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product -s spool SUNWaudio ( /var/spool/pkg에 패키지 스풀)
# pkgadd -d /cdrom/solxxxx/Solaris_8/Product -s /export/pkgs SUNWaudio ( /export/pkgs에 패키지 스풀)
* GUI의 어드민 툴(admintool)을 이용하여 설치할 수도 있다.(cf. sysadmin(14) 가능)
패치를 관리하거나 설치하기 위해서는 패치 번호를 먼저 파악해야 하고, 이는 Solaris#.PatchReport를 다운 받아 확인한다.
OS설치 후 반드시 Recommended Patch및 최신 보안 패치를 해 주어야 한다. 패치번호는 다음과 같이 구성되어있다.
109320-02 (패치번호-revision number)
1) 패치 정보
# showrev -p (시스템에 설치된 패치 정보 보기)
# patchadd -p (Solaris 2.6부터, Shell script)
# showrev -p | grep 109320
# patchadd -p | grep 109320
2) 초기 설치해야 할 패치와 참고 문서
Solaris8.PatchReport : Solaris8의 모든 recommended 패치 정보
8_Recommended.zip : Solaris8의 모든 recommended 패치 파일들
8_Recommended.README : Solaris8의 모든 recommended 패치 설치 방법과 설명
3) 패치 정보 및 저장 디렉토리
/var/sadm/patch
4) 패치 설치
# /usr/bin/unzip 109320-03.zip ( Solaris 7부터)
# /usr/bin/zcat 104040-01.tar.Z | tar xvf - (Solaris2.6)
# more 109320-03/README (반드시 관련 README를 읽어본다.)
# patchadd 109320-03 (패치를 수행)
# showrev -p | grep 109320 (설치 여부를 확인)
- 주의사항 : Solaris2.6이전은 패치 디렉토리 내의 스크립트를 이용한다.
[설치 시]
# cd 109320
# ./installpatch .
[제거시]
# cd /var/sadm/patch/109320
# ./backoutpatch 109320
5) 패치 정보의 관리 http://sunsolve.sun.com의 Patch Portal에는 패치를 체계적이고 편리하게 다룰 수 있는 Patch finder, Patch Pro, Patch Check등을
제공한다.
6) 패치 에러 코드 정리
0 No error
1 Usage error
2 Attempt to apply a patch that's already been applied
3 Effective UID is not root
4 Attempt to save original files failed
5 pkgadd failed
6 Patch is obsoleted
7 Invalid package directory
8 Attempting to patch a package that is not installed
9 Cannot access /usr/sbin/pkgadd (client problem)
10 Package validation errors
11 Error adding patch to root template
12 Patch script terminated due to signal
13 Symbolic link included in patch
14 NOT USED
15 The prepatch script had a return code other than 0.
16 The postpatch script had a return code other than 0.
17 Mismatch of the -d option between a previous patch install and the current one.
18 Not enough space in the file systems that are targets of the patch.
19 $SOFTINFO/INST_RELEASE file not found
20 A direct instance patch was required but not found
21 The required patches have not been installed on the manager
22 A progressive instance patch was required but not found
23 A restricted patch is already applied to the package
24 An incompatible patch is applied
25 A required patch is not applied
26 The user specified backout data can't be found
27 The relative directory supplied can't be found
28 A pkginfo file is corrupt or missing
29 Bad patch ID format
30 Dryrun failure(s)
31 Path given for -C option is invalid
32 Must be running Solaris 2.6 or greater
33 Bad formatted patch file or patch file not found
34 The appropriate kernel jumbo patch needs to be installed
cf. /dev/rmt/xyn
x: 장치 번호 (0,1,2...)
y; 밀도 (h, m, l, c, u)
n: rewind 여부
2) mt 명령어 (tape을 제어하기 위해 사용)
# mt -f /dev/rmt/0 status (-> backup device의 상태를 표시 )
# mt -f /dev/rmt/0n eom (-> tape의 맨 끝으로 이동 )
# mt -f /dev/rmt/0 rewind (-> tape를 제일 처음으로 되감는다. )
# mt -f /dev/rmt/0n fsf [count] (-> count 개수 만큼 파일 뒤로 건너 띈다. )
# mt -f /dev/rmt/0n nfsf [count] ( -> count+1 개수 만큼 파일 뒤로 건너 띈다. )
# mt -f /dev/rmt/0n bsf [count] (-> count 개수 만큼 파일 앞으로 건너 띈다. )
# mt -f /dev/rmt/0n nbsf [count] (-> count+1 개수 만큼 파일 앞으로 건너 띈다. )
# mt -f /dev/rmt/0 erase (-> tape의 모든 내용을 지운다. tape나 device에 따라 다르나 시간이 많이 걸린다. )
# mt -f /dev/rmt/0 offline (-> tape가 eject 된다. )
3) tar, dd 명령어
# tar tvf /dev/rmt/0 ( -> tape의 내용을 확인함 )
# tar xvf /dev/rmt/0 ( -> tape에있는 내용을 Hard disk로 내림 )
# tar cvf /dev/rmt/0 /etc/hosts (-> Hard disk에있는 file 이나 directory를 tape로 받음 )
# tar cvfb - backup_dir | rsh host dd of=/dev/rmt/0 (-> remote host에있는 drive로 backup 받기)
# rsh -n host_name dd if=/dev/rmt/0 |tar xvBfb - restore_dir ( -> remote host에있는 drive로 backup 내리기 )
3) /etc/defaultrouter 에 gw ip 설정
ex) 203.234.247.254
4) Netmask 설정
ex) 203.234.247.0 255.255.255.0
5) /etc/resolv.conf 에 DNS서버 등록
ex) domain ns.hananet.net
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
6) /etc/resolv.conf 에 dns 문자를 추가
....
hosts files dns ( ==> dns 추가)
7) 재부팅
# reboot
cf. 재부팅 없이 IP 변경
# ifconfig -a
# ifconfig hme0 down
# ifconfig hme0 203.234.247.30 net mask 255.255.255.0 broadcast + up (=> 설정)
# ifconfig hme0 (=> 확인)
# route add default 203.234.247.254 1 (=> 기본 게이트웨이 설정)
cf. 호스트 이름 변경
다음 6개 파일을 수정한다.
/etc/hosts
/etc/hostname.
/etc/nodename
/etc/net/*/hosts (3개)
cf. Network Interface Name
Lance Ethernet(10M Ethernet) : le
Fast Ethernet 1.0 : be
Fast Ethernet 2.0 이상 : hme
Quad Ethernet : qe
Quad FastEthernet 1.0 : hme
Quad FastEthernet 2.0 이상 : qfe
Gigabit Ethernet : vge
ATM 1.0 : sa
ATM 2.0 이상 : ba
FDDI : nf
Token Ring : tr
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 은 아래에서 구할 수 있다 :
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 은 최근 구버전 사용자들을 신버전으로의 업그레이드로 안내하기위해 여러가지
안내 문서 및 정보들을 제공한다.
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 as of
Message Queue facility not in system.
Shared Memory facility not in system.
Semaphore facility not in system.
이것은 Message Queue 와 Shared Memory, Semaphore 가 시스템에서 아직 사용되지않았
다는 말이며, 위와같은 메시지가 나타난 이후부터 이들이 초기화될 것이다.
만약, 부팅시에 이들을 초기화하기를 원한다면, /etc/system 에 아래의 내용들을 추가하
기바란다.
"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
하지만, 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 에 메일을 보내면 자동으로 답장메일을 받을 수 있게된
다.
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 스크립트
1) Florida SunFlash 는 Sun 관리자들을 위한 폐쇄 메일링리스트이다.
여기서는 Sun 을 비롯한 3rd party 벤더들의 새로운 소식과 Solaris Developer's Conference
와같은 컨퍼런스의 각종 정보들에대한 논의가 이루어진다. 자세한 정보를 얻으려면 info-sunflash@sun.com 으로 메일을 보내면 된다.
2) Sun Managers 메일링리스트는 moderator 에의해 관리되는 메일링리스트는 아니지만,
응급사태를 위해서만 사용되는 메일링리스트이다. 가입신청을 한뒤 메일링리스트를
통해 오고가는 정기적인 정책관련 메일을 자세히 읽고난 뒤 메일링리스트로 메일을
보내야한다. 가입신청은 sun-managers-request@eecs.nwu.edu 로메일을 보내면 된다.
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 포맷)
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 파티션이 할당되었다 :
- 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 - 지정된 패키지 관련 정보들을 볼 수 있다.
Pkgadd ?d / /Solaris_2.3
- 지정된 패키지를 시스템에 설치한다.
Pkgrm - 지정된 패키지들을 시스템에서 제거한다.
Pkgchk ?q - 해당 패키지들이 시스템에 제대로 설치되어있는지를 확인
Pkgchk
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행을 코멘트처리하고, 리부팅하면 된다.
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 로 변경하여야한다. 이렇
게 변경한 내용은 시스템 내의 사용자들의 패스워드가 설정되어있지않더라도 이를 요
청하지않는 영향을 미친다.
다음으로 주의할점은 ~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 서버에서 구할 수 있다.
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
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 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:
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.
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 서
버가 자동으로 이러한 역할을 해줄 것이다.
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 에 추가함으로써 모니터를 자동
으로 껐다/켰다함으로써 전원을 절약할 수 있다.
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/
실제로 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 등을 실행하게끔 하는 방법이다.
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.37) 왜 패치 인스톨시 /var/sadm 파티션의 디스크용량이 많이 먹히는 것입니까?
새롭게 설치되는 패치로인해 교체되는 예전 바이너리 파일들은 모두
/var/sadm/patch// 디렉토리 아래에 저장되며, 향후 복구가 필요할 경우, 이를
이용해 안전하게 복구시킬 수 있게된다. 더욱 새로운 패치는 이들 예전 패치정보조차
/var/sadm/pkg//save//undo.Z 로 백업받아둔다.
/save 디렉토리는 제거해도 무방하며, /.oldfilesaved 란 파일을 제거
하면, 더욱 새로운 패치를 설치할 때 예전 정보를 백업하지않게 된다.
물론, "-d" 옵션을 이용해 패치를 설치할때에는 예전 정보와 파일들을 배업하지않는다.
3.38) 예전 패치들을 백업해야할 필요가 있습니까?
제공되는 패치의 README 파일에 반드시 백업하라는 얘기가 없다면, 백업해야할 필
요는 없다.
패치는 아래와같은 방법으로 복구될 수 있다.
/var/sadm/patch//backoutpatch
실제로 복구 작업은 굉장한 시간이 소요된다. 물론, 이 문제는 backoutpatch 이후버전
에서 고쳐질 것이라고 한다.
3.39) 48개의 가상터미널보다 많은 터미널을 사용하려면 어떻게 해야합니까?
/etc/system 파일에 아래와같은 내용을 추가하기 바란다.
System V pseudo terminals
Set pt_cnt =
그런 뒤 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 =
위의 내용을 추가하는 것 이외에 /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 을 이용해 확인하여야 한다.
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 =
Set semsys:seminfo_semopm =
Set semsys:seminfo_semume =
Set semsys:seminfo_semaem =
Set semsys:seminfo_semmap =
Set semsys:seminfo_semvmx =
Set semsys:seminfo_semmsl =
Set semsys:seminfo_semmni =
Set semsys:seminfo_semmns =
Set semsys:seminfo_semmnu =
Set shmsys:shminfo_shmmin =
Set shmsys:shminfo_shmseg =
Set shmsys:shminfo_shmmax =
Set shmsys:shminfo_shmmni =
Set msgsys:msginfo_msgseg =
Set msgsys:msginfo_msgssz =
Set msgsys:msginfo_msgtql =
Set msgsys:msginfo_msgmap =
Set msgsys:msginfo_msgmax =
Set msgsys:msginfo_msgmnb =
Set msgsys:msginfo_msgmni =
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.
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에서 사이의 정수
를 의미한다. 가짜 인터페이스와 해당 IP 주소를 없애는 방법은 아래와같다.
Ifconfig IF:N 0.0.0.0 down
실제 존재하는 물리적 인터페이스와 마찬가지로, /etc/hostname.IF:X 란 파일을 만들어주
어야한다.
가상 인터페이스의 최대갯수인 는 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 등의 프로그램만 약간의 문제를 나타낼뿐이
며, 다른 상태에서는 문제없이 효과적으로 사용할 수 있다.
먼저 라이센스 동의 문서를 작성하고, 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 확장팩을 설치하는 방법이다.
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
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 란 심볼릭링크에의해 나타나게되며, 이를 해결하기위해서
는 아래의 처방을 사용하면 된다.
이해할 수 없는 에러나 현상이 나타날때에는 항상 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분이 기본 인터벌 값이다.
부팅될때마다 이를 적용하기위해서는 위의 명령을 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 파일내의 아래의 내용을 다음과같이 변경하기 바란다.
이외에도 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 접속이 이루어지지 않게된다.
이를 해결하기위해서는 아래의 명령을 실행하면 된다.
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 를
추가하기 바란다.
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 프로세스는 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 을
빌려서 설치를 하거나, 네트웍 모드로 설치를 하여야한다.
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'" 란 에러가 발생하는 것은 무엇때문입니까?
커널은 설치되어있지않은 장치에대한 드라이버를 로딩하려할 때 위와같은 에러메세지
를 나타낸다. 즉, 아무 영향을 미치지않기 때문에 위와같은 에러메세지는 무시해도 된
다.
/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 환경으로 구동함에있어 몇가지 문제점이 발견되었다.
이를 해결하기위해서는 아래의 방법을 사용하면 된다.
이 문제는 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 파일시스템을 마운트하여 /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) 을 설치하기 바란다. 물론, 서버뿐만 아니라
클라이언트에도 패치를 설치하여야한다.
이 에러는 보통 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 에 첨가해두면 된다.
이 버그를 해결하기위한 공식 패치도 이미 발표되어있으며, 그 목록은 아래와같다.
주의할 점은 위의 응급처방과 아래의 패치설치를 동시에 시스템에 적용해서는 안된다
는 점이다.
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 에 등록해두는 것이다.
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 컴파일러를 더 이상 지원하지않으며, 훨씬 향상된 성능과 기능
을 띈 컴파일러 시장형성을 위해 컴파일러를 기본적으로 내장하지않았다.
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" 를 실행해야함을 잊지 말기 바란다.
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__
Socket 관련 상수들의 값이 변경되었다. 예를 들어, SOCK_STREAM 의 값이 1에서 2
로 변경되었다. 이들 값을 확인해보기 바란다.
6.13) MH 6.8.3 컴파일이 제대로 안됩니다.
MH6.8.3 에 포함되어있는 Solaris 용 MH 설정파일은 제대로 설정되어있을 것이다. 하
지만, Solaris 2.x 의 헤더와 mhn.c 사이에서 충돌이 생길 것이며, inc 가 Content-Length
헤더를 제대로 이해하지 못할 것이다. 이들 문제에대한 해결책은 아래에서 구할 수
있다.
이들은 /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 관련 라이브러리들을 가장 나중
에 지정해주는 것이 좋다.
6.19) readdir 이 제대로 동작하지않는 원인은 무엇입니까? 꼭 첫 두글자가 잘리는 현상
이 나타납니다.
일반적으로 이런 현상은 libucb 를 이용해 컴파일할 때 나타나며, 섹션 6.18을 틀림없
이 자세히 읽지않았을 것이다.(libucb.so 의 readdir 은 sys/dir.h 헤더파일을 사용하여야
하지만, 대부분의 SunOS 4.1.x 프로그램들은 를 사용한다. 때문에,
에서 정의한 구조체와 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 등이 제대로 동
작하게끔하기위해서 필수적인 방법이다.
#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 컴파일 전에 먼저 아래와같이 수정하여야한다.