docker를 이용한 openVPN 설정

컨테이너가 아닌 네이티브 설치는 다음 포스트를 참조
openVPN 서버구축 #1. 개요
openVPN 서버구축 #2. 서버 설치 및 설정

docker-compose.yaml 생성

version: '2'
services:
  openvpn:
    cap_add:
     - NET_ADMIN
    image: kylemanna/openvpn
    container_name: openvpn
    ports:
     - "1194:1194/udp" 
    restart: always
    volumes:
     - ./openvpn-data/conf:/etc/openvpn #.openvpn-data/conf 디렉토리를 생성해야 한다.

설정파일 및 인증서 초기화

docker-compose run --rm openvpn ovpn_genconfig -u udp://VPN.YOUR_HOST.NAME

# 아래는 수행 결과
reating network "vpn_default" with the default driver
Pulling openvpn (kylemanna/openvpn:)...
....중략....
Creating vpn_openvpn_run ... done
Processing PUSH Config: 'block-outside-dns'
Processing Route Config: '192.168.254.0/24'
Processing PUSH Config: 'dhcp-option DNS 8.8.8.8'
Processing PUSH Config: 'dhcp-option DNS 8.8.4.4'
Processing PUSH Config: 'comp-lzo no'
Successfully generated config
Cleaning up before Exit ...
docker-compose run --rm openvpn ovpn_initpki

# 아래는 수행 결과
Creating vpn_openvpn_run ... done

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/pki

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020

Enter New CA Key Passphrase: CA_KEY의_Passphrase
Re-Enter New CA Key Passphrase: CA_KEY의_Passphrase
Generating RSA private key, 2048 bit long modulus (2 primes)
................................+++++
......................................................+++++
e is 65537 (0x010001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:vpn.haedongg.net

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/pki/ca.crt

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................................................+...........................................+..........................................................
...중략...
........................................................+..+....................+................................................................+....+..++*++*++*++*

DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Generating a RSA private key
.............+++++
............................+++++
writing new private key to '/etc/openvpn/pki/easy-rsa-74.akeLei/tmp.JBdIKe'
-----
Using configuration from /etc/openvpn/pki/easy-rsa-74.akeLei/tmp.BfJlok
Enter pass phrase for /etc/openvpn/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'vpn.haedongg.net'
Certificate is to be certified until Jul 30 00:51:51 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Using SSL: openssl OpenSSL 1.1.1g  21 Apr 2020
Using configuration from /etc/openvpn/pki/easy-rsa-149.FPcifA/tmp.cjaMHC
Enter pass phrase for /etc/openvpn/pki/private/ca.key: 위_11_12_라인에서_입력했던_Passphrase

An updated CRL has been created.
CRL file: /etc/openvpn/pki/crl.pem

디렉토리 권한 변경

sudo chown -R $(whoami): ./openvpn-data

서버 프로세스 실행

docker-compose up -d openvpn

클라이언트 사용자 생성 및 인증서 생성

# 비밀번호화 함께 생성
docker-compose run --rm openvpn easyrsa build-client-full 사용자_이름

# 비밀번호 없이 생성
docker-compose run --rm openvpn easyrsa build-client-full 사용자_이름 nopass

# 인증서 파일 출력, 이 파일을 클라이언트 사용자에게 전달하면 된다.
docker-compose run --rm openvpn ovpn_getclient 사용자_이름 > 사용자_이름.ovpn

클라이언트 사용자 제거

# Keep the corresponding crt, key and req files.
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME

# Remove the corresponding crt, key and req files.
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME remove

kubernetes #2. Kubeadm 설치

시작하기에 앞서 MAC 주소 및 product_uuid가 모든 노드에 대해 고유한지 확인한다. 노드들의 MAC 주소나 product_uuid 가 겹칠 경우 설치 프로세스가 실패할 수 있다

haedong@kubesphere-01:~:]$ ifconfig -a
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:06:95:57:be  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.17.172.01  netmask 255.255.255.0  broadcast 172.17.172.255
        inet6 fe80::40e:bff:fe87:7c9c  prefixlen 64  scopeid 0x20<link>
        ether 06:0e:0b:87:7c:9c  txqueuelen 1000  (Ethernet)
        RX packets 380618  bytes 798003033 (761.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 271298  bytes 19716473 (18.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
haedong@kubesphere-01:~:]$  sudo cat /sys/class/dmi/id/product_uuid
A09CA5C4-EB6A-EAC0-4E2B-0B66A2DC0F3A

br_netfilter 모듈을 확인한다.
iptables가 브리지된 트래픽을 볼 수 있어야 한다. 다음 명령을 통해 설정한다.

haedong@kubesphere-01:~:]$ sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
 EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
haedong@kubesphere-01:~:]$ sudo sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /usr/lib/sysctl.d/99-cri-o.conf ...
fs.may_detach_mounts = 1
* Applying /etc/sysctl.d/99-kubernetes-cri.conf ...
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
* Applying /etc/sysctl.d/99-sysctl.conf ...
net.ipv4.conf.all.arp_notify = 1
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...
net.ipv4.conf.all.arp_notify = 1

컨트롤 노드(controller node)는 다음 포트들을 개방해야 한다.

TCP인바운드6443*쿠버네티스 API 서버모두
TCP인바운드2379-2380etcd 서버 클라이언트 APIkube-apiserver, etcd
TCP인바운드10250kubelet API자체, 컨트롤 플레인
TCP인바운드10251kube-scheduler자체
TCP인바운드10252kube-controller-manager자체
*표시가 된 쿠버네티스 API 서버 포트는 사용자가 임의로 정의할 수 있다.

워커 노드(worker nodes)들은 다음 포트들을 개방해야 한다.

프로토콜방향포트 범위목적사용자
TCP인바운드10250kubelet API자체, 컨트롤 플레인
TCP인바운드30000-32767NodePort 서비스†모두

Kublet / Kubectl / Kubeadm 설치

  • kubeadm: 클러스터를 부트스트랩하는 명령이다.
  • kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다.
  • kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다.

yum 등 배포판을 이용한 설치는 아래 명령을 수행하면 된다.

haedong@kubesphere-01:~:]$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# permissive 모드로 SELinux 설정(효과적으로 비활성화)
haedong@kubesphere-01:~:]$ sudo setenforce 0
haedong@kubesphere-01:~:]$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
haedong@kubesphere-01:~:]$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
haedong@kubesphere-01:~:]$ sudo systemctl enable --now kubelet

단 이 포스트를 작성하는 환경은 위 리포지토리 접속이 용이하지 않아 패키지 매니저를 이용하지 않는 방법을 추가로 기술한다.
CNI_VERSION은 여기에서 확인 후 입력하도록 한다.

haedong@kubesphere-01:~:]$ CNI_VERSION="v1.0.0"
haedong@kubesphere-01:~:]$ sudo mkdir -p /opt/cni/bin
haedong@kubesphere-01:~:]$ curl -k -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz

또는 세 번째 명령줄을 
haedong@kubesphere-01:~:]$ curl -k -L "https://github.com/containernetworking/plugins/releases/download/v1.0.0/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz

바이너리 다운로드를 위한 변수 설정
curl 명령줄에 디렉토리를 직접 지정할 수 있다. 1예제의 경우 서비스 등록 시 이 변수를 사용한다. 선언 해주자

haedong@kubesphere-01:~:]$ DOWNLOAD_DIR=/usr/local/bin
haedong@kubesphere-01:~:]$ sudo mkdir -p $DOWNLOAD_DIR

kubeadm / Kubelet 컨테이너 런타임 인터페이스(CRI)에 필요한 crictl 설치
CRICTL_VERSION은 여기에서 확인할 수 있다.
cni와 같이 직접 버전을 명시해도 된다.

haedong@kubesphere-01:~:]$ CRICTL_VERSION="v1.22.0"
haedong@kubesphere-01:~:]$ curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz

kubeadm, kubectl, kubelet 설치
이 글을 작성하는 시점의 kubelet은 v1.22.1인데 controlplane은 v1.21.0이다. 이 경우 다음 절의 kubadm 초기화 시 버전 차이로 인해 에러가 발생한다. RELEASE를 v1.21.1로 고정하여 다운로드 한다.

haedong@kubesphere-01:~:]$ RELEASE="$(curl -k -sSL https://dl.k8s.io/release/stable.txt)"
haedong@kubesphere-01:~:]$ cd $DOWNLOAD_DIR
haedong@kubesphere-01:~:]$ sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/v1.21.1/bin/linux/amd64/{kubeadm,kubelet,kubectl}
haedong@kubesphere-01:~:]$ sudo chmod +x {kubeadm,kubelet,kubectl}

systemd 서비스 추가 및 활성화

haedong@kubesphere-01:~:]$ RELEASE_VERSION="v0.4.0"
haedong@kubesphere-01:~:]$ curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
haedong@kubesphere-01:~:]$ sudo mkdir -p /etc/systemd/system/kubelet.service.d
haedong@kubesphere-01:~:]$ curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
haedong@kubesphere-01:~:]$ systemctl enable --now kubelet

Openstack #1-4 MessageQueue(RabbitMQ)

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어(메시지 지향 미들웨어)로서, AMQP를 구현하였으며 그 이후로 STOMP ,MQTT 등의 프로토콜을 지원하기 위해 플러그인 구조와 함께 확장되고 있다. 메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해 두면, 메시지를 수신하는 소비자(Consumer)가 메시지를 가져와 처리하는 Publish/Subscribe 방식의 메시지 전달 브로커이다.

rabbitmq 서버는 controller 노드에만 설치한다.

패키지 설치

[root@openstack1:~]#yum -y install rabbitmq-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Package rabbitmq-server-3.6.16-1.el7.noarch already installed and latest version
Nothing to do

서비스 등록 및 구동

[root@openstack1:~]#systemctl enable rabbitmq-server.service
[root@openstack1:~]#systemctl start rabbitmq-server.service
 # 또는
[root@openstack1:~]#chkconfig rabbitmq-server on
알림: 'systemctl enable rabbitmq-server.service'에 요청을 전송하고 있습니다.
[root@openstack1:~]#service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service

사용자(계정) 생성

# rabbitmqctl add_user ACCOUNT PASSWORD
[root@openstack1:~]# rabbitmqctl add_user openstack openstack
Creating user "openstack"
 # 기존 사용자를 삭제하려면 add_user 대신 delete_user명령을 사용하면 된다.

권한 부여

[root@openstack1:~]#rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"

CentOS 8 Linux 설치

SuDO : SuperUser DO

CentOS 7 네트워크설정

이전 포스트 CentOS 설치 미디어(ISO) 다운로드 를 참고하여 CentOS 설치 이미지를 다운로드 하고 설치 미디어를 만들어 부팅한다.

정상적으로 설치 미디어로 부팅이 된다면 다음 절차들을 참고하여 설치를 진행한다.
※ 예시는 CentOS8을 기준으로 하였지만 CentOS7도 다르지 않다.

설치가 완료되면 재부팅한다.
root 패스워드를 설정하지 않았으므로 root 계정으로는 로그인할 수 없다.
sudo 명령을 이용해 권한을 바꿔가면서 작업 하는 것을 권장하지만 꼭 root 로 로그인 해야 한다면 아래를 참고하여 password를 변경하면 된다.

login as: haedong
haedong@192.168.103.176's password:
Last login: Wed Dec  9 15:08:34 2020 from 192.168.4.199
[centos7:/home/haedong:]$ sudo -i
[sudo] haedong의 암호:
[centos7:/root:]# passwd root
root 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[centos7:/root:]#

MySQL DB #1 설치

개요

MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템1(RDBMS : Relational DataBase Management System : 관계형 데이터베이스)이다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 오라클이 관리 및 지원하고 있으며, Qt처럼 이중 라이선스가 적용된다. 하나의 옵션은 GPL이며, GPL 이외의 라이선스로 적용시키려는 경우 전통적인 지적재산권 라이선스의 적용을 받는다.

위와 같은 지원 방식은 자유 소프트웨어 재단이 프로젝트에 저작권을 적용하는 방법과 비슷한 JBoss의 모델과 유사하다. 그러나 기반코드가 개인의 소유자에게 저작권이 있고 커뮤니티에 의해 개발되는 아파치 프로젝트와는 다르다.

MySQL AB는 또한 MaxDB라고 불리는 MySQL AB와는 기반코드가 다른 데이터베이스 관리 시스템을 판매했으나 2007년 이래로 MaxDB는 SAP AG가 소유하고 있다.

썬 마이크로시스템즈에 10억 달러에 인수되었으나, 썬 마이크로시스템즈가 오라클에 인수되며 같이 넘어갔다.2 위키백과에서 발췌

MySQL이 썬마이크로시스템즈->오라클로 넘어가면서 라이선스에 대한 이견으로 태어난 MariaDB3MariaDB는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL과 동일한 소스 코드를 기반으로 하며, GPL v2 라이선스를 따른다. 오라클 소유의 현재 불확실한 MySQL의 라이선스 상태에 반발하여 만들어졌으며, 배포자는 몬티 프로그램 AB(Monty Program AB)와 저작권을 공유해야 한다. 이것은 MySQL과 높은 호환성을 유지하기 위함이며, MySQL API와 명령에 정확히 매칭하여, 라이브러리 바이너리와 상응함을 제공하여 교체 가능성을 높이고자 함이다. 마리아 DB에는 새로운 저장 엔진인 아리아(Aria)뿐만 아니라, InnoDB를 교체할 수 있는 XtraDB 저장 엔진을 포함하고 있다. 이것은 트랜잭션과 비트랜잭션 엔진 그리고 미래에 나올 MySQL 판에 대응하고자 함일 것이다.
마리아 DB의 주요 개발자는 MySQL과 몬티 프로그램 AB를 설립한 몬티 와이드니어스(Michael Monty Widenius)이다. 그는 이전에 자신의 회사, MySQL AB를 썬 마이크로시스템즈에 10억 달러에 판매를 한 적이 있으며, 마리아 DB는 그의 둘째 딸인 마리아의 이름을 딴 것이다.
로 MySQL을 대체할 수 있다. 4RedHat Enterprise Linux와 CentOS의 느낌과 비슷한가?

설치

MySQL 8.x 는 보안 관련 기능 들이 많이 추가되었다. 사용자 생성이나 권한부여 등에서 5.x와 큰 차이가 있으니 유념하자.

다운로드
MySQL 홈페이지의 다운로드 페이지에서 Community Edition5GPL:GNU General Public Lisence을 선택하자. MariaDB 패키지는 이 링크에서 다운로드 할 수 있다.
여기에서 버전을 선택해서 다운로드 할 수도 있다.
어느 버전을 선택하건 RPM Bundle 을 선택하자. 6그래야 이런 저런 패키지를 따로 받아야 되는 귀찮음을 줄일 수 있다.

다운로드가 완료됐으면 서버에 파일을 업로드하자.

Install

업로드가 완료 되었으면 압축을 해제한다.

[centos7:/root/mysql:]# tar -xvf mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar
mysql-community-embedded-devel-5.7.31-1.el7.x86_64.rpm
mysql-community-libs-5.7.31-1.el7.x86_64.rpm
mysql-community-client-5.7.31-1.el7.x86_64.rpm
mysql-community-server-5.7.31-1.el7.x86_64.rpm
mysql-community-embedded-5.7.31-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.31-1.el7.x86_64.rpm
mysql-community-common-5.7.31-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm
mysql-community-devel-5.7.31-1.el7.x86_64.rpm
mysql-community-test-5.7.31-1.el7.x86_64.rpm
 # 기존에 설치된 mysql 또는 mariadb가 있을 경우 삭제하는 편이 좋다
[centos7:/root/mysql:]#  yum erase mariadb* mysql*
[centos7:/root/mysql:]# yum install ./*.rpm
Loaded plugins: fastestmirror, langpacks
Examining ./mysql-community-client-5.7.31-1.el7.x86_64.rpm: mysql-community-client-5.7.31-1.el7.x86_64
Marking ./mysql-community-client-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-common-5.7.31-1.el7.x86_64.rpm: mysql-community-common-5.7.31-1.el7.x86_64
Marking ./mysql-community-common-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-devel-5.7.31-1.el7.x86_64.rpm: mysql-community-devel-5.7.31-1.el7.x86_64
Marking ./mysql-community-devel-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-embedded-5.7.31-1.el7.x86_64.rpm: mysql-community-embedded-5.7.31-1.el7.x86_64
Marking ./mysql-community-embedded-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-embedded-compat-5.7.31-1.el7.x86_64.rpm: mysql-community-embedded-compat-5.7.31-1.el7.x86_64
Marking ./mysql-community-embedded-compat-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-embedded-devel-5.7.31-1.el7.x86_64.rpm: mysql-community-embedded-devel-5.7.31-1.el7.x86_64
Marking ./mysql-community-embedded-devel-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-libs-5.7.31-1.el7.x86_64.rpm: mysql-community-libs-5.7.31-1.el7.x86_64
Marking ./mysql-community-libs-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm: mysql-community-libs-compat-5.7.31-1.el7.x86_64
Marking ./mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-server-5.7.31-1.el7.x86_64.rpm: mysql-community-server-5.7.31-1.el7.x86_64
Marking ./mysql-community-server-5.7.31-1.el7.x86_64.rpm to be installed
Examining ./mysql-community-test-5.7.31-1.el7.x86_64.rpm: mysql-community-test-5.7.31-1.el7.x86_64
Marking ./mysql-community-test-5.7.31-1.el7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package mariadb-devel.x86_64 1:5.5.56-2.el7 will be obsoleted
---> Package mariadb-libs.x86_64 1:5.5.56-2.el7 will be obsoleted
---> Package mysql-community-client.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-common.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-devel.x86_64 0:5.7.31-1.el7 will be obsoleting
---> Package mysql-community-embedded.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-embedded-compat.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-embedded-devel.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-libs.x86_64 0:5.7.31-1.el7 will be obsoleting
---> Package mysql-community-libs-compat.x86_64 0:5.7.31-1.el7 will be obsoleting
---> Package mysql-community-server.x86_64 0:5.7.31-1.el7 will be installed
---> Package mysql-community-test.x86_64 0:5.7.31-1.el7 will be installed
--> Processing Dependency: perl(JSON) for package: mysql-community-test-5.7.31-1.el7.x86_64
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: ftp.jaist.ac.jp
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
--> Processing Dependency: perl(JSON) for package: mysql-community-test-5.7.31-1.el7.x86_64
--> Running transaction check
---> Package perl-JSON.noarch 0:2.59-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================================================================================
 Package                                   Arch             Version                  Repository                                                      Size
==========================================================================================================================================================
Installing:
 mysql-community-client                    x86_64           5.7.31-1.el7             /mysql-community-client-5.7.31-1.el7.x86_64                    101 M
 mysql-community-common                    x86_64           5.7.31-1.el7             /mysql-community-common-5.7.31-1.el7.x86_64                    2.8 M
 mysql-community-devel                     x86_64           5.7.31-1.el7             /mysql-community-devel-5.7.31-1.el7.x86_64                      20 M
     replacing  mariadb-devel.x86_64 1:5.5.56-2.el7
 mysql-community-embedded                  x86_64           5.7.31-1.el7             /mysql-community-embedded-5.7.31-1.el7.x86_64                  200 M
 mysql-community-embedded-compat           x86_64           5.7.31-1.el7             /mysql-community-embedded-compat-5.7.31-1.el7.x86_64            88 M
 mysql-community-embedded-devel            x86_64           5.7.31-1.el7             /mysql-community-embedded-devel-5.7.31-1.el7.x86_64            885 M
 mysql-community-libs                      x86_64           5.7.31-1.el7             /mysql-community-libs-5.7.31-1.el7.x86_64                      9.5 M
     replacing  mariadb-libs.x86_64 1:5.5.56-2.el7
 mysql-community-libs-compat               x86_64           5.7.31-1.el7             /mysql-community-libs-compat-5.7.31-1.el7.x86_64               6.0 M
     replacing  mariadb-libs.x86_64 1:5.5.56-2.el7
 mysql-community-server                    x86_64           5.7.31-1.el7             /mysql-community-server-5.7.31-1.el7.x86_64                    762 M
 mysql-community-test                      x86_64           5.7.31-1.el7             /mysql-community-test-5.7.31-1.el7.x86_64                      663 M
Installing for dependencies:
 perl-JSON                                 noarch           2.59-2.el7               base                                                            96 k

Transaction Summary
==========================================================================================================================================================
Install  10 Packages (+1 Dependent package)

Total size: 2.7 G
Total download size: 96 k
Is this ok [y/d/N]: y
Downloading packages:
perl-JSON-2.59-2.el7.noarch.rpm                                                                                                    |  96 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mysql-community-common-5.7.31-1.el7.x86_64                                                                                            1/13
  Installing : mysql-community-libs-5.7.31-1.el7.x86_64                                                                                              2/13
  Installing : mysql-community-devel-5.7.31-1.el7.x86_64                                                                                             3/13
  Installing : mysql-community-client-5.7.31-1.el7.x86_64                                                                                            4/13
  Installing : mysql-community-server-5.7.31-1.el7.x86_64                                                                                            5/13
  Installing : mysql-community-embedded-5.7.31-1.el7.x86_64                                                                                          6/13
  Installing : perl-JSON-2.59-2.el7.noarch                                                                                                           7/13
  Installing : mysql-community-test-5.7.31-1.el7.x86_64                                                                                              8/13
  Installing : mysql-community-embedded-devel-5.7.31-1.el7.x86_64                                                                                    9/13
  Installing : mysql-community-libs-compat-5.7.31-1.el7.x86_64                                                                                      10/13
  Installing : mysql-community-embedded-compat-5.7.31-1.el7.x86_64                                                                                  11/13
  Erasing    : 1:mariadb-devel-5.5.56-2.el7.x86_64                                                                                                  12/13
  Erasing    : 1:mariadb-libs-5.5.56-2.el7.x86_64                                                                                                   13/13
  Verifying  : mysql-community-embedded-5.7.31-1.el7.x86_64                                                                                          1/13
  Verifying  : mysql-community-libs-compat-5.7.31-1.el7.x86_64                                                                                       2/13
  Verifying  : mysql-community-common-5.7.31-1.el7.x86_64                                                                                            3/13
  Verifying  : perl-JSON-2.59-2.el7.noarch                                                                                                           4/13
  Verifying  : mysql-community-embedded-compat-5.7.31-1.el7.x86_64                                                                                   5/13
  Verifying  : mysql-community-devel-5.7.31-1.el7.x86_64                                                                                             6/13
  Verifying  : mysql-community-server-5.7.31-1.el7.x86_64                                                                                            7/13
  Verifying  : mysql-community-test-5.7.31-1.el7.x86_64                                                                                              8/13
  Verifying  : mysql-community-embedded-devel-5.7.31-1.el7.x86_64                                                                                    9/13
  Verifying  : mysql-community-client-5.7.31-1.el7.x86_64                                                                                           10/13
  Verifying  : mysql-community-libs-5.7.31-1.el7.x86_64                                                                                             11/13
  Verifying  : 1:mariadb-devel-5.5.56-2.el7.x86_64                                                                                                  12/13
  Verifying  : 1:mariadb-libs-5.5.56-2.el7.x86_64                                                                                                   13/13

Installed:
  mysql-community-client.x86_64 0:5.7.31-1.el7                                 mysql-community-common.x86_64 0:5.7.31-1.el7
  mysql-community-devel.x86_64 0:5.7.31-1.el7                                  mysql-community-embedded.x86_64 0:5.7.31-1.el7
  mysql-community-embedded-compat.x86_64 0:5.7.31-1.el7                        mysql-community-embedded-devel.x86_64 0:5.7.31-1.el7
  mysql-community-libs.x86_64 0:5.7.31-1.el7                                   mysql-community-libs-compat.x86_64 0:5.7.31-1.el7
  mysql-community-server.x86_64 0:5.7.31-1.el7                                 mysql-community-test.x86_64 0:5.7.31-1.el7

Dependency Installed:
  perl-JSON.noarch 0:2.59-2.el7

Replaced:
  mariadb-devel.x86_64 1:5.5.56-2.el7                                          mariadb-libs.x86_64 1:5.5.56-2.el7

Complete!

설정

[centos7:/root/mysql:]# vi /etc/my.cnf

 # 운영 목적에 맞는 설정을 추가해야 한다.
 # 모든 경로는 mysql계정과 그룹이 소유하고 있어야 한다.

[mysqld]

 # 접속을 받아들일 포트
port = 3306

 # 기본 캐릭터 셋
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

 # MySQL Data가 저장될 경로
datadir=/home/mysql
 # MySQL 소켓 통신을 위한 socket 파일 경로
socket=/var/lib/mysql/mysql.sock

 # Error Log가 저장될 경로
log-error=/var/log/mysqld.log
 # 구동되는 MySQL 프로세스 ID 가 저장될 경로
pid-file=/var/run/mysqld/mysqld.pid


# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

구동

[centos7:/home/mysql:]# service mysqld start
Redirecting to /bin/systemctl start mysqld.service

서비스 확인

[centos7:/home/mysql:]# ps -ef | grep mysql
mysql     24089      1  0 16:28 ?        00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root      26711   3609  0 16:38 pts/0    00:00:00 grep --color=auto mysql
[centos7:/home/mysql:]# netstat -nltp | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      24089/mysqld

패스워드 확인
root 계정에 대한 패스워드가 자동으로 생성된다. log 에서 확인 해야 한다.

[centos7:/home/mysql:]# grep password /var/log/mysqld.log
2020-12-11T07:24:57.633735Z 0 [Note] Shutting down plugin 'mysql_native_password'
2020-12-11T07:24:59.319129Z 1 [Note] A temporary password is generated for root@localhost: qT(2qk9c>y2G
2020-12-11T07:25:09.861956Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2020-12-11T07:25:23.483532Z 0 [Note] Shutting down plugin 'validate_password'
2020-12-11T07:25:24.495481Z 0 [Note] Shutting down plugin 'sha256_password'
2020-12-11T07:25:24.495490Z 0 [Note] Shutting down plugin 'mysql_native_password'

A temporary password is generated for root@localhost: 부분을 확인한다.
예시의 경우는 qT(2qk9c>y2G 가 패스워드이다.

CentOS 설치 미디어(ISO) 다운로드

센트OS(영어: CentOS)는 센트OS 프로젝트에서 레드햇 제휴로 개발한 컴퓨터 운영 체제이다. 업스트림 소스인 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 기업용 컴퓨팅 플랫폼을 제공할 목적으로 만들어진 리눅스계 운영 체제 가운데 하나다. 6.4 버전부터 베타 버전은 파워PC에서 사용가능할 것으로 예상되지만, 공식적으로 물리 주소 확장 기능을 가진 x86과 x86-64 아키텍처를 지원한다.

레드햇 엔터프라이즈 리눅스의 소스 코드를 그대로 가져와 빌드해 내놓으며 이 과정에서 이루어지는 변형은 레드햇의 상표가 잘리고 그 자리에 CentOS의 상표가 붙는(상표권 분쟁을 피하기 위해) 정도뿐이다. 판수 또한 레드햇 엔터프라이즈 리눅스의 판수를 그대로 가져오며(소수점 아래 숫자는 업데이트 차수를 가리킨다) 오늘날에는 레드햇 엔터프라이즈 리눅스의 행보를 가장 잘 따라가는 운영 체제라고 알려져 있다. 사용하는 꾸러미 형식은 RPM이다. 1위키백과에서 발췌

즉, RedHat Enterprise Linux 와 같다.

미러 사이트 등을 통해서 iso 파일과, torrent 파일을 이용해 배포하고 있다.

정보와 설치 미디어는 CentOS 홈페이지에서 다운로드 할 수 있다.

또는

 

 

 

PostgresQL #.2 설정

인터페이스 변경

이전 포스트에서 구동 한 PostgresQL서버는 기본 값 loopbak(127.0.0.1) 인터페이스로 구동 되었다. 외부 연결을 위해서는 서비스 리슨 인터페이스를 변경 해 줘야 한다.
Listen 인터페이스 관련 설정은 postgresql.conf 파일에 정의 돼 있다. 이전 포스트의 내용대로 설치 했을 경우 설정 파일은 /var/lib/pgsql/12/data 아래에 존재한다. 1설치 할 때의 조건에 따라 /etc/postgresql/version 디렉토리 아래에 존재할 수 도 있다.

[postgres@centos7:/home/]$  vi /var/lib/pgsql/12/data/postgresql.conf
 
 # 아래 "listen_addresses"와 "port" 값을 변경해 주면 되는데 주석처리가 돼 있으므로 파일 끝에 새 값을 삽입한다.
      ... 중략...
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
max_connections = 100                   # (change requires restart)
#superuser_reserved_connections = 3     # (change requires restart)
#unix_socket_directories = '/var/run/postgresql, /tmp'  # comma-separated list of directories
                                        # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)
#unix_socket_permissions = 0777         # begin with 0 to use octal notation
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
                                        # (change requires restart)
#bonjour_name = ''                      # defaults to the computer name
                                        # (change requires restart)

# - TCP settings -
# see "man 7 tcp" for details

#tcp_keepalives_idle = 0                # TCP_KEEPIDLE, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_interval = 0            # TCP_KEEPINTVL, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_count = 0               # TCP_KEEPCNT;
                                        # 0 selects the system default
    ....중략...

 # 여기부터 파일 끝에 삽입한다.
listen_addresses = '0.0.0.0'
 # 인터페이스가 여러개일 경우 0.0.0.0을 입력하면 모든 인터페이스가 연결을 받아들이고
 # 특정 IP를 입력하면 지정한 IP로만 연결이 가능한다.
port = 5432                         

인증 방법 설정

 # 패스워드 인증을을 통한 접속 허용을 위한 설정
[postgres@centos7:/home/]$  vi /var/lib/pgsql/12/data/pg_hba.conf
 # 파일의 끝에 아래를 붙여넣기 한다.

host    all             all             0.0.0.0/0               md5
#호스트를 기준으로 모든 계정을 이용해 모든 IP에서 들어오는 연결에 대해 패스워드 인증을 허용하는 설정이다.
 #인터페이스 관련 설정을 변경할 경우 재기동이 필요하다.
[postgres@centos7:/home/]$  /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l /var/lib/pgsql/12/data/pgsql.log stop
[postgres@centos7:/home/]$  /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l /var/lib/pgsql/12/data/pgsql.log start

계정 생성

 # 생성하는 계정에 관리자 권한을 부여할 때
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/createuser psqluser --interactive
createuser dataware --interactive
새 롤을 superuser 권한으로 지정할까요? (y/n) y
 # 관리자 권한을 부여하지 않을 때.
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/createuser psqluser --interactive
새 롤을 superuser 권한으로 지정할까요? (y/n) n
이 새 롤에게 데이터베이스를 만들 수 있는 권할을 줄까요? (y/n) y
이 새 롤에게 또 다른 롤을 만들 수 있는 권한을 줄까요? (y/n) y
 # SQL을 이용한 사용자 생성
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/psql
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# CREATE USER datauser WITH ENCRYPTED PASSWORD 'password';
CREATE ROLE
postgres=#

데이터 베이스 생성

[postgres@centos7:/home/]$   /usr/pgsql-12/bin/psql
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# CREATE DATABASE data OWNER data ENCODING 'utf-8';
CREATE ROLE
postgres=#

접속 확인

 # postgres 가 아닌 다른 계정으로 시도해본다. 원격지에서도 가능하다.
root@centos7:/home/]#   psql -U dataware -W -h localhost

다음과 같이 입력을 쉘이 변하면 정상 구동 중인 상태

암호:
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# select * from pg_tables;
     schemaname     |        tablename        | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------+------------+------------+------------+----------+-------------+-------------
 pg_catalog         | pg_statistic            | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_type                 | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_foreign_server       | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_authid               | postgres   | pg_global  | t          | f        | f           | f
 pg_catalog         | pg_statistic_ext_data   | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_user_mapping         | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_subscription         | postgres   | pg_global  | t          | f        | f           | f
 pg_catalog         | pg_attribute            | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_proc                 | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_class                | postgres   |            | t          | f        | f           | f
... 중략...
 information_schema | sql_sizing_profiles     | postgres   |            | f          | f        | f           | f
(70개 행)