반응형
Oracle 11g 설치

1. 오라클 11g를 설치하기 이전에 필요한 패키지들을 설치 하도록 하자.
   (아래 작업들은 root계정으로 실행하도록 하자.)

# apt-get install gcc binutils libaio1 lesstif2 lesstif2-dev make rpm libc6 build-essential gawk alien ksh libmotif3

2. 패키지의 설치가 끝났으면 오라클 설치를 위한 사용자 그룹과 유저를 만들도록 한다.

# addgroup oinstall
# addgroup dba
addgroup nobody
# useradd -m oracle -g oinstall -G dba /bin/bash
# usermod -g nobody nobody
# passwd oracle  (oracle 비밀번호 설정)

3. 오라클에서 필요한 메모리와 CPU 리소스를 위해 커널 파라미터를 수정한다.
    파일의 가장 아래쪽에 다음의 내용을 삽입한다.

# vi /etc/sysctl.conf

fs.file-max = 65535
= 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
= 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

4. /etc/sysctl.conf 파일은 우분투 시스템이 부팅시 처음  읽어오는 정보이다.
   이를 적용하기 위해 sysctl.conf 설정을 읽어들이는 명령어를 실행한다.

# sysctl -p

5. /etc/security/limits.conf 파일에 다음 내용을 삽입한다.

# /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16383
soft nofile 1023
oracle hard nofile 65535

6. /etc/pam.d/login 파일에 다음 라인을 추가한다.

# vi /etc/pam.d/login

session required /lib/security/pam_limits.so
session required pam_limits.so

7. 오라클 기동에 관련한 환경변수를 설정한다.

# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
# ln -s /usr/bin/basename /bin/basename /bin/basename

8. 오라클 11g가 설치될 폴더 생성하기

# mkdir /oracle
# mkdir /oracle/11g
# chown -R oracle:oinstall /oracle
# chmod -R 775 /oracle

9. 환경변수 설정을 위해 /etc/profile 의 파일 가장 마지막에 삽입한다.

# vi /etc/profile

export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/11g
export ORACLE_SID=oracle
export PATH=$PATH:$ORACLE_HOME/bin

10. 환경변수가 제대로 등록되었는지 확인해보도록 한다.

# su - oracle
password:
# echo $ORACLE_BASE
/oracle
# echo $ORACLE_HOME
/oracle/11g
# echo $ORACLE_SID
oracle

제대로 출력되는 것을 확인 하면 이상무..

11. 오라클11g 압축 풀기.(오라클을 오라클 계정에 다운받도록 한다.)
# su - oracle
$ unzip linux_11gR1b5_database.zip - 파일명은 버전에 따라 달라질달라질 수 있습니다.
$ chown -R oracle:oinstall database

이제 오라클 설치의 기본적인 것은 완료 되었다. GUI 환경에서 설치를 진행하면 된다.
서버의 화면에서 설치를 진행해도 되고 본인같은 경우는 XDMCP 환경에서 설치를 진행하였다.
XDMCP 설정관련은 본인의 블로그에 작성되어 있다. 필요하면 참고 하도록 하자.
http://www.pmguda.com/726    <== XDMCP 설정관련 자료

12. 오라클 설치는 오라클 계정으로 하도록 하자.
# su - oracle
$ export LANC=C  //한글로 설치하면 글자가 깨짐으로 영어로 설치를 진행한다.
$ cd /home/oracle/database
$ ./runInstaller

아래 그림에서 보시는 것처럼
Oracle Base Location: /oracle
Oracle Home Location: /oracle/11g
Global DataBase Name: oracle
(다른 값을 넣을 경우에는 위에서 설정한 "export ORACLE_SID=oracle" 와 동일하게 설정을 맞춰주도록 하자. )

아래 창이 뜨기 전에 경고창이 하나 떳을 것이다 Inventory directory 가 잘못되있다는 경고창이니
무시하고 설정을 변경해 주도록 하자.
Inventory directory 는 /oracle/oraInventory로 설정
System group name 은 dba로 설정

나머지 과정은 Next로 설치를 진행하면 된다. 아래 Product-Specific Prerequisite Cheks 에서 오류항목은
User Verified로 체크하여 처리를 하자.

참고로 자신의 glibc 버전확인은 # getconf GNU_LIBC_VERSION   으로 하면 확인가능.
(glibc 관련 오류는 우분투 10.04의 버전이 더 높으나 비교에서 문제가 발생하는것이다.
최소 요구버전은 2.4.?? 이라면 우분투(10.04)의 버전은 2.11.1 인데 비교시에 4와 11을
4와 1로 비교하여 발생하는 버그이니 그냥 무시하도록 하는것이다. 오라클 개발자 신경좀 쓰자잉~)

오라클 관리담당자 등록부분이다 그냥 Next로 넘어가자


계속 Next로 설치를 진행하고 나면 다음 창이 나온다.
Scripts to be executed: 에 있는 2가지 스크립트 파일을 반드시 root 계정으로 실행하도록 한다.


설치가 완료되었다. 이제 마지막 설치 후 셋팅 부분이 남았다.

13. /etc/oratab 파일 을 수정하도록 한다.(오라클 계정으로 빨간색 Y부분이 원래 N으로 되어있다.)

$ vi /etc/oratab

oracle:/oracle/11g:Y

14. /oracle/11g/bin/dbstart 파일의 오라클 리스너의 절대 패스를 수정한다.
ORACLE_HOME_LISTNER= 부분을 ORACLE_HOME_LISTNER=/oracle/11gORACLE_HOME_LISTNER=/oracle/11g 로 설정

$ vi /oracle/11g/bin/dbstart

15. 절대 패스까지 설정했다면 이제 설치는 완료 됬다. 확인 및 오라클 자동 실행을 위한 셋팅을 알아보자.

oracle 계정으로 전환해서 정상 작동 테스트를 해보자.
$sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
SQL> SELECT LTRIM('AAATEST','A') FROM DUAL;
SQL> TEST
SQL> shutdown

정상작동이 확인된 후에 자동실행 되도록 셋팅하도록 하자.(모든 작업은 root 권한으로)

/etc/init.d 에서   startoracle.sh 파일을 생성

# vi /etc/init.d/startoracle.sh
 


위와 같이 작성하고 실행 권한을 주도록 하자

내용작성후 실행권한을 부여하고 시작프로세스에 등록한다.  재시작하면 자동 실행 된다.



오라클 자동 실행까지 완료후 Apache, PHP 연동 관련 글은 다음 포스팅으로 넘기도록 하겠다.
글이 너무 길어진 관계로 오라클만 사용하려면 여기까지만 하면 된다.

반응형
데이터베이스로 Oracle을 사용하려고 Mysql은 설치하지 않을 생각이였다.
근데 기존 프로젝트를 서버에 올리고자 다시 Mysql을 설치 하지 않을수 없었다.

일단 Mysql 설치 방법으로는 apt-get 을 이용한 쉬운 방법이 있지만 다른 것들과의 연동을 위해
소스 설치로 설정하는 방법에 대해서 기술하겠다.

1. 소스다운 & 압축해제
# cd /usr/local/src
# wget http://ftp.linux.co.kr/pub/mysql/mysql-5.1.32.tar.gz  
# tar xvzf mysql-5.1.32.tar.gz

2. 컴파일 & 설치
# cd mysql-5.1.32
# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=utf8
--with-charset=euckr --with-extra-charsets=all  --sysconfdir=/etc --enable-thread-safe-client
# make
# make install

3. 디비 생성 및 세부설정
# /usr/local/mysql/bin/mysql_install_db
# cat >> /etc/ld.so.conf
/usr/local/mysql/lib
# ldconfig
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# groupadd mysql
# useradd -M -g mysql -s /bin/false mysql
# chown root.mysql -R /usr/local/mysql/
# chown mysql.mysql -R /usr/local/mysql/data
# cd /usr/local/mysql/bin

4. my.cnf 오류처리
# vi /etc/my.cnf
# Disable Federated by default
#skip-federated(주석처리)

5. 데몬 실행 & 관리자 루트 비밀번호 생성
# ./mysqld_safe --user=mysql &
# ./mysqladmin -u root -p password 1234
Enter password:

6. 환경변수에 PATH 등록
# vi /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
# source /etc/profile

7. 설치 확인
# mysql -u root -p
Enter password:

mysql> 

환영 메시지 출력시 완료......

8. 데몬 자동실행 등록
# cd /usr/local/mysql/share/mysql
# cp mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

이제 Mysql 설치는 완료 되었고 외부 접속을 허용하도록 하자.
특정 사용자 계정의 외부접속을 위해 root 를 예로 들도록 하겠다.

1. mysql 접속 후 mysql database 선택
mysql> use mysql;

2. user 테이블 살펴보기
mysql> select host, user, password from user;

root 의 host 값들은 localhost, 127.0.0.1 등으로 기본 등록되어 있지만, 외부접속을 나타내는 값이 없다.
특정 아이피로 지정할 수도 있지만 여기선 % 기호로 어디서든 접속 가능하게 만든다.

3. 권한 설정
mysql> grant all privileges on *.* to 'root'@'%' identified by '패스워드';
Query OK, 0 rows affected (0.03 sec)

4. 등록확인하기
mysql> select host, user, password from user;

root 계정의 host 필드에 % 가 등록되었는지 확인한다.

5. refrash
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

그리고 방화벽을 사용한다면 방화벽을 열어주도록 하자.
이로서 Mysql 설치가 완료 되었다.

외부 접속 툴로는 SQLGate 2010 for MySQL Developer 를 사용한다.(본인은)
http://www.antwiz.com/kr/   <== 여기에서 다운 받을수 있다. 개인버전 프리~
반응형
홈서버를 구축하고 사용하기 위해 기존에 CentOs 5.5를 셋팅 완료했지만...
WOL 설정에서 좌절을 경험하고 Ubuntu로 돌아서게 되었다.
혼자만 사용하는 서버로 항시 켜져있을 필요가 없기 때문에 WOL은 나에게 꼭 필요한 기능이다.

일단 우분투에서 WOL 설정하기로 들어가 보자.
메인보드에서 WOL을 지원하는 지와 랜카드가 지원하는지 여부는 각자 확인을 하도록 하자.

1. 자신의 이더넷 카드에 대한 정보를 확인해 보도록 하자.(모든 작업은 root 계정으로 하자,아니면 sudo를 사용)

아래코드는 ifconfig 실행시 출력에 대한 예시 코드이다.

WOL을 설정할 이더넷 카드는 eth0 이라고 하고 mac address를 확인 해 놓도록 하자.

2. 스크립트 파일을 작성하도록 하자.
 
아래 코드는 wakeonlanconfig 스크립트 파일에 들어갈 코드들이다.

실행권한을 주도록 한다.

해당스크립트가 부팅시에 실행되도록 설정해준다.

위 명령어를 실행시 아래와 같이 출력되는것을 확인하도록 하자.


이제 마지막으로 스크립트를 실행하고 에러가 없는것을 확인하자.


설정은 모두 완료했고 WOL을 확인하기 위해 종료전에 mac address 확인하자.

리눅스를 종료하고  다른 시스템에서 해당 mac address로 매직 패킷을 날려보도록 한다.


이렇게 하면 우분투에서의 WOL 설정은 완료. 테스트 결과 잘 작동한다. 10.04에서 확인 완료.

XDMCP 설정에 대해 알아보자.(모든 과정은 관리자 모드에서 해야한다.)
1.우분투는 기본적으로 XDMCP를 설치하지 않기 때문에 설치해주도록 하자.


2. /etc/gdm/gdm.schemas 파일을 편집하도록 한다.


security/DisallowTCP 키를 false
xdmcp/Enable  키를 true

3. gdm 다시 시작
반응형
오늘 서버로 사용할 컴퓨터에 CentOs 5.4를 설치 하였다.
일단 공씨디가 그렇게 많지 않아서 부팅씨디를 한장을 만들고 네트워크 설치를 하였다.

ftp://ftp.neowiz.com/pub
ftp://ftp.kaist.ac.kr
ftp://ftp.daum.net
http://data.nicehosting.co.kr

설치할 버전의 이미지 파일을 다운받으면 된다. 본인은 5.4 로 부팅 이미지 파일을 받았다.
그 외 설명들은 다른 블로그들에 많이 포스팅 되어 있으니 건너 뛴다.
네트워크 설치시에 사이트명과 디렉토리 정보를 설정해야 하는데..
사이트명: ftp.daum.net        디렉토리: /centos/5.4/os/i386

네트워크 설치를 완료 했다. 대충 옵션들은 패쓰~ 설치 완료하고 첫번째 난관
GUI환경을 사용해 보기 위해 startx 근데 해상도가 제대로 출력되지 않는다.
라데온 9550을 사용하므로 리눅스용 그래픽 드라이버를 다운받아 설치한다.
http://support.amd.com/us/gpudownload/Pages/index.aspx

sh ./ati-driver-installer-9-3-x86.x86_64.run
리눅스 드라이버를 설치하고 다시 x-window를 구동해서
시스템 -> 관리 -> 화면표시 에서 해상도를 설정하니 잘 적용된다. ㅎㅎ

그리고 바로 웹브라우져를 켜서 포스팅을 하려고 보니 ㅡㅡ;; 한영변환키가 안먹는다.

shift + space   누르면 한영전환이 된다. Alt + Space 인 경우도 있다고 한다.

지금은 CentOs에서 이 글을 작성중이다. 오랫만에 리눅스를 사용하니 감회가 새롭다.

설치된 패키지 그룹 확인
yum grouplist

개발툴 및 라이브러리 설치
yum groupinstall 'Development Tools' 'Development Libraries'


반응형

 응용 프로그램 사용 현황, 시스템 속성, 사용자 활동을 감시하여 노트북과 데스크톱 컴퓨터의 전력 관리 시스템을 좀 더 효율적으로 활용하자

리눅스(Linux®) 컴퓨터에서 응용 프로그램 사용 현황과 사용자 활동을 감시하여 전력 소모를 줄이는 방법을 소개합니다.

현대 컴퓨터에 내장된 ACPI(Advanced Configuration and Power Interface)와 전력 관리 시스템은 전반적인 전력 소모를 줄여주는 다양한 옵션을 제공한다. 또한 리눅스는 다양한 상황에서 PC 전력 소모량을 파악하는 도구를 사용자 영역 프로그램 형태로 다양하게 제공한다.

대다수 문서는 커널 매개변수와 hdparm 설정을 수정하여 불필요한 디스크 활동을 줄이는 방법에 초점을 맞춘다. 또한 전력 공급원에 따라서 주파수를 동적으로 조정하도록 프로세서 설정을 변경하는 방법을 상세하게 알려주는 문서도 있다.

이 기사에서는 응용 프로그램 사용 현항을 감시하여 전력을 한층 더 절약하는 도구와 코드를 소개한다. 여기서 소개하는 기술을 사용하면 현재 사용하는 응용 프로그램, 사용자 활동, 전반적인 시스템 성능에 따라 전력 설정을 변경할 수 있다.

하드웨어/소프트웨어 요구사항

2000년 이후에 제작된 PC는 하드웨어와 소프트웨어 모두 절전 기능을 제공한다. 여기서는 현대적인 리눅스 커널이 필요하다. 절전 도구가 많이 내장된 리눅스 배포판이라면 더 좋겠지만, 단순히 화면이나 시스템을 자동으로 꺼버리는 정도로도 상당한 전력을 절약한다. ACPI 기능이 없는 하드웨어나 옛날 하드웨어라도 여기서 소개하는 코드를 유용하게 활용할 수 있다.

여기서는 사용자가 직접 사용하는 PC를 예제로 삼았지만, 서버나 원격 터미널에도 같은 개념을 적용하여 사용자 활동에 따라 전력 소모를 줄일 수 있겠다.





focusTracker.pl 프로그램

응용 프로그램 사용 현황을 감시해 전력을 절약하는 방법은 다양하다. 이 기사에서는, 가장 먼저 전력을 “낭비”하는 특징적인 사용 패턴을 추적한다. 그런 다음, 시스템이 이런 패턴에 따라 전력을 낭비한다고 판단하면, 절전 모드를 활성화한다. Listing 1은 추적 작업을 수행하는 focustTracker.pl 프로그램 시작 부분이다.


Listing 1. focusTracker.pl 프로그램 헤더
#!/usr/bin/perl -w
# focusTracker.pl - 사용량 시각화를 위한 초점 자료를 수집한다.
use strict;
use X11::GUITest qw( :ALL );    # 응용 초점을 찾는다.
use threads;                    # xev에서 비차단 읽기를 수행한다.
use Thread::Queue;              # xev에서 비차단 읽기를 수행한다.
$SIG{INT} = \&printHeader;      # 종료 시에 stderr로 헤더 파일을 출력한다.

$|=1;                # 버퍼링을 끈 출력
my %log = ();        # 초점 추적 자료 구조
my $lastId = "";     # 마지막으로 초점이 맞춰진 윈도우 식별자
my $pipe = "";       # xev를 거쳐 비차단 사건 읽기
my @win = ();        # maxWindows 응용을 위한 이진 활성 자료
my $cpu = "";        # iostat에서 얻은 CPU 사용량
my $mbread_s = "";   # iostat에서 얻은 디스크 읽기(mb/s)
my $totalWindow = 0; # 전체 사용된 윈도우
my $maxWindows = 50; # 전체 추적된 윈도우

위 코드는 필요한 모듈을 인클루드하고 변수를 정의하는 외에도 시그널 인터럽트 처리기를 정의한다. 시그널 인터럽트 처리기는 자료 헤더 정보를 출력한다. 이렇게 자료와 헤더 파일을 분리하면 kst와 같은 도구로 자료 시각화 작업이 쉬워진다. Listing 2는 주 루프를 시작하는 부분이다.


Listing 2. focusTracker.pl 주 루프 시작부
while(my $line = <STDIN> )
{
  for my $c (0..$maxWindows){ $win[$c] = 0 }  # 모든 자료 위치를 초기화한다.

  next if( $line =~ /Linux/ || length($line) < 10 ); # 헤더 행, 빈 행

  my $windowId   = GetInputFocus();
  my $windowName = GetWindowName( $windowId ) || "NoWindowName";

  if( ! exists($log{$windowId}) )
  {
    # 새로운 윈도우라면 자료 집합에서 다음 위치에 대입한다.
    $log{ $windowId }{ order } = $totalWindow;
    $log{ $windowId }{ name }  = $windowName;
    $totalWindow++ if( $totalWindow < $maxWindows );

  }# 새롭게 추적된 윈도우라면

표준 입력(stdin)에서 입력이 들어올 때마다 현재 초점 정보를 저장하는 이진 변수 @win0으로 재설정한다. 사용자가 아직 초점이 맞춰지지 않은 윈도우로 초점을 맞출 때마다 윈도우 위치와 이름이 %log 해시로 기록된다(한 번 기록된 윈도우는 다시 기록되지 않는다). 현재 초점/비초점 정보로 윈도우 이름을 찾으려면 이 단계가 필수다. Listing 3은 계속하여 입력을 읽은 후 파이프 관리를 시작하는 코드다.


Listing 3. focustTracker.pl 파이프 관리
  if( $line =~ /avg-cpu/ )
  {
    # CPU 사용량을 읽어서 시각화를 위해 2-12 사이 값으로 변환한다.
    ( $cpu ) = split " ", <STDIN>;
    $cpu = sprintf("%2.0f", ($cpu /10) + 2 );

  }elsif( $line =~ /Device/ )
  {
    # 디스크 읽기 사용량을 읽어서 시각화를 위해 2-12 사이 값으로 변환한다.
    ( undef, undef, $mbread_s ) = split " ", <STDIN>;
    $mbread_s = $mbread_s * 10;
    if( $mbread_s > 10 ){ $mbread_s = 10 }
    $mbread_s = sprintf("%2.0f", $mbread_s + 2);

    # 초점 정보를 점검한다.
    if( $windowId ne $lastId )
    {
      if( $lastId ne "" )
      {
        # 옛날 파이프를 닫는다.
        my $cmd = qq{ps -aef | grep $lastId | grep xev | perl -lane '`kill \$F[1]`'};
        system($cmd);
      }
      $lastId = $windowId;
  
      # 새 파이프를 연다.
      my $res = "xev -id $windowId |";
      $pipe = createPipe( $res ) or die "no pipe ";

CPU 사용량과 디스크 사용량을 읽어 2-12 등급 중 하나로 변환한다. 순전히 시각화를 위한 값으로, CPU가 여러 개이거나 광섬유 채널 디스크를 사용한다면 등급 범위를 바꿔도 괜찮다. 여기서 사용한 등급 2-12는 IBM® 씽크패드 T42p, 단일 CPU, IDE 디스크에서 적당하다.

입력을 읽는 동안 초점이 바뀌었다면 기존 xev 파이프를 죽이고 새 파이프를 시작한다. 현재 초점 윈도우에 붙은 xev 프로그램은 키 입력이나 마우스 이동을 추적한다. Listing 4는 키 입력이나 마우스 이동 이벤트를 처리하는 코드다.


Listing 4. focusTracker.pl 파이프 읽기
    }else
    { 
      # 파이프에 자료가 넘어오면 활동하고 있음을 알려준다.
      if( $pipe->pending )
      { 
        for my $c (0..$maxWindows){ $win[$c] = 0 }  # 모든 자료 위치를 초기화한다.
        $win[ $log{$windowId}{order} ] = 1;
        
        # 파이프를 정리한다.
        while( $pipe->pending ){  my $line = $pipe->dequeue or next }
      
      }# 해당 윈도우에 대한 사건을 감지했을 경우
    
    }# 파이프를 설정했을 경우
    
    # CPU 사용량, 디스크 읽기 사용량, 초점 추적 자료
    print "$cpu $mbread_s @win \n";
  
  }# 디바이스가 연결되어 있을 경우

}# 입력받는 동안

위 블록은 직전 루프 반복에서 입력을 읽은 윈도우와 이번 루프 반복에서 입력을 읽은 윈도우가 똑같은 경우에만 실행된다. 초점 윈도우에 파이프 자료가 있다면, 즉 사용자가 초점 윈도우에서 키를 누르거나 마우스를 움직였다면, 초점 윈도우의 활동 이진 상태 변수를 (@win) 설정한다. 파이프를 정리하려면 xev 출력 행을 모두 읽으면 된다.

개별 입력을 처리한 후에는 CPU 사용량, 디스크 사용량, 초점 이진 변수 값을 모두 출력한다. Listing 5는 xev 모니터링 프로그램에 비차단 링크를 생성하는 createPipe 하위 루틴과, 표준 오류(stderr)로 자료 헤더 정보를 출력하는 printHeader 하위 루틴이다.


Listing 5. focusTracker.pl 하위 루틴
sub createPipe
{ 
  my $cmd = shift;
  my $queue = new Thread::Queue;
  async{ 
      my $pid = open my $pipe, $cmd or die $!;
      $queue->enqueue( $_ ) while <$pipe>;
      $queue->enqueue( undef );
  }->detach;
  
  # 분리할 경우 프로그램을 마칠 때 스레드를 조용히 끝내도록 만든다.
  return $queue;

}#createPipe

sub printHeader
{
  for my $key ( sort { $log{$a}{order} <=> $log{$b}{order} } keys %log )
  {
    print STDERR "$log{$key}{order} $key $log{$key}{name} \n";
  }
}#printResult

focusTracker.pl 사용법

focusTracker.pl은 iostat 프로그램에서 주기적으로 입력을 받는다. Listing 6은 응용 프로그램 사용 현황을 기록하는 명령 행 예다.


Listing 6. focusTracker.pl 예제 명령
iostat -m -d -c 1 | \
  perl focusTracker.pl 2> activityLog.header | tee activityLog.data

focusTracker.pl 프로그램을 종료하려면 Ctrl+C를 누른다. 위에서 \ 문자는 줄바꿈을 뜻하므로, 실제 명령에 입력하지 않도록 주의한다. -m 스위치를 지정하면 iostat은 (가능한 경우) 값을 초당 메가바이트 단위로 표시한다. -d 스위치는 디바이스 정보를 (이 경우에는 디스크 처리량을) 출력하고, -c 스위치는 출력할 CPU 사용량 정보를 지정한다. 마지막 옵션 1은 iostat에게 매 초마다 새로 획득한 정보를 표시하라는 뜻이다. Listing 7은 이 명령이 출력하는 결과 일부다. 후반부는 사용자가 Ctrl+C를 눌렀을 때 activityLog.header에 출력된 헤더 파일 내용이다.


Listing 7. focusTracker.pl 예제 결과
 5  2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 6  2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 9  2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 5  2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 7  2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
0 10485764 NoWindowName 
1 33554434 Eterm 
2 44040194 Eterm 
3 41943042 focusTracker.pl (~/smartInactivityDetector) - VIM 
4 27263164 Controlling ACPI Centrino features - Mozilla Firefox 

두 번째 항목과 다섯 번째 항목은 Eterm과 파이어폭스 윈도우 초점 정보를 보여준다. 키보드나 마우스로 윈도우를 전환하면 해당 윈도우의 초점 지시자가 0에서 1로 변한다.

컴퓨터를 사용하는 중에 focusTracker 프로그램을 잠깐 동안 실행하면서 응용 프로그램 사용 현황과 컴퓨터 비활성 상태를 감시해도 좋겠다. 아니면 종일이나 컴퓨터를 사용하는 내내 프로그램을 돌려서 자료를 대량으로 수집한 후 나중에 분석하고 살펴봐도 좋겠다.




위로


사용 현황 시각화

focusTracker.pl 프로그램이 생성하는 대량의 자료를 분석하려면 kst와 같은 도구가 가장 적합하다. 그림 1은 예제로 생성한 activityLog.dat 파일을 분석한 모습이다.


그림 1. kst 시각화 예제
kst 시각화 예제

위 그래프는 CPU 사용량과 디스크 사용량을 선으로 표시하고 이진 초점 정보를 점으로만 표시한다. 점은 응용 프로그램마다 색깔과 모양이 다르다. X축으로 196 즈음에서 Firefox 윈도우로 초점이 옮겨진다. 그리고 동시에 CPU 사용량과 디스크 사용량이 증가한다. 이후로 별다른 입력이 없어서 CPU 사용량과 디스크 사용량은 '보통' 상태로 돌아온다.

실제로 사용자는 여러 Eterm 윈도우를 열어서 코드를 작성하다가 196 즈음에서 파이어폭스로 초점을 옮겨서 근처 교통 정보를 확인한 후 컴퓨터를 켜둔 상태로 점심을 먹으러 나갔다.

전형적인 전력 관리 설정에서는 시스템 비활성 타이머를 이용하여 화면 보호기를 띄운다. 하지만 위와 같이 사용자가 보이는 패턴을 안다면 11:30에서 12:30 사이에 파이어폭스 프로그램이 잠시 사용되는 경우 저전력 모드로 전환할 수 있다.

게다가 Eterm/vim을 사용하는 중에는 CPU 사용량과 디스크 사용량이 아주 낮다. 그러므로 Eterm/vim을 사용하는 도중에도 저전력 모드가 합리적이다. Vim에서 텍스트를 입력할 때는 전력이 많이 필요하지 않다. CPU 사용량과 디스크 사용량이 임계값 이하일 때 일정한 기간 동안 디스크 회전 속력과 CPU 속력을 낮추는 방법도 가능하다.

inactivityRulesFile 설정

Listing 8에 방금 설명한 규칙을 코드화했다.


Listing 8. 예제 inactivityRulesFile
# 형식은 다음과 같다.
# 시작 끝 CPU 디스크 타임아웃 응용 명령
1130_#_1230_#_null_#_null_#_10_#_firefox_#_xscreensaver-command -activate
0610_#_1910_#_6_#_2_#_30_#_vim_#_echo 6 > /proc/acpi/processor/CPU0/performance

사용자 활성 상태만 확인하는 경우에는 CPU 값과 디스크 값을 null로 설정한다. CPU 값과 디스크 값을 설정한 경우에는 각 값을 임계값으로 취급한다. 즉, CPU 사용량과 디스크 사용량이 임계값 이하로 떨어지면 명령을 실행한다. timeOut 변수는 사용자가 비활성인 시점부터 CPU 사용량과 디스크 사용량을 임계값과 비교할 시점까지 기다리는 시간을 가리킨다. 응용 프로그램 변수는 X 윈도우 시스템에서 응용 프로그램 제목에 들어가는 문자열을 가리킨다.




위로


monitorUsage.pl 프로그램

monitorUsage.pl 프로그램은 inactivityRuleFile을 읽어 응용 프로그램 사용 현황을 확인하는 기능을 제공한다. Listing 9는 프로그램 첫 부분이다.


Listing 9. monitorUsage.pl 프로그램 헤더
#!/usr/bin/perl -w
# monitorUsage.pl - 응용 사용 패턴을 추적하고 명령을 수행한다.
use strict;
use X11::GUITest qw( :ALL );    # find application focus
use threads;                    # non blocking reads from xev
use Thread::Queue;              # non blocking reads from xev

$|=1;               # 버퍼링을 끈 출력
my $cpu = "";       # iostat에서 얻은 CPU 사용량
my $mbread_s = "";  # iostat에서 얻은 디스크 읽기(mb/s)
my @rules = ();     # inactivityRulesFile에서 얻은 규칙
my $ruleCount = 0;  # 전체 규칙
my $lastId = "";    # 마지막으로 초점이 맞춰진 윈도우 식별자
my $pipe = "";      # xev를 거쳐 비차단 사건 읽기
my %app = ();       # 현재 초점이 맞춰진 응용 속성
    
open(INFILE," inactivityRulesFile") or die "can't open rules file";
  while( my $line = <INFILE> )
  { 
    next if( $line =~ /^#/ );        # 주석 행을 건너뛴다.
    my( $start, $stop, $cpu, $disk, 
        $timeOut, $appName, $cmd ) = split "_#_", $line;
      
    $rules[$ruleCount]{ start }   = $start;
    $rules[$ruleCount]{ stop }    = $stop;
    $rules[$ruleCount]{ cpu }     = $cpu;
    $rules[$ruleCount]{ disk }    = $disk;
    $rules[$ruleCount]{ timeOut } = $timeOut;
    $rules[$ruleCount]{ appName } = $appName;
    $rules[$ruleCount]{ cmd }     = $cmd;
    $ruleCount++;
      
  }#while infile
      
close(INFILE); 

focusTracker.pl 프로그램과 마찬가지로 라이브러리를 포함하고 변수를 정의한다. inactivityRulesFile 내용은 %rules 해시에 저장했다가 나중에 처리 과정에서 사용한다. Listing 10은 iostat 입력을 처리하고 초점을 확인하는 코드다.


Listing 10. monitorUsage.pl 자료 읽기, 파이프 처리
while(my $line = <STDIN> )
{
  next if( $line =~ /Linux/ ); # 헤더 행

  next if( length($line) < 10 ); # 공백 행

  my $windowId = GetInputFocus();
  my $windowName = GetWindowName( GetInputFocus() ) || "NoWindowName";

  if( $line =~ /avg-cpu/ )
  {
    ( $cpu ) = split " ", <STDIN>;
    $cpu = sprintf("%2.0f", ($cpu /10) + 2 );

  }elsif( $line =~ /Device/ )
  {
    # 디스크 읽기 사용량을 읽어서 시각화를 위해 2-12 사이 값으로 변환한다.
    ( undef, undef, $mbread_s ) = split " ", <STDIN>;
    $mbread_s = $mbread_s * 10;
    if( $mbread_s >10 ){ $mbread_s = 10 }
    $mbread_s = sprintf("%2.0f", $mbread_s + 2);

    if( $windowId ne $lastId )
    { 
      if( $lastId ne "" )
      { 
        # 옛날 파이프를 닫는다.
        my $cmd = qq{ps -aef | grep $lastId | grep xev | perl -lane '`kill \$F[1]`'};
        system($cmd);
      }
      $lastId = $windowId;

      # 새 파이프를 연다.
      my $res = "xev -id $windowId |";
      $pipe = createPipe( $res ) or die "no pipe ";

      # 현재 추적 중인 응용을 다시 설정한다.
      %app = ();
      $app{ id }           = $windowId;
      $app{ name }         = $windowName;
      $app{ cmdRun }       = 0;
      $app{ lastActivity } = 0;

여러 응용 프로그램을 추적할 필요가 없으므로 %app는 단순히 현재 초점이 있는 응용 프로그램의 속성만 추적한다. Listing 11은 같은 응용 프로그램에서 여러 경로로 입력이 계속 들어오는 경우를 처리하는 논리 분기를 보여준다.


Listing 11. monitorUsage.pl 파이프 읽기
    }else
    {
      # 파이프에 자료가 넘어오면 활동하고 있음을 알려준다.
      if( $pipe->pending )
      { 
        # 파이프를 정리한다.
        while( $pipe->pending ){ my $line = $pipe->dequeue or next }

        $app{ cmdRun } = 0;
        $app{ lastActivity } = 0;

응용 프로그램이 일정 기간 동안 비활성 상태인 경우에만 규칙을 확인하고 명령을 실행한다. 그러므로 키보드 입력이나 마우스 움직임은 응용 비활성 타이머를 재설정한다. Listing 12는 파이프에 사용자 활동 자료가 없을 때 실행되는 코드다.


Listing 12. monitorUsage.pl 규칙 확인
      }else 
      {
        $app{ lastActivity }++;
        print "no events for window $windowName last "
        print "activity seconds $app{lastActivity} ago\n";
      
        my $currTime = `date +%H%M`;

        for my $ruleNum ( 0..$ruleCount-1)
        {
          next unless( $app{cmdRun} == 0 );

          next unless( $windowName =~ /$rules[$ruleNum]{appName}/i );

          next unless( $app{lastActivity} >= $rules[$ruleNum]{timeOut} );

          next unless( $currTime >= $rules[$ruleNum]{start} &&
                       $currTime <= $rules[$ruleNum]{stop} );

          my $conditions = 0;
          $conditions++ if( $rules[$ruleNum]{cpu}  eq "null" );

          $conditions++ if( $rules[$ruleNum]{disk} eq "null" );

          $conditions++ if( $rules[$ruleNum]{cpu}  ne "null" &&
                            $rules[$ruleNum]{cpu}  <= $cpu );

          $conditions++ if( $rules[$ruleNum]{disk} ne "null" &&
                            $rules[$ruleNum]{disk} <= $mbread_s );

          next unless( $conditions > 1 );

          print "running $rules[$ruleNum]{cmd}\n";
          $app{ cmdRun } = 1;
          system( $rules[$ruleNum]{cmd} );

        }# 개별 규칙을 처리한다.

      }# 해당 윈도우에 대한 사건을 감지했을 경우

    }# 파이프를 설정했을 경우

  }# 디바이스가 연결되어 있을 경우

}# 입력받는 동안

앞서 살펴본 목록에 따라 개별 규칙을 확인한다. 가장 먼저 규칙에서 지정하는 명령을 이미 실행했는지 확인한다. 다음으로 응용 프로그램 이름을 확인한다. "Controlling ACPI Centrino features / enhanced speedstep via software in Linux - Mozilla Firefox"와 같은 이름은 "firefox"라는 응용 규칙 이름과 일치한다. 다음으로, 비활성 기간(초)이 임계값에 도달했는지 확인한다. 이 때 규칙 파일에 지정된 시간 범위도 확인한다. 마지막으로 CPU 조건과 디스크 조건이 맞으면 명령을 실행한 후 다음 규칙으로 넘어간다. Listing 13은 monitorUsage.pl 프로그램이 사용하는 익숙한 createPipe 하위 루틴이다.


Listing 13. monitorUsage.pl createPipe 하위 루틴
sub createPipe
{ 
  my $cmd = shift;
  my $queue = new Thread::Queue;
  async{ 
      my $pid = open my $pipe, $cmd or die $!;
      $queue->enqueue( $_ ) while <$pipe>;
      $queue->enqueue( undef );
  }->detach;
  
  # 분리할 경우 프로그램을 마칠 때 스레드를 조용히 끝내도록 만든다.
  return $queue;

}#createPipe

monitorUsage.pl 사용법

monitorUsage.pl 프로그램을 실행하려면 명령행에서 iostat -m -d -c 1 | perl monitorUsage.pl을 실행한다. inactivityRulesFile 파일에 "beep"나 "xmessage" 같은 명령을 지정하면 조건이 맞았을 때 좀 더 효과적인 반응이 오므로 테스트하기에 편하다. 테스트 시나리오에서 규칙 시작 시간과 종료 시간을 넓힌 다음에 시도해 봐도 좋겠다.





결론, 추가 예제

지금까지 소개한 도구와 코드를 사용하면 응용 프로그램 사용 현황으로 몇 가지 규칙을 지정하여 전력 소모를 줄일 수 있다. 커널, hdparm, ACPI, CPU 설정을 조율한 후 위 응용 프로그램 감시기를 추가하면 좀 더 효율적으로 저전력 모드로 들어갈 수 있다. focusTracker와 kst를 사용하여 비활성 기간을 찾은 다음 세상을 녹색으로 만들게끔 전력을 절약할 규칙을 세워보자.






다운로드 하십시오

설명 이름 크기 다운로드 방식
예제 코드 os-smart-monitors-InactivityDetector.0.1.zip 4KB HTTP

반응형

기본 웹 브라우저란, 기본적으로 HTML 파일등을 실행하였을 때 실행되는 프로그램이다.

단지, 브라우저에 웹 주소를 실행하기 위해서는 ShellExecute 를 이용한 간단한 코드로도 가능하지만, 이 방식은 몇가지 문제가 있다.


바로, 이미 실행되고 있는 인터넷 브라우저가 있는 경우, 이 브라우저를 사용하여 이동할수도있다는 것이다.

만약, 항상 새로운 창에 브라우저를 띄워야 한다면, 이러한 일은 매우 곤혹스러운 일이다.


그것을 해결하기 위해서 사용할 수 있는 한 방법이 바로 기본 웹 브라우저의 경로를 얻어와, 실행시키는 방법이다.


그렇다면, 기본 웹 브라우저의 정보는 어디에 저장되어 있을까?


간단히 생각해보면, 기본 웹 브라우저는 html 파일을 실행하면 동작하기 때문에, Windows 가 html 파일을 실행하고자 할 때 참조하는 ' 연결된 프로그램' 을 찾아보면 쉽게 알 수 있다.


이 연결 프로그램에 대한 정보는 HKEY_CLASSES_ROOT 에 있는데, 자세한 정보는 다음과 같다.


[HKEY_CLASSES_ROOT\htmlfile\shell\open\command]

기본값 : "E:\Program Files\Internet Explorer\iexplore.exe" -nohome


[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\http\shell\open\command]

기본값 : "E:\Program Files\Internet Explorer\iexplore.exe" -nohome

이 부분의 값을 읽어서 사용하면 기본 브라우저의 경로를 얻을 수 있다.


정리

레지스트리에서 기본 웹 브라우저의 정보를 얻어오는 방법을 알아보았다.

<출처: http://www.gosu.net/GosuWeb/Article-detail.aspx?ArticleCode=1385 >

반응형
반응형
반응형
개발을 솔라리스에서 해야 하는 이유
솔라리스/개발자코너 2008/03/11 10:49
솔라리스 익스프레스 개발자 에디션 (SXDE), 은 분기별로 배포되는 썬의 차세대 솔라리스입니다. 이 버전은 개발자들에게 특수한 기능, 하위 호환성 보장, 양질의 개발 툴, 손쉬운 다운 로드 방법, 및 오픈소스 커뮤니티에 참여할 수 있는 기회를 제공합니다.


순서

소개
솔라리스 익스프레스 개발자 에디션
솔라리스OS: 운영체제와 커뮤니티
솔라리스의 특수한 기능
개발 툴
어플리케이션 지원: 웹 어플리케이션 스택
멀티플랫폼 지원
하위 호환성 보장
성정하고 있는 오픈 소스 커뮤니티
GNOME 과 자바 GNOME 바인딩
돋보이는 배치
가상화
메모리 배치 최적화 (MPO)
향상된 쓰레드
저렴한 관리 비용
솔라리스의 미래
See Also

소개


솔라리스 살펴보기

솔라리스 익스프레스 개발자 에디션 (SXDE)
SXDE 설치하기
솔라리스 익스프레스 개발자 에디션 FAQs
솔라리스 개발자 센터
솔라리스 툴
솔라리스 다운로드 옵션
OpenSolaris.org

솔라리스 운영체제 (솔라리스 OS) 는 강력하고 안정적인 환경과 더불어 리눅스에서 볼 수 있는 현대화된 인스톨러를 통해서 갈끔하고 직관적인 설치 경험을 안겨 줍니다. 솔라리스는 무료이고 오픈된 UNIX 운영체제로 x86 과 SPARC 용 두가지 버전을 다운로드 받을 수 있습니다. 천백만명 이상의 개발자들이 지금까지 가입했고 200만이상의 CPU 에서 상용 라이센스하에 운영되고 있습니다.

썬 솔라리스10 은 최근에 InfoWorld 의 2008년 의 기술상을 가장 혁신적인 서버 OS 라는 평가를 들으며 수상했습니다. InfoWorld 는 "어떠한 서버 운영체제도 솔라리스 보다 더 다양한 요구조건을 만족하거나 환상적인 기술들을 뽐낼 수 없었다" 라고 평했습니다.

솔라리스는 단 하나의 소스 코드 베이스가 존재 합니다. 그러므로 동일한 기능을 모든 플랫폼상에서 제공합니다. 개발자는 솔라리스 운영체제에서 어플리케이션을 개발하고 최적화 함으로써 썬, HP, IBM, 그리도 Dell 등의 선도 벤더들의 시스템에서 사용할 수 있습니다.


솔라리스 익스프레스 개발자 에디션


개발자들에게 특히 솔라리스 익스프레스 개발자 에디션 이 중요한 이유는 일단 무료이고 분기별로 배포되는 썬의 차세대 솔라리스로써 오픈솔라리스의 홈이며 개발자의 협력의 장소인 OpenSolaris.org 의 코드 저장소의 소스를 이용해 빌드 되었다는 것입니다. SXDE 는 솔라리스10 에는 포함되지 않는 많은 신기술들을 포함하고 있습니다.

x86 플랫폼을 위한 SXDE 배포판은 솔라리스 어플리케이션, 자바 어플리케이션 플랫폼, 웹2.0을 개발하기 위한 최신 툴, 기술 및 플랫폼을 제공합니다. 개발자들은 다운로드, DVD 주문, 혹은 SXDE 가 미리 설정된 VMWare 가상 머신 등을 통해서 무료로 얻으실 수 있습니다.

랩탑에서의 개발환경을 지원하기위해 각 배포판마다 무선랜 지원을 위한 새로운 드라이버들을 추가 하였습니다. 9/07 배포판은 중요한 전원 관리 기능인 Enhanced Intel SppedStep Technology (EIST) 을 지원합니다. 1/08 배포판은 EIST 를 향상시켰으며 인텔4965 802.11agn 을 위한 드라이버를 포함하고 있습니다. 개발자들에게 더 편리한 설치 과정을 제공하기 위해 썬은 SXDE 를 위한 설치 및 설정 지원을 솔라리스10 서비스 지원 추가비용 없이 추가하였습니다.

SPARC 시스템을 이용하는 개발자는 최신 솔라리스 익스프레스 커뮤니티 에디션 빌드 (DVD) 혹은 (CD) 를 통해서 동일한 기능을 얻으실 수 있고 SPARC 개발자를 위한 툴은 2월 중순까지 번들 되도록 계획하고 있습니다. 이후의 솔라리스 익스프레스 개발자 에디션은 x86 과 SPARC 모두의 지원을 포함할 것입니다. 솔라리스 익스프레스 개발자 에디션의 VMWare 또한 제공 됩니다.


솔라리스OS: 운영체제와 커뮤니티


InfoWorld 수상

썬 솔라리스10 과 ZFS 파일 시스템이 최근에 InfoWorld 의 2008 올해의 기술 상을 수상하였습니다.

썬 솔라리스10 은 플랫폼들 중에서 가장 혁신적인 서버 OS 라는 영예를 안았습니다.

InfoWorld 는 말하기를 "어떠한 서버 운영체제도 솔라리스 보다 더 다양한 요구조건을 만족하거나 환상적인 기술들을 뽐낼 수 없었다. 2008 년 올해의 기술상을 수상한 ZFS 파일 시스템부터 시작하여 DTrace 라는 최고의 OS 분석 툴이 지원되고 레드햇 리눅스 바이너리를 실행할 수 있는 솔라리스 컨테이너를 통한 네이티브, 빌트인 가상화(현재 어떠한 OS 도 번들하고 있지 못한) 등. 현시대의 서버 운영체제중 가장 혁신적인 버전이라고 할 수 있다"

여기에 덧붙여 ZFS 파일 시스템은 최고의 파일 시스템 상을 수상했습니다. InfoWorld 는 ZFS 의 혁신을 칭찬했습니다: "썬의 ZFS 수준의 혁신이 매일 매일 컴퓨터 산업에서 일어 나는 것은 아니다. ZFS 의 유연함과 확장성은 현시대의 어떠한 파일 시스템또 훌쩍 뛰어 넘는다. 지속적인 IT 과학의 발전이 발전이 현 상태를 간단히 제곱으로 뛰어 넘어 버렸다. ZFS 는 현재까지의 모든 룰을 깨버리고 놀랍게도 뛰어나고 잘 구현된 솔루션이다."

솔라리스 OS 는 오픈솔라리스 소스 코드, 개발자 커뮤니티 그리고 웹사이트로 구성되어 있는 오픈솔라리스 프로젝트와 혼동되서는 안됩니다. 두가지 모두 썬에 의해 지원되고 있지만 오픈솔라리스는 개발자 커뮤니티에 의해 운영되는 개발 프로젝트 입니다.

솔라리스의 향후 버전은 오픈솔라리스 프로젝트에 의해 개발된 기술들에 기반을 둘 것입니다. 둘다 무료 바이너리 다운로드 형태로 제공되고 썬은 서비스 패키지와 정기 업데이트를 둘 모두를 위해 제공 합니다.

솔라리스는 개발자들에게 여러가지 장점을 제공합니다:

특수한 기능들: DTrace, 솔라리스 존, 향상된 IP 스택, ZFS 등등.
썬 스튜디오 컴파일러와 넷빈즈IDE 를 통한 양질의 개발툴 제공.
웹 어플리케이션 소프트웨어(솔라리스, 아파치, MySQL, Ruby, PHP), 넷빈즈 IDE 6, JRuby, PHP preview 플러그인, Perl, Python, Ruby, JavaDB, PostgreSQL 과 아파치 1.x, 아파치 2.x 를 포함하는 5천개 어플리케이션 지원.
Mercurial 플러그인 지원 이 넷빈즈 IDE 6.0 에서 사용 가능함.
새로운 개발자들을 장려하는 오픈 소스 커뮤니티에 의해 지원되는 오픈 소스 소프트웨어. 소스코드는 OSI-승인된 CDDL 하에서 사용 가능.
썬의 바이너리 장기간 하위 호환성 약속 그리고 소스 코드 와 툴들. 썬 스튜디오 12 소프트웨어 는 고성능 컴파일러와 툴을 제공하고, SPARC 플랫폼, x86/x64 플랫폼의 솔라리스와 리눅스를 위한 최적화된 C, C++,포트란 컴파일러를 제공하고, 또한 최신의 멀티-코어 시스템과 소스, 메모리 그리고 쓰레드 디버깅등을 지원하며 하위버전의 오브젝트 파일과 호환되는 컴파일러와 링커 제공.
900개 이상의 x86 과 SPARC 플랫폼을 지원하는 멀티 플랫폼 지원.
레드햇 리눅스 보다 관리, 배치 및 저렴한 지원비용.
문서.
향상된 GNOME-기반 데스크탑.
돋보이는 배치:
SPARC 과 AMD/Intel 아키텍쳐 지원
가상화
솔라리스 확장성
진보된 쓰레드 및 스케줄링
메모리 배치 최적화 (MPO)

솔라리스의 특수한 기능


2005년 초기에 발표된 솔라리스10은 600개 이상의 신기술을 포함하고 있었고 이후 업데이트 버전과 솔라리스 익스프레스 프로그램을 통해서 더 많은 것들이 추가 되었습니다. 이들 중 상당 수는 다른 운영체제에서는 볼 수 없는 것들인데 대표적으로 솔라리스 동적 트레이스(DTrace), 솔라리스 컨테이너, 자가 예측 치료, 솔라리스 ZFS, 솔라리스 트러스티드 익스텐션 그리고 로지컬 도메인(LDoms) 가 바로 그것입니다.

DTrace 는 솔라리스10에서 소개된 디버깅 툴로 기존의 디버깅 툴로는 잡아내기 어려운 시스템의 문제를 디버그 하는데 도움을 줍니다. 이 툴은 개발자가 웹2.0에서는 매우 흔한 멀티 레이어 스포트웨어 스택(서로 다른 수많은 레이어가 존재 하는데 이것은 자바 스크립트, 자바, C/C++ 같은 서로 다른 언어로 구현되어 있음) 을 넘나다는 디버깅을 가능하도록 해줍니다.

이러한 멀티레이어에 대한 가시성은 기존의 디버깅툴로는 불가능 합니다. DTrace 의 경량성은 개발자가 프로덕션 서버에서 어플리케이션의 디버그 버전 없이도 어플리케이션을 조사할 수 있도록 도와 줍니다. 커스텀 probe 가 Firefox 같은 데스크탑의 중요 어플리케이션들에 추가 되어서 Firefox 내에서 자바 스크립트 코드에 DTrace 의 힘을 이용할 수 있고 Firefox 자체도 튜닝 할 수 있습니다.

DTrace 는 커맨드 라이브러리 libdtrace 에 의해 동작하고 이 라이브러리는 커널 내의 다양한 "DTrace provider" 에 대한 진입 포인트를 가지고 있고 이러한 "DTrace provider" 는 몇몇 커널 시스템의 논리적인 뷰를 제공 합니다. 솔라리스10은 거의 4만개 이상의 probe 를 솔라리스 커널 내에서 제공 합니다. DTrace 도구는 필요에 따라 끄거나 킬 수 있고 끈 상태로는 어떠한 오버헤드도 일으키지 않습니다. 커스텀 probe 를 만들기 위해 쿼리들이 조합될 수 있습니다.

ZFS 는 128비트이고, 예술의 경지의 파일 시스템으로, 엔드-투-엔드의 오류 검사 및 보정, 간단한 커맨드 라인 인터페이스 그리고 가상적으로 스토리지 용량에 제한이 없습니다. ZFS 는 InfoWorld 에 의해 2008년 최고의 파일 시스템 으로 선정되었습니다.

솔라리스 존 은 개발자가 머신을 서로에게 독립적인 여러개의 가상 머신으로 나눌 수 있습니다. 솔라리스 존은 솔라리스 내에서 파티션된 가상 OS 환경 입니다. 각 존은 독립된 가상 서버로 싱글 머신처럼 독잡하게 됩니다. 존은 기본적인 단위로써 운영체제의 리소스 관리 설비 와 같이 사용되면 솔라리스 컨테이너로 불립니다. 많은 개발자들은 "존" 과 "컨테이너" 를 혼용해서 사용하고 있습니다.

어플리케이션은 존을 독립적이고 보안이 강화된 운영체제 환경으로 다루고 있으며 개발자가 서로 다른 존에 어플리케이션을 설치 함으로써 각각의 어플리케이션을 독립시킬 수 있도록 합니다. 그러면서도 동시에 운영체제 리소스의 중앙 집중적인 관리가 이루어 집니다.

자가 예측 치료 기능은 솔라리스10을 위해 만들어 졌으며 하드웨어 및 어플리케이션 오류 상황을 자동으로 진단하고 고립화 시키고 복구 시킵니다. 결과적으로 비지니스-크리티컬 한 어플리케이션과 기본적인 시스템 서비스들이 소프트웨어 오류, 주요 하드웨어 컴포넌트의 오류 또한 소프트웨어의 잘못된 설정으로 인해 발생하는 문제등으로 부터 어떠한 영향도 받지 않고 계속적으로 실행될 수 있도록 합니다.

2007년 10월 자바 기술의 아버지인 제임스 고슬링은 그의 솔라리스에 관한 감격에 대해 블로깅 한 적이 있습니다: "솔라리스에는 멋진 기능들이 너무 많습니다. 저는 존과 ZFS 에 완전히 중독되었습니다. 예를 들어 저는 렙탑에서 ZFS 를 이용해 디스크를 관리합니다. 이후에 랩탑의 디스크를 USB 로 곧바로 미러링 합니다."


개발 툴


솔라리스는 개발자들이 어플리케이션을 배포할 모든 환경과 호환되는 통합되고 바로사용이 가능한 툴을 제공합니다. SXDE 를 통해서 최신 개발자 툴이 자동적으로 운영체제와 함께 설치 됩니다.

개발자 툴은 다음을 포함합니다:

썬 스튜디오 12 12/07 소프트웨어 는 고성능 컴파일러와 툴을 제공하고, SPARC 플랫폼, x86/x64 플랫폼의 솔라리스와 리눅스를 위한 최적화된 C, C++,포트란 컴파일러를 제공하고, 또한 최신의 멀티-코어 시스템과 소스, 메모리 그리고 쓰레드 디버깅등을 지원합니다.
Project D-Light 는 시스템의 동작을 분석할 수 있는 몇가지 도구들을 제공합니다. (프로젝트 D-Light 는 현재 솔라리스10에서만 실행되며 DTrace 활성화된 최소 6이상의 JRE 가 필요 합니다) 프로젝트 D-Light 는 복잡한 어플리케이션과 시스템의 프로파일링을 퍼포먼스 병목현상을 가시적으로 보여주고 어플리케이션 시스템 스택상의 리소스 병목현상에 대해 개발자들이 접근 할 수 있도록 도와 줌으로써 어플리케이션과 시스템 환경을 최적화 할 수 있도록 도와 줍니다. 아주 간단한 드래그앤드롭 인터페이스로 되어 있고 DTrace 를 포함한 최신의 프로파일링 기술들의 확장 라이브러리를 제공 합니다.
넷빈즈 IDE 6 는 개발자가 크로스 플랫폼 자바 데스크탑, 엔터프라이즈, Ruby on Rails, JRuby, PHP 등의 지원을 포함하는 웹 어플리케이션을 개발 할 수 있는 모든 툴들을 제공합니다.
자바 플랫폼 Standard Edition 6 (Java SE) 은 개발자가 임베디드 및 실시간 환경 등을 포함한 데스크탑과 서버에서의 자바 어플리케이션 생성과 배치를 가능하도록 합니다. 자바 SE6 는 웹서비스 개발등에 필요한 클래스들을 기본적으로 제공하고 자바 플랫폼 Enterprise Edition (Java EE) 의 기반입니다.

어플리케이션 지원: 웹 어플리케이션 스택


SXDE 의 일부로 제공되는 웹 어플리케이션 스택은 널리 사용되는 오픈 소스 어플리케이션들이 솔라리스에 최적화된 형태로 제공됩니다. 이 것은 가장 대중적인 어플리케이션(아파치, PHP, MySQL, Ruby 등) 이 미리 설정되어 사용이 가능하며 컨트롤 패널을 통해서 빠르고 쉽게 서비스를 관리할 수 있습니다.


멀티플랫폼 지원


솔라리스10은 랩탑에서 데스크탑 그리고 SPARC 과 x64/x86 등의 모든 시스템에서 실행 됩니다. 랩탑과 데스크탑에서 완벽히 통합된 썬 자바 데스크탑 시스템을 통해서 솔라리스10은 파워 유저와 개발자들이 고급 기능들과 작업 생성에 가치를 줄 수 있는 개발자 툴들의 장점들을 누릴 수 있도록 합니다.


하위 호환성 보장

하위 호환성 보장은 상용 소프트웨어 개발자들에게 특히 중요합니다. 왜냐하면 유지보스는 일반적으로 소프트웨어와 연관된 가장 큰 비용이기 때문입니다. 썬은 하위 호환성 보장은 벤더들의 소프트웨어가 한 버전의 솔라리스에서 빌드된 것이 그대로 다른 버전에서도 올바르게 동작하도록 보장합니다.

이것이 다른 운영체제와 확연하게 비교 되는 점입니다. 예를 들어 시스템 컴포넌트의 비호환적인 변경 -- 예를 들어 라이브러리들 -- 이 어플리케이션에 미칠 수 있는 영향을 고려하지 않고 만들어지는 것들과 비교 됩니다. 결과적으로 어플리케이션은 고장나고 유지 보수 비용이 증가 함으로써 어플리케이션 벤더와 사용자들에게 좌절을 안겨다 줄 것입니다.


성장하고 있는 오픈 소스 커뮤니티


2006년 11월 과 2007년 11월 사이에 OpenSolaris.org 의 가입자는 2만명에서 8만명으로 늘었습니다. 오픈 솔라리스 프로젝트 이상으로 오픈솔라리스는 커뮤니티 이며 협동을 위한 웹 사이트 입니다. 솔라리스 소스 코드, 다운로드, 개발자 툴, 메일링 리스트, 유저 그룹, 이벤트 정보, 그리고 그 이상의 것들이 opensolaris.org 에서 이용 가능합니다. 오픈솔라리스 기술은 SPARC 과 x86 플랫폼을 위한 단일 소스 코드 베이스로써 모든 플랫폼에서 동일한 기능을 제공합니다.


GNOME 과 자바 GNOME 바인딩


GNOME 은 개발자들이 필요에 맞는 데스크탑 어플리케이션을 다양하게 사용할 수 있는 현대적인 데스크탑을 제공합니다.

GNOME 커뮤니티는 좀 더 많은 개발자들을 끌어 들이기 위해 데스크탑 어플리케이션을 C 로 개발하는 것에 대한 대안이 필요함을 인정하고 있습니다. GNOME 데스크탑의 95 퍼센트 이상이 C 로 쓰여졌으므로 많은 사람들이 여전히 썬 스튜디오 소프트웨어, 넷빈즈와 C/C++ 모듈, 그리고 이클립스를 통해서 그들의 데스크탑 어플리케이션을 C 로 개발하고 있습니다.

자바 GNOME 바인딩 은 GNOME 과 GTK+ 어플리케이션을 개발할떄 필요한 핵심 라이브러리에 대한 접근을 제공하고 있습니다. 바인딩은 하부 플랫폼의 C API 를 자바SE 에서 제공하는 JNI 를 통해 자바 API 에서 접근이 가능하도록 지원합니다. 바인딩은 솔라리스 패키지 셋의 형태로 제공되며 다음을 포함하고 있습니다:

API jars: 자바 API 를 제공하고 자바 GNOME API 를 import 하도록 한다
API libraries: JNI 네이티브 C 라이브러리를 지원하여 자바 API 가 호출할 수 있도록 한다
도움말: API 소스 jar 파일들에 대한 설명을 제공함으로써 code 자동 완성 및 소스 브라우징을 IDE 에서 가능하도록 한다
API Javadoc: API 에 대한 이해하기 쉬운 설명을 제공한다
자바 GNOME 바인딩은 Glade-기반의 GNOME/GTK+ 어플리케이션 개발에 친숙한 개발자들에게 이러한 타입의 데스크탑 어플리케이션을 자바 언어로 대치할 수 있는 길을 제공합니다. 자바 GNOME 커뮤니티는 바인딩의 자동 생성이 가능하도록하는 재디자인 작업중에 있습니다. 이 작업을 통해서 하부 GNMOE 플랫폼과 Cairo 네이티브 라이브러리에 대한 거의 100% 의 지원을 제공하게 될 것이고 GNOME 플랫폼의 차후버전과도 계속해서 동기되도록 해 줄 것입니다.

이와 덧붙여서 새로운 GNOME DevHelp 는 gtk-doc 과 네이티브한 작업을 통해서 개발자들이 GNOME API 문서를 브라우징 하고 검색 할 수 있는 어플리케이션입니다.


돋보이는 배치


솔라리스는 배치의 유연성을 제공합니다. 솔라리스는 SPARC 기반의 시스템에서 운용되든 x64/x86 시스템에서 운용되든 동일한 기능을 제공합니다. 솔라리스의 모듈화된 아키텍처는 커널을 재빌드 할 필요 없이 드라이버들이 동적으로 로딩 될 수 있도록 합니다. 커널 자체는 단일 프로세서와 멀티프로세서 환경을 지원하고 대부분 자체적으로 튜닝이 되어 있습니다. 이러한 기능들은 대용량의 배치 환경에서 단일화되고 최적화되고 강력하게 보안이 강화된 환경을 제공 합니다.

이러한 효율적인 작업은 임베디드 시스템 혹은 컴퓨팅 팜에서도 마찬 가지 입니다. 솔라리스는 그러므로 텔레커뮤니케이션, 스토리지, 네트워크 보안, 병원 그리고 정부 공공 같은 분야에 매우 적합합니다. 또한 가능한 모든 PC 의 설정 (랩탑, 데스크탑, 워크스테이션, 블레이드, 랙마운트 서버, x64/x86 기반의 8-way 서버를 포함한) 에서도 매우 적당합니다.

SXDE 를 이용해 개발된 어플리케이션은 Solaris Ready Test Suite 을 이용해 솔라리스10 API 를 사용하는지 검사함으로써 솔라리스에서 테스트되고 사용될 수 있습니다. 덧붙여서 배치 전에 솔라리스10 서버에서 파이널 빌드를 만들어야 합니다.


가상화

솔라리스에 포함된 가상화 기능은 배치를 좀 더 간편하고 유연하도록 해줍니다. 썬은 가상화 엔터프라이즈를 위한 현존하는 모든 기술들을 제공하고 미래의 가상화를 위한 혁신적인 최신 기술을 제공합니다.


메모리 배치 최적화 (MPO)


솔라리스10은 메모리 배치 최적화(Memory Placement Optimization:MPO) 를 통해서 서버의 물리적 메모리의 배치를 향상시킴으로써 퍼포먼스 향상을 이룩했습니다. MPO 를 통해서 솔라리스10은 메모리를 그것에 접근하는 프로세서와 최대한 가깝게 위치시키는 동시에 시스템에서 충분히 밸런스를 이룰 수 있도록 하였습니다. 결과적으로 TPC-H 런타임이 획기적으로 감소하였고 TPC-C 퍼포먼스가 향상되었고 다수의 고성능 컴퓨팅(HPC) 어플리케이션의 실행시간이 반으로 단축되었습니다.


향상된 쓰레드


최근의 몇몇 솔라리스 배포판에서 쓰레드 라이브러리는 멀티쓰레드 어플리케이션을 위해 향상되었습니다. 솔라리스9 부터 썬은 기존의 'MxN' 구현을 대체하는 최적으로 튜닝되고 테스트된 '1:1' 모델을 채용하였습니다. 하부의 쓰레드 구현을 단순화 함으로써 어플리케이션은 재컴파일 없이 엄청난 퍼포먼스 향상과 안정성의 향상을 얻을 수 있습니다. 솔라리스10에서는 쓰레드 로컬 스토리지(TLS) 가 추가되었고 스토리지 퍼포먼스의 단순화 및 퍼포먼스 향상을 꾀했습니다. 새로운 쓰레드 모델과 최신 자바 가상 머신(JVM) 기술의 조합은 SPECjbb2000 퍼포먼스의 비약적인 향상을 가져 왔습니다.


저렴한 관리 비용


많은 개발자들이 고유의 소프트웨어 환경을 관리하고 있습니다. 솔라리스10은 레드햇 리눅스에 비해 20% 이상의 소유비용 이득이 있음이 Crimson 컨설팅 그룹의 새로운 연구결과 에 의해 밝혀 졌습니다. 이 연구는 썬에 의해 스폰서 되었고 솔라리스와 레드햇 엔터프라이즈 리눅스 배치 경험이 없는 연구 참여자를 선별하여 독립적이고 분석적인 평가를 통해 디자인되고 실행 되었습니다.


솔라리스의 미래


솔라리스 와 SXDE 는 개발자들에게 특별한 기능, 다양한 어플리케이션, 손쉬운 다운로드 방법, 복수플랫폼 지원, 그리고 오픈 소스 커뮤니티 경험, 보장되는 하위 호환성 보장, 우월한 배치방법 및 관리 비용의 절감을 가져다 줍니다. 직접 사용해 보면 모든 것이 명확해 질 것입니다.

썬과 번영하고 있는 오픈 소스 커뮤니티의 강력한 지원을 통해서 미래는 매우 밝을 것입니다.


추가자료


솔라리스 익스프레스 개발자 에디션 (SXDE)
솔라리스 익스프레스 개발자 에디션 FAQs
솔라리스 개발자 센터
솔라리스 다운로드 옵션
OpenSolaris.org
SXDE 설치하기

저자에 관하여

Janice J. Heiss 는 썬 마이크로시스템즈의 필자진중 한명으로 자바 기술을 담당하고 있습니다.


이 글의 영문 원본은
http://developers.sun.com/solaris/articles/whydeveloponsolaris
에서 보실 수 있습니다.
반응형
1. Vista의 볼륨압축

 내컴퓨터(R) - 관리 - 저장소 - 디스크관리

사용자 삽입 이미지

○ Vista 파티션(R) - 볼륨축소 ( 보통 40기가로 짤라준다)


1-1 XP 에서 비스타부트프로 설치
  비스타 프로 다운로드
DOWN

2.xp에서의 VistaBootPro 설정


사용자 삽입 이미지

 ○ BCD경고문 무시해도 된다.

3. VistaBootPro 실행화면

사용자 삽입 이미지

3. Vista Bootloader 복구
사용자 삽입 이미지

 (1) System BootLoader 선택
 (2) Windows Vista Bootloader(Uninstall Legacy Bootloader) 선택
 (3) All Drives 선택
 (4) Install Bootloader 클릭(적용)
 (5) 경고 창이 뜨면 확인 클릭

5. 부팅화면 설정

사용자 삽입 이미지

 ○ Diagnostics(Alt + R) 클릭
  - 그럼 위에와같이 인스톨되어있는 OS들이 나타난다
      ※ 컴퓨터 마다 이름은 다를수있음 필자의경우 IBM노트북으로 리커버리가 맨위에뜬다

 ○ Select an Entry to enable options below에서 메뉴 선택을 조절할수 있다.

 ○ Set as Default :: 어떤 OS를 기본 부팅으로 할지 설정

 ○ Rename Os Entry :: 부팅메뉴에서 표시할 이름수정

 ○ Change Boot Driver :: 부팅로더가 있는 드라이브 선택

 ○ Current Boot timeout :: 부팅메뉴 표시 시간

6. 재부팅후 XP진입시 NTLDR에러 대처

사용자 삽입 이미지

○ Chage Boot Driver을 C로 선택

+ Recent posts