2006/07/15

솔라리스에서 CD./DVD의 iso 이미지 화일 추출하기

1)추출할 내용이 들어 있는 미디어(CD/DVD)를 드라이브에 넣는다.
2)cdrw -l 로 해당 디바이스가 나타나는 지 확인한다.
3) 2)번 결과에서 나온 디바이스가 c3t0d0s0 라고 가정하면 다음과 같이 실행하면 미디어의 내용을 추출해서 화일로 저장하게 된다.
#dd if=/dev/rdsk/c3t0d0s2 of=/data/solaris10.iso
주의: 2)번 결과에서는 c3t0d0s0라고 나와도 위 dd 명령어에서 주는 입력은 s2 임을 잊어서는 안된다. s2가 미디어 전체를 의미한다.

4) 추출한 내용 확인하기
추출한 .iso 화일의 내용이 정상적인 지 확인 하기 위해서는 solaris10.iso로 추출한 화일을 마운트해서 내용을 확인해야 한다.

5) ISO image 마운트하는 방법

5-1) iso 화일을 디스크 디바이스처럼 인식시킨다
#lofiadm -a /data/solaris10.iso <- 반드시 절대 경로 사용
/dev/lofi/1
5-2) 가상 디바이스(루프백 디바이스)를 CD 마운트하듯이 마우트한다.
#mount -F hsfs -o ro /dev/lofi/1 /mnt
5-3) ls로 내용을 확인한다. cd /mnt 한 후 ls 하는 것은 별로 바람직하지 않다.
#ls -l /mnt
5-4) 다시 마운트해제
#umount /mnt
5-5) 루프백 디바이스 해제
#lofiadm -d /dev/lofi/1

2006/03/27

솔라리스10 상에서 IPC설정하는 법

아래 테이블에 따라서, 적용이 되는 리소스만 적용이 되구요. 없어진 변수(총6개)는 적용이 안됩니다.

<솔라리스 10에서 사라진 시스템 파라메터들>

변경하는 법은
#projmod 를 이용해서 아래 테이블에 해당되는 리소스를 변경하면 됩니다.
#projmod -K "project.max-shm-ids=(basic,4096,deny),(privileged,8096,deny)" default
라는 식으로 명령을 주면, root를 제외한 모든 사용자에게 적용됩니다. 기로그인한 사용자는재 로그인을 해야 합니다.

일반적으로 oracle과 데이타베이스는 oracle과 같은 별도 사용자를 가지므로, 위의 명령어로작동이 됩니다. root 사용자를 대상으로 변경하고 싶으면, projid를 user.root를 대상으로 주면 되겠죠.

참고로, ipc 설정이 정상적으로 적용되었는지 확인하는 법은 예전처럼 system wide는
ipcs 이외에 rctladm을 사용할 수 있구요. process별 확인은 prctl을 이용합니다.

2006/03/21

The ADAPTIVE Communication Environment (ACE)

The ADAPTIVE Communication Environment (ACE)
최근에는 ACE class library를 활용한 개발이 활발히 이루어지고 있는데, 아마도 개발이 편리하게 해주는 클래스들이라는 점과, 상당히 오랜 기간, 오랜 사람들로 하여금 안정화되었다는 점, 실제로 꽤 많은 미션 크리티컬 영역에서도 사용되고 있다는 점이 높이 평가된듯 하다.

이 ACE를 솔라리스10 에서 컴파일해서 사용하려고 하면, 몇가지 방법이 있다.

[download source]
일단, 정상적인 화일을 다운받는다. 이상하게 들릴지 모르겠지만, 위의 링크에서 ACExxx.zip 과 ACExxx.tar.gz는 약간 다르다. 앞으로는 고쳐질지 모르겠지만, zip 화일은 텍스트 끝마다 ^M이 붙어있어서 솔라리스에서 컴파일할때 에러가 발생한다. #inlcude, #define과 같은 라인에서 에러 발생. 따라서, 솔라리스에서 빌드하고자 한다면, tar.gz 포맷 화일을 다운받는다. 아마도, zip 버젼은 윈도우즈에서 작성한듯 하다.

[ How to build #1 ]
$ACE_ROOT/include/makeinclude/platform_macros.GNU를 sunos5_sunc++.GNU에 링크를 하고, $ACE_ROOT에서 gmake를 실행하면 된다. gmake는 /usr/sfw/bin에 있으므로 미리 PATH에 /usr/sfw/bin이 적용되어 있는지 확인하도록 한다.

[ How to build #2]
대개의 표준 리눅스 빌드판처럼 configure를 이용해서 새로이 빌드 환경을 구성해서 컴파일할 수도 있다.
썬컴파일러만 있는 경우(/opt/SUNWspro/bin)에 $ACE_ROOT 서브디렉토리로 solaris10-amd64와 같이 컴파일된 바이너리를 오브젝트용 디렉토리를 만든다.
cd $ACE_ROOT/solaris10-amd64
../configure --prefix=/usr/local CC=cc CXX=CC
와 같이 실행한후 make, dmake, gmake 아무거나 사용해서 빌드를 시작한다. CPU가 많은 시스템에서는 dmake 사용을 권고한다. (프로세서 분산 컴파일을 한다. 특히, 썬의 T1000/T2000에서는 dmake 필히 사용)

주의할 점은 위처럼 기본 구성을 하는 경우, ACE는 SSL 사용을 기본으로 enable한다는 점이다. 솔라리스에는 openssl이 기본으로 안들어있으므로, 사전에 다운로드 해놓아야 한다는점이다. 만약 SSL을 사용하지 않을 예정이면, --disable-ssl을 configure시 추가해서 지정해서 구성한다.

[performance]
cpu가 하나만 있는 시스템에서는 멀티스레드를 사용하는 것이 성능을 저하시킨다. 따라서, 이경우에는 멀티스레드를 죽이는 것이 좋다.

2005/11/04

NV17 nVidia Corporation NV17 [GeForce4 440 Go] xorg.conf sample

Dell에서 19인치 LCD를 사용하는 환경에서 쓰던 xorg.conf입니다.
노트북이나 더 작은 크기의 디스플레이에서는 해상도를 낮추어야 합니다.

----

# /etc/X11/xorg.conf (xorg X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the /etc/X11/xorg.conf manual page.
# (Type "man /etc/X11/xorg.conf" at the shell prompt.)
#
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following commands:
#
# cp /etc/X11/xorg.conf /etc/X11/xorg.conf.custom
# sudo sh -c 'md5sum /etc/X11/xorg.conf >/var/lib/xfree86/xorg.conf.md5sum'
# sudo dpkg-reconfigure xserver-xorg

Section "Files"
FontPath "unix/:7100" # local font server
# if the local font server has problems, we can fall back on these
FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath "/usr/share/fonts/truetype"
FontPath "/usr/share/fonts/truetype/dustin"
FontPath "/usr/share/fonts/truetype/X-TT"
FontPath "/usr/share/fonts/truetype/kochi"
FontPath "/usr/share/fonts/truetype/openoffice"
FontPath "/usr/share/fonts/truetype/cdac"
FontPath "/usr/share/fonts/truetype/freefont"
FontPath "/usr/share/fonts/truetype/ms"
FontPath "/usr/share/fonts/truetype/latex-xft-fonts"
FontPath "/usr/share/fonts/type1/gsfonts"
FontPath "/usr/lib/X11/fonts/Type1"
FontPath "/usr/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/lib/X11/fonts/misc"
FontPath "/usr/lib/X11/fonts/cyrillic"
FontPath "/usr/lib/X11/fonts/100dpi"
FontPath "/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "speedo"
Load "type1"
Load "vbe"
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbLayout" "us"
Option "XkbOptions" "ctrl:nocaps,compose:menu"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/psaux"
Option "Protocol" "PS/2"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
Identifier "Generic Mouse"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "SendCoreEvents" "true"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
EndSection

Section "Device"
Identifier "nVidia Corporation NV17 [GeForce4 440 Go]"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "UseFBDev" "true"
EndSection

Section "Monitor"
Identifier "Dell Latitude"
Option "DPMS"
HorizSync 29-75
VertRefresh 40-60
EndSection

Section "Screen"
Identifier "Default Screen"
Device "nVidia Corporation NV17 [GeForce4 440 Go]"
Monitor "Dell Latitude"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600" "640x480"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Generic Mouse"
EndSection

Section "DRI"
Mode 0666
EndSection

2005/09/11

솔라리스 10에서의 자원의 설정 : 가용 file descriptor의 변경

솔라리스 9전에는 애플리케이션이 사용하고자하는 최대 오픈 가능한 화일을 조정하기 위하여 화일 디스크립터(fd)의 수를 /etc/system에 추가해서 변경하였었다.

/etc/system :
set rlim_fd_cur=2048 ; 애플리케이션에 기본으로 할당되는 fd 개수, soft limit
set rlim_fd_max=4096 ; 애플리케이션 내에서 시스템콜(setrlimit)으로 변경(증가)시킬 수 있는 최대의 fd 수, hard limit

그리고, reboot이 반드시 필요했다.

솔라리스 9이후부터는 특히, 솔라리스10에서는 이러한 자원의 설정과 변경의 개념은 '사용자'와 '프로젝트'라는 특별히 확장된 형태의 '그룹'의 개념을 기반으로 자원을 동적으로 설정 및 변경할 수 있도록 바뀌었다. 동적이란 말은 당연히 설정 이후에 시스템 '재부팅'이 전혀 필요없음을 의미하는 것이다.

실제 어떻게 적용하는 지를 보기위해서 아래 예를 보도록 하자.
솔라리스 10에서 apache라는 사용자를 만들어서, apache라는 사용자가 웹서버를 운영한다고 가정하자.
apache라는 사용자로 로그인을 한후 apache의 각종 리소스가 어떻게 설정되어 있는 지를 확인하기 위해서는 다음과 같이 실행하면 볼 수 있다.
#prctl -P $$ more

그중에서 file-descriptor를 보기위해서는
#prctl -P $$ fgrep -i file-des
을 실행하게 되면,
process.max-file-descriptor basic 256 - deny 1113
process.max-file-descriptor privileged 65536 - deny -
process.max-file-descriptor system 2147483647 max deny -
와 같은 결과를 볼 수 있게 된다.

위에 나타난, 'basic'은 일반 사용자, 'privileged'는 root권한 혹은 그에 대응하는 권한을 가진 사용자, system은 전체 시스템 최대값을 의미하게 된다.

사용자의 애플리케이션이 privleged 권한으로 수행할 수 있고, 코드안에서 setrlimit을 사용하여 필요한만큼 증가하는 구조를 가지고 있다면, 솔라리스10의 기본 설정은 결코 부족하지 않게 된다.그러나, 일반 사용자인 경우 'basic'의 숫자는 때로는 모자랄 수 있으며, 이런 경우에는 기본 값을 증가시킬 필요가 있다.

이때 이 basic 값을 증가시키기 위해서는 다음과 같이 실행한다.
일단 해당 사용자(여기서는 apache)의 기본 프로젝트를 확인한다.
기본 프로젝트를 확인하기 위해서는
#projects -d
를 실행한다.

만약 'default'라고 나온다면

자원의 기본 설정을 변경하기 위해서 다음과 같이 실행한다.
#projmod -K "process.max-file-descriptor=(basic,2048,deny)" default




참고적으로, root 사용자로 웹 서버를 돌리는 행위는 보안적인 측면에서나 관리측면에서 매우 어리석은 짓이다. 설사 웹서버가 80포트에 바인딩하기 때문에 root Privilege가 필요하다 하더라도
일반 사용자가 RBAC기능을 이용하여 80포트를 바인딩하도록 하는 것이 바람직하다.
RBAC 기능은 후에 언급하도록 하겠다.

2005/08/24

썬에 입사한지 내일 정확하게 9년하고 반이 지나는 시점에서
나를 돌아볼 기회가 생겼습니다.
오랜 동안 어설프게 알아오면서 익히게된 솔라리스가 이제는
상당히 친한 친구가 되었습니다. 가끔 미운 마음도 들때가
있지만, 여전히 내가 외로울때 나를 지켜주었고, 용기를
주었던 솔라리스에 대한 얘기를 나누고 싶다는 생각이 들었습니다.

솔라리스에 관한 내 생각..
자잘한 솔라리스 기술들...
솔라리스 기반의 좋은 아키텍쳐들...

뭐 이런 것들을 실어볼 까 합니다.
많은 호응이 있기를 바라겠습니다.

주의 : 이곳에 나오는 그 어떤 내용도 저의 개인적인 견해이며
제가 소속한 한국썬마이크로시스템의 견해가 아님을 미리 밝혀둡니다.