ssh로 원격의 서버에 접속했을때 idle 상태가 오래 지속되면

접속이 자동으로 끊어진다 이때, ssh 가 주기적으로 서버측에 초 단위로 신호를

보내주어 idle 상태를 없도록 한다.



redhat 계열 에서는 아래와 같이

/etc/ssh/ssh_config 파일을 열어 ServerAliveInterval 300 라인을 추가한다.


java -cp [jdbc경로]:[패키지 전까지 경로] [패키지경로.클래스이름]


jdbc드라이버 jar 파일이 /usr/java/jdk1.6.0_29/mysql_jdbc_driver/mysql-connector-java-5.1.17-bin.ja 이고
소스가 home/daniel/java_Workspace/G-Man_Tier_Server/bin 안에 위치해 있고
실행할 메인 클래스의 패키지 주소가 AA.module.tierServer 이고
실행할 메인 클래스 이름이 TierServer.class 일때 아래와 같이 실행 하면된다.


ex ) java -cp  /usr/java/jdk1.6.0_29/mysql_jdbc_driver/mysql-connector-java-5.1.17-bin.jar:/home/daniel/java_Workspace/G-Man_Tier_Server/bin    AA.module.tierServer.TierServer



JTable을 사용하면서 각 셀에 원하는 크기로 셀 너비를 조정해야 할 경우가 생긴다.

여러가지 방법이 있으나 setPreferredWidth() 펑션과  <---- 셀 너비 조절

DefaultTableCellRenderer <---- 셀 안에 들어가는 데이터의 정렬을 조절

를 사용하는 가장 간단한 방법을 이용해 보자.




테이블을 생성하는 기본적인 코드 (헤더와, 셀) 배열과 이둘을 파라미터로 한 테이블 생성,

JScrollPane을 이용하여 테이블 완성 이라는 공식을 따라 기본적인 테이블을 작성한다.



이후 원하는 셀의 너비를 조정하고, 글자 정렬을위해 DefaultTableCellRenderer  객체를 이용한다.

DefaultTableCellRenderer celAlignCenter = new DefaultTableCellRenderer();
celAlignCenter.setHorizontalAlignment(JLabel.RIGHT);
위 코드와 같이 DefaultTableCellRenderer  의 객체를 하나 생성하고, 객체의 setHorizontalAlignment() 매소드를 이용하여
해당 셀에 출력될 데이터 정렬을 지정한다. 이때 인자는 JLabel을 이용하되. 저정 변수인 CENTER, RIGHT, LEFT 등을 이용하여 정렬을 지정해 둔다.
이후 이 설정을 적용하기위해 table객체에서 .getColumn() 매소드로 해당 컬럼을 가져온뒤, .setCellRenderer(); 매소드로
정렬을 지정한다. 이때 setCellRenderer(); 매소드의 인자는 위에서 지정해둔 DefaultTableCellRenderer의 객체인다.



table.getColumn("Month").setPreferredWidth(10);
비슷한 방법으로 셀의 너비지정은 table객체의 .getColumn() 매소드로 해당 컬럼을 가져온뒤, .setPreferredWidth 매소드로 너비를  픽셀 단위로 지정하면된다.




예제 코드




위의 예제 코드는 데이터 베이스에서 cell 데이터들을 가져오는 예제로 실제 테스트 시 에는, String[][] 등의 이중 배열에
데이터를 넣어두고 table의 cell 로 사용하면 된다.



결과







  1. 2012.01.06 17:25

    비밀댓글입니다

  2. 2014.11.15 18:18

    비밀댓글입니다

서버가 C언어로 짜여지고

클라이언트가 java로 짜여진 프로그램 통신 예제 이다.

열심히 구글링을 하였지만 소켓간 접속까지는 되는데 데이터를 주고 받는데 문제를

쉽게 찾지 못하였다.


데이터만 주고 받으면 되는 줄 알았지만, 구글링 결과 C는 리틀엔디안, 자바는 빅엔디안을 사용하는

문제까지 겹친다고 한다.  이 문제는 아직 부딪혀 보지 않았으므로 생략하고,

간단하게 Client(JAVA) <-> Server(C)  데이터 전송 예제를 보겠다.




C server 예제


서버는 일반 소켓 프로그래밍 그대로 작성해 준다.




Java Client 코드 예제


클라이언트 부분은 일단 소켓 코딩방법을 따르되, in  out 스트림을 생성 할때 , OutputStream 이나 BuferedOutpuStream 과

InputStream 또느 BufferedInputSteream 으로 스트림을 생성하여야 바이트 단위로 문자 데이터를 전송 할 수 있다.

Object와 같은 데이터 스트림을 사용하게 되면 C언어는 패킷을 해석 할 수가 없다.



또하나 중요한 것은 C 서버에서 java client 로 데이터를 전송 할 때에는 반드시 데이터 끝에 "\r\n" 문자를

추가해줘야지 자바에서 데이터 끝임을 인식한다.









'Progamming > C/C++' 카테고리의 다른 글

C Server와 Java Client 통신 예제  (1) 2011.07.11
ioctl 과 FIONREAD  (0) 2011.07.11
유용한 popen 함수 / system 함수 대용  (0) 2011.07.07
  1. 2017.02.28 17:51

    비밀댓글입니다

ioctl 함수는 필수적인 하드웨어 특정 제어(일반적인 입출려과는 반대이다) 를 제공할 수 있다. 그러므로 이 시스템 호출은 장치마다 다르다. 예를 들어 ioctl을 사용하여 테이프 드라이브를 감거나 직렬 포트의 흐름 제어 특성을 설정할 수 있다. 이러한 이유로 ioctl은 플랫폼 별로 이식도리 수 있어야 할 필요가 없다.


ioctl은 소켓 통신에서  상대로 부터 날아온 데이터가 소켓 버퍼에 아직 있는지를 검사 할때도 사용이 가능하다.


예를 들어 Client A 에서 패킷 A,B,C,D,E,F 를 순차적으로 전송을 한다.

서버에 B 에서 A,B 까지만 읽고 소켓 통신을 끊거나 프로그램을 종료 하려고 할때 버퍼에 남아있는 패킷양을

확인 할 수 있다.

또는 패킷을 읽어 들이는 while 문 안에서

ioctl 함수를 이용하여 더이상 수신 패킷이 없으면 while 문을 빠져나가고, accept 상태로

돌아가 다음 소켓을 기다리게 할 수 있다.







예제 코드

'Progamming > C/C++' 카테고리의 다른 글

C Server와 Java Client 통신 예제  (1) 2011.07.11
ioctl 과 FIONREAD  (0) 2011.07.11
유용한 popen 함수 / system 함수 대용  (0) 2011.07.07
리눅스에서 C로 프로그래밍을 할때, 리눅스 기본 명령어를 C프로그램 안에서

호출해야 할 상황이 간혹가다 생긴다.

나같은경우는 리눅스에 C로만든 서버를 심고, 필요할때 마다, cpu usage나, mem uage,

디스트 쿼터 , 또는 서버들의 상태를 읽어서 클라이언트쪽에다가 전송하길 원한다.

이때, 이미 리눅스에서는 유용한 쉘 명령어 들이 존재하기 때문에 C언어에서 이 명령어들만

호출해주면 된다. 이때 가능한 함수는 system 함수와 popen함수가 있다.

system 함수는 명령어를 실행하고 명령 성공 여부에 관한 결과만 가져오지만,

popen 함수는 실행 명령어 결과를 스트링으로 가져 올 수 있다.

예를 들어

A 서버에 C언어로 작성된 프로그램을 심었다.

여기서 B,C,D .. n 개의 서버가 살아 있는지 ping을 날려보고 싶다.

이때 c 프로그램안에 popen  함수를 이용하여 각 서버에 ping을 날려보고 결과를 참고하면된다. (극히 제한된 일부 예제이다.. 활용은 무궁무진해 보인다. )



예제 소스코드 >







결과 >



위와 같은 결과를 얻을 수 있다.






몇일동안 서버들에서 정보를 어떻게 가져올까 고민하다가 찾은 방법이다... 잘만 활용하면 매우 유용할 듯하다.

이제 서버와 자바 클라이언트 사이에 통신만 원활하게 작성하면 기본 기능은 얼추 될것같다. .

주말에 밤새 열코딩 해야겠네 ㅠ.ㅠ

'Progamming > C/C++' 카테고리의 다른 글

C Server와 Java Client 통신 예제  (1) 2011.07.11
ioctl 과 FIONREAD  (0) 2011.07.11
유용한 popen 함수 / system 함수 대용  (0) 2011.07.07
윈도우 환경에서 Eclipse Galileo 버전으로 C, C++ 개발을 위한 환경을 만드는 것을 설명하는데 목표가 있다. 기존에 Eclipse기반으로 Flash Builder 플러그인을 설치해 Flash 개발을 하거나 Java 개발하시는 분들이 같은 환경에서 C, C++을 개발하고자 한다면 이 글은 유용한 팁정도가 될 것이다.


1. MinGW를 설치한다.
MinGW(한국어 발음 밍우?)는 무료로 쓰고 배포할 수 있는 MS 윈도우 헤더 파일과 라이브러리로, 어떠한 써드 파티 C 런타임 DLL에 의존하지 않고 네이티브 윈도우 프로그램을 만들 수 있는 GNU 툴을 제공한다. 쉽게 이야기해 MinGW는 윈도우에서 툴이나 dll에 의존하지 않는 동작하는 프로그램을 만들 수 있도록 도와준다.

MinGW에 대해 : http://ko.wikipedia.org/wiki/MinGW 

물론 C/C++를 개발하기 위해 Cygwin을 이용해도 된다. 하지만 cygwin 기반으로 제작한 것은 항상 cygwin1.dll이 필요한다. 또한 개발한 결과물은 라이센스 문제로 상용으로 팔기가 곤란하다. 게다가 윈도우에서 직접 개발한다기 보다 가상의 리눅스 콘솔을 이용하는 것이다. 그래서 여러가지로 MinGW이 장점이 많다.


1.1 MinGW 받기
공식 사이트 http://www.mingw.org/ 로 간다. 좌측 메뉴에 Downloads 페이지로 이동한다. Download Now 버튼을 눌러 최신버전인 MinGW-5.1.6.exe(2010.04.20)를 다운로드 받는다.


1.2 MinGW 설치
  • 다운받은 MinGW-5.1.6.exe를 실행한다.
  • Welcome 화면 Next를 클릭한다.
  • Download and install을 선택후 Next 버튼을 클릭한다.
  • I agree를 클릭한다.
  • Candidate를 선택후 Next를 클릭한다.
  • 설치하고자 하는 것을 선택후 Next를 클릭한다. g++ compiler와 MinGW Make는 반드시 선택한다.
  • 설치하고자 하는 디렉토를 선택한 다음 Next 클릭
  • Install을 클릭하면 이제 필요한 것을 다운로드 받아 설치를 시작한다.
  • 설치가 완료되면 Next 클릭후 Finish를 누른다.

 

1.3 GCC를 실행하기 위한 윈도우 환경변수 설정하기

이제 어느 경로에 있던지 gcc 컴파일러를 실행할 수 있도록 환경을 조성해줄 필요가 있다.

이 방법은 Cygwin을 사용하지 않고 오로지 MinGW만 사용하는 경우에 해당한다. 만약 Cygwin을 함께 사용하시는 분이라면 배치파일을 만들어 사용하는 방법도 있다. (http://kldp.org/node/48962)

  • 제어판에서 시스템 폴더 클릭. window 7환경에서 개발한다면 검색창에서 시스템을 입력한뒤 시스템 환경 변수 편집을 선택한다.
  • 아래 표시된 방법대로 입력하면 되겠다. 최종적으로 MinGW 설치된 폴더에 Bin 폴더를 입력하는 것을 목표로 한다.


  • CMD창에서 gcc --version과 mingw32-make를 입력하고 다음과 같이 나오면 성공적으로 설치된것임

 이제 MinGW가 설치되었으므로 window 기반에서 C, C++등을 개발할 수 있는 환경이 만들어진 것이다. 다음에 나오는 Eclipse기반이 아니더라도 메모장에서 C코드를 짜고 GCC로 컴파일할 수 있다. 하지만 개발툴을 메모장을 사용할 수는 없는 노릇아닌가?


2. Eclipse Galileo 버전을 설치한다.
Eclipse는 기존에 설치했던 사람이 대부분일 것이다. 이 설명은 필요없는 내용일 수 있으나 그냥 적어본다.

일단 Eclipse는 아래 링크에서 자신의 개발하고자 하는 목적별(Java, C/C++, PHP등)로 다운로드 받아 설치할 수 있다.

http://www.eclipse.org/downloads/

필자는 Java기반에서 개발하는 일이 많으므로 Java EE Developers를 위한 Eclipse IDE를 설치했다. Windows 32bit 기반을 다운로드 받았다. 설치는 받은 압축파일을 원하는 곳에 압축만 풀어주는 것으로 완료가 된다. 본인은 E:\eclipse 에 설치했다. C 드라이브에 설치하지 않은 이유는 나중에 운영체제를 다시 설치하는 경우에 Eclipse를 보존하기 위함이다.

Eclipse를 처음 설치하는 사람이라면 반드시 JRE가 자신의 컴퓨터에 미리 설치가 되어 있어야 Eclipse 구동이 가능하다. 다음 링크에서 JRE나 JDK 최신버전을 설치하면 되겠다.

http://java.sun.com/javase/downloads/index.jsp

만약 C/C++기반인 Eclipse를 다운로드 받아 설치하면 다음에 "3. CDT 플러그인을 설치한다"를 넘겨도 된다.


3. CDT 플러그 인을 설치한다.

CDT는 C/C++ Development Tool이다. 기존에 이클립스 기반으로 개발하던 사람이라면 C/C++도 Visual Studio와 같은 툴을 활용하지 않고 개발하고자 하는 욕구(?)가 들지도 모르겠다. CDT를 Eclipse에 설치하면 C,C++ 개발이 가능한 환경이 된다.

CDT는 개발하는 툴이지 컴파일러가 아니다. CDT를 설치했더라도 각각 운영체제 기반에서 제공하는 C/C++ 컴파일러와 연결하는 작업은 필요하다. 여기서는 CDT를 Eclipse에 설치하는 방법만 소개한다.

Eclipse 메뉴에서 Help > Install New Software... 를 선택한다.

아래와 같은 화면이 나오면 Add 버튼을 누른다.


http://www.eclipse.org/cdt/downloads.php 에 가면 최신버전(현재 CDT 6.0.x)을 다운로드 받을 수 있는 링크가 소개되어 있다. Eclipse가 Galileo버전이므로 http://download.eclipse.org/tools/cdt/releases/galileo 를 URL로 삼아 플러그인을 설치하면 되겠다.

아래처럼 Add Site창에 Name과 Location을 입력한다. Name은 아무거나 입력하면 된다.


참고로 위처럼 등록하면 Windews > Preferences > Install/Update > Avaliable Software Sites에 아래처럼 등록되어 있다.


이제 Work with 란에 CDT를 입력해보면 금방 등록했던 CDT 정보를 선택할 수 있다. 그럼 아래처럼 나온다. CDT Main Features, CDT Optional Features 모두 Check하고 Next버튼을 누른다.


아래처럼 설치할 목록들이 나온다. Next버튼을 누른다.



아래와 같은 화면이 나오면 I accept the terms of the license agreements를 선택후 Finish 버튼을 누르면 설를 시작한다. 시작이 완료된 다음에는 Eclipse를 재구동한다.



Eclipse가 구동된 다음 C/C++ Perspective를 열어보자. Windows>Open Perspective>Other 를 선택한다. 아래처럼 창이 뜨면 C/C++를 선택한다. 
 

Perspective창에 아래처럼 추가 된것을 확인하자. 이제 Eclipse에서

File > New를 가도 C, C++ 프로젝트를 만들 수 있게 되었다.


4. 간단한 C/C++ 개발해보기

MinGW의 bin 폴더에 보면 gcc, g++등 각종 컴파일 도구가 있다. 이클립스의 CDT환경에서 C/C++로 개발할때는 MinGW의 컴파일 도구를 이용해 컴파일 한다는 사실을 기억하자.

다음과 같이 C++ 프로젝트를 만들어보자.
  • 이클립스 메뉴에서 File > New > C++ Project를 선택한다.
  • 다음 그림과 같이 프로젝트를 만들기 위한 창이 나오면 Project name을 넣고 Project type을 Executable > Hello World C++ Project를 선택한다음 Toolchains를 MinGW GCC로 선택하도록 한다. 이렇게 하면 자동으로 Hello World CPP가 만들어지면서 컴파일은 MinGW의 g++컴파일러를 이용해 컴파일 할 수 있도록 설정 되는 것이다. Next 버튼을 누른다.
  • 간단한 셋팅을 하는데 이 설정에서 중요한 것은 Source 파일은 src 폴더에 들어가게 된다는 것이다. Next 버튼을 누른다.


  • 다음 그림과 같이 Debug, Release 두 버전으로 프로그램 결과를 별 수 있도록 셋팅된다. Finish 버튼을 누른다.

 

이클립스의 Project > Build Automatically가 선택되어 있다면 위처럼 프로젝트를 만들게 되면 자동으로 MinGW의 g++을 찾아 컴파일을 실시하게 된다. 아래와 같은 메시지가 이클립스의 Console창에 나오면 제대로 실행된 것이다.


위 메시지 처럼 컴파일을 하지 못하고  아래처럼 Nothing to build for Test1 메시지가 뜬다면 이것은 수정된 내용이 없으므로 컴파일할 필요가 없다는 것을 의미한다. 대신 Ctrl+B 하면 강제로 컴파일한다.


이 프로젝트는 C++ 프로젝트이므로 gcc 컴파일러가 연결되어야 한다. 만약 컴파일에 실패한다면 Mingw/bin에 gcc.exe를 확인해보자. 만약에 없다면 위에 Mingw 설치하기를 다시 한번 따라해보길 바란다.

실행해보자. 아래처럼 만들어진 프로젝트의 src폴더를 열어 Test1.cpp를 선택한다. 그리고 빨간 박스로 표시된 아이콘을 클릭하거나 Ctrl+F11을 하면 실행할 수 있다.

Console창에 아래처럼 Hello World가 출력된것을 확인하자.

Build Automatically를 체크한 경우에는 코드를 수정하고 저장할 때마다 자동 Build처리된다. 하지만 수동으로도 할 수 있는데 Ctrl+B 또는 아래 그림처럼 망치툴을 클릭해서 Build할 수 있다.



개발시에는 Debug버전과 Release 버전이 있다는 것을 기억하자. 아래 보이는 도구는 현재 개발 환경이 Debug인지 Release인지 결정해 주는 도구이다. Debug는 개발용이고 Release는 외부로 배포할때 사용한다.


실제로 이 도구를 이용해 Debug에서 Release로 바꿔보자. 아래처럼 Release 폴더가 생겨나고 컴파일 결과가 이 폴더안에 만들어진다. 이때부터는 실행할때 Release폴더에 있는 exe파일이 실행되게 된다.


참고로 makefile을 기반으로한 개발을 하고 싶은 경우가 있을 수 있다. 이런 경우에는 C++ 프로젝트를 생성시에 아래 그림처럼 Makefile Project를 선택해서 생성해야한다.

하지만 실제로 이 상태로 프로젝트를 생성해 컴파일하면 Cannot run program "make": Launching failed 메시지가 console창에 보이면서 컴파일이 불가능하다. 이 메시지는 컴파일을 수행할 수 있는 make 명령어를 찾지 못한다는 것을 의미한다. Eclipse에서는 기본적으로 make가 지정되어 있지만 MinGW의 make 명령은 mingw32-make로 다르다. 그러므로 이 문제를 해결하기 위해 mingw32-make.exe를 복사해 같은 폴더에 make.exe로 이름을 바꿔주면 된다. (물론 찾아보면 다른 방법도 있지만 이 방법이 가장 빠르고 쉽다.)

makefile을 이용해 개발해보는 간단한 예제는 다음글을 참고한다.
http://kkamagui.springnote.com/pages/446531


5. 간단한 win32용 프로그램 개발하기
지금까지의 예제는 단순히 Console창에 결과가 나온다. MinGW는 Windows API를 이용한 개발도 지원하므로 앞서 설명한 같은 C++ 프로젝트로 만들고 아래 코드로 변경해도 컴파일이 가능하다.


01.#include <windows.h><WINDOWS.H>
02.  
03.int WinMain(HINSTANCE hInstance,
04.                     HINSTANCE hPrevInstance,
05.                     LPTSTR    lpCmdLine,
06.                     int       nCmdShow)
07.{
08.        MessageBox(NULL, "Hello in EclipseCDT", "EclipseCDT", MB_OK);
09.        return 0;
10.}
11.</WINDOWS.H>


실행해 보면 아래와 같은 다이얼로그 창이 나온다.

경험자들에 따르면 Win32 로 개발하는 경우에는 한가지 중요한 C++ 링커 설정을 해야한다고 한다.

먼저 해당 Win32 프로젝트를 선택후(필자의 경우 Test3) 이클립스 메뉴에서 Project > Properies로 들어갑니다. 아래처럼 창이 뜨면 C/C++ Build > Setting으로 들어가 Tool Setting 탭을 선택합니다. 거기에 MinGW C++ Linker>Miscellaneous를 선택해 Linker flags에 -mwindows를 입력한다. 완료하면 Apply버튼이나 OK 버튼을 누르면 적용된다.

이 설정을 해야 군데 군데 "undefined reference"와 같은 에러를 발생시키지 않는다고 한다. 수정했는데도 에러를 띄우면 File->Save all 또는 이클립스 종료후 다시 시작하면 된다.

Windows API 학습을 위해 다음 링크를 참고한다.
http://www.winapi.co.kr/

6. 디버깅 환경 만들기
지금까지 개발환경으로 개발자체는 문제 없지만 디버깅은 할 수 없다. MinGW에 디버깅을 하기 위한 도구가 설치되어야 하는데 이를 가능하게 하는 것이 gdb이다.

먼저 gdb를 다운로드 받자.
http://downloads.sourceforge.net/project/mingw/GNU%20Source-Level%20Debugger/GDB-7.1/gdb-7.1-2-mingw32-bin.tar.gz

압축을 풀고 bin과 share 폴더를 그대로 설치된 MinGW 폴더에 복사해준다. 이것으로 MinGW의 C/C++ 디버깅 환경이 구축되었다.

이제 Eclipse에서 F11 누르거나 아래처럼 벌레모양의 아이콘을 눌러 Debugging을 할 수 있게 된다.


디버깅을 하게 되면 Debug Perspective창으로 바뀌면서 아래처럼 디버깅이 가능해진다.

참고로, 이클립스에서 디버깅 설정은 Run > Debug Configurations에서 할 수 있다. 좌측 리스트에서 C/C++ Application을 선택해 해당 exe를 선택한뒤 우측에서 Debugger 탭을 선택하면 Debugger를 선택할 수 있게 된다.

만약 gdb를 설치했음에도 불구하고 에러를 내면서 디버깅을 할 수 없는 경우 CMD창에서 다음과 같이 입력해보길 바란다.



만약 위처럼 메시지가 나오지 않고 libexpat-1.dll이 없다고 경고창이 나오면 현재 설치한 gdb버전이 libexpat-1.dll과 의존성이 있는 것이다. 이때는 libexpat-1.dll도 함께 다운로드 받아 MingGW/bin에 복사해줘야 한다.

libexpat-1.dll은 아래 링크에서 다운로드 받는다.
http://downloads.sourceforge.net/project/mingw/MinGW%20expat/expat-2.0.1-1/libexpat-2.0.1-1-mingw32-dll-1.tar.gz

다음 글을 참고한다.
http://forums.codeblocks.org/index.php/topic,11301.msg77273.html

7. 정리하며
프로젝트 중에 C와 MySQL을 연동하여 개발할 경우가 있어서 전체 환경설정을 정리한다는 마음으로 글을 적었다. 기존에 나와 있는 많은 글들이 너무 옛날 버전이라서 그런지 지금과 맞지 않는 부분도 있었다. 앞으로 MySQL과 연동하게 되면 관련 내용도 소개해 볼까 한다. 개발에 있어서 환경을 구축하고 적응하는게 반인 것 같다. ^^;


8. 참고글

이클립스(Eclipse) CDT 설치
(Eclipse Galileo) C/C++ Developments User Guide
CDT를 이용한 Windows C/C++ 개발 환경 만들기
Eclipse/CDT
Eclipse Project CDT (C/C++) Plugin Tutorial 1, 2By Brian Lee
이클립스(eclipse)를 이용해서 C/C++ 프로그래밍 환경설정
MinGW + Eclipse 를 이용한 Windows 개발 환경 구현

글쓴이 : 지돌스타(http://blog.jidolstar.com/677)
$vi ~/.bash

아래와 같이 수정

PS1="[\u@\h \W]\\$ "


저장후 
$. ~/.bash 
또는 
$source ~/.bash 
실행 

[id@hostname ~]$ 형태로 보여지는것을 확인 할수가 있습니다. 


1) 일단 #ps -ef 로 프로세스를 확인하고 safe_mysqld, mysqld 가떠있으면 날려준다...
    #kill -9 pid번호입력      ========> safe_mysqld 의 pid
    #killall mysqld            =========>남은 찌꺼기 프로세스 제거
 
    #ps -ef     다시 mysqld 떠있나 확인한다.
 
2) mysql 초기화 모드 실행
    #safe_mysqld --skip-grant &               =====>#mysqld_safe --skip-grant &    
              mysql 3버젼                                                 mysql 4버젼
    #mysql                       =============> mysql 실행
 
3) 접속해서 암호 설정
----------------------------------------------------------------------------------------
mysql>use mysql;

mysql>update user set password=password('새암호') where user='root';  <-- 새암호로 변경

mysql> FLUSH PRIVILEGES; <-- 시스템에 반영합니다

mysql> exit 
-----------------------------------------------------------------------------------------
 
4) mysqld 관련 프로세스 모두 종료 시킨다.
 
5) safe_mysqld &       ============> 정상실행 mysql
    4버젼에서는  mysqld_safe &     





Forgot your MySQL root user password? Don’t worry. We are here for rescue.

When you tried to login to root without entering a password, you may get ‘Access Denied’ message, as MySQL is expecting a password.

This article explains how to recover mysql root password by setting a new MySQL password when you don’t remember your old one.

When you don’t remember root password and enter a wrong password, you will get the following MySQL error message.

# mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

1.  Stop MySQL Server

As a first step, stop the mysql server using one of the following method.

# service mysql stop (or) # /etc/rc.d/init.d/mysql stop

2. Add –skip-grant-tables to mysqld_safe Startup Command

Open the mysql startup script and add -skip-grant-tables as shown below.


# vi /etc/rc.d/init.d/mysql

Old Line: $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &

New Line: $bindir/mysqld_safe --skip-grant-tables --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &

3. Start MySQL Server With –skip-grant-tables

Start the mysql server with skip-grant-tables option, which will allow anybody to login to mysql without entering a password.

# service mysql start Starting MySQL.                                            [  OK  ] [Note: This is using the updated /etc/rc.d/init.d/mysql script]

4. Login Using MySQL Root User Without Entering Password

Since you’ve skipped the grant table, this time when you try to login to mysql, it will not ask for password.

# mysql -u root mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.25-rc-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> [Note: MySQL did not ask for any password]

5. Set MySQL Root Password to a New Password Using UPDATE Command

Follow the strong password rules while setting new password for the mysql root account.

mysql> UPDATE user SET password=PASSWORD('newpassword') WHERE user='root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1  Changed: 1  Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql>

6. Stop the MySQL Server

Stop the mysql server using one of the following method.

# service mysql stop

(or)

# /etc/rc.d/init.d/mysql stop

7. Update /etc/rc.d/init.d/mysql Startup Script and Remove –skip-grant-table

Open the mysql startup script and remove –skip-grant-tables as shown below.

# vi /etc/rc.d/init.d/mysql Old Line: $bindir/mysqld_safe --skip-grant-tables --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 & New Line: $bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &

8. Start MySQL Server

Start the mysql server without the skip-grant-tables option. This time mysql will ask for password when someone tries to login.

# service mysql start Starting MySQL.                                            [  OK  ]

9. Login to MySQL With the New Password

Login to mysql root account with the new password.

# mysql -u root -pnewpassword Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.25-rc-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>


Puppet Installation & Configuration

 

GyeongRyoon Kim

 

# 설치 리눅스 SL5.3 32bit / SL5.5 64bit

 

Installation & Configuration Guide

This guide covers in-depth installation instructions and options for Puppet on a wide-range of operating systems.

 

Before Starting

You will need to install Puppet on all machines on both clients and the central Puppet master server(s).

For most platforms, you can install ‘puppet’ via your package manager of choice. For a few platforms, you will need to install using the tarball or RubyGems.

INFO: For instructions on installing puppet using a distribution-specific package manager, consult your operating system documentation. Volunteer contributed operating system packages can also be found on the downloads page

Ruby Prerequisites

The only prerequisite for Puppet that doesn’t come as part of the Ruby standard library is facter, which is also developed by Puppet Labs.

All other prerequisites Ruby libraries should come with any standard Ruby 1.8.2+ install. Should your OS not come with the complete standard library (or you are using a custom Ruby build), these include:

• base64

• cgi

• digest/md5

• etc

• fileutils

• ipaddr

• openssl

• strscan

• syslog

• uri

• webrick

• webrick/https

• xmlrpc

NOTE: We strongly recommend using the version of Ruby that comes with your system, since that will have a higher degree of testing coverage. If you feel the particular need to build Ruby manually, you can get the source from ruby-lang.org.

 

OS Packages

If installing from a distribution maintained package, such as those listed on the Downloading Puppet Wiki Page all OS prerequisites should be handled by your package manager. See the Wiki for information on how to enable repositories for your particular OS. Usually the latest stable version is available as a package. If you would like to do puppet-development or see the latest versions, however, you will want to install from source.

 

 

 

 

 

■ Install ruby


$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p302.tar.bz2

$ tar -xzjf ruby-1.9.2-p0.tar.bz2

$ cd ruby-1.9.2-p0

$ ./configure

$ make

$ make install

 

■ install ruby-gem

 

$ wget http://rubyforge.org/frs/download.php/73779/rubygems-1.4.1.tgz

$ tar -xvzf rubygems-1.4.1.tgz

$ cd rubygems-1.4.1

$ ruby setup.rb

 

■ Download puppet & facter

 

$ wget http://puppetlabs.com/downloads/facter/facter-latest.tgz

$ wget http://puppetlabs.com/downloads/puppet/puppet-latest.tgz

 

 

■ Install facter

 

$ cd facter-1.5.8

$ ruby install.rb

 

■ Install puppet

 

$ cd puppet-2.6.4

$ ruby install.rb

 

■ DNS setting

 

For puppet master server

$ vi /etc/hosts

puppetmast's IP servername puppet

15.180.234.kxx master.gsdc.re.kr puppet

 

For puppet client

$ vi /etc/hosts

puppetmast's IP servername puppet

ex) 15.180.234.xx master.gsdc.re.kr puppet

 

check DNS setting at puppet master server and client server both

$ ping puppet

 

 

■ Open the 8140 port

 

Only for puppetmaster

$ vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 8140 -j ACCEPT <- add


$ netstat -anpt | grep 8140 <- check 8140 port

$ iptables -nL

 

 

 

■ Create puppet configuration directory and files

 

only for puppetmaster

$ mkdir -p /etc/puppet/manifests/

$ vi /etc/puppet/manifests/site.pp

 

 

■ create ca at puppet master server

 

$ puppetd --generate masgter_server_name

ex) puppetd --generate daniel03.gsdc.re.kr

 

$ ls /etc/puppet/ssl/ca/signed

 

■ Create puppetmasterd script

 

Only for puppetmaster

$ cp /opt/pupet-2.6.4/conf/redhat/server.init /etc/init.d/puppetmasterd

$ chmod u+x /etc/init.d/puppetmasterd

 

If you have some error, change permission at /var/lib/puppet directory

$ chown puppet.puppet /var/lib/puppet/

 

■ Create puppetd script

 

Only for client

$ cp /opt/pupet-2.6.4/conf/redhat/client.init /etc/init.d/puppetd

$ chmod u+x /etc/init.d/puppetd

$ vi /etc/init.d/puppetd

puppetd=${PUPPETD-/usr/local/sbin/puppetd} <- check puppetd path

 

■ Create puppet account for puppetmaster

 

Only for puppetmaster

$ useradd puppet

 

■ Start Puppetmaster daemon

 

It is also neccessary to create the puppet user and group that the daemon will use. Either create these manually, or start the daemon with the --mkusers flag to create them.

Starting the puppet daemon will automatically create all necessary certificates, directories, and files.

$ /usr/sbin/pupptmasterd --mkusers

$ /usr/sbin/pupptmasterd start

 

If you Can not start puppetmasterd demon, check PATH of puppetmasterd and modify path at /etc/init.d/puppetmasterd files

$ vi /etc/init.d/puppetmasterd

 

PUPPETMASTER=/usr/local/sbin/$prog <- check the path

 

 

 

■ Request CA to puppetmaster

 

Only for client

$ puppetd --server SERVERNAME --waitforce 10 --test

 

■ Check CA from client and sign it.

 

$ puppetca --list

ex)daniel02.gsdc.re.kr

$ puppetca --sign daniel02.gsdc.re.kr

or

$ puppetca --sign all

 

If you can not see the list of CA from client, Check CA for puppetmaster

$ openssl x509 -text -noout -in ssl/ca/ca_crt.pem

 

Issuer: CN=Puppet CA: daniel03.gsdc.re.kr

Validity

Not Before: Jan 19 04:49:45 2011 GMT

Not After : Jan 18 04:49:45 2016 GMT

Subject: CN=Puppet CA: daniel03.gsdc.re.kr

 

If hosts name at CA is not same with puppetmaster's name, clear all CA in puppetmaster and recreate CA using puppetmasterd.

 

■ Add init process

 

Only for puppetmaster

$ chkconfig --add puppetmasterd

$ chkconfig puppetmasterd on

$ chkconfig --list | grep puppetmasterd <- check

 

only for client

$ chkconfig --add puppetd

$ chkconfig puppetd on

$ chkconfig --list | grep puppetd <- check

 

 

■ Create puppet.conf files

 

client and puppetmaster are both.

$ vi /etc/puppet/puppet.conf

 

 

[user]

# where puppet stores dynamic and growing data.

# The default value is '/var/puppet'.

vardir = /var/lib/puppet

 

# The Puppet log directory.

# The default value is '$vardir/log'.

logdir = /var/lib/log/puppet

 

# Where Puppet PID files are kept.

# The default value is '$vardir/run'.

rundir = /var/lib/run

 

# Where SSL certificates are kept.

# The default value is '$confdir/ssl'.

ssldir = $confdir/ssl

 

#module path

modulepath = /etc/puppet/modules

 

[main]

manifest = /etc/puppet/manifests/site.pp

modulepath = /etc/puppet/modules

 

[agent]

# The file in which puppetd stores a list of the classes

# associated with the retrieved configuration. Can be loaded in

# the separate ``puppet1`` excutable using the ``--loadclasses``

# option.

# The default value is '$confdir/classes.txt'.

classfile = $vardir/classes.txt

 

# Where puppetd chaches the local configuration. An

# extension indicationg the cache format is added automatically.

# The default value is '$confdir/localconfig'.

localconfig = $vardir/localconfig

 

server = daniel03.gsdc.re.kr

runinterval = 1800

 

[master]

ssl_client_header = SSL_CLIENT_S_DN

ssl_client_verify_header = SSL_CLIENT_VERIFY

 

 

■ Scaling Puppet (Using Passenger)

 

Passenger is the Apache 2.X Extension which lets you run Rails or Rack applications inside Apache.

Puppet (>0.24.6) now ships with a Rack application which can embed a puppetmaster. While it should be compatible with every Rack application server, it has only been tested with Passenger.

Depending on your operation system, the versions of Puppet, Apache and Passenger may not support this implementation. Specifically, Ubuntu Hardy ships with an older version of puppet(0.24.4) and doesn't include passenger at all, howerver updated packages for puppet can be found here. There are also some passenger packages there, but as of 2009-09-28 they do not seem to have the lastest passenger (2.2.5), so better install passenger from a gem as per the instructions at[modrails.com].

 

Note: Passenger versions 2.2.3 and 2.2.4 have known bugs regarding to the SSL environment variables, which make them unsuitable for hosting a puppetmaster. So user either 2.2.2, or 2.2.5. Note that while it was expected that Passenger 2.2.2 would be the last version which can host a 0.24.x puppetmaster, that turns out to be not true, cf. this bug report. So, passenger 2.2.5 works fine.

 

■ Install Rack/Passenger

 

$ gem install rack

$ gem install passenger

 

check the lists what you have installed

 

$ gem list

*** LOCAL GEMS ***

 

daemon_controller (0.2.5)

fastthread (1.0.7)

file-tail (1.0.5)

passenger (3.0.2)

rack (1.2.1)

rake (0.8.7)

spruz (0.2.2)

 

$ install passenger-install-apache2-module

$ passenger-install-apache2-module

 

■ Enable Apache modules “ssl” and “headers”:

install install mod_ssl

$ yum install mod_ssl

 

■ Configure Apache

For RHEL5:

$ vi /etc/httpd/conf.d/puppetmasterd.conf (see below for file contents)

 

Install the rack application [1]:

 

$ mkdir -p /etc/puppet/rack/puppetmasterd

$ mkdir /etc/puppet/rack/puppetmasterd/public

$ mkdir /etc/puppet/rack/puppetmasterd/tmp

$ cp /opt/puppet-2.6.4/ext/rack/files/config.ru /etc/puppet/rack/puppetmasterd

$ chown puppet /etc/puppet/rack/puppetmasterd/config.ru

 

Write below contents for puppetmasterd.conf

contents of puppetmasterd.conf

$vi /etc/httpd/conf.d/puppetmaster.conf


Listen 8140

<VirtualHost *:8140>

SSLEngine on

SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA

SSLCertificateFile /etc/puppet/ssl/certs/daniel03.gsdc.re.kr.pem

SSLCertificateKeyFile /etc/puppet/ssl/private_keys/daniel03.gsdc.re.kr.pem

SSLCertificateChainFile /etc/puppet/ssl/ca/ca_crt.pem

SSLCACertificateFile /etc/puppet/ssl/ca/ca_crt.pem

# CRL checking should be enabled; if you have problems with Apache complaining about the CRL, disable the next line

SSLCARevocationFile /etc/puppet/ssl/ca/ca_crl.pem

SSLVerifyClient optional

SSLVerifyDepth 1

SSLOptions +StdEnvVars

 

# The following client headers allow the same configuration to work with Pound.

RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e

RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e

RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e

 

RackAutoDetect On

DocumentRoot /etc/puppet/rack/puppetmasterd/public/

<Directory /etc/puppet/rack/puppetmasterd/>

Options None

AllowOverride None

Order allow,deny

allow from all

</Directory>

</VirtualHost>

 

Add below contests for apache

 

$ vi /etc/httpd/conf/httpd.conf

 

LoadModule passenger_module //usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.2/ext/apache2/mod_passenger.so

PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.2/

PassengerRuby /usr/local/bin/ruby

 

 

■ Confugure auth.conf file to access modules directory

 

$ vi /etc/puppet/auth.conf

 

## authorize access to module directory to anybody

path /modules

method find

allow *

 

 

 

■ Start apache web server

 

If all works well, you’ll want to make sure your puppmetmasterd init script does not get called anymore:

 

# For Debian/Ubuntu

$ update-rc.d -f puppetmaster remove

 

# For RHEL5

$ chkconfig puppetmaster off

$ chkconfig httpd on

 

 

■ Restart apache server

 

If puppetmaster process is alive, you should kill that process and execute apache process.

# For Debian/Ubuntu

$ /etc/init.d/apache2 restart

 

# For RHEL5

$ /etc/init.d/httpd restart

 

 

+ Recent posts

티스토리 툴바