Ubuntu 리눅스를 사용을 하고, Eclipse를 설치한 것으로 하고, 시작을 한다. (그렇다고 꼭 우분투를 설치하라는 것은 아니다.)- gcj 그리고 java gnome 설치 :
sudo apt-get install gcj libgtk-java libgnome-java libglade-java libgconf-java- Eclipse에서 gcj jre 설치 :
Preferences --> Java --> Installed JREs 에 gcj-jre (Name), /usr/lib/jvm/java-gcj/jre (Location) 추가


- Eclipse에서 새 프로젝트 생성후, gcj jre를 시스템 라이브러리로 설정 :
Project Properties --> Libraries --> 설정되어 있는 JRE System Library를 Remove
Project Properties --> Libraries --> Add Library --> JRE System Library --> Alternate JRE 에 gcj-jre 설정

- Java Gnome JARs를 프로젝트에 등록 :
Project Properties --> Libraries --> Add External JARs 하여,
/usr/share/java/glade2.x.jar
/usr/share/java/gnome2.x.jar
/usr/share/java/gtk2.x.jar
/usr/share/java/gconf2.x.jar 추가
* ex) gnome2.10.jar -> gnome2.10-2.10.1.jar로 링크되는 구조이니, gnome2.10.jar를 등록.

- 예제 소스 생성 - HelloWorldGNOME.java








코드:
import org.gnu.gnome.App;
import org.gnu.gnome.Program;
import org.gnu.gtk.Button;
import org.gnu.gtk.Gtk;
import org.gnu.gtk.event.ButtonEvent;
import org.gnu.gtk.event.ButtonListener;
import org.gnu.gtk.event.LifeCycleEvent;
import org.gnu.gtk.event.LifeCycleListener;public class HelloWorldGNOME {public HelloWorldGNOME() {

App app = new App("Hello", "Hello World!");
Button btn = new Button("Click me!");

btn.addListener(new ButtonListener() {
public void buttonEvent(ButtonEvent e) {
if (e.isOfType(ButtonEvent.Type.CLICK)) {
System.out.println("Hello, " + System.getProperty("java.fullversion"));
}
}
});

app.addListener(new LifeCycleListener() {
public void lifeCycleEvent(LifeCycleEvent arg0) {
}
public boolean lifeCycleQuery(LifeCycleEvent arg0) {
// quit the app...
System.out.println("Quit...Bye!");
Gtk.mainQuit();
return false;
}
});

app.getVBox().add(btn);

app.setDefaultSize(150, 50);
app.showAll();
}

public static void main(String[] args) {
Program.initGnomeUI("Hello", "0.1", args);
new HelloWorldGNOME();
Gtk.main();
}
}

- 작성된 HelloWorldGNOME을 실행
gtkjni 에러가 나는 경우, Run.. --> Arguments --> VM Arguments 에 -Djava.library.path=/usr/lib 를 추가.

- glade를 사용하는 것은 여기의 동영상을 참조해 보시고, 가자~ 자바+그놈의 세계로...

'Application > Linux' 카테고리의 다른 글

Gnome Change-Workspace  (0) 2006.06.05
Gnome Shortcut  (0) 2006.06.05
[우분투+Eclipse+GCJ+JavaGNOME] HelloWorldGNOME 만들기  (0) 2006.06.05
우분투/데비안에서 cvs를 이용한 MPlayer 빌드  (0) 2006.06.05
The GNU Manifesto  (0) 2006.06.05
Find 명령어  (0) 2006.06.04
우분투 Mplayer gui gtk2 patch에서 cvs를 이용한 mplayer 빌드 내용이 있긴 합니다만, 패키지 만들기나 옵션, 한글화 등의 내용을 정리햇습니다. 기본적인 내용은 MPlayer 사이트Debian packagingREADME, 우분투 포럼MPlayer compilation from CVS의 설치에 관한 것에 컴파일 옵션과 한글 관련된 부분을 추가한 것입니다.참고로 CVS 버전은 gtk2가 적용되어 있고 마우스 오른쪽 클릭 버그가 고쳐져 있습니다. 빌드 환경은 우분투 브리지(5.10) AMD64입니다. i386에서도 별문제 없이 적용 될 것 같네요.

----
    1. 먼저 필요한 패키지들을 추가합니다.







    코드:
    sudo apt-get install build-essential libx11-dev libxv-dev libpng12-0 libpng12-dev checkinstall libavcodec-dev aalib1 libaa1-dev libaa1 caca-utils libcaca-dev libavcodec-dev libavifile-0.7-dev libsdl1.2debian-all libsdl1.2debian libsdl1.2-dev libesd0-dev libfaac-dev libfaad2-dev libgtk2.0-dev liblame-dev libice-dev libjpeg62-dev libmatroska-dev libmad0-dev libmpcdec-dev libmp4v2-dev libmikmod2-dev libogg-dev libtheora-dev libvorbis-dev libxinerama-dev libxv-dev xlibs-dev x-dev cvs libquicktime1 libquicktime-dev libmjpegtools0 fakeroot

    2. CVS에서 MPlayer 다운받기







    코드:
    cvs -d:pserver:anonymous@mplayerhq.hu:/cvsroot/mplayer login
    cvs -z3 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/mplayer co -P main


    암호를 물어보면 그냥 엔터를 치세요. 나중에 다시 CVS와 sync한다면 아래의 명령을 해 주면 됩니다.








    코드:
    cvs -z3 update -dPA

    3. Codec 설치
    내부적으로 코덱을 같이 포함시킵니다.








    코드:
    cvs -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg login
    cvs -z3 -d:pserver:anonymous@mplayerhq.hu:/cvsroot/ffmpeg co -P ffmpeg


    암호를 물어보면 그냥 엔터를 치세요. 생성된 ffmpeg 디랙터리 아래에 livavcodec, libavformat, libavutil 디렉터리를 2번에서 생성한 main 디렉터리 아래로 복사해줍니다. 그리고 2번의 main/CVS/Entries 파일의 제일 뒤에 다음 내용을 추가 해 줍니다.








    코드:
    D/libavcodec////
    D/libavformat////
    D/libavutil////

    4. MPlayer 컴파일
    2번의 main 디렉터리에서 아래 명령을 실행시켜줍니다. 아래 명령을 내리기 전에 /usr/lib/win32 에 윈도우 코덱 dll을 설치하시기 바랍니다.








    코드:
    DEB_BUILD_OPTIONS="--enable-gui --enable-largefiles --enable-menu --enable-fribidi --prefix=/usr --confdir=/etc/mplayer --mandir=/usr/share/man --language=ko --disable-rtc --with-codecsdir=/usr/lib/win32" fakeroot debian/rules binary


    보통 처음 세 옵션만 기본적으로 적용합니다만 --enable-fribidi도 추천합니다. 그리고 그 뒤에는 우분투/데비안의 디렉터리 구조에 맞게 설치위치를 적용하고, --language=ko 옵션은 기본 언어를 한글로 합니다. (이게 없어도 로케일로 동작해야 합니다만, 저게 없으면 제대로 한글이 안나오더군요)
    그리고 --disable-rtc 옵션은 MPlayer를 실행시키면 max_freq를 설정하라는 게 보기 싫어서 꺼버렸습니다. MPlayer 문서를 읽어보니 rtc를 이용하지 않으면 +-10ms의 오차가 있는 이전 방법을 사용한다고 되어 있는데, rtc를 사용하려면 echo 1024 > /proc/sys/dev/rtc/max-user-freq 를 하라고 되어 있더군요. 문제는 installer가 이걸 해주지 않기 때문에 귀찮아서 아예 옵션에서 꺼버렸습니다. 마지막으로 --with-codecsdir=/usr/lib/win32은 우분투의 기본 코덱 경로입니다. 컴파일 할 때에 코덱이 저 위치에 있어야 합니다.

    5. 패키지 설치







    코드:
    sudo dpkg -i mplayer*.deb


    그놈에서 프로그램->음악과 비디오에 MPlayer가 추가됩니다.
    6. 스킨 설치
    http://www.mplayerhq.hu/homepage/design7/dload.html에서 스킨을 다운받아 설치합니다. 설치 경로는 /usr/share/mplayer/Skin이고, default가 반드시 있어야 합니다. 다음은 제 설정입니다.








    코드:
    uriel@nuri:/usr/share/mplayer/Skin$ ls -ls
    total 4
    4 drwxr-xr-x 2 root root 4096 Mar 13 2005 clearlooks-mplayer
    0 lrwxrwxrwx 1 root root 19 Nov 28 22:36 default -> clearlooks-mplayer/

    7. 폰트 설정
    MPlayer에 폰트를 설정하는 방법은 여러가지가 있습니다. 제 경우는 truetype을 사용하게 했는데, 이게 fontconfig/freetype의 여부로 시스템마다 다를 수 있습니다. 우분투 브리지를 기준으로 하면 ~/.mplayer/subfont.ttf가 실제 폰트의 링크로 되어 있어야 합니다. MPlayer GUI에서 선택사항 -> 글꼴에서 글꼴을 지정하면 제대로 동작하지 않습니다. 다음은 제 설정입니다. 은글꼴을 사용했습니다.








    코드:
    ln -s /usr/share/fonts/truetype/unfonts/UnBatang.ttf ~/.mplayer/subfont.ttf

    8. 한글 설정
    MPlayer를 띄워서 선택사항->자막&OSD에서 인코딩은 한국어(CP949), "유니코드 자막" 옵션을 선택합니다. 선택사항->글꼴에서 인코딩은 유니코드를 선택합니다.
GNU 선언문
The GNU Manifesto
--------------------------------------------------------------------------------
저 작권과 사용 허가에 대한 본 사항이 명시되는 한, 어떠한 정보 매체에 의한 본문의 전재나 발췌도 허용되며 상업적 이용을 포함할 수 있는 지속적인 배포에 따른 사용상의 모든 권리는 문서의 취득자에게 조건없이 양도된다. 1993년의 개정 이후, GNU 선언문은 영구 보존문으로 남아있게 될 것이며 원문에 대한 어떠한 형태의 수정과 첨삭도 허용되지 않는다.
Original Copy: The GNU Manifesto
Copyright (C) 1985, 1993 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA

Korean Translator: Ha Jaewon 하재원
Amendment Translator: 1998 Song Changhun 송창훈 chsong@cyber.co.kr
--------------------------------------------------------------------------------

개정본 역자 참고 사항
2차적 저작권의 포기 여부에 상관없이 선행 작업에 대한 존중의 표시로 원역자를 통해서 문서를 개정하려고 했지만, 상당한 노력에도 불구하고 원역자와 연결될 수 없었기 때문에 다음과 같은 기준에 의해서 문서를 개정한다.

1) GNU 정신에 입각해서 중복 작업이라는 소모적인 비효율성을 피하고 선행 작업의 노력과 성과를 가능한 그대로 유지하기 위해서 본질적인 내용 전달 상의 오역만을 수정한다.

2) 1993년 개정문에 대한 내용들을 새롭게 첨가시킨다.

--------------------------------------------------------------------------------
GNU 선언문은 GNU 프로젝트가 시작되었을 당시, 많은 사람들의 참여와 지원을 요청하기 위해서 리차드 스톨만에 의해서 작성되었다. 처음 몇 년 동안은 프로젝트의 발전 상황을 설명하기 위해서 부분적인 개정이 이루어 졌으나 문서가 널리 확산됨에 따라서 많은 사람들이 인지하고 있는 내용 그대로를 보존하는 편이 낫다고 판단하게 되었다.

문서에 대한 보존이 결정된 이후로, 우리는 일반적인 오해의 여지가 있는 몇몇 단어에 대한 문제점들을 알게 되었고 1993년에 주석을 첨가하는 것으로 해석상의 난점들을 명확하게 정리하였다.

GNU 소프트웨어에 대한 최신 정보는 GNU의 게시판 (GNU's Bulletin)을 참고하기 바란다. 분량 상의 이유로 이 문서에서는 생략하기로 한다.
GNU란 무엇인가? GNU는 유닉스가아니다!
GNU란 'GNU는 유닉스가 아니다'(Gnu is Not Unix)를 의미하는 재귀적 약어다. GNU는 유닉스와 완벽하게 호환하는 소프트웨어 시스템이며 사용 가능한 모든 이가 자유롭게 사용할 수 있도록 작성한 것이다. (1) 몇몇 다른 자원자들이 도움을 주고 있으며 많은 시간적, 금전적 지원과 프로그램과 장비가 절실히 필요한 상태이다.

지금까지 우리는 편집 명령을 작성하기 위한 인공 지능 언어 리스프(Lisp)를 갖춘 Emacs 문서 편집기, 소스 수준의 디버거(debugger), yacc 호환 파서 생성기(parser generator), 링커등 35개 가량의 유틸리티를 만들어 왔으며, 쉘(shell-명령어 번역기)은 거의 완벽한 수준에 이르렀다. 이식성 있게 최적화된 C 컴파일러가 새로이 제작되었으며 이번 해에 배포될 것이다. 이미 커널(kernel)을 갖고 있기는 하지만 유닉스를 구현하기 위해서는 보다 많은 사양들이 추가되어야 할 것이다. 커널과 컴파일러가 완성되면 프로그램 개발에 적합한 GNU 시스템을 배포할 수 있을 것이다. 우리는 문서 형식기(text formatter)로 TeX를 사용할 것이며, nroff도 여전히 사용될 것이다. 또한, 이식성을 갖춘 공개 소프트웨어인 X 윈도우 시스템도 사용할 것이다. 이런 후에 이식성을 확보한 Common Lisp, 게임 프로그램인 Empire, 스프레드시트(spreadsheet) 등과 수많은 다른 프로그램을 온라인 문서를 포함하여 추가할 것이다. 우리는 결국, 일반적인 유닉스 시스템의 모든 기능을 갖추게 될 것이다.

GNU는 유닉스 프로그램들을 사용할 수 있게 해주지만 유닉스와 동일한 것은 아니다. 우리는 다른 운영체제에서의 경험을 살려 가능한 사용하기 편리하도록 향상을 꾀했다. 특히, 긴 길이와 복잡한 조합 형태의 파일 명을 쓸 수 있게 하고, 파일 버전을 표시하고, 견고한 파일 시스템을 구축하고, 터미널 비 의존적인 디스플레이 장치를 지원할 계획이며 최종적으로 몇 개의 리스프 프로그램과 일반적인 유닉스 프로그램이 한 화면을 나누어 쓸 수 있는 리스프 기반의 윈도우 시스템을 만들 것이다. 시스템 프로그래밍 언어로 C와 리스프 두 가지를 다 사용할 수 있을 것이다. 일대일 네트워크 기능인 UUCP(Unix to Unix Copy Program), MIT Chaosnet, 인터넷 프로토콜을 지원할 것이다.

GNU는 본래 가상 메모리를 가진 모토롤라(motorola)사의 68000/16000 CPU 계열의 컴퓨터를 겨냥하고 제작되었다. 그 까닭은 그 기계들에서 GNU를 가장 쉽게 작동시킬 수 있기 때문이다. 보다 작은 컴퓨터에서 작동시키기 위해서는 사용하고자 하는 사람이 특별한 노력을 기울여야 할 것이다.

심각한 혼동이 야기될 수 있으므로 'GNU'가 소프트웨어 시스템이 아닌 이 프로젝트 자체를 지칭할 때는 'GNU'의 'G'를 반드시 발음해 주기 바란다.

왜 GNU를 작성해야만 했는가?
어떤 프로그램을 좋아한다면 당연히 그것을 좋아하는 사람들과 함께 나누는 것이 황금률(대우받고자 하는 데로 대하라-성서)이라고 생각한다. 소프트웨어를 판매하는 사람들은 사용자를 각각 구분하고, 그들 위에 군림하고, 사용자 서로가 프로그램을 공유하는 것을 막고자 한다. 나는 이런 식으로 사용자간의 결속이 깨지는 것을 거부한다. 나는 올바른 양심으로 비공개 협정이나 소프트웨어 라이센스 협약에 서명할 수 없다. 여러 해 동안 인공지능 연구소에서 일하면서 그러한 경향과 다른 박정한 일들에 저항해 보았지만 결국에는 그들의 승리로 끝나고 말았다. 내 의지에 역행하는 그런 일들이 일어나는 연구소에 나는 더이상 머무를 수가 없었다.

내가 계속해서 명예를 손상시키지 않고 컴퓨터를 사용하기 위해서 나는 사용이 제한되는 소프트웨어들을 더이상 이용하지 않고도 작업을 해 나갈 수 있는 충분한 자유 소프트웨어의 본체를 만들 결심을 했다. 나는 MIT(Massachusetts Institute of Technology) 측이 어떠한 법률적 근거에 의해서도 GNU의 자유로운 배포를 제지하지 못하도록 하기 위해서 연구소를 그만두었다.

유닉스와 호환성을 가지는 이유
유닉스가 이상적인 운영체제라고 생각하지는 않지만 제법 쓸만하다고 할 수 있다. 유닉스의 골자는 훌륭한 것이며 나는 유닉스의 장점을 해치지 않고도 부족한 점들을 메울 수 있으리라고 생각했다. 그리고 유닉스와 호환성을 가지면 다른 많은 사람들이 적응하기에도 편리할 것이라 생각했다.

GNU를 사용하는 방법


GNU는 저작권이 인정되는(not public domain) 소프트웨어다. 누구나 GNU를 개작하고 배포할 수 있지만 어떤 이도 GNU가 보다 널리 배포되는 것을 제한할 수 없다. 즉, 변경한 내용을 독점할 수 없다는 것이다. 나는 모든 버전의 GNU가 공개된 채로 남아 있기를 보장받고 싶은 것이다.

많은 프로그래머들이 동참을 원하는 이유
나는 그 동안, GNU에 흥미를 느끼고 돕고자 하는 많은 프로그래머들을 찾을 수 있었다.

많은 프로그래머들은 시스템 소프트웨어가 상용화된 것을 불쾌하게 생각한다. 이렇게 함으로 해서 보다 더 많은 돈을 벌 수는 있겠지만 일반적으로 이런 상황에서는 프로그래머들이 서로를 동지로 느끼기보다는 투쟁해야 할 대상으로 느끼게 된다. 프로그래머들 사이의 우정을 나타내는 가장 기본적인 행동은 프로그램을 나누는 것이다. 이제는 전형적인 핵심으로 여기는 마케팅 협정은 프로그래머들이 친구로서 다른 프로그래머를 대하는 것을 금하고 있다. 소프트웨어를 구입한 자는 우정과 준법 중 하나를 선택해야만 한다. 물론 자연적으로 많은 이들이 우정을 보다 중요시한다. 그러나 법의 존재 가치를 인정하는 사람들은 어떤 결정을 내리든 편한 마음을 가질 수 없다. 그들은 냉소적이 되어 프로그래밍은 단지 돈을 버는 수단이라고 생각하게 된다.

그러나 독점적인 프로그램들 대신 GNU를 사용하게 되면, 우리는 모든 이에게 온정을 가질 수 있으며 법도 준수하게 된다. 게다가 GNU는 공유의 표본으로써 다른 이가 우리와 함께 공유에 동참하도록 고무하는 깃발 노릇도 한다. 이는 우리가 상용 프로그램을 쓸 때는 느낄 수 없는 조화로운 느낌을 갖게 한다. 나와 대화한 프로그래머들 중 거의 반정도는 이것은 돈이 대신할 수 없는 중요한 행복이라는데 공감했다.

당신이 기여할 수 있는 방법
나는 제조업자들에게는 기계와 돈을, 개인들에게는 프로그램과 노동을 지원해 줄 것을 요청한다.

컴퓨터를 기증해서 기대할 수 있는 중요한 점은 GNU가 머지않아 그 기계에서 작동 할 것이란 점이다. 기증된 컴퓨터는 완전해 질 것이며 따라서, 시스템을 사용할 준비를 모두 갖추게 되어 능력과 효율을 과대 포장할 필요가 없을 것이다.

나는 GNU를 위해 시간제로 일하기를 갈망하는 많은 프로그래머들을 찾을 수 있었다. 대부분의 프로젝트에서 이러한 시간제로 배치된 작업을 통합하고 조정하는 일은 매우 어려웠다. 독립적으로 쓰여진 부분들은 함께 동작하지 않았다. 그러나 유닉스를 이용할 경우에는 그러한 문제가 생기지 않는다. 완전한 유닉스 시스템은 개별적인 설명이 포함된 백여 개의 유틸리티를 포함한다. 대부분의 인터페이스 사양은 유닉스에 호환되도록 맞추어 진다. 만약 각각의 프로그래머가 유닉스 유틸리티 한 개를 유닉스에 호환하도록 재 구현하고 본래의 유닉스 시스템에서 충분히 작동하게 할 수 있으면, 이것들은 함께 묶어 놓아도 올바르게 작동할 것이다. 예기치 못한 문제 발생의 가능성을 고려한다 하더라도 전체적인 구성 요소들을 통합하는 작업은 충분히 가능할 것이다(커널을 만드는 작업은 세밀한 대화가 필요할 것이며, 소수의 호흡이 잘 맞는 집단이 적당할 것이다)

만일 내가 금전적인 지원을 얻는다면 약간의 인원을 전일제나 시간제로 고용할 수 있을 것이다. 일반적인 프로그래머의 수준보다 높은 봉급을 줄 수는 없겠지만 돈을 가지는 것만큼이나 공동체 의식을 정립하는 일도 중요한 의미를 가진다고 생각하는 사람들을 찾아 볼 것이다. 이런 사람들에게 적절한 보수를 제공하는 것은 그들이 생계에 대한 절박함에서 벗어나서 보다 자유롭게 그들의 모든 역량을 GNU에 집중할 수 있도록 할 수 있는 방법이 될 것이다.

모든 컴퓨터 사용자가 이득을 얻게 되는 이유
일단 GNU가 작성되니까, 마치 공기처럼, 모든 사람들이 훌륭한 시스템 소프트웨어를 자유롭게 얻을 수 있게 되었다. (2)

이것은 단지 모든 이에게 유닉스의 사용에 대한 비용을 덜어 주는 것보다 훨씬 더 많은 의미를 가진다. 이는 시스템 프로그래밍에 드는 노력이 불필요하게 중복되는 것을 피할 수 있음을 의미한다. 대신, 절약된 노력은 기술 수준을 향상시키는데 사용될 것이다.

시스템에 대한 모든 소스 코드가 모든 사람에게 제공될 것이다. 결과적으로, 시스템에 변화를 주고자 한다면 언제든지 스스로 자유롭게 수정할 수 있을 것이다. 혹은 적당한 프로그래머나 업체에 의뢰할 수도 있을 것이다. 사용자들은 더이상 프로그램 소스를 독점적으로 소유하거나 이를 수정할 수 있는 프로그래머나 회사에 의존하지 않아도 될 것이다.

학교는 모든 학생들이 시스템 코드를 배우고 향상시키도록 장려함으로써 보다 나은 교육 환경을 조성할 수 있을 것이다. 하버드 대학의 컴퓨터 연구소에서는 어떤 프로그램이든지 그 소스가 공개되지 않으면 시스템에 설치하지 못하게 하는 정책을 쓰곤 했다. 실제로 어떤 프로그램들을 설치하지 못하게 함으로써 이 정책을 고수했다. 나는 이것에서 커다란 영감을 받게 되었다.

결국에는, 누가 시스템 소프트웨어를 소유하고 있으며 누구에게 사용 자격을 부여할 것인가를 결정하는 문제들이 사라지게 될 것이다.

복사 라이센스를 포함하여 프로그램 사용에 대한 지불을 준비할 때는 언제나 개인이 지불해야 할 돈이 얼마인가를 알아내야 하는 번잡한 과정에 의해서 사회에 많은 비용을 야기시킨다. 그리고, 오직 경찰 당국만이 모든 사람이 그것을 따르게 하도록 힘을 행사할 수 있다. 막대한 비용을 들여 공기를 생산하는 우주 정거장을 생각해 보자. 이런 경우 각각의 개인은 자신이 호흡하는 공기에 대해 리터(liter) 단위로 요금을 지불하는 것이 합당할 것이다. 그렇다고는 해도 호흡하는 공기의 양을 측정하기 위해서 계측기가 달린 방독면을 밤낮으로 쓰고 있어야 한다면 그런 방식은 지불 능력에 관계없이 타당한 것이 아니다. 그리고 TV 카메라는 당신이 마스크를 벗는 불법을 행하는지 어디서나 지켜보아야 할 것이며 따라서, 이것보다는 사람 수에 따라 일정한 세금을 부과하고 마스크를 벗어 던지는 것이 현명하다.

프로그램의 일부 혹은 전체를 복제하는 행위는 프로그래머에게 있어서는 숨을 쉬는 것만큼이나 자연스러운 일이며 생산적이다. 따라서, 프로그램은 마땅히 자유롭게 사용될 수 있어야 한다.

몇 가지 GNU의 목표에 대한 반대 의견
"무료라면 아무도 그것을 쓰지 않을 것이다. 왜냐하면 무료라는 것은 어떠한 지원도 기대할 수 없다는 것을 의미하기 때문이다."

"당신은 그 프로그램에 대한 지원과 도움을 제공하는 대가로 이에 관한 비용을 부과해야만 한다."

만약 사람들이 돈을 지불하고서 GNU에 대한 서비스를 받기를 희망한다면, GNU를 무료로 얻은 사람들에게 그런 서비스를 제공하는 회사도 이익을 얻을 수 있을 것이다. (3)

우리는 반드시 실제 프로그래밍 작업과 단순 관리 작업을 구별해야 한다. 전자는 때때로 소프트웨어 판매 회사에게 의존할 수가 없다. 만일 당신의 문제가 보편적으로 발생되는 사안이 아니라면, 판매 회사는 그 문제를 끝까지 해결해 주려고 하지 않을 것이다.

만일 당신의 사업이 지원에 대한 의존이 필요하다면, 필요한 모든 소스와 도구를 갖춰야 할 것이다. 그리고, 당신의 문제를 해결해 줄 수 있는 사람을 고용할 수 있을 것이다. 이것이 다른 사람의 자비를 얻는 것은 아니다. 유닉스에서는 이러한 부분에 있어서의 소스의 가격이 고려되어 있지 않지만 GNU의 경우는 이러한 문제를 용이하게 할 수 있을 것이다. 그러나, 유능한 사람을 구할 수 없을 가능성은 여전히 존재하고 이것을 배포에 따른 문제라고 비난할 수는 없다. GNU는 모든 세계의 문제를 제거하는 것은 아니며 단지 그중 하나일 뿐이다.

한편, 컴퓨터에 대해 전혀 모르는 사용자들은 여전히 단순한 관리 서비스를 필요로 한다. 이러한 일은 사용자 스스로 능히 처리할 수 있는 종류의 일이지만 그러한 방법을 모르기 때문이다.

이런 서비스들은 단순한 수작업이나 복구 서비스를 지원하는 회사들이 제공할 수 있다. 사용자들이 제품을 사고 그에 대한 서비스를 받는 방식을 받아들인다면, 제품을 무료로 받고 서비스에 대한 비용을 지불하는 방식에도 기꺼이 동의할 것이다. 서비스를 제공하는 회사들은 가격과 질적인 면에서 모두 완벽을 기할 수 있을 것이며 사용자들은 특정한 업체에 얽매이지 않아도 될 것이다. 또한, 그러한 서비스가 필요하지 않은 사람들은 서비스에 대한 비용을 들이지 않고도 프로그램들을 쓸 수 있을 것이다.

"광고를 하지 않고는 많은 사람들에게 알릴 수 없을 것이며, 그러기 위해서는 필히 프로그램에 가격을 매겨야 한다."

"무료로 제공되는 프로그램을 광고하는 것은 무의미하다."

GNU 같은 프로그램을 많은 컴퓨터 사용자들에게 알릴 수 있는 방법에는 무료 혹은 극히 적은 비용으로 사용할 수 있는 다양한 정보 전파 방식이 있다. 그러나 광고를 하는 것이 보다 많은 컴퓨터 사용자에게 정보를 알릴 수 있는 방법일지도 모른다. 만일 실제로 이런 것이 사실이라면 복제와 배포를 하는데 돈을 받음으로써 능히 광고와 그 외의 부수적인 비용을 감당할 수 있을 것이다. 이런 방식에서는, 광고를 보고 배포본을 구입해서 이익을 얻을 수 있는 사용자가 광고 비용을 부담하게 되는 것이다.

반면, 많은 사람들이 GNU를 그 친구들을 통해서 구한다면, 이런 종류의 회사들은 성공할 수 없을 것이다. 이는 GNU를 보급하는데 광고가 필요한 것은 아님을 보여준다. 그렇다고 한다면 무료로 보급되고 있다는 사실이 무료로 알려지는 것을 바라지 않을 만한 이유가 있겠는가? 자유 시장 경제에서는 광고에 의하지 않은 전파 방식 또한 충분히 가능한 것이다. (4)

"나의 회사는 경쟁사들에 대한 우위를 차지하기 위해 독점적인 운영체제가 필요하다."

GNU는 시스템 소프트웨어를 경쟁이라는 범주에서 제외시킬 것이다. 당신의 회사가 우위를 차지할 수 없는 것처럼 당신의 경쟁사들도 그 점에 있어서는 마찬가지일 것이다. 당신과 당신의 경쟁사들 모두 이 분야에서는 별반 이득을 볼 수 없겠지만 다른 분야에서 서로 경쟁하는 것은 가능할 것이다. 당신의 사업이 운영체제를 판매하는 것이라면 GNU가 마땅치 않게 생각 될 것이다. 당신의 사업이 이런 종류가 아니라면 GNU는 시스템 소프트웨어에 관련된 막대한 비용을 절감해 줄 것이다.

나는 제작자와 사용자들이 GNU의 발전에 기여해 나감으로써 서로의 비용을 절감할 수 있기를 희망한다. (5)

"프로그래머는 자신의 창의력에 대한 보상을 받을 자격이 있지 않은가?"

보상받을 만한 일이란 사회적 공헌을 말한다. 창의성이란 그 결과물을 사회가 대가 없이 사용할 수 있을 때 사회적 공헌이 되는 것이다. 어떤 혁신적인 프로그램을 제작한 사람이 그에 대해 보상을 받아야만 한다면, 같은 맥락에서 그것을 자유롭게 사용하지 못하게 한다면 그때는 제재를 받아야 할 것이다.

"프로그래머는 그의 창의력에 대한 보상을 요구할 수 없는가?"

유해한 수단을 사용하지 않는다면, 노동에 대한 보수와 자신의 소득이 극대화되기를 바라는 것은 아무 문제가 없다. 그러나 지금 까지 소프트웨어 산업에서 보편화된 수단은 유해한 방법이다.

프로그램을 사용하는 것에 제한을 둠으로써 돈을 벌어들이는 행위는 프로그램이 사용되는 범위와 방식을 제한하기 때문에 유해한 것이다. 이는 인간들이 프로그램으로부터 얻을 수 있는 인간적인 풍요로움을 전체적으로 감소시키는 것이다. 프로그램의 자유로운 사용에 대한 제한은 결국, 유해한 파괴 행위라고 할 수 있다.

선량한 시민이라면 자신이 보다 부유해지기 위해 그런 수단을 쓰지 않는다. 그 까닭은, 만일 모든 사람들이 그렇게 한다면 상호간의 유해한 행위로 인해 결과적으로 우리 모두는 보다 빈곤해 질 것이기 때문이다. 이것은 칸트의 윤리학(네 의지의 준칙이 언제나 보편적 입법의 원리로서 타당하게 행동하라-실천이성비판)이나 황금률같은 분명한 것이다. 나는 모든 사람들이 자기만의 정보를 축적해 나가는 것은 바람직하다고 여기지 않기 때문에, 누군가 그런 일을 한다면 그것이 잘못된 일이라고 생각한다. 특히, 한 개인의 창의성을 보장받고자 하는 욕구가 일반적으로 전체의 창의성이나 혹은 그 일부분을 저하시키는 행위를 정당화시키는 것은 않는다.

"프로그래머들의 밥줄이 끊기지 않을까?"

나는 모든 사람이 프로그래머가 될 필요는 없다고 답하고 싶다. 아마 우리들 대부분은 거리에 나가 인상을 써서 간신히 약간의 돈을 벌어 살아갈 수는 없을 것이다. 그러나 결과적으로, 우리는 거리에 나가 인상 써서 돈을 번다고 비난받을 필요도 없고, 또한 빈궁해질 필요도 없을 것이다. 우리는 그와는 다른 일을 할 수 있을 것이다.

그러나 이것은, 프로그래머는 소프트웨어를 소유하지 않으면 단 한푼도 벌 수 없다 라는 질문하는 사람의 독단적인 가정을 받아 들였다는 점에서 오답이라 할 수 있다. 아마도, 이런 생각은 극단적일 것이다.

프로그래머가 생계에 지장을 받지 않을 것에 대한 진정한 이유는 지금과 같은 정도는 아니겠지만 여전히 프로그래밍으로 돈을 벌 방법들이 있기 때문이다.

프로그램의 복제를 제한하는 것이 소프트웨어 사업에 있어서 유일한 이윤 창출 방법은 아니다. 이런 방식이 보편화된 것은 이렇게 함으로써 가장 돈을 많이 벌 수 있기 때문이다. 고객들에 의해 이런 방식이 거부되거나 금지된다고 해도, 소프트웨어 사업은 지금까지 흔하지는 않았던 새로운 방식으로 전환해 나갈 길을 모색할 수 있을 것이다. 사업에 있어서 이윤 창출 방법은 무궁 무진한 것이다.

아마 새로운 기반 하에서의 프로그래밍은 지금처럼 수익성이 높은 일은 아닐 것이다. 하지만 이것이 변화의 쟁점은 아니다. 지금의 판매 사원들은 그들의 봉급을 버는 방식이 불합리한 것이라고 생각하지는 않는다. 프로그래머들이 그와 같은 방법으로 소득을 올린다 해도 하등 정당하지 못할 이유가 없다(실제적으로 프로그래머들은 여전히 그들보다 월등히 많은 소득을 올리고 있다)

"창작물의 사용 제한 여부는 창작자 자신이 갖고 있는 권리가 아닐까?"

"특정 창작물에 대한 사용을 통제하는 것"은 결국 다른 사람들의 삶에 대한 통제를 의미한다. 이는 다른 사람들의 삶을 위축시키는 것이기 때문이다.

지적 소유권에 관해 상세하게 공부한 사람들(변호사 등)은 그 자체로서 완벽한 지적 소유물은 없다고 주의 깊게 말한다. 정부가 인정하는 추상적인 지적 소유권들은 특정 목적을 위한 특정 법률 조항으로부터 발생한 것이다.

예를 들어, 특허제도는 발명가가 그의 고안품의 세부 사항을 공개하는 것을 장려하고자 설립된 것이다. 그 목적은 발명한 사람을 돕기보다는 사회를 돕기 위한 것이다. 시간의 측면에서 보면, 특허가 갖는 17년간의 유효기간은 기술이 발전하는 비율과 비교해 볼 때 짧다. 특허권은 생산 업자들 사이의 문제이고 생산을 향상시키는 것과 비교해서 특허권 계약에 드는 비용과 노력은 적다고 보기 때문에 특허권은 일반적으로 그다지 해롭게 작용하지 않는다. 또한, 그것은 대부분의 개인들이 특허 받은 제품을 사용하는 것을 제한하지는 않는다.

고대에는 저작권이라는 것이 존재하지 않았으며 그 시대의 작가들은 빈번하게 다른 이의 작품 상당량을 소설 이외의 작품에 복제하기도 했다. 이런 작업들은 유용한 것이었으며 비록, 그 일부분이기는 하지만 많은 사람들의 작품이 계속해서 전수되는(존재해 나가는) 유일한 방법이었다. 저작권 제도는 작가 의식을 고취시키려는 의도로 만들어진 것이다. 이것이 처음 만들어 질 때 주로 염두에 두었던 책의 범주에서 보면 책은 별도의 비용에 의해서 인쇄기를 사용해서만이 복제가 가능하기 때문에 저작권은 그다지 해롭지는 않았다. 또한, 대다수의 사람들이 책을 읽는 것을 제한하지도 않았다.

모든 지적 소유권은 그것들이 어떻든지 그를 허용함으로써 사회 전체에 이득이 된다고 여겨져서 사회가 허용할 때만 정당하게 되는 것이다. 그러나 어떤 특정 상황에서든 우리는 "그런 허가를 내주는 것이 정말로 우리에게 유익한가? 어떤 종류의 허가를 내줄 것인가?" 하는 질문을 해보아야만 한다.

오늘날의 프로그램들의 경우는 백여년전의 책의 경우와 크게 다르다. 프로그램이 이웃간에 손쉽게 복사될 수 있다는 사실, 소스 코드와 목적 코드로 구분된다는 점, 단순히 읽거나 즐기기 위해서 사용되지는 않는다는 사실들이 묶여져서 저작권을 강요하는 사람들은 사회 전체에 정신적, 물질적으로 해를 끼치는 상황을 만들고 있으며 법적 허용 여부에 상관없이 사용자들의 이용을 제한하고 있는 것이다.

"경쟁함으로써 보다 나은 결과를 얻을 수 있는가?"

경쟁의 기본 원리는 경주(race)이며 승자에게 상을 줌으로써 주자들이 더욱 빨리 달리도록 장려할 수 있는 것이다. 만약 자본주의가 실제로 이런 방식을 따른다면 이는 바람직한 것이다. 그러나 자본주의 옹호론자들은 실제로 항상 이런 방식으로 움직인다고 단정짓는 잘못을 범한다. 만일, 주자들이 상이 주어지는 이유를 망각한 채 승리에만 집착한다면 말할 것도 없이 그들은 다른 주자를 공격한다든지 하는 색다른 전략은 찾게 될 것이다. 주자들이 먼저 싸우기부터 한다면 그들은 결국 모두 늦어질 수밖에 없는 것이다.

독점적이고 비밀에 싸인 소프트웨어는 도덕적으로 먼저 싸우기부터 하는 주자들과 동일하다. 슬픈 일이지만 우리의 유일한 심판은 그다지 공정해 보이지 않으며 "매 10 야드(yard)마다 한번씩 상대방을 가격할 수 있다."는 규정을 적용하는 정도일 것이다. 싸움에 대한 조짐이 있을 때조차도 벌칙을 주어야 하는데도 말이다.

"금전적인 특혜가 없다면 아무도 프로그래밍을 하지 않을 것이다."

실제적으로, 많은 사람들이 분명한 금전적인 특혜가 없이도 프로그래밍을 할 것이다. 프로그래밍은 어떤 사람들에게는 저항할 수 없는 매력인 것이며 보통 프로그래밍에 능숙한 사람에게 더욱 그렇다. 비록 생활의 기반이 될 가망이 없더라도 꾸준히 계속해 가는 직업적인 음악인들이 많이 있다.

그러나 실제로 이 질문은 비록 일반적으로 많이 제기 되지만 조금은 다른 관점의 문제라고 할 수 있다. 프로그래 머들의 소득원이 없어지는 것이 아니라 단지 수입이 줄어드는 것이기 때문이다. 따라서, 올바른 질문은 "금전적인 보상이 줄어들더라도 사람들이 프로그래밍을 하게 될까?"일 것이다. 내 경험에 의하면 그렇게 할 것이라고 생각한다.

십년 이상 동안, 세계 정상급 프로그래머들이 인공 지능 연구소에서 일했었지만 그들이 받은 보수는 다른 어떤 곳에서 기대할 수 있는 것보다 훨씬 적은 것이었다. 그들은 사회적 인정이나 명성과 같은 다양한 종류의 비금전적인 보상을 받았다. 그리고 창의력은 그 자체가 이미 보상과 흥미를 내포하고 있는 것이다.

그후, 그들 대부분은 이전의 작업처럼 그들이 흥미롭게 생각하는 일을 높은 보수를 받으며 할 수 있는 기회가 주어지자 연구소를 떠났다.

이 사실에서 알 수 있는 것은 사람들은 부유해지기보다는 나름대로의 어떤 까닭을 위해서 프로그래밍을 한다는 것이며 그런 조건 위에 상당한 보수까지 받을 기회가 주어진다면 그를 예상하고 요구하게 되는 것이다. 보수가 낮은 조직은 높은 보수를 받는 조직과의 경쟁에서 뒤지겠지만 만일, 높은 보수를 받는 조직이 허용되지 않는다면 훌륭하게 활동할 수 있을 것이다.

"우리는 프로그래머가 절대적으로 필요하다. 만일 그들이 우리의 이웃을 돕지 말라 하면 우리는 따를 수밖에 없다."

당신들은 결코 그런 종류의 요구에 복종해야 할만큼 절박하지 않다. 명심하라. 열 장정이 도둑 하나를 막지 못하는 법이다.

"프로그래머들도 어떤 식으로든 그들의 생계를 꾸려 나가야 하지 않은가?"

요컨대 이것은 진실이다. 그러나 프로그램의 사용에 대한 권리를 파는 것 이외에도 생계를 꾸릴 수 있는 수많은 방법들이 있다. 현재 사용에 대한 권리를 파는 것이 보편적으로 받아들여지는 것은 그런 방식으로 프로그래머나 사업자들이 보다 많은 돈을 벌 수 있기 때문이지 결코 이것이 생계를 유지하는 유일한 방법이기 때문은 아니다. 다른 방법을 찾고자 한다면 얼마든지 가능할 것이다. 여기 여러 가지 예들이 있다.

새로운 컴퓨터를 내놓는 제조업자는 새 기계에 운영체제를 이식하기 위한 비용을 지불하게 된다.

교육, 단순 관리 작업, 지속적인 서비스들을 제공하는 회사에서도 역시 프로그래머는 필요한 것이다.

사용자의 마음에 흡족하다면 그에 대한 기부를 지원해 달라고 요구하는 프리웨어(freeware)라는 새로운 아이디어로 프로그램을 배포하는 사람들도 있다. 혹은 단순 관리 서비스를 제공하고 보수를 받는 사람들도 있다. 나는 이미 이런 방식으로 성공한 사람들을 만났다.

도움이 필요한 사용자들은 사용자 그룹을 결성하고 회비를 조성할 수 있을 것이다. 그룹은 프로그래밍 회사와 계약을 맺고 회원들이 원하는 프로그램을 주문 제작할 수 있을 것이다.

모든 종류의 발전에 필요한 기금은 소프트웨어에 대한 세금으로 조성할 수 있을 것이다.

만약, 컴퓨터를 구입하는 모든 사람들이 가격의 몇 퍼센트를 소프트웨어에 대한 세금으로 지불해야 한다면, 정부는 그 돈이 소프트웨어 발전에 쓰여지도록 국립 과학 재단(NSF-National Science Foundation) 같은 단체에 위임할 수 있을 것이다.

여기에는 컴퓨터 구입자가 세금을 납부하는 것 대신에 개별적으로 소프트웨어의 발전을 위해서 특정 부문에 기부하는 형식이 포함될 수 있을 것이다. 그는 스스로 어느 프로젝트에 기부할 것인지를 결정할 수 있을 것이며 때론, 그 결과를 쓸 수 있을 것이란 기대를 품고 결정을 내리게 될 것이다. 얼마를 기부하든 지불해야 할 세금 전액을 대신할 수 있을 것이다.

세금의 전체적인 세율은 납세자들이 투표를 해서 결정할 수 있을 것이며 지불할 액수에 따라 차등 조정될 것이다.

따라서, 결론은 다음과 같다:

컴퓨터 사용자 공동체는 소프트웨어의 발전을 지원한다.

어느 수준의 지원을 할 것인가에 대한 사항을 공동체 모두가 함께 결정한다.

자신의 몫이 어떤 프로젝트에 쓰일 것인가에 관심 있는 사용자들은 이를 스스 결정 할 수 있다.

프로그램을 자유롭게 만든다는 것은 결국, 더이상 생계를 위해 고되게 일할 필요가 없는 풍요로운 세계로 가는 한 단계인 것이다. 사람들은 법률 제정이나 가정 상담, 로보트 수리, 천체 관측 등의 주당 열 시간 정도의 근무 시간을 마친 후에는 프로그래밍과 같은 자신이 흥미를 가질 수 있는 일에 자신을 몰입할 수 있는 자유를 갖게 될 것이다. 더이상 프로그래밍을 생계의 수단으로 삼을 필요가 없게 될 것이다.

우리가 이미 풍요로운 사회를 만들기 위해 많은 일들을 했음에도 불구하고 여가 시간이 아직 충분히 보장되지 않고 있는 이유는 자유 경쟁에 반하는 관료 제도와 저항들에 의해서 생산적인 활동에 많은 비생산적 요소들이 개입되기 때문이다. 자유 소프트웨어는 이러한 문제들을 충분히 개선시켜 나갈 수 있을 것이고 그렇게 함으로써 풍요를 위한 우리의 기술적 성과들이 우리들 자신의 노동을 감소시킬 수 있도록 해야 할 것이다.

--------------------------------------------------------------------------------
각 주
(1) 자유라는 의미를 명확하게 설명하지 못했다. 본래의 의도는 GNU 시스템을 사용 하기 위해서 '사용 허가'에 대한 별도의 비용을 지불할 필요가 없다는 뜻이다. 이러한 점을 명확히 하지 않음으로 해서 GNU 프로그램은 항상 무료나 이에 준 하는 가격에 의해서만 제공된다는 잘못된 해석이 가능할 수 있었다. GNU 선언 문은 이러한 부분에 대해서 이윤 추구를 위한 상업적 배포 업체 또한 충분히 가능할 수 있다는 사실을 뒤에 언급하고 있다. 나는 금전적인 측면의 자유와 구속되지 않는다는 관점에서의 자유를 주의 깊게 구분해서 사용해야 한다는 교 훈을 얻게 되었다. 자유 소프트웨어란 사용자가 배포와 수정의 자유를 갖는 소프트웨어를 의미한다. 자유 소프트웨어는 유료 또는 무료로 구입할 수 있 으며 유료 구입에 의한 기금의 확충은 해당 소프트웨어를 보다 우수하게 향상 시키는데 기여할 수 있을 것이다. 자유 소프트웨어의 핵심은 소프트웨어의 자 유로운 이용을 통해서 사용자 상호간의 협력의 자유를 보장받는다는 데 있다.

(2) 자유라는 두 가지 다른 의미 중에서 본래의 의도를 명확히 제시하지 못한 것 같다. 자유가 다른 의미를 내포할 수도 있지만 여기서는 가격을 지불하지 않는 다는 뜻으로 사용된 것이다. 즉, GNU 소프트웨어는 친구나 네트워크를 통해서 무료로 얻을 수 있다.

(3) 이러한 종류의 몇몇 회사들이 이미 활동하고 있다.

(4) 자유 소프트웨어 재단은 이윤 추구를 목적으로 하지 않음에도 불구하고 대부분 의 운영 자금을 배포본 판매에 따른 수익금에 의해서 충당하고 있다. 아무도 우리로부터 제품을 구입하지 않는다면 우리는 재단을 지탱해 나가지 힘들게 될 것이다. 그러나, 이것이 모든 사용자에게 유료 구입을 강요하는 제한 사항이 될 수는 없다. 제품 구입에 대한 소수의 도움으로도 자유 소프트웨어 재단은 충분히 유지될 수 있으며 우리는 일반 사용자들이 이러한 방식으로 우리를 지 원해 주기를 요청한다.

(5) 최근 들어 컴퓨터 회사들의 모임 중 하나는 GNU C 컴파일러의 개발을 지원하기 위한 기금을 조성했다.

--------------------------------------------------------------------------------
파일명 찾기
# find / -name 파일명 -type f

파일명 찾기(대소문자 구별없음)
# find / -iname 파일명 -type f

디렉토리 찾기
# find / -name 파일명 -type d

디렉토리 찾기(대소문자 구별없음)
# find / -iname 파일명 -type d

1. 루트 디렉토리부터 확장자가 txt인 파일을 찾아서 화면에 파일 이름 출력

# find / -name *.txt

2. 위의 명령에서 현재 디렉토리와 한 단계 아래의 디렉토리에서만 파일을 찾을 경우

# find . -maxdepth 2 -name *.txt

리눅스 설치시에 웹서버를 패키지로 선택해서 설치할수도 있다...


아주 쉽게 간편하게 설치가 되지만... 여러모로 문제가 있다...

쉽게 이야기 해서 c++을 공부 안하고 .net부터 만지는 꼴이라고 할까???

기본에 충실해야 응용력이 살아난다...-_-

인터넷에 떠도는 메뉴얼로 고대로 따라해봤다...

# yum 설치를 위해 GPG-KEY 포함
rpm --import /usr/share/rhn/RPM-GPG-KEY-fedora

------------> 참고로 위에 키포함을 안하고 yum을 계속 사용하다보면 만드시 에러가 난다...-_-

# yum 업데이트
yum -y update

------------> yum은 정말 대단한 유틸이다... 쩝... 필자에 경우도 rpm만으로 레드햇9에 모든 패키지를 설치했으나 온갖 의존성 문제와 잡다한 오류들때문에 주름살만 늘어갔었다...

Yum은 Yellowdog Updater, Modified의 약자로 rpm기반의 시스템을 위한
자동 업데이터이자 패키지 설치/삭제도구이다.
Yum은 자동적으로 의존성을 처리해주며 rpm 패키지들을 안전하게 설치, 삭제 및
업데이트하기 위해 반드시 해야할 일들을 스스로 해결한다.

필자에 경우 커널업데이트를 위해 의존성있는 모든 패키지에 업그레이드가 무서워 포기했었는데 시간만 있다면
얼마든지 해낼것 같다..ㅋㅋㅋ

# 한글 설정
/etc/sysconfig/i18n

LANG="ko_KR.eucKR"
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"

# 매뉴얼 설정 수정
vi /etc/man.config

수정
PAGER /usr/bin/less -isr
--------------------------> 위 두가지 한글 설정은 터미널이나 기타부분에서 한글깨짐현상을 고치기 위해서다
# 디렉토리 색상 수정
vi /etc/DIR_COLORS.xterm

수정
DIR 00;33

# 소스 컴파일을 위한 컴파일러 및 각종 모듈 yum 설치
yum -y install gcc cpp gcc-c++ compat-gcc-32-g77 flex libjpeg-devel libpng-devel libtiff-devel freetype-devel openldap-devel pam-devel sendmail-cf vsftpd telnet-server

# zlib 소스 설치
cd /usr/local/src
wget http://www.zlib.net/zlib-1.2.3.tar.bz2
tar xfj zlib-1.2.3.tar.bz2
cd zlib-1.2.3
make
make install

# freetype 2 설치
글짜를 그릴 때 쓰는 라이브러리 입니다.
wget http://ftp.superuser.co.kr/pub/etc/freetype-2.1.5.tar.gz
tar xvfz freetype-2.1.5.tar.gz
cd freetype-2.1.5
./configure
make
make install

# openssl 소스 설치
cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8a.tar.gz
tar xfz openssl-0.9.8a.tar.gz
cd openssl-0.9.8a
./config
make
make install

# curl 소스 설치
cd /usr/local/src
wget http://curl.haxx.se/download/curl-7.15.1.tar.bz2
tar xfj curl-7.15.1.tar.bz2
cd curl-7.15.1
. /configure --with-ssl
make
make install

# gd lib 설치
cd /usr/local/src
wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
tar xfz gd-2.0.33.tar.gz
cd gd-2.0.33
./configure
make
make install

# webalizer 소스 설치
cd /usr/local/src
wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-src.tgz
tar xfz webalizer-2.01-10-src.tgz
cd webalizer-2.01-10
./configure --with-language=korean
make
make install

# mysql 4.1.x 설치
cd /usr/local/src
wget http://mysql.byungsoo.net/Downloads/MySQL-4.1/mysql-4.1.16.tar.gz
tar xfz mysql-4.1.16.tar.gz
cd mysql-4.1.16
./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=euckr
make
make install

/usr/local/mysql/bin/mysql_install_db
groupadd mysql
useradd -M -c MySQL_Server -d /usr/local/mysql -g mysql -s /bin/nologin mysql
chown root.mysql -R /usr/local/mysql
chown mysql.mysql -R /usr/local/mysql/data
cp /usr/local/mysql/share/mysql/my-huge.cnf /etc/my.cnf
echo "/usr/local/mysql/bin/mysqld_safe &" >> /etc/rc.local

# apache 1.3.x 설치
cd /usr/local/src
wget http://ftp.apache-kr.org/httpd/apache_1.3.34.tar.gz
tar xfz apache_1.3.34.tar.gz
cd apache_1.3.34
./configure --prefix=/usr/local/apache --enable-module=so
make
make install
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local

#freetype 소스설치후 적용하기위세 freetype 옵션추가
# php 소스 설치
cd /usr/local/src
wget http://kr.php.net/get/php-4.4.2.tar.bz2/from/this/mirror
tar xfj php-4.4.2.tar.bz2
cd php-4.4.2
./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/apache/conf --with-zlib-dir=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-tiff-dir=/usr/local --with-freetype-dir=/usr/local --with-ttf --with-gd --with-openssl --with-gettext --with-kerberos --with-swf-dir=/usr/local --with-mod_charset --with-regex=php --with-curl --with-ldap --with-iconv --enable-gd-native-ttf --enable-ftp --enable-sockets --disable-debug --enable-calendar --enable-sigchild --enable-magic-quotes --enable-bcmath --enable-exif --enable-mbstring --enable-dbase --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-yp --with-jpeg-dir --with-freetype-dir
make
make install
cp php.ini-dist /usr/local/apache/conf/php.ini

-------------> 이쯤에서 에러가 났었는데 .so cannot restore segment prot after reloc: Permission denied

이런 에러가 난다면 현재 Selinux환경이 활성화 때문이다.

Selinux활성화 상태에서 apache를 구동하는 방법은 조금 복잡.

그냥 Selinux를 비활성화 시키고 재부팅하면 정상적으로 구동된다.

먼저, 콘솔상태라면..

/etc/sysconfig/selinux 파일을 열어서

SELINUX=enforcing 부분을 아래와 같이 변경.
SELINUX=disabled

이와같이 변경한 다음에 재시작.

disabled 대신에 Permissive 라고 입력해도 된다.
그럼 다른 설치를 계속...

vi /usr/local/apache/conf/httpd.conf

수정
DirectoryIndex index.html index.htm index.php

수정 (public_html -> www)
UserDir www
#

# vi /usr/local/apache/conf/mime.types
두줄 추가 (확장자는 탭키로 띄운다)
application/x-httpd-php php ph inc
application/x-httpd-php-source phps

# php 파일 이외에 다른파일명으로 php해석할수있게 설정 ex) htm html
# vi /usr/local/apache/conf/httpd.conf
- .php 파일 및 html 파일에서 php 코드 실행되게 설정하려면
AddType application/x-httpd-php .php .phtml .php3 .html .htm
AddType application/x-httpd-php-source .phps

# vi /usr/local/apache/conf/php.ini
- 그림 파일 및 프래쉬 파일 로그 남기지 않게 설정
방문자 수가 많아지면 웹로그가 엄청 쌓이게 되고, 그 로그는 크기가 2G를 넘게 되면 웹페이지에 이상현상이 생깁니다. 그렇다고 로그를 안 남길 수는 없는 것이고, 이미지 파일들은 로그남기는 것에서 제외합니다.
CustomLog logs/access_log common 이렇게 되어 있는 것을 ..
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache/logs/access_log common env=!IMAGE
이렇게 바꾸면^^; 쉽게 가능합니다.
- 업로드 용량 제한 풀기
기본적으로 업로드는 2M로 제한되어 있습니다. 만약 2M 이상으로 하면 여러 가지 설정들을 바꾸어 줘야 합니다. 업로드 되는 시간을 길 게 해 주어야 하고, 한번에 잡아먹을 메모리를 크게 해 주어야 합니다.
default_socket_timeout = 600
post_max_size = 20M
memory_limit = 20M
upload_max_filesize = 20M

- 업로드 용량 제한 풀기
# vi /usr/local/apache/conf/php.ini
기본적으로 업로드는 2M로 제한되어 있습니다. 만약 2M 이상으로 하면 여러 가지 설정들을 바꾸어 줘야 합니다. 업로드 되는 시간을 길 게 해 주어야 하고, 한번에 잡아먹을 메모리를 크게 해 주어야 합니다.
default_socket_timeout = 600
post_max_size = 20M
memory_limit = 20M
upload_max_filesize = 20M

- post, get , 쿠키 , 세션등의 변수를 일반변수로 (개인 서버용일경우 보안상 OFF 권장)
예 전에 php는 기본적으로 위 변수를 일반변수로 사용할 수 있었습니다. 하지만 보안에 취약 하기 때문에 php 설치시 기본적으로 일반변수로 사용못하게 설정합니다. 이렇게 되면 문제가 예전에 사용하던 짜여졌던 프로그램은 정상적으로 실행되지 않습니다. 보안보다는 호환성이 더 중요하죠^^;
register_globals=On 이렇게 설정합니다.

# ZendOptimizer 설치
cd /usr/local/src
wget ftp://ftp.sir.co.kr/zendoptimizer/ZendOptimizer-2.5.10a-linux-glibc21-i386.tar.gz
tar xfz ZendOptimizer-2.5.10a-linux-glibc21-i386.tar.gz
cd ZendOptimizer-2.5.10a-linux-glibc21-i386
./install.sh

php.ini 경로
/usr/local/apache/conf

# mod_throttle 소스 설치
cd /usr/local/src
wget ftp://ftp.sir.co.kr/etc/mod_throttle-3.1.2.tgz
tar xfz mod_throttle-3.1.2.tgz
cd mod_throttle-3.1.2/
make install

#####################################################
##### 인스톨시 다음과 같은 에러시 다음과 같이 하세요. ############
##### make: *** [install] Error 127make: *** [install] Error 127 ############
####################################################
---> 해당 디렉토리에 Makefile 에 APXS 경로를 지정해준다.

------>경로 지정법

# vi Makefile

APXS=/usr/local/apache/bin/apxs
APACHECTL=/usr/local/apache/bin/apachectl

절대경로로 수정한 다음 저장 하고 다시 make install 실행

(참고 인스톨시 에러가 발생한다. 그리고 APM세팅 방식을 DSO방식으로 설치한다.
STATIC방식으로 설치해도 되지만, 그 부분은 다시 설정해야한다.)

* static방식으로 설치 했을 경우 ...
configure 시--add-module=$mod_throttle_source_PATH/mod_throttle.c 추가.

* 그럼 DSO방식으로 설치 했을 경우...
* 모듈을 만들어준다.
[root@abcd mod_throttle-3.1.2]# /usr/local/apache/bin/apxs -c mod_throttle.c(모듈을 만들어준다)
gcc -DLINUX=22 -DUSE_HSREGEX -fpic -DSHARED_CORE -DSHARED_MODULE
-I/usr/local/apache/include -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o

* 에러부분에 추가 해주면 된다.

[root@abcd mod_throttle-3.1.2]# /usr/local/apache/bin/apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache/libexec/mod_throttle.so
chmod 755 /usr/local/apache/libexec/mod_throttle.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new

##############################################
vi /usr/local/apache/conf/httpd.conf
ThrottlePolicy Volume 500M 1d
SetHandler throttle-status

SetHandler throttle-me

SetHandler throttle-me

ServerAdmin root@xxx.com
ServerName xxx.com
DocumentRoot /home/xxx
# 하루 500M
ThrottlePolicy Volume 500M 1d
# 하루 천번
ThrottlePolicy Request 1000 1d
# quota 설정

1. fstab 옵션추가 (usrquota,grpquota) :
vi /etc/fstab
/home 에 usrquota 추가
default,usrquota

2. remount (umount , mount) :
mount -o remount /home

3. 데이터베이스 파일생성(quota.user , quota.group) :
touch /home/quota.user
chmod 600 /home/quota.user
quotacheck -av
convertquota -u /home

4. 사용자마다 적용수치 기록 :
edquota 계정
repquota -a

5. 활성화 :
quotaon /home

# qpopper 4.0.8 소스 설치
cd /usr/local/src
wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper4.0.8.tar.gz
tar xvfz qpopper4.0.8.tar.gz
cd qpopper4.0.8
./configure --enable-specialauth --enable-servermode --enable-shy
make
cp popper/popper /usr/sbin/popper

vi /etc/xinetd.d/pop3

service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/popper
log_on_success += HOST DURATION
log_on_failure += HOST
}

# /etc/rc.d/init.d/xinetd restart

# sendmail 수정 및 실행
vi /etc/mail/sendmail.mc

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

# 계정당 용량 설정
vi /etc/sendmail.cf
Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
M=20495360, <-- 이 부분만 추가 : byte 단위 (예:20메가)
T=DNS/RFC822/X-Unix,
A=procmail -t -Y -a $h -d $u

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
#/etc/rc.d/init.d/sendmail restart
#/etc/rc.d/init.d/saslauthd restart

# 기본 서비스

ntsysv 실행

auditd
crond
iptables
kudzu
named
network
pop3
saslauthd (보내는 메일서버 패스워드 인증?)
sendmail
sshd
syslog
telnet
vsftpd
xinetd

# 그룹사용자 추가
groupadd webhost

# path 추가

vi /etc/profile

pathmunge /usr/X11R6/bin after
pathmunge /usr/local/mysql/bin after
pathmunge /usr/local/apache/bin after

# vsftpd 설정 변경

vi /etc/vsftpd/vsftpd.conf

주석제거
xferlog_file=/var/log/vsftpd.log

# 재시작

sync
reboot

***이제 설치가 다 되었으면 웹브라우저에 localhost를 입력하면 아파치 테스트 페이지가 나온다...

php테스트는 다 알겠지만...-_-

phpinfo();
?>

내용에 페이지를 하나 작성해서 띄어보면 끝~~~~

APM설치 도움 : PHPSCHOOL

다음은 삼바를 설치해보자~!

계속됩니다...

http://dspride.cafe24.com

레드햇은 수백만 명의 전 세계 유저들에게 오픈소스 기반의 노트북을 보급하는 것은 비독점적 애플리케이션과 개발에 대한 중요성을 깨닫게 하는데 도움을 줄 것이라고 말한다.

오픈소스 소프트웨어 회사인 레드햇은 100달러짜리 노트북 보급 프로젝트가 오픈소스 데스크톱 운영체제에 대한 관심을 이끌어 낼 수 있다고 생각한다.

레드햇의 부사장인 마이크 에반스는 ZDNet과의 인터뷰에서 비록 오픈소스 데스크톱 운영체제가 그 프로젝트의 주요 목표는 아니지만, 값싼 오픈소스 기반 유비쿼터스 노트북은 오픈소스 데스크톱 기술에 대한 관심을 이끌어 낼 수 있을 것이라고 말했다.

그는 "이 프로젝트의 주된 동기는 아니지만 리눅스 데스크톱 기술 개발에 활력을 줄 것"이라고 말했다.

또한 에반스는 레드햇은 리눅스를 데스크톱으로 이용하기 위한 실질적이고 혁신적인 접근을 해왔으며, 리눅스 도입은 갑자기 확 바뀐다기보다는 점진적으로 이뤄질 것이라고 말했다.

모든 어린이들에게 노트북을 보급하자는 계획(OLPC)으로 알려져 있는 이 100달러짜리 노트북 프로젝트는 2005년 1월 세계 경제 포럼(World Economic Foum)에서 발표됐다. 원래 MIT 미디어랩(Media Lab)의 연구 프로젝트였던 이 프로젝트는 세계의 많은 국가들, 특히 개발 도상국의 학생들에게 싼 가격으로 노트북을 보급하려는 목표를 가지고 있다.

이 노트북의 최종 사양은 지난 11월 최초로 발표됐다.

페도라 축소판 올려 115달러가 적정선
레드햇은 MIT 미디어랩의 소장이자 공동 설립자인 니콜라스 네그로폰테가 오픈소스 공동체에 이 프로젝트 계획에 관심을 기울여 달라고 요청한 2005년 4월부터 이 프로젝트에 참여하고 있고, 지난 월요일에 프로젝트의 참가를 공식 발표했다.

레드햇의 사장인 매튜 줄릭은 "오픈소스 기술이 세상을 바꿀 수 있다고 믿지만 오픈소스 기술은 여전히 초기 단계이다. 오픈소스 기술을 우리가 하는 모든 작업에 적용하는 것이 원칙이다. 스폰서 관계를 넘어, 이 프로젝트에 대한 전문적이고 광범위한 지원을 위해 기술, 다른 전략적 자원을 OLPC에 투입해왔다"고 말했다.

에반스에 따르면, OLPC 운영 체제는 레드햇의 리눅스 배포판인 페도라(Fedora)의 축소 버전을 기반으로 할 것이라고 한다.

프로젝트의 시작 단계부터 이 노트북의 가격이 결국 정확히 얼마가 될 것인가 하는 문제가 계속 제기돼 왔다. 원래 100달러(56파운드)로 발표됐지만, 최근 네그로폰테는 115달러 정도가 좀 더 현실적인 가격이라고 인정했다.

이 프로젝트의 우선 목표는 2006년 말이나 2007년 초까지 제품 출하를 위한 시제품을 제작하는 것이지만, 제조사들은 500만대에서 1500만대 정도의 주문이 들어오고 미리 대금이 입금돼야만 생산을 시작할 것으로 보인다.

지난해 말, 남부 탄자니아의 음투와라 지역에서 교육 자선 단체에서 일하고 있는 팀 바니는 ZDNet과의 인터뷰에서 이 프로젝트의 성공 여부는 프로젝트가 어디에서 진행되느냐에 달려 있는 것 같다고 말했다.

사용자 교육, 업데이트, 기타 기술과의 통합도 협의
바니는 "후원은 물론 이런 걸 어떻게 쓸지 교육을 담당해줄 현장에서 발로 뛸 사람이 실제로 필요하다. 아프리카에서는 이런 문제가 신속히 해결될 방법이 없다. 나는 읽고 쓰기를 제대로 배워본 적이 없는 아이들에게 컴퓨터가 무슨 이득이 있을지 고심하고 있다. 이 아이들은 컴퓨터를 사용할만한 적당한 소양을 갖고 있지 못하기 때문"이라고 말했다.

레드햇은 지역의 협조를 이끌어 내고 학생들 스스로가 기호에 맞춰 확장할 수 있도록 해줌에 따라 오픈소스 소프트웨어 플랫폼을 사용하는 것이 이 프로젝트의 성공을 위해 필수적이라고 주장하고 있다.

비록 레드햇이 주로 OLPC 머신용 운영체제 개발에 초점을 두어 얘기하고 있지만, 시간이 지남에 따라 오픈소스 공동체 역시 사용자 교육과 지원, 업데이트 제공, 자격증, 다른 기술들과의 통합에 참여하도록 할 예정이다.

이 프로젝트의 후원자들은 각 노트북에 브로드밴드 무선 장비를 장착하려고 생각하고 있다. 이 장비를 통해 애드혹(ad hoc) 성격을 지닌 로컬 네트워크를 구성해 메시 네트워크(Mesh Network:각 노트북이 근처의 노트북들과 통신할 수 있도록 하는 네트워크)를 가능하도록 할 계획이다. 또한 대용량 데이터를 저장하는 것을 제외한 대부분의 팻(fat) 클라이언트가 할 수 있는 모든 것을 처리할 수 있도록 할 예정이다.

니콜라스 네그로폰테는 올 6월 테네시주 네쉬빌에서 열리는 레드햇 서밋(Red Hat Summit)에서 OLPC에 대한 생각과 레드햇의 역할에 대해 논의할 예정이다.@

KDE를 보면 비활성일 때도 투명하게 되는 장면이 있던데, 따라해보고 싶어서 찾아봤다.

투명하게 그리는 건 compositor.c의 paint_screen이 담당하던데, 지금은 이동중이거나 크기를 바꿀 때만 적용되는 거라서 조건이 grab_window이며, grab_op이 resize나 move일 경우에 투명하게 그리도록 되어 있다.

내가 하고 싶은 건 이를 테면 포커스가 있는 창만 안 투명하고 나머지는 다 투명한 거다. 포커스가 있는 창을 어떻게 구분할까 했는데 실제로 그리는 동작이 while 루프를 통해 이루어지고 있었다. compositor_windows라는 연결 목록을 뒤에서부터 훑어서 뒤에서부터 창을 그려오는 식이었다. 그러면 앞에 있어야 될 창이 나중에 그려지면서 뒤에 있어야 될 창을 덮어쓴다는 거겠지. 그래서 tmp라는 그 포인터와 원래 목록의 최초를 가리킬 것으로 생각되는 compositor_windows를 비교하도록 했다. 실패.

이건 아닌가 해서 찾아보니 meat-display 개체에 focus_window라는 속성이 있다. 메타시티 내부에서 마지막으로 포커스 처리를 했던 것으로 내가 원하는 목적에 딱 맞았다.

focus_window가 아닐 경우에는 투명하게 그리도록 조건을 바꿨다. 근데 포커스가 바뀐 즉시 투명이 적용되질 않아서 보니 paint_screen이 실행되는 게 애초에 do_repair가 호출되어야 하고, 그 조건은 damage가 발생하는 거였다. 찾아보니까 meta_compositor_damage_window라는 함수가 있어서 window.c에서 FocusOut 이벤트일 때 focus_window를 초기화하기 전에 불러줬다.

일단 기능은 되는데, 포커스가 바뀔 때 이벤트를 한 번 돌고, paint_screen 자체도 창 전체를 다시 그리기 때문에 한 박자 느리다.

가장 좋은 건 딴 거 없이 그 창만 딱 다시 그릴 수 있는 건데 그건 어떻게 할지 아직 모르겠다. window.c 영역에서 쓸 수 있는 함수로 send_configure_notify나 meta_window_move_resize_now 같은 걸 써보긴 했는데 아무래도 직접 그 영역만 딱 그리지는 않는지 아무 결과도 안 나온다.



더 고려해야 될 점이 있는데, 지금은 조건을 너무 단순하게 줘서, 패널도 투명하게 된다. 특수한 창은 비껴가도록 해야 한다.

transset-df를 응용한 어떤 스크립트 설명을 보니까 정확히 내가 원하는 거 같더라. 나중에 살펴봐야지.

+ Recent posts