2015년 3월 27일 금요일

java SE development Kit 8 설치하기(JDK8 설치하기)

java SE development Kit 8 설치하기(JDK8 설치하기)

JAVA 8을 설치하는 방법입니다.

1. 자신의 자바 버전을 확인하기

java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

2. java 다운로드 하기

- 64bit 다운 받기

cd /usr/local/src
# wget --no-cookies --no-check-certificate --header \
"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/8u40-b25/jdk-8u40-linux-x64.tar.gz"
# tar xzf jdk-8u40-linux-x64.tar.gz

- 32bit 다운 받기

# cd /usr/local/src
# wget --no-cookies --no-check-certificate --header \
"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/8u40-b25/jdk-8u40-linux-i586.tar.gz"
# tar xzf jdk-8u40-linux-i586.tar.gz

3. java 설치하기

# alternatives --install /usr/bin/java java /usr/local/src/jdk1.8.0_40/bin/java 2
# alternatives --config java
There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   3           /usr/local/src/jdk1.8.0_40/bin/java

Enter to keep the current selection[+], or type selection number: 3


alternatives 명령어로 기존에 설치되었던 java를 교체합니다.

java가 완벽하게 설치가 되었다면 이번에는 밑에 있는 명령어로 javac와 jar의 경로를 변경해줘야 합니다.

# alternatives --install /usr/bin/jar jar /usr/local/src/jdk1.8.0_40/bin/jar 2
# alternatives --install /usr/bin/javac javac /usr/local/src/jdk1.8.0_40/bin/javac 2
# alternatives --set jar /usr/local/src/jdk1.8.0_40/bin/jar
# alternatives --set javac /usr/local/src/jdk1.8.0_40/bin/javac 

4. java 버전 체크하기

# java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

확인해보면 1.8.0_40 버전으로 업데이트된 것을 확인할 수 있습니다.

5. java 경로 설정하기

java를 기본으로 한 어플리케이션들은 거의 대부분 동작하기 위해 환경변수를 참조합니다. 
밑의 명령어로 환경변수를 설정해줍시다.

# export JAVA_HOME=/usr/local/src/jdk1.8.0_40
# export JRE_HOME=/usr/local/src/jdk1.8.0_40/jre
# export PATH=$PATH:/usr/local/src/jdk1.8.0_40/bin:/usr/local/src/jdk1.8.0_40/jre/bin


이렇게 java 최신버전으로 교체하기 끝~

이상~!

2015년 3월 22일 일요일

'작업 스케줄러'를 이용하여 예약된 작업 실행하기

'작업 스케줄러'를 이용하여 예약된 작업 실행하기


윈도우에도 리눅스의 crontab처럼 예약 작업을 하는 기능이 있습니다.
한글 버전에서는 '작업 스케줄러', 영어 버전에서는 'task scheduler'입니다.

1. 시작하기 


윈도우 키를 누른 후 '작업' 또는 'task'를 치면 아마 작업 스케줄러가 제일 위에 나올거에요.


작업 스케줄러 라이브러리 탭을 클릭하면 현재 예약된 작업들이 나옵니다.

2. 생성하기


오른쪽 빈 칸에서 마우스 우클릭 후 '기본 작업 만들기'를 누릅니다.


적당한 이름을 입력하고 다음을 누릅니다.


작업이 어느 주기로 진행될지 선택합니다.


이거는 매일을 선택했을 경우 나오는 창입니다.


이건 매주를 선택했을 경우이고


이건 매월을 선택했을 경우 나오는 메시지입니다.


알맞은 주기를 선택하고 다음을 누르면 다음과 같이 어떤 동작을 수행하겠냐고 물어봅니다. 여기서는 프로그램 시작을 선택!


그러면 무슨 프로그램 또는 스크립트를 실행시킬지 찾아보라고 하는데요.


여기서 지난 번에 'forfiles' 포스팅 때 만들어 놓은 bat 파일을 적용시키겠습니다.


마침을 눌러서 생성을 합니다.


생성이 되면 작업 스케줄 목록에 추가가 된 것을 볼 수 있습니다.

3. 설정하기

생성을 하면 사용자의 환경에 맞게 설정을 해주어야 합니다.


만들어준 스케줄 우클릭 하고 속성으로 들어갑니다.


관리자로 실행할 필요가 있는 스크립트 및 프로그램이라면 '가장 높은 수준의 권한으로 실행'을 선택합니다. 그리고 로그온 또는 비로그온시에도  실행할지를 상황에 따라 설정합니다.


간혹 작업이 제 시간에 시작이 안 될 경우를 대비해서 '작업이 실패하는 경우 다시 시작 간격'을 설정해주는 것도 좋습니다.

이제 기다리다가 설정한 시간에 잘 실행되는지 확인하면 됩니다.

이상~!

2015년 3월 20일 금요일

오래된 파일 지우는 윈도우 명령어 "forfiles"

오래된 파일 지우는 윈도우 명령어 "forfiles"


사실 forfiles 명령어는 오래된 파일을 지우는 명령어는 아니지만 옵션값을 잘 지정해주고 스케줄에 등록하면 편리하게 오래된 파일을 지울 수 있다는 점 때문에 많은 분들이 삭제 용도로 사용하시는 것 같습니다.
이 명령어는 옵션값을 많이 입력해야 하므로 쓰기 까다로운 점이 있지만 잘 쓰면 편하게 오래된 불필요한 파일들을 손쉽게 제거뿐만 아니라 다양한 용도로 사용할 수 있으니 잘 알아두시면 좋을 것 같습니다~!

1. 사용 방법

FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

2. 옵션 목록

    /P    pathname  검색을 시작할 경로를 지정합니다.
                          현재 작업 디렉터리(.)가 기본 폴더입니다.

    /M    searchmask  검색 마스크에 따라 파일을 검색합니다.
                             '*'이 기본 검색 마스크입니다.

    /S                  하위 폴더를 포함하도록 지정합니다. 예, "DIR /S"

    /C    command       각 파일에 실행할 명령을 지정합니다.
                        명령 문자열을 큰따옴표로 묶어야 합니다.

                        "cmd /c echo @file"이 기본 명령입니다.

                        명령 문자열에 다음 변수를 사용할 수 있습니다.
                        @file    - 파일 이름을 반환합니다.
                        @fname   - 확장명 없이 파일 이름을 반환합니다.
                        @ext     - 파일의 확장명만 반환합니다.
                        @path    - 파일의 전체 경로를 반환합니다.
                        @relpath - 파일의 상대 경로를
                                   반환합니다.
                        @isdir   - 파일 형식이 디렉터리인 경우 "TRUE"를
                                   반환하고 파일인 경우 "FALSE"를 반환합니다.
                        @fsize   - 파일의 크기(바이트)를
                                   반환합니다.
                        @fdate   - 파일을 마지막으로 수정한 날짜를
                                   반환합니다.
                        @ftime   - 파일을 마지막으로 수정한 시간을
                                   반환합니다.

                        명령줄에 특수 문자를 포함하려면 0xHH 형식의 16진수 코드(예, 탭은                             0x09)를 사용하십시오. 내부 CMD.exe 명령 앞에는 "cmd /c"를 사용해야                         합니다.

    /D    date       지정한 날짜와 마지막 수정한 날짜가 늦거나 같은(+) 또는 빠르거나                               같은(-) 파일을 찾습니다.
                        날짜 포맷은 "yyyy-MM-dd"입니다.
                        또한 마지막 수정한 날짜가 현재 날짜에 "dd"일을 더한 날짜보다 늦거나                         같은(+) 또는 현재 날짜에서 "dd"일을 뺀 날짜보다 작거나 같은(-) 파일                           을 찾습니다.
                        유효한 "dd" 범위는 0에서 32768까지입니다.
                        부호를 지정하지 않으면 "+"가 기본값입니다.

    /?                  이 도움말 메시지를 표시합니다.

3. 윈도우에서 직접 알려주는 사용예시

  FORFILES /P C:\WINDOWS /S /M DNS*.*
  - C:\WINDOWS 하위 디렉토리 중 DNS를     포함하는 모든 파일 삭제
  FORFILES /S /M *.txt /C "cmd /c type @file | more"
  - 현재위치의 모든 텍스트 파일의 내용을 보여줍니다.
  FORFILES /P C:\ /S /M *.bat
  - C:\ 하위 디렉토리 포함 모든 bat 파일을 삭제합니다.
  FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 was changed 30 days ago"
  - 현재 디렉토리에 있는 모든 실행 파일들중 30일 이전의 파일들을 "경로\1.exe was           changed 30 days ago" 형식으로 표시
  FORFILES /D 2001-01-01 /C "cmd /c echo @fname is new since Jan 1st 2001" 
  - 2001-01-01에 만들어진 파일을 확장자명 없이 출력
  FORFILES /D +2015-3-21 /C "cmd /c echo @fname is new today"
  - 2015-03-21 이후에 만들어진 파일을 @fname 뒤의 문장을 포함하여 출력
  FORFILES /M *.exe /D +1
  FORFILES /S /M *.doc /C "cmd /c echo @fsize"
  FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

4. .bat 파일을 만들어서 실행


메모장을 열어서 스크립트를 입력합니다.


입력 후 다른 이름으로 저장을 누릅니다.


파일형식은 '모든 파일' 파일이름은 test.bat라고 적어서 bat 파일을 만들어주세요.
이제 만든 bat 파일을 실행시키면 입력해주었던 스크립트가 차례대로 실행됩니다.

이상~!


2015년 3월 19일 목요일

리눅스 가동시간을 간단하게 알아보는 방법

리눅스 가동시간을 간단하게 알아보는 방법


리눅스에서는 간단하게 서버의 가동시간과 로그인한 사용자 수 그리고 1분, 5분, 15분 동안의 시스템 평균 부하율을 표현해주는 명령어가 있습니다. 옵션도 없이 그냥 uptime만 쓰면 됩니다.

지금부터 uptime을 사용하여 나온 값을 보여드리겠습니다.

[root@jun ~]# uptime
 20:43:33 up  8:57,  1 user,  load average: 0.00, 0.00, 0.00

앞에서부터 지금 시간, 서버가 켜진 뒤 지난 시간(가동시간), 현재 접속자 수, 시간 별 평균 부하율(1분, 3분, 15분)

이 명령어는 서버관리자가 가장 간단하게 서버를 알아 볼 수 있는 방법이므로 항상 숙지하여야 합니다.
모 회사 면접에서 첫 질문이 'uptime이 뭐에요?'였습니다.

이상~!

윈도우 서버 가동시간 확인하는 방법

윈도우 서버 가동시간 확인하는 방법


이전에는 리눅스에서 간단하게 서버 가동시간을 알아보는 방법을 포스팅했습니다.

리눅스에서 간단하게 서버 가동시간을 알아보는 방법!

이번에는 윈도우 서버에서 간단하게 알아보는 방법을 포스팅하겠습니다.

윈도우는 여러가지 방법이 있는데 그 중에서 가장 간단한 방법입니다.

1. net stats srv

net stats srv는 많이 이용되고 빠르게 확인할 수 있는 방법입니다.

윈도우 키 + R을 눌러 cmd창을 실행시킵니다.

다음 net stats srv를 입력해주세요.



제일 윗 부분에 서버가 언제부터 가동되었는지 나옵니다. 제일 윗 줄 확인!

2. systeminfo

systeminfo는 위의 방법보다 시간은 더 걸리나 정말 세세하게 윈도우 서버를 볼 수 있는 명령어 입니다.

마찬가지로 cmd창을 실행시킵니다.

다음 systeminfo를 입력합니다.



systeminfo를 치고 약 10~15초 정도 기다리면 위의 그림과 같이 장황한 설명이 나옵니다.
제일 위에 있는 줄이 서버가 언제 켜졌는지에 대한 정보이고 밑으로는 서버의 모델 및 하드웨어 스펙이 나오고 그 밑으로는 설치된 hotfix가 줄줄이 나옵니다. 마지막으로는 네트워크 정보가 나오구요.

정말 간단한 명령어로 윈도우 서버의 현재 상태를 알아보았습니다. 서버의 상태를 빨리빨리 파악하여 장애를 예방하고 조치하면 좋겠죠?

이상~!

2015년 3월 15일 일요일

윈도우에서 리눅스 ftp 서버로 파일 전송시 425 에러 해결방법

윈도우에서 리눅스 ftp 서버로 파일 전송시 425 에러 해결방법


윈도우에서 리눅스 ftp 서버로 파일을 전송하는데 뜬금없는 에러가 발생했습니다.

에러의 내용은 다음과 같았습니다.


200 PORT command successful. Consider using PASV.
425 Failed to establish connection.


이 에러로 한참을 고생했는데 해결방법은 역시 간단했습니다.

현재 저의 상황
   - 리눅스 서버의 ftp는 모두 제대로 구성이 되어있음
   - 리눅스 서버의 방화벽은 20번, 21번이 열려있음
   - 윈도우에서 ftp.exe를 이용하여 파일전송(cmd창에서 ftp 실행)
   - 윈도우 2012 R2 서버에서 ftp 파일 전송 시도

1. 윈도우에서 '고급 보안이 포함된 windows 방화벽' 실행

윈도우키를 누르고 '고급'만 쳐도 바로 윗부분에 나오는 '고급 보안이 포함된 windows 방화벽'을 선택합니다.



2. 인바운드 규칙에서 마우스 우클릭 후 새규칙을 누릅니다.



3. 새 인바운드 규칙 마법사에서 제일 위에 프로그램을 선택하고 다음을 누릅니다.



4. 다음 프로그램 경로를 선택합니다.

경로: C:\Windows\System32\ftp.exe



5. 연결 허용 선택 후 다음으로 이동합니다.



6. 자신의 환경에 맞게 적용 시기를 선택하고 다음을 누릅니다.



7. 규칙의 이름을 임의로 정하고 마침을 눌러주세요.

저는 '파일 전송 프로그램(ftp)'라는 규칙명을 사용하기로 했습니다.



8. 새로 만들어준 규칙이 잘 등록되었는지 확인해주세요.



9. ftp를 실행하여 다시 파일을 전송하고 차이점을 확인합니다.



위와 같이 226 Transfer complete라는 문구가 뜬다면 이번 미션은 complete!

이상~! 

2015년 3월 11일 수요일

sysctl.conf 설정시 bridge 모듈을 못 읽어들이는 문제

sysctl.conf 설정시 bridge 모듈을 못 읽어들이는 문제


sysctl.conf 커널 매개변수 파일을 설정하고 제대로 설정이 되었는지 확인을 해보니까 밑의 문제가 생겼습니다.

[root@netty ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

위에 프린트된 내용처럼 bridge관련된 키를 찾을 수 없다는 명령어인데요.

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key

이 문제의 원인은 bridge 모듈이 커널에 입력되지 않아서 생기는 문제입니다.

간단한 방법으로 문제를 해결할 수가 있습니다.

[root@netty ~]# lsmod |grep bridge
bridge                 83177  0
stp                     2218  1 bridge
llc                     5546  2 bridge,stp

바로 bridge를 커널에 입력만 시켜주면 해결됩니다.

[root@netty ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

커널 매개변수를 확인하면 위와 같이 잘 등록이 된 것을 확인할 수 있습니다. 커널에 bridge를 등록하고 다시 한 번 sysctl -p로 커널 매개변수를 확인하면 잘 등록된 것을 볼 수 있습니다.

이상~!

2015년 3월 3일 화요일

openstack 인스턴스 생성과 연결 논리도

openstack 인스턴스 생성과 연결 논리도


이번에 openstack을 설치하면서 openstack이 생소한 분들을 위해서 알아보기 쉽게 여러가지 논리도를 만들었는데요. 서비스를 하기 위해서 controller, compute, network node가 어떻게 작동하여 인스턴스가 생성되는지와 사용자가 어떻게 인스턴스와 연결이 되는지 두 가지를 그림으로 표현을 해보았습니다.



▶ 인스턴스 생성 논리도


openstack을 구축했다면 제일 먼저 해보고 싶은 것이 인스턴스를 생성하는 것일텐데요. 이 인스턴스 하나가 생성이 되려면 지금까지 만들어 놓았던 각각의 node들이 모두 유기적으로 동작합니다. 다음의 그림을 먼저 봐주세요.



1. 사용자들이 공인 네트워크를 타고 openstack으로 접속을 합니다. 도메인이 있다면 도메인으로 접속하고 도메인이 없다면 http://123.45.67.89/dashboard 이렇게 openstack으로 접속을 할 것입니다.

2. openstack 대시보드에서 계정을 입력하는 단계를 거칩니다. 계정을 입력하게 되면 keystone에 계정이 등록이 되어 있는지 비밀번호는 맞는지 그리고 role은 무엇이고 어떤 tenant에 들어 있는지 비교를 하게되고 계정과 비밀번호가 일치한다면 비로소 openstack으로 들어가게 되는거죠!

3. 인스턴스를 생성하는 단계입니다. 일단은 controller에 설치된 nova의 도움을 받아서 이미지를 마운트하게 되는데요. 여기서 자신이 원하는 이미지와 사양을 선택할 수 있습니다. 예를 들면 centos6.5 64bit와 vcpu1개, ram1g를 이용하는 20gb 하드웨어가 되겠습니다. 만약 키페어를 만들었다면 여기서 키페어도 가지고 compute로 넘어갑니다.

4. 저장소를 선택하는 단계입니다. openstack은 기본으로 설치되는 일반 저장소와 추가적으로 설치할 수 있는 cinder와 swift를 저장소로 이용합니다. 만약 일반 저장소를 이용한다면 여기서 추가적인 선택을 하지 않고 넘어가도 되고 cinder 또는 swift를 이용한다면 임의로 용량을 선택할 수 있습니다.

5. 인스턴스가 생성되기 바로 전 단계입니다. 이미지와 저장소, 하드웨어 정보를 controller의 nova가 compute의 nova에게 전달해줍니다. 그러면 compute의 nova는 network node의 neutron에게 자신이 생성하게 될 인스턴스의 IP 주소를 요청하고 IP 주소를 받습니다.

6. 인스턴스 생성단계입니다. 전 단계를 모두 성공했다면 약간의 인내심 테스트를 거치고 우리가 원했던 centos6.5 64bit 이미지가 생성됩니다.

▶ 인스턴스 - 사용자 연결 논리도


인스턴스가 생성이 되었다면 리눅스면 putty나 기타 ssh 프로그램을 통해서 접속하고 윈도우는 원격 데스크탑을 통해서 접속을 해야하죠. 사용자가 인스턴스에 접속을 시도하려면 network node를 통과해야 합니다. 그림을 먼저 봐주세요.



1. 위와 마찬가지로 사용자는 openstack 상부에 있는 물리 라우터를 거쳐서 접속을 합니다.

2. network node를 설치하면서 따로 지정해준 외부 연결 인터페이스로 들어갑니다. 위의 예는 eth0으로 했지만 각자 설정한 것에 따라서 eth2, eth3과 같이 달라질 수 있습니다.

3. 외부 연결 인터페이스로 접속을 했다면 network node에 있는 가상 라우터를 마주치게 됩니다. 가상 라우터를 맞게 찾아 왔다면 인스턴스가 속한 가상 네트워크까지 올바르게 찾아왔다는 말이죠?

4. compute node에 있는 인스턴스를 찾아가기 위해서 가상 라우터 주소, 가상 네트워크, 인스턴스 주소 등을 network node와 compute node를 직접 연결하고 있는 터널 인터페이스의 도움을 받아 모두 가지고 인스턴스가 있는 compute node로 갑니다.

5. compute node에 설치된 여러 인스턴스 중 우리가 원하는 정보와 일치하는 인스턴스를 찾아서 연결해주는 단계입니다.

이렇게 사용자는 조금은 복잡한 방법으로 생성한 인스턴스를 찾아갑니다. 마치 연어와 같지 않나요?

이상~!

2015년 2월 21일 토요일

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

openstack을 구축했다면 관리자가 아닌 사용자 개념에서 인스턴스를 관리할 수 있도록 계정을 만들어줘야 합니다.
openstack을 매뉴얼대로 설치했다면 

# keystone role-list를 입력했을 때 _member_ 와 admin 두 역할이 출력됩니다.

admin은 흔히 알고 있는 관리자의 개념이고 _member_는 일반 사용자의 개념입니다.
관리 차원이 아닌 openstack을 이용하는 일반 사용자에게 계정을 생성해 주려면 admin이 아닌 _member_ 역할을 부여해야 합니다.

간단히 알고 가는 openstack 계정 상하관계



최상위 그룹은 role입니다. 어떤 role에 속하냐에 따라서 사용자의 계급이 정해지죠. 일반 사용자는 아무리 노력해도 관리자 권한을 얻지 못해요.

이제 사용자의 role이 정해지면 다음은 tenant별로 나뉘게 됩니다. 같은 tenant에 속한 사용자들은 가족이 되는거죠. 가족이 되면 보통 집안에 있는 모든 것을 공유하잖아요. 그래서 다른 사용자의 인스턴스를 관리할 수가 있게 됩니다. 

마지막으로 tenant에는 사용자 계정이 입주하게 됩니다. 일반 사용자는 자신의 계정을 통해 인스턴스를 생성하고 삭제하며 마음대로 자신의 방식대로 방을 꾸밀 수 가 있게 되는거지요.

인스턴스를 개별적으로 관리하기 위한 계정 생성 예

yankees라는 tenant에 입주할 사용자계정 jeter를 만듭니다.

# keystone user-create --name=jeter --pass=jeter_PASS --email=<이메일>
# keystone tenant-create --name=yankees --description="service"
# keystone user-role-add --user=jeter --role=_member_ --tenant=yankees

redsox라는 tenant에 입주할 사용자계정 ortiz를 만듭니다.

# keystone user-create --name=ortiz --pass=ortiz_PASS --email=<이메일>
# keystone tenant-create --name=redsox --description="service"
# keystone user-role-add --user=ortiz --role=_member_ --tenant=redsox

이렇게 계정을 만들면 _member_라는 같은 role을 가진 두 개의 각기 다른 tenant와 user를 만들 수 있습니다. 물론 tenant가 다르니 jeter와 ortiz는 서로 무슨 인스턴스를 가지고 있는지 모르게 됩니다. 하지만 admin role을 가진 관리자는 이 둘의 인스턴스를 모두 들여다 볼 수 있습니다. 

조금씩 틀린 내용이 있을 수 있으니 지적 환영합니다.

이상~!

2015년 2월 17일 화요일

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기



리눅스에 vsftpd를 이용해서 ftp 서버를 구축했다면 파일 업로드까지 해봐야 마무리를 지은거라고 할 수 있죠. 그래서 이번에는 ftp 서버에 파일을 업로드하는 방법을 적어보겠습니다.


준비물

◎ vsftpd로 구축한 frp 서버(centos 6.6 기준입니다.)
◎ 클라이언트에 설치된 filezilla
◎ 업로드용 파일

1. cmd 창에서 업로드 해보기

윈도우 시작 키 + r  -> cmd 입력

cmd 창에서 밑에 처럼 입력하여 자신의 ftp 서버에 접속해주세요.



다음 테스트로 아무 파일이나 업로드해주세요.
밑에 처럼 파일이 정상적으로 올라간다면 일단은 테스트 환경이 구축된 것입니다.





2. filezilla로 업로드해보기

vsftpd를 기본적인 설정으로 설치했다면 filezilla로 ftp 서버에 접속한다면 이런 메시지를 보시게 될 것입니다.

filezilla는 기본적으로 패시브모드를 지원하기 때문에 ftp 서버에서 패시브 모드 설정을 해주어야 합니다.

여기서 패시브와 액티브의 차이를 간략하게 설명하자면, 서버와 클라이언트는 각자 지정된 ftp 전송 포트를 가지고 있습니다. 
각자 command와 data용 포트를 가지고 있는데 서버는 cmd 21번, data20번이고 클라이언트는 1024번 포트 부터 마지막번 포트 중 사용하지 않는 임의의 포트를 cmd용 data용으로 지정하여 사용합니다.

액티브 모드 전송 방식


액티브 모드로 filezilla를 통해 서버에 접속한 클라이언트는 서버에 원하는 포트를 열어달라고 요청을 합니다. 하지만 ftp는 20번 포트만 데이타 전송 전용 포트로 열고 있어 대부분의 유저들은 방화벽에 막히게 되어 filezilla 유저들은 파일 전송에 실패합니다. (아마도 윈도우 자체 ftp 서비스는 20번 포트만 열어달라고 요청을 하기 때문에 액티브 모드에서도 전송이 잘 되는 것 같습니다.)

정리하자면, 액티브 모드는 클라이언트가 갑이 되어 자신이 접속하고자 하는 포트만 찾게 되고 자신이 원하는 포트가 막혀있으면 전송자체가 되지 않는 시스템입니다. 중요한건 클라이언트가 갑! 서버가 을! 

패시브 모드 전송 방식




패시브 모드는 클라이언트의 갑의 횡포를 길들이기 위해 탄생했습니다. 액티브 모드에서 클라이언트가 갑이었다면 패시브 모드에서는 역으로 서버가 갑이 되어 20번 포트만 원하는 클라이언트에 맞서기 위해 임의의 포트를 열고 기다리고 있습니다. 

여기서 서버가 열고 있는 포트는 1024 ~ 65535 포트 중 동시에 받고자 하는 클라이언트의 수에 맞춰집니다. 이렇게 포트를 열고 있으면 클라이언트는 20번 포트를 거치지 않고 패시브모드용 포트를 통해 자료를 주고받고 할 수 있게 됩니다.
패시브 모드에서 중요한 건 서버가 갑! 클라이언트가 을!


3. ftp 서버 vsftpd 설정 변경하기

# vi /etc/vsftpd/vsftpd.conf

밑의 내용을 추가해주세요.

pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50010  // 임의로 50001 ~ 50010 포트를 열고 대기하도록 지정했습니다.

# vi /etc/sysconfig/iptables

iptables에 50001:50010 포트를 등록해줍니다.

# /etc/init.d/vsftpd restart
# /etc/init.d/iptables restart

4. filezilla로 접속하기

아까랑 같은 방법으로 filezilla를 통해 ftp 서버에 접속시도합니다.

이번에는 마지막 줄에 succesful이라는 문구나 나오는 것을 볼 수 있습니다~!
이제 마음대로 파일을 업로드하고 다운로드 할 수 있습니다.

이상~! 

2015년 2월 15일 일요일

fdisk를 이용하여 lvm superblock 만들기

fdisk를 이용하여 lvm superblock 만들기

이번 포스트는 여러 물리 하드디스크를 논리적으로 하나의 하드디스크로 만드는 lvm에 대해서 적어보겠습니다. 요새 openstack을 자주 하다보니까 은근히 기본기도 탄탄해지는 것 같습니다. 
제가 테스트하는 서버의 상태는 물리 하드디스크 4개를 연결시켰고 하드 1개는 부팅과 root 디렉토리로 쓰고 있고 나머지 3개는 openstack 블록 스토리지용으로 사용을 하려고 합니다.

1. fdisk로 물리볼륨 생성하기

# fdisk -l // 현재 이용가능한 하드디스크 확인


저는 sdb, sdc, sdd 세개 하드디스크에 볼륨이 생성되어있지 않습니다. 

# fdisk /dev/sdb  // sdb에 볼륨을 생성하기 위해 fdisk를 이용합니다.
① n: 새로운 볼륨 생성
② p: 프라이머리 파티션 생성
③ 1: 파티션 숫자
④ 용량 설정 그냥 엔터 누르면 자동으로 용량 모두 사용
⑤ t: 볼륨 타입 설정
⑥ 8e: LVM 볼륨 타입
⑦ p: 설정한 내용 보기
⑧ w: 저장하고 종료

sdb를 했으니까 같은 방법으로 sdd까지 합니다.

2. pvcreate로 물리볼륨을 논리볼륨으로 변경

# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdd1
Physical volume "/dev/sdb1" successfully created

3. vgcreate로 물리볼륨을 하나로 합침

# vgcreate (원하는 블록 이름 지정) /dev/sdb1 /dev/sdc1 /dev/sdd1

# vgdisplay


4. lvcreate로 합친 물리 볼륨을 하나의 논리볼륨으로 구성

# lvcreate -l 228930 -n super_block1 super_block  // 숫자 부분은 vgdisplay 입력 후 나오는 Free PE 부분의 숫자 입력

# lvdisplay /dev/super_block/super_block1


5. 파일시스템 생성

# mkfs.ext4 /dev/super_block/super_block1  // 논리파티션 파일시스템 작성

6. 마운트 및 오토마운트 설정

# mkdir /data1
# mount /dev/super_block/super_block1 /data1
# vi /etc/fstab
밑의 줄을 설정 파일에 추가
/dev/super_block/super_block1    /data1     ext4     defaults     0  0 

이것으로 재부팅 후에도 추가적인 작업 없이 새롭게 추가된 논리볼륨을 이용할 수 있습니다.

이상~!

2015년 2월 14일 토요일

centos에 vsftpd 설치하기

centos에 vsftpd 설치하기

윈도우에서 리눅스에 파일을 업로드하기 위해서는 리눅스 서버에 ftp를 설치해야 합니다. 그래서 이번에는 파일을 업로드하기 위해서 vsftpd를 설치하도록 하겠습니다. vsftpd는 많은 리눅스 개발 단체에서 기본 ftp 데몬으로 사용하고 있을 정도로 활용성과 보안면에서 뛰어난 데몬이라고 합니다. 

vsftpd는 centos 6.6에서 설치했습니다.

1. vsftpd 설치하기

# yum install -y vsftpd

2. vsftpd.conf 설정하기

# vi /etc/vsftpd/vsftpd.conf

밑에 해당하는 줄을 찾아서 다음과 같이 변경합니다.

anonymous_enable=NO  //익명 접속 가능 여부
local_enable=YES  // 로컬 계정 사용자의 접속 허용 여부
write_enable=YES  // write 명령어 허용 여부
local_umask=022  // 로컬 계정 사용자용 umask
xferlog_enable=YES  // 파일 전송 로그 기록 여부
connect_from_port_20=YES  // 20번 포트로 접속 허용 여부
xferlog_file=/var/log/xferlog  // 파일 전송 로그 파일명
xferlog_std_format=YES  // xferlog 표준 포맷으로 로그를 남길지 여부
chroot_local_user=YES  // 사용자의 홈 디렉토리를 변경 제한을 위한 설정
listen=YES  // standalone으로 운영하려면 YES
pam_service_name=vsftpd  // PAM 파일명을 지정
userlist_enable=YES
tcp_wrappers=YES

3. 방화벽에 포트 추가

# vi /etc/sysconfig/iptables

밑의 줄을 추가합니다.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20:21 -j ACCEPT

4. 데몬 재시작 및 chkconfig에 등록

# /etc/init.d/iptables restart
# /etc/init.d/vsftpd start
# chkconfig vsftpd on

이상~!


mysql 데이터 타입

mysql 데이터 타입


리눅스를 사용하시는 분들 중에 mysql 안 만져보신 분들은 없을텐데요. 저도 mysql을 다루어 보면서 데이터베이스를 공부하고 있습니다.​ 이번 포스트는 mysql의 데이터 타입에 대해서 적어보도록 하겠습니다. 

▶ char 데이터 타입

char와 varchar의 공통점은 모두 텍스트 기반 데이터 타입이라는 것입니다. 두개로 나눈 것은 차이점이 있기 때문인데 차이점은 용량 할당방식에 있습니다. char는 욕심쟁이처럼 처음에 지정해주는 용량을 모두 사용(임의의 텍스트로 채움)하는 반면 varchar는 처음에 지정한 용량이 있다고 하더라고 필요한 만큼만 사용하고 나머지는 빈공간으로 남깁니다. varchar가 무조건 좋은 것은 아닌데 varchar는 오버헤드가 필요하기 때문에 한국사람 이름 같이 길이가 일정한 데이터가 많을 경우에는 char가 더 효율적이라고 할 수 있습니다.

타입명사용되는 바이트설명
char(n)n ≤ 255char는 처음에 지정한 바이트 숫자가 용량으로 할당된다.
예) char(5) 'jun'은 5바이트, char(50) 'jun'은 50바이트
varchar(n)n ≤ 65535varchar는 사용한 바이트만큼만 용량으로 할당된다.
예) varchar(5) 'jun'은 3바이트, varchar(50) 'jun'도 3바이트

▶ binary 데이터 타입

binary 데이터 타입은 관련된 문자 세트가 없는 문자의 전체 바이트를 저장하는데 사용됩니다.

타입명사용되는 바이트설명
binary(n) 
byte(n)
n ≤ 255char의 형태로 바이너리 데이터를 가진다.
varbinary(n)n ≤ 65535varchar의 형태로 바이너리 데이터를 가진다.


▶ text와 varchar 데이터 타입

text와 varchar는 비슷하지만 작은 차이점이 있습니다. 
눈에 띄는 차이점은 길이 차이입니다. varchar보다 text가 훨씬 깁니다.
다른 차이점은 varchar는 index가 가능하지만 text는 index가 불가능합니다.
그래서 검색에는 varchar가 더 용이합니다.

타입명사용되는 바이트설명
tinytext(n)n ≤ 255문자열로 취급한다.
text(n)n ≤ 65535문자열로 취급한다.
mediumtext(n)n ≤ 16777215문자열로 취급한다.
longtext(n)n ≤ 4294967295문자열로 취급한다.

▶ BLOB 데이터 타입

BLOB(Binary Large OBject)는 65535 바이트를 넘는 바이너리 데이터에 유용합니다. 하지만 기본값을 가질 수 없습니다.


타입명사용되는 바이트설명
tinyblob(n)n ≤ 255바이너리 데이터로 취급한다.
blob(n)n ≤ 65535바이너리 데이터로 취급한다.
mediumblob(n)n ≤ 16777215바이너리 데이터로 취급한다.
longblob(n)n ≤ 4294967295바이너리 데이터로 취급한다.

▶ 
숫자형 데이터 타입

타입명사용되는 바이트최소값최대값
tinyint1-128
0
127
255
smallint2-32768
0
32767
65535
mediumint3-8388608
0
8388607
16777215
int or integer4-2147483648
0
2147483647
4294967295
bigint8-9223372036854775808
0
9223372036854775807
18446744073709551615
float4-3.40E+45
(no unsigned)
3.40E+45
(no unsigned)
duble or real8-1.7976E+320
(no unsigned)
1.7976E+320
(no unsigned)

이상~!