posted by 귀염둥이채원 2019. 1. 29. 18:15

CentOS에서 ansible source build 방법을 정리한다.


$ yum install epel-release
$ yum install python-pip
$ pip install paramiko PyYAML jinja2 httplib2
$ git clone https://github.com/ansible/ansible.git --recursive
$ cd ./ansible
$ git checkout tags/v2.4.2.0-1
$ source ./hacking/env-setup


# 참고 사이트
https://docs.ansible.com/ansible/2.7/installation_guide/intro_installation.html
https://www.lesstif.com/pages/viewpage.action?pageId=22052879

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
fail module 사용법 정리  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:14

when 조건에 만족하는 경우,

message에 정의된 내용을 출력해준다.


# example

# Example playbook using fail and when together

- fail:

    msg: "The system may not be provisioned according to the CMDB status."

  when: cmdb_status != "to-be-staged" 


- name: fail the play if the previous command did not succeed

  fail:

    msg: "the command failed"

  when: "'FAILED' in command_result.stderr" 


# 참고 사이트

https://docs.ansible.com/ansible/latest/modules/fail_module.html

https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html

https://ansible-manual.readthedocs.io/en/v1.8.4-doc/playbooks_error_handling.html

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:00

URL Encoding 특수문자 코드입니다.


space

%20

(

%28

:

%3A

[

%5B

`

%60

!

%21

)

%29

;

%3B

\

%5C

{

%7B

"

%22

*

%2A

<

%3C

]

%5D

|

%7C

#

%23

+

%2B

=

%3D

^

%5E

}

%7D

$

%24

,

%2C

>

%3E

_

%5F

~

%7E

%

%25

-

%2D

?

%3F

.

.

.

.

&

%26

.

%2E

@

%40

.

.

.

.

'

%27

/

%2F

.

.

.

.

.

.



# 참고 사이트

https://namu.wiki/w/URL%20escape%20code

https://m.blog.naver.com/PostView.nhn?blogId=csgct&logNo=220444910779&proxyReferer=https%3A%2F%2Fwww.google.com%2F

https://secure.n-able.com/webhelp/NC_9-1-0_SO_en/Content/SA_docs/API_Level_Integration/API_Integration_URLEncoding.html

https://www.w3schools.com/tags/ref_urlencode.asp

posted by 귀염둥이채원 2019. 1. 29. 17:53

vi에서 파일을 열고 내용을 붙여넣기 하다보면 indent가 깨지는 현상이 발생하는 경우가 있다.

이러한 경우에 붙여넣기 전에 vi에서 아래 명령을 실행한다.

:set paste


원래대로 복구하려면 

:set nopaste


# 참고 사이트

https://www.lesstif.com/pages/viewpage.action?pageId=6979764

https://happyoutlet.tistory.com/entry/vim-vim%EC%9C%BC%EB%A1%9C-%EB%B6%99%EC%97%AC%EB%84%A3%EA%B8%B0-%ED%96%88%EC%9D%84-%EB%95%8C-%EA%B3%84%EB%8B%A8%ED%98%84%EC%83%81-%EC%97%86%EC%95%A0%EA%B8%B0

'Tool > vim' 카테고리의 다른 글

탭 설정 및 들여쓰기 방법  (0) 2019.01.31
vi, vim ^M 제거하는 방법  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 17:03

윈도우에서 작성한 파일을 리눅스에 옮기게 되면 개행문자가 깨져서 ^M 표시가 된다.

윈도우에서는 CRLF가 개행이지만, 리눅스에서는 LF가 개행이 아니라서 발생하는 현상이다.


[CR,LF란?]

라인피드(LF : Line Feed) => 현재 위치에서 바로 아래로 이동

캐리지리턴(CR: Carriage return) => 커서의 위치를 앞으로 이동


# vi, vim에서 ^M 제거하는 방법

:%s/^M//g



'Tool > vim' 카테고리의 다른 글

탭 설정 및 들여쓰기 방법  (0) 2019.01.31
vi, vim에서 붙여넣기 할때 indent 깨지는 현상 해결  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 24. 15:07

feature branch에서 수정후 아래와 같이 commit --amend를 수행했더니 에러가 발생했다.

$ git commit --amend


# 에러

fatal: You are in the middle of a merge -- cannot amend.

당신은 병합 중간에 있습니다 - 수정할 수 없습니다.


# 해결

.git/MERGE_HEAD 파일을 삭제한다.


# 참고사이트

https://stackoverflow.com/questions/22135465/cant-commit-after-starting-a-merge-in-sourcetree

'Tool > git' 카테고리의 다른 글

파일 및 디렉토리 삭제: git rm --cached  (0) 2019.03.11
Git commit --amend로 마지막 커밋 수정하기  (0) 2019.02.08
git submodule이란?  (0) 2019.02.08
posted by 귀염둥이채원 2019. 1. 22. 19:06

# 그룹 관리 - gpasswd

리눅스 시스템을 사용하는 주체는 두가지로 볼 수 있는데 그것은 사용자이거나 그룹이다. 

특정 그룹에 사용자를 추가하거나 제거하고 특정 그룹에 패스워드를 설정하는 작업은 gpasswd를 이용한다.


# gpasswd 옵션

-a user : 특정 그룹에 새로운 그룹멤버를 추가함.

-d user : 특정 그룹에서 지정한 그룹멤버를 제거함.

-r : 특정 그룹의 패스워드를 제거함

-R : 특정 그룹에 접근을 제한함

-A user, ... : 특정 그룹의 그룹관리자를 설정함

-M user, ... : 특정 그룹의 그룹멤버를 새로 설정함.

위의 옵션들 가운데 -A 와 -M 외의 옵션들은 동시사용이 가능하다.


# 그룹에 사용자를 추가하는 방법 3가지

- vi 명령어로 /etc/group 파일을 편집하여 직접 등록한다.

- gpasswd 명령어의 -M 명령어로 그룹멤버를 직접 설정한다.

- gpasswd 명령어의 -a 옵션으로 새로운 멤버를 추가 등록한다.


# abc 사용자를 project 그룹에 추가

$ gpasswd -a {user} {group}

$ gpasswd -a abc project


# 참고 사이트

https://webdir.tistory.com/134

posted by 귀염둥이채원 2019. 1. 4. 17:56

리눅스 계정(유저) 생성하는 방법입니다.


# 그룹(testgroup) 생성

$ groupadd testgroup


# CentOS에서 testuser 생성

$ useradd -G testgroup testuser

→ CentOS 등 레드햇 계열에서는 아무 옵션을 주지 않아도 홈 디렉토리 생성되고 쉘 환경이 설정됨


# Ubuntu에서 testuser 생성

$ useradd testuser -m -s /bin/bash

→ -m 옵션을 명시해야 홈 디렉토리가 생성됨

→ -s /bin/bash 옵션을 명시해야 쉘 환경이 설정됨


# testuser 비밀번호 생성

$ password testuser


# testuser로 전환

$ su - testuser


# group 확인

$ cat /etc/group


# 전체 user 확인

$ cat /etc/passwd


# 계정이 존재하는지 확인

$ cat /etc/passwd | grep testuser

posted by 귀염둥이채원 2019. 1. 4. 17:20

문제: CentOS base docker 이미지로 컨테이너를 생성하고 접속하면 아래와 같은 Warning이 출력되었다.

bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory

bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory

bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory

bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory

bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory


locale 커멘드를 이용해서 현재 시스템에서 사용중인 로케일을 확인해본다.

[root@7b3a3ede1d74 /]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

locale -a 명령어를 사용해서 현재 시스템에서 사용가능한 로케일을 확인한다.

[root@7b3a3ede1d74 /]# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX

이 정보는 /usr/lib/locale/locale-archive에 있는 정보이다. 위와 비교해보니 en_US.UTF-8 로케일이 없는 것이 문제 상황으로 파악됬다.

로케일을 정의한 파일들은 /usr/share/i18n/locales 폴더 아래에 있고, charmap(캐릭터맵)에 대한 정보는 /usr/share/i18n/charmaps 폴더 아래에 있다. 이 두가지 정보가 localedef의 명령어로 컴파일 되며 컴파일 된 내용은 위에서 보았던 /usr/lib/locale/locale-archive 파일안으로 들어가게 된다.

Centos/Fedora에는 locale-gen가 없다. 대신에 localedef를 사용하면 된다.

아래와 같이 입력해서 필요한 로케일을 컴파일 시킨다.

localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

option 설명

  • v: 일반적으로 무시되는 오류에 대한 추가 경고를 생성
  • c: 경고가 발생하더라도 출력 파일을 작성
  • i: 로케일의 정의 파일
  • f: charmap(캐릭터맵) 정의

중요한 옵션은 if 두 가지이다. 이 두개의 옵션으로 로케일 및 캐릭터 맵을 지정한다. 즉 이 두개가 합쳐져서 en_US.UTF-8이 되는 것이다. 다시 아래와 같이 locale -a를 입력한다.

[root@7b3a3ede1d74 /]# locale -a
C
en_US.utf8
POSIX

en_US.utf8이 추가되었고 에러도 사라졌다.

만약 localedef 명령어가 없다면 아래와 같이 설치한다.

yum reinstall glibc-common


참고: https://blog.seotory.com/post/2017/02/docker-container-locate-error-fix

posted by 귀염둥이채원 2018. 12. 28. 11:05

Dockerfile 작성 및 도커 이미지를 빌드하는 방법이다.


Dockerfile에는 대략적으로 아래와 같은 내용이 기술되어 있다.

1. FROM: centos7 이미지를 사용한다.

2. RUN: yum을 이용해서 필요한 패키지를 설치한다.

3. ARG: 변수에 값을 설정하기 위해서 사용한다.

4. RUN: OS 그룹 및 유저를 생성한다. (sudo를 사용할수 있도록 추가)

5. RUN: 디렉토리를 생성 및 권한 추가


# Dockerfile

 FROM centos:centos7

MAINTAINER Programmer


RUN yum -y update;

RUN yum -y install java-1.8.0-openjdk \

    java-1.8.0-openjdk-devel \

    net-tools \

    which \

    initscripts \

    openssh-server \

    sudo \

    tree


ARG GROUP=project

ARG USER=service

ARG USER_PASS=service

RUN groupadd ${GROUP}

RUN useradd -g ${GROUP} ${GROUP}

RUN useradd -G ${GROUP} ${USER}

RUN echo "${USER_PASS}" | passwd ${USER} --stdin

RUN echo "${USER}    ALL=(ALL)       ALL" >> /etc/sudoers


RUN mkdir -p /system

RUN mkdir -p /log


RUN chown ${GROUP}:${GROUP} /system

RUN chown ${GROUP}:${GROUP} /log


RUN chmod 775 /system

RUN chmod 775 /log


ENV JAVA_HOME /usr/java/jdk1.8.0_171-amd64/jre/


# build docker image

$ docker build -t test_image .


# Run container

$ docker run -d \

--name=test_container \

--cap-add=SYS_ADMIN \

-e "container=docker" \

-v /sys/fs/cgroup:/sys/fs/cgroup:ro \

--tmpfs /run \

--tmpfs /run/lock \

test_image \

/sbin/init


# Start bash in container

$ docker exec -it test_container /bin/bash