/forcefsck 파일이 있으면 부팅시 디스크 검사를 수행한다.


sudo touch /forcefsck


프로세스 이름을 ps 로 체크 해서 없으면 다시 실행시키는 스크립트를 만들고

crontab을 이용해서 주기적으로 체크한다.


$ sudo su

# cd  /usr/local/ZebraNetworkSystems/NeoRouter

# vi autorestart.sh

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

pid=`ps -ef | grep "nrservice" | grep -v 'grep' | awk '{print $2}'`

if [ -z $pid ]; then

   echo $(date)

   /etc/init.d/nrservice.sh start

   echo ""

fi


# chmod 755 autorestart.sh
# crontab -e

*/3 * * * * /usr/local/ZebraNetworkSystems/NeoRouter/autorestart.sh >> /usr/local/ZebraNetworkSystems/NeoRouter/autorestart.log


putty에서 control key가 안먹을때 아래와 같은 이유로 .byobu/keybindings.tmux에 하나씩 override 해서 수동 지정해야 한다.

# Fix putty/pietty function key problem
set -g terminal-overrides "xterm*:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~:kf5=\e[15~:kf6=\e[17~:kf7=\e[18~:kf8=\e[19~"
set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"


이유 : * Ctrl and arrow keys doesn't work in putty! What do I do?

putty inverts the sense of the cursor key mode on ctrl, which is a bit hard for
tmux to detect properly. To get ctrl keys right, change the terminfo settings
so kUP5 (Ctrl-Up etc) are the adjusted versions, and disable smkx/rmkx so tmux
doesn't change the mode. For example with this line in .tmux.conf (assuming you
have TERM set to xterm):

set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"

Note that this will only work in tmux 1.2 and above.


########################################################################################

.byobu/keybindings.tmux

# General Setting
set -g prefix C-l
unbind C-b
bind C-l send-prefix

# window starts from 1 instead of 0
set -g base-index 0

##### Statusbar properties.
# Set status bar
set -g status-bg default
set -g status-fg default
set -g status-justify left
set -g status-left-length 20
set -g status-right-length 25
set -g status-left " #[fg=red][#[fg=green]#H #[fg=red]]#[default]"
set -g status-right "#[fg=red][ #[fg=green]%H:%M #[fg=magenta]%a %m-%d #[fg=red]] #[default]"
setw -g window-status-format '#[fg=blue,bold]#I #W#[default] '
setw -g window-status-current-format '#[fg=blue,bold,reverse]#I #W#[default] '
# Highlight active window
setw -g window-status-current-bg green
setw -g window-status-bg black
setw -g window-status-alert-attr default
setw -g window-status-alert-fg yellow
# message
set -g message-fg black
set -g message-bg green

##### Set notifications
setw -g monitor-activity on
set -g visual-activity on
set -g visual-bell on
set -g bell-action any

##### Automatically set window title
setw -g automatic-rename off
set -g set-titles on
set -g set-titles-string "[#H] [#I: #W#F]"
set -g status-utf8 on

#### Pane settings
set -g pane-active-border-bg black
set -g pane-active-border-fg green
set -g pane-border-fg white
set -g pane-border-bg black

# Fix putty/pietty function key problem
set -g terminal-overrides "xterm*:kf1=\e[11~:kf2=\e[12~:kf3=\e[13~:kf4=\e[14~:kf5=\e[15~:kf6=\e[17~:kf7=\e[18~:kf8=\e[19~"
set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"

# terminal scrollback
set -g terminal-overrides 'xterm*:smcup@:rmcup@'

##### Binding key
set -g status-keys emacs
setw -g mode-keys emacs

bind-key C-a last-window
# open man page in new window
bind ! command-prompt -p "man for " "split-window 'man %%'"

bind Tab choose-window

# rename current window
unbind ,
bind A command-prompt -p "rename current window to" "rename-window %%"

# split windows vertically and horizontally
unbind %
unbind '"'
bind | split-window -h
bind - split-window -v

bind + select-layout tiled

# setw -g xterm-keys on

# blank screen after a period of inactivity
set -g lock-command 'tput civis && read -s -n1'
# bind x set lock-command '/usr/bin/vlock' \; lock-client \; set lock-command 'tput civis && read -s -n1'

set -g history-limit 20000

set -g terminal-overrides "*88col*:colors=88,*256col*:colors=256,xterm*:colors=256"
set -g default-terminal "screen-256color"



#========================================================================================
# Toggle mouse on with ^B m bind m \ set -g mode-mouse on \;\ set -g mouse-resize-pane on \;\ set -g mouse-select-pane on \;\ set -g mouse-select-window on \;\ display 'Mouse: ON' # Toggle mouse off with ^B M bind M \ set -g mode-mouse off \;\ set -g mouse-resize-pane off \;\ set -g mouse-select-pane off \;\ set -g mouse-select-window off \;\ display 'Mouse: OFF' unbind + bind + \ new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\ swap-pane -s tmux-zoom.0 \;\ select-window -t tmux-zoom unbind - bind - \ last-window \;\ swap-pane -s tmux-zoom.0 \;\ kill-window -t tmux-zoom






##############################################################################################
키 코드값 확인

Windows PuTTY client: xterm broken

The following is tested in Windows 7 SP-1 using PuTTY 0.60 to connect to Kubuntu 10.4 and 8.4. This is isolated to PuTTY because the same keyboard connecting to the same systems over vnc sends the right keys both in the GUI emacs as well as in the terminal windows with emacs -nw.

PuTTY claims to be an xterm but it mangles most of the keys. Most notably, Ctrl does not modify most of the function keys and keypad keys. Here follows what I have been able to put together using a combination of quoted-insert and the dribble file. This is nothing like what Emacs expects in xterm.el\e is escape (^[). ^M is 0x13<> means nothing happens. <putty> means PuTTY grabs it. <w7> means Windows 7 grabs it.

                Normal    Ctrl      Shift     Alt       CrSh      CrAlt     ShAlt     CrShAlt  
Left Arrow      \eOD      \e[D      \eOD      \e\eOD    \eOD      \e\eOD    \e\eOD    \e\eOD 
Right Arrow     \eOC      \e[C      \eOC      \e\eOC    \eOC      \e\eOC    \e\eOC    \e\eOC 
Up Arrow        \eOA      \e[A      \eOA      \e\eOA    \eOA      \e\eOA    \e\eOA    \e\eOA 
Down Arrow      \eOB      \e[B      \eOB      \e\eOB    \eOB      \e\eOB    \e\eOB    \e\eOB

                Normal    Ctrl      Shift     Alt       CrSh      CrAlt     ShAlt     CrShAlt  
Home            \e[1~     <>        \e[1~     \e\e[1~   <>        <>        \e\e[1~   <>
Insert          \e[2~     <>        \e[2~     \e\e[2~   <>        <>        \e\e[2~   <>
Delete          \e[3~     <>        \e[3~     \e\e[3~   <>        <w7>      \e\e[3~   <>     
Page Up         \e[5~     <putty>   \e[5~     \e\e[5~   <>        <putty>   \e\e[5~   <>     
End             \e[4~     <>        \e[4~     \e\e[4~   <>        <>        \e\e[4~   <>     
Page Down       \e[6~     <putty>   \e[6~     \e\e[6~   <>        <putty>   \e\e[6~   <>     

                Normal    Ctrl      Shift     Alt       CrSh      CrAlt     ShAlt     CrShAlt  
F1              \e[11~    \e[11~    \e[23~    \e\e[11~  \e[23~    \e\e[11~  \e\e[23~  \e\e[23~
F2              \e[12~    \e[12~    \e[24~    \e\e[12~  \e[24~    \e\e[12~  \e\e[24~  \e\e[24~       
F3              \e[13~    \e[13~    \e[25~    \e\e[13~  \e[25~    \e\e[13~  \e\e[25~  \e\e[25~
F4              \e[14~    \e[14~    \e[26~    <w7>      \e[26~    <>        <w7>      <>
F5              \e[15~    \e[15~    \e[28~    \e\e[15~  \e[28~    \e\e[15~  \e\e[28~  \e\e[28~
F6              \e[17~    \e[17~    \e[29~    \e\e[17~  \e[29~    \e\e[17~  \e\e[29~  \e\e[29~
F7              \e[18~    \e[18~    \e[31~    \e\e[18~  \e[31~    \e\e[18~  \e\e[31~  \e\e[31~
F8              \e[19~    \e[19~    \e[32~    \e\e[19~  \e[32~    \e\e[19~  \e\e[32~  \e\e[32~
F9              \e[20~    \e[20~    \e[33~    \e\e[20~  \e[33~    \e\e[20~  \e\e[33~  \e\e[33~
F10             \e[21~    \e[21~    \e[34~    \e\e[21~  \e[34~    \e\e[21~  \e\e[34~  \e\e[34~
F11             \e[23~    \e[23~    \e[23~    \e\e[23~  \e[23~    \e\e[23~  \e\e[23~  \e\e[23~
F12             \e[24~    \e[24~    \e[24~    \e\e[24~  \e[24~    \e\e[24~  \e\e[24~  \e\e[24~

NUM LOCK ON     Normal    Ctrl      Shift     Alt       CrSh      CrAlt     ShAlt     CrShAlt  
Num Lock        \eOP      <>        <>        <>        <>        <>        <w7>      <>
/               \eOQ      \eOQ      \eOQ      \e/       \eOQ      <>        \e/       <>
*               \eOR      \eOR      \eOR      \e*       \eOR      <>        \e*       <>
-               \eOS      \eOS      \eOS      \e-       \eOS      <>        \e-       <>
+               \eOl      \eOm      \eOm      \e+       \eOm      <>        \e+       <>
Enter           \eOM      \eOM      \eOM      \e^M      \eOM      \e^M      \e^M      \e^M
.               \eOn      \eOn      \eOn      \e.       \eOn      <w7>      \e.       <>
0               \eOp      \eOp      \eOp      <w7>      \eOp      <>        <>        <>
1               \eOq      \eOq      \eOq      <w7>      \eOq      <>        <>        <>
2               \eOr      \eOr      \eOr      <w7>      \eOr      <>        <>        <>
3               \eOs      \eOs      \eOs      <w7>      \eOs      <>        <>        <>
4               \eOt      \eOt      \eOt      <w7>      \eOt      <>        <>        <>
5               \eOu      \eOu      \eOu      <w7>      \eOu      <>        <>        <>
6               \eOv      \eOv      \eOv      <w7>      \eOv      <>        <>        <>
7               \eOw      \eOw      \eOw      <w7>      \eOw      <>        <>        <>
8               \eOx      \eOx      \eOx      <w7>      \eOx      <>        <>        <>
9               \eOy      \eOy      \eOy      <w7>      \eOy      <>        <>        <>

NUM LOCK OFF    Normal    Ctrl      Shift     Alt       CrSh      CrAlt     ShAlt     CrShAlt  
Num Lock       
/               \eOQ      \eOQ      \eOQ      \e/       \eOQ      <>        \e/       <>
*               \eOR      \eOR      \eOR      \e*       \eOR      <>        \e*       <>
-               \eOS      \eOS      \eOS      \e-       \eOS      <>        \e-       <>
+               \eOl      \eOm      \eOm      \e+       \eOm      <>        \e+       <>
Enter           \eOM      \eOM      \eOM      \e^M      \eOM      \e^M      \e^M      \e^M
.               \eOn      \eOn      \eOn      \e.       \eOn      <w7>      \e.       <>
0               \eOp      \eOp      \eOp      <w7>      \eOp      <>        <>        <>
1               \eOq      \eOq      \eOq      <w7>      \eOq      <>        <>        <>
2               \eOr      \eOr      \eOr      <w7>      \eOr      <>        <>        <>
3               \eOs      \eOs      \eOs      <w7>      \eOs      <>        <>        <>
4               \eOt      \eOt      \eOt      <w7>      \eOt      <>        <>        <>
5               \eOu      \eOu      \eOu      <w7>      \eOu      <>        <>        <>
6               \eOv      \eOv      \eOv      <w7>      \eOv      <>        <>        <>
7               \eOw      \eOw      \eOw      <w7>      \eOw      <>        <>        <>
8               \eOx      \eOx      \eOx      <w7>      \eOx      <>        <>        <>
9               \eOy      \eOy      \eOy      <w7>      \eOy      <>        <>        <>

'Linux' 카테고리의 다른 글

Linux 자동 강제 fsck 하기  (0) 2012.12.10
linux 특정 프로세서가 죽으면 자동 재실행  (0) 2012.12.05
byobu 컨트롤키가 안먹을때 keybindings.tmux  (0) 2012.12.04
vimdiff  (0) 2012.12.04
최신 git으로 업데이트 하기  (0) 2012.10.30
Swap 파일로 추가하기  (0) 2012.10.12
vimdiff Linux 2012. 12. 4. 10:09

실행 : vimdiff 파일들  or  vim -d 파일들



do - 다른 윈도우의 변경 사항을 현재 윈도우로 가져오기
dp - 현재 윈도우의 변경 사항을 다른 윈도우로 넣기
]c - 다음 변경 사항으로 이동
[c - 이전 변경 사항으로 이동
Ctrl W + Ctrl W - 다른 윈도우로 이동

다른 윈도우로 이동할 때는 Ctrl + W <방향키> 를 이용할 수도 있다.


그냥 보기만 할때는 간편하게 sdiff 사용.




커맨드창에서 두개의 파일을 비교 하는 방법은 

vimdiff a.c b.c

이렇게 바로 실행 할 수도 있고, 아래와 같이 실행 할 수도 있따.(수평 분할)

vim a.c
:diffs b.c   (:diffsplit b.c)

수직 분할하려 비교 하려면 아래와 같이 명령어를 사용하면 된다.
vim a.c
:vert diffs b.c   (:vertical diffsplit b.c)

이미 열러 있는 두개의 파일을 비교 할때는 아래 처럼 하면 된다.
vim a.c
:sp b.c
:diffthis 

실제로 vim은 실행시 몇 가지 모드 중 하나로 동작 하는 것이다. 즉, 실행시 readonly, vi compatible, diff mode등으로 전환 된다.


이제 부터는 비교하고 있는 파일의 내용을 편집하는 것을 알아 보도록 하자.
비교하는 파일의 편집이란, 한쪽의 내용을 다른쪽으로 copy하는 것이다.
:diffget
:diffset

위의 명령어는 현재 커서가 위치한 반대편의 내용으로 부터 가져오거나 보내는 것이다.

'Linux' 카테고리의 다른 글

linux 특정 프로세서가 죽으면 자동 재실행  (0) 2012.12.05
byobu 컨트롤키가 안먹을때 keybindings.tmux  (0) 2012.12.04
vimdiff  (0) 2012.12.04
최신 git으로 업데이트 하기  (0) 2012.10.30
Swap 파일로 추가하기  (0) 2012.10.12
리눅스 거버너  (0) 2012.10.09

출처 : http://goodidea.tistory.com/86

 Java에서 서블릿을 이용하는 경우에는 쿼리 문자열 값 이나, 호스명, 포트 등은 각각 getParameter() ,getServerName(), getServerPort() 등의 메소드를 이용하여 값을 읽어내면 간단하지만 직접 URL을 핸들링해야 하는 경우가  가끔씩 있다.  URL Rewriting을 하고자 한다거나, 경로에 파라메터를 넣고자 하는 경우 이거나 아니면 직접 웹서버를 구현하는 경우라던가 등.

그래서 이번에는 간단하게 URL로 부터 값을 뽑아 내는 방법으로 정규식 (Regular Expression)을 이용하는 방법을 정리 해보고자 한다.
 
더불어 정규식 사용방법을 익히는데도 도움이 되도록 가능하면 상세하게 설명을 달것이다.

URL(Uniform Resource Location)에의 구성은 기본적으로 아래와 같은 구조를 갖는다.

 scheme://username:password@domain:port/path?query_string#anchor

여기에서는 사용자명과 패스워드를 입력받는 경우는 생략하고 scheme 에는 http, https 가 들어오는 경우만 처리하는 것으로 한다.

즉 아래와 같은 경우 만 target으로 할 것이다.
 scheme://domain:port/path?query_string#anchor


  정규식을 활용하는 방법은 다량의 텍스트에서 원하는 패턴만 찾아내고자 할때가 있지만 찾아낸 문자열에서 다시 세부 요소를 뽑아 내고자 하는경우에도 활용 할 수 있다. 

  예를 들어 HTML 텍스트에서  <a href="someurl">someurl go!</a>  형태와 같은 <a> 태그를 를 찾아 내고자 하는 경우도 있지만 실제 활용단계에서는 href="" 안에 있는 값을 바로 뽑아 낼 수 있는게 필요하다.

마찬가지로 URL에 정규식의 적용도 실제 URL내에 있는 스키마, 호스트(도메인)명, 포트, 경로, 쿼리문자열, 앵커(anchor)을 추출하는게 실제 의미가 있다.

이러한 경우를 위해 정규식에서는 ()를 이용한 그룹핑을 지원한다. 따라서 각 추출하고자 하는 요소를 () 묶어 주기만 하면 된다.

첫번째 스키마, 스키마는 http와 https 인경우만 처리하기로 했으므로  http:// 또는 https:// 를 찾기 위해

   ^(https?):\/\/

     's'문자는 는 생략가능이고, '/'문자를 Escape 하기 위해 \를 앞에 붙였다. '^' 줄의 시작위치를 뜻한다.

두번째 도메인(호스트)명, 도메인명에는 영숫자, '-'  와 '.' 가 올 수 있다. '_' 문자는 맨 앞에 못오거나 하는 규칙이 있지만 URL을 파싱하려는 서비스에 도달했다는 의미는 정상적인 URL이므로 복잡한 비정상적인 경우는 생각할 필요는 없다.
그래서  콜론(:), 슬래시(/), 빈칸(' ')을 뺀 나머지 문자열이 하나 이상 나타난다고  표현해주면된다.
([^:\/\s]+)

세번째, 포트 포트는 ":8080" 형태로 콜론뒤에 숫자가 나온다. 숫자의 길이는  경로가 시작되는 다음 슬래시(/) 앞까지다. 그리고 포트 값은 생략될 수 있으므로 그룹핑 괄호 뒤에 물음표(?)를 해준다. 안쪽 괄호는 이후 ':"를 뺀 포트값만 추출하기 위함이다.

(:([^\/]*))?

네번째 경로다. 경로는 반드시 슬래시(/)로 시작하고 빈칸과 슬래시가 아닌문자들인 것을 한다. 경로는 반복될 수 있으므로 ()에 *를 붙이고,  중간경로 없이 바로파일명으로 넘어 갈 수 있으므로 물음표를 붙인다.

((\/[^\s/\/]+)*)?

다섯번째 파일명자리는 빈칸, 물음표, 또는 앵커표시인 샵(#)이 나올때까지 거나 아니면 문자열 맨끝까지 이다.
파일명은 마지막 슬래시로 시작해서 빈칸이나 물음표가 아닌문자들이 올 수 있는 것으로 한다. 파일명 문자열은 없을 수 도있으므로 (전체 URL에 경로 / 문자로 끝나는 경우) * 로 문자열 뒤에 붙이고
\/([^#\s\?]*)

여섯번째 쿼리자리는 물음표부터 샵이나오거나 문자열 끝까지 이고 생략될 수 있으므로
(\?([^#\s]*))?

앵커는 샵으로 시작하는 문자열이고 생략될 수 있으므로
(#(\w*))?

마지막으로 문자열의 끝 표시 $를 붙여 준다.
$

최종적으로 앞서 정리한 자리들을 모두 합쳐주면 다음과 같이 된다.
^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$


아래는 java로 작성한 sample 코드.  자바에서 '\' 문자를 다시 escape 해주기 위해 "\\" 로 바뀌었다.

public void extractUrlParts() {
   
String testurl = "https://goodidea.tistory.com:8888/qr/aaa/ddd.html?abc=def&ddd=fgf#sharp";
 
//                                     http:       //  도메인명             :포트                     경로                                파일명                    쿼리                         앵커



   
Pattern urlPattern = Pattern.compile("^(https?):\\/\\/([^:\\/\\s]+)(:([^\\/]*))?((\\/[^\\s/\\/]+)*)?\\/([^#\\s\\?]*)(\\?([^#\\s]*))?(#(\\w*))?$");



   



   
Matcher mc = urlPattern.matcher(testurl);
   
   
if(mc.matches()){
           
for(int i=0;i<=mc.groupCount();i++)
                   
System.out.println("group("+i+") = "+mc.group(i));
   
}
   
else
           
System.out.println("not found");
}

 

이렇게 해서 실행시키면 다음과 같은 결과가 나오다.


group
(0) = https://goodidea.tistory.com:8888/qr/aaa/ddd.html?abc=def&ddd=fgf#sharp
group
(1) = https
group
(2) = goodidea.tistory.com
group
(3) = :8888
group
(4) = 8888
group
(5) = /qr/aaa
group
(6) = /aaa
group
(7) = ddd.html
group
(8) = ?abc=def&ddd=fgf
group
(9) = abc=def&ddd=fgf
group
(10) = #sharp
group
(11) = sharp


mc.groupCount()는 정규식내에 괄호의 수 만큼 그룹핑을 하게 되고 배열(mc.group)의 각 그룹의 인덱스는 고정이며 해당 위치별로 [1]은 스키마, [7]은 파일명이 되는 것이다.

sudo add-apt-repository ppa:git-core/ppa

sudo apt-get update

sudo apt-get install git-core git


'Linux' 카테고리의 다른 글

byobu 컨트롤키가 안먹을때 keybindings.tmux  (0) 2012.12.04
vimdiff  (0) 2012.12.04
최신 git으로 업데이트 하기  (0) 2012.10.30
Swap 파일로 추가하기  (0) 2012.10.12
리눅스 거버너  (0) 2012.10.09
proxy server 간단 설정 - squid3  (0) 2012.09.13
Swap 파일로 추가하기 Linux 2012. 10. 12. 14:55

$ sudo su

# dd if=/dev/zero of=/boot/swapfile bs=1024 count=2097152  (여기선 2GB : kbyte단위로 적어주면 된다)

mkswap -v1 /boot/swapfile

# swapon /boot/swapfile

# free 

 스왑이 2GB 더 늘어난 것을 확인

# vi /etc/fstab
/boot/swapfile swap swap defaults 1 1

'Linux' 카테고리의 다른 글

vimdiff  (0) 2012.12.04
최신 git으로 업데이트 하기  (0) 2012.10.30
Swap 파일로 추가하기  (0) 2012.10.12
리눅스 거버너  (0) 2012.10.09
proxy server 간단 설정 - squid3  (0) 2012.09.13
SSH Port Forwarding(SSH Tunneling)  (0) 2012.09.13

설치하면서 적은 글이여서 잘되리라 본다. (MacBook Pro에 설치)

1. ubuntu 12.04.1 를 설치한다. 반드시 64 bt 버전을 설치해야 한다. 최소 메모리는 8GB 는 있어야 하고 swap도 2G이상 잡아두는것이 좋다.

2. 빌드에 필요한 기본 패키지를 설치한다.

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
  gcc-4.4 g++-4.4 gcc-4.4-multilib g++-4.4-multilib
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

3.  Java SE 6 JDK를 설치한다. 

http://www.oracle.com/technetwork/java/javase/downloads/index.html  에 접속후 
Java SE 6 Update 35 옆의 다운로드 버튼을 클릭해서 Linux x64 버전을 다운받은 후 설치한다.
현재 파일명은 : jdk-6u35-linux-x64.bin

$ chmod +x jdk-6u35-linux-x64.bin $ sudo ./jdk-6u35-linux-x64.bin $ sudo mkdir -p /usr/lib/jvm $ sudo mv jdk1.6.0_35 /usr/lib/jvm/ $ sudo ln -s /usr/lib/jvm/jdk1.6.0_35/ /usr/lib/jvm/java-6-sun $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_35/bin/java 1 $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_35/bin/javac 1 $ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_35/bin/javaws 1 $ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_35/bin/jar 1

아래 4개는 기존에 자바가 깔려 있을 경우만 $ sudo update-alternatives --config java $ sudo update-alternatives --config javac $ sudo update-alternatives --config javaws $ sudo update-alternatives --config jar

$ java -version 으로 버전 확인시 아래처럼 나오면 됨 java version "1.6.0_35" Java(TM) SE Runtime Environment (build 1.6.0_35-b10) Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01, mixed mode)

4. GCC를 설정 한다.

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 80 \ --slave /usr/bin/g++ g++ /usr/bin/g++-4.4 $ sudo update-alternatives --config gcc 실행시 목록 나오면 4.4.x 선택하면 된다 (0번)

$ gcc --version 으로 아래처럼 버전 나오면 됨 gcc (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7 Copyright (C) 2010 Free Software Foundation, Inc.

5. 커널/부트 빌드를 위해 컴파일러를 설치한다.

wget -c http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 sudo mkdir -p /opt/toolchains sudo tar -C/opt/toolchains/ -jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 sudo ln -s /opt/toolchains/arm-2010q1/ -t /opt/

6. CCACHE 설정

Setting up ccache

You can optionally tell the build to use the ccache compilation tool. Ccache acts as a compiler cache that can be used to speed-up rebuilds. This works very well if you do "make clean" often, or if you frequently switch between different build products.

Put the following in your .bashrc or equivalent.

export USE_CCACHE=1

By default the cache will be stored in ~/.ccache. If your home directory is on NFS or some other non-local filesystem, you will want to specify the directory in your .bashrc as well.

export CCACHE_DIR=<path-to-your-cache-directory>

The suggested cache size is 50-100GB. You will need to run the following command once you have downloaded the source code.

prebuilt/linux-x86/ccache/ccache -M 50G