2016. 8. 18. 18:42

디렉토리 생성 시 해당 유저의 그룹 외의 다른 그룹으로 생성되게끔 하고 싶을 경우가 있을 것이다.


메인 그룹을 수정하면 되는 데 방법은 다음과 같다.



usermod -g 메인그룹명 유저명
usermod -G 그룹명 유저명

useradd -m -s /bin/bash kitty
usermod -g tomcat kitty
usermod -G kitty kitty

groups kitty 결과
kitty : tomcat kitty

mkdir test1
drwxr-xr-x. 2 kitty tomcat 6  8월 18 18:38 test1

메인그룹으로 그룹권한 설정됨을 확인 할 수 있다.

Posted by 해비
2016. 6. 27. 00:53

ganglia 설치 및 설정 한 내용을 정리


우분투, 데비안 환경에서 apt-get 으로 설치 했습니다.




1. 서버 설치

1-1. 웹 환경 설치

1-2. ganglia meta daemon (수집서버) 설치

2. 클라이언트 설치

2-1. ganglis monitor daemon (모니터데몬) 설치


1. 서버 설치

모니터 데몬이 실행중인 서버에 대해서 수집서버가 일정주기로 데이터를 ( pull 방식 ) 가져옵니다.

Broadcast 를하여 동일네트웤의 모니터데몬으로부터 수신하는 방법도 있는 듯 하나, 여기서는 직접 IP를 명시하여 당겨오도록 설정합니다.


1-1. 웹 환경 설치

Ganglia 가 돌아가기 위해서는 웹서버, PHP 가 필요합니다.

이 부분은 Nginx + php5-fpm 조합으로 구성합니다.


Nginx 설치

# apt-get install nginx


PHP 설치

# apt-get install php5-fpm


Nginx-PHP 연동


PHP 연동까지 완료 했으면 이제 ganglia 설치로 넘어간다.


1-2. ganglia meta daemon (수집서버) 설치

gmetad 설치 ( 데이터를 수집하는 서버 1대 )

# apt-get install gmetad


gmetad 설정

# vim /etc/ganglia/gmetad.conf

data_source "svr1" 192.168.0.101:8649
data_source "svr2" 192.168.0.102:8649

gridname "haebinet"

data_source 부분을 찾아서 위 내용 참고하여 작성한다.

gridname 부분에는 해당 시스템의 대표 그룹?명을 적으면 된다.


ganglia-web-frontend 설치 ( Web 에서 확인하기 위한 도구 )

# sudo apt-get install ganglia-webfrontend


Nginx 루트 디렉토리 이동 및 ganglia webfrontend 링크 생성

# cd /usr/share/nginx/www/

# ln -s /usr/share/ganglia-webfrontend/ ganglia




2. 클라이언트 설치

2-1. ganglis monitor daemon (모니터데몬) 설치

수집 서버의 데이터도 모니터링 하고자 한다면 클라이언트도 같이 설치 해줘야 합니다.


ganglia-monitor 설치 ( 개별 서버마다 설치 )

# apt-get install ganglia-monitor


ganglia-monitor 설정

# vim /etc/ganglia/gmond.conf

/* This configuration is as close to 2.5.x default behavior as possible
   The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
  daemonize = yes
  setuid = yes
  user = ganglia
  debug_level = 0
  max_udp_msg_len = 1472
  mute = no
  deaf = no
  host_dmax = 0 /*secs */
  cleanup_threshold = 300 /*secs */
  gexec = no
  send_metadata_interval = 0
  override_hostname = pi2
}

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
 * NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
  name = "pi2"
  owner = "owner_haebi"
  latlong = "latlong_haebi"
  url = "url_haebi"
}

/* The host section describes attributes of the host, like the location */
host {
  location = "location_haebi"
}

/* Feel free to specify as many udp_send_channels as you like.  Gmond
   used to only support having a single channel */
udp_send_channel {
  host = 192.168.0.101
  port = 8649
  ttl = 1
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
  port = 8649
  retry_bind = true
}

/* You can specify as many tcp_accept_channels as you like to share
   an xml description of the state of the cluster */
tcp_accept_channel {
  port = 8649
}

클라이언트 설정파일의 예.




Posted by 해비
2016. 6. 27. 00:33

시스템의 상황을 한눈에 볼 수 있는 모니터링 도구 ganglia 를 사용하면서 몇가지 사항을 정리 해 둔다.


RRDTool 이라는 것을 사용하여 시간별 데이터를 기록하고 그것을 출력한다.


데몬은 크게 아래 2가지로 나뉜다.

1. 메타데몬 (리포트를 표시 해줄 역할)

2. 모니터데몬 (시스템 정보 수집)



좀 더 쉽게 설명하자면 이런 구조?

----------------------------

모니터데몬

모니터데몬 --> 메타데몬

모니터데몬

...

----------------------------


설치과정 중 알게된 사항들 정리

- 1개의 메타 데몬은 여러개의 모니터 데몬으로 부터 정보를 수신한다.

- 실제 데이터 저장은 메타데몬이 설치된 곳에 저장이 된다.

- 저장되는 위치는 /var/lib/ganglia/rrdtool/IP 또는 시스템명/아래에 들어가는 파일들이다.

    (모니터 데몬에서 설정한다. 설정 하지 않을 경우, IP 로 기록된다)

- 파일 사이즈는 처음 생성 후 고정으로 더이상 증가하지 않으며, 최대 1년 기간동안의 데이터만 들어가는 듯 하다.



설치 결과

전체 시스템 상황



개별 시스템 상황

- 하단에 개별 시스템 별로 상황을 보여주고, 클릭해서 들어가면 해당 시스템의 상황을 더욱 자세히 살펴 볼 수 있다.







Posted by 해비
2016. 6. 22. 00:58

sysctl -A 로 확인 가능한 항목 중

(/etc/sysctl.conf 파일 에디트 하면 된다)



net.ipv4.ip_local_port_range = 32768    61000


로컬 포트로 사용할 범위가 이렇게 정해 져 있다. 서버로 사용할 포트는 가급적 이 번호를 피하는 것이 좋다.

서버를 열어야 하는데 하필 그 포트가 저 범위에 들어있고, 로컬 포트 생성하여 다른 원격지 서버에 연결 중인 상태라면 바인드 오류를 낼 것이기 때문이다.



net.ipv4.ip_forward = 1


포워딩 허용여부를 설정하고 있다. 1이면 허용. 0 이면 차단.

쉽게 말해서. 이 컴퓨터가 최종 목적지가 아닌 패킷의 경우, 다른 곳으로 전달을 허용할 것인가에 대한 것인데, 쉽게 공유기 같은거 할려면 허용을 해야 된다고 생각하면 된다.




Posted by 해비
2016. 6. 22. 00:58

네트워크 공부하면서 알게된 내용들을 정리 하고자 한다.

일부는 잘못된 내용이 있을 지도 모른다...;; (-_-)




TCP 에서 포트 범위는 0~65535 까지 이고, 이론 상 0번을 제외하고 1~65535 번 까지 총 65,535 개의 포트가 사용 가능하다.


연결을 맺기 위해서 쌍방, 클라이언트 와 서버는 각각 IP : PORT 가 필요하다.


클라이언트는 서버로 접속하기 위해서 자신의 로컬 포트 번호를 생성하고, 해당 포트번호를 사용하여 서버에 접속 한 후 통신을 하게 되는데, 클라이언트가 서버에 접속하기 위해 생성가능한 로컬 포트 갯수는 최대 65,535 개를 넘을 수 없다.


서버는 1개의 LISTEN 포트로 여러 IP로 부터의 접속을 받을 수 있다. 즉, 이론상 무제한...?

(예: 2대의 클라이언트로 부터 테스트 가능한 최대 연결 수는 약 13만 이다. IP당 65k 개 연결.)




[클라이언트 IP:PORT]

클라이언트1:1 ---> 서버1

클라이언트1:2 ---> 서버2

클라이언트1:3 ---> 서버3

...

IP당, 최대 65k 개의 연결 까지 가능




[서버 IP:PORT]

클라이언트1:1            

클라이언트1:2            

...                            

클라이언트1:65535        ---> 서버1:1 LISTEN

클라이언트2:1              

클라이언트2:2              

...                              

클라이언트2:65535        

IP당, 최대 65k 개의 연결이 가능, 서버가 성능이 받쳐준다는 가정 하에 무한? 연결 가능




Posted by 해비
2016. 6. 9. 01:17



/etc/openvpn/vpn1.conf

/etc/openvpn/vpn2.conf

...

이런식으로 서버 환경설정을 여러 개 준비.


/etc/init.d/openvpn start vpn1

/etc/init.d/openvpn start vpn2

...

서버 실행 시에는 이렇게 여러개 실행이 가능하다.


openvpn 2.x버젼 현재  멀티코어가 지원되지 않는다.


고로 멀티 코어 활용을 위해 서버를 여러개 띄어두고 로드밸런싱을 활용하면 좋을 것 같다.


그리고...

# /etc/init.d/openvpn start 또는 stop 명령으로 한번에 처리하고자 한다면


/etc/default/openvpn 파일을 열어서 AUTOSTART= 이라고 되어있는 부분에 아래와 같이 설정하면 된다.

AUTOSTART="vpn1 vpn2"


3개 4개 가 되어도 한칸씩 띄고 conf 파일의 이름만 나열해 주면 된다.


- 끝 -






[참고]

http://serverfault.com/questions/168487/how-to-control-multiple-openvpn-instances-on-the-same-server

Posted by 해비
2016. 6. 2. 01:23


GNU sed


stream editor 를 줄여서 sed 라고 하는 것 같다.


파일 내 문장의 내용 변경

sed '/nproc/c\MODIFIED BY HAEBI' test.conf

sed '/찾을문자열/c\바뀔 문자열' 파일


nproc가 포함된 줄의 내용이 MODIFIED BY HAEBI로 바뀌는 예이다.

아직은 화면에 출력만 되고, 실제 반영이 되지 않는다. sed -i 옵션을 주면 바로 반영되므로 주의.


단순히 찾을 문자열  또는 단어만 가지고는 대상을 특정 짓기가 어렵기에 정규식을 사용해 보겠다.


아래 왼쪽 내용을 찾아서 오른쪽 내용으로 바꾸어 보도록 하겠다.

 *    -    core    unlimited

   >

 *    -    core    100000


찾을 정규식 패턴...

\S+\s+\S+\s+core\s+\S+ 

[문자 1개 이상] - [공백 1칸 이상] - [문자 1개 이상] - [공백 1칸 이상] - [core] - [공백 1칸 이상] - [문자 1개 이상]

(정규식 작성은 regexr 사이트에서 작성을 권장)


sed 에서 정규식 사용시 +기호 앞에 \을 붙여야 한다.

sed '/\S\+\s\+\S\+\s\+core\s\+\S\+/c\*    -    core    100000' test.conf

복잡해 보이지만 별거 없다.

정규식 + 기호 앞에 \을 붙여주고, 가운데 /c\ 을 기준으로 앞, 뒤 내용 참고하면 쉽게 파악할 수 있다.


sed '/찾을내용/c\바뀔내용' 파일

 sed 

  '/찾을내용

 /c\

  바뀔내용'

 파일

 파일에서 찾은 내용을 변경

 sed

  '/찾을내용

 /d'

 

 파일

 파일에서 찾은 내용을 제거


변경의 경우, 기존에 존재하지 않으면 변경을 할 수가 없는 문제가 있다.


반드시 적용해야 될 내용이라면 기존 내용을 찾아서 제거 하고 다시 써 넣도록 해야 할 것 같다.







Posted by 해비
2016. 6. 1. 01:17

서버 동작 상태 출력 스크립트

#!/bin/bash

clear

DAEMON_MYSQL=$(   ps -ef | grep mysqld  | grep -v grep | awk '{print $2}')
DAEMON_NGINX=$(   ps -ef | grep nginx   | grep -v grep | awk '{print $2}')
DAEMON_OPENVPN=$( ps -ef | grep openvpn | grep -v grep | awk '{print $2}')
DAEMON_SAMBA=$(   ps -ef | grep smbd    | grep -v grep | awk '{print $2}')
DAEMON_VSFTPD=$(  ps -ef | grep vsftpd  | grep -v grep | awk '{print $2}')

echo "============================================================="
echo " Server daemon status                                        "
echo "============================================================="
echo " daemon  |  status PID                                       "
echo "-------------------------------------------------------------"
echo " mysql   :" $DAEMON_MYSQL
echo " nginx   :" $DAEMON_NGINX
echo " openvpn :" $DAEMON_OPENVPN
echo " samba   :" $DAEMON_SAMBA
echo " vsftp   :" $DAEMON_VSFTPD
echo "============================================================="

ps 명령어로 데몬을 조회하고, 해당 PID를 추출하여 이쁘게(?) 출력하는 스크립트 입니다.




실행 결과






Posted by 해비
2016. 5. 30. 00:52

vsftpd 를 설치하면서 세팅한 내용들을 정리하고자 한다.


listen=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

listen_port=21

pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=12000
pasv_max_port=12100

write_enable=YES
local_umask=022
file_open_mode=0644

local_root=/haebinas/data

chroot_local_user=YES
allow_writeable_chroot=YES


pasv_ 관련 설정

FTP 서버가 동작하는 모드는 크게 Active 모드와 Passive 모드가 있다. 여기서는 Passive 모드로 동작 시킨다.


[Passive, Active 차이첨] - https://www.segger.com/embosip_ftp_client.html



pasv_ 관련 옵션

 pasv_enable 

 Passive 모드로 동작 

 pasv_promiscuous 

 ?

 pasv_min_port

 Passive 모드로 동작 시 데이터 전송에 사용할 포트 범위 최소값

 pasv_max_port

 Passive 모드로 동작 시 데이터 전송에 사용할 포트 범위 최대 값 


기본 21번 포트로 접속 후, 데이터 전송에 12000 ~ 12100 포트 범위를 사용하게 된다.

(방화벽에서 Input 규칙에 해당포트 오픈 해 주어야 한다)



write 관련 설정

 write_enable

 이 옵션이 설정되지 않으면 쓰기가 거부된다

 local_umask

 mask가 022 이므로, 777 - 022 = 755. 즉 기본 권한 설정

 file_open_mode

 업로드 시 적용될 파일의 권한



접근 제한, 기본폴더 관련

 local_root

 FTP 접속 시, / 경로에 지정할 폴더 이다. 

 chroot_local_user

 사용자 홈 폴더 위로 넘어가지 못하게 할 때 사용한다. 

 allow_writable_chroot

 chroot가 적용 된 상태에서 쓰기를 허용에 관한 세팅.





Posted by 해비
2016. 5. 24. 01:03

최근에 libzdb 를 사용하는 프로젝트를 진행하면서 언젠가 써먹을 데가 또 생길 것 같아 정리 한다.


DB는 oracle 지원에 관한 내용을 추가한다.


기본적으로 libzdb 컴파일 하는데 필요한 명령어는 단 3줄이면 끝난다.


[설치]

 # ./configure

 # make

 # make install

- 이대로 하면 일단 컴파일은 된다.



오라클DB를 사용할 경우, ./configure 목록에 ORACLE 이 ENABLE 되어 있어야 한다.


오라클 활성화를 위해 필요한 옵션 및 프로그램.

 # rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
 # rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm


1번째 줄이 instant client 이고, 2번째 줄이 include 항목들이다.

모두 설치 하자.



configure 설정 시 필요한 옵션설정

 --with-oci=no
 --with-oci-include=/usr/include/oracle/12.1/client64
 --with-oci-lib=/usr/lib/oracle/12.1/client64/lib


단 3줄 인데, 간단한 설명을 첨부 하자면...

1번째 줄의 옵션을 yes 로 주면 하단의 2줄은 무효가 되는 듯 하다. 즉 ORACLE_HOME 의 환경변수를 따라간다는 뭐 그런 내용인것 같은데...;;


1번째 울의 옵션을 no 로 주면 2, 3번째 줄에서 지정한 include 경로와 lib 경로를 따라 간다.

여기서는 직접 찾아서 정의해 주고 가는 것으로 한다.


저 경로는 직접 찾은 것이므로 사용하는 운영체제의 버젼에 따라 다를 수도 있다.

RedHat Linux에 rpm 설치 한 결과 이다.


컴파일 결과물 설치 경로는 --prefix=/home/user/compile 과 같이 설정 에 추가하면 된다.


전부 종합하면 아래와 같이 된다.

 # rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
 # rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm


 # ./configure --with-oci=no --with-oci-include=/usr/include/oracle/12.1/client64 --with-oci-lib=/usr/lib/oracle/12.1/client64/lib --prefix=/home/user/compile


 # make


 # make install

이렇게 정상적으로 모두 완료 되면 컴파일된 결과물이 /home/user/compile 로 들어가게 된다.




[참고]

README
./configure --help

http://docs.oracle.com/cd/B19306_01/server.102/b14357/ape.htm#CHDJCDFA




Posted by 해비