달력

3

« 2019/3 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  
  •  
2018.12.03 21:08

아두이노 화분 급수 시스템 개발2018.12.03 21:08


처음 아두이노라는 것을 이용해서 화분에 물을 주는 시스템을 만들었다.
어떻게 만드냐면 그냥 인터넷에 찾아보면 다 나온다.
하지만 그것도 어느정도 기본 지식이 있어야 따라하기가 가능하다.
나는 하드웨어에 대해서는 아무것도 몰랐고 심지어 부품구매도 어려웠다. 주변에서 쉽게 파는 것도 아니요 11번가 지마켓 이런 곳에서도 파는 것이 아니다.
그래서 그 과정들을 적어본다.



우선 부품을 구매하기전에 어떻게 구성할지부터 고민했다.
우선 아두이노가 필요했고, 수중모터, 수중모터에 연결할 호스, 자체 전원을 이용하기 위한 전원 홀더, 그리고 하는 김에 LCD 도 해보고 싶어서 그냥 LCD도 사려고 했다.

아두이노는 워낙 유명해서 지마켓이나 옥션과 같은 오픈 마켓에서 쉽게 찾을 수 있었다. 그런데 가격에서 미묘하게 차이가 났다.
그 미묘한 가격은 다음과 같은 요인에서 차이가 났다.
USB 케이블 제공여부, 전원 아답터 제공여부, 케이스 제공여부, 기타 공급처의 마진.
위의 것들은 모두 이해할 수 있었으나, 묘한 것이 있었다.
바로 아두이노와 아두이노 R3다.

아두이노는 버전이 여러개가 있고 R3는 최신 버전이다. 조금 저렴했던 아두이노는 그냥 아두이노였다. 기능이 개선되서 R3 가 있었는데, 값싼 것은 그냥 재고였던 것이다. 화분에 물주기 시스템은 특별한 기능이 들어가는 것은 아니어서 어떤 아두이노를 사용해도 무관했지만, 그냥 R3를 샀다.
 
모터의 경우 자료를 찾아보니 모터가 정지하거나 역방향으로 움직일 경우 전류과 역류해서 모터나 아두이노가 고장나는 경우가 있다고 했다.
그래서 전류가 역류하지 못하도록 다이오드를 설치한다. 그러면 저항도 연결하고, 뭐 트랜지스터 이런 것도 같이 연결해야하는 것 같다.
그런데 이런 것들을 한 번에 모듈로 만든 것이 있었다.  MOSFET IRF540 오~ 좋아.


그리고 수중 펌프에 연결할 호스를 찾는 것이 쉽지 않았고...
별도의 전원(건전지)을 두고 싶었는데, 어떤 것을 사야하는지 몰라서 해맸고.(‘전원홀더’라고 검색하면 됨)

LCD를 연결하고 싶었는데, 찾고 보니 I2C LCD 가 있었다. LCD를 연결하려면 선을 20개 정도 연결해야 하는데 이를 4개로 줄여주는 칩이 달린 LCD가 I2C LCD였다.  I2C를 연결하면 코딩이 간결해진다.


빵판은 있었고, 빵판에 전원을 연결해주는 빵판파워, 전압센서, 납, 인두, 토양습도센서, 릴레이등 그냥 여분으로 몇개 더 샀다.
릴레이는 전자식 스위치인데, 전원을 연결해주면 전류가 흐르고 연결하지 않으면 연결이 끊어지도록 하는 장치다. 그냥 샀었는데, 나중에는 이것이 신의 한수였다. (납과, 인두 등은 아직도 사용하지 못하고 있다.)

릴레이


아래는 부품을 구매할 때 적은 메모이다.

아두이노
    http://item.gmarket.co.kr/Item?goodscode=899290989&pos_shop_cd=SH&pos_class_cd=111111111&pos_class_kind=T&keyword_order=%be%c6%b5%ce%c0%cc%b3%eb&keyword_seqno=16529400039&search_keyword=%ec%95%84%eb%91%90%ec%9d%b4%eb%85%b8 6760원
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B554552506 7300원
모터
    http://mechasolution.com/shop/goods/goods_view.php?goodsno=330402&category= 2200원

    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B547212102 5300원
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B226935687 9500원
모터제어
 - TIP120 트랜지스터
 - MOSFET IRF540
     http://itempage3.auction.co.kr/DetailView.aspx?itemno=B529899632 1500원

     https://www.devicemart.co.kr/goods/view.php?seq=1327605 1800원
     http://vctec.co.kr/product/irf520-%EB%AA%A8%EC%8A%A4%ED%8E%AB-%EB%AA%A8%EB%93%88-irf520-mosfet-module/11003/
     http://forum.hobbycomponents.com/viewtopic.php?f=76&t=1872
     https://blog.naver.com/roboholic84/220467544049
     https://www.devicemart.co.kr/1361309 2660원 2채널
호스
    http://mechasolution.com/shop/goods/goods_view.php?goodsno=330579&category=050007

    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B257865059
전원홀더
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B279272153
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B565316283 3960원

    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B279741467 3300원
토양습도센서
태양열전지
빵판파워
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B276024015 4000원
전압센서
    http://item.gmarket.co.kr/Item?goodscode=1222686538&pos_shop_cd=SH&pos_class_cd=111111111&pos_class_kind=T&keyword_order=%c0%fc%be%d0%bc%be%bc%ad&keyword_seqno=16529562549&search_keyword=%ec%a0%84%ec%95%95%ec%84%bc%ec%84%9c 3500원
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B478933318 660원
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B400445109 1500원

인두
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=A575553608 7900원
전압계
LCD
    http://item.gmarket.co.kr/Item?goodscode=1175038973&pos_shop_cd=SH&pos_class_cd=111111111&pos_class_kind=T&keyword_order=I2C+LCD&keyword_seqno=16529590959&search_keyword=I2C+LCD 2900원
    http://itempage3.auction.co.kr/DetailView.aspx?itemno=B450362551 4500원



위의 문제는 부품소자 보다 택배비가 더 비싸서 살때 몇몇개를 더 살 수 밖에 없었다는 것이다.
하지만 그래도 어쩔 수 없이 사야했다.

장치는 택배 상자에 실리콘을 붙여 사용했는데, 약간 실수였다.
택배상자 자체가 품질이 좋지 않아서 실리콘을 대도 실리콘이 아닌 종이가 찢겨져 버려 잘 고정이 안되었다.
이럴 줄 알았으면 좀 더 연구해서 아크릴로 해볼 걸 하는 후회가 남았다.

소스는 인터넷에 많이 돈다. 그걸 참고 했다.

아두이노는 OUT 전원이 5V다. 모터는 전원을 많이 먹기 때문에 보통 자체 전원을 이용한다고 한다.
시스템은 토양센서로 일정 이하의 수분이 감지되면 펄프로 물을 보내게 되는데, 이때 아두이노의 출력값을 모터에 직접 연결했었다.
전원은 노트북에  USB를 연결했었고. 그랬더니 모터가 돌다가 말았다.
처음에는 그랬는데, 나중에는 아예 돌지도 않았다. 아무래도 아두이노의 출력전원이 원인이라 생각했다.
아두이노의 전원에 직접 연결해보니 이번에는 모터가 잘 움직였다. 하지만 LCD가 모터가 동작할때마다 꺼져 버렸다.
USB로 연결한 전원에는 모터와 LCD를 같이 돌리기엔 무리로 보였다.
그래서 이번에는 모터에 9V 건전지를 자체적으로 연결해버렸다. 이러면 잘 될 줄 알았다.
그런데.... 안됐다.

수분정보를 받아서 출력으로 모터에 트리거를 줘야 하는데, 이 신호가 문제였다.
모터에 전원을 바로 연결하면 동작하는데, 문제는 모터에 항상 전원을 주는 것이 아니라 수분이 부족할 때 줘야하기 때문에 항상 전원에 바로 연결할 수는 없었다.
이 때 등장하는 것이 바로 위의 신의 한 수였다.

모터에는 직접 전원을 연결하고 거기에 릴레이를 달고 트리거 신호를 릴레이에 주었다.
릴레이는 트리거에서 오는 5V 신호를 잘 입력받았고, 5V가 오면 릴레이는 전원이 연결되어 모터에 직접적으로 9V의 전원을 바로 보낼 수 있었다.
고로 모든게 잘 동작했다.


PS 1.5V 건전지를 직렬로 6V연결하여 아두이노에 연결하였을 경우, LCD 달아서인지 6일을 가지 못했다.
LCD는 3일이 지난 후부터는 백라이트가 약해서 글씨를 알아 볼 수 없었다.
지금은 USB 전원을 그냥 이용하고 있다. 이게 전원을 많이 소비하는 것 같다.


PS 시간이 점점 지나더니 토양의 수분을 점점 제대로 인식하지 못하게 되었다. 수분을 측정하기 위해 흙속에 넣어둔 센서가 녹이 슬어서 센서로서의 기능을 아예 못하게 된 것. 수분센서가 물에 녹이 슬다니...


PS 여러모로 종합해본 결과 아두이노는 코딩연습을 하는 장난감 밖에 하지 못한다. 뭔가 제대로 동작하려면 제대로 된 출력이 있어야 하는데, 기껏 장남감 모터나 돌리니 출입문 하나를 열지 못한다. 그러기 위해서는 제법 비싼 모터를 사야 하는데, 그 비싼 모터를 장남감에 열결할 수는 없지 않나? IOT라고는 하지만 건전지를 연결해도 1주일도 못가는... 이건 어디 밖에서  쓸 수가 없다. 기껏 해봤는데 부정적인 결론만 나네...

Posted by 에드몽단테스
2018.07.15 10:00

자주 사용하는 git 명령어 개발2018.07.15 10:00

로컬 저장소 생성
  • git init : 로컬 저장소 생성

  • git add 파일명 : 인덱스에 추가

  • git commit : 인덱스의 내용을 커밋

    • -a : 인덱스에 추가하고 커밋

    • -m : 인라인 메세지 추가

    • —amend : 마지막 커밋로그를 변경

  • git status : 상태표시

  • git log : 로그 출력

    • —graph : 그래프 형태 추가

    • -숫자:최근숫자만큼표시


브랜치 생성
  • git branch 브랜치명 : 브랜치 생성

  • git branch : 브랜치 조회

    • -r : 원격지 조회
    • -a : 모두 조회(로컬, 원격지)

  • git checkout 브랜치명 : 브렌치 변경


병합

git merge 병합할 브랜치 : 현재 브랜치에서 병합할 브렌치를 병합

글로벌 환경설정

git global user.name “홍길동
git global user.email “hong@example.com”

원격지의 소스를 가져오기

git clone 원격지주소 {디렉토리명} : push 불가
git clone 원격지주소(http://아이디:비밀번호@나머지주소) : push 가능

로컬의 소스를 원격지에 복사

git remote add origin{별명} 원격지 주소
git remote -v : 원격지 정보
git remote update : 원격지 정보를 로컬에 갱신(브랜치)

주의점 : 원격지 파일에는 아무런 파일이 없어야 함(특히 README.md)

원격지 명령

git pull 원격지별명 브랜치 : 원격지의 소스를 다운로드 받고 병합 git fetch 원격지별명 브랜치 : 원격지의 소스를 다운로드
git push 원격지별명 브랜치 : 로컬에 커밋된 소스를 업로드
git push 원격지별명 —all : 로컬의 모든 브랜치 소스를 업로드

비교

git diff

태그

git tag 태그명 : 태그생성 git tag -l : 태그조회
git commit

기타

  • git revert 커밋해쉬(4자리) : 커밋내용을 취소하고 새로운 커밋을 생성

  • git reset 커밋해쉬(4자리) 또는 파일명 : 커밋내용을 취소. revert와 달리 로그를 남기지 않음(soft, mixed,

    hard 옵션이 있음)

  • git checkout HEAD — 파일명 : 마지막 커밋내용을 되돌림

  • git rebase master : 커밋 베이스 변경

    git add 파일명
    git rebase —continue git merge


Posted by 에드몽단테스

개발환경에서 운영환경으로 전환하기 위해 MySQL 데이터를 덤프받아 운영서버에 복원을 해야 했다.

서버에서 MySQL 명령어를 이용할 수도 있지만, 편리를 위해 윈도우에서 툴을 이용하기로 했다.

서버는 둘다 모두 리눅스(Centos.6.8)이다.


테이블과 데이터는 모두 이관되었고 뷰는 약간 문제가 있었지만, 직접 수정하여 완료하였다.

운영서버에서 테스트를 진행하는데 뭔가 이상하다.

테이블은 존재하는데 존재하지 않는다고 메세지가 뜨는 것이다.

원인은 테이블명의 대소문자 구분이었다.

리눅스에서는 대소문자를 가리지만, 윈도우에서 작업했기 때문에 대소문자를 크게 신경쓰지 않아서 생긴 문제가 아닐까 생각했다.


우선 MySQL의 테이블명을 수동으로 모두 대문자를 바꿨다. 처음에는 잘 되는 듯 했다. 하지만 중간에 다시 문제가 발생.

이번에는 쿼리에 테이블 명을 소문자로 표시가 되서 생긴 문제였다.

즉, DB의 테이블 명은 모두 대문자로 변경했지만, 쿼리에는 대소문자가 섞여 있는 것이었다.

쿼리를 모두 찾아 수정해야했지만, 중간에 테이블명의 대소문자를 구분하지 않는 옵션이 있다는 것을 알았다.


show variables like 'lower_case_table_names';


위 쿼리를 실행시켰을 때 1이 나오면 대소문자를 구분하지 않고 0이 나오면 대소문자를 구분한다.

물론 위 설명은 정확한 것이 아니다. 옵션에 2도 있으며 쉽게 설명한 것이다.



나는 0이었다. 위 이미지는 변경한 후 이미지이다.(현재는 1이다)

그래서 my.cnf에서 값을 변경하고 서버를 재기동했다.


[mysqld] 에 lower_case_table_names = 1을 넣어준다.


그리고 서버 재시작.


하지만 결과는 마찬가지였다.

설정을 1로 변경하여 추가했지만, 여전히 대소문자는 구분했다.


그런데 옵션 확인중에 저 옵션은 옵션이 설정된 이후에 추가된 데이터에 대해서만 적용된다고 했다. 설정을 했더라도 기존의 데이터는 여전히 대소문자를 구분한다는 것이다.

그래서 설정을 1로 변경한 상태에서 기존데이터는 모두 지우고 다시 데이터를 넣었다. 그랬더니 대소문자를 구분하지 않고 잘 되었다.


lower_case_table_names 값이 0이든 1이든 처음 시작할 때는 상관이 없다.

그런데 데이터 이관할 때는 대소문자의 영향을 받는다. 그래서 MySQL이관시에는 이관할 서버에 lower_case_table_names 값을 1로 설정한 후 데이터를 이관해야 이관시 소요되는 에너지의 낭비를 막을 수 있다.


Posted by 에드몽단테스
2017.09.27 23:38

html5 canvas 로 네모 안에 빗금 칠하기 개발2017.09.27 23:38

hmlt5의 canvas를 이용하여 특정영역을 빗금칠한 것 같은 효과를 주기 위한 코드이다.

시행착오를 많이 거쳤기 때문에 주석을 달지 못했다. x, y 의 좌표가 10의 배수가 아니거나 width, height 가 10의 배수가 아닌 경우 테스트를 많이했지만, 아직 테스트는 더 필요하다.

<canvas id="canvas" width="300" height=300"></canvas>

<script>

var canvas = document.getElementById('canvas').getContext('2d');


function drawArea(x, y, width, height, rectColor, lineColor) {

canvas.strokeStyle = lineColor;


var startX = x;

var startY = y;

var endX = x;

var endY = y;

var max = (width + height) / 10;


for(var i=0; i<max-1; i++) {

if(startX >= width + x) {

startX = width + x;

startY += 10;

} else {

var oldX = startX;

startX += 10;

if(startX > x + width) {

startX = width + x;

var tmp = startX - oldX;

startY += 10;

startY -= tmp;

}

}

if(endY >= height + y) {

endY = height + y;

endX += 10;

} else {

var oldY = endY;

endY += 10;

if(endY > height + y) {

endY = height + y;

var tmp = endY - oldY;

endX += 10;

endX -= tmp;

}

}

canvas.moveTo(startX , startY);

canvas.lineTo(endX, endY);

canvas.stroke();

}

canvas.strokeStyle = rectColor;

canvas.strokeRect(x, y,width, height);

}

drawArea(3, 11, 258, 171, 'rgb(255, 0, 255)', 'rgb(0, 0, 255)');


</script> 


Posted by 에드몽단테스

node.js 초기에는 node.js 하나만 다운로드 받으면 됐지만, 지금은 여러가지 모듈과 함께 기능들을 제공하고 있어서 node.js를 다운로드 받을 수 있는 별도의 모듈(Node Package Manager)을 통해 설치한다.


1.소스 컴파일

  1) source 다운로드

    wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz

  2) 압축 해제 및 폴더이동

    tar zxvf node-v*.tar.gz

    cd node-v*

  3) configure 및 컴파일

    ./configure

    make

  4) 설치

    make install


2.바이너리 설치

  yum install npm


바이너리로 npm을 설치할 경우 EPEL repository를 설치해야 한다.

EPEL (Extra Packages for Enterprise Linux) 은 Fedora Project 에서 제공되는 저장소로 각종 패키지의 최신 버전을 제공하는 community 기반의 저장소이다. 

RHEL 의 패키지 정책은 보수적이고 안정성이 최우선이라 패키지 업데이트가 잘 되지 않는다.

즉, epel 로 npm을 설치할 수 있으나 그 버전이 매우 낮다.


2-1 epel 설치방법


rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


서론이 길어지만 위의 이유에서 컴파일 또는 바이너리방식이 아닌 node 사이트에서 직접 파일을 받기로 했다.

(epel 설치후 npm을 설치하면 그 버전이 매우 낮다)


nodejs 는 https://nodejs.org/en/download/ 에서 다운로드 받을 수 있다.

각 OS별로 제공하며 2017.09 현재 최신버전은 6.11.3 버전이다.


파일다운로드

  wget https://nodejs.org/dist/v6.11.3/node-v6.11.3-linux-x64.tar.xz


압축해제

  tar xvf node-v6.11.3-linux-x64.tar.xz


버전확인

  node -v


필요한 경우 별도의 모듈을 다운로드 받아야 하는 경우가 있다.

예를 들어 mqtt 경우 아래와 같이 설치한다.


npm install mqtt --save


위와 같이 실행하면 현재 경로에 node_modules/mqtt/에 파일들이 생긴다.

기존에 node를 설치했다면 기존 구조와 비슷하게 맞추기 위해 node 설치 디렉토리 안의 lib 로 이동 후 npm install mqtt --save 를 실행한다.

그러면 다음과 같이 이쁜 구조로 mqtt 가 설치된다.

{node}/lib/node_modules/npm

{node}/lib/node_modules/mqtt


다른 모듈 설치시에도 {node}/lib 안에서 설치를 한다.


예) 

cd /usr/local/node-v6.11.3-linux-x64/lib

npm install request --save


{node}/lib/node_modules/npm

{node}/lib/node_modules/mqtt

{node}/lib/node_modules/request


모듈을 설치했으면 이 모듈을 작성하려는 코드에 적용한다.


test.js (샘플)

==================

var mqtt = require('mqtt');

var request = require('request');

var client = mqtt.connect('mqtt://test.mosquitto.org')

var item = [];


client.on('connect', function() {

  client.subscribe('beacons')

})

.

.

.


실행시 모듈을 못찾는 경우가 있다.


[root@dev1 bin]# node test


module.js:340

    throw err;

          ^

Error: Cannot find module 'mqtt'

    at Function.Module._resolveFilename (module.js:338:15)

    at Function.Module._load (module.js:280:25)

    at Module.require (module.js:364:17)

    at require (module.js:380:17)

    at Object.<anonymous> (/usr/local/node-v6.11.3-linux-x64/bin/test.js:1:74)

    at Module._compile (module.js:456:26)

    at Object.Module._extensions..js (module.js:474:10)

    at Module.load (module.js:356:32)

    at Function.Module._load (module.js:312:12)

    at Function.Module.runMain (module.js:497:10)



이런 경우에는 모듈의 경로를 상대적으로 설정해주면 된다.


var mqtt = require('../lib/node_modules/mqtt');

var request = require('../lib/node_modules/request');

var client = mqtt.connect('mqtt://test.mosquitto.org')

var item = [];


client.on('connect', function() {

  client.subscribe('beacons')

})


끝~


참고

  https://nodejs.org/en/

  https://www.npmjs.com/package/mqtt

  https://blog.risingstack.com/getting-started-with-nodejs-and-mqtt/


Posted by 에드몽단테스
2016.06.08 12:40

우분투 호스트명 변경 개발2016.06.08 12:40

1.호스트이름 변경

$ sudo vi /etc/hostname

{호스트명}

2.호스트 설정

$ sudo vi /etc/hosts

127.0.1.1 {호스트명}

3.재시작

$ sudo reboot

'개발' 카테고리의 다른 글

html5 canvas 로 네모 안에 빗금 칠하기  (0) 2017.09.27
리눅스(Centos6.x) 서버에 node.js 설치하기  (0) 2017.09.12
우분투 호스트명 변경  (0) 2016.06.08
우분투에 HDD 추가하기  (0) 2016.06.08
MySQL 미러링 (REPLICATION)  (0) 2016.06.08
아파치 톰캣 연동  (0) 2016.03.12
Posted by 에드몽단테스
2016.06.08 12:40

우분투에 HDD 추가하기 개발2016.06.08 12:40

1.현재 파티션 정보를 확인한다.

sayit@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            478M     0  478M   0% /dev
tmpfs            98M  4.9M   93M   5% /run
/dev/sda1        19G  1.2G   17G   7% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
tmpfs            98M     0   98M   0% /run/user/1000

2.HDD가 정상적으로 추가되었는지 확인한다.

sayit@ubuntu:~$ sudo fdisk -l
[sudo] password for sayit:

Disk /dev/fd0: 1.4 MiB, 1474560 bytes, 2880 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x90909090

Device     Boot      Start        End    Sectors  Size Id Type
/dev/fd0p1 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p2 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p3 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p4 ?    2425393296 4850786591 2425393296  1.1T 90 unknown

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x66d2cf83

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 39845887 39843840   19G 83 Linux
/dev/sda2       39847934 41940991  2093058 1022M  5 Extended
/dev/sda5       39847936 41940991  2093056 1022M 82 Linux swap / Solaris

Disk /dev/sdb: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

마지막을 확인해보면 /dev/sdb 70기가 장치가 있는 것을 확인할 수 있다.

3.새로추가된 HDD를 파티션 작업을 한다.

sayit@ubuntu:~$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xfe8998b1.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (1-4, default 1):
First sector (2048-146800639, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-146800639, default 146800639):

Created a new partition 1 of type 'Linux' and of size 70 GiB.

Command (m for help): p
Disk /dev/sdb: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfe8998b1

Device     Boot Start       End   Sectors Size Id Type
/dev/sdb1        2048 146800639 146798592  70G 83 Linux


Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

4.파티션 정보 재확인

sayit@ubuntu:/sbin$ sudo fdisk -l

Disk /dev/fd0: 1.4 MiB, 1474560 bytes, 2880 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x90909090

Device     Boot      Start        End    Sectors  Size Id Type
/dev/fd0p1 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p2 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p3 ?    2425393296 4850786591 2425393296  1.1T 90 unknown
/dev/fd0p4 ?    2425393296 4850786591 2425393296  1.1T 90 unknown

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x66d2cf83

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 39845887 39843840   19G 83 Linux
/dev/sda2       39847934 41940991  2093058 1022M  5 Extended
/dev/sda5       39847936 41940991  2093056 1022M 82 Linux swap / Solaris

Disk /dev/sdb: 70 GiB, 75161927680 bytes, 146800640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfe8998b1

Device     Boot Start       End   Sectors Size Id Type
/dev/sdb1        2048 146800639 146798592  70G 83 Linux

5.포맷

sayit@ubuntu:/sbin$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 18349824 4k blocks and 4587520 inodes
Filesystem UUID: ec60583a-d84e-40f6-bcb1-16a8c1cc3224
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424

Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

포맷타입은 원하는 것으로 변경할 수 있다.
포맷타입은 /sbin/에서 확인가능.

6.HDD를 마운트 하기위한 UUID 확인

sayit@ubuntu:/sbin$ ls -alF /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 100 Apr 21 00:09 ./
drwxr-xr-x 5 root root 100 Apr 20 23:59 ../
lrwxrwxrwx 1 root root  10 Apr 20 23:59 d0652bd6-9c7f-49d2-8cf8-103dee620427 -> ../../sda1
lrwxrwxrwx 1 root root  10 Apr 20 23:59 e5ec694c-4d6a-44e2-8f78-ec027b45e64d -> ../../sda5
lrwxrwxrwx 1 root root  10 Apr 21 00:09 ec60583a-d84e-40f6-bcb1-16a8c1cc3224 -> ../../sdb1

7.마운트
HDD 파티션 나누고 포맷도 했지만, 지금은 사용할 수 없다. 마운트를 해야한다.

마운트할 디렉토리를 만든다.

sayit@ubuntu:/sbin$ cd /
sayit@ubuntu:/$ sudo mkdir zetacore
sayit@ubuntu:/$ sudo mkdir /zetacore/cube

매번 부팅시마다 자동으로 마운트가 되도록 다음과 같이 설정한다.

sudo vi /etc/fstab

...
UUID=ec60583a-d84e-40f6-bcb1-16a8c1cc3224 /zetacore/cube               ext4    errors=remount-ro 0       1


부팅하지 않아도 바로 적용할 수 있다.

sayit@ubuntu:/zetacore/cube$ sudo mount -a

8.확인

sayit@ubuntu:/zetacore/cube$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            478M     0  478M   0% /dev
tmpfs            98M  4.9M   93M   5% /run
/dev/sda1        19G  1.2G   17G   7% /
tmpfs           489M     0  489M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           489M     0  489M   0% /sys/fs/cgroup
tmpfs            98M     0   98M   0% /run/user/1000
/dev/sdb1        69G   52M   66G   1% /zetacore/cube

'개발' 카테고리의 다른 글

리눅스(Centos6.x) 서버에 node.js 설치하기  (0) 2017.09.12
우분투 호스트명 변경  (0) 2016.06.08
우분투에 HDD 추가하기  (0) 2016.06.08
MySQL 미러링 (REPLICATION)  (0) 2016.06.08
아파치 톰캣 연동  (0) 2016.03.12
AIX 에서 시간 설정하기  (0) 2015.12.10
Posted by 에드몽단테스
2016.06.08 12:39

MySQL 미러링 (REPLICATION) 개발2016.06.08 12:39

1. Master DB와 Slave DB에 Mysql 을 설치


2. Master DB와 Slave DB의 Mysql 의 데이터를 일치시킴. (mysqldump 등을 이용)


3. Master DB와 Slave DB의 my.cnf(보통 /etc/my.cnf에 존재) 수정


<<<Master DB>>>

[mysqld]

log-bin

server-id=1


<<<Slave DB>>>

[mysqld]

server-id=2



서버자체가 로컬로스트에서만 접속이 가능하다도록 설정되어 있다면 외부에서도 접속할 수 있도록 아래와 같이 옵션을 변경한다. (우부투의 경우)

#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0



4. Create a User for Replication


Slave들이 Master에 접근하기위해서 Master의 User계정이 필요하다.
어떤 계정이든 상관없고 REPLICATION SLAVE 권한이 필요하다.
Slave마다 다른 계정을 줄 수도 있고 같은 계정을 줄 수도 있다.
어떤 계정을 따로 만들 필요없지만
master.info에 평문으로 User name과 password가 저장된다는 것을 알고 있어야 한다.
그러므로 Replication 작업만을 위한 계정을 따로 생성할 필요가 있다.


마스터에서 등록한다.


mysql> CREATE USER 'repl'@'IP주소 or 호스트이름' IDENTIFIED BY 'slavepass';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';



슬레이브에서 등록한다.


mysql > CHANGE MASTER TO MASTER_HOST='192.168.146.134',MASTER_USER='repl',MASTER_PASSWORD='passwd', MASTER_PORT=3306, MASTER_CONNECT_RETRY=30;
mysql > start slave;


5. 기타


덤프
$ mysqldump -uroot -p -A > all.sql

복원
$ mysql -uroot -p < all.sql

'개발' 카테고리의 다른 글

우분투 호스트명 변경  (0) 2016.06.08
우분투에 HDD 추가하기  (0) 2016.06.08
MySQL 미러링 (REPLICATION)  (0) 2016.06.08
아파치 톰캣 연동  (0) 2016.03.12
AIX 에서 시간 설정하기  (0) 2015.12.10
input 필드에 숫자만 입력받기  (0) 2015.10.26
Posted by 에드몽단테스
2016.03.12 14:44

아파치 톰캣 연동 개발2016.03.12 14:44


톰캣 설치
1.tomcat 다운로드
# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.68/bin/apache-tomcat-7.0.68.tar.gz

2.톰캣 압축해제
# tar xvf apache-tomcat-7.0.68.tar.gz 


아파치 설치
1.다운로드
# wget http://apache.mirror.cdnetworks.com//httpd/httpd-2.2.31.tar.gz

2.압축해제
# tar xvf httpd-2.2.31.tar.gz

3.configure
# cd httpd-2.2.31
# ./configure --prefix=/webapps/apache2 --enable-module=shared --enable-rewrite --enable-speling --enable-so --enable-ssl

4.컴파일
# make

4-1 gcc 설치(설치가 안되어 있는 경우)
# yum install gcc

4-2 아래와 같은 오류 발생시 yum으로 설치
configure: error: ...No recognized SSL/TLS toolkit detected

# yum install openssl-devel 

5.설치
# make install


커넥터 설치
1.다운로드
# wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz

2.압축해제
# tar xvf tomcat-connectors-1.2.41-src.tar.gz 

3.빌드 
# cd /native
# ./buildconf.sh

3-1 autoconf 가 설치되어 있지 않는 경우 yum으로 설치
buildconf: checking installation...
buildconf: autoconf not found.
           You need autoconf version 2.59 or newer installed
           to build mod_jk from SVN.

# yum install autoconf

3-2 libtool 가 설치되어 있지 않은 경우 yum으로 설치
buildconf: checking installation...
buildconf: autoconf version 2.63 (ok)
buildconf: libtool not found.
           You need libtool version 1.4 or newer installed
           to build mod_jk from SVN.

# yum install libtool

4.configure (apxs 가 설치된 경로를 찾아 연결한다.)
# ./configure --with-apxs=/webapps/apache2/bin/apxs

5.컴파일
# make

6.설치
# make install

위까지 처리가 되면
아피치 설치 디렉토리의 modules/mod_jk.so 가 생성된다.
아파치 설치 디렉토리의  conf/httpd.conf 파일을 수정한다.

7.설정
1) conf/httpd.conf 수정

하단에 추가
LoadModule jk_module modules/mod_jk.so
Include conf/extra/httpd-vhost.conf

<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
</IfModule>

2) conf/workers.properties 생성
worker.list=edosi1,edosi2
#edosi1
worker.edosi1.port=8009
worker.edosi1.type=ajp13
worker.edosi1.host=localhost
#edosi2
worker.edosi2.port=8010
worker.edosi2.type=ajp13
worker.edosi2.host=localhost



'개발' 카테고리의 다른 글

우분투에 HDD 추가하기  (0) 2016.06.08
MySQL 미러링 (REPLICATION)  (0) 2016.06.08
아파치 톰캣 연동  (0) 2016.03.12
AIX 에서 시간 설정하기  (0) 2015.12.10
input 필드에 숫자만 입력받기  (0) 2015.10.26
폰갭 업데이트하면서 변경된 부분  (0) 2015.05.01
Posted by 에드몽단테스
2015.12.10 10:39

AIX 에서 시간 설정하기 개발2015.12.10 10:39

$ su - 
#
# date 120709212015
-> 2015년 12월 7일 9시 21분
-> root 계정으로 실행해야 함.


'개발' 카테고리의 다른 글

MySQL 미러링 (REPLICATION)  (0) 2016.06.08
아파치 톰캣 연동  (0) 2016.03.12
AIX 에서 시간 설정하기  (0) 2015.12.10
input 필드에 숫자만 입력받기  (0) 2015.10.26
폰갭 업데이트하면서 변경된 부분  (0) 2015.05.01
제우스의 기본적인 명령어들  (0) 2015.04.21
Posted by 에드몽단테스