우분투 13.04 버젼을 설치하고 나니 기존에 12.xx 버젼에서 발생했던 문제가 그대로 있더군요. 기존의 문제는 xrdp 를 설치하고 외부에서 원격 데스크탑 (Remote Desktop)을 이용해서 접속해서 작업을 할 때 

'd' 키를 누르면 모든 화면이 태스크바로 사라지면서 바탕화면이 나오는 문제 입니다.  



 이거 때문에 작업이 힘듭니다. ( cd , sudo 등 d 자 들어가는 유닉스 명령이 얼마나 많습니까? ㅎㅎ) 해결 방법을 찾아내서 정리해서 올립니다. 

1. ccsm ( compizconfig-settings-manager ) 을 설치해 줍니다.
 

$ sudo apt-get install  compizconfig-settings-manager



2. ccsm 을 실행시켜 줍니다.
 

$ ccsm



3. 왼쪽 탭에 '일반 (General)' 을 선택하시고 그 후 오른쪽 패널의 '일반 설정정 (General Options)' 를 클릭합니다.

4. '키 바로가기 (Key bindings)'  를 클릭하면 나오는 그럴듯한 메뉴를 골라줍니다. '바탕화면 보기 (Show Desktop)' 제 경우에는 이녀석이더군요.

5. 그림에 있는 연필 비슷하게 생긴것을 클릭해 주면 '<Control><Super>d' 가 나오는 것을 찾아서 설정을 지워주면 됩니다.  


 
예전 포스트 에서 해결하는 방법을 올렸지만 unity-2d 랑 gnome-classic 등이 동작 안하는 현상이 13.04에서 발견됐습니다. 새로운 방법을 올리겠습니다. 

1. 기존에 쓰여져 있던 .xsession 을 지웁니다. (만약 존재한다면)  

2. 다음과 같이 차례로 입력합니다.

sudo apt-get install gnome-session-fallback
$ echo "gnome-session --session=gnome-fallback" > .xsession
$ sudo /etc/init.d/xrdp restart 



unity-2d 가 gnome-fallback 으로 바꼈다는 소리를 들었습니다. (카더라 통신입니다만..)
 
최근에 서버가 사망하는 일이 발생했습니다. 내 다시는 LVM 에 데이터랑 OS 를 공존시키지 않으리란 다짐을 하게 만드는 사건이였습니다. 인프라를 다시 갖추는 작업을 한번쯤 정리해 볼 필요가 있을 것 같아서 정리해봤습니다. 

12.04 LTS 버젼으로 설치해 주는 것이 편합니다. 12.10 버젼은 Remote Desktop 으로 접속시 D 를 누르면 발생하는 문제가 있습니다. (모든 창이 미니마이즈 가 됩니다)

설치하자 마자 접속하면 '소프트웨어 업데이트'가 뜹니다. 이때 '설정'을 눌러서 다운로드 받는 서버를 'ftp.daum.net' 으로 수정해 줍니다. 

 $ sudo apt-get install ssh 


shell 접속이 가능하게 ssh 관련 소프트웨어를 설치해 줍니다. 특정 망회사는 ssh 기본 포트를 막아놓는 테러를 저지르기 때문에 /etc/ssh/sshd_config 에서 port 를 바꾸어 줍니다. 

$ sudo apt-get install xrdp


원격 접속이 가능하도록 xrdp 관련 소프트웨어를 설치해 줍니다. 

$ sudo apt-get install emacs23-nox 


주로 shell 로 접속해서 쓸꺼기 때문에 emacs 를 nox 버젼으로 설치해 줍니다. 

 $ sudo apt-get install gnome-session


원격 데스크탑을 원활히 돌리기 위해서 놈-세션을 설치해 줍니다. 
원격 데스크탑이 잘 돌아갈 수 있도록 조치를 취해줍니다.  예전에 올려둔 포스트 참조 

이제 쓸데 없는 하드들을 전부 한개로 묶어서 데이터 디스크를 만들어 줍니다. LVM 을 활용하는 것입니다. 
예전에 정리해 뒀습니다. 

 

 $ sudo vgchange -a n data_vg
 $ sudo vgreduce --removemissing data_vg
 $ sudo vgchange -a n data_vg
 $ sudo vgremove data_vg


LVM 을 운용하는 중에 하드가 하나 날라가 버린 가슴 아픈 사람들 (저 같은 경우..)의 경우에는 그 부분을 제거해 줘야 합니다. 이거를 먼저 실행해주고 LVM 을 생성해 주면 됩니다. 
(다시는 OS 와 Data 를 LVM 으로 묶지 않으리란 다짐을 했습니다. )

이제 다시 git 레파지토리를 생성해주면 됩니다. 제 노트북에 로컬 레파지토리는 전부 남아 있으니 서버에서 재 구성해주고 이쪽에서 그쪽으로 push 만 해주면 될 듯합니다. 

예전 정리 참조 

이렇게 또 퇴근 후 자유시간을 잡아먹게 되는 군요. 
클로져를 이용해서 웹 어플리케이션 간단한 것을 만들어 보고 싶은 욕망이 있을 것입니다. 만들어 보고 싶은 욕망은 의외로 간단하게 해결이 됩니다. 바로 컴포져(Compojure) 를 이용하면 쉽게 만들 수가 있습니다.

예전 포스트 를 보고 클로져 개발환경이 세팅되어 있다고 가정합니다.

compojure 로 만들어진 예제를 다운 받습니다.

    $ cd ~/work (없으면 만들어 줍니다)
    $ git clone git://github.com/weavejester/compojure-example.git


 
    $ cd compojure-example
    $ lein deps
    $ lein ring server


이렇게 하고 좀 오랜 시간을 기다리면 Port 3000 번에 Jetty 를 이용한 어플리케이션 서버가 떠 있는 것을 확인 하실수 있습니다. ( http://localhost:3000 에 브라우져로 접속하면 바로 확인 가능)

쉽게 만들었으면 배포하고 서비스하고 싶은 것이 개발자의 마음 아니겠습니까?

요즘 화두가 되고 있는 nginx 를 설치하고 그 웹서버와 위에서 만든 (실은 다운 받은) 예제를 연결시켜 보겠습니다. 

먼저 nginx 를 설치해줍니다.

    $ sudo apt-get install nginx


또 한번 외쳐줄 필요가 있습니다. 우분투 만세!!!

이제 nginx 의 설정파일은 손 봐줍니다. 정확히는 site 설정 정보가 되겠습니다.

 
   $ sudo emacs /etc/nginx/sites-available/default


   
   
server {

        #       root /usr/share/nginx/www;
        root /home/crazia/work/compojure-example/resources/public;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
                proxy_pass      http://127.0.0.1:3000;
    }

    location ~*    ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov|avi|wmv|mp3)$
    {
        break;
    }

   
    ....


   $ sudo /etc/init.d/nginx restart


위에 진하게 표시한 부분을 바꾸어 주시거나 추가해 주시면 됩니다. 간단하게 설명드리자면 기본적으로 정적인 파일들은 nginx 을 통해서 서비스가 되고 동적으로 만들어지는 파일들은 proxy_pass 를 이용해서 Jetty 가 떠 있는 3000 번 포트로 포워딩 하라는 뜻 입니다.

이제 접속을 유지하지 않더라도 항상 Jetty 가 떠 있게 만드는 방법을 알아볼 차례입니다. 이거 저거 설정해주기 귀찮더군요.

     $ lein ring server

이 부분을 screen 을 이용해서 계속 떠 있게 유지해줄 생각입니다. 일단 기존에 떠 있던 프로세스를 죽여줍니다. (간단하게 Ctrl-c 눌러줍니다)

그리고 스크린을 설치해줍니다.

     $ sudo apt-get install screen


다시한번 외쳐줄까요? 우분투 만세!!

     $ screen -S clj


이러면 가상 터미널이 한개 만들어 집니다. clj 라는 이름으로 말이죠

     $ cd ~/work/compojure-example
     $ lein ring server


Ctrl-a d (컨트롤 a 를 동시에 누른 다음에 d 누름) 이러면 화면에서 떨어져 나갑니다. 이상태에서 접속을 끊는다 하더라도 clj 라고 만들어진 가상 터미널 (스크린) 은  유지 됩니다.

다시 clj 로 돌아가고 싶으면

     $ screen -list
     $ screen -r clj


 -list 옵션은 어떤 스크린이 있는지 리스트를 확인하라는 명령입니다.

 이상입니다.
   

아침에 보니 출시가 됐더군요. 바로 업데이트를 해줬습니다. 

Penguin 이 될 꺼라는 예상을 했었지만 Pangolin 이 되버렸더군요. (모르고 있었음) 위키를 연결해뒀지만 생긴게 

 
이렇게 생겼더군요. 개미핥기의 일종이래나 뭐라나.. 천산갑이라니 뭔가 이상한 이름이군요 ㅎㅎ 

 
원문은 아래의 URL 에서 확인이 가능합니다.

  http://hbase.apache.org/book.html#quickstart

위의 페이지를 살펴보면 간단하게 시작할 수가 있습니다. 영어가 싫은 분들을 위해서 조금 사족을 덧 붙이자면

1. Hbase 를 다운 받는다.

   http://ftp.daum.net/apache/hbase/stable/

   여기에서 hbase-0.92.0.tar.gz 를 다운 받습니다. 안정화 (stable) 버젼이고, 0.92.0 버젼 입니다.

2. 적당한 곳에 압축을 풀어 준다.
  
$ tar xvf hbase-0.92.0.tar.gz
$ cd hbase-0.92.0/

3. conf/hbase-site.xml 파일을 열어서 다음과 같이 수정합니다.

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/crazia/work/hbase-0.92.0/hbase-${user.name}/hbase</value>
  </property>
</configuration>


 제 설정에서 HBASE 가 설치된 곳이

 $HBASE_HOME = /home/crazia/work/hbase-0.92.0

 이니 자신의 상황에 맞게 변경해 주시면 될 것입니다. (붉게 칠해진 부분을 자신의 환경에서 Hbase 가 설치된 곳으로 변경)

4. HBase 구동 시킨다

  
$ ./bin/start-hbase.sh

   만약, 여기서 구동이 안된다면 sun 사의 java 로 바꿔주실 필요가 있습니다.
   지난 아티클 참조 , 지지난 아티클 참조

5. HBase 쉘 (Shell) 로 제대로 동작하는지 확인

  
$ ./bin/hbase shell


   로 shell 을 구동시킵니다.

hbase(main):003:0> create 'test', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list 'test'
..
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds


간단하게 test 라는 테이블에 cf 라는 컬럼을 생성하고 간단하게 값을 입력하는 예제입니다. 여기까지만 해봐서 문제가 없으면 정상적으로 동작하는 것입니다. 기타 자세한 사항은 QuickStart 부분에서 테스트 해 볼 수가 있습니다.

hbase(main):012:0> disable 'test'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'test'
0 row(s) in 0.0770 seconds

만들어 봤던 테이블을 지워줍니다.

hbase(main):014:0> exit


그리고 쉘을 종료합니다.

6.  HBase 중단시키기
$ ./bin/stop-hbase.sh


만약 정상적으로 동작이 안되는 상황이 발생하면 ..

$HBASE_HOME/logs/hbase*master*.log 파일을 열었을 때

2012-02-20 13:12:49,478 WARN org.apache.hadoop.hbase.master.AssignmentManager: Unable to find a viable location to assign region -ROOT-,,0.70236052

이런 경고가 발생한다면 제대로 Hbase 가 구동되는 것이 아닙니다.

해결방법은

우분투 (Ubuntu) 에서  /etc/hosts 파일 열었을 때

127.0.0.1       localhost
127.0.1.1      crazia-VirtualBox                                              
127.0.0.1      ubuntu.ubuntu-domain ubuntu  


되어 있는 파일을

127.0.0.1       localhost
#127.0.1.1      crazia-VirtualBox                                              
127.0.0.1       crazia-VirtualBox
#127.0.0.1      ubuntu.ubuntu-domain ubuntu  


라고 바꿉니다. 핵심은 127.0.1.1 로 되어 있는 부분에 대한 처리만 신경 써 주시면 됩니다.


우분투(Ubuntu) 에 자동으로 포함되어 있는 openjdk 와 sun 의 jdk 가 미묘하게 차이가 있는 것을 알고 있습니까? 실은 저도 못 느껴본 차이긴 하지만 있다고 합니다.

무엇인가를 개발할 때 특히나 오픈소스(Open Source)를 가져다 쓸 때는 환경 문제가 특히나 중요한데, 지금 할려는 작업이 sun-jdk 를 설치해야만 하는 일입니다. 저번 포스트에서는 무지 간단하게 썼지만 막상 sun-jdk 를 설치하는 일은 한줄로 되지는 않습니다. 다섯줄 입니다.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin


패키지를 가져오는 소스 주소를 추가해 주고 레파지토리 (repository)를 업데이트 해줍니다. 그리고 가볍게 설치를 해 줍니다. 설치가 끝났다면 이미 설치되어 있는 자바를 관리해 줄 필요가 있습니다.

$ sudo update-alternatives --config java


  Selection    Path                                      Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      auto mode
  1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java       63        manual mode

Press enter to keep the current choice[*], or type selection number: 2

기본으로 쓸 자바를 어떤것을 선택할 것인지 지정해 주는 작업입니다. java-6-sun 을 골라주시면 되겠지요.

$ java -version


으로 검사해 보면 됩니다.



$ apt-get install java


로 한방에 끝이 납니다. 그러나 게스트OS 에서 인터넷을 쓸 수 없는 지금은 모든것을 수동으로 깔아줘야 합니다.

다음으로 이동해서 라이센스에 동의 하시고

http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u31-download-1501634.html

jdk-6u31-linux-i586.bin 를 다운 받습니다.

$ sudo mkdir /usr/java
$ sudo cp jdk-6u31-linux-i586.bin /usr/java
$ sudo su -

루트 계정으로 변경합니다.

# cd /usr/java
# ./jdk-6u31-linux-i586.bin
# exit

다시 본래 계정으로 돌아와서

$ emacs $HOME/.bash_profile

아래와 같은 내용을 맨 아래에 추가해 줍니다. (제 경우에는 파일을 새로 만들었습니다)

export JAVA_HOME=/usr/java/jdk1.6.0_31
export PATH=$PATH:$JAVA_HOME/bin

저장하고 파일을 닫고

$ source $HOME/.bash_profile
$ java -version

결과 값이

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) Client VM (build 20.6-b01, mixed mode, sharing)

나오면 됩니다.

이상으로 쉬운일을 어렵게 풀어나가고 있는 광이랑입니다.


지금 일하는 곳이 버추얼박스 (VirtualBox) 에서 네트워크 드라이버가 안잡히게 하는 멋진 보안 환경 때문에 공유폴더를 이용해서 파일을 복사하여 수동으로 설치하게 되어 있습니다. 따라서 GTK 를 써야만 하는 X 를 지원하는 Emacs 는 엄두도 못 내고 , Console 모드로 컴파일 해서 사용할려고 하다가 에러가 발생해서 해결하는 방법을 알아보겠습니다.

Emacs (23.4) 를 우분투 (11.10) 에서 수동으로 컴파일 할때 발생하는 문제입니다.

make[1]: *** No rule to make target `/usr/lib/crt1.o', needed by `temacs'.  Stop.


crt1.o 때문에 에러가 발생한 것임을 알 수가 있습니다.

$ gcc -print-file-name=crt1.o
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o

이렇게 위치 확인을 해주고

$ ./configure --without-x --with-crt-dir=/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/


이런식으로 crt 가 위치하는 디렉토리를 포함시켜서 configure 를 다시 실행해주고

$ make
$ sudo make install

하면 됩니다. 열악한 환경에서 서버 개발을 하는 모든 개발자들 분 파이팅!!




힘들게 저번 포스트 에서 정리를 했더니  더 쉬운 방법이 있다고 알려줘서 정리를 해 둡니다. (시작할 때 왜 알려주지 않은건가여.. )

저번과 거의 동일 합니다.

1. 아파치 설치하기 

$ sudo apt-get install apache2


2. 톰캣 설치하기 

$ sudo apt-get install tomcat7 tomcat7-docs tomcat7-admin tomcat7-examples


  설치해두면 언젠가는 쓸모가 있으니 한꺼번에 설치해줍니다. 

3. 제대로 설치됐는지 확인해보기 

   http://localhost  와 http://localhost:8080 

  으로 페이지가 제대로 뜨는지 확인해 줍니다. 만약 페이지가 제대로 뜬다면 apache2 와 tomcat7 은 제대로 설치된 것입니다. 

여기까지는 동일하고 여기서부터 살짝 바뀝니다.

4. 톰캣 에서 커넥터와 연결시키기 

$ sudo emacs /var/lib/tomcat7/conf/server.xml 


   에서 


       <!-- Define an AJP 1.3 Connector on port 8009 -->
       <!--
       <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
       -->


   로 되어 있는 부분에서 주석을 제거해서 

 

     <!-- Define an AJP 1.3 Connector on port 8009 -->
       <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


   로 변경합니다. 이것은 포트 8009 로 날라오는 프로토콜(protocol)이 AJP/1.3 인 것은 8443 포트로 넘기라는 것입니다.  8443은 톰캣 서버가 처리를 하는 포트라고 보시면 됩니다.   


5.  Proxy_AJP 모듈 활성화 시키기

소개해주신 분의 말씀으로는 아파치와 톰캣을 너무 자주 연결시키다 보니 아파치에 아예 포함되서 나오게 됐다고 합니다.

 $ sudo a2enmod proxy_ajp  



이 부분이 저번 포스트에서 언급했던 커넥터 부분과 동일한 기능을 하는 부분입니다.  

6. 아파치 에서 톰캣 연결시키기 

$ sudo emacs /etc/apache2/sites-available/default 


   이 부분에 대한 언급이 없어서 제일 어려웠던 부분입니다. 위의 파일을 열어서 


  

       DocumentRoot /var/www
   <Directory />
     Options FollowSymLinks
 AllowOverride None
   </Directory>
   <Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
  </Directory>


   인 부분을 찾아서 


DocumentRoot /var/lib/tomcat7/webapps/ROOT
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/lib/tomcat7/webapps/ROOT/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

        ProxyPass /servlet/ ajp://localhost:8009/servlet/
        ProxyPassMatch ^/.*\.(jsp|do)$ ajp://localhost:8009/

 로 바꾸어 줍니다. 즉 /var/www 을 /var/lib/tomcat7/webapps/ROOT 로 바꾸어 주는 것입니다. 그리고 아래쪽에 

ProxyPass /servlet/ ajp://localhost:8009/servlet/
ProxyPassMatch ^/.*\.(jsp|do)$ ajp://localhost:8009/

를 추가해줍니다. 부연 설명을 하자면 아파치(apache)가 바라보고 있는 DocumentRoot 와 톰캣이 바라보고 있는 webapps/ROOT 를 같은 곳을 바라보게 해주는 것입니다. 그리고 맨 아래에 추가해 준것은 jsp 와 do 로 끝나는 파일은 ajp 프로토콜로 8009 번 포트로 리다이렉션 해주라는 것입니다. 

 
7. 테스트페이지를 만들어 봅니다. 

$ sudo emacs /var/lib/tomcat7/webapps/ROOT/hello.jsp 


   내용은 

  

<HTML>
   <BODY>
   Hello!  The time is now <%= new java.util.Date() %>
   </BODY>
   </HTML>


  로 채우고 저장합니다. 

8. 톰캣과 아파치 재시작 (Restart)

$ sudo /etc/init.d/tomcat7 restart
  $ sudo /etc/init.d/apache2 restart



9. 브라우저에서 
   
    http://localhost  와 http://localhost/hello.jsp 로 테스트 해봅니다.


 

+ Recent posts