2019년 6월 19일 수요일

Ansible-playbook 패키지, 계정, 그룹 추가 플레이 북

서버 대수가 적으면 크게 문제가 되진 않지만 대수가 많으면 명령어 각각 치는 것도 어려운 뿐더러, 휴먼 에러(오타)가 발생하는 경우가 많다.
그래서 ansible playbook을 통해 한번에 처리 한다.


---
- hosts: localhost
  remote_user: root
  vars_prompt:  # 패키지 설치 할것인지 아닌지 확인
    - name: select
      prompt: "Do you want to install(present) packages? default="
      private: no
      default: present

    - name: group_name # 그룹을 추가할 것인지 아닌지 확인
      prompt: "Do you want to create group? default group_name="
      private: no
      default: mwadm

    - name: user_name # 계정을 생성할지 말지 확인
      prompt: "Do you want to create user? default user_name="
      private: no
      default: mwadm

    - name: user_home # 계정 생성이 후 계정 홈 경로 설정 할지 확인
      prompt: "Do you want to {{ user_name }} home diretory? default user_home= "
      private: no
      default: /home/{{ user_name }}

  tasks:
  - name: install packages = apr-devel, apr-util-devel, openssl-devel, pcre-devel
    yum:
      name:
          - apr-devel
          - apr-util-devel
          - openssl-devel
          - pcre-devel
      state: "{{ select }}"

  - name: Add the group
    group:
      name: "{{ group_name }}"
      state: "{{ select }}"

  - name: Add the user
    user:
      name: "{{ user_name}}"
      password: "{{ user_name}}"
      group: "{{ group_name }}"
      state: "{{ select }}"
      shell: /bin/bash
      createhome: yes
      home: "{{ user_home }}"
      remove: yes

프롬프트에 present를 입력하면 전체가 다 실행되고, absent를 입력하면 rollback 된다. 하지만 완벽하지 않기 때문에 보완이 필요하다.





2019년 6월 18일 화요일

Ansible 시작

Ansible을 시작한 이유는

서버에 설치와 설정을 동일하게 여러번 반복 작업 시 효율 적이다.

Ansible은 ssh 기반으로 동작하기 때문에  에이전트를 설치하거나 특정 포트를 오픈 하지 않아도 된다.

구조를 간단하게 살펴 보면

Control 노드, Managed 노드로 구분이 되며,

Controll 노드에서는 작업을 정의하고 Managed 노드에 ssh를 통해 한번에 수행 한다.

Ansible 설치 방법은 간단하다. rhel 기반으로 설명하면

yum install ansible -y 하면 끝 (설치는 생략)

설치가 완료 되었으면 Controll 노드에서 Managed 노드에 네트웍이 연결 된 것을 확인 하기 위해 핑 테스트를 해본다.

$ ansible node -m ping -i hosts

192.168.23.101 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.23.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}


ansible node[호스트에 등록된 그룹명] -m ping -i hosts [/etc/ansible/hosts 파일이 아닌 다른 파일]

이정도가 되면 이제 playbook를 사용하여 반복작업을 최소화 할 수 있다.

2019년 6월 17일 월요일

English expression 20190617


He is painting a smile picture.

They are riding bikes on the street.

I am in a cafe

Can you start from page ten?

Similar....
scared - afraid

learned from Mariam.

2018년 7월 10일 화요일

tomcat ipv6 옵션 테스트

톰캣 서버에  java.net.preferIPv4Stack  옵션을 적용하면 실제 ipv6로 들어오는 클라이언트가 접근이 가능한지에 대한 테스트를 해보았다

리눅스에서 nic를 확인을 위해서 ifconfig 를 확인 해본다.

        inet6 fe80::22a:4aff:fe16:183  prefixlen 64  scopeid 0x20<link>

위에 보이는 거와 inet6가 보이고
/etc/sysctl.conf 파일에 보면

net.ipv6.conf.all.disable_ipv6 = 0 (disable 0이기때문에 ipv6가 활성화 되었다)
net.ipv6.conf.eth0.disable_ipv6 =  0 (disable 0이기때문에 ipv6가 활성화 되었다)

net.ipv6.conf.all.disable_ipv6 = 1 (disable 0이기때문에 ipv6가 비활성화 되었다)
net.ipv6.conf.eth0.disable_ipv6 =  1 (disable 0이기때문에 ipv6가 비활성화 되었다)

아무 내용 없다면 default 는 0이다

활성화가 되어 있는 상태에서 curl을 통해 톰켓을 호출해본다.

 java.net.preferIPv4Stack  false 경우
$ curl -g -6 "http://[::1]:8180/clientip.jsp"
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>client ip</title>
</head>
<body>
<p>client Addr: 0:0:0:0:0:0:0:1</p><p>client Host: 0:0:0:0:0:0:0:1</p><p>X-Forwarded-For: null</p>


</body>
</html>
호출이 된다.

 java.net.preferIPv4Stack ture 경우

$ curl -g -6 "http://[::1]:8180/clientip.jsp"
curl: (7) Failed connect to ::1:8180; Connection refused


결론적으로  java.net.preferIPv4Stack 을 사용할 경우에는 ipv6는 사용이 불가능하다

설정 예)
        JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"


2018년 6월 19일 화요일

오픈소스 메신저 mattermost 설치

mattermost는 설치형 메신저이고, slack을 대체하는 메신저라는 내용이 나와 있다
설치 방법은 간단하다
일단 서버에 mattermost server, mattermost에서 사용할 DB가 필요하다
DB는 mysql or postgresql 을 사용할 수 있다.

설치 방법은 심플하다
https://mattermost.com/ 에서 Download 로 가면 mattermost server 설치하는게 나와 있는데
mattermost server 종류는 두가지 이다
open source team edition과 enterprise edition 인데
말그대로 오픈소스인지 기업용인지에 대한 선택 할 수 있다.
한마디로 유료, 무료로 나눌수 있다.

그럼 필요한 설치 파일을 다운로드 한 후
서버에 ftp라는가 리눅스면 wget이라는 명령어를 통해서 다운 받을 수 있다.

다운을 받았다면 압축을 푼다.

$ tar xvfz mattermost-team-5.0.0-linux-amd64.tar.gz

압축이 끝났으면 mattermost라는 파일이 생겼을거고 나같은 경우에는
대부분 뒤에 버전을 넣어 둔다.

$ mv mattermost mattermost-5.0

mattermost server 설치는 끝났고 이제 db만 연결하면 된다.

db는 설치 되었다고 가정하고

mattermost-5.0/config/config.json 파일에서
DriverName과 DataSource 를 해당 DB에 맞게 설정한다

자세한 내용은 mattermost document를 확인
https://docs.mattermost.com/install/requirements.html#

설정이 완료 되었으면 기동을 해본다.

$ mattermost-5.0/bin/platform
기동된 상태에서 Ctrl + c를 하게 되면 종료된다. (이부분에 대한 스크립트는 따로 작성)

최초에는 계정을 생성해야하고 이 계정은 admin 계정이 된다.
그 이후 email or username 과 password로 로그인이 가능하다



끝



2018년 4월 25일 수요일

Nexus 설치

대부분 web 개발자라면 maven을 사용 또는 적어도 이름은 들어봤을 것이다.
maven을 사용하지 않는다면 일일이 라이브러리를 다운받아서 사용해야 하는 불편함이 있다. 그래서 사람들은 maven을 많이 쓴다. maven은 pom.xml에 필요한 라이브러리를 지정하고 빌드 해주면 자동으로 저장해준다. 단 외부 통신이 가능해야 한다.

엔터프라이즈에서는 외부통신이 단절되는 경우가 많기 때문에 maven을 사용하고 싶으도 사용하지 못한다. 이럴경우 nexus를 통해서 사설 repository를 구성해서 회사 내부적으로 사용하면 라이브러리를 공통으로 사용하기 때문에 라이브러리에서 꼬이는 일이 줄어 들수 있다.

nexus 설치는 nexus 문서를 참조하면 쉽게 설치가 가능한다.

먼저 System requirements를 보면 Java 버전이 8 이여야 한다.
NXRM (Nexus Repository manager) 설치는 2, 3 버전이 있다.

Download Archives - Repository Manager 2

Download Archives - Repository Manager 3

OSS버전은 무료고, Pro버전은 유료지만 Pro버전을 14일 trial 라이선스를 발급해 준다.
우선 설치 파일을 다운 받은 후 (이글은 3버전 기준)
tar xvfz nexus-*.tar.gz
압축해제 된 디렉토리에서 ./bin/nexus run 을 실행하면 기동할수 있다.
반대로 종료할때는 ./bin/nexus stop을 하면 된다.
기동이 되었으면 /home/nexus/sonatype-work/nexus3/log/nexus.log로그를 통해서 정상 기동 확인이 가능하다.
그런 후 http://IP Adress:8081 로 접속하게 되면 console 접속이 가능하고 default 계정은
admin/admin123 이다.
IP는 서버 아이피로 사용하고 포트는 디폴트 포트(8081)를 사용해도 되고 변경도 가능하다.
콘솔을 통해서 사설 repository를 구성할수 있다.

2018년 4월 19일 목요일

apache 기동,프로세스확인 스크립트

아파치를 컴파일 하고 설치하면 아파치를 기동해야 한다.

리눅스 가정하에
cd $APACHE_HOME/bin 에서
기동시 ./apachectl start
종료시 ./apachectl stop
이런 식으로 기동하고 종료한다.

하지만 프로세스를 ps -ef | grep httpd 이런식으로 확인 한 결과 안들경우 로그를 확인해야한다.
이런 번거로운을 해결하기 위해서 스크립트를 작성했다

#!/bin/sh
SERVER_NAME=`basename /opt/web/web_11`
#echo "$SERVER_NAME Server [NAME=$SERVER_NAME]"

PID=`ps -ef|grep httpd|grep $SERVER_NAME| egrep -v "grep|log"|awk '{print $1,  $2}'`
#echo $SERVER_NAME Server [Process ID=$PID]

LISTEN_PORT=`sudo netstat -an | grep :80 | grep LISTEN|awk '{print $4}'`
#echo "$SERVER_NAME Server [LISTEN_PORT=$LISTEN_PORT]"

if [ -z "$PID" ]; then
          if [ -z "$LISTEN_PORT" ]; then

            sudo sh ./apachectl -k start;
            echo "###########################################"
            echo "$SERVER_NAME Server Started..."
            echo "###########################################"

    else
            echo "###########################################"
            echo "$SERVER_NAME already in use [$LISTEN_PORT] PORT..."
            echo "###########################################"
    fi

else
    echo "######################################################"
    echo "$SERVER_NAME Server is already RUNNING..."
    echo "######################################################"
fi


아파치는 프로세스가 있거나 혹은 포트를 리슨하고 있는 중에는 기동이 되지 않는다
if을 이용해서 체크한 기동하는 스크립트다.

또한 프로세스 확인 하는것도 매번 ps -ef | grep httpd 를 치기 번거로워서 스크립트로 작성했다

SERVER_NAME=`basename /opt/web/web_11`
echo ""
ps -ef|grep httpd|grep $SERVER_NAME|egrep -v "grep"|awk '{print $1,$2,$5,$8,$10,$12}'
echo ""