2018년 12월 18일 화요일

PostgreSQL RHEL(RedHat) 7.4 설치

RHEL(RedHat) 은 유료 프로그램이다.
CD 이미지 (iso 파일) 은 무료로 배포하고, 기술지원을 돈을 받는 형태이다.
또한 yum 을 돈을 받고 사용할 수 있도록 하고 있다.
그걸 sub scription 이라고 부르고 있다.

결국,,,, 뭐, 설치 및 사용은 자유롭게 해도 되지만,
yum 은 돈 내고 해라 라는 의미라서,
yum 을 사용할라면, 아래 처럼 명령어를 실행해 줘야 하는거 같다.

# subscription-manager register --username <username> --password <password> --auto-attach

만약 그게 싫다면 rpm 을 알아서 설치해 줘야 하는 삽질을 해야 한다.
dependencies 때문에 이게 좀 골치가 아프다.
aaa.RPM 설치하려고 하면 bbb.RPM 이 필요하다고 하고.....
bbb.RPM 설치하려고 하면 ccc.RPM 이 필요하다고 하고.....

일단 내 목적은 RHEL(RedHat) 에 PostgreSQL 이 정상적으로 돌아가도록 하는것이므로,
거기에만 촛점을 맞춰서 시도를 해봤다.

redhat 은 아래 경로에서 download 가능하다.
https://access.redhat.com/downloads/content/

부팅을 해보면, 아래처럼 설치화면이 나온다.


"설치소스"는 건드리지 말고,
"설치대상"은 입맛대로 하면 되고,
"네트워크 및 호스트명"은 입맛대로 하면 되고,
"최소설치"를 클릭한다.


"선택한 환경의 기능"에서 "디버깅도구, 호환성 라이브러리, 개발용 도구, 보안 도구"를 선택한다. "보안 도구"는 안해도 상관없다.


"설치 시작"을 클릭해서, 설치를 진행하고 마무리 한다.

RHEL(RedHat) 설치가 완료되었으면, PostgreSQL 을 설치해 보자.


https://www.postgresql.org
접속해서, Download 를 클릭하자


직접 컴파일해서 설치를 할 것이므로, Source 를 클릭하자.


2018.12 기준 최신 버전이 v11.1 이므로 이거를 클릭하자.


tar.gz 존재하는지 확인하자.


마우스 오른쪽 버튼을 눌러서, "링크 주소 복사" 를 클릭하자.

RHEL(RedHat) 에 접속해서, 다운로드 하자.
% curl -O https://ftp.postgresql.org/pub/source/v11.1/postgresql-11.1.tar.gz

압축을 해제하자.
% tar vxzf postgresql-11.1.tar.gz

설정을 하자.
% cd postgresql-11.1
% ./configure --prefix=/tmp/postgresql

아래와 같은 에러가 발생한다.
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

환경설정, 컴파일에 필요한 library 가 없어서 발생하는 에러다.
yum 을 통해서 library 를 설치해 주면 편할텐데 앞서 말한것처럼,
무료 RHEL(RedHat) 는 yum 을 사용할 수 없다.
그러므로 수동으로 RPM 을 설치해 줘야 한다.


RHEL(RedHat) iso 파일을 넣어준다.

read-only 형태로 마운트 한다.
% mount -r /dev/cdrom /mnt
% cd /mnt/Packages
% ls

RPM 파일들이 주루룩 나오는걸 볼 수 있다.
이것들을 수동으로 설치해 줘야 한다.

dependencies 에 걸리지 않도록 아래 순서대로 설치를 진행한다.

rpm -Uvi wget-1.14-15.el7.x86_64.rpm
rpm -Uvi ncurses-devel-5.9-13.20130511.el7.x86_64.rpm
rpm -Uvi readline-devel-6.2-10.el7.x86_64.rpm
rpm -Uvi zlib-devel-1.2.7-17.el7.x86_64.rpm
rpm -Uvi keyutils-libs-devel-1.5.8-3.el7.x86_64.rpm
rpm -Uvi libcom_err-devel-1.42.9-10.el7.x86_64.rpm
rpm -Uvi libkadm5-1.15.1-8.el7.x86_64.rpm
rpm -Uvi libverto-devel-0.2.5-4.el7.x86_64.rpm
rpm -Uvi libsepol-devel-2.5-6.el7.x86_64.rpm
rpm -Uvi pcre-devel-8.32-17.el7.x86_64.rpm
rpm -Uvi libselinux-devel-2.5-11.el7.x86_64.rpm
rpm -Uvi krb5-devel-1.15.1-8.el7.x86_64.rpm
rpm -Uvi openssl-devel-1.0.2k-8.el7.x86_64.rpm
rpm -Uvi xz-devel-5.2.2-1.el7.x86_64.rpm
rpm -Uvi libxml2-devel-2.9.1-6.el7_2.3.x86_64.rpm
rpm -Uvi pam-devel-1.1.8-18.el7.x86_64.rpm
rpm -Uvi python-devel-2.7.5-58.el7.x86_64.rpm
rpm -Uvi cyrus-sasl-2.1.26-21.el7.x86_64.rpm
rpm -Uvi cyrus-sasl-devel-2.1.26-21.el7.x86_64.rpm
rpm -Uvi openldap-devel-2.4.44-5.el7.x86_64.rpm
rpm -Uvi tcl-8.5.13-8.el7.x86_64.rpm
rpm -Uvi tcl-devel-8.5.13-8.el7.x86_64.rpm
rpm -Uvi libgpg-error-devel-1.12-3.el7.x86_64.rpm
rpm -Uvi libgcrypt-devel-1.5.3-14.el7.x86_64.rpm
rpm -Uvi libxslt-devel-1.1.28-5.el7.x86_64.rpm
rpm -Uvi systemd-devel-219-42.el7.x86_64.rpm
rpm -Uvi libuuid-devel-2.23.2-43.el7.x86_64.rpm

설치 완료 후, 다시 시도해 보자.
% cd postgresql-11.1
% ./configure --prefix=/tmp/postgresql

잘 되었으면 컴파일을 하자.
% make

잘 되었으면 설치를 하자.
% make install

Database 초기화가 잘 되는지 확인해 보자.
% initdb -D DATA

DB 실행이 잘 되는지 확인해 보자.
% pg_ctl -D DATA start

2018년 10월 26일 금요일

Thunderbird 기부

현대사회의 사람들은 email을 많이 사용한다.
나도 현대사회의 사람이므로 email을 많이 사용하고 있다.

개인적으로 사용하기도 하고,
회사에서 사용하기도 하고.

email을 사용할때 일반적으로 email client 프로그램을 사용한다.
세상에는 수 많은 email client 프로그램이 존재한다.

Microsoft Outlook
Mail for Windows 10
eM Client
Mailbird
Inky
TouchMail
Thunderbird
Opera Mail
........ (더 많이 있다)
등등 너무 많다.

그 중에서 아무래도 사람들에게 가장 널리 알려진건 Outlook일 것이다.
아무래도 Windows, Office 가 널이 보급되어 있으니 당연한 현상일 것이다.

개인적으로 Thunderbird를 많이 사용했었다.
공짜이기도 하고,
왠지...... "공돌이는 이런거 써야 해~" 라는 마음가짐 때문에?
암튼.

저번 Ubuntu 기부 이후 문득,
또 다시 너무 신세만 지고 살아온게 아닌가 라는 생각이 들었다.
http://kimchki.blogspot.com/2017/10/ubuntu.html

Thunderbird는 나에게 많은 것을 아낌없이 주었는데,
나는 해준것도 없이 받기만 한거 같았다.
그래서, 기부를 하기로 했다.

기부 하는 방법은 간단하다.
"https://www.thunderbird.net/ko - 기부하기" 로 이동한다.


기부하고 싶은 금액을 선택하거나,
직접 금액을 입력할 수 있다.


\11,160 기부하기로 했다.


대략 $9.78 정도 되는거 같다.


기부자의 정보를 입력한다.


뭔가 작업이 빙글빙글 되더니, 고맙다고 ㅋㅋ


email에서도 고맙다고 ㅋㅋ


카드 명세서에도 나온다.
환율이랑 수수료에 따라 금액은 다를 수 있다.
업종이.......자선단체 ???


기부를 하니, 뿌듯하다.


뭔가 감사의 표시를 한거 같아서 좋다.
많은 사람들을 위해, Thunderbird가 계속 잘 발전했으면 좋겠다.

2018년 9월 28일 금요일

PostgreSQL 에서 pg_hba.conf 의 ADDRESS 설정

저번 포스트에서 postgresql.conf 의 listen_addresses 에 대해 기록을 했다.
listen_addresses 는 PostgreSQL 서버 입장에서 listen 을 할때에 대한 내용이었다.

pg_hba.conf 는 다른 컴퓨터(클라이언트)에 대한 control 내용이다.

편집기를 통해 pg_hba.conf 파일을 열어보면, 아래와 같은 형태로 되어 있다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

이번에는 ADDRESS 항목에 대해서만 기록해 보자.

pg_hba.conf 의 초기 내용은 아래와 같다.

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

"127.0.0.1/32" 라고 되어 있다.
클라이언트 IP 주소가 127.0.0.1 경우만 접속을 허용하겠다는 의미다.
클라이언트 IP 주소가 127.0.0.1 이라는것은,
결국 localhost 접속만 허용하겠다는 의미다.

% psql -h localhost
이 형태의 접속만 허용하겠다는 의미다.

다른 컴퓨터(클라이언트)의 접속을 허용하기 위해서는,
해당 컴퓨터의 IP 주소를 입력하면 된다.

예를 들어,
10.0.2.20 주소를 가지고 있는 클라이언트의 접속을 허용하기 위해서는,
"10.0.2.20/32" 라고 입력하면 된다.
이렇게 하면 10.0.2.20 주소를 가지고 있는 컴퓨터(클라이언트)만 접속할 수 있다.

host    all             all             10.0.2.20/32            trust

만약에,
10.0.2.30 주소를 가지고 있는 클라이언트도 접속을 허용하기 위해서는,
"10.0.2.30/32" 라고 추가적으로 입력하면 된다.
이렇게 하면 10.0.2.30 주소를 가지고 있는 컴퓨터(클라이언트)도 접속할 수 있다.

host    all             all             10.0.2.20/32            trust
host    all             all             10.0.2.30/32            trust

특정 IP 주소 말고, IP 주소 대역대를 입력할 수 있다.
"/32" 를 다른 값으로 넣어주면 된다.
"/32" "/24" 는 서브넷마스크를 의미한다.

host    all             all             10.0.2.0/24            trust

이렇게 하면 IP 주소가 10.0.2.x 대역의 주소를 가지고 있으면 접속이 가능하다.

만약 IP 주소 상관없이 모든 접속을 허용하고 싶게 하고 싶다면,
"/0" 을 입력하면 된다.

host    all             all             10.0.2.0/0            trust

지금까지는 TCP/IP socket 접속에 대한 내용이다.
그렇다면, local 은 무엇인가?

local   all             all                                     trust

local 은 Unix-domain socket(UDS) 을 의미한다.
그러므로 IP 주소를 입력하지 않는다.

아래 내용은 구글링을 통해서 얻은 정보이다.
--------------------------------------------------------------------------------------------
유닉스 도메인 소켓(Unix Domain Socket)은 프로세스간의 데이터 교환을 위한 기술 중 하나로, 파일 시스템을 통해 소켓통신 방식으로 내부 프로세스간의 통신을 하는 구조로 이뤄져있다. 약칭으로 UDS라고 표기하며, 간단하게 ‘유닉스 소켓(Unix socket)‘이라고 부르기도 한다. IPC(Inter Process Communication)의 일부로서 분류할 때는 ‘IPC소켓’이라고 부르기도 한다. POSIX의 표준 운영체제 구성요소 중 하나로 포함되어있다.

UDS의 가장 큰 특징은 소켓통신 방식을 써서 만든 프로세스에 사용이 가능하기 때문에 소켓프로그래밍 구조를 유지한 채로 로컬 프로세스와의 효율적 통신을 가능케 한다는 점이다. TCP, 혹은 UDP형식 데이터를 파일 시스템을 이용해서 통신하는 구조로, 파일 시스템을 통해 파일 주소 및 inode로 각 프로세스에서 참조되며, 통신은 운영체제의 커널상에서 이뤄지기 때문에 inet소켓을 이용해서 네트워크단을 이용해 전달하는 것보다 빠르며 부하가 적게 걸린다.(기본적으로 소켓통신 방식이 TCP/IP의 4계층을 거쳐 전달되기 때문에 지연이 발생하는데 반해서 유닉스 소켓은 어플리케이션 계층에서 TCP계층으로 내려가 바로 데이터를 전달하고, 수신측도 TCP계층에서 수신해 어플리케이션 계층으로 올라간다)
--------------------------------------------------------------------------------------------

Unix-domain socket(UDS)의 특징은 소켓프로그래밍 구조를 유지한 채로 프로세스간 통신이 가능하다.
장점은 모듈화를 잘 하면 소켓 코드를 재사용할 수 있다는 것과, 개발 공수가 적게 들어간다는 것이다.
일반 소켓프로그래밍과 차이점은 TCP 계층 2개만(Application, Transport) 사용한다는 것이다.

% psql
아무런 옵션없이 접속하는 경우, Unix-domain socket 으로 접속한다.

pg_hba.conf 를 사용해서 적절하게 접근 권한을 설정해서 보안을 설정하면 된다.
수정후에는 반드시 restart 혹은 reload 를 해야 한다.

% pg_ctl reload
% pg_ctl restart




출처

2018년 9월 27일 목요일

PostgreSQL 에서 postgresql.conf 의 listen_addresses 설정

PostgreSQL 은 DBMS 이다.
당연히 socket 을 통한 접속 기능을 제공하고 있다.

처음 설치를 하면, 보안을 위해서 socket 외부 접속이 막혀있다.
이것을 열어주기 위해서는 postgresql.conf 파일을 수정해야 한다.

편집기를 통해서 postgresql.conf 파일을 열어보면,
listen_addresses 항목이 있는데 이것을 수정하면 된다.

listen_addresses 앞에 주석표시를 삭제한다.
(당연한 것이겠지만, 혹시나 하고)

listen_addresses = 'localhost' # what IP address(es) to listen on;
                                       # comma-separated list of addresses;
                                       # defaults to 'localhost'; use '*' for all
                                       # (change requires restart)

기본값이 localhost 로 되어 있다.
localhost 와 127.0.0.1 은 같은 의미다.

뭐, 예를 들어, 실제 PostgreSQL 소스 코드에
listen("localhost");
이런식으로 들어간다는 말이다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      30702/postgres

이 말은 PostgreSQL 이 네트워크를 listen 하고 있는데,
127.0.0.1 으로 listen 하고 있겠다는 의미다.
로컬 접속만 허용하겠다는 의미다.

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h localhost" 이런식으로 접속 해야 된다는 것이다.
혹은 "psql -h 127.0.0.1"

결국, 다른 컴퓨터가 아닌, 자기 자신의 접속만 허용한다는걸 의미한다.

만약 다른 컴퓨터에서 접속할 수 있게 하려면 어떻게 해야 할까?

listen_addresses = '자신의 IP 주소'
이런식으로 하면 된다.

만약 자신의 IP 주소가 10.0.2.12 일 경우,
listen_addresses = '10.0.2.12'
이런식으로 하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 이런식으로 접속 하면 된다.

만약 자신의 IP 주소가 2개일 경우,
listen_addresses = '10.0.2.12,10.0.2.14'
이런식으로 콤마(,)를 사용해서 추가하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres
tcp        0      0 10.0.2.14:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 혹은
"psql -h 10.0.2.14" 이런식으로 접속 하면 된다.

IP 주소를 신경쓰고 싶지 않다면,
listen_addresses = '*' 혹은
listen_addresses = '0.0.0.0' 이런식으로 하면 된다.

IP 주소 상관없이 listen 을 하겠다는 의미다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 0.0.0.0:5432          0.0.0.0:*               LISTEN      30702/postgres

적용 후, PostgreSQL restart 를 반드시 해야 한다.
% pg_ctl restart


※ 만약, PostgreSQL 을 Active-Standby 형식으로 구성할거라면,
반드시 listen_addresses = '*' 으로 설정해야 한다.
왜냐하면 Active 와 Standby 의 IP 주소가 서로 다르기 때문이다.
물론 각각 별도로 postgresql.conf 를 수정하면 되지만,
일반적으로 처음 동기화를 수행할 때, postgresql.conf 도 동기화 되기 때문이다.



출처
http://justckh.blogspot.com/2013/10/postgresql-ip.html

Linux Timezone(UTC) 시간 변경 (tzdata)

서버 시간이, 실제 자신이 거주하고 있는 곳 시간과 다를 수 있다.

시간을 맞추는 방법은 아래와 같다.

% sudo dpkg-reconfigure tzdata

자신에게 맞는 시간을 선택한다.



2018년 9월 21일 금요일

CentOS 7 IP 주소 설정

CentOS 7 IP 주소 설정

네트워크 설정이 기록되어 있는 파일을 수정하면 된다.

% vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

ifcfg-enp3s0 파일 이름은 서버 상황에 따라 다를 수 있다.

% ip a
명령어를 통해서 네트워크 카드 이름을 확인하자.

% ls -l /etc/sysconfig/network-scripts
해당하는 파일이 존재하는지 확인하자.

붉은색으로 표시된 내용만 수정 혹은 추가하면 된다.

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp3s0
UUID=227c9d90-2be8-4427-a098-3fd3b22e4271
DEVICE=enp3s0
ONBOOT=yes
IPADDR=172.21.70.116
NETMASK=255.255.255.0
GATEWAY=172.21.70.1
DNS1=172.21.17.2
DNS2=168.126.63.1

서버를 재부팅 하거나, 네트워크를 다시 시작하면 된다.
% service network restart



출처
http://devhoma.tistory.com/112

Linux Timezone(UTC) 시간 변경

서버 시간이, 실제 자신이 거주하고 있는 곳 시간과 다를 수 있다.

시간을 맞추는 방법은 여러가지 방법이 있다.
아래 3가지 방법 중 원하는 방법을 사용하면 된다.

(1) localtime 을 링크로 연결해 준다.
% ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

% ls -l /usr/share/zoneinfo
디렉토리를 보면, 다양한 나라들이 존재한다.

다른 시간을 기준으로 하고 싶다면
위처럼 해당 시간을 맞추면 된다.

(2) tzselect 명령어 사용


(3) "dpkg-reconfigure tzdata" 명령어 사용






출처
http://jhproject.tistory.com/136
https://xmlangel.blogspot.kr/2016/06/ubuntu-utc.html
http://misoin.tistory.com/68
http://ngee.tistory.com/643
https://cjh5414.github.io/ubuntu-timezone

2018년 9월 20일 목요일

Ubuntu 18.04 IP 설정

Ubuntu 18.04 IP 설정 설정 방법

Ubuntu 18.04 는 ip address 설정 방법이, Ubuntu 16.04 와 다르다.
정확히는 Ubuntu 17.10 부터 ip address 설정 방법이 달라졌다.

기존 방법에서 사용하던 파일을 open 해보면,
netplan 파일로 변경되었다고 나온다.
% cat /etc/networks/interfaces

netplan 으로 이동하자
% cd /etc/netplan

% ls
50-cloud-init.yaml

1개의 yaml 파일이 존재한다.
상황에 따라 이름이 다를 수도 있고, 갯수가 다를 수도 있는거 같다.
아무튼 vi 같은 editor 로 열어보자.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
            optional: true
    version: 2

아래처럼 정보를 입력하면 된다.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: [192.168.0.100/24]
            gateway4: 192.168.0.1
            nameservers:
                    addresses: [168.126.63.1,168.126.63.2]
            dhcp4: false
            optional: true
    version: 2



출처
http://blog.hazard.kr/archives/890
https://ujuc.github.io/2017/11/18/ubuntu_17.10e-seo-bu-teo_gibon-eu-ro_sa-yong-doe-neun_netplan
http://blog.hkwon.me/ubuntu-18-04-netplan
https://websiteforstudents.com/configuring-static-ips-ubuntu-17-10-servers
https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta

2018년 9월 10일 월요일

Ubuntu 16.04 IP 주소 설정

Ubuntu 16.04 IP 주소 설정 방법

네트워크 설정이 기록되어 있는 파일을 수정하면 된다.
% sudo vi /etc/network/interfaces

#iface enp0s3 inet dhcp
#기존 DHCP 는 안쓰기 때문에 주석처리 해놓는다.

iface enp0s3 inet static
#고정IP 방식을 사용하기 위해선 static 을 입력한다.

address 192.168.0.100
#내부 IP 주소나 외부 IP주소를 address 항목에 입력한다.

netmask 255.255.255.0
#서브넷 마스크를 입력한다.

gateway 192.168.0.1
#Gateway IP 를 입력한다. 공유기를 사용하는 경우 공유기 내부 환경설정을 위해 들어가는 IP 주소가 Gateway 이다.

dns-nameservers 168.126.63.1 168.126.63.2
#dns 서버를 입력한다. 스페이스바를 통해 보조DNS 설정이 가능하다. 첫번째가 메인 DNS, 두번째가 서브 DNS 이다.

설정 완료 후 네트워크를 다시 시작하자.
sudo systemctl restart networking.service



출처
https://blog.supersu.kr/computer/linux/ubuntu/how-to-ubuntu-16-04-static-ip-settings
https://www.manualfactory.net/10108

2018년 9월 3일 월요일

Nginx autoindex timezone 한국 시간 설정

Nginx 는 요즘 한창 인기를 끌고 있는 웹 서버 이다.
Apache 보다 좋다고 인터넷에서 시끌벅적 하길래, 사용해 봤다.

근데 잘 모르겠다.
뭐 그렇게 많은 사람들이 동시에 접속할 일이 없으니 당연하지만.....

암튼 만족하면서 잘 사용중이다.

근데 문제가 생겼다.
autoindex 기능을 사용해서,
현재 디렉토리에 있는 파일들을 나열하도록 해서 사용중인데 날짜가 안 맞는다.

이리저래 해봤는데, 한국 시간보다 9시간 늦게 나온다.
UTC ? 뭐? 거시기? 태평양 가운데 시간 그거..... 암튼 그거 시간으로 나온다.

그래서 구글링을 해본 결과, 나처럼 먼저 삽질한 사람이 해결방법을 적어놨다.
/etc/nginx/sites-available/default 에 아래 내용을 넣으면 된다.

autoindex_localtime on;



출처
https://gist.github.com/lixingcong/e6987f83c9e7b226f976876f5c68f928

2018년 8월 27일 월요일

Ubuntu 배포판 다운로드 download 주소

내가 개인적으로 제일 선호하는 OS 는 Ubuntu 이다.
사용하기 편하고, 참고할만한 자료도 많기 때문이다.

사용하다 보면, 종종 옛날 버전이 필요할 때도 있는데,
그 때마다 검색해서 찾기 불편하다.

그래서 주소를 기록해 두고자 한다.

http://releases.ubuntu.com/12.04
http://releases.ubuntu.com/12.10

http://releases.ubuntu.com/13.04
http://releases.ubuntu.com/13.10

http://releases.ubuntu.com/14.04
http://releases.ubuntu.com/14.10

http://releases.ubuntu.com/15.04
http://releases.ubuntu.com/15.10

http://releases.ubuntu.com/16.04
http://releases.ubuntu.com/16.10

http://releases.ubuntu.com/17.04
http://releases.ubuntu.com/17.10

http://releases.ubuntu.com/18.04
http://releases.ubuntu.com/18.10

http://releases.ubuntu.com/19.04

각 버전 주소에 들어가면 iso 파일을 다운로드 할 수 있다.

서버 버전을 다운로드 하려면 "server-amd64.iso" 이렇게 생긴걸 다운로드 하면 된다.
데탑 버전을 다운로드 하려면 "desktop-amd64.iso" 이렇게 생긴걸 다운로드 하면 된다.

참고로,
"server-i386.iso" "desktop-i386.iso" 이렇게 생긴거는 32비트 버전이다.
"server-armhf" 이렇게 생긴거는 임베디드에 사용되는 ARM CPU 이다. (라즈베리파이 같은 곳에서 사용)

2018년 8월 20일 월요일

Vagrant 사용 방법 (7)

Vagrant Box 는 자신만 사용할 수도 있지만,
공개 site 에 업로드 해서 여러 사람이 사용할 수 있도록 할 수 있다.

만든 Vagrant Box 파일을 올려서, 여러 사람이 사용할 수 있게 해보자.


https://vagrantcloud.com
Vagrant Cloud 사이트가 hub 역할을 하고 있다.
회원 가입을 하자.


로그인을 하면, 다른 사람들이 만든 Vagrant Box 를 다운로드 할 수 있고,
내가 만든 Vagrant Box 를 업로드 할 수 있다.
"Create a new Vagrant Box" 를 클릭하자.


저번에 만든 CentOS 를 업로드 할 것이므로, 이름은 "CentOS7.2" 라고 하자.

Box 를 "Private" 로 설정할 수도 있다.
하지만 이 경우에는 유료 서비스에 가입을 해야 사용할 수 있다.
그냥 공개로 할 것이므로 체크 하지 말자.


혹시 Private 로 설정해야 한다면, 위 가격표를 참고하면 된다.

"Short description" 에는 간단한 설명을 기록하면 된다.


Box 의 버전을 입력한다.
Box 는 처음 만들때는 "RubyGems versioning" 규칙에 따라서 "0.0.1" 이라고 하면 된다.
나중에 Box 를 수정하게 되면, 수정하고 나서 버전을 "0.0.2" 이런식으로 올리면 된다.
하지만 꼭 버전을 저렇게 할 필요는 없다. 사실 자기 맘대로 해도 된다.
그러나 관례상 저렇게 한다는걸 알아두면 된다.

Vagrant.configure("2") do |config|
  config.vm.box = "CHOONGKI_KIM/CentOS7.2"
  config.vm.box_version = "0.0.1"
end

다 만들어 졌다.


Release 를 클릭하자.


Release version 을 클릭하자.


Release 버튼이 안 보이면 성공적으로 등록된 것이다.


Search 버튼을 클릭해서, 등록한 이미지를 검색해 보자.
검색이 잘 될 것이다.

등록된 box 를 사용하기 위해서는 아래와 같이 하면 된다.
그러면 Vagrantfile 이 생성된다.
% vagrant init CHOONGKI_KIM/CentOS7.2

다운로드가 시작되고, 다운로드가 다 끝나면, 최종적으로 가상머신이 실행된다.
% vagrant up



출처
https://vagrantcloud.com

2018년 8월 13일 월요일

Vagrant 사용 방법 (6)

vagrant 는 기본적으로 /vagrant 라는 디렉토리가 생성되고,
그 디렉토리는 host 머신의 Vagrantfile 이 있는 디렉토리와 동기화가 된다.

예를 들어
host 머신의 Vagrantfile 이 /home/kimchki/test 에 있다면,
guest 머신의 /vagrant 은 /home/kimchki/test 와 동기화가 된다.

그 외 별도의 디렉토리를 추가적으로 동기화를 하고 싶은 경우,
Vagrantfile 에 아래와 같이 추가하면 된다.
config.vm.synced_folder "/home/installation", "/installation"

host 머신의 /home/installation 디렉토리는
guest 머신의 /installation 디렉토리와 동기화가 된다.



Vagrant 사용 방법 (5)

지금까지는 인터넷에 공개되어 있는, public 형태의 이미지를 사용했었다.
이번에는 내가 만든, 나에게 맞춘, 나만의 이미지를 사용해 보도록 하자.

테스트를 위해서 인터넷에서 CentOS 7.2 를 다운로드 했다.
글을 쓰고 있는 현재 시점에서는 아래 링크에서 다운로드 했다.
http://vault.centos.org/7.2.1511/isos/x86_64/

virtualbox 에 새로 만들기를 클릭해서, 새로운 가상 머신을 만든다.


다운받은 CentOS 7.2 iso 파일을 통해서 설치를 진행하면 된다.


설치 완료 후, guest 머신에 개발을 위한 설정과 vagrant 를 위한 설정을 해줘야 한다.
guest 머신에 ssh 를 통해 접속하자.

root 로 로그인 후, 작업을 진행하자.
% su -
% yum groupinstall -y 'Development Tools'
% yum install -y kernel-devel perl wget

Ubuntu 경우는
% sudo apt-get install build-essential

virtualbox 에서 제공하는 "게스트 확장" 프로그램을 설치해야 한다.
"장치 - 게스트 확장 CD 이미지 삽입" 을 선택하면 iso 가 삽입된다.

참고로 위치는 이곳에 있다. (몰라도 된다)
/usr/share/virtualbox/VBoxGuestAdditions.iso


당연한 이야기 겠지만, IDE 컨트롤러가 있어야 한다.


iso 를 삽입했으니, 마운트를 해보자.
$ mount -r /dev/cdrom /media

설치를 하자.
$ /media/VBoxLinuxAdditions.run --nox11
그런데 에러가 발생했다.


kernel-devel의 특정 버전을 yum으로 설치하라는 내용이다.

이 포함되어 있다. 이 명령을 따라 kernel-devel을 설치하고 VBoxLinuxAdditions.run를 다시 실행하면 오류없이 설치가 된다.

설치하라고 하니까, 설치를 해야지 뭐.
% yum install kernel-devel-3.10.0-327.el7.x86_64


응? 에러나는데?
귀찮고 번거롭지만, 구글링을 해봐야겠다.
적당히 구글링을 해보니 찾을 수 있었다.

rpm 을 다운로드 하자.
% wget https://buildlogs.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/kernel-devel-3.10.0-327.el7.x86_64.rpm

설치를 하자.
% rpm -Uvi kernel-devel-3.10.0-327.el7.x86_64.rpm

다시 시도를 해보자.
$ /media/VBoxLinuxAdditions.run --nox11


성공적으로 설치가 잘되었다.
만약 상위 버전이 존재한다고 메세지가 뜨면 그 버전을 삭제 후 다시 설치한다.
반드시 저 버전으로 설치를 해야 한다.

지금 진행중인 버전은 Cent OS 7.2 라서 kernel-devel-3.10.0-327 를 요구했다.
OS 버전마다 요구하는 kernel-devl 버전이 다를 수 있다.
아래 표에 정리해 놨으니 적당히 다운받도록 하자.

OSkernel-devel 버전Download 주소
CentOS 7.23.10.0-327https://buildlogs.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/kernel-devel-3.10.0-327.el7.x86_64.rpm
CentOS 7.43.10.0-693https://buildlogs.centos.org/c7.1708.00/kernel/20170822030048/3.10.0-693.el7.x86_64/kernel-devel-3.10.0-693.el7.x86_64.rpm
CentOS 7.53.10.0-862http://mirror.centos.org/centos/7/os/x86_64/Packages/kernel-devel-3.10.0-862.el7.x86_64.rpm
Oracle Linux 7.23.8.13-98.7.1http://yum.oracle.com/repo/OracleLinux/OL7/UEKR3/x86_64/getPackage/kernel-uek-devel-3.8.13-98.7.1.el7uek.x86_64.rpm
Oracle Linux 7.44.1.12-94.3.9http://yum.oracle.com/repo/OracleLinux/OL7/UEKR4/x86_64/getPackage/kernel-uek-devel-4.1.12-94.3.9.el7uek.x86_64.rpm

다음 단계로 넘어가자.

구글링을 통해서 찾은 자료에서는 vboxadd 를 실행하라고 되어 있다.
$ /etc/init.d/vboxadd setup

그런데 아무리 찾아도 /etc 에는 vboxadd 가 없었다.
할 수 없이 / 에서 부터 찾아봤더니, /opt 에 있었다.
/opt/VBoxGuestAdditions-5.2.12/init/vboxadd

아무튼 난 저기에 있으니, 저걸 실행했다.
% /opt/VBoxGuestAdditions-5.2.12/init/vboxadd setup


성공적으로 설치가 잘 되었다.

일단 그룹을 생성하자.
$ groupadd -g 470 vagrant

"vagrant 라는 group 을 만들고, 그 group id 는 470 으로 지정해라" 라는 의미다.
왜 470 인가?
구굴링 하다 발견한 자료에서 저렇게 했길래 그냥 따라했다.
꼭 470 을 할 필요는 없다.
group id 를 부여하지 않으면, OS 에서 자동으로 부여를 할 것이다.

vagrant 계정을 추가하자.
$ useradd -g vagrant -u 470 vagrant
계정 id 도 470 으로 한다.

암호를 설정한다.
$ passwd vagrant
암호는 계정과 동일하게 vagrant 를 입력한다.
암호가 짧다고 뭐라뭐라 나올 수도 있다.
그냥 무시하고 하자.

vagrant 계정이 sudo 를 사용할 수 있도록 설정하자.
$ visudo

아래 내용을 추가해 넣자. (3줄)
Defaults    env_keep += "SSH_AUTH_SOCK"
Defaults:vagrant !requiretty
%vagrant        ALL=(ALL)       NOPASSWD: ALL

근데 어디에 넣어야 하나......
막상 visudo 를 실행하면, 어디에 해야 하지 라고 막막할 수도 있다.
그냥 가장 편하게 맨 마지막에 넣어도 된다.

근데..... 그냥 거기에 우아하게(graceful) 넣도록 노력했다.
파란색 글씨가 실제로 넣은 부분이다.

이렇게 한줄 넣고.
#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults    always_set_home

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    env_keep += "SSH_AUTH_SOCK"

이렇게 한줄 넣고.
#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults:vagrant !requiretty

이렇게 한줄 넣었다.
## Same thing without a password
# %wheel    ALL=(ALL)   NOPASSWD: ALL
%vagrant    ALL=(ALL)   NOPASSWD: ALL

vagrant 계정으로 변경하자.
% su - vagrant

ssh key 를 추가하자.
$ mkdir .ssh
$ curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub --output .ssh/authorized_keys
$ chmod 0700 .ssh
$ chmod 0600 .ssh/authorized_keys

ssh server 설정을 수정하자.
$ sudo vi /etc/ssh/sshd_config

만약 아래 내용이 주석으로 처리되어 있다면, 주석처리를 제거하자.
(# 을 지우라는 소리)
Port 22
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
그런데, 실제로 테스트를 해보니, 주석을 제거하지 않아도 잘 작동한다.
주석처리되어 있으면 기본값으로 동작할텐데,
기본값이 위처럼 되어 있는거 같다.

그리고 부가적으로 패키지를 설치하자.

CentOS
% yum install vi vim gcc g++ emacs wget make readline-devel zlib-devel openssl-devel libxml2-devel

Ubuntu
% sudo apt install vi vim gcc g++ emacs wget make libreadline-dev zlib1g-dev libssl-dev libxml2-dev

설치는 모두 끝났으니, 다음으로 넘어가자.

디스크 사이즈를 줄이자.
% sudo dd if=/dev/zero of=/EMPTY bs=1M
% sudo rm -f /EMPTY

"장치에 남은 공간이 없음" 이라는 에러가 나올 수 있는데 무시하면 된다.
정확히 무슨 역할을 하는지는 잘 모르겠다.
아래 주소를 통해 관련 내용을 참고할 수 있다.
http://stackoverflow.com/a/24956805

서버를 종료하자.
% sudo shutdown -h now

다시 host 머신으로 돌아와서 작업을 마무리 하자.

내가 생성한 CentOS 7.2 가상머신이 리스트에 들어 있는지 확인한다.
% VBoxManage list vms

box 를 생성하자.
% vagrant package --output CentOS7.2.box --base CentOS7.2

Vagrantfile 를 작성하자.
% vagrant init CentOS7.2.box

가상머신을 실행해보자.
% vagrant up


혹시라도 위와 같은 에러가 발생하면, Vagrantfile 에 아래 내용을 넣자.
.ssh 디렉토리와 authorized_keys 파일 권한도 확인해 보자.
config.ssh.insert_key = false

이것도 저것도 안되면, Vagrantfile 에 아래 내용을 넣자.
config.ssh.username = "vagrant"
config.ssh.password = "vagrant"

그리고 가상머신은 start 가 정상적으로 되어진 상태이니까,
vagrant ssh 를 통해서 접속은 가능하니,
가상머신 내부에서 수정하고 싶은것도 수정은 가능하다.


성공적으로 잘 start 되었다.

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

ssh authorize 관련해서 오류가 발생한다면, key 를 확인해 봐야 한다.

guest 머신의 .ssh 디렉토리 권한은 0700 으로 되어 있어야 한다.
guest 머신의 .ssh/authorized_keys 파일 권한은 0600 으로 되어 있어야 한다.

Vagrantfile 파일이 있는 디렉토리에 .vagrant 라는 디렉토리가 존재한다.
.vagrant/machines/default/virtualbox/private_key

그 디렉토리에 private_key 파일이 존재하는데,
그 파일과 guest 머신의 .ssh/authorized_keys 파일이 쌍으로 이루어져 있어야 한다.

또한, private_key 파일은 권한이 0600 이어야 한다.



출처
https://www.vagrantup.com/intro/getting-started/index.html
http://adhoc.tistory.com/entry/Vagrant-Box-만들기
https://blog.asamaru.net/2015/10/14/creating-a-vagrant-base-box
https://www.kjwon15.net/wordpress/articles/computer/linux-computer/540
https://kldp.org/node/155210
http://stackoverflow.com/a/24956805
https://github.com/hashicorp/vagrant/issues/5186
http://www.gisremotesensing.com/2016/06/solution-vagrant-box-authentication.html

2018년 8월 6일 월요일

Vagrant 사용 방법 (4)

apache 를 통해 web server 를 실행시켰지만,
가상머신(guest) 내부에서만 접속이 가능하고,
host 머신에서는 접속이 불가능 했다.

host 머신에서도 guest 머신으로 접속이 가능하도록
네트워크를 연결해 주자.

공유기를 사용해본 경험이 있다면,
포트 포워딩 이라고 생각하면 된다.

/home/kimchki/test/Vagrantfile 파일을 편집하자.

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, guest: 80, host: 4567
end

guest 머신의 80 포트를, host 머신의 4567 포트로 연결해 주겠다는 의미다.

reload 하자.
% vagrant reload

host 머신의 웹 브라우저를 통해서 자신의 4567 포트에 접속해 보자.
http://127.0.0.1:4567


잘 접속이 되면 성공한 것이다.



출처
https://www.vagrantup.com/intro/getting-started/index.html

2018년 7월 30일 월요일

Vagrant 사용 방법 (3)

Provisioning 이란?

프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다. 서버 자원 프로비저닝, OS 프로비저닝, 소프트웨어 프로비저닝, 스토리지 프로비저닝, 계정 프로비저닝 등이 있다. 수동으로 처리하는 '수동 프로비저닝'과 자동화 툴을 이용해 처리하는 '자동 프로비저닝'이 있다.
-- From wiki --

잘 모르겠다.
암튼 사용자에게 뭔가 서비스를 제공하려고 할때,
사용자가 원하는 시스템 환경이 있을 것이다. (혹은 그 사용자 요구에 맞는 시스템 환경)
그 환경을 일일이 수동으로 해주는건 번거로운 일이니,
자동으로 해주는 시스템 이라고 보면 될거 같다.

vagrant 를 통해서 ubuntu 가상머신을 생성하고 실행까지 해봤다.

이 가상머신에 apache 를 설치하고 싶다고 가정하자.
apt-get 을 통해서 설치하면 될 것이다.
수동으로 또각또각 키보드를 사용해서 설치하면 될 것이다.

근데 만약 ubuntu 서버를 100명의 고객에게 할당해 주기 위해,
100대를 생성해야 한다면은?
(1명에게 1개씩 할당해야 하는 상황이라고 가정하자)

100번을 apt-get 을 또각또각 키보드를 쳐야할 것이다.

apache 뿐만 아니라 mysql, php, java 까지 설치해야 한다면,
엄청난 일이 될것이다.

이런걸 자동화 해서 사용자 요구에 맞게 준비하는걸,
provisioning 이라고 생각하면 된다.

vagrant 에는 provisioning 기능이 존재한다.
사용해 보자.

host 머신의 /home/kimchki/test 와
guest 머신의 /vagrant 가 sync 상태인건
저번 포스트를 통해 알고 있다.

/home/kimchki/test/bootstrap.sh 파일을 생성하자.

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
    rm -rf /var/www
    ln -fs /vagrant /var/www
fi

실행 권한을 주자.
% chmod +x /home/kimchki/test/bootstrap.sh

/home/kimchki/test/Vagrantfile 파일을 편집해서,
bootstrap.sh 파일이 실행되도록 하자.

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
end

가상 머신을 다시 restart 하도록 하자.
% vagrant reload --provision


주루룩 apache 가 설치가 되고,
apache home 디렉토리가 /vagrant 로 될 것이다.

$ vagrant ssh
vagrant@precise64:~$ wget -qO- 127.0.0.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
 </head>
 <body>
<h1>Index of /</h1>
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="Vagrantfile">Vagrantfile</a></td><td align="right">20-Jun-2018 05:09  </td><td align="right">3.0K</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/text.gif" alt="[TXT]"></td><td><a href="bootstrap.sh">bootstrap.sh</a></td><td align="right">20-Jun-2018 05:08  </td><td align="right">138 </td><td>&nbsp;</td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
<address>Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>

html 파일이 보이는걸 확인할 수 있다.
(아직까지는 가상머신(guest) 내부에서만 접속이 가능하다)





출처
https://www.vagrantup.com/intro/getting-started/index.html
https://ko.wikipedia.org/wiki/프로비저닝

2018년 7월 27일 금요일

Atlassian Confluence 6.10.1 구매

예전에는 뭔가를 기록할 일이 생기면, 노트에 기록을 하곤 했었다.
아날로그 세대 답게, 샤프로 쓱싹쓱싹......

그 후,
디지털 세대로 급변하는 격동기(激動期) 시대를 맞이하게 되어서.....
디지털 인(人) 답게 기록의 형태를 디지털 형태로 변경하기로 하였다.

스마트폰, 데스크탑, 노트북을 사용하여 이것저것 기록하기 시작했다.
기록하는 형태의 서비스를 제공하는 프로그램 종류는 엄청 많았다.
그 중, 사용해 본 프로그램은 아래 리스트 정도.

에버노트(Ever Note), 원노트(One Note), 킵(Keep), 페이퍼(Dropbox Paper), 솜노트(Som Note), 큅(Quip)......  (더 있을텐데 기억이 잘 안 남)

위 제품들은 일반적으로 개인용으로 사용하기에 잘 되어 있다.
물론 공유 기능을 사용해서 여러 사람들과 협업적으로 사용 가능하다.
실제로 위 제품들을 사용하는 회사, 단체, 집단 등도 있다고 한다.

그렇긴 한데,
위 제품보다 좀 더 회사에서 사용하는 용도로 특화된 제품도 있다.

바로,
Atlassian 회사에서 만든 Confluence 라는 제품이다.

회사에서는 여러 사람들과 서로 문서를 공유하고, 작성할 수 있도록 특화된 제품이라고 해야 하나? (협업 제품)
아님 plugin 이 많아서 기능은 무한대로 추가할 수 있는 제품이라고 해야 하나?
암튼, 좋긴 좋다.

수 많은 회사에서 Confluence 를 사용한다고 알려져 있다.

Confluence 가 많이 알려지면서, 회사 뿐만 아니라 개인적으로 사용하는 사람들도 많이 생겼다.

혼자 사용하기도 하고, 친구들과 같이 정보 공유를 위해 사용하기도 하고, 작은 단체에서 사용하기도 하고, 다양하게 사용되는 같다.

원래는 비쌌었는데, 나처럼 돈도 빽도 없는 사람들을 위해 $10 에 판매한다는 소문을 들었다.
(2016년 9월 부터 인듯)

진짜? 레알? 리얼리?


소규모 단체를 위해 저렴하게 내 놓은거라고 한다.
그리고 $10 는 기부를 한다고 한다. (그러므로 환불은 안된다)
누이좋고 매부좋고.

자세한 내용은 아래 링크를 보면 된다.
https://www.facebook.com/notes/atlassian-korea-아틀라시안-한국/10달러로-시작하는-비지니스-효율화/1307770519246999

이번 기회에 나도 구매해 보기로 했다.
홈페이지에 방문해 보자.
https://ko.atlassian.com


Atlassian 회사에서는 Confluence 뿐만 아니라, 다양한 여러 제품이 많다.
나는 Confluence 제품만 구매할 것이다.


가격을 클릭해 보자.


클라우드와, 셀프호스팅 2가지 형태가 존재한다.
클라우드는 말 그대로, "Atlassian 에서 제공하는 서버를 사용하겠다. ID 만 부여해 달라" 라는 형태이다.
"셀프호스팅은 내 서버에 직접 설치하고 운영하겠다" 라는 형태이다.


셀프 호스팅 방식으로 사용할 것이므로, 셀프호스팅을 클릭하자.
오~ 진짜 $10


추가적으로 Add-on 을 선택하고 싶음 해도 된다.


체크아웃을 클릭하고, 신용카드(체크카드) 번호를 입력하고,
집 주소를 입력하면 결제가 완료된다.


이메일에 invoice 가 도착해 있다.
"Get your product license" 를 클릭하자.


"Confluence (Server) 10 Users: Starter License" 가 새롭게 추가되었다.


"Download Confluence (Server)" 를 클릭하자.


자신의 OS 에 맞는 파일을 다운로드 하면 된다.


혹시나 해서 URL 을 기록한다.

OS Xhttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.tar.gz
Linux 64 Bithttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1-x64.bin
TAR.GZ Archivehttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.tar.gz
Windows 64 Bithttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1-x64.exe
ZIP Archivehttps://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.10.1.zip

다운을 받았으니 실행을 해야 하는데,
실행하기 전에 DATA 디렉토리를 지정해 줘야 한다.

Confluence 가 실행되면서 필요한 파일들을 이것저것 기록해 놔야 하는데,
그 디렉토리를 설정해 줘야 한다.

문서 편집기를 사용해서, 아래 파일을 열어보자.
atlassian-confluence-6.10.1/confluence/WEB-INF/classes/confluence-init.properties
맨 밑에 "confluence.home" 항목의 주석을 제거하고, 디렉토리를 입력하자.

실행은 백그라운드로 해야 하므로, -fg 옵션을 주도록 하자.
% atlassian-confluence-6.10.1/bin/start-confluence.sh -fg

뭔가 주룩룩 뜨면서 마구 실행되는 모습을 확인할 수 있다.

접속해 보자.
http://127.0.0.1:8090

잘 뜬다면 성공적으로 설치, 실행이 된것이다.
안된다면?
열심히 구글링을 해보면 된다.
구매 사용자 이므로, "Production Installation" 을 클릭하면 된다.


참고로,
"라즈베리파이 PI 3" 에 설치 했었는데,
처음에 "oracle-jdk-7" 을 사용해서 설치를 했는데, (jdk-7 사용중이라서)
뭔가 에러를 빼액~~~~ 하고 뿜어냈었다.

Tomcat Issue: Unsupported major.minor version 52.0
뭐 대충 이런 메세지.

해결은 간단했다.
open-jdk-8 로 업그레이드 하니까 잘 되었다.

"Production Installation" 을 클릭하면,
Add-on 이 나오는데, 더 구매한 것이 없으므로 그냥 Next 한다.


드디어! License Key 를 입력하는 단계.
화면에 표기된, Server ID 를 복사한다.


위에 나온 그림들중에 "View License" 가 있었다.
그것을 클릭한다.


처음 설치자 인지, 기존 설치자 인지 선택해야 한다.
기존에 Confluence 를 사용중이라면, 아래 안내 절차대로 수행하면 된다.

처음 사용자 이므로, "not installed yet" 을 선택하자.
그리고 아까 복사한 "Server ID" 를 붙여넣기 한다.


License Key 가 생성되었다.


License Key 를 이곳에 붙여넣기 한다.


Confluence 에서 글을 작성하면, 그 데이터를 어디에 저장할지 물어보는 단계이다.

"My own database" 는 외부 Database 를 사용하는 것이다.
MySQL, PostgreSQL, Oracle, MS-SQL

"Built in" 은 내부적으로 관리하는 방식이다.

외부 Database 를 사용하는 것이 여러모로 좋다.


DB 정보를 입력하자.
"Simple", "By connection string" 두 가지 중에 아무거나 해도 상관없다.



Test connection 이 성공적으로 잘되는지도 확인한다.
Next 를 클릭하면, 초기 Data 설정이 진행된다.
서버 상태에 따라 몇 분 소요될 수 있다.


근데 .... 한 20분 지났나?
에러가 걷잡을 수 없이 마구마구 뜨기 시작했다.

java.lang.Throwable

WARNING [ContainerBackgroundProcessor[StandardEngine[Standalone]]] org.apache.catalina.valves.StuckThreadDetectionValve.notifyStuckThreadDetected Thread [http-nio-8090-exec-6] (id=[43]) has been active for [68,417] milliseconds (since [7/26/18 1:34 PM]) to serve the same request for [.....] and may be stuck (configured threshold for this StuckThreadDetectionValve is [60] seconds). There is/are [1] thread(s) in total that are monitored by this Valve and may be stuck.

헐....
급기야 나중에는, 메모리가 부족하다는 메세지와 함께, 프로그램이 사망했다.

OpenJDK Client VM warning: INFO: os::commit_memory(0x563b4000, 119504896, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 119504896 bytes for committing reserved memory.
# An error report file with more information is saved as:

아~~ 어쩌지?
"라즈베리파이 PI 3" 라서..... 메모리가 1G 뿐인데..... ㅠㅠ

할 수 없이, 아래 URL 을 참고해서 Swap File 을 1G 추가했다.
http://faq.hostway.co.kr/?mid=Linux_ETC&page=7&document_srl=1443

현재 Swap 상태를 확인한다.
% swapon -s, free

임시파일 1G 를 생성한다.
% dd if=/dev/zero of=/home/pi/swapfile bs=1024 count=1000000

Swap File 형태로 만든다.
% mkswap /home/pi/swapfile

Swap File 로 지정한다.
% sudo swapon /home/pi/swapfile

나중에 해지할때는 아래처럼 하면 된다.
% sudo swapoff /home/pi/swapfile
% rm /home/pi/swapfile

그리고 다시 재시도 한다.

"라즈베리파이 PI 3" 라서 그런가?
20분 넘게 걸린거 같았다.

먹통된 줄....
더 좋은 서버에서 돌렸으면 좋았을텐데..... 가난이 죄다. ㅠㅠ

출처 : https://www.hooni.net/xe/?mid=media&document_srl=87518&order_type=asc&sort_index=readed_count&listStyle=viewer&page=30

후하~~
드디어 화면이 떴다.

썰렁한 화면 보다는 뭔가 있는게 나을거 같으니,
Example Site 를 클릭하자.


Jira 없이 Confluence 단독으로 사용할 것이므로,
"Manage users and groups within Confluence" 를 클릭하자.


Username : 사용하고 싶은 ID 를 입력한다.
Name : 화면에 표기될 자신의 Full Name 을 입력한다.


만세!!!!
Start 를 클릭하고, 즐겁게 사용하면 된다.


..... 라고 생각했는데,


완전~~~ 느려서 못 쓸거 같다.
저 뱅글뱅글 도는 그림이 없어지지 않고 있다. 어휴....


$11 가 사라지는 순간이었다.
기부했다 셈 치지 뭐~~ ^^


이상 삽질 끝.

화곡 어쩌라고, 굴사냥

석화찜(굴찜)을 먹으러 여의도로 갔다 그런데 재료가 모두 소진되었다고 마감이라고 한다 응? 다들 굴에 미쳤나? 굴을 찾아 헤매다 보니, 화곡까지 가게 되었다. 화곡은 처음 가본다. 첫인상은 "술집 겁네 많네" 피똥쌀때까지 마실 수 있...