레이블이 os인 게시물을 표시합니다. 모든 게시물 표시
레이블이 os인 게시물을 표시합니다. 모든 게시물 표시

2012-09-09

FreeBSD] X 데스크탑 환경



5. 데스크탑 환경

 X에서 사용되는 여러 데스크탑 환경중 KDE나 GNOME같은 데스크탑 어플리케이션 슈트나 다른 윈도우매니저에 대해 다룬다.


5.1 GNOME


5.1.1 GNOME에 대해...

GNOME는 사용자 친화적인 데스크탑환경이다. 이것은 사용자의 컴퓨터를 쉽게 사용하고 설정가능하게 해주는 환경이다.
GNOME는 패널(애플리케이션시작과 디스플레이 상태를 위한), 데스크탑(데이터와 어플리케이션이 위치한), 표준 데스크탑 툴과 어플리케이션 집합, 일관적이고, 협업적인 어플리케이션을 쉽게 만들기 위한 규약들의 집합들을 포함하고 있다.

서로 다른 OS의 사용자들 혹은 서로 다른 환경의 사용자들은 집에서 바로 사용할 수 있는 강력한 그래픽위주의 환경을  GNOME 제공한다.

더 많은 정보는 FreeBSD GNOME Project 웹사이트에서 보기 바랍니다.


5.1.2 GNOME 설치하기

GNOME설치의 가장 쉬운 방법은 FreeBSD를 까는 중에 "Desktop Configuration" 을 통해 설치하는 방법이다.

다른 방법은 패키지나 포트 컬렉션을 통해서 설치하는 것입니다.

GNOME패키지를 네트워크를 통해 설치할 때 다음과 같이 입력을 하면 간단하다.


# pkg_add -r gnome2

소스로부터 GNOME를 빌드하기 위해서는 포트트리를 사용한다.

#cd /usr/ports/x11/gnome2#make install clean

GNOME은 한번 설치되면, X서버는 실행시 기본 윈도우매니저 대신 GNOME을 실행할 지 물어본다.

일반적으로 .xinitrc가 존재하면, /usr/X11R6/bin/gnome-session 이 실행되면서 현재 기본 윈도우 매니저를 간단하게 대체한다.

설정파일에 특별히 명기된게 없다면 아래의 명령을 입력하는것으로 충분하게 된다.

% echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc


다음으로, startx를 치면 GNOME 데스크탑환경을 시작하게 될것이다.


 NOTE: 만약 XDM같은 디스플레이매니저를 사용한다면, 이 작업은 안할 것이다.             대신에 실행가능한 .xsession 파일을 생성하고, 위와 같은 명령어를 추가한다.             파일을 편집하고, 존재하는 윈도우 매니저를 대체하는 명령은 /usr/X11R6/bin/gnome-session 에 존재하는것을 대체한다.


%echo "#!/bin/sh" > ~/.xsession
%echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession
%chmod x ~/.xsession


 또 다른 옵션은 윈도우 로긴시에 디스플레이매니저 선택을 허용하도록 설정하는 것이다. KDE DM의 kdm 사용 설명에 자세히 기술한다.


5.1.3  GNOME에서 안티알이아싱 폰트 사용하기

X11은 "RENDER" 확장을 통해 안티알리아싱을 지원한다.  GTK 2.0 이상(GNOME에서 사용되는 툴킷) 은 이 기능을 사용하게 만들수 있다.

안티알리아싱 설정은 앞의 게시물의 "X에서 폰트 사용하기" 의 설명을 참조하기 바랍니다.  SW가 개선됨에 따라서, GNOME 데스크탑 간에 안티알리아싱이 가능하게 되었다.

Applications->Desktop Preferences->Font 로 가서,Best shapes, Best contrast,  Subpixel smoothing (LCDs) 중에서 선택하면 된다.

GTK 를 위한 프로그램은 GNOME 데스크탑의 부분이 아니기 때문에,  프로그램을 시작하기 전에 GDK_USE_XFT의 값을 1로 설정해야 한다.


5.2 KDE

5.2.1 KDE에 대해...

KDE는 현재 데스크 환경중에서 사용하기 쉬운것중 하나다.
KDE는 아래의 사항들 중 하나로 사용자들을 끌어들인다.

A beautiful contemporary desktop
A desktop exhibiting complete network transparency An integrated help system allowing for convenient, consistent access to help on the use of the KDE desktop and its applications Consistent look and feel of all KDE applications Standardized menu and toolbars, keybindings, color-schemes, etc.
Internationalization: KDE is available in more than 40 languages
Centralized consisted dialog driven desktop configuration
A great number of useful KDE applications


KDE는 KDE 기반의 "KParts" 기술로 구성된 스프레드쉬트, 프리젠테이션프로그램, 오거나이저, 뉴스 클라이언트 프로그램등등 으로 구성된 사무용프로그램 집합이다.  KDE는 또한 Konqueror라 불리는 웹브라우저를 가지고 있고, Konqueror는 유닉스시스템에 존재하는 다른 웹브라우저와 치열한 경쟁을 보여주고 있다.  KDE에 대한 더 많은 정보는 KDE 웹사?에서 발견할 수 있다.  FreeBSD에 특화된 정보는 FreeBSD-KDE team의 웹사이트에서 볼 수 있을 것이다.


5.2.2 KDE 설치하기

GNOME 또는 다른 데스크탑 환경과 마찬가지로 KDE도 FreeBSD를 설치하는 도중에  "Desktop Configuration" 항목을 통해서 가장 쉽게 설치할 수 있다. 또 다른 방법은 패키지나 포트컬렉션을 통해서 쉽게 설치가 가능하다.


KDE 패키지를 네트워크를 통해 설치할 때 다음과 같이 입력을 하면 간단하다.

# pkg_add -r kde

pkg_add(1)은 자동으로 해당 프로그램의 최신버전을 가지고 온다.

소스로부터 KDE를 빌드하기 위해서는 포트트리를 사용한다. (정말 시간 많이 걸린다.)

# cd /usr/ports/x11/kde3

#make install clean


KDE를 설치 후, X 서버는 기본 윈도우매니저를 대체하기 위해 이 프로그램을 시동할지 물어봐야만 한다. 이 작업을 하기 위해서는 .xinitrc파일을 아래처럼 수정한다.


% echo "exec startkde" > ~/.xinitrc


이제 X윈도우시스템은 startx시에 KDE를 데스크탑으로 실행 할 것이다.


5.3 KDE에 대해 조금 더....

FreeBSD] nabi설치 및 설정방법




이 글은 http://wiki.kldp.org/wiki.php/nabi의 글을 일부 인용 발췌한 것입니다.


1. 나비 설치

- 데비안 :  apt-get install nabi
- Fedora : yum install nabi
- FreeBSD : cd /usr/ports/korean/nabi && make install clean


** 소스로 설치시 GTK 2.2 이상이 필요합니다.


2. 설정

2.1 환경변수 설정

- 데비안

GNOME 사용시 $HOME/.gnomerc  파일에 아래의 내용을 추가합니다.


  export XMODIFIERS="@im=nabi"



- 일반 (FreeBSD포함)

$HOME/.xinitrc파일 또는 $HOME/.xsession을 사용한다면 그 파일 앞쪽에

     nabi &
     export XMODIFIERS="@im=nabi"


를 추가하면 됩니다. 또는 세션관리자를 사용하는데 데스크 탑의 경우는 시작프로그램에 추가하는 방법도 있습니다. 물론 이렇게 나비를 띄우는 경우에도 환경변수는 위와 같이 프로그램을 실행하기 전에 설정될 수 있도록 해야 합니다.
KDE를 사용한다면 $HOME/.kde/env/nabi.sh라는 파일을 만들고 거기에


     nabi &       #만일 나비를 시작할때 띄우고 싶지 않다면 이 라인은 빼셔도 됩니다.

     export XMODIFIERS="@im=nabi"


이렇게 적으면 됩니다.



3. 사용방법

3.1 한영전환

    기본적으로 처음 시작 상태는 영문상태입니다. 이 상태에서는 한글입력이 안됩니다. 이것을 한글모드로 전환을 해야하는데 이 한영 전환방법은 Shift-space 혹은 한/영 키 입니다.  이때부터  한글을 입력할 수 있습니다. 그리고 나서 다시 Shift-space혹은 한/영 키를 누르게 되면 다시 영문상태가 됩니다.



3.2 한자 입력방법

먼저 한글로 입력하기를 원하는 한자의 독음을 힌 후 한자키나 F9키를 누르면 선택할 수 있는 한자 목록이 나오게 됩니다.
각 한자들 앞에는 숫자가 붙어 있는데 그 숫자를 누르면 바로 그 한자가 입력이 됩니다. 또한 좌우방향키를 누르게 되면 선택마크가 움직이면서 현재 선택된 한자를 보여줍니다. 그때 엔터를 치시면 선택된 한자가 입력이 됩니다.

현재의 한자 목록에서 원하는 한자가 보이지 않으면 space 나 PgDn/Up 키를 눌러서 다음 한자 목록을 보실수 있습니다,
또 한자 입력을 취소하시려면 Esc키를 누르시면 됩니다. hjkl로도 움직일 수 있습니다.



3.3 기호입력방법

한글 자음(ㄱㄴㄷㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ)를 하나 누른 상태에서 한자 또는 F9 키를 누르면 기호의 목록이 나타납니다.
이때에도 한자의 경우와 마찬가지로 골라서 입력하시면 됩니다.



4. FAQ

4.1. 한글 입력이 안됩니다, 어떻게 해야 하나요?


보통은 환경 변수 설정의 문제인 경우가 많습니다.
일 단 시스템에 문제가 있는지 없는지 확인하기 위해서 아래에 제시한 테스트를 하시면 빠르게 상황을 파악할 수 있습니다.

다 음과 같은 순서를 따라서 해보십시오. 임의로 건너 뛰거나 순서를 바꿔서 입력하면 안됩니다. 반드시 아래에 제시된 순서대로 빼먹지 말고 입력하십시오.
일단 X가 뜨지 않은 상태의 tty에서 xinit을 실행합니다. 그러면 X 화면이 뜨면서 왼쪽 위에 터미널 화면만이 열립니다.
그럼 그 터미널에서 아래의 명령을 순서대로 치시면 테스트 하실 수 있습니다.
아래에서 $는 프롬프트를 나타내므로 입력하실 필요가 없습니다.
그리고 # 이후 부분은 설명을 위해 써 놓은 것이니 역시 입력 하실 필요가 없습니다.

     $ twm &                         # 윈도우 매니져를 띄우는 것입니다.
                                     twm 이 없다면 fvwm, wmaker, metacity 등을
                                     입력해 보십시오.

     $ unset LC_ALL                  # 잘못된 환경 변수가 있을 경우를 대비해서
                                     기존의 설정 값을 지우는 것입니다.

     $ export LANG=ko_KR.eucKR       # 자기가 사용하고자 locale을 설정합니다.
                                     만일 유니코드 locale을 사용하고 싶다면
                                     export LANG=ko_KR.UTF-8 이렇게 합니다.

     $ nabi &                        # 실제로 입력기를 실행하는 곳 입니다.

     $ export XMODIFIERS="@im=nabi"  # 자기가 사용하고자 하는 입력기를 지정하는
                                     것입니다.

     $ export GTK_IM_MODULE=xim      # gtk2를 쓸때 입력 모듈이 다른 것으로
                                     설정되어 있을 수가 있기 때문에 바꿉니다.

     $ mozilla or gedit or kedit     # 이제 실제로 자기가 한글을 입력하고자 하는
                                     프로그램을 띄웁니다.



실제로 나비를 사용하기 위해서 중요한 환경 변수 ?LANG와 XMODIFIERS 이 두개 입니다. 이것만 제대로 설정이 되어 있으면 대부분의 경우 한글 입력에 지장이 없습니다. 이렇게 해서 띄운 모질라나 gedit, kedit에서 입력이 된다면 프로그램의 문제가 아니라 설정의 문제입니다.



4.2 defined이런 에러가 나는데 문제가 있는 것 아닌가요?

   이 메세지는 무시하셔도 좋습니다. ?Session을 지원하는 윈도우 시스템일 경우 ?SessionManager와 연결이 되지만 ?SessionManager 보다 nabi가 먼저 실행이 되거나 ?SessionManager 가 없는 경우는 이런 Warning이 나옵니다. 물론 입력기의 실행에는 아무런 지장이 없습니다.



4.3 Nabi: Can't load config file이라는 메세지가 나오면서 입력이 안되요.

      nabi의 설정을 저장하는 디렉토리 입니다. 없으면 기본값으로 실행되기 때문에 그 Warning은 무시하셔도 됩니다. 또, 문제가 생기면 설정 디렉토리인 $HOME/.nabi를 지워버리는 것도 방법입니다.



4.4 한컴리눅스 오피스에서 입력이 안되요

    /usr/local/?HancomOffice2/Common/ hcoffice_init 파일의 99번째 라인의 export ims="-im nabi"수정하면 나비로 한글 입력 가능합니다. 한컴 오피스 3에서는 121번째 라인입니다. 수정하니 잘 되네요 -- 한컴오피스 게시판에서 --



4.5 한영키가 작동하지 않아요

$HOME/.Xmodmap파일에 아래와 같은 내용을 추가하시고 X를 다시 시작하시면 됩니다.
만일 $HOME/.Xmodmap파일이 없다면 아래 내용만 넣고 새로 만드시면 됩니다.

! for using hangul key

keycode 121 = Hangul_Hanja
keycode 122 = Hangul



4.5 나비를 종료할 수 가 없어요.

나비 0.13이후의 버젼 부터는 ?SessionManager를 지원합니다. 그리고 나비의 특성을 respawn으로 설정해서 나비가 종료하면 ?SessionManager 가 자동으로 나비를 다시 띄우도록 설정이 되어 있습니다. 따라서 나비를 종료하거나, kill해도 ?SessionManager에서
다시 띄우기 때문에 종료하지 않는 것 처럼 보입니다. 나비를 종료하기 위해서는 메뉴에서 프로그램->기본설정->고급->세션 을 선택해서 세션 프로퍼티 창에서 "현재 세션"을 선택하고 거기서 나비 프로세스를 찾아서 "지우기" 버튼을 누르고 "적용" 버튼을 누르시면 나비가 종료하게 됩니다.



4.6 나비와 아미를 같이 사용할수 있나요?

나비(Nabi)는 ?ami와 충돌하는 프로그램이 아닙니다. nabi를 사용하기 위해서 굳이 ?ami를 삭제하거나 종료해야 하는 것이 아닙니다.
?ami가 떠 있는 상태에서도 nabi를 띄우고 사용하고 싶은 프로그램에 환경 변수
XMODIFIERS="@im=nabi"가 설정되어 있으면 그 프로그램은 nabi로 한글 입력이 가능합니다.



4.7 세벌식 두벌 자판은 무엇인가요?

나비의 세벌식 두벌자판은 자판 배열은 두벌식이고 세벌식 오토마타를 사용한 것으로 shift와 자음을 함께 누르면 종성으로 인식되어 입력 할수 있습니다. 두벌식 사용자가 세벌식 오토마타를 테스트 하기 쉽게 하기 위해서 만든 자판 입니다.
도깨비불현상은 나타나지 않겠지만 쉬프트를 기존의 두벌식자판보다도 훨씬 많이 치므로 손이 많이 피곤해질 수 있습니다.



4.8 ?gaim에서 한글 입력할때 마지막 글자가 잘립니다. 이것은 ?gaim의 버그입니다. 이 문제를 해결하는 패치가 ?gaim의 SourceForge프로젝트 페이지에 여러번 등록 되었지만 아직 적용되지 않고 있습니다.

FreeBSD] FreeBSD의 커널을 내가 원하는 대로 초간단...



안녕 하세요? 조성준입니다.


먼저 간단하게 QUICK


cd /usr/src/sys/i386/conf

cp GENERIC MYKERNEL

vi MYKERNEL



# 커널 옵션보기

# http://www.kr.freebsd.org/handbook-new/kernelconfig-config.html



/usr/sbin/config MYKERNEL


cd ../../compile/MYKERNEL


make depend ; make ; make install


cd /usr/src

make buildkernel KERNEL=MYKERNEL ; make installkernel KERNEL=MYKERNEL



# 만약에 오류가 밸생시

http://www.kr.freebsd.org/handbook-new/kernelconfig-trouble.html

FreeBSD] FreeBSD에서 Zend Optimizer 설치하기.



작성자 : 쥬르

이글은 FreeBSD 5.4R 을 기준으로 설명하며, FreeBSD Q&A Mailing에서 나온 내용을 토대로 작성한것임을 밝힙니다.

OS : FreeBSD 5.4
Web Server : Apache 2.x( Ports로 설치)
PHP : PHP 5.x (ports로 설치)

위와 같은 환경에서 ZendOptimizer를 설치 하려고 하면 라이센스 상의 문제로 인해서 설치가 되지 않습니다. 해당 시스템의 /usr/ports/devel/ZendOptimizer 로 이동한 뒤

        # cat Makefile | egrep PORTVERSION

으로 해당 포트에서 사용하는 ZendOptimizer의 버전을 확인한 뒤  

http://www.zend.com  에서 해당 버전의 파일을 받아서 /usr/ports/distfiles  받아 놓는다. 그 다음 해당 포트 (/usr/ports/devel/ZendOptimizer)로 이동해서

        # make install clean

을 실행해서 설치를 하면 된다.

ZendOptimizer-2.5.7-freebsd5.1-i386.tar.gz  의 경우 정상적으로 설치가 되면 아래 메시지가 출력이 되면서  
       [Zend]
       zend_optimizer.optimization_level=15
       zend_extension_manager.optimizer="/usr/local/lib/php/20020429/Optimizer"
       zend_extension_manager.optimizer_ts="/usr/local/lib/php/20020429/Optimizer_TS"
       zend_extension="/usr/local/lib/php/20020429/ZendExtensionManager.so"
       zend_extension_ts="/usr/local/lib/php/20020429/ZendExtensionManager_TS.so"

이 내용을 php.ini 에 추가하라는 메시지도 보입니다.
이후 서버를 재시작(apache)하고 phpinfo()로 확인을 해도 ZendOptimizer가 올라오질 않는데 이런 경우, 다음 파일을 편집합니다. 파일이 없다면 새로 생성해도 됩니다. (현재 사용하는 FreeBSD 5.4R에는 아래의 파일이 없습니다.)

/etc/libmap.conf

이 파일에 다음 코드를 삽입합니다.

[/usr/local/lib/php/20041030/ZendExtensionManager.so]
libm.so.2 libm.so

시스템을 재부팅 시켜 줍니다.
그리고 phpinfo()로 확인하면 ZendOptimizer가 올라오는것이 확인 가능합니다.

FreeBSD] FreeBSD에서 HDD fail일때 에러메시지에 대해



제 목 : FreeBSD에서 HDD fail일 때 에러메시지에 대해
글쓴이 : 좋은진호(truefeel, http://coffeenix.net/ )
글쓴날 : 2004.09.30(목)


다음은 dmesg 명령을 했을 때 결과이다.
 

spec_getpages:(#da/0x20005) I/O read failure: (error=6) bp 0xde8b9244 vp 0xf980a900
        size: 7168, resid: 7168, a_count: 7060, valid: 0x0
        nread: 0, reqpage: 0, pindex: 0, pcount: 2

spec_getpages:(#da/0x20005) I/O read failure: (error=6) bp 0xde8b9244 vp 0xf980a900
        size: 7168, resid: 7168, a_count: 7060, valid: 0x0
        nread: 0, reqpage: 0, pindex: 0, pcount: 2

 

1) 위의 에러 메시지 중에 #da/0x20005 는 device명으로 /dev 디렉토리에서 major, minor number를 보고 어떤 HDD가 fail인지 알 수 있다.

  ls -l /dev/da* 로 확인해보면 /dev/da0s1f 파티션에서 난 에러임을 알 수 있다.


 crw-r----- 2 root operator  13, 0x00020002 6 30 22:13 /dev/da0s1
 crw-r----- 2 root operator  13, 0x00020000 6 30 22:13 /dev/da0s1a
 crw-r----- 2 root operator  13, 0x00020001 6 30 22:13 /dev/da0s1b
 crw-r----- 2 root operator  13, 0x00020002 6 30 22:13 /dev/da0s1c
 crw-r----- 2 root operator  13, 0x00020003 6 30 22:13 /dev/da0s1d
 crw-r----- 2 root operator  13, 0x00020004 6 30 22:13 /dev/da0s1e
 crw-r----- 2 root operator  13, 0x00020005 6 30 22:13 /dev/da0s1f
 ... 생략 ...

 

2) error=6는 에러 번호로 /usr/src/sys/sys/error.h 에 정의되어 있다.
  자주 나오는 에러 코드는 5, 6, 22 정도

#define EIO       5        /* Input/output error */
#define ENXIO      6        /* Device not configured */
#define EINVAL     22       /* Invalid argument */


참고로 /usr/src/sys/miscfs/specfs/spec_vnops.c 파일을 보라.
         

FreeBSD ] FreeBSD Update(운영체제 소스 업데이트하기)



운영체제 소스 업데이트

* cvsup을 이용하여 운영체제 소스를 업데이트 한다.

# cat  /usr/local/user_bin/cvs_update.sh


내용 =================================

#!/usr/local/bin/bash

CVS_PRO=/usr/local/bin/cvsup
SUPFILE_DIR = /usr/local/etc/cvsup
$CVS_PRO -g -L 2 $SUPFILE_DIR/statble-supfile
$CVS_PRO -g -L 2 $SUPFILE_DIR/ports-supfile


* stable-supfile, ports-supfile을 미리 설정해야 한다.


/etc/make.conf설정

* /etc/make.conf 는 시스템을 컴파일하거나 업데이트할때 필요한 옵션을 설정하는 파일이다.

/etc/defaults/make.conf 파일에 쓸 수 있는 모든 항목이 열거되어 있는데 사용자가 바꾸고자 하는 파일은 /etc/make.conf 에 적용하면 된다.


* diff -r /etc/defaults/make.conf /usr/src/etc/defaults/make.conf  =>바뀐부분 확인


내용=======================================

 # grep -v ^# /etc/make.conf

 CPUTYPE=i686
 CFLAGS= -O -pipe
 BDECFLAGS=      -W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align
                 -Wcast-qual -Wchar-subscripts -Winline
                 -Wmissing-prototypes -Wnested-externs -Wpointer-arith
                 -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings

 NO_FORTRAN=     true    # do not build g77 and related libraries
 NO_I4B= true    # do not build isdn4bsd package
 NO_LPR= true    # do not build lpr and related programs
 NO_OPENSSH=     true    # do not build OpenSSH
 NO_SENDMAIL=    true    # do not build sendmail and related programs
 NOGAMES=        true    # do not build games (games/ subdir)
 NOPROFILE=      true    # Avoid compiling profiled libraries
 NOUUCP= true    # do not build uucp related programs
 SUP_UPDATE=     yes
 SUP=            /usr/local/bin/cvsup
 SUPFLAGS=       -g -L 2
 SUPHOST=        cvsup.kr.FreeBSD.org
 SUPFILE=        /usr/local/etc/cvsup/stable-supfile
 PORTSSUPFILE=   /usr/local/etc/cvsup/ports-supfile
 SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
 SENDMAIL_LDFLAGS=-L/usr/local/lib
 SENDMAIL_LDADD=-lsasl2
 KERNCONF=FBMyKernel


* openssh, sendmail을 운영체제에 들어있는것을 사용하지 않고 별도로 포트에 있는것 설치하여 사용. 보안업데이트를 편하게 하기 위한 방법입니다. openssl 은 운영체제에 있는것을 사용하였구요.  sendmail은 별도로 설치하여 사용하므로 위의 sendmail옵션은 불필요할 것입니다.



업데이트하기

* object파일 지우기

  # cd /usr/src && make clean

* make -j 8 world :

  두가지 작업으로 나윈다. make build world는 소스코드를 /usr/obj 디렉토리에 컴파일한다. 성공적으로 끝날경우 make installworld를 하게 되면 컴파일된 바이너리를 적당한 위치에 설치한다. (-j옵션을 이용하여 SMP 기능을 사용할 수 있다.)

* -j 는 동시에 몇개의 작업을 수행할 것인지 정하는 옵션으로 SMP일 경우 8이상의 값을 주어 시간을 단축할 수 있다.

* P-3, 메모리 1G인 서버사양에서 make world에 1:30분정도 소요되었다.



컴파일 후 작업

*mergemaster 스크립트를 이용하여 /etc 디렉토리의 설정파일을 업그레이드 한다.

* /dev 디렉토리 업데이트

  # cd /dev/ ; sh MAKEDEV all

* /stand 디렉토리 업데이트

  # cd /usr/src/release/sysinstall; make all install

* 커널 컴파일 및 리부팅



 커널 컴파일하기

* 설정파일 작성

 # cd /usr/src/sys/i386/conf

 # cp GENERIC FBMyKernel

 # FBMyKernel 편집

 # cd /usr/src

 # make kernel KERNCONF=FBMyKernel (KERNCONF 는 /etc/make.conf에 지정됨)

    make kernel은 make buildkernel과 make installkernel 로 구성됨

 # reboot

 ....

 리부팅후

 # uname -a 로 확인

FreeBSD ] FreeBSD + gnome2 + scim -x윈도우 설치



출처 : http://www.freebsdcity.org/?doc=bbs/gnuboard.php&bo_table=Tips&wr_id=83&sselect=concat(wr_subject,wr_content)&stext=x11&soperator=1&srch_rows=5&srch_comment=1&srch_days=0#c97

1. xorg 설치

# cd /usr/ports/x11/xorg && make install clean


2. gnome설치

설치 중간중간에 옵션을 묻는 창이 뜨므로 수시로 확인하세요
옵션은 대부분 디폴트로 두시는걸 추천합니다.

# cd /usr/ports/x11/gnome2
# make install clean


3. 한글글꼴 설치(필자는 은진체 밖에 안씁니다.)

# cd /usr/ports/korean/aleefonts-ttf/ && make install clean


4. root로 xorgconfig실행

실행후 /etc/X11/xorg.conf가 생성 됩니다. 더 필요한 옵션이 있으면 적절하게 수정하시면 됩니다.


5. 한글입력을 위한 SCIM설치(대세가 nabi대신 scim인듯 합니다.)

# cd /usr/ports/textproc/scim && make install clean

# cd /usr/ports/korean/scim-hangul/ && make install clean

# cd /usr/ports/korean/scim-tables/
이 패키지를 설치 하라고 FreeBSD가 추천합니다만.. 한글입력에 문제가 있습니다.
"내가"를 입력하면 "낵ㅏ"로 입력되어 버리는 좀 황당한 입력기더군요.
설치 하지 않는걸 추천합니다.

startx로 실행하면 system tray에 scim아이콘이 보일것입니다.
기본이 ctrl-space가 한/영 변환이니 설정에서 바꾸시면 됩니다.


6. startup 스크립트 작성

gdm, kdm은 ~/.xsession에 설정하고 startx를 쓴다면 ~/.xinitrc에 아래의 사항을 삽입한다.(없으면 파일을 만들면 됩니다)
.xsession을 쓰실때는 chmod +x ~/.xsession으로 실행권한을 줍니다.

LANG=ko_KR.UTF-8
LC_ALL=ko_KR.UTF-8
LINGUAS=ko_KR.UTF-8

export XMODIFIERS="@im=scim"
export LANG LC_ALL LINGUAS
export GDK_USE_XFT=1
export G_BROKEN_FILENAMES=1
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim
#export XIM_PROGRAM="scim -d"
export FLASH_GTK_LIBRARY=libgtk-x11-2.0.so.0

scim -d

/usr/X11R6/bin/gnome-session


7. gnome 시작

7.1 startx로 시작

# startx

7.2 gdm으로 시작

# vi /etc/rc.conf에 gdm_enable="YES"를 추가 한후 리부팅 하면 gdm이 기본으로 올라옵니다. 다시 한번 강조 하지만 GDM을 쓰실때는 ~/.xinitrc대신 ~/.xsession에 6.의 설정을 해야 합니다.


8 한글, 영문 font매칭 시키기

gnome2를 설치 하면 영문은 sans, 한글은 은진체가 기본으로 매칭 됩니다. 전 우분투를 쓰면서 DejaVu Sans와 은구슬체를 매칭 시킨게 가장 보기 좋아서 그렇게 씁니다. 특정 영문과 한글 폰트를 매칭 시키려면 ~/.fonts.conf를 아래와 같이 수정하시면 됩니다
.fonts.conf가 없으면 파일을 만드시면됩니다. 수정후 gnome 폰트관리자에서 DejaVu Sans로 폰트를 바꾸고 gnome을 재시작하면 됩니다.

<fontconfig>
<match target="pattern">
  <test name="family">
    <string>DejaVu Sans</string>
  </test>
  <edit name="family" mode="append" binding="strong">
    <string>EunGuseul</string>
  </edit>
</match>
</fontconfig>


9. firefox한글화 하기

# cd /usr/ports/korean/firefox-ko/ && make install clean


기 본적인 설정이 끝났습니다. theme와 fonts등등은 기본적으로 프비 포트에 있으니 필요하신것들을 설치 하시면 될겁니다. 여타 리눅스 보다 기본적으로 설치 되는 프로그램이 상당히 없습니다. gimp, xchat, gaim등등등..... 필요하신 프로그램이 많을껍니다.

제가 설치한 스샷을 올립니다. 1280x1024에 cairo 테마를 입힌것입니다.

지금 KDE컴파일 중에 있습니다 컴파일이 끝나면 KDE와 skim설정을 올리도록 하겠습니다.

FreeBSD] CVSUP을 이용한 시스템업그레이드


CVSUP을 이용한 시스템 업그레이드  최준호 저. 
http://www.bsdnet.co.kr/articles/article.qsp?no=17

FreeBSD&Linux] log파일 관리



FreeBSD&Linux] ntpd와 ntpdate를 이용한 시간(타임)동기화


ntpdate 


ntp 서버로부터 시간을 취득해, 로컬의 시스템 클록을 설정합니다. 0.5초 이상 어긋나 있을 때는 단순하게 시간을 맞춥니다만, 0.5초 이하때는 미조정합니다. ntpdate 는, 나중에 설명하는 ntpd 가 움직이고 있을때는, 사용할 수 없습니다.


ntpd 


ntpd 는, ntp 서버를 참조해 시스템 클록을 보정하면서, 클라이언트에 시간을 제공합니다.


ntpdate


ntpdate 는, FreeBSD에 인스톨이 끝난 상태입니다. 이하와 같은 장소에 있습니다.

chaco# which ntpdate

/usr/sbin/ntpdate

chaco# ls -la /usr/sbin/ntpdate

-r-xr-xr-x  1 root  wheel  32392 Sep 19  2001 /usr/sbin/ntpdate



공공적인 ntp 서버의 clock.nc.fukuoka-u.ac.jp 133.100. 9.2 를 설정해, 시간을 취득합니다.

public ntp server list : http://www.eecis.udel.edu/~mills/ntp/clock1.htm

이런 느껴로 설정할 수가 있습니다. (당연, root 로. )



chaco# ntpdate 133.100. 9.2

21 Apr 15:27:35 ntpdate[239]: adjust time server 133.100. 9.2 offset -0. 026094 sec


OS 기동시에 ntpdate 를 실행하려면 , /etc/rc.conf 에 추가합니다.


# add ito 2002/04/21

ntpdate_enable="YES"
ntpdate_program="ntpdate"
ntpdate_flags="-s -b 133.100. 9.2"


재기동하면(자), 기동시의 메세지에 ntpdate 라고 표시될 것입니다.

Doing additional network setup: named ntpdate portmap.



ntpd

ntpd 는, FreeBSD에 인스톨이 끝난 상태입니다. 이하와 같은 장소에 있습니다.

chaco# which ntpd

/usr/sbin/ntpd

chaco# ls -la /usr/sbin/ntpd

-r-xr-xr-x  1 root  wheel  202496 Sep 19  2001 /usr/sbin/ntpd



OS 기동시에 ntpdate 를 실행하려면 , /etc/rc.conf 에 추가합니다.


# add ito 2002/04/21

xntpd_enable="YES"
xntpd_program="ntpd"
xntpd_flags="-p /var/run/ntpd.pid"



-p 옵션은, ntpd demon의 프로세스 ID 를 기록하기 위한 파일명과 패스를 지정합니다.
ntp 의 설정 파일 (ntp.conf)을, /etc 에 작성합니다.


server          time.bora.net
server          time.nuri.net
server          time.kriss.re.kr
driftfile       /etc/ntp.drift


driftfile 란, 시간 오차치를 보존해 두는 파일입니다. /etc/ntp.drift 를 작성.

chaco# touch /etc/ntp.drift



OS 를 재기동한다.

ntpd 의 동작을 확인하기 때문에(위해), ntpq 를 실행합니다. * (이)가 있는 것이, 현재 동기 하는 대상의
서버명입니다.



chaco# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*time.bora.net . GPS.             1 u  228  256  377  116.670  -110. 71  41.277
+time.nuri.net . GPS.             1 u  177  256  377  117.227  -101. 18  34.259
+time.kriss.re.kr  ntp1.xephion.ne  3 u  238  256  377   78.622  -112. 11  44.346
         

FreeBSD]apache 잔잔한 팁들 모음

출처: Unix.co.kr

브라우징 제거

아파치의 디폴트세팅은 브라우징이 enable되어 있다.
브라우징이란 웹브라우저에서 URL입력시 index.html과 같은 정확한 파일명을
생략하고 디렉토리만 적었을 경우, 디렉토리내 파일목록이 출력되는 현상을 말한다.
http.conf의 디렉토리 디렉티브내 다음줄 추가

Options -Indexes


아파치 인증창 사용

http.conf에서 인증을 걸 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig


해당 디렉토리에 다음과 같이 .htaccess파일(텍스트파일) 생성
[root@ns mrtg]# cat .htaccess
AuthName "MRTG를 위한 인증"
AuthType Basic
AuthUserFile /webhosting/mrtg/.auth
require valid-user

AuthName: 인증창 타이틀
AuthType: 인증형태
AuthUserFile: 인증자들의 리스트를 가진 파일(htpasswd명령어로 생성)

-c(create)는 처음 파일을 생성할때 필요하다.
[root@ns mrtg]# htpasswd -c .auth kang
New password:
Re-type new password:
Adding password for user kang
[root@ns mrtg]# ls -l .auth
-rw-r--r-- 1 root root 19 May 3 16:54 .auth


외부 IP접근제어

http.conf의 디렉토리 디렉티브내 다음줄 추가

AllowOverride AuthConfig
Order Allow,Deny
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24
Allow from all

Deny from 에 접근차단할 ip대를 입력.
슬 래쉬(/)뒤의 숫자들은 net mask지정(생략하면 single ip에 대한 차단)


위의 내용을 종합한 예는 다음과 같다.


Options -Indexes FollowSymLinks MultiViews

AllowOverride AuthConfig

Order allow,deny
Allow from all
Deny from 211.43.134.128/24 xxx.xxx.xxx.xxx/24




가상호스트 /Redirect

아래의 예는 dbakorea.pe.kr로 오면, www.dbakorea.pe.kr로 redirect시킨다.
본인은 아파치말고, packet filtering으로 처리하려했으나 실력부족과 게으름으로 인해 그만두었다.

ServerName dbakorea.pe.kr
Redirect / http://www.dbakorea.pe.kr


가상호스트의 전형적인예

ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea-mobile
ServerName mobile.dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/mobile.dbakorea.pe.kr-access_log common
ScriptAlias /cgi-bin/ /webhosting/dbakorea-mobile/cgi-bin/
DirectoryIndex login.html


아파치 정보출력제어
80포트로 telnet후 get / http/1.0하면 나오는 정보제어

ServerTokens Prod[uctOnly]
: Apache 만 보여줌
ServerTokens Min[imal]
: Apache 버젼만 보여줌
ServerTokens OS
: 아파치 버젼과 운영체제를 보여줌
ServerTokens Full (또는 지시하지 않았을때)
: 모두 보여줌


Offline Browser서비스 거부
(출처: http://www.apache.kr.net)
WebZip만 테스트해봤지만 %{User-agent} 라는 변수에 'MSIE 6.0b'와 같이 찍힌다.
한마디로 안된다. 다른 용도로 사용될 지 몰라도,..

<Directory />
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
Deny from env=go_out
</Directory>

#CustomLog /usr/local/apache/logs/access_log common
#CustomLog /usr/local/apache/logs/referer_log referer
#CustomLog /usr/local/apache/logs/agent_log agent
CustomLog /usr/local/apache/logs/access_log combined

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "WebCopier" go_out
</IfModule>

<VirtualHost *>
ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined
</VirtualHost>



아파치 로그 rotate

디폴트로 아파치로그는 wtmp, lastlog등과 같이 일정 시간, 크기..등등에 따라 로그의 순환이 이루어지지 않는다.
logrotate로 3개의 로그를 1달단위로 순환하려면 /etc/logrotate.conf파일의 마지막에 다음과 같이 추가한다.

# system-specific logs may be configured here
/usr/local/apache/log/www.dbakorea.pe.kr-access_log {
monthly
rotate 2
}


바이러스등에 대한 아파치로그 제거

# CodeRed Worm등의 로그제거
SetEnvIf Request_URI default\.ida CodeRed
SetEnvIf Referer \.ida CodeRed
SetEnvIf Request_URI cmd\.exe CodeRed
SetEnvIf Referer cmd\.exe CodeRed
SetEnvIf Request_URI root\.exe CodeRed
SetEnvIf Referer root\.exe CodeRed


ServerAdmin kang@dbakorea.pe.kr
DocumentRoot /webhosting/dbakorea
ServerName www.dbakorea.pe.kr
ServerAlias dbakorea.pe.kr
ErrorLog /usr/local/apache/logs/www.dbakorea.pe.kr-error_log
CustomLog /usr/local/apache/logs/www.dbakorea.pe.kr-access_log combined env=!CodeRed

2012-09-07

Linux] 프린터 설정과 출력하기


프린트 설정과 출력하기

리눅스에서 프린팅하기

리눅스 쓰시다가 프린팅 때문에 고생하셨던분 많을겁니다. 제가 모를때는 그냥 파일을 도스 파티션으로 보내서 도스에서 프린트 하곤 했는데. 리눅스상에서 프린터를 쓰니까 편하군요. :) 문서를 편집했으니 이제 프린트두 해야 컴퓨터를 제대로 쓰는게 되겠죠?
리눅스 상에서 프린팅을 하려면 우선 프린터를 점검 해야 합니다. 터미널 상에서 

    cat 문서화일 >/dev/lp1 (혹은  lp0) 
   ( 0인지 1인지는  해봐야 압니다. 혹은 부팅할때 화면을  유심히 살펴 보시던가..) 

이렇게 해서 문서가 프린트가 되면 우선은 성공한겁니다. 프린터를 쓰려면 커널 컴파일 시에 pararell  printer에서 yes를 선택한다음에 커널  컴파일을 해줘야 합니다.  음.. 다 되었다고 치고  위 명령을 치면 텍스트가 프린트 되는걸로 믿고 계속 나가겠습니다. /usr/local디렉토리에 보면 apsfilter라는 디렉토리가 있습니다.
이 디렉토리에서 SETUP 프로그램을 실행 시키면 여러 가지 물어봅니다 postscript프린터인가  deskjet인가 postscript를 지원하지 않는 프린터 인가.. 

For which printer type do you want to setup apsfilter...
1 - for a Postscript printer
2 - for HP Deskjets
3 -  for another  printer who doesn't  support the  Postscript language      
3 -  for another printer who  doesn't support  the  Postscript languageFor which printer 
     type do you want to setup apsfilter...

데스크젯인경우는 2번을 택하면  되겠고  postscript카드가 있는 프린터는 1번 나머지는 3번을 택하면 되겠네요.

          Do you need a more verbose description of the printer drivers ? y/n ? 
 y를 누르면  프린터에대한 정보들이 나옵니다.  자신과 맞는프린터를  잘 찾아보세요

q를 누르고 프린터 드라이버 맞는걸 선택합니다. 

 [ appledmp bj10e bj200 declj250 eps9high epson epsonc escp2   ibmpro jetp3852 la50 la75 laserjet
   lbp8 lj250 ljet2p ljet3   ljet4 ljet4l ljetplus ln03 m8510 necp6 nwp533 oki182 paintjet pj   pjxl
   pjxl300 r4081 sparc t4693d2 t4693d4 t4693d8 tek4696  ]   pjxl pjxl300 r4081 sparc t4693d2 t4693d4
   t4693d8 tek4696  ]
저같은경우는 hp lazerjet   6p인데 드라이버가 맞는게  없네요. 저같은경우는 ljet4로   선택했습니다.  (ljet4l로 선택하면  300dpi밖에 안나오는군요.) 
     Is your printer a  (c)olor printer 
     or a  (m)onoprinter ?

칼라인지 모노인지 선택하세요

     What paper form do you use (i.e.: a3, a4, letter,...)See /usr/local/apsfilter/doc/paper for valid
     sizes...
     Note: enter the paper form in lowercase letters: 
     Note: enter the paper form in lowercase letters: 

용지의 크기를 선택한후에 

      Do you have a (s)erial or a (p)arallel printer interface ?

parallel프린터라고 설정해준 다음 디바이스를 설정해줍니다. 아까 말한  /dev/lp1 혹은 /dev/lp0을 선택하면 됩니다. 저장을 하면 우선은 OK.
/etc/printcap이란 파일에 지금의 내용이 저장이 됩니다.

보통의 파일은   lpr명령으로 출력할수 있습니다.  출력은  보통  spool에 싸였다가 들어온  순서대로 하나씩  출력을 하게 되는데 만약 이상한 문자가 찍힌다거나 해서 출력을 멈추고 싶을때는 lprm이란 명령을 쓰면 됩니다. 프린터에 무엇이 출력되고   있는지 혹은 출력 될것인지는 lpq라는 명령을 쓰면되는데 lprm이란 명령을 쓰면 lpq했을 때 나오는 출력물들이 모두 취소가 됩니다. (참고로 lprm이란 명령을 쓰지   않으면 리눅스가 돌아가는 상태에서 프린터를 켜놓는다면 이것이 끝날 때 까지 계속 프린터가 작동할 것입니다. 프린터에 있는 취소 버튼을  눌러봤는데 그걸로는 어림도 없더군요..)

글에서 프린팅

글로 들어갑니다. 한글에서  프린트 할  때 적절한  드라이버를 선택해야 합니다. 6p드라이버가 도스용은 있으나 리눅스용은 없는  관계로 이걸로  프린트가 안될겁니다.   따라서  다른 걸로 선택하세요. 저는  lj4   pcl5e.pdr로 선택했습니다. 전송포트에서 표준명령(lpr)을   선택하고 프린터 이름은 raw라고 칩니다. 그러면..  제대로 프린트가 될것입니다.( 저의 경우만 나열해서.. 다른경우는 잘 모르겠네요. 아마도 비슷할겁니다.)

XV에서 프린팅

print버튼을 치면  xv prompt 창이  뜨는데 lpr이라고 기본적으로  써 있을겁니다.  여기서   color grayscale   b/w  등의   버튼이   있는데  흑백 프린터의 경우(제 경우)  b/w(black/white)만 선택하지 않으면 좋은 이미지를 얻을수 있습니다. color나 grayscale이나 찍는 그림은 똑같아요. 이를 선택하면 그다음 용지 선택을 합니다.
세로로 찍을것인가  (portrait) 가로로  찍을것인가 (landscape)  그다음  크기를 어느정도로  할것인가 용지 크기 등등..을  맞춰주고 ok를 누르면 알아서 찍어줍니다.  600dpi로 찍으니까 선명하게 나오는군요..

ps 파일
ghostview로 혹은 gv라는 프로그램을 ps화일을   볼수 있습니다. 대표적인 예가 호랑이  그림(이거 아시는분만 아시는건가?)  아무튼..  s화일로 찍으시면.. 정말  환상적인  그림을 볼수 있습니다.  또한 tex같은걸로 만든 화일도 ps화일로 변환해서 프린트 하면.. 선명하게 나오겠죠?  호랑이 한번찍어보세요..흐흐..

만약 프린터기가 제대로 설정 됐는지 알아 볼려면(설정은 64번에서 설명 했지요) 프린팅의 가장 기초적(?)인 명령을실행시켜 봅니다.

        eun-young:~# cat print.txt > /dev/lp1 (lp0,lp2 일수도 있습니다)
이래서 찍힌다면 일단 한단계는 설공 한 것입니다.
만약 계단현상등이 바생한다면 해결책은 64번이나 아래부분에 있으니 참고 하셔요. 또한 문서를 찍으려면 ps 화일로 바꾸는데 그 방법은 다음과 같습니다.

         eun-young:~# hpscat print.txt > print.ps 

그러면 print.txt 하는 텍스트 문서가 print.ps 라는 ps 화일로 변환 됩니다.
만약 hpscat이 없다는 메세지가 나오면 자료실에 가셔서 hpscat 받으셔요 ^^;ps 화일은 고스트뷰(gv)로 보시면 됩니다.


그럼 잡담은 이만 마치고 본격적인 글로 들어가서...
9번 팁란에 있는 이만용님의 "고스트뷰에서 ps 화일" 이라는 글을 올리겠습니다.

 ____________________________________________________________________________   
오늘 사용담으로 쓰고자 하는 것은 전혀 새로운 내용이 아닙니다. 바로 리눅스 프린팅에서 중요한 화일인 /etc/printcap  화일에 대해서 약간 알아보고자 하는 겁니다. 여러분도 아시다시피 리눅스는 멀티유저 시스템이므로 도스에서와 같이 문서 프린팅시에 프린터 포트에 직접 자료를 보내는 방식을 사용하지 않습니다.
서버/클라이언트 체계를 가지는 리눅스 프린팅 시스템은 lpd 라고 하는 프린팅 서버가 작동하는 상황에서 lpr 이라는 클라이언트의 요청을 받아 적절하게 프린 팅을 해냅니다. 멀티유저/멀티태스킹 상황에서 여러 사용자와 여러 프로그램의 프린팅 요청이 서로 꼬이지 않고 원활하게 이루어지도록 하는 것이지요.

리눅스에 대한 감을 잡기가 힘들었던 초보 시절에는 요놈의 프린팅이 너무도 힘 든 일이었습니다. 특히 저와 같은 HP 데스크젯 사용자들은 PCL 모드 하에서 "계단 현상" 같은 것을 만났을 때는 어찌할 줄을 몰라했을 겁니다. 도대체 엄청나게 많은 셋팅 화일에 어떤 것을 건드려야 할 지도 무서울 지경이었죠.
그래서 프린팅을 할 때는 항상 도스로 부팅해야 하는 우스꽝스러운 짓을 매번 반 복할 수 밖에 없었습니다.

리눅스를 쓰다보면 도스 시절에는 만나기 어려웠던 고급 문서 스타일들을 만나게 되는데요, 그 중에 하나가 바로 포스트스크립트 화일(ps)입니다. 이 문서로 되어 있는 프로그래밍 매뉴얼을 많이 찍는 편인데요, 데스크젯 500 정도에서도 아주 깔 끔한 문서를 얻을 수 있습니다. 제본을 해서 책으로 쓰고 있을 정도니까요航.
또 말이 길어졌군요. 오늘은 X 윈도우에서 포스트스크립트 문서를 볼 수 있는 고 스트뷰(Ghostview)에서 File 메뉴의 Print 항목을 통해서 프린트하는 방법에 대하여 말씀드리겠습니다. 원하실 때는 한 장 한 장씩 프린트를 할 수도 있지요. 한참 동안을 엄두도 못내고 관심도 못져가졌던 printcap 화일이지만, 요즘에 들어서야 뭔가 조금 알 수 있게 된 것 같습니다.
         

------------------------------------------------------------------------------
[ printcap 이란? ]
-----------------------------------------------------------------------------

  여러분의 /etc 디렉토리로 한 번 가보십시요. 그러면 수많은 화일들 중에서 print- cap이라는 화일을 찾으실 수 있을 겁니다. 이 화일은 여러분의 프린팅에 관한 모든 사항을 기재하고 있는 녀석입니다.  이 화일의 목적은 "일관성"입니다.
  예를 들어 아래한글 화일은 아래 한글에 들어가서 프린팅하고, 워드 문서는 워드 프로그램에 들어가서 프린팅하는 것이 일반적입니다. 그래픽 화일은 또 그 나름의 프로그램을 써서 프린팅을 하지요. 하지만 리눅스에서는 이와 같은 사용법을 별로 좋아하지 않습니다. 아래한글 화일 프린팅에 대한 <논리적 프린터명 : 예를 들어서 hwpprn>을 정의하고, 워드 문서 프린팅에 대한 <논리적 프린터명>을 wordprn 이런 식으로 정의해놓고, 실제 프린팅시에는 lpr -P<논리적 프린터명> <문서화일명> 이런 식으로 사용하는 것을 좋아합니다.

  처음에는 신경써주어야 할 것이 좀 많지만, 일단 printcap 화일을 제대로 만들어 만 준다면 항상 lpr 명령을 가지고 손쉽게 프린팅할 수 있어 좋습니다. 

  하나의 물리적인 프린터를 가지고 여러 가지 작동 방식에 대한 논리적 프린터명 과 알맞는 동작을 설정해줌으로써 여러분의 프린터를 요술지팡이로 만들어 드립니다.
------------------------------------------------------------------------------
[ printcap에서 프린터 정의하기 ]
------------------------------------------------------------------------------
   printcap 화일을 한 번 살펴 보십시요. 뭐 이런게 다 있어! 할 정도로 인간이 알 아볼 수 없을 만한 형식으로 프린터를 정의하고 있습니다. 하지만 알고 나면 별 것 아닙니다. 

 <!-- 형 식 -->
 NAME1|NAME2|NAM3:STRING_CAPABILITY=STRING:
:NUMERIC_CAPABILITY#NUMBER:BOOLEAN_CAPABILITY:

  자, 처음 NAME1, NAME2, NAME3 는 논리적 OR 기호 "|"로 분리하여 설정합니다.
이는 lpr -P<NAME> 에서 쓰실 바로 그 이름입니다. NAME1 또는 NAME2 또는 NAlME3 는 모두 같은 논리적 프린터를 지칭하는 말입니다. 하나만 지정해주셔도 되고 3개 까지 지정하실 수 있습니다. 만약 첫번째 이름이 lp 라면 -P 옵션을 주지 않으셨 을 때의 기본 프린터입니다. 다음의 예를 보시죠.

 lp|Deskjet500|Oh my sexy printer: ... 어쩌구 저쩌구
이 때 lp, Deskjet500, Oh my sexy printer 는 모두 같은 프린터를 지칭하는 이름 이 됩니다. lpr -Plp 또는 lpr -PDeskjet500 또는 lpr -P"Oh my sexy printer" 이 렇게 사용하시면 됩니다. 마지막 이름에는 빈 칸이 있으므로 옵션 지정시에 따옴표 로 묶어주셔야겠죠?

  그 다음으로 아셔야 할 사항은 콜론(:)의 사용입니다. 이는 앞으로 모든 셋팅을 서로 구분해주는 구분자(delimeter)의 역할을 합니다. <셋팅1>:<셋팅2>:<셋팅3> 이런 식으로 구분합니다. 꼭 콜론을 하나만 쓰란 법은 없고, 여러번 사용해도 괜찮 습니다. 그리고 프린터 정의를 여러줄에 걸쳐 작성할 때는  문자를 사용합니다. 이런 건 많이 보셨겠죠?

  1. STRING_CAPABILITY 
  여기에 해당하는 것은 lp 옵션과 같이 프린터 포트명 등의 문자열을 지정하는 셋팅 을 말합니다. 문자열로 셋팅하는 경우에는 모두 lp=/dev/lp1 이런 식으로 = 문자를 써주시고 그 뒤에 문자열을 써주십시요.

   2. NUMERIC_CAPABILITY
  여기에 해당하는 것은 mx 옵션과 같이 프린트 작업의 크기를 블럭 숫자!로 나타내 는 경우입니다. 숫자와 관련된 것은 모두 mx#0 뭐 이런 식으로 # 문자 다음에 숫자 를 써줍니다.

   &uuml; 3. BOOLEAN_CAPABILITY
    이것은 논리값에 해당하는 것으로서 그냥 써주면 True 안써주면 False 이므로, 그 셋팅을 써기만 하면 됩니다. sh 나 sf의 경우 그냥 :sh: 또는 :sf: 이런 식으로 말입니다. 뭐든지 실전이 중요하겠지요?

    ------------------------------------------------------------------------------
    [ printcap 실전 ]
    ------------------------------------------------------------------------------
   저의 HP 데스크젯 500 프린터를 가지고 설명드리기로 하겠습니다. 이 녀석은 텍스 트를 출력할 때 도스 스타일로 LF(Line Feed)와 CR(Carriage Return)을 둘 다 보내 주어야 다음 줄에서 정상적으로 찍힙니다. 
 그런데 Un*x 텍스트 문서는 오로지 LF 만을 가지고 있기 때문에 그냥 프린트하면 Carriage Return을 하지않고 Line Feed 만 하므로 어떻게 되겠습니까? 다음과 같이 찍히게 됩니다.
           I'm every woman.
           It's all in me.

   를 출력하면

           I'm every woman.
                        It's all in me.

    이걸 바로 "계단현상" (Staircase Effect)이라고 말합니다.
      이 문제를 해결하기 위해서는 HP 프린터 더러 짜샤! 앞으로 LF는 몽땅 CR+LF로 생 각해! 라고 제어문자를     보내주면 됩니다. 이것이 첫번째 해결방법이지요. 하지만 이런 것이 들어먹지 않는 놈은 sed 등을 이용해서 각 줄마다 CR 문자를 강제로 넣 어서 출력하게 하는 겁니다. 이런 짓을 매번 프린트할 때마다 해준다는것은 좀 문제가 있죠? 그래서 "필터(filter)"라는 개념이 있습니다. if 라는 셋팅에서 해줄것인데, 필터라는 것는 lpr 프린팅에서 아주 중요한 개념입니다. if 필터를 지정해 주면 프린트 시작 전에 문서에 대한 적절한 사전작업과 가공작업을 해낼 수 있습니 다. 실제로 lpr 은 문서에 대한 적절한 처리를 하는 것이 아니라 적절한 처리를 할 수 있는 필터를 불러내서 쓰는 것에 불과하죠. 그 녀석은 프린팅작업의 전체적인 관리인일 뿐입니다. 다른 노가다는 필터들이 합니다.

             lp|Deskjet500:lp=/dev/lp1:
                          :sd=/var/spool/lp1:
                          :sh:
                          :sf:
                          :mx#0:
                          :lf=/var/spool/lp1/HPLog:
                          :if=/var/spool/lp1/LFasCRLF:

      저는 여기서 아주 많이 쓰이는 몇 가지 셋팅에 대해서만 논하겠습니다. 
      자세한 것은 HOWTO 문서(Printing-HOWTO)를 참고하시기 바랍니다. 

    1. lp=/dev/lp1
 lp 는 프린터 포트를 지정하는 것입니다. 여러분의 프린터는 대부분 병렬 포트에 물린 프린터겠죠? 시리얼 프린터는 여기서 설명을 생략합니다. 장치명은 /dev/lp0 /dev/lp1, /dev/lp2 이런 식으로 나갑니다. 어떤 프린터가 작동하는지는  cat README > /dev/lp1 이런 식으로 짧막한 문서를 cat 명령을 통해서 실험해보십 시요. 프린터가 작동하는 장치명이 바로 우리가 사용할 프린터 포트명입니다.
 저는 /dev/lp1 이더군요.
 아! 커널에서 패러렐 프린터 지원을 yes 로 하셨겠지요? :) 
 /dev/null로 하시면 어떤 일이 벌어질까요? 생각해보세요.
 네트워크 프린터의 경우에는 포트라는 개념이 좀 이상하죠? lp= 이라고만 써주셔야 합니다. 자세한 것은 HOWTO 문서를 참고하세요. 중고등학생들을 위해서 누구 멋지 게 번역해주실 분 안계십니까?

    2. sd=/var/spool/lp1
 sd 는 Spool Directory, 스풀 디렉토리를 지정해주는 겁니다. lpr 에 의한 프린팅 은 당연히 멀티태스킹하에서 작동하므로 스풀링을 합니다. 보통 /var/spool 디렉토리의 하부 디렉토리에 지정해줍니다. root 권한으로 적절한 디렉토리를 만들 어서 사용하세요. 그 디렉토리는 다음과 같은 사용자 권한을 갖게 만드세요.
 사용자 root 그룹 daemon 사용자권한 chmod ug=rwx,o=rx 이런 식으로 말입니다.

     3. sh
 lpr 은 다중 사용자 환경에서 쓰이는 멋진 프린터 클라이언트입니다. 따라서 여러분 이 단일 사용자라 할지라도 그런 걸 알 리가 있나요? 보통 한 사람의 작업 이 시작했음을 알리기 위해서 맨 첫 장은 그 사람의 계정명이 찍혀 나옵니다. 이런 일은 필요가 없겠지요? 바로 sh 즉 Suppress Header 라는 셋팅을 주시면 sh가 True 가 됩니다. 

     4. sf
 프린팅 작업이 끝난 후 보통 FormFeed 를 함으로써 종이를 내보냅니다. 이런 일이 필요없다면 sf 즉  Suppress ForeFeed 를 설정하세요. 도트 프린터에서 유용하게 쓰이겠군요. 연속용지에서요.

     5. mx#0
 mx 셋팅은 스풀 데이타의 크기를 제한하는 겁니다. 0으로 지정하면 제한이 없어집 니다. 보통의 경우 그냥 0으로 해주십시요. 왜 스풀 데이타 크기를 제한하는지는 여러분이 생각해보세요. 1K 단위로 지정을 하는데, 만약 지정된 스풀 데이타보다 큰 경우가 발생하면 에러 메세지를 보내고 프린팅을 중지합니다.

      6. lf=/var/spool/lp1/HPLog
 프린팅에 대한 log 상황을 기록하는 화일입니다. 만약 그 화일을 만드시지 않으면 아무런 기록도 생기지 않습니다. 미리 만들어 주셔야 합니다.

      7. 윽! 드디어 필터가!!! if=/var/spool/lp1/LFasCRLF
 자, 이제 중요한 필터가 나왔습니다. 이 녀석이 중요한 일을 해주는 스크립트 화일 입니다. /var/spool/lp1/ 디렉토리에 LFasCRLF 라는 스크립트를 다음과 같이 작성 해주십시요.

            #!/bin/sh
            # Filter for HP printers to treat LF as CRLF
            # the ``echo -ne'' assumes that /bin/sh is really bash     echo -ne 33&k2G
             cat
             echo -ne f

 if 는 Input Filter라는 의미입니다. if 가 있는 경우에는 lpd 는 자료를 직접 프린터 포트에 전송하는 것이 아니라 요놈의 입력 필터를 실행시켜서 그 녀석에게 자료를 stdin 으로 보내줍니다. 그러면 필터는 stdin 으로부터의 입력에 대하여 적절한 처리를 한 후 그 자료를 stdout으로 보내줍니다. 아주 중요합니다. lpd는 필터에게 stdin으로 리다이렉트시켜주고 필터는 stdout으로 자료를 내보냅니다. stdout으로 나오는 자료를 lpd가 포트에다 써주는 겁니다.

 바보 도스에서는 리다이렉트 기능이 보잘 것 없지만, Un*x에서는 정말로 강력한 기능입니다. 비교가 안되지요.

 위 필터는 cat 명령으로 자료를 stdout으로 보내기 전에 echo 명령을 통해서 stdout에다 프린터 제어 문자열을 보냅니다. 물론 HP 데스크젯이 알아듣는 제어 문 자열이겠지요?

앗! 스크립트는 물론 chmod를 이용하셔서 실행가능하게 만드셔야겠죠? :) 사용자 root, 그룹 daemon, 퍼미션은 -rwxrwxr-x 입니다.

이 필터를 어떻게 만드는가는 여러분의 상상력에 달려있습니다.

------------------------------------------------------------------------------
[ printcap 이용하여 Ghostview에서 낱장 PS 찍기 ]

------------------------------------------------------------------------------

다음과 같은 새로운 논리적 프린터 정의를 printcap에 추가해줍니다.

      Deskjet|Ghostview Print|:lp=/dev/lp1:
            :sd=/var/spool/lp1:
            :lf=/var/spool/lp1/GhostviewPrintLog:                       
            :if=/var/spool/lp1/IF_for_ghostview:                        

            :mx#0:
            :sh:

IF_for_ghostview 스크립트의 내용은 다음과 같습니다.

          #!/bin/sh
          gs -q -dSAFER -sPAPERSIZE=a4 -dNOPAUSE -r300 -sDEVICE=djet500 -sOutputFile=- -

아주 간단하죠? 그냥 gs를 이용해서 찍는 것에 불과하죠. 모든 일은 사실 gs가 해 주는 거니까요. 다른 프린터 기종을 쓰시는 분들은 적절히 바꾸어주시면 됩니다.

           -sDEVICE 부분을 바꾸어 주셔야겠죠? -q 와 -dNOPAUSE를 꼭 넣어주시고요.

  중요!!! 필터는 lpd 에 의해 stdin으로부터 자료를 제공받습니다. 그리고는 stdout 으로 자료를 출력해주어야 합니다. 따라서 명령줄의 맨 마지막 줄의 - 는 아주  중요합니다. 그리고 -sOutputFile=- 또한 강제적입니다! :)
이렇게 하시고 나면 X 윈도우용 어플 고스트뷰에서 원하시는 페이지를 찍으실 수 있습니다. 원하는 페이지 한 장 또는 마크(Marked)한 페이지만 찍을 수 있는데, File 메뉴의 Print marked pages... 뭐 이런 메뉴를 클릭하시면 프린터명을 물어 옵니다. 그 때 Deskjet 이라고 적어주세요. 그러면 지잉! 하고 멋진 포스트스크립 트 문서가 찍힐 겁니다.

Linux] 비밀번호를 잃어버렸을때


password를 잊어 버렸을 때

우리는 리눅스를 사용하다 보면 비밀 번호를 잊어 버리는경우가 있습니다. 특히 root의 비밀번호를 잊어버리는 경우는 정말 큰일이 아닐 수 없습니다. 일반사용자라면 root로 로긴해서다음과 같이 고치면됩니다. 그리고 root사용자라면 다음과 같은 방법으로 고치면 되겠습니다. 그래서 다음의 글을 프로그램 세계 5월호에서 인용하겠습니다. 레드햇 사용자라면 리로 프롬프트에서 linux single이라고 입력하고들어갑니다. 그러면 로그인 과정을 거치지 않고 단일 사용자모드로 로그인해 들어가게 됩니다. 그리고 나서 /etc/passwd파일의root 사용자 패스워드를 지워버립니다.
          cd /etc
          vi passwd
          root:JzvRWa.LiXqku:0:0:root:/root:/bin/bash
          →
          root::0:0:root:/root:/bin/bash
         
첫 번째 콜론(:)과 두 번째 콜론 사이의 암호화된 패스워드를 지워서 공백으로 만들고 난 뒤 다시 부팅해서 들어오면 됩니다. 슬렉웨어 사용자라면 부트 디스켓과 비상용 복구 루트 디스켓을 이용하여 플로피만으로 리눅스 부팅한 후에 여러분이 하드에 설치한 리눅스 루트 파티션을 아무 곳에나마운트한 다음 마찬가지로 /etc/passwd 파일을 수정하면 됩니다.

          -stoneonl-

Linux] 리눅스 튜닝전략


리눅스 시스템 튜닝 전략 Ver 0.1
글쓴날 : 2000년 2월
글쓴이 : 문태준
(http://www.taejun.pe.kr, taejun@taejun.pe.kr, taejun@hitel.net)
본 내용은 System performance Tunning 부록 B를 번역 및 편집한 것입니다. 리눅스에 맞게 변경하려고 한 것인데 아직은 베타판입니다. 좀더 수정작업을 해야합니다. 여러분들 의견 주시면 감사하겠습니다.

참고자료 :
System Performance Tunning (O'REILLY 출판사, 영문판) 부록B
(92년도에 나온 책이지만 시스템 관리측면에서 많은 도움을 주는 책입니다)
Essential System Administration (한빛 번역판)
7장 시스템 자원관리
(유닉스 시스템 관리에 관련된 내용을 담고 있습니다. 내용은 괜찮은 편이지만 번역 자체가 깔끔하지는 않습니다)
0. 들어가며
성능에 문제가 생기기전에 시스템을 분석하는것이 정말로 중요하다. 하루중 서로 다른 시간대에 시스템의 load average 가 어느정도 되는지, 대부분의 사용자가 어떤 작업을 하고자하는지?
그리고 시스템의 다른 일반적인 정보에 대해서는 미리 알고 있다고 하고 시작하겠다.
시스템에 문제가 생긴다면 다음을 먼저 점검해보자 ㅇ CPU 로드 측정
ㅇ 메모리 문제 점검
ㅇ 메모리에 문제가 없다면 디스크 I/O 점검
ㅇ 디스크와 메모리에 문제가 없는데도 시스템에 문제가 생기면 CPU의 오버헤드에 문제가 있다.
1. 프로세스 통계 설정(Process Accounting)
먼저 시스템에 프로세스 통계를 설정할 수 있는 프로그램이 설치되어 있어야한다. 필자의 경우 패키지가 포함이 되어있었다. 이에 대해서는 통계 설정에 관련된 내용을 참고한다. 본 필자가 작성한 것이 있으니 그것을 보면 될 것이다.
2. 문제가 생기기전 점검사항
시스템이 정상적으로 작동할때 정기적인 모니터링을 해 두어야 시스템에 문제가 생겼을때 어떻게 해야할지 알 수 있다.
ㅇ 주요 사용자들한테 성능이 괜찮다는 동의를 먼저 얻어야한다. 그리고 시스템
성능을 계속 유지할 수 있도록 정기적으로 점검한다.
ㅇ 시스템 통계 프로그램을 설치했다면 그것을 사용하자. 시스템에서 CPU,
I/O, 메모리 집약적인 다섯개의 프로그램들을 알고 있어야한다.
ㅇ vmstat 등의 프로그램을 이용 I/O연산이 얼마나 분산되어있는지, CPU가
작동하지 않고 노는 시간(idle)은 얼마인지, 정상적인 부하가 걸릴경우
메모리를 얼마나 사용하고 있는지 확인한다.
3. 문제가 생겼을경우
시스템이 정상적으로 잘 작동하고 있을때 모니터링을 했다면, 사용자가 불평하기전에 언제 시스템 성능이 나빠지는지 알수가 있다. 그러면 이러한 문제에 대해서 어떻게 대응해야할지도 알 수가 있을 것이다.
ㅇ 어떤 프로그램을 실행하고 있으며 어떻게 사용하고 있는가? 예를 들어
네트웍을 통해 파일에 접근하고 있다면 네트웍 성능이 떨어지는게 문제의
한 부분이라는걸 알 수 있을 것이다.
ㅇ load average를 보기 위해 uptime 을 실행하자. 줄어들고 있는가 늘어나고 있는가?
높은가 낮은가?
ㅇ ps aux 를 실행해보자
- 디스크 액세스나 페이징을 기다리고 이는 프로세스가 있는가? 그렇다면,
I/O와 메모리를 점검하자.
- CPU, 메모리를 가장 많이 사용하는 프로세스를 찾으면 부하분산에 도움이 될 것이다.
ㅇ vmstat 5 5 를 시행해보자(5초간 5번)
- cpu에서 시스템에서 사용하는 cpu시간(sy 항목)이 50%를 넘는가? 그렇다면 I/O에서
문제가 있는 것으로 예상된다. 소스코드에 접근할 수 있다면 해당 프로그램이
효율적으로 I/O를 사용하는지 점검하자.
- 시스템 전체 부하가 높은데도 cpu에서 휴지시간(idle time, id 항목)이 10%를 넘는가?
그렇다면 I/O나 메모리에 문제가 있는 것으로 예상된다.
- 휴지시간이 항상 0인가? CPU가 100% 사용되는것은 좋은 일이다. 그러나 항상
100% busy인 상태에 있다면 어디선가 작업이 계속 축적되고 있는것이다.
이는 cpu의 과부하를 말해준다.
- 디스크의 활동이 분산되지 않았다면, I/O 작업을 효율적으로 분산시켜야한다.
이중에서 한가지도 해당하지 않고 메모리와 I/O관련 튜닝을 할 필요가 없다고 분석되었다면 CPU에 과부하가 걸린것이다.
CPU의 과부하에 대처할 몇가지 방법이 있다. 그렇지만 CPU의 과부하는 메모리와 I/O문제로 나누어지기때문에 찾아내기 힘든 부분이다.
- 필요없는 대몬을 없앤다. rwhod와 routed는 시스템 성능을 저해하는 프로그램으로
이를 없애는 것만으로도 많은 도움이 될 것이다.
- at이나 cron등을 이용 작업을 밤이나 시스템의 부하가 적을때 실행하는 것도
좋은 방법이다.
- CPU집약적인 작업은 nice를 이용 실행우선순위를 낮추면 편집과 갈은 상호대화적인
작업의 성능이 향상될 것이다.
- cpu집약적인 작업의 실행우선순위를 높이면 작업 자체는 빨라지겠지만 상호대화적인
작업의 성능은 떨어질 것이다.
- nice를 이용하는것은 임시방편일 뿐이다. 부하가 계속 증가한다면 nice를 이용하는
것에도 한계가 있다. 시스템을 업그레이드하거나 부하를 분산할 시스템을 구입하자.

4. 메모리 문제 파악하기
시스템에 과부하가 걸려있는데도 휴지기간(idle time)이 많거나 ps에서 많은 양의 메모리를 필요로 하는 프로그램이 실행되고 있다면 메모리 문제를 생각해 볼 수 있다.
ㅇ vmstat 5 를 실행해보자.
- swap-out이 지속적으로 항상 발생한다면 메모리가 부족한 것이다. 주기적으로 swap-outs이
발생하는건 정상적인 것이다. BSD 시스템에서는 비상호대화적인 작업을 스왑아웃한다.
현재 실행하고 있는 프로그램에서 스왑아웃이 계속 발생한다면 프로그램이 죽을 수도 있으며
심각하게 메모리가 부족하다는것을 가리킨다. 스왑아웃필드(so)가 항상 0에 가까워야한다.
- ps나 통계시스템에서 메모리 집약적인 작업이 있는가? RSS필드나 storage integral이 큰
프로그램을 찾아보자.
(RSS는 프로세스가 사용중인 실제 메모리 크기. kbytes 단위.)
(storage integral은 sa -K 옵션을 이용해 볼수있음.)

메모리 문제를 해결할 몇가지 방법을 찾아보자.
- 시스템에서 버퍼 캐쉬가 있다면 크기를 줄인다. 대신 디스크 I/O성능에 영향을 줄 수있다.
- 정적으로 할당한 스트림 버퍼(STREAMS buffers)가 있다면 , 버퍼(2048-4096 byte)의 크기를 줄인다.
그러면 네트웍의 성능은 떨어질 수 있지만 netstat 를 이용해 현재의 시스템에서
실제로 필요한 버퍼의 크기를 예상할 수 있을 것이다.
- 커널 테이블의 크기를 줄인다. 이를 통해 시스템의 자원을 제약할 수 있다. (파일 갯수, 프로세스
갯수등)
- 많은 메모리를 필요로 하는 프로그램은 밤에 돌리자.
- 많은 메모리를 필요로 하는 프로그램은 배치 큐를 이용해 작업하자. at, cron등 활용
- 자기만 사용하는 프로그램이라면 프로그램에서 메모리를 효율적으로 사용하는지 점검하자.
- 메모리 요구량을 줄이기 위해 공유 메모리를 사용하자.
- sendmail은 메모리를 많이 사용하는 프로그램으로 sendmail을 실행하는데 사용되는 시간에
제한을 두자. 아니면 네트웍을 재구성해서 메일서버를 다른 시스템으로 옮길 수 있다.
- 이막스는 메모리를 많이 사용하는 프로그램으로 다른 에디터를 사용하자.
- 이 모든게 안되면 메모리를 구입하자
5. 디스크 I/O 문제 파악하기
시스템에 과부하가 걸려있는데도 휴지기간(idle time)이 많다면 디스크 I/O 문제를 생각해 볼 수 있다. 보통 메모리 문제와 I/O문제는 서로 관련이 되어있다.
ㅇ vmstat 5 를 실행한다. 그리고 이것을 정상적인 시스템 상황과 비교해본다. 정상적인
경우보다 디스크 연산이 더 높은가?
ㅇ 디스크 활동이 시스템 디스크에 골고루 분산되어있는가?
ㅇ 그렇지 않다면 가장 활동적인 디스크가 가장 빠른 디스크인가?
ㅇ 디스크 활동이 디스크의 특정 영역에 집중되어있는가? 디스크에 적당히 분포되어있는가?
아니면 서로 다른 반대방향의 지점에 있는가?
ㅇ NFS를 사용하고 있는가? 사용자들이 자신의 지역?파일에 접근하는데 속도가 느리다고
보고를 하는가? 원격 파일시스템을 사용하는가? 만약 원격 파일시스템을 사용하면
네트웍 상황에 대해서 살펴보자. 이경우에는 지역 디스크 I/O문제는 아니다.
ㅇ vmstat를 이용 메모리 상황을 살펴보자. 시스템에서 페이징이나 스와핑이 계속 일어나고
있다면, 메모리에 문제가 있으며 이경우 디스크 I/O에 심각한 문제를 초래할 수 있다.
먼저 메모리 문제를 살펴보아야한다.
이에 대한 해결책을 찾아보자.
ㅇ 파일시스템을 재구성하고 가능한한 I/O작업을 분산시킨다.
ㅇ 루트 파일시스템에 가장 빠른 디스크 드라이브와 컨트롤러를 사용한다. 루트 파일
시스템이 대부분 가장 많은 I/O작업을 한다. 특정한 파일의 성능이 중요하다면 성능이
중요한 파일을 하나의 파일시스템에 넣고 이 파일시스템에 가장 빠른 드라이브를
사용한다.
ㅇ 퍼포먼스가 중요한 파일을 블락 사이즈가 큰 파일시스템에 넣는다.
(리눅스에서 기본은 1k)
ㅇ 버퍼 캐쉬의 크기를 늘린다. 그러면 대신 메모리에 문제가 생길 수 있다.
ㅇ 단편화를 제거하기 위해 주기적으로 파일시스템을 재구성한다.
ㅇ 자주 사용하는 파일을 파일시스템의 시작부분에 집중시키는 프로그램을 사용할수 있다.
디스크 용량에 문제가 생길 수도 있다. 파일시스템에 여유공간이 부족한가?
그렇다면 몇가지 방법을 생각해보자.
- 필요없는 파일을 cron 등을 이용 정기적으로 삭제하자. 오래된 코어 덤프 파일,
에디터 백업파일, auto-save 파일 등등.
ㅇ 디스크 쿼터를 이용해 사용자의 디스크 용량 사용을 제한할 수 있다.
ㅇ 매우 작은 파일이 모여있는 파일시스템에는 작은 블럭 사이즈를 사용한다.
(소스 코드, 작은 데이타 파일 등등)
6. 네트웍 문제 점검
네트웍 문제 점검
ㅇ rlogin이나 NFS를 이용하 파일에 접근하는 사용자가 성능이 느리다고 생각이
든다면 이는 네트웍 용량이나 데이터 정합성이 문제가 있을 수 있다.
ㅇ netstat -i 를 실행하자. 충돌(collison)이 크면 네트웍에 오버헤드가 걸렸다고
생각할 수 있다. input이나 output 에러가 많다면 하드웨어 문제일 수 있다.
입력에러가 많다면 네트웍의 특정한 곳에 문제가 있을 가능성이 크며
출력에러가 많다면 시스템과 네트웍 인터페이스에 문제가 있을 가능성이 크다.
ㅇ 충돌이나 네트웍 하드웨어의 문제가 아니라면, 어떤 시스템이 가장 느린지를
찾아야한다. spray 프로그램을 이용해 느린 시스템에 다량의 패킷을 보내자.
dropped 패킷이 크다면, 원격 시스템은 아마도 들어오는 자료에 대해 충분히
빠르게 대응하지 못할 것이다. 원격 시스템에 cpu, 메모리, 디스크 I/O문제가
있는지 확인하자. 그게 아니라면 그 시스템은 네트웍의 과부하에 견디지 못할 것이다.
네트웍을 다시 재구성하고 느린 시스템을 파일 서버로 사용하지 말자.
ㅇ droppted 패킷이 많다면 데이타 corruption 이 많다는 것이다.
원격 시스템에서 netstat -s를 실행한다. 그리고나서 지역 시스템에서 원격 시스템으로
spray 명령을 사용하고 다시 netstat -s 를 실행한다. UDP socket full drops가
증가하는게 spray의 결과에서 나온 drop 패킷과 같거나 더 많다면 원격 시스템은
느린 네트웍 서버이다. socket full drops 의 증가하는 숫자가 dropped 패킷보다
작다면 네트웍에 문제가 있는지 확인해보자.
ㅇ nfsstat 를 실행하고 클라이언트의 RPC 데이타를 관찰해보자.
생략...
ㅇ 현재의 시스템에서 스트림 기반 네트웍 작업을 한다면, netstat -m (?. 안돔)
을 실행하자. 충분한 스트림 버퍼가 있는가?
네트웍 부하 줄이는 방법
ㅇ 사용자가 네트웍을 통해 I/O집약적인 프로그램을 실행하지 않도록 막자.
grep 프로그램이 I/O 집약적인 프로그램중의 대표적인 예이다. 대신 네트웍을 통해
로그인해서 작업하자.
ㅇ 네트웍에 연결된 컴퓨터와 디스크를 재구성해서 가능한 많은 사용자가 지역
지역 시스템에서 작업을 하도론 만든다.
ㅇ 디스크없는 워크스테이션의 숫자를 줄인다. 가능하다면 이런 워크스테이션은 제거한다.
ㅇ 뛰어난 네트웍 성능을 가진 시스템을 파일서버로 사용한다.
ㅇ 스트림 버퍼가 작다면(그리고 SunOS 4.0이나 System V.3또는 이전 버전을 운영한다면)
버퍼를 늘리기 위해 커널을 재구성한다.
데이터 integrity(정합성)에 문제가 있다면 유일한 해결책은 문제가 있는 하드웨어를 찾아서 바꾸는 것이다. 네트웍 분석툴이 이러한 작업을 하는데 반드시 필요할 것이다.
7. 터미널 I/O
유닉스 시스템은 전형적으로 터미널에 아주 높은 우선순위을 준다. 그래서 키보드에서 작업을 하고 반응을 확인하는데 문제가 생기는 경우는 거의 없다. 그렇지만 몇가지 문제가 생길 수 있느것을 생각해보자.
ㅇ ps에서 getty 프로세스에서 사용하는 시간이 계속 늘어나고 있다면
누군가가 터미널 라인에서 채팅을 하고 있는 것이다. 파일을 수정해서
터미널 라인을 사용하지 못하게 하자. (어떤 파일은 시스템과 연관되어 있다)
ㅇ 사용자가 터미널의 성능에 대해 불평을 하는 경우 시스템에 직접 연결된 것인지,
아니면 rlogin을?사용한 것인지, X 터미널인지, 아니면 다른 방법을 이용해 연결한
것인지 확인을 하자. 이럴경우 터미널 I/O문제라기보다 네트웍에 문제가 있을
가능성이 많다.
ㅇ 상호대화적인 작업에서 반응이 느리다면 CPU 성능에 관련된 문제를 해결하는게
좋다. System V.2, V.3 또는 SunOS 4.0를 사용하고 있다면 스트림 버퍼가 부족할 수도 있다.
netstat -m을 실행하고 samll data blocks 할당에 문제가 있는지 살펴조자(?)
그러다면 커널에서 스트림 버퍼를 더 작게한다?
8. 일반적인 팁
몇가지 상호대화적인 작업의 성능을 향상시킬수 있는 몇가지 팁이 있다.
ㅇ pwd 대신 dirs를 사용한다.
ㅇ ps를 가급적 사용하지 않는다.
ㅇ sh 를 사용하는 경우, 경로를 줄여서 사용한다.
ㅇ 디렉토리당 파일을 최소화한다.
ㅇ 이막스대신 vi 등을 사용한다.
ㅇ grep이나 fgrep 대신 더 빠른 egrep을 사용한다.?
ㅇ NFS를 사용하는 경우 grep이나 I/O집약적인 프로그램을 실행하지 않는다.
ㅇ 원격시스템의 파일에 접근하려면 NFS대신 rlogin을 사용한다.